Friday, February 13th, 2009

freerunner такой freerunner!

Появилась мысль, что почтенные вендоры в погоне за потребителем категорически теряют из вида разработчиков. Хотя могли бы и не терять. А навеял эту мысль простой код. Все остальные операции ничуть не более сложны. Сесть, что ли, нарисовать на питоне свою мордочку к FSO?

>>> import dbus
>>> db = dbus.SystemBus()
>>> g = db.get_object("org.freesmartphone.ogsmd","/org/freesmartphone/GSM/Device")
>>> network = dbus.Interface(g,"org.freesmartphone.GSM.Network")
>>> a = network.ListProviders()
>>> for i in a: print "%-15s%-15s%-15s" % (i[2],i[3],i[1])
...
MegaFon RUS    MegaFon        current
MTS-RUS        MTS            forbidden
RUS 20         MOTIV          forbidden
Beeline        Beeline        forbidden
>>>
(number of comments Comments |Comment on this)

Thursday, January 22nd, 2009

слышать, видеть

После некоторого копошения в xlib, удалось написать для jaaa динамическую спектрограмму. Конечно, до кохлеограмм из praat ей далеко. Но это первый шаг на пути к rm -rf ./baudline/. Ну, или к apt-get install sonic-visualizer (когда и если его соберу…) :)))

картинки )
(number of comments Comments |Comment on this)

Tuesday, December 9th, 2008

ccache+distcc

А вот вам Давыдов Харлам:

$ make clean; time make
6.83user 1.48system 0:08.57elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+11256outputs (0major+336673minor)pagefaults 0swaps

$ make clean; time make -j4 CC="ccache distcc"
2.20user 0.91system 0:01.68elapsed 184%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+20952outputs (0major+161930minor)pagefaults 0swaps

Жалко в отделе разработчиков под линукс всего два (пока что), и на двоих три машины (если не считать FreeRunner), итого 6 ядер (в листинге подключены лишь две машины). И это ещё не план, и даже не инферно, но уже кое-что. С миру по нитке — на девяти секундах отыграли семь. Я, правда, компиляцией занимаюсь редко (питон, однако), а вот коллеге жизнь упростили изрядно. В голове забегали крохотные тараканы на тему прикрутить к этой конструкции автопоиск distcc-узлов через ZeroConf mDNS.

(number of comments Comments |Comment on this)

Wednesday, November 26th, 2008

стандарты vs. велосипеды

При разработке протокола иногда встаёт вопрос: найти ли подходящий RFC (и пытаться ли ему следовать), или изобрести свой протокол «с нуля», под свои локальные нужды. Вторая позиция хороша, когда важна скорость прототипизации, т.к. даже простое чтение (порой десятков) RFC способно заставить надолго задуматься. Но следование RFC порой приносит плоды в совершенно неожиданных местах.

В моём проекте есть оба подхода. Транспортный протокол свой, в то время как service discovery и т.п. работает через mDNS. Cегодня мне пришлось писать диссектор для Wireshark под транспортный протокол. И я понял, что время, потраченное на RFC в связи с реализацией подмножества DNSSEC для mDNS, было вовсе не потеряно. Не то чтобы механизм плагинов у Wireshark был сильно кривой, нет. Просто на С, похоже, иначе не пишут.

(number of comments Comments |Comment on this)

Thursday, November 20th, 2008

