вторник, 21 сентября 2010 г.

Cyrillic wtf

Нук в русских epub'ах вместо букв показывает вопросики. Если конвертировать через fb2epub.com с внедрением шрифтов, то всё нормально. Но сконвертить таким образом коллекцию Желязны (211 книжек) - это шизануться можно.

Есть fb2epub-0.3.0.jar, но он не умеет шрифты эмбеддить. Я наваял скрипт, который кладёт шрифты и добавляет всё, что к шрифтам относится (подсмотрено из нормально отображающегося epub'а), но Нук всё равно вопросики показывает. wtf?

Хочется утилиту, которая конвертит FB2 в ePUB с добавлением шрифтов. С ходу невыгуглил такую, но, может, кто знает, есть ли такая?

Update: залил шрифтов Liberation по рецепту, наваял башевый скрипт, конвертящий FB2 в ePUB и подменяющий style.css, find ... -exec..., вуаля!

B&N Nook

Сабж пришёл. Пока играюсь. Читать удобно: девайс маленький, лёгкий, е-инк действительно выглядит, как бумага.

пятница, 17 сентября 2010 г.

Всехубьюодиностанусь

Вот люди на Почту РФ жалуются, а мой Nook в сраной Атланте неделю провалялся от Accepted до Dispatched. Ещё через море-океан лететь и таможню проходить... Нет, не успеет приехать до отпуска Ж8-E

четверг, 16 сентября 2010 г.

среда, 15 сентября 2010 г.

Всё фигня, даже пчёлы

Захотелось бросить пару камней в огород Archlinux.

Система маленькой не получилась. Стоит примерно столько же софта, как и в Федоре, "весит" примерно же столько же. Разбиение по пакетам (-devel, -doc, etc), практически, отсутствует, а Федора последний год активно с блобами боролась. В итоге, приходится прилагать усилия, чтобы система занимала хотя бы столько же, сколько Федора.

Скорость системы снизилась до Федоровской. Наверное, выше ext4 не прыгнешь. pacman тоже стал раздражать, задумывается на гораздо дольшее время, чем сразу после установки.

Официальный репозиторий маленький. В AUR софта меньше, чем в Федоре с подключенным rpmfusion, плюс он почти никогда не собирается без проблем. Очень раздражает, когда нужно сию же минуту поставить пакет, а он есть только в AUR, да и то, для галочки. Хуже было только в генте, где даже базовый пакет мог легко не собраться.

Софт старый. В базовом репозитории он обновляется достаточно неспешно, а в AUR полезные и редкие пакеты вообще хрен знает, как поддерживается. Всякая свежая десктопная фигня, которую красноглазые с каждым коммитом в апстриме обновляют, меня не интересует.

YUM в последних федорах более интегрирован и понятен, чем pacman. Сам pacman мало что умеет, а запоминать к нему кучу внешних привесок, их ключей и каких-то форумных рецептов банально сложно.

Система ломается. Нельзя просто так поставить автообновление и забыть про машину. Собственно, что от rolling-based ожидать-то?..

Как enterprise-дистрибутив Arch никакой. Федора вот - энтерпрайз. И Убунту - энтерпрайз.

На Федору обратно всё равно не вернусь. Её тяжело и рискованно каждые полгода обновлять, а инсталлятор далеко не всегда даёт поставить систему. У неё замороченная базовая система, с торчащими ушами legacy изо всех щелей. Её тяжело перестраивать под себя. Она нестабильна. Вернее, становится стабильной только месяца через три после выхода.

Но Arch тоже далеко не идеал :(

Убербыстрый мессейджинг

Наша контора, в числе прочего, делает мегабыструю железку для мессейджинга. Получили первые результаты латентности "драйвер-юзерспейс", т.е. сколько времени нужно между моментом, когда железка отдала драйверу пакет, и моментом, когда пакет увидела пользовательская программа. В 99.9% укладываемся в 99 нс, 99% - 85 нс, 90% - 81 нс, 50% - 77 нс. Через железку, от разъёма до памяти компа пакет идёт ещё где-то 400-500 нс. Итого, юзерспейс обрабатывает полученные данные уже через 0.6 мкс, как первые электроны начали входить в компьютер. Это чертовски быстро! Но у нас есть ещё пара технологий в загашнике, которые снизят латентность ещё процентов на 40.

воскресенье, 12 сентября 2010 г.

Bobrava

Отлично размяли сегодня с Иваном нижние конечности и седалища, помесив грязь в парке Бобрава.

Грязи было уйма, опять резина из 2.35" в 3.0" превратилась и полировала ноги вилки. Но байк грёб хорошо. Поколбасились по диким спускам, пожглись крапивой, дали повод для общения собакам в деревне.

Глядя на наши суровые лица, слыша утробные рыки, когда ноги, рвя вздувшимися мышцами штаны по швам, из очередной болотины выдирали поросшие полуметровым слоем грязи байки и их небритых ездоков, Алонсо решил: "Что я, лох, что ли?", и выиграл Гран-при.

Мои тормоза что-то плохо хватать начали. Вилочного масла (Брунокс), похоже, наелись: я им поршни тормозов иногда смазываю. Надо попробовать роторы и колодки бензином промыть.

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

И шимановский велоботинок один не перенёс тяжёлых условий работы и начал в районе носка отклеиваться. И на сменных линзах шимановских очков начали трещины по переносице идти. И велоодёжку на колючих кустах подрало.

Назревает крупный апгрейд всего и вся :)

пятница, 10 сентября 2010 г.

Документация на API

Пишу сабж в org-mode.

Наш босс в него просто влюблён, делает в нём презентации, планирует, считает статистику, генерит pdf'ки и png'шки.

четверг, 9 сентября 2010 г.

Америка - страна медленно ползущих автомобилей

Разочарование дня: в США детские ограничения скорости. Типично, 65 mph. 104 км/ч...

Зачем там нужны мощные машины - непонятно. И как ехать на далёкие расстояния тоже.

То ли дело Германия... Конечно, там тоже полно локальных ограничений типа 120 км/ч, а летом много дорог ремонтируют, но зато в остальных местах можно легально выжать всю мощь из свежекупленного Порше. Едешь на своей тежелке 160 км/ч, и тут слева что-то жёлтое, ревущее мелькнуло и исчезло за горизонтом.

130 км/ч в Чехии, в принципе, тоже неплохо. Два часа, и в Пражском аэропорту (если пробок нет).

среда, 8 сентября 2010 г.

Безумство вложенного квотирования

Тут с господином swizard'ом мерялись органами, кто лучше в уме раскрывает вложенные квотирования, на которые он жаловался в своём недавнем посте. Без ошибок никто не раскрыл, но надо отдать должное, что он на своих DSL'ях скобоксобак наелся и раскрывает, всё же, лучше :)

