Архив за ‘Кодинг’ категория

NVIDIA + RT Kernel

Февраль 27th, 2013

Недавно возникла у меня необходимость собрать RT-ядро, так как всё же лучше пускать сервер Jack под ним.
Само ядро собралось и встало без проблем, а вот с дровами nvidia возникли реальные проблемы. Я, даже было, решил перейти на nouveau, но всё же есть в нём ряд глюков, которые пока не решены, но очень мешают жить.

Теперь кратко о самом патче для драйвера NVIDIA. В RT-ядре семафоры и спинлоки, используемые в драйвере по умолчанию, не канают, поэтому их надо заменить на rt-мьютексы и raw_spinlock_t соответственно. Также в новых ядрах нет определения CONFIG_PREEMPT_RT, т.к. оно было заменено на CONFIG_PREEMPT_RT_FULL. Пришлось потратить пару дней, собирая по крупицам информацию с разных сайтов, чтобы родить рабочий патч.

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

» Читать дальше: NVIDIA + RT Kernel

Почему я не люблю фреймворки

Март 20th, 2012

Вернее, так. Есть фреймворки плохие, а есть фреймворки относительно хорошие. Хороших фреймворков я пока встречал мало.
В моём понятии хороший фреймворк — это библиотека/система, готовая работать 24/7 в течение нескольких лет без серьёзного сбоя.
Под серьёзным сбоем понимается сбой в работе приложения, после которого невозможно восстановить изначальный цикл его функционирования без перезапуска, а также утечка памяти.
Под нормальными сбоями я понимаю такие ситуации, как обрыв сетевого соединения, временная нехватка места на файловой системе, некорректный формат подаваемых на вход данных или иная временная занятость некоторого ресурса.

Теперь более подробно рассмотрим вопрос применительно к тем Java-фреймворкам, которые приходится часто юзать.

К относительно хорошим фреймворкам относятся java-библиотеки производства Apache. Код в них вылизан достаточно качественно, можно ловить все нештатные ситуации.

К совершенно плохим фреймворкам относится Hibernate. Эта сука готова жрать память до посинения, а также время на выполнение кучи однострочных SELECT’ов для выдёргивания массивов объектов из БД.

Также к хреновым фреймворкам относятся JDBC-драйверы Oracle. Есть у них такое поганое свойство, как мёртвое зависание на socketRead0, например, и баги с байндингами. Это, конечно, решается, но только плясками с бубном.

Относительно хороший фреймворк — это Ganymed SSH. Если бы не некоторые косяки опять же с тем же socketRead0, зависание на котором ну никак не отловишь без бубна, было бы вообще зашибись.

А вот ещё один хреновый фреймворк, к сожалению, — это Hyper SQL Database. Очень много багов, когда возникает необходимость держать эту базу 24/7. Подтверждение тому — ряд багов, созданных мной в рамках разработки одного-единственного проекта:
OutOfMemory error
Integrity constraint violation
SQLException with NullPointerException in cause
Invalid sequence number generation on UPDATE in MERGE stmt
Perfectly invalid date/time truncation in TRUNC() function
PSM (PL/SQL) routines do not see variables in MERGE statement

При этом задача примитивнейшая: по входным данным посчитать в БД статистику (через несколько инструкций MERGE) и сохранить в таблице, а потом её же выгрузить SELECT’ом в файл.

Sequoia — вообще непонятно зачем создан и для кого. Ужасный фреймворк, о нём я писал раньше: 1, 2, 3, 4.

Ну, и сама Java Virtual Machine — относительно хороший фреймворк. Сбоит хоть метко, но редко, и то ненамеренно положить удавалось только отдельные версии jdk.

Памятка разработчикам фреймворков…

Февраль 14th, 2012

Совсем немного о кодинге.

Дорогой мой разработчик! Если ты написал мегаопупенный фреймворк, который считаешь полезным для множества людей, пожалуйста, учитывай следующие возможные события:
- Разруливание ситуаций с падением потоков по unhandled exception;
- Гарантию освобождения объектов синхронизации от блокировок в случае падения отдельного потока;
- Подвисание сетевого соединения между взаимодействующими сторонами.

Если ты не учёл хотя бы один из перечисленных пунктов, то ты — мудак, а твой фреймворк — говно.

