Category: it

|, me, hikki, ok

Паттерны проектирования, гриды и прочая безответственность

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

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

Одним из фактов об этой стране, усвоенным на военных сборах, являлось то, что уйма граждан не может или не хочет даже выполнять своих элементарных служебных обязанностей. В принципе, это можно наблюдать в любом местном отделении какого-нибудь государственного органа, где никто не хочет ни за что отвечать, только целыми днями гоняют чай, а мою посылку из Китая, долетевшую в эту страну оттуда за сутки, «сортируют» на почте уже двадцать четвёртый день. Однако, если тут почти месяц лёжбыща мелкого пакета на складе вызывает народное недовольство, то в армии подобное поведение возведено в норму.
После последнего семинара во мне окончательно укрепилось мнение, что между многими учёными и виданными мной военными не такая уж и большая разница. Сейчас объясню почему.

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

В таком же смысле лямбда-исчисление и теория типов значительно проще, чем объектно-ориентированное программирование и паттерны проектирования. При этом, мне кажется, между первым—третьим и вторым—четвёртым куда больше сходства, чем может показаться на первый взгляд. В каком-то интервью (которое я не смог загуглить) вроде Simon Peyton-Jones говорил, что там, где ООП-кодеры начинают совать UML, хаскелисты расчехляют дополнительные стрелки в типовых аннотациях (вот ещё тред почти про это же на sof). Также и большинство паттернов занимается эмуляцией поведения шашечек из функционального мира (выборочно иду по часто упоминаемым из списка паттернов в Википедии): Adapter — замыкания, Interpreter — GADTs + eval, Listener (тут обман, его в списке в Вики нет) — замыкания, Mediator — ещё раз замыкания, Nullable — пахнет Maybe monad transformer, Proxy — тайпклассы и снова замыкания, Visitor — и тут снова тайпклассы. Ля-ля-ля, все всё давно поняли, а я — Капитан О.

Так вот, вернувшись на два параграфа назад, но глядя в список паттернов в Википедии (нет, там есть что-то осмысленное, но, в целом, один этот размер списка уже о чём-то говорит), нетрудно заметить, что эти паттерны проектирования — это философия какая-то, а совсем не математика. Конечно, философствовать куда приятнее, чем делом заниматься — сиди сочиняй себе паттерны. Частных случаев, выражающихся в случайной перестановке фич GADTs, замыканий, кванторов существования и прочей фигни высших порядков хватит на всю жизнь, можно не одну квази-интеллектуальную книжку по проектированию ПО написать. Тут же можно догадаться почему я там умолчал про всякие MV(C|.*).

В общем, наблюдается ярко выраженная любовь человечества к дисциплинам с огромным количеством мелких деталей, где можно строить из себя умного, вообще по сути ничего не понимая. В этом свете, любовь к преподаванию ООП на всяких «языках, используемых в индустрии», типа там C++, или Java, становится мотивационно оправданной: когда больше нечего сказать, можно пофилософствовать почему условие
(a < b) || (a == b) || (a > b)

для a и b целочисленного типа, может никогда не выполниться.

Надеюсь, я достаточно прямо выразил свою простую мысль: ООП, UML, паттерны и прочая «инженерия ПО» — это (за мелкими исключениями) философия, философия — не математика, программирование — математика. Любовь к такой философии легко объяснить отсутствием достаточного уровня абстрактного мышления, ибо ковыряться в деталях всегда проще, чем построить общую теорию. А работать-то не хочется.

Кстати, в этом смысле достаточно поучителен тот (исторический) факт, насколько сильно отличаются по количеству правил первые формализации систем типов для ООП-языков, и их современные версии. Об этом почему-то не часто вспоминают.

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