Boot up, Neo! (выпуск #2)

Чувства по поводу FreeRunner у меня смешанные, как в том анекдоте: тёща, улетающая в пропасть на твоём новом автомобиле. Облегчение с неясным привкусом упущенных возможностей. Короче, чтобы прочувствовать до конца, этим нужно заняться самому.

Пока что попробовал несколько прошивок: OM 2007.2, OM 2008.9, FDOM. Если в 2007.2 авторы ещё как-то придерживались концепции смартфона, там было чертовски мало приложений, но большинство работало и отвечало связно, то к выпуску 2008.8 команда OpenMoko постигла какое-то иноземное дао. Начиная с этого выпуска, прошивки OM используют Enlightenment, самый, пожалуй, инфернальный оконный менеджер. Интерфейс потерял всякую связность, по концепции начал напоминать худшие примеры UI дизайна Garmin, когда три однородных элемента раскиданы по двум разным меню. Местами нужен один клик, местами два. Прокрутка происходит вроде как в iPod, приятно, конечно, но при этом нажимаются все иконки, оказывающиеся под стилусом.

Пприложения сами по себе тоже не подкачали. Из браузеров хоть как-то работает только dillo, который не показывает кириллицу (в ALT, надо отметить, кириллицу он отображает уже давно). Всякие Midori и прочие Minimo не работают at all. Хотя постойте, в Midori мне удалось открыть башорк. Впрочем, изменить размер шрифта не получилось, а прокрутка в очередной раз уронила браузер. Да, и после добавления закладки Midori нужно перезапустить. Иначе закладка не появится в меню. В общем, открыть удалось, а вот прочитать — нет.

WiFi работает, но что уж тут? wpa_supplicant и wireless-tools не могут не работать, коль скоро ядерный модуль достаточно вменяем. А вот графические утилиты, все как одна, функцию выполняют не очень ясную. Та, что по умолчанию, явно для декорации, т.к. очень симпатичная и вообще не работает. Есть одна, которая работает, очень напоминая WinCE, и не только интерфейсно :) при настройке сети она может запросто «зависнуть» на минуту-другую, пока сеть не настроится.

Больше всего огорчило аудио. В 2008.8,9 и FDOM нет вменяемых средств для проигрывания mp3, а качество воспроизведения ogg такое, что собаки окрест начинают выть хором, надрывно и жутко. Какое качество у видео, я уже побоялся выяснять. Зато стабильно и быстро работает python, xterm, ssh. Тут сказалось одно из самых замечательных свойств FreeRunner'а: он работает без sim-карты. Так что впереди — установка Debian и ALT. И пусть весь мир содрогнётся.

(number of comments Comments |Comment on this)

Tuesday, November 11th, 2008

I see the light!

Сформулировал. Даёшь кал (kal) — kernel abstraction layer! Я понял его необходимость, пытаясь с минимальными затратами единообразно управлять сетевыми интерфейсами в Linux и FreeBSD. Этот же кал позволил бы запускать один и тот же хал на разных ядрах. Так, в порядке бреда…

(number of comments Comments |Comment on this)

внутри собаки жуть и мрак

Похоже, любую систему, ориентированную на «рядового пользователя», ждёт судьба висты™, или пресловутый вендекапец™. Даже если это Linux. Это, собственно, тезис.

А если более развёрнуто, то вместо KDE, невозбранно царившего на моём десктопе в течение нескольких лет, я таки пересел на wmii. И понял только одну вещь: я абсолютно не понимаю, как работает и устроено «подкапотное пространство» современного Linux-десктопа. В KDE всё происходит «само»: втыкаешь флэшку — она появляется на панели или рабочем столе, а во всплывающем окошке под рукой окажутся все нужные действия. Например, на вставку чистого CD или DVD вам предложат записать на него данные, музыку, видео… Аплеты на панели следят за батарейкой ноутбука, позволяют регулировать режимы энергопотребления, отправлять машину в sleep/hibernate. Красота. До тех пор, пока что-нибудь не ломается.

Но мир так устроен, что ломается непременно. На этот раз сломалось автоподключение USB-носителей, хотя это могло быть что угодно. Так я понял, заглянув внутрь. Ведь какая была парадигма старых систем, классический UNIX-way? Keep it simple, stupid. Если что-то уже есть, его надо использовать. Например, чтобы выяснить, как завершилась команда, достаточно посмотреть на код возврата. Просто? Чтобы передать потоковые данные в цикл обработки, есть stdin/stdout и конвейер в баше. Одна утилита сортирует, другая фильтрует, третья изменяет. Для ограничения доступа есть права на файловой системе; достаточно представить объект в виде файла, и всё уже готово: и методы доступа, и синхронизация, и контроль доступа.