Как же правильно рисовать иероглифы?

Март 19th, 2011

Я решил следовать современным тенденциям HTML5 и прикрутил к сайту http://kanji.xskernel.org/ возможность рисовать иероглифы.
Вернее, рисовать-то могу их только я, а вот остальные могут посмотреть, как правильно следует соблюдать порядок черт при изображении конкретного символа.
Конечно, сейчас выглядит всё достаточно схематически, но уже заметный прогресс налицо. Тем не менее, это на порядок лучше, чем рисовать к каждому иероглифу GIF-файл. В среднем, на аккуратную отрисовку одного подобного иероглифа уходит где-то от двух до пяти минут.

Итак, знакомимся. Перед вами один из иероглифов, обладающий достаточно большим количеством черт, который я специально подобрал для демонстрации.
Иероглиф записывается как 電, имеет только одно онное чтение デン [den], кунных чтений не имеет. При использовании в качестве корня слова означает молнию, электричество. Ключом к этому иероглифу служит другой иероглиф 雨, означающий дождь. Собственно, по нему его и можно найти в словаре иероглифов на сайте.

Ну а черты рисуются в следующем порядке (ЖЖ не позволяет вставлять iframe):

Что же касается браузеров, то Google Chrome, Konqueror, Mozilla Firefox и Opera, вроде, грамотно отрисовывают всё. Насчёт Internet Explorer — не знаю, у меня на trial-венде в виртуалке стоит только восьмая версия (и обновляться пока нельзя), а восьмёрка тег <canvas> не умеетЪ. Microsoft, как всегда, «идёт в ногу с технологиями», ну да ладно, хрен с ними. Если вы фанат Internet Explorer и не обновились до девятой версии — то, видать, не судьба.

Продолжаю развивать проектик.

Май 22nd, 2010

Собственно, как и было сказано ранее, я для упрощения изучения японского языка сделал такой вот сайтец — http://kanji.xskernel.org/. И обещал обновить его структуру. Сегодня залил свежий движок на пропатченную базу. Теперь осталось выпилить из базы лишние таблицы, которые уже не играют никакой роли. Наконец-то заработал словарь, который по мере изучения мною языка потихоньку пополняется новыми словами. Идею, предложенную товарищем stalkerg я постарался воплотить по-максимуму. А именно: сделал возможным поиск слова не только по кандзи, но и по фонетической составляющей (то есть, можно вписать слово каной либо ромадзи, при этом добавлена ещё одна фича: если вы не знаете, является гласный звук долгим или коротким, то словарь выдаст вам оба результата, если все гласные звуки будут введены как короткие).
Соответственно, раньше движок задумывался как запоминалка канзди, теперь же он всё больше и больше становится полноценным словарём, поэтому возможна трансляция как из японского в русский, так и из русского в японский. Единственное, что меня пока смущает, — это дополнения к слову. Их, скорее, следует переделать (вернее группировать), и я уже примерно представляю как. Но это позже. Сейчас меня больше беспокоит отсутствие админки, ввиду чего данные мне приходится пока по-прежнему вбивать специально написанными консольными скриптами.
Также в самом движке добавил задел на поддержку не только СУБД MySQL, но и СУБД Firebird. Если будет время — обязательно продолжу развитие движка в этом направлении. В общем, планов море, а времени и сил — чуть.
Опять же, если есть какие замечания/пожелания по поводу сайта, прошу писать отзывы.
И, напоследок. В процессе написания движка сайта (а пишется он на PERL), мне пришлось решить ряд задач, о которых могут выйти вполне интересные статьи. Если аудитории интересно — то я могу потихоньку выкладывать тут упрощённые кусочки движка с объяснением, как это работает. Заодно и блог оживёт, пожалуй.

五十音:片仮名、平仮名、ローマ字

Март 30th, 2010

Написал небольшую игрушку для интерактивного выучивания таблицы годзю:он (五十音) на JavaScript.

Сама по себе она напоминает игрушку на память: собирать пары совпадающих ячеек до тех пор, пока все пары не будут собраны. Идея состоит в том, что в качестве пары выступают слоги из разных слоговых азбук. Вернее, в разном представлении. Доступны следующие ассоциации пар:

  • катакана — хирагана (片仮名 — 平仮名);
  • катакана — ромадзи (片仮名 — ローマ字);
  • хирагана — ромадзи (平仮名 — ローマ字)
  • катакана — поливанов (片仮名 — キリル文字)
  • хирагана — поливанов (平仮名 — キリル文字)