В заключение хочу отметить, что со времени последних постов, полных уважения к философии, я пришел к выводу, что всякие философы, любители UMLя, паттернов и прочей мути — вовсе не вредны для общества. Смотрите сами, если бы по мгновению волшебной палочки вдруг все фишеры и спамеры исчезли из сети, то люди так расслабились бы, что появление очередного вида мошенничества могло бы вызвать катастрофу глобального масштаба. Философия, РАЕН и ООП с паттернами просто необходимы обществу, чтобы у адекватных его членов не скисли мозги.
|, me, hikki, ok

CHDK

Где-то месяц не читал слешдот, в лайфрее скопилось что-то типа девятисот непрочитанных постов, потому ночью я решил, что срочно пора уменьшать их количество.
За один присест осилил где-то 500 штук и почти никакие из них не осели в памяти, зато те, что осели отвлекли меня на целый день.

Например, там был пост о том, как какие-то товарищи написали распознавалку движущихся объектов, работающую прямо на фотоаппарате Canon. Сама распознавалка меня не впечатлила, зато она была построена на базе проекта CHDK. А эта штука, в свою очередь, оказалась страшно крутой.

CHDK это такой SDK для хаченья фотиков серии Canon PowerShot. История на офсайте говорит, что штука сия была создана вопреки прошивкам канонов, чтобы снять ограничение на создание фоточек в RAW, ибо железка у Canon такую возможность имеет, а официальные прошивки — нет.

Насколько я понял, по диагонали пробежав документацию, то при загрузке камеры прошивка от Canon, при некоторых условиях, ищет на SD-карте бинарник с обновлениями, загружает его в память и отдаёт ему управление, а после завершения его работы грузится ОС камеры.
CHDK притворяется бинарником с обновлениями, при своей загрузке резервирует верхний кусок оперативной памяти устройства и «слегка» правит основной код ОС, добавляя туда свои «хуки».
Эти хуки вмешиваются во все нажатия клавиш камеры, в процесс фотографирования, сохранения полученных фотографий, etc. В результате на устройстве как бы работают сразу две ОС.

Так вот, совершенно случайно, у меня имеется камера Canon IXUS 860 IS. Потому на игры с CHDK на ней ушёл целый день. Я не профессиональный фотограф, фотографией не увлекаюсь и не собираюсь начать. Лично меня привлекла возможность добраться своими грязными лапами до забавной железки с армовским процессором.
Но возможность произвольно менять выдежку, ISO и три тысячи других настроек, сохранять результаты в RAW, запускать скрипты на uBASIC и LUA меня порадовала. Ещё эта штука рисует на экране чертовски информативный OSD.
Если даже меня впечатляет, то фотографы небось вообще кипятком писают.

Только я как-то обработкой изображений не увлекаюсь, и, в принципе, делать что-то конкретное с CHDK лень, однако есть пара идей.
1) Если вклиниться в USB-стек, то можно, например, сделать из фотика веб-камеру (непонятно, правда, зачем).
2) Сделать набор весёлых пост-процессингов. Например, фоткаем деньги, разбросанные по столу, а оно говорит сумму разбросанного.

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

Экспериментируя с тулзами для создания стерео-картинок в камере, сделал Collapse )

Краткое руководство для получения стерео-эффекта:
0) открываем картинку из под ката на полный экран,
1) ставим на расстоянии 10см. перед глазами указательный палец,
2) теперь, если (не убирая пальца) посмотреть на монитор, то палец раздвоится,
3) передвигая палец находим такое его (а может быть ещё и головы) положение, когда правый квази-палец находится над правой Тамаки, а левый — над левой,
4) теперь фокусируемся на пальце,
5) медленно убираем палец с линии взгляда (например, сгибаем его), но не меняем точку фокусировки (то есть нужно смотреть в точку, где был палец, а не на монитор, который становится видно после исчезновения пальца),
6) на экране должно быть видно три Тамаки, где средняя — стерео-версия.
После некоторой тренировки палец становится не нужен, можно сразу поставить глаза в нужное положение.
Если стерео-Тамаки сильно размыта, то нужно, не теряя концентрации, медленно отодвинуть голову от монитора (или, наоборот, придвинуть ближе).
Ещё можно попробовать сфокусироваться на плинтусе, который находится за стерео-Тамаки.
Кроме того, теоретически, можно убрать размытость просто заставив глаза правильно деформировать хрусталик, но на практике это очень трудно сделать, ибо мозг привык фокусироваться на то, на что смотрим, а не смотреть в одну точку, а фокусироваться на другой. У меня такая магия получается очень редко, отодвинуться от монитора гораздо проще.