Вместо этого мы изобретаем DBus (мало было netlink?), HAL (мало sysfs + inotify + netlink? Нет пайпов?), PolicyKit (не хватает acl на FS?). Все эти компоненты, обвешанные новыми, сложными интерфейсами, сильно завязаны друг на друга, и ещё сильнее завязаны на ядро. А окружение рабочего стола жёстко привязано интерфейсами и/или библиотеками к эти компонентам. Т.е., косвенно, к ядру.

Раньше я мог менять рабочий стол как рубашку, «хош так лягу, хош так». Мог ставить версии оконных менеджеров без оглядки на ядро, которое было проверенное, рабочее, и меня вполне устраивало всем, включая поддержку железа. А теперь? KDE, похоже, фтопку. Гном ушёл туда же ещё раньше, т.к. в нём все эти приколы («реестр», глюки с ассоциациями файлов, пропадающие превьюшки картинок) проявились раньше. А KDE4 туда ушёл, как только выяснилось, что нет простого способа поменять ублюдочный чёрный цвет панели.

Могу с тоской констатировать, что Linux-десктоп вполне готов для рядового пользователя. Он работает сам по себе, он не требует настройки (но и не позволяет её делать простыми средствами), радует как домохозяек, так и твик-фриков. А что остаётся белым людям? Белым людям остаётся xmonad, awesome, wmii. Т.к. надо как-то взаимодействовать с железом, то ещё ivman, pmount, powersave. Для динамических менюшек — dmenu, wmii9menu. И ничего, что для работы powersave -U теперь надо от рута говорить # polkit-auth --user pupkin --grant org.freedesktop.hal.power-management.hibernate. Я думаю, что ещё какое-то время продержимся.

(number of comments Comments |Comment on this)

Monday, November 10th, 2008

жизнь и смерть ванильного ядра

Должен признаться, что при всём уважении к [info]k001, я никогда не любил OVZ. Несмотря на то, что идеи namespace'ов выполнения, сетевых, дисковых и т.д., они, в принципе, светлые. Но по старой памяти от VServer, я не верил в виртуализацию таким путём. Более того, меня сильно задевало и задевает вмешательство OVZ в IP-стэк, которое я считаю недопустимым. Хотя тут уже причиной является, скорее кривизна архитектуры IP в ядре Linux. Но это всё лирика.

Кир же не устаёт повторять, что один из самых весомых вкладов OVZ в ядро состоит не в виртуализации, а в тестировании и в ловле блох, которые зело гибнут в архитектуре OVZ. И вот я стал не вполне вольным свидетелем этого. Обновившись из Сизифа (а откуда ещё :), я обнаружил, что в KDE перестали монтироваться USB-устройства. Материалы рассылок подсказали, что новый HAL на старом ядре не умеет работать с USB (какая-то байда, имхо, ибо вербозный фореграундный хал вполне себе реагировал на втыкновение флэша). Ну ладно, попробуем новое ядро, поскольку обычное smp померло, ставлю def… Это ванильное ядро такое. Типа, от Линуса только что.

Батюшки-святы! SATA-винчестеры не монтируются, ни в какую, ide-generic при загрузке вылетел по out of memory (вообще по ту сторону добра и зла), gdm не стартует, иксы запускаются минуту (хотя сеть работает, да-да), а HAL… HAL так и не заработал. Жаль подмога не пришла, подкрепленья не прислали, но остался OVZ, и voila! В нём всё работает, кроме того же многострадального HAL. Даже не HAL, а, как оказалось, сбоит обвязка KDE к халу. Ну да и бох с ней, я уже давно точил зуб на wmii, вот теперь снова уйду из KDE на год-другой, ибо 4й вообще невменяемый никак, а 3й, похоже, отмирает. В общем, OVZ даже на рабочей станции оказался не столь уж и бесполезен, как я считал. Да что там, только он, по ходу, и спас.