То есть, например, для пары «катакана-хирагана» слоги «a, i, u, e, o» будут иметь ассоциации «ア <-> あ», «イ — い», «ウ — う», «エ — え», «オ — お».
Играть можно как в простом режиме (easy), так и в сложном (hard). В первом случае все ячейки со слогами открыты. Во втором случае — скрыты, то есть если слоги в ячейках не будут совпадать, содержимое ячеек будет скрываться, а открытыми будут оставаться только уже найденные пары.
Также можно выбирать перечень разучиваемых слогов (ставить галочки напротив определённого слогового ряда). Если много галочек ставить лень — можно воспользоваться предустановками, среди которых есть:

  • выбор всех доступных слогов;
  • сброс всех доступных слогов;
  • выбор только слогов таблицы годзю:он;
  • выбор только слогов, которы были получены путём озвончения — нигори (濁り) — или оглушения — ханнигори (半に濁り ?).

Ссылка на игрушку здесь (распространяется по лицензии GPLv2):
http://kanji.xskernel.org/?target=gojuon.

Приятного времяпрепровождения! Если есть замечания, исправления, предложения или пожелания — пишите :) .

Типа соцопрос :)

Март 10th, 2010

Интересно, с какой вероятностью вы можете с первого раза определить местоположение и характер косяка в коде :) ? По моему опыту получается где-то больше 70% в своём коде, больше 40% в чужом.

VSFTPD — такой ли секьюрный?

Январь 26th, 2010

Сегодня разочаровался в моём любимом Very Secure FTP Daemon.
Произошло это, когда мне нужно было реализовать что-то вроде RandomAccessFile, работающего по FTP. И когда я дошёл до seek-операций, обнаружил, что vsftpd некорректно отрабатывает пару команд REST + STOR. А именно, открывает файл всегда в режиме O_APPEND, о чём с горестью сообщает manpage:
» Читать дальше: VSFTPD — такой ли секьюрный?

For fun.

Ноябрь 20th, 2009

Совсем недавно приходилось решать интересную задачу по Unix:
Фактически нужно было разработать демон simple-telnetd на языке Perl, позволяющий удалённо запускать некоторое ограниченное подмножество команд и выводить пользователю результат их выполнения.

  • simple-telnetd может запускать только разрешенные программы, которые перечислены в файле /etc/simple-telnetd.conf. Демон должен перечитывать этот файл и обновлять список разрешенных программ после поступления сигнала SIGHUP;
  • Запускаемые программы могут иметь параметры командной строки, но simple-telnetd не должен поддерживать интерактивного взаимодействия пользователя с запускаемыми программами;
  • Демон не обязан обрабатывать спец символы: ^C, ^D, и т.д.
  • В качестве параметра командной строки simple-telnetd может передаваться параметр timeout — максимальное время выполнения одной команды;
  • Желательно чтобы демон мог прослушивать не только tcp сокеты, но и локальные (например /tmp/simple-telnetd);

В конце-концов, скрипт всё же не пригодился, поэтому, чтобы компенсировать потраченное на него время, выкладываю его тут — вдруг, кому пригодится. Забрать его можно по этой ссылке.
simple-telnetd.tar.gz
Если кому-то помогло, пишите, не стесняйтесь, буду рад :) .

Поскольку я писал этот демон с особым энтузиазмом, не обошлось без фич, которых нет в исходном задании: написал init.d-скрипт для службы, который успешно был протестирован в openSUSE Linux, оформил perldoc и manpages, сделал возможность интерактивной авторизации, ну и другая мелочёвка (уже даже и не помню какая) вдовесок.

Вопрос по OpenOffice.org

Ноябрь 15th, 2009

Кто-нибудь знает, есть ли в OpenOffice.org Base что-нибудь вроде «Мастера подстановок» из MS Access?
Ибо фича удобная, и воспользоваться ей очень хотелось бы.
Я смог решить пока проблему через формы, но хотелось бы обойтись без них.
Есть идеи?