Сама стерео-Тамаки даёт приятное представление о качестве самой фигурки. Такие дела.
|, me, hikki, ok

Хеппи нью йеар

В субботу некто мой «сосед» внезапно напомнил, что у меня 8ого числа день рождения.

Собственно поскольку завтра (в смысле сегодня) у меня военная кафедра, которая уже слегка местами начинает надоедать, то мне почему-то захотелось подвести итоги года что ли..

Итак в топологическом порядке:
* Летом и осенью я успел поработать в администрации СПб, что, несомненно, принесло море жизненного опыта.

* На вырученные деньги купил себе хардварный модем зухель и сервер, который нынче занимается сортировкой почты, файлохранением в размере 1.6 Террабайта, ботосодержанием, виртуализацией, прочими глупостями... и, кроме того, обогревом помещений.

* Онямэ теперь смотрю значительно меньше.
Видимо, окончательно определился-таки с тем, что мне нравится.

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

* Стал агрессивно слушать классику и всякую ня-музыку.

* Прорезались зубы мудрости.

* Агрессивно стал посещать театры, оперу (не ту что быдло-браузир)...
(на фото «семейка» стульев в промежутке между коридором с гардеробными и бенуаром в Мариинке)
40,46 КБ

* Переболел красноглазием :3

* Перепробовал до кучи разных открытых ОС... всякие разные дистры линуха (заодно подсадив половину знакомых на арч), план 9, миникс, блюботл...

* Возродил идеи реализации своей собственной.

* Увлекся лямбда-исчислением.

* Сдал зимнюю сессию. \-.-/

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

* Тетрадь по английскому превратил в рассадник няк.
58,74 КБ65,03 КБ

* На своем любимом десктопе послал все DM куда подальше... сначала там был wmii, сейчас па-дэ-дэ танцует xmonad и его ~100 сделанных под меня шоткатов с моим же проектом xmsl (XMonadStatusLine) (который пока существует только на моем винчестере, ибо столь сыр, что недостоин быть ГПЛьнутым, хотя он уже круче xmobar, который есть бяко).
(кликабельно. xmls - это панелька внизу)


* ГОТИЧНЫЕ ЛОЛИ РУЛЯД!

* Пересмотрел свой взгляд на написание исходного кода, после того как написал > 2000 строк, а потом, подумав 4 дня, в итоге урезал сурс до 320 строк, увеличив при этом производительность в 19 раз и добавив самоверфикацию. Теперь я 2 дня - неделю рисую схемы в тетради, пишу маленькие примеры того, как я хотел бы это использовать, и лишь потом запускаю vim.

* Обзавелся телефоном нокия 5200.

* Вообще перестал понимать рекламу в метро (меня это несколько удручает): какую связь имеет красный волейбольный мяч и ипотека я вообще без понятия.
58,60 КБ

* 27 марта сменил фамилию. Теперь, как только получу новый паспорт, я буду «Ян Малаховски» (ага, без «й» на конце). Или «Jan Malachowski» в языковом оригинале.
Теперь мое имя наоборот - ня. А конец фамилии - ски. Так что я теперь одним только именем каваен чуть более чем на половину. =_=