(number of comments Comments |Comment on this)

Thursday, September 25th, 2008

userspace firewalls

В голове уже не первый день творился абсолютный хаос, этот хаос настойчиво искал выход. И нашёл его в виде небольшой утилиты, которая кошмарит траффик. В двух словах: программа принимает пакеты из ip_queue, и дропает их, дублирует… Завтра сделаю задержки и перестановки пакетов, а также «убиение» случайных байт (с поправкой контрольной суммы).

Я, конечно же, в курсе fragroute. Но, во-первых, он у меня не собрался (и копаться я не стал, не линкующийся С — это не предел мечтаний пользователя python) (впрочем, это не отговорка: на соседней машине стоит дебиан, а под него fragroute собран), а во-вторых, сотворить такое заклинание самому просто интересно. Хотя бы в плане развития cxnet (в копилку к тикетам и тарпиту)

(number of comments Comments |Comment on this)

Saturday, September 20th, 2008

multi_key

Иногда случается нужда вводить в текст разные странные символы, например «®», ¶, ¼ и тому подобное. Про æ, ÿ, ï, — (длинное тире) я уже не говорю. До сего дня я использовал для этого xml entities (например, « для «), а в OpenOffice.org у [info]tinea вроде даже что-то делали в виде макросов на какие-то клавиши. Теперь этому всему конец, спасибо [info]olpa: таблица символов для multi_key. Быстрый старт: в командной строке набираем $ xmodmap -e "keycode 117 = Multi_key" и после этого жмём подряд (не вместе) виндовую кнопку контекстного меню (у меня она, например, справа от правого альта), затем «.» (точка) и ещё раз «.» Получаем «…» Остальные символы (не всегда совпадающие, впрочем) можно посмотреть по приведённой ссылке.

(number of comments Comments |Comment on this)

Friday, September 12th, 2008

Передо мной лежит бумага примерно следующего содержания: «Сотрудник ОАО "НТЦ ВСП Супертел ДАЛС" Савельев Пётр уполномочен взаимодействовать с мантэйнерами репозитария Sisyphus <skip /> а также передавать им программный код для включения в ПО проектов репозитария Sisyphus (список проектов)».

На самом деле всех, кто успел подумать «ну и бюрократия», спешу отослать к материалам [info]lqp: http://lj.rossia.org/users/lqp/251401.html . А спокойно вздохнувшим после чтения документа сотрудникам ООО "Альт Линукс Технолоджи" я рекомендовал бы обратить внимание на фразу: «однако исключить появление софтверных рейдеров нельзя». На самом деле, на месте [info]aen_ и smi@ я бы озаботился такими же бумажками для всех сотрудников на случай, если известный нам большой дядя, получив вашими усилиями рабочий школьный проект, решит выдавить Альт со сцены. Просто чтобы к сотрудникам никто попусту не приставал.

А [info]lqp — огромное спасибо за очень важную, хотя и, казалось бы, не всегда заметную работу.

(number of comments Comments |Comment on this)

Thursday, August 7th, 2008

mDNS/heartbeat

Небольшой обзор последних изменений в connexion на тему кластеризации (вешаю hook, чтобы не засорять ленту многими буквами). mDNS/heartbeat, всё такое. Кластеризация шагает по коду семибитными^W семимильными шагами :)

(3 comments | Leave a comment)

Wednesday, July 30th, 2008

python hints

Авторам питонических программ на заметку: при разворачивании области памяти в переменные или структуру, модуль ctypes в общем случае работает быстрее, чем struct. Это может быть важно при написании, например, диссекторов для сетевых протоколов.