Заодно обнаружили, что компиляторы тоже квотирования не очень-то понимают.

Например, LispWorks 6.0.1 такое
(let ((q '(1 2 3)))
  `(a b `(c d ,,@q)))
раскрывает, как
(a b (system::bq-list (quote c) (quote d) 1 2 3))
Непорядочек! Нельзя в readable-форме светить символ из свого специфичного пакета.

Или всеми нами заслуженно любимый SBCL (1.0.42) раскрывает такую форму:
(let ((q '(1 2 3)))
  `(a b `(c d ,',@q)))
вот так:
(A B `(C D 1))
А должен вот так:
(A B `(C D 1 2 3))

И на закуску, как раскрывают 4 компилятора одну форму:
(let ((v '(+ 1 2)))  ``(a b ,,v))

SBCL-1.0.42:
`(A B ,(+ 1 2))

CLISP-2.49:
(LIST 'A 'B (+ 1 2))
ClozureCL-1.5:
(LIST* 'A (LIST* 'B (LIST (+ 1 2))))
LispWorks-6.0.1:
(system::bq-list (quote a) (quote b) (+ 1 2))
Всё это валидные представления одного и того же объекта :) Если их считать ридером любой имплементации CL и сравнить, то будет полное совпадение. Ну, кроме уже отмеченного бага в LW.

Метапрограммирование на Лиспе заводит свою бензопилу и идёт в ваши ночные кошмары.

вторник, 7 сентября 2010 г.

Желтые штаны

Как известно, статус чатланина определяется цветом его штанов. Когда я работал в Red Hat, у меня были такие:

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


На неделе должна прийти :)

Посоветуйте читалку книг

Требования:
  • Внутри Линукс (яДощечка и прочие девайсы с банальными зондами отпадают сразу);
  • E-Ink;
  • Самое малое, 6-7";
  • Wifi обязателен, 3G желателен;
  • Чем больше форматов из коробки, тем лучше;
  • Без привязок к платным книжным магазинам only;
  • До $200 (+/-) с международной доставкой;
  • Желательно, без лишних кнопок на корпусе.
Подходит Nook, но, может быть, есть достойные альтернативы?

понедельник, 6 сентября 2010 г.

CL-ZMQ

В последнее время совсем не занимался сабжем, в git'е последние патчи от других людей. Пора исправлять ситуацию :)

Хочется поломать совместимость со таким образом:
  • Врапперы для foreign-структур делать на лисповых структурах, а не классах.
Эти биндинги делал сразу после cl-v4l2, в котором вагон с тележкой структур video4linux2 были удобно обёрнуты в классы с генерацией акцессоров, автоматически конвертящих foreign типы в лисповые и обратно. В cl-zmq всё гораздо проще, никаких мудростей на MOP не нужно, можно смело менять на структуры. В Лиспе структуры сделаны очень просто и быстро, примерно, как в Си, а объекты классов из-за мощности CLOS гораздо замороченнее. В cl-zmq нужно, фактически, сишный блоб вешать на символ и прикручивать к нему финалайзер.
  • Поменять символы типа rep, req и т.п. на кейворды. 
Такое сделано в форке - acl-zmq -, и оно более lisp-way выглядит.
  • Не сорить памятью в около-poll'ных делах.
Poll делал, как заглушку, чтобы проверить работоспособность. До переделки в нормальный вид руки не дошли.
  • Сделать zero-copy на Лиспворксе.
У меня что-то с коллбэками из libzmq не срослось, но Марк (босс) подсказал, что Лиспворкс поддерживает вызов лиспового кода из нелисповых тредов, поэтому, вкупе с возможностью статической аллокации объектов, нулевое копирование возможно.

API сломаю под общий шумок в 0MQ 3-й версии. Она (версия) надвигается, и, как говорят, API там тоже будет немного сломано.

Если у кого есть идеи и замечания по cl-zmq - велкам в комменты!

суббота, 4 сентября 2010 г.

Язык для быстрого прототипирования

Когда я пишу более-менее нетривиальный код на C или C++, то активно использую блокнот и ручку. Мысль нужно развить, обмозговать варианты, выбрать лучший, выразить в виде высокоабстрактных каракулей на бумажке. Как только начало казаться, что картина сложилась более-менее ясно, то можно браться за код. Код пишется с постоянным подсматриванием каракулей. Если сразу броситься писать код, начав развивать его с первой пришедшей на ум идеи, то разработка быстро встаёт колом, т.к. много синтаксиса на мало идей не даёт мысли лететь вперёд. Нужно много колотить по клавиатуре, заботиться о соблюдении формальностей, работать с придирчивым компилятором. Поэтому за деревьями леса становится не видно. В итоге, конечно, выяснится, что каракули на бумажке все тонкости не учли, и нужно половину написанного кода выбросить и переписать иначе.

Другое дело Лисп! Написание нетривиального кода начинается опять с блокнота и ручки, но, накарябав пару каракулей, думаешь: "Какого чёрта!", и пишешь примерно в тех же терминах каракулей прямо лисповым кодом. Небольшие, логически независимые куски кода проверяются прямо в редакторе (слава REPL'у!), структуры данных меняются и дополняются сто раз в час, прямо по ходу развития мысли и выяснения деталей. Компилятор свободу практически не ограничивает, он спокойно съедает код с явными ошибками, и позволяет вернуться к их исправлению позже, когда более важная работа выполнена. Программа рождается на кончиках пальцев, кои, как известно, являются механическими окончаниями мозга :)

Лисп - язык для практических хакеров, не математиков-теоретиков.

Архив блога