* Пересмотрел свои взгляды на процесс взросления.
Раньше каждое восьмое число четвертого месяца вводило меня в депресняк, сейчас, пожалуй, я даже немного рад. Не то чтобы я тороплюсь постареть, но, почему-то, теперь подругому смотрю на старичков, гуляющих по паркам и зеленым аллеям.
С другой стороны, будущая перспектива (пускай и весьма маловероятная) стать родителем меня пугает. Страшно подумать, какой труд был вложен в мое воспитание и что пережили мои родители за эти уже почти 20 лет: пробитые лбы и затылки, брызги расплавленного свинца в лицо, болевые обмороки, остановки дыхания, ломанные пальцы, руки, ноги... даже перспектива «ребенок-наркоман» выглядит на этом фоне не столь ужасающей. Потому не могу не выразить им свое глубокое уважение и искреннюю благодарность за все пережитые мучения, лишения и переживания.
|, me, hikki, ok

SCTP. горькая правда

просвещение.
не так давно увидел публикацию RFC за номером 3286 для SCTP (Stream Control Transmission Protocol), сегодня погрузившись в сурсы и хаки для ipfilter решил его таки прочитать [1]

краткое содержание:
как всем известно, сегодня почти вся информация в сети передается по стеку протоколов TCP/IP, который на транспортном уровне имеет собственно TCP и UDP, которыми и обеспечивается существование современного интернета. кратко говоря первый обеспечивает "безопастную" передачу данных (без потерь), а второй "быструю" не замечая этих самых потерь.
VoIP, потоковое радио и потоковое видео для своих целей обычно используют UDP, потому как потеря 0.01 секунды звука в потоке не столь страшна, как потеря линии разговора.
а HTTP, SSH, POP3... используют TCP...

*однако у этой пары протоколов есть недостатки, например у пакета TCP или UDP все один адресат и один обратный адрес.
*TCP передача ломается, если "ломается" канал, поскольку пакет идет как бы прямолинейно, т.е. по определенному маршруту, если маршрут сломался во время передачи, то пакет передается заново. это медленно.
*как TCP так и UDP байт-ориентированные потоки, т.е. если мы, например хотим выделять некоторые "сообщения" в этих каналах, то программисту приходится писать еще один уровень уже в разрабатываемом приложении.
*поток TCP или UDP монолитен (ну почти, есть "срочные данные", знаю)

так вот протокол SCTP изначально разработанный для VoIP призван решить эти проблемы.
*пакет SCTP может иметь несколько адресатов и несколько обратных адресов (удобно для организации конференций)
*пакет SCTP может передаваться по принципам p2p, что, несомненно, несколько повысит его прожорливость по трафику, зато сведет почти в 0 потери
*SCTP сообщение-ориентированный и не требует лишних уровней обработки
*канал SCTP способен держать в себе потенциально неограниченное количество каналов-детей (удобно было бы сделать ftp на его базе, чтобы не создавать дополнительных соединений для данных)
*SCTP имеет встроенную защиту от Dos-атак, которым подвержены TCP и особенно UDP

т.е. сейчас этот протокол идеален для потокового медиа, а в будущем он может серьезно потеснить пару TCP+UDP и на поприще передачи данных. я прямо так и вижу реализацию torrent-ов на этой базе.

теперь о грустном. реализация этого протокола сейчас есть только в Unix-подобных ОС. мне достоверно известно, что она есть у меня в Linux 2.6 и во FreeBSD. другие системы я не смотрел.
Как известно Майкрoсoфт не собирается делать очередной апдейт для ВинXP, т.к. есть Виста, на которую нужно всех срочно пересадить. И в Висте реализации SCTP тоже нет, но она хотя бы теоретически возможна (в ХП теоретически невозможна).

Чем это грозит? Костылями.
Прямо так и вижу слоган "Хотите качественное VoIP - пересаживайтесь на Висту.", НО Виста - говно и это все знают, Линукса лемминги ("несознательные пользователи") боятся...
Теперь о производителях портируемого софта. Представьте какие встают костыли делать одно и то же для Линуха по SCTP, а для Вин по UDP! Думать страшно... и все из-за того что некоторые компании выпускают что-то недоделанное и не собираются этого доделывать, а некоторые пользователи их в этом поддерживают.