(Leave a comment)

Friday, April 4th, 2008

разработчик разработчику волк

Не так давно всплыла тема преимуществ приматов над ёжиками разработки в FOSS над проприетарными проектами. А вот сегодня я услышал от коллеги из некоего крупного проприетарного вендора вот такую занимательную историю.

Некая команда разрабатывала некую Java-библиотеку, которая должна была работать, в числе прочего, и на мобильных платформах. Всё бы ничего, но на любую попытку залезть в сеть (а библиотека делала это часто) пользователь видел предупреждение, мол, "некое приложение лезет в сеть". Скажете, нормальная забота о пользователе? О безопасности? Допустим. Кстати, предупреждение это не отключить без прыжков через голову.

Ситуация была, безусловно, неприемлемая. На вопрос к мобильным вендорам "как быть?" был получен ответ: подпишите своё приложение. Тогда пользователь один раз одобрит подпись, и всё будет нормально. Цифровая подпись, заверяющая аутентичность приложения, скажете, также забота о пользователе и безопасности? Допустим и это.

И вот, когда фирма-производитель библиотеки пришла к мобильному вендору за подписью, ей отказали. Так как вендор также разрабатывал похожую библиотеку, и хотел продавать именно её. Мне, в принципе, не жалко фирму-неудачника: с волками жить — по волчьи выть. Ну, а мораль, наверное, каждый вынесет свою.

ЗЫ: любые совпадения с реальными действующими лицами, разумеется, случайны. NDA — ещё одна прелесть проприетарного мира.

(1 comment | Leave a comment)

Monday, March 10th, 2008

веб-мордочка навсегда

Первые наброски навигации: http://peet.spb.ru:8380/dynamic.xml, логин peet:bala. На всякий случай напомню -- в IE не работает и не будет, пока не появится кто-нибудь, владеющий IE в должной мере, чтобы помочь с отладкой. В общем, окошки с Ctrl можно двигать за тушку, с Shift -- изменять размер (если окошко это допускает).

Самое забавное в это даже не исходник страницы, а XSL-преобразование: вот оно. На стороне сервера работает парсер SST, на стороне клиента -- CST, + XML данные сначала обрабатываются XSLT. На вторичных запросах получаем забавную рекурсию :)

UPD: с ужасом выяснил, что по виндами, по ходу, не работает вообще никак. Даже в FF и в Opera. Выясняю причины... И не говорите мне, что лучше было бы взять javeline. Не лучше. Увы, не лучше. Желающим могу объяснить, почему.

UPD2: заработало, слава Ктулху! Ну, и FireBug + DomInspector тоже слава.

(8 comments | Leave a comment)

Thursday, February 28th, 2008

Alopex lagopus (Linnaeus, 1758)

It happens. (Буготак, песня из альбома "Каверлар")

