Posted on 31-Dec-2011 at 13:31:51 Год выдался просто ураган. Первая его половина проходила увлекательно, я бы даже сказал - восхитительно. У меня появилось новое увлечение, которому я с удовольствием отводил значительное время. Я познакомился со многими интересными людьми. Я устроился на работу, где я и сейчас с удовольствием работаю.
В середине года я начал работать больше, времени у меня на себя оставалось всё меньше, и к концу года его практически вообще не осталось. Зато я стал регулярно посещать тренажерный зал, за соответствующий волшебный пендель снова благодарю своих коллег.
Вторая половина года в целом не выделялась чем-то особенным.
Чего я жду от нового года? Прежде всего, перемен. Конечно, глупо просто сидеть и ждать их, надо что-то делать, но вот что и как -- я ещё не придумал.
Желаю всем определиться со своими целями в новом году и благополучно их достичь.
Posted on 31-Dec-2011 at 13:29:37 В декабре я работал, работал и работал. А ещё начал вплотную заниматься штангой к концу месяца.
В последний день уходящего года купил себе Tamron 90/2.8, снимать усы своего кота.
Posted on 31-Dec-2011 at 13:24:55 В ноябре я работал, работал и работал. Где-то в середине месяца съездил в Зеленоград по делам, только и всего.
А ещё написал кучу тупых хаутушек (см. ниже), вдруг кому будет полезно.
Posted on 28-Nov-2011 at 13:15:54 Тернист путь разработчика-бздуна к успеху.
Во первых, после установки Qt из pkgsrc систему нужно немного настроить, ибо пути к кутешным бинарям в PATH никто не добавлял, и переменную QTDIR тоже никто не устанавливал. Это вам не линакс!
Поэтому открываем файлик ~/.profile своим любимым текстовым редактором, и куда-нибудь в начале (до установки PATH) пишем:
export QTDIR=/usr/pkg/qt4
И потом, сразу перед строчкой, где экспортируется переменная PATH, добавляем
PATH=${PATH}:${QTDIR}/bin
Отлично, теперь в последующих сеансах мы можем обращаться ко всяким qmake-ам из окружения по-умолчанию. Ваши проекты начнут собираться, но вероятно полученные исполняемые файлы не будут запускаться, ругаясь, что некий "Shared object libSM.so.7 not found". Все не найденные динамические библиотеки можно будет посмотреть в выводе ldd для вашего файла.
Если туда входят Xrender, expat, freetype, ICE и прочие иксовые потроха, в файл проекта Qt (*.pro) надо добавить строчку
QMAKE_RPATHDIR += $$QMAKE_LIBDIR_X11
а потом сгенерировать Makefile заново и пересобрать проект. Всё должно встать на свои места.
Решение найдено в списке рассылки.
Posted on 28-Nov-2011 at 6:39:31 Казалось бы, что может быть проще сборки приложения из его репозитория? Скачал зеркало или снапшот, накатил зависимостей, потом
autoreconf -fvi && ./configure --prefix=/opt && make и дело в шляпе.
Как правило, в нормальных ОС так оно и есть. Однако, доминирующее положение на рынке до сих пор занимает куда более нетрадиционная система, и имя её всем известно.
Нетрадиционная система нетрадиционна во всём -- и окончания строк-то у неё иные, и окружение по-умолчанию ущербное, и тд и тп.
Сегодня я поделюсь своим опытом сборки FreeSWITCH под Windows. Официальная документация умалчивает некоторые каверзные моменты, да и документов по сборке на русском я ещё не видел (может быть, плохо искал).
Получение исходного кода
Для начала нам понадобится клиент Git для Windows. После его установки открываем "Git Bash", переходим командой cd в нужную директорию, куда будет качать снапшот. Стоит отметить, что в этой черной консольке эмулируется Unix-окружение со всеми вытекающими -- там есть и grep, и sed, и awk, и все-все-все. А ещё там используется стандартная для Unix схема организации иерархии файловой системы (не знаю, как это выразить лучше по-русски), так что вместо привычного пользователям Windows "C:" в путях к файлам вы увидим "/c/".
В общем, я решил качать исходники в директорию "/d/src" на своём компьютере, которая в Windows видна как "D:/src".
Нетерпеливый читатель, который сам всё знает, наверно сразу набрал заветную команду "git clone ...", чтобы скачать исходники. А вот нет! Так делать не надо, и сейчас объясню почему.
Как я уже сказал, в разных ОС используются разные символы для обозначения окончания строки. В Unix это просто символ "0x0A" (LF, linefeed), а в Windows -- аж два символа, "0x0D0A" (CRLF, carriage-return linefeed). Заботливый Git знает об этом, и по-умолчанию при клонировании репозитория (или же загрузке обновлений в него) осуществляет конвертацию окончаний строк в родные для данной ОС.
Всё бы хорошо, только вот в хитрой системе сборки FreeSWITCH некоторые исходники предварительно обрабатываются программой awk, и замена окончаний строк тупо ломает некоторые скрипты, и в итоге сервер не собирается вообще. На официальной вики об этом, конечно, написано, но только после того, как дана команда качать исходники :)
Эту операцию конвертирования, конечно, можно отключить в настройках. Как известно, в git настройки могут быть как глобальными для всех репозиториев, так и персональными для каждого.
Глобально отключать эту фичу я не хочу, т.к. массе моих проектов оно не мешает, поэтому делаю следующий финт:
$ mkdir freeswitch
$ cd freeswitch
$ git init
$ git config core.autocrlf false
$ git remote add origin git://git.freeswitch.org/freeswitch.git
$ git pull origin master
Что тут сделалось? Я создал пустую директорию, создал в ней пустой репозиторий, выключил в нём конвертирование, добавил репозиторий FreeSWITCH как "origin" и выкачал оттуда код. Теоретически, можно было поступить и иначе -- глобально отключить конвертацию, выполнить клонирование репозитория, глобально включить конвертацию и локально выключить её для репозитория. Результат в целом должен быть тот же.
Сборка
Сразу скажу, что я использую не распоследнюю версию FreeSWITCH, а довольно специфичную -- я буду вести свою бранчу, основанную на коммите
8f15bc7b45ade9e3737757be90b248c74828f414
времён конца августа'2011, потому что так надо. Описанный ниже процесс сборки будет применим и для распоследней версии (я надеюсь), могут измениться версии зависимостей.
Нам понадобится VC++ 2010 Express, которую можно свободно скачать с официального сайта.
После установки опционально ребутаем компьютер, потом запускаем VC++, открываем в ней файл "Freeswitch.2010.express.sln", который объединяет в себе все студийные проекты FreeSWITCH. У меня при этом студия (хоть VC++ Express некорректно называть студией, но я так привык за много лет) ругнулось, что мол некоторые свойста проекта прочитать не смогла. Судя по всему, это не критично.
Следующим делом надо сменить конфигурацию сборки с "Debug" на "Release" в специально отведенном для этого выпадающем списке на панели инструментов где-то сверху -- отладочная информация, включаемая в исполняемые файлы при использовании "Debug", мне на данном этапе не нужна.
Готовы? Теперь жмём F7 или "Build Solution" из меню "Debug". По истечении некоторого времени FreeSWITCH будет собран. Если один из 141 компилируемых проектов у вас не собрался, это, скорее всего, mod_managed -- для поддержки расширений на дотнете. Он не собрался, потому что для него нужен дотнет и компилятор сишарпа. Мне он не нужен, а если вдруг понадобился вам -- по ссылке есть инструкции.
Сегодня сборка у меня прошла удачно. Но вот в прошлый раз, когда я сидел на убертормозном соединении с Интернетом (меньше 2 КБ/с), я огрёб несколько неприятных проблем, о которых тоже тут расскажу.
Вот что может вас ожидать:
- Где-то посередине сборки студия ругнулась, что ``7za.exe не является исполняемым файлом''. Находим в директории "libs/win32" указанный исполняемый файл, запускаем его вручную, получаем то же самое сообщение. Либо скачался битый архив, либо ещё чего, в общем решается эта проблема просто и брутально. Ставим 7-Zip, берём из установочной директории файл "7z.exe", и подкладываем его в "libs/win32" вместо того проблемного (заранее переименовав). Всё.
- Не собираются различные проекты-зависимости. На медленном соединении серверы, с которых во время первой сборки происходит скачивание зависимостей, могут разрывать подключения по истечении какого-нибудь тайм-аута, или им просто надоедает стравливать большие файлы со скоростью в пару килобайт в секунду. В этом случае в директории "libs" наберется куча архивов, которое невозможно будет открыть. Ничего не остается, как вручную выкачать какой-нибудь более стабильной качалкой зависимости требуемых версий с используемых при сборке зеркал (их можно подглядеть в окне компиляции "Output"). Разумеется, потом все скачанные зависимости надо будет распаковать там же, в директории "libs".
Заключение
Собранный и готовый к использованию FreeSWITCH, со всеми своими модулями, конфигами и звуковыми файлами, будет лежать в директории "Win32/Release". Для запуска в продакшн осталось только поудалять оттуда многочисленные файлы типа *.pdb, *.lib и *.exp -- для работы самого сервера они не нужны.
Стоит отдать должное разработчикам, ибо в отличие от многих, даже больших и популярных проектов, FreeSWITCH собирается и работает в Windows почти без проблем.
Posted on 26-Nov-2011 at 14:41:31 Я, как и многие другие, использую для большинства своих (и не только своих) проектов систему контроля версий Git. Разумеется, основным способом интеракции с гитом является ядреная консоль, в которой я и делаю все основные операции - бранчую, коммичу, пушаю, мержу, инспектирую диффы.
Восприятие таких объемов разношерстной текстовой информации в терминале заметно улучшается с использованием подсветки. Да! Как бы ни смешно это звучало, некоторые не знают о том, что многие выхлопы гита поддаются раскраске, и что не надо лезть в git[gk], чтобы посмотреть всего-навсего изменения в коммитах в приятной для глаз форме.
Счастье наступает после выполнения заветной команды:
git config --global color.ui auto
В современных линуксах дополнительный бубен после этого не требуется -- выхлопы diff, status, log и прочих команд сразу заблещут новыми красками.
Однако, в моей любимой ОС потребуется немного напильника: вывод как минимум git diff мало того, что останется монохромным, так и будет засорён многочисленными отображаемыми escape-последовательностями, которые должны были задать цвета, да не задали и напечатались сами.
Решается это очень просто. В файле .profile, который находится у нас в домашней директории, меняем значение переменной PAGER на less:
PAGER=less
...и строчкой ниже пишем:
LESS="-rQ"
Всё! Дальше пойдёт моя графомания, её можно не читать.
Что это было?
Выхлопы проблемных команд, таких, как git diff, git log и прочих, обычно занимают много места, не влезают в экран и требуют всяких фич вроде постраничной прокрутки, локального поиска и т.п. Чтобы не реализовывать этот функционал каждый раз, в лучших традициях Unix-вея используется классический конвеерный подход - от определенной команды требуется получить только текстовый вывод, а операции по представлению его на экране и навигации берёт на себя уже другая программа. По такому же принципу работает man: одна программа осуществляет распаковку справочной страницы, другая -- форматирование, третья -- вывод на экран.
Естественно, всё это дело настраивается, и имя программы, которое будет использовано в таких конвеерах для вывода на экран, указывается в переменной окружения PAGER.
Пейджеров исторически сложилось два. Первый, more, не умел прокручивать текст назад, только вперёд, поэтому был написан второй, less, в котором и была реализована столь необходимая функциональность.
В NetBSD разницы между more и less нет, потому что more -- это второе имя less (в этом можно убедиться, сняв хэш-суммы от обоих файлов из /usr/bin). Так что первая правка в .profile просто устраняла неопределенность.
В переменной окружения LESS, как читатель, наверно, уже мог догадаться, задаются параметры, с которыми будет запускаться less. Самый важный из указанных -- r -- просит пейджер не экранировать управляющие последовательности, а выводить их как есть -- чтобы вышестоящая инстанция их увидела "как есть" и раскрасила текст соответственно. С ключем Q пейджер перестанет пищать навсегда.
Posted on 19-Nov-2011 at 17:03:15 Вот уже почти два года я являюсь гордым обладателем нетбука Compaq Mini 311c. Машинка с уникальными для своего времени характеристиками умудрилась морально не устареть за эти два года (!). Ну, подумаешь, работает не больше четырёх часов от аккамулятора, да штатный винт подох где-то летом. Четырёх часов мне обычно хватает, винт заменил на SSD, живём :)
Все эти джва года на нетбуке царил полный Debian. Начиналось всё, вроде, с Lenny, потом Squeeze, и вот сейчас Sid. И всё это время для работы Wi-Fi (на базе Broadcom 4312) я использовал ndiswrapper, и не видел в этом ничего плохого. Работало и ладно. Правда, периодически соответствующий модуль ядра отказывался собираться после апдейтов, но это обычно быстро фиксилось. Да и в целом было не критично - вафлю я использовал раз в полгода, когда сидел в каком-нибудь ТЦ, а в основном выходил в интернеты с USB-свистка.
Потом появились все эти firmware-b43-installer'ы и прочая фигня, которая вроде у кого-то и работала, но не у меня. Продолжал сидеть на ndiswrapper.
Буквально сегодня обновил ядро до 3.1. Несчастный модуль ядра не собрался. Решил ещё раз погуглить об альтернативах, и внезапно нагуглил вот это. Где же я был эти два года! Оказывается, нативные драйверы можно было стянуть непосредственно от произодителя. Стянул, собрал, поставил, завелось. Автор, больше тебе человеческое спасибо!
Posted on 19-Nov-2011 at 16:54:50 Данный пост не претендует на звание полноценного руководства, скорее так, просто небольшой очерк о том, как я себе русский язык запилил.
Локаль и клавиатура
После установки в моей системе использовалась локаль "C". Не знаю, почему так, но в некоторых (да почти во всех) графических приложениях в связи с этим проявлялись всякие глюки. В Pidgin, например, в многопользовательских чатах дополнение ника по Tab работало криво, если ник был кириллическим.
Решается подобное установкой корректной локали и кодировки. Т.к. русский язык в пользовательских интерфейсах я на дух не переношу, я всегда сижу в английской локали. Кодировкой была выбрана UTF-8, ибо модно и все дела.
Вся настройка заключается в выставлении значений двух переменных окружения:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
Эти команды надо расположить в таком месте, откуда они бы выполнялись всегда (или почти всегда) при входе в систему. Почему? Потому что порожденные процессы в Unix наследуют окружение родительских процессов.
Я добавил их в ~/.xinitrc, в место после окончания стандартного шаблона и до запуска оконного менеджера и ко. Подробнее об этом можно почитать вот тут.
Что же касается клавиатуры, тут всё просто:
setxkbmap "us,ru" ",winkeys" "gtp:alt_shift_toggle"
туда же. У меня оно выполняется в цепочке с амперсандом, непосредственно до запуска оконного менеджера.
Шрифты
У меня порой складывается такое впечатление, что с кириллическими шрифтами из-коробки в NetBSD хуже всего. По умолчанию привычные вещи выглядят как-то так (осторожно, глаза!). Лечится это довольно тривиально:
- Ставим TTF-шрифты с поддержкой кириллицы. DejaVu должно хватить:
$ cd /usr/pkgsrc/fonts/dejavu-ttf
$ make install clean
- Указываем на них фонтконфигу. Fontconfig -- это поделие Кейта Пакарда для настройки и доступа к шрифтам на уровне системы. В файле
/etc/fonts/fonts.conf ищем записи вида <dir>...</dir> (они расположены на самом верхнем уровне вложенности документа, после большого коммента) и добавляем туда:
<dir>/usr/pkg/lib/X11/fonts/TTF</dir>
- Обновляем кэш фонтконфига:
# fc-cache -fv
- ...и не забываем выставить нужные шрифты в настройках браузера и темы gtk. Для последней можно использовать утилиту
gtk-chtheme (есть в pkgsrc).
Глаза спасены :)
Posted on 19-Nov-2011 at 16:07:55 Самым знаковым событием октября было приобретение нового компа, чему и посвящен весь этот пост.
Начало
Как я уже писал в предыдущем посте, в сентябре мой верный друг и помошник, мой первый ноутбук приказал долго жить. Мучать труп дальше мне не очень хотелось, а работать на конкретной ОС нужно было здесь и сейчас. Так что в конце месяца я полез на ситилинковский конфигуратор и уже через несколько часов оплатил железо.
До этого домашний компьютер мы покупали только в далеком 2003м году. Тогда (по крайней мере, в нашем социальном слое) компьютер дома еще не был обыденностью, и приобретение такого девайса было событием.
Сейчас же все изменилось. Техника стала доступнее, сервис - удобнее; компьютеры стали неотъемлемой частью нашей жизни. Компьютерные салоны вытесняются компьютерными супермаркетами, при входе в которые уже не испытываешь тот благоговейный трепет, а просто идешь и покупаешь то, что нужно, как какую-нибудь там колбасу.
Покупка
Впрочем, я немного отвлекся. Так как на компьютере планировалось использование Вполне Конкретной ОС, встал вопрос о выборе вполне конкретного железа, на котором эта самая ОС и заработает. Выбирал я преимущественно бюджетные компоненты, ибо играть или что-то рендерить на машине не планировалось, а самыми ресурсоёмкими задачами представлялись компиляция и ретушь фотографий. Так, например, я пожадничал даже на i3 и выбрал старый C2D, не побрезговал материнкой с интегрированным видео (да они ж дешевле, чем без видео!), даже не стал брать большой винт, ибо у меня их и так имеется.
Не долго думая, я решил попросить покритиковать конфигурацию у экспертов в Google+, благо круг "NetBSD" у меня довольно активный и пара-тройка кернел-хакеров там постоянно тусуется. Отликнулся Jonathan Kollasch -- он заметил, что с Intel G41M придется немного попыхтеть, ибо оно требует поддержки DRM GEM, но есть один энтузиаст, у которого есть патч, который делает хорошо. Такой расклад вещей меня вполне устраивал, поэтому конфигурация осталась почти без изменений - только нарастил памяти по совету товарищей с жуика. Гулять, так гулять!
Т.к. я был в то время (впрочем, как и всегда) очень, очень занят, я за символическую плату возложил хлопоты по сборке и доставке этого всего добра на плечи Ситилинка.
Знакомство
Через несколько дней мой новый кореш прибыл. Что я сделал с ним первым делом? Правильно, разобрал! Тут надо отдать должное - ситилинковцы собрали грамотно, провода организовали аккуратно, всё чинно-благородно, ни капли халтуры.
Первым делом я решил приладить в новый системник свой винт со старого компа, ибо наученный горьким опытом я знаю, что безболезненней и проще всего обеспечить совместное проживание NetBSD и GNU/Linux, поселив их на разных накопителях. Благо, приглянувшаяся мне MSI-шная материнка славилась поддержкой legacy-стаффа, и проблем с втыканием туда IDE-винта не возникло.
Squeeze с флешки установился и взлетел, как родной. Причесал оттуда свой старый диск, забекапил кое-что и подготовил место для Вполне Конкретной ОС.
Установка NetBSD
Я всегда хотел потыкать порт amd64, благо сейчас железо это позволяет. А ещё недавно в G+ проскакивала информация, что исошку NetBSD можно, как и дебиановскую, dd-нуть на блочное устройство и дело в шляпе. Не знаю, ЧЯДНТ, у меня такая не забутилась. Не забутились толком с флешки и образы через связку syslinux/grub4dos. Даже, блин, фокус с установкой на винт непосредственно из QEMU под 32-битным дебиановым хостом не прошёл! Оставался один, старый-добрый выход -- прожечь образ на болванку установить традиционно.
От старого компа у меня оставалась пара приводов, раритеный 52-двухскоростной CD-ROM LG и более унылый всеформатный резак от Pioneer. Оба, разумеется, IDE. Выбор пал на первый :)
Так уж получилось, что свой старый IDE-винт в новом системнике у меня расположился снизу, на шине он мастер, а разъем для слейва, по середине, явно не дотягивался до 5.25" лотков в верхней части корпуса.
Пришлось выкручиваться:

Версия по-больше, 92K
Да, снаружи. Да, под приводом -- банан :) Зато система поставилась нормально.
Грабли
После установки стейбл 5.1 отказался грузиться с ACPI. К этому я был морально готов. Так же не подхватилась гигабитная карточка Atheros AR8131 -- вот к этому я готов не был. Пришлось идти в магазин за сетевым адаптером с поддерживаевым чипсетом. Одним из таких оказался какой-то там D-Link за копейки на базе Realtek 8139. Подхватился прекрасно, да ещё и в стену светит ярко зеленым светодиодом - сплошной профит!
Иксы, как и ожидалось, не запустились, и я пошёл обновляться до -current, чтобы накатить патчи для DRM.
Накатил. Собрал. Работает! Правда, дело это пока крайне нестабильно, по первости иксы то и дело падали или корраптились, понаоткрывал Грегуа (?, Gregoire) несколько тикетов на гитхабе. Он пофиксил какие-то лики, так что на сегодняшний день всё относительно стабильно, и основная проблема - это глюки после переключения с иксов на виртуальную консоль и обратно.
Всё остальное, вроде как, работает. В -current подхватился и гигабитный Atheros (но D-Link-овская карточка светит ярче, на ней и остался), и с ACPI система грузится замечательно. Не падает. Система получилась полностью самосборной, что не может не радовать :)
Ах, да. На -current amd64 у меня, и ещё у некоторых ребят не собирается Emacs. Т.е. собираться-то собирается, но вот при компиляции el-ек падает в корку. Я остался без любимого редактора, джаббер/irc-клиентов, органайзера и плеера. Плююсь, юзаю gvim, эмоции крайне отрицательные.
Заключение
При должном запасе терпения, энтузиазма и правильном (читайте - "своеобразном") подходе NetBSD вполне пригодна для использования в качестве основной ОС на домашнем ПК. Система, которая ведет себя предсказуемо, в меру консервативная, с приятным для чтения кодом и убийственной простотой в основе всего - не это ли счастье? :) К слову, при всём моём уважении к Debian, у дуалбутного анстейбла внезапно сломался fvwm и что-то там ещё - а ведь я в него логинился то всего пару раз, и то по мелочи.
Posted on 5-Nov-2011 at 3:56:42 Рабочее
В сентябре удалось посетить конференцию "разработчиков ответственного ПО", проводимую в Москве компанией AVD Systems. Проходило сие действо в отеле "Аэростар", участие принимали три компании - Wind River, AdaCore и Esterel.
C Wind River и их продукцией я знаком еще со времен работы в Мере. Кристиан Зигл и Йоахим (фамилию запамятовал) в трех актах рассказали о компании в целом (в фактах и внушительных цифрах), о их продуктах с технической точки зрения (я наконец-то уловил разницу между SMP и ASMP!), и о планах на будущее. Было интересно.
Представители AdaCore поведали о том, как Ада заруливает все остальные языки в плане решения критических к безопасности задач. У Ады есть подмножество Spark, и правильность программ, написанных на нем, формально доказуема. Так-то!
Esterel презентовали два продукта: SCADE Suite и SCADE Display. Первое позволяет рисовать логику программы во всяких схемах (включая конечные автоматы) и из этого потом генерировать работающий код. Второе - рисовать всякие интерфейсы пользователя - индикаторы, шкалы и т.д., и, опять же, из этого генерить работающий код. Естественно, продукты тесно связаны между собой и позволяют легко привязывать представление к модели. Что примечательно - если сертифицировать схемы с картинками, сгенерированный с них код становится сертифицирован автоматически. Код можно генерить для всяких разных платформ.
В целом конференция мне понравилась. Все было хорошо организовано и вообще хорошо.
Вечером, после конференции, сходили с профессором на "Иисуса Христоса -- Суперзвезду". Посмотрел на Екатерину Гусеву. Впечатления резко положительные :)
Компьютерное
В начале месяца сдал проект GSoC, над которым, правда, продолжаю работать и сейчас.
В конце месяца сдох мой первый ноут - Тошиба Сателлит. С октября прошлого года на нем прекрасно работала NetBSD 5.0.2, и работала бы и дальше, но весной я обновил систему сначала до -current, потом, брутально, назад до 5.1 - и тут начались глюки, корки при воспроизведении некоторых альбомов Мейденов, хальты при конфигурении и сборке проектов. Хорошо, что я успел сделать основную часть работы до фатального конца. Решил пока не ремонтировать, дабы дальше не мучиться, а купить сразу новый комп.
Остальное
Не помню, что я делал весь остальной сентябрь. Наверно работал, как всегда.
Posted on 1-Oct-2011 at 0:29:52 Август, как и ожидалось, выдался месяцем напряженным и, разумеется, насыщенным на всякого рода события.
В начале месяца я посетил деревню. С одной стороны, это очень печальная традиция, с другой -- удалось снять несколько пейзажиков, которые мне наконец-то понравились. Появилась надежда, что еще не все потеряно :)
Далее начался мой отпуск, во время которого я усиленно пилил свой GSoC'овый проект. Идея покрыть libinotify поведенческими тестами вылилась в написание целого нанофреймворка с бд. и ш. Что характерно, он мне нравится больше, чем сама библиотека… Что-то здесь явно не так.
На покрытие тестами проекта с соответствующими хотфиксами и ушел весь отпуск.
Где-то в середине месяца таки записался наконец в тренажерный зал, езжу теперь туда три дня в неделю в самую рань. Спасибо коллегам за то, что они меня туда вытянули буквально за уши, так бы еще год собирался.
Под конец решил немного развеяться, наведался в Москву. В результате привез оттуда еще полтора удовлетворительных (на мой взгляд) снимка. Спасибо опять сотоварищам за теплый прием :)
А так провальный месяц.
Posted on 4-Aug-2011 at 23:32:27 Июль выдался, пожалуй, самым хардкорным месяцем этого лета. Правда, впереди еще август, который тоже обещает быть сложным.
В июле, помимо усердной работы в новом качестве, я так же активно пилил вторую часть проекта GSoC - библиотеку эмуляции inotify поверх kqueue. Учитывая, какие фичи предоставляет оригинальная inotify и какие особенности имеет kqueue, реализация нужного поведения оказалась адом и израилем. Сегфолты, дедлоки, мемлики и коррапшны преследовали меня на всем пути, но к концу месяца таки удалось получить нечто более-менее работающее и не падающее.
В довесок ко всему в июле я так же начал работать над проектом на кафедре. Не знаю, что из всего этого получится, надеюсь, что все будет хорошо.
Ближе к концу месяца удалось наснимать несколько портретов, за это большое спасибо Дарье. За некоторые снимки (к сожалению, их совсем немного) мне даже почти не стыдно, после более тщательной ретуши выложу все на фликр.
Posted on 28-Jul-2011 at 0:36:14 В июне я сдал свою (вроде как) последнюю сессию и в основном занимался первой частью GSoC'ового проекта.
Ещё запилил всякие приятные мелочи в Shampoo: авторизацию, Workspace, Transcript. На этом пока, к сожалению, успокоился. Забрасывать такой проект не хочется, планирую добить его, когда уйду в отпуск.
Ну и ещё из знакового - в конце месяца на работе сменил род деятельности: из разряда поддерживающих "имеющийся код" перешёл в разряд генераторов этого самого "имеющегося кода". :)
Posted on 18-Jun-2011 at 4:21:13 Май выдался богатым на события месяцем.
Гуляния
В самом начале месяца, на майские праздники, к нам приехали наши московские друзья, и это был отличный повод встретиться всей нижегородской составляющей кое-какой конфы.
Культурная программа первого дня включала в себя каноничную прогулку по верхней части города, от площади Лядова через Б.Покровскую до Чкаловской лестницы и оттуда до Сенной, и последующие шашлычки на садовом участке где-то близ Оки. Помню, как я уронил крышку объектива в костер и рукой ее оттуда достал :)
Во второй день посетили мой дом, потом поехали на откос и там прогулялись от молитовского моста до канавинского. В завершение гуляний потусили на одной крыше под набережной Федоровского.
Спасибо всем, кто был с нами. Фотографии тут.
Open Source
В мае я активно допиливал серверную часть Shampoo и еще активнее работал над соответствующим режимом для Emacs. По состоянию на конец месяца почти весь желаемый для удаленной работы с кодом функционал был готов. Клиентская часть требовала (и сейчас требует) доработок в плане юзабилити и больших рефакторингов, а то старшие братья-лисперы засмеют. Ждем, надеемся, верим.
Так же в течение мая я ознакомился с некоторыми особенностями реализации Glib, знание которых было необходимым для дальнейшей работы над проектом GSoC. Все технические подробности -- в соседнем блоге.
Поездка в пещеры
В конце месяца удалось съездить с одногруппниками и co к Борнуковским пещерам, что у села Борнуково Бутурлинского района, на юге нашей области. Очень понравилось :)
Подробный отчет об этом всем написал мой одногруппник Андрей, почитать можно здесь, а в картинках - вот тут.
Posted on 13-May-2011 at 10:33:09 В апреле я вкалывал, попиливал серверную часть shampoo, делал что-то ещё, но не помню что.
А, ну да, и попал на NetBSD GSoC, о чём как бы сообщает новый бложик справа.
Такие дела
Posted on 12-Apr-2011 at 23:44:31 Вчера на ЛОРе наткнулся на очень годное руководство по выполнению дипломной работы. Оно мне настолько понравилось, что я решил для сохранности (и более удобного доступа) перепостить его сюда. Авторство принадлежит пользователю Macil.
Стратегия написания дипломной работы следующая:
- Max fun, min затраченные усилия.
- Min оригинальная разработка, max интеграция.
- Max архитектура, min реализация.
- Max сопроводиловка/презентация, max бумага, min код.
По пунктам
- Во время написания диплома, "альма матер" -- последнее место, где ты должен находиться. Если требуется доступ к специфическому оборудованию (явно не твой случай), все равно нужно устроиться работать на кафедру в лабораторию и т.п., что уже предполагает кардинально другой класс отношений. Слава Богу, в современных (адекватных) вузах это сделать достаточно просто. Твоей задачей на данный момент является не создание никому не нужной фигни (которую по недоразумению называют дипломной работой), а получение практических знаний и опыта по твоей специальности.
- Твои "идеи" никому нафиг не сдались. Хотя бы потому что все уже изобретено ИЧСХ, создано в 70-е годы. А что изобретено не в 70-е годы, базируется на разработках 70-х годов. Поэтому твоей задачей является объединить как можно больше наработок в твоем дипломе. Это принесет множество профита, самый главный из которых - нотационный. Любая научная проблема прежде всего предоставляет некий терминологический базис. А поскольку тебе требуется не столько доказать правильность твоей разработки, сколько объяснить "высокой комиссии" ЧТО ты сделал и ЗАЧЕМ ты это сделал (см. экономическое обоснование), то использовать тебе его придется. Иначе ты будешь чего-то лепетать, комиссия будет раздражаться, и тебя постигнет заслуженный фейл.
- По той же самой причине. Никто твою реализацию смотреть не будет. Поскольку у тебя просто физически не хватит времени объяснить "высокой комиссии" ее детали. А архитектуру можно изобразить на схемах, рассказывать в традиционных для данной области терминах (см. п. 2) и вообще.
- Знаешь какая твоя настольная книга на период написания диплома? Нет, не "Аннотированный стандарт С++". И не "Искусство программирования". Твоей настольной книгой должна быть методичка "Курсовые и дипломные работы", в разных вузах она называется по-разному. Но суть от этого не меняется.
По началу она тебе покажется трахнутой на голову. Не обращая внимание. Засунь свое мнение в ж... Оно не требуется. Твоей задачей является выполнение всех маразмов (с твоей точки зрения) методички. В принципе, полиграфические требования можно засунуть куда дальше. Я слабо представляю что кто-то сможет отличить Times от cmr. Кстати требование Times New Roman - маразматическое по своей сущности. Я лично знаю три варианта Таймса, кириллическая часть которых сильно различается, эксперты знают намного больше. А вот требования по структуре дипломной работы ты должен выполнять свято. При возникновении затруднений - бежать к научруку, это кстати говоря одна из его задач. И увы, в современной ВШ праткически основная, хотя бывают приятные исключения (но, как я полагаю, это не твой случай).
Далее, пиши а) в строго научном стиле, б) тезисно. Типа "XXX позволяет предположить что: а) УУУ; б) РРР; в) ГГГ, что в свою очередь ля-ля-ля. Таким образом, бу-бу-бу". Никакой "литературы", это не сочинение. ТЕКСТ ДОЛЖЕН БЫТЬ ЛОГИЧЕСКИ СВЯЗАН. Господи! Сколько моих товарищей по несчастью сыпались на такой мелочи!
Презентация должна быть подготовлена по всем законам жанра. Требования строго определены, я не буду о них распространяться здесь. Упаси Боже извращаться с темами в соответствующем софте! Презентация должна быть высококонтрастной и ориентированной на использование проектора. Лучше заранее ее прогнать в примерно схожих условиях. Не забудь сделать раздатку, не у всех хорошее зрение, не все можно (и должно) отразить в презентации. И вообще, больше будут смотреть в раздатку - меньше будут смотреть в дипломную работу и слушать бу-бу-бу докладчика. Что является несомненным профитом.
Мотивация всего вышеперечисленного крайне проста: за то мизерное время, выделенное на защиту работы, донести до "высокой комиссии" ее суть можно только а) при использовании высокоуровневых идиом б) тезисного изложения и логической связанности в) соответствия работы ожидаемой структуре г) высокого полиграфического качества д) грамотно оформленной и проведенной презентации. А от этого и зависит результирующая оценка.
Более того
Тема работы должна быть максимально нестандартной. Приведу пример. мой коллега превратил всем обрыдлую тему класса "учетная задача на Delphi", от которой "высокая комиссия" просто блюёт, в отличную дипломную работу, выбрав нестандартный объект учета - ТСЖ. В те времена ТСЖ только начинались, и резко проснувшаяся комиссия забросала его вопросами. Но не по существу, хотя его позиция была крайне уязвимой, а по процессу учета в ТСЖ (sic!). А поскольку к тому времени он умудрился стать председателем своего ТСЖ... Короче, его постиг заслуженный профит.
Моя тема, например, была крайне нестандартной. Во-первых, веб-интерфейс. Во-вторых, платежные системы. В третьих, не очень распространенный (в моем вузе) класс задач "мониторинг". Лично я до сих пор хихикаю на свой дипломный проект. Я бы теперешний запросто завалил себя тогдашнего. Мне же в виду нестандартности даже вопросов по существу не задавали.
И самое главное. Сподобься ради всего святого приобщить к своей дипломной работе акт о внедрении. Напечатай его на красивом бланке, поставь красивую печать и сунь в руки руководителю, который его будет подписывать, нормальную ручку. Грамотно оформленный акт о внедрении дает +1 к профиту.
Исходное сообщение лежит тут
Posted on 8-Apr-2011 at 10:21:20 Март выдался довольно насыщенным, но почти безрезультатным. Впрочем, обо всём по-порядку.
Работа
В прошедшем месяце я начал полноценно работать на новом месте. Офис находится глубоко в Cоветском районе. Так глубоко, что от остановки "Университет" до него пилить пешком ни много ни мало полтора+ километра. По первости на преодоление этого пути у меня уходило аж до получаса -- дорога там плохая, промзона; сугробы, которые никто не убирает и которые существенно затрудняют переход на перекрестках. Сейчас вроде приноровился, при достаточной прыти могу и за 10-15 минут управиться, но всё же. Немного спасает 27-й автобус, который курсирует как раз в тех местах, но ходит он раз в год, ждать его долго, а в заветные часы пик он любит и в пробках поторчать, так что пешком иногда даже быстрее получается. Дилемма, однако.
До "Университета" из своих окраин я добираюсь на 33-й маршрутке. Я всегда знал, что по утрам там довольно сурово, но даже не представлял, что настолько! В утренние часы 33-я - это ад и израиль. 78-я, на которой я проездил не один год в свой НГТУ, просто отдыхает. Чтобы без проблем утром доехать на 33-й, надо стоять на остановке в начале седьмого утра -- только в этом случае можно доехать до заветного "Университета" меньше, чем за час. Если выйти из дома минут на 5-10 позже -- всё, мучительные полтора-двухчасовые корчи в пере-переполненной маршрутке обеспечены. Так что теперь я ложусь по-раньше, встаю по-раньше и приезжаю в офис к четверти восьмого :)
Ну и, собственно, скажу пару слов о самой работе. Общая картина проекта нарисовалась в голове где-то во второй половине месяца, с кодом работается уже уверенней, чем это было в начале; не без косяков, правда, но, думаю, со временем и это пройдёт. Втянулся.
Выставки
12-го числа посетил выставку фотовыставку Еитиры Амаситы в Русском Музее Фотографии. Правда, сначала кассирша предложила мне посмотреть на экспонаты самого музея, а потом уже идти к японцу; так я и сделал.
На первом этаже РМФ меня ждали работы Карелина, Дмитриева и других мастеров родом из аж XIX века. Фотографии из далекого прошлого -- это как окна в другой мир, что есть всегда интересно и круто. Качество и резкость отдельных снимков вообще поразили воображение. Запомнились съемки архитектуры без искажений в перспективе. Мне даже стало стыдно за всю ту лажу, что я нащёлкал на свой никон. Ну т.е. стыдно-то было всегда, но сейчас стало ещё сильнее :). Там же были представлены работы более современных авторов -- например, Шпагина, Яворского, -- о которых я уже был наслышан на курсах. Так же особый интерес представила коллекция фотоаппаратов -- от старых больших деревянных форматных ящиков до относительно новых маленьких Зенитов. Киевы, двухобъективные Любители и прочий раритет -- всё там есть.
После этого всего фотографии цветов Еитиры смотрелись как-то уныленько, однообразно. Конечно, красиво, красочно, композиционно гармонично и все дела, но что-то совсем не зацепило. В памяти отложились всего два кадра, и то похожие друг на друга -- какие-то высохшие серо-золотые цветы/травинки/колоски на чёрном фоне в желтовато-золотом контровом свете. А, и ещё я нашёл в одном месте заваленный горизонт. И это -- с ~80-ти работ. Плохо, Еитира!
Кино
Возвращаясь из РМФ, краем глаза увидел рекламную вывеску у к/р "Рекорд", и не смог пройти мимо. Как оказалось, как раз в тот день там проходила "Ночь антиутопий" -- ночной показ сразу нескольких культовых фильмов к ряду. Большинство из них я давно хотел посмотреть, но всё никак не получалось, поэтому недолго думая я решил не упускать такую возможность, позвал одного из лучших друзей и купил билеты.
Кто сунется целую ночь втыкать в старые (а местами и скучные, занудные и непонятные) фильмы в задрипанном кинотеатре? Во-первых, их и смотреть-то захотят далеко не все; во-вторых, с нынешним развитием интернетов их всех можно просто выкачать и, не торопясь, посматривать свободными вечерами в собственной гостиной. Поэтому, как я думаю, на подобные мероприятия народ приходит либо просто потрепаться, либо убить время в необычной обстановке, либо действительно посмотреть фильмеца (что и было в моём случае), либо всё сразу.
Учитывая все эти тезисы и тематику показываемых фильмов, можно сделать вывод, что ожидаемая целевая аудитория самого мероприятия -- по большей части подрастающая интеллектуальная илита. Так, собственно, оно и оказалось -- по приходу на место мы увидели толпу сверстников, по массе своей в большинстве состоящей из всякого рода хипстеров и прочьих созданий. Лохматый, сильно небритый, в растянутом свитере и берцах был по-ходу я один. Хипстеры что-то оживленно обсуждали, находили знакомые лица, курили и глушили винище у сортира. Громкие высокоинтеллектуальные дискуссии о религии, смысле бытия и основах мироздания, порой переходящие на крики и мат, не прекращались почти до утра.
Собственно сам просмотр проходил параллельно в два зала, по четыре фильма в каждом. Первый зал -- "большой" -- обычный годный зрительный зал с ~удобными сиденьями и большим экраном, прямо как в кинотеатрах для белых людей. А вот второй -- "малый" -- импровизированный, сделаный из сцены путём огораживания её от холла перегородкой и установкой ЖК-телевизора внутри. Это сооружение гордо обозвали "зоной, свободной от обуви" -- стульев и прочего там не было (хотя мы потом отжали парочку), предполагалось сидеть всё время на пятой точке. Естественно это было дико неудобно, места всем не хватало, приходилось тесниться и часами сидеть ужавшись. В общем, организаторам тут минус. Ах да, под утро "малый зал" был частично заплёван семечками, залит пивом и закидан всякими огрызками/фантиками. Вот тебе и илита, ага.
В мой список в итоге попали "1984", "Заводной Апельсин", "Безумный Макс" и "Бегущий по лезвию". Первые два -- понравились, у третьего фильма сиквел всё же более по теме, а ценность четвертого просто ниасилил (видимо, СПГС недостаточно развит).
В целом впечатления от мероприятия остались вполне положительные. Список фильмов "на посмотреть" сократился, не зря сходил.
Фотография
Учитывая, что в январе я плевал в потолок и пилил этот блог, в феврале я плевал в потолок и пилил опенсорс, выход фотографии на первый план в прошедшем месяце есть прямо-таки неожиданное явление.
В самом начале месяца удалось поснимать на Масленнице. По сути, это был мой первый (и пока -- единственный) осознанный репортаж. Камера успешно прошла стресс-тест в виде нескольких часов работы под снегом с дождем, мне удалось поймать несколько хороших моментов, и это радует. Лажовых снимков конечно пока подавляющее большинство, но процент тех фотографий, которые не стыдно показать, хоть и очень медленно, но растёт. За это спасибо курсам и моему учителю особенно. Саму серию в её расширенном варианте можно посмотреть здесь.
Так же в течение месяца полтора раза поснимал в студии. Повтыкал в студийный свет, поработал с моделью (спасибо, Даша!), попрактиковался в ретуши. Хлопотное это дело, но довольно занимательное. Опять же, по неопытности про свет и мелкие детали я частенько забывал, а дьявол, как известно, кроется как раз в них.
Хорошо, когда в твои ошибки тебя тыкают носом, и ещё лучше, когда осознаёшь их сам. С дебютной съемки у меня осталось лютое количество снимков с обрезанными конечностями, в основном это были кисти и пальцы. На втором заходе я уже старался за этим делом следить, и лажал уже со всякими мелкими тенями на лице, освещенностью в целом, ракурсом и прочим. На мой взгляд, это не так страшно, как отрезанный палец (отрезанный палец -- это вообще сразу завал), но всё же в итоге требует значительной доработки напильником. Хочется как-то без этого, производить качественный материал сразу, вот к этому и буду пока стремиться.
Одновременно выделились направления, которые мне наиболее интересны. Хорошей фантазией и воображением я, по-ходу, обделён, поэтому натюрморты и прочие постановки пролетают. А вот репортажи, в какой-то степени студия, пейзажи, в общем всё, что уже поставлено и от меня требуется только это разглядеть, имеет отличные от нуля шансы на потенциальный успех. Надо оттачивать технику и тренировать художественное зрение, чем собственно я и намерен заниматься в будущем.
Заключение
Вместо четырёх отдельных складных, законченных постов, которые я мог бы накатать в течение месяца, получился один большой вот этот. И ладно бы я написал его в конце марта, так нет, сейчас уже почти середина апреля! И так во всём. А это означает, что прокрастинация одержала вверх и стремительно прогрессирует. Печаль.
Posted on 28-Feb-2011 at 16:01:13 Месяц прошёл под флагом опенсорс -- три патча накатал, как никак :) Два из них, правда, в немного измененном виде, уже приняли в GNU Smalltalk. Это маленькие фиксики для портов Swazoo и Magritte.
Особенно доставляет третий патч -- это ни много ни мало фикс асинхронного I/O через SIGIO в NetBSD. Звучит громко, но на деле всё просто, всего пара строчек. В списке рассылки tech-net, правда, реакции не последовало никакой, ну и ладно, зато теперь у меня сокеты работают в GNU Smalltalk. А там где сокеты, там и Swazoo, и Seaside, и все все все. Скучные технические подробности этой двухнедельной эпопеи можно найти в соседнем блоге.
Aх да, после этого фикса пилить средства удаленного взаимодействия со смолтоковым образом, кои я начинал делать ещё на GNU Smalltalk Sprint в декабре прошлого года, мне мешает только лень.
Из остального:
- Закрыл свой второй (и, пожалуй, пока последний) фиксд-прайс проект на oDesk. Закончен он был ещё в январе, но сдал я его только в начале февраля;
- Отгремели многочисленные ДРы;
- Устроился на работу. Проект вроде как интересный, есть чему научиться, а это всегда хорошо.
Вроде как всё. Двигаться к поставленным в начале года целям пока не особо получается, но что-то да делается. С наступающим весенним обострением!
Posted on 3-Feb-2011 at 18:07:10 Нашёл сегодня в магазине следующий артефакт:

Пройти мимо не смог, приобрёл ради одной только бутылки (и этикетки из детства). На вкус - те же яйца.
Posted on 31-Jan-2011 at 4:24:04 Итак, сегодня последний день января. Поэтому пора подводить итоги.
- В начале месяца наконец-то допилена и заинтегрирована сюда моя недо-cms.
- Сессия сдана без троек - это нонсенс.
- Сдан первый фиксд-прайс проектик на oDesk.
- Закончились курсы Ауриги по системному программированию в Linux. К сожалению, весомую часть занятий я пропустил, но сам по себе курс очень и очень хороший. Теперь имею хоть какое-то (пусть даже самое начальное) представление о том, что там и как в ядре крутится и вертится.
- Начались курсы основ творческой фотографии :)
- Начал читать "Конкретную Математику" Грэма-Кнута-Паташника. Остановился пока на первом разделе, который про рекуррентные задачи. Задачи решаются с треском, чтд. Надеюсь, что потом мои мозги сгустятся до нужной консистенции и мой уровень таки повысится.
Из того, что вспомнил, вроде всё. Мало. Предстоит много работы, в том числе и над собой.
Posted on 30-Jan-2011 at 23:07:23 Я тут давеча прикрутил размету в LaTeX, и теперь могу ею невозбранно выделывать всяческие штучки с форматированием.
Написано это дело на голом Smalltalk (правда не без участия PetitParser'a Лукаса Ренггли) аж в три слоя быд^Wкода. Да, я не осилил рекурсивные грамматики PP, поэтому вместо красивого и изящного решения на гитхабе можно увидеть следующее:
- Получение набора токенов (на самом деле - самая черновая и нудная работа, которую и взял на себя PP);
- Построение из этого набора леса. Каждое "растение" в лесу есть либо простой стебелек (единичный элемент), либо маленькое деревце. В маленькие деревца объединяются ноды, заключенные промеж
\begin{} и \end{}. Это позволяет использовать форматирование во всякого рода списках и прочих составных блоках;
- Построение из леса другого леса. В новом лесу каждое дерево будет либо параграфом (тру деревом), либо единичным элементиком (список, заголовок, картинка - всё, что по логике не входит в параграф).
Полученный в итоге лес играет роль AST, вернее, ASF (Abstract Syntax Forest - если такого термина ещё не было, то выходит, что его придумал я), из которого в итоге и генерируется HTML.
Генерация HTML из AST дело уже тривиальное: Interpreter + Visitor.
Такие дела. Я знаю (ну, по крайней мере, верю), что это всё можно сделать лучше, но пока и так работает - путь будет. Не без косяков, правда, поэтому в камментах LaTeX не используется.
Вот
| |