Забиваю гвозди в крышку гроба Konqueror :( Оказывается, это чудо не поддерживает в JS XSLT-преобразований. Никак. Совсем. Такое ощущение, что его разработчики считают преобразования на стороне сервера единственно верным решением. Рано я радовался толковой поддержке XMLHttpRequest и CSS. Особенно тоскливо из-за стилей, т.к. Konqueror поддерживает их заметно лучше, чем Firefox. Еще тоскливо оттого, что из толковой технической документации по конкверу есть только исходники.

(2 comments | Leave a comment)

Saturday, February 16th, 2008

Патенты нас стерегут

Решил таки отметить это и на fossplanet:

В двух словах. Trend Micro подал патентный иск против Barracuda Networks за то, что те используют ClamAV. По мнению истца, ClamAV нарушает патент номер 5623600, описывающий устройство, которое борется с вирусами и спамом, будучи сетевым шлюзом.

Понятно, что это очередной патент на изобретение колеса, но тем не менее, это свидетельство того, как и зачем используется патентная система.

(Leave a comment)

Saturday, February 9th, 2008

копаем лестницу

Иногда кодируешь запоем. Вот и сегодня встал из-за терминала в 8 утра. Сознание изменённое настолько, что привычные слова кажутся странными, приходится весь текст проверять по словарю -- такого со мной не было давно.

А, так из-за чего всё это? А вот: http://peet.spb.ru:8380/ip/ping localhost/dynamic.xml (login: peet, pass: bala). Заработала асинхронная связка connexion <-> web-frontend <-> browser. Виджеты (во имя Гоши) генерятся автоматом, всё это "на лету". XML-шаблоны отображения, с довольно понятным синтаксисом. Хотели прогресс-бары в вебе? Их есть у нас.

И под конец выяснилось, что всё это называется "Ajax". Давно хотел его изучить, а вот поди ж ты, уже использую. Думаю, не попробовать ли connexion как замену zope. Такой вот преемник net-scripts, с позволения сказать.

(8 comments | Leave a comment)

Monday, December 24th, 2007

Про некоторые протоколы

А ещё так говорил Таненбаум: на современных сетях не стоит производительность приносить в жертву надёжности. И я с ним согласен, потому как типичная причина потерь пакетов на wired-сетях сейчас — это обрыв линии. Времена огромных сегментов коллизий и выпадания пакетов в проводных сетях давно прошли.

И так он говорил: протокол должен быть ориентирован на нормальную работу; ошибка должна рассматриваться как ситуация исключительная, и должна обрабатываться отдельно. Это вполне понятно, т.к. вынесение анализа ошибок в исключительные ситуации даёт прирост производительности.

Но вот чего я не понимаю, так это в каком веке застыли комитеты IETF. К примеру, возмём рабочую группу RMT (Reliable Multicast Transport). Ребята работают уже не первый год, и результатом явился целый стэк протоколов (один другого страшнее), и вершиной всего этого — использование FEC! Поясню в двух словах: FEC (Forward Error Correction), это такой способ (избыточного) кодирования информации, когда получатель может восстановить всю информацию при условии утери части пакетов или части битов одного пакета; FEC широко и оправданно используется в беспроводных сетях, будь то GSM или WiFi. И вот, эти черти (RMT working group) рассуждают на тему применения кодирования Рида-Соломона на транспортном уровне!

Удивительный пример заботы в условиях применения RMT, например, в кластерах :) Ни Reed, ни Solomon не спасут при обрыве линии связи. А "выпадения" пакетов на оптике — это уже из ряда вон. В беспроводных сетях же тем не менее: это не задача транспорта высокого уровня. Не царское это дело, пьяных урок шомполами в уши тыкать.

(Leave a comment)

Userspace tarpit #2

Не отрицая тотальной пользы tarpit'а (хотя бы для самолюбия), должен отметить, что есть один надводный камень. Типичная сессия вируса, обращающегося к моему серверу (в норме), выглядит так:

syn ->
    <- rst (port unreachable)

Ну нет у меня MSSQL, AD и прочей атрибутики всем известной ОС. Типичная же сессия вируса к tarpit-enabled машине выглядит так:

syn ->
    <- syn,ack (win 0)
ack ->

(дальше идут разные механизмы тестирования окна, или keep-alive, как делает Linux, или zero window probes, как делают окна)

fin -> (игнорируется) ...

То есть, если имеем один экземпляр вируса в сети, и ловим его на тарпите, это, безусловно, сэкономит трафик. Если же всё не так... Вот цифры. Тарпит у меня спустя неделю держал до 50 тысяч соединений единовременно, и за ночь набегало до 180 мегабайт входящего (вирусного) трафика. Тарпит выключил, входящий трафик (только вирусный) за ночь -- 3 мегабайта. Повод призадуматься. Мой сервер за две недели испытаний кому-то сэкономил немало трафика. Увы, не мне.

(Leave a comment)
Previous 20