Заповедник репрессивной психиатрии
[Most Recent Entries]
[Calendar View]
[Friends]
Below are the 20 most recent journal entries recorded in
metaclass' LiveJournal:
[ << Previous 20 ]
| Sunday, November 22nd, 2009 | | 2:15 pm |
Ад со вшами жолтыми
С некоторых пор ничто так не бесит, как восход солнца вручную реализация систем типов и разного рода классов-объектов поверх уже существующих языков. Вот к примеру, задача: есть система, в ней настройки. Настроек очень дохренища, настройки могут быть привязаны к 4 уровням иерархии(общие, подразделение, профиль пользователя, пользователь), и на каждом уровне переопределять предыдущий. Формально настройки являются просто очень большим объектом с кучей полей разнообразных типов. Но из-за переопределения, к каждой сущности такой объект не привяжешь, или к каждому полю придется цеплять флаг "есть значение". Поэтому поля хранятся в словаре <имя_поля,значение_поля>. Уже цирк с конями. Затем начинаются пляски с бубном "как бы это все аккуратно показать в GUI". Нарисовать руками редактор с закладками для 100 полей - увольте, я сдохну это поддерживать, если что-то добавится. Поэтому все поля показываются в гридах(ну типа как в мозиле, about:config, только по категориям разбит, чтобы юзеру проще мышой шароебиццо было). А часть настроек, сука, всякие массивы или списки типа "список подписей и расположения полей в отчетных гридах" или "список кастомных полей документа с подписями и типами". И все это при аккуратной реализации (чтобы было удобно юзеру и не требовало стояния на ушах при поддержке) настолько удалбывает - не передать. Это еще хорошо, что 2/3 кода для этой пакости генерируется прямо из специальной базы данных, где вся эта модель конфигурации описана и редактируется культурно прямо в гриде, а не блин редактированием тысячестрочных исходников и SQL запросов. | | Saturday, November 21st, 2009 | | 12:33 pm |
Объекты и функции
Что-то обычное вкалывание в стиле "чо тут думать, кодить надо" не идет, сижу для разминки мозга проектирую всякие невозможные вещи, типа write-only БД с интерпретатором хаскеля в качестве основного языка и чего-то вроде DataGrid в качестве основного GUI. И в процессе всплыло сопоставление объектов и функций. Т.е., например, у нас есть класс-тип объекта, и есть сигнатура функции-ее тип. А вот кроме этого, общего найти почти не получается. Наследованию классов аналогии у сигнатур функций не находится. Создание объекта - экземпляра класса для функций тоже что-то сложно представить (разве что по заданной сигнатуре склепать замыкание из других функций, но это происходит в compile-time, а в рунтайме разве что значения связанных переменных в замыкание подставляются). Т.е. экземпляр функции создается один раз в рунтайме(из исходного кода) и используется почти всегда один экземпляр с заданной сигнатурой. Хотя вот для всяких функций высшего порядка типа map и filter мы можем подсунуть разные экземпляры функций, но их все равно намного меньше, чем, например, экземпляров какого-нибудь класса типа там "элемент управления GUI". В этом плане функции больше похожи на иногда встречающиеся классы, экземпляр которых существует один на всю программу, создается при старте и разрушается при выходе, вроде MainForm. Такие классы больше похожи на контейнеры для того чтобы прятать глобальные переменные, чем собственно на классы. Что из этого следует - пока непонятно. | | Thursday, November 19th, 2009 | | 4:33 pm |
Психоделия
На соседнем мониторе ребенок смотрит киевнаучнфильмовскую "Алису в стране чудес" и "Алису в зазеркалье", а я, выпив литр пива, перечитываю комментарии в постах у ребе belnetmon. Еще немного и мне начнут мерещится летающие монады в воздухе и жабы с червями и линуксоидами, спасибо "тебе-бееее". PS: Мама не разрешает мне смотреть интернет. Она говорит, что там разврат, мат и плохо. Единственный сайт который я могу открыть это about:blank. Сначала было скучно, но потом я втянулся. Теперь у меня там живет два воображаемых друга и я слышу голоса из розетки.. Разгадка этого коана в том, что у about:blank есть двоеточие с двумя точками, и у розетки, если присмотреться - тоже есть две точки. | | Wednesday, November 18th, 2009 | | 5:11 pm |
Опердень и паттерн-матчинг.
А поимею-ка я вам мозг классической задачкой из любой опердени. Дано: в базе данных есть таблица фактов (проводки, платежи, вообще любые первичные операции). В таблице обычно имеется дата-время операции, сумма, и куча полей с аналитическими кодами (от кого, кому, дебет-кредит, тип операции, итд). И есть набор правил, согласно которым эта таблица раскладывается по статьям некоего выходного отчета который ложится на стол Президенту РБ, т.е. к примеру "все проводки с типом операции 126 относятся на статью затрат "Цех забоя и переработки свинины", за исключением проводок со счета 91, который относится на статью затрат "Цех забоя и переработки лошадей"". В таких правилах обычно проверяется где-то 5-10 условий на значения полей записи операции, самих правил может быть порядка сотни штук. И правила могут меняться, например в 2008 году переработка лошадей и свиней делилась на две статьи, а в 2009 министерство статистики решило, что достаточно одной статьи "забой любого скота", но обязательно детализированной по фазам луны. И вот как бы вы такое решали? Анализ этого дела в коде выглядит как паттерн-матчинг, реализованный вручную. Но в код это пихать как бэ нехорошо - потому что при изменениях правил придется менять код. А если хранить правила в таблице, получается что мы впадаем в грех реализации собственного языка правил и его обработки. PS: Здесь немного объяснено, что имеется в виду под "грехом собственного языка". | | Tuesday, November 17th, 2009 | | 10:54 am |
О еще одной нише, где линукса нет
Вот вы таки будете смеяться, но большинство USB-HID микрофонов (и прочих usb-девайсов управления), используемых в системах речевого документооборота, толком не определяются под линуксами. Под виндой, даже старой - работают без драйверов, автоматически. Т.е. проигрывание, воспроизведение, управление с кнопок и светодиоды для отображения статуса - все работает. Под убунтой(которую использовали девелоперы линуксового модуля для нашей системы) - не работает, причем в совершенно различных вариациях - у одних не работают(и даже не перечисляются в информации) светодиоды, у других вообще из /dev/input/eventX нихрена не приходит, у третих не работает звук. А у тех, у которых работает - нужно перезагружаться иногда, чтобы заработало. Я вот еще гламурный беспроводной SpeechMike Air проверю, как он на линуксе будет выглядеть. С HID устройствами (кнопки и светодиоды), похоже, проблема в разном уровне абстрагирования на винде и линуксе. На винде мы получаем тупо устройство и возможность читать и писать в него, открыв поток. А что писать и читать - хрен его знает, мы обычно USB снифером родные SDK (которыми пользовать сука невозможно - ActiveX инсталлировать/регистрировать и прочий шлак) сканируем и делаем свои модули, заточенные под устройства. А на линуксе это дело превращается в /dev/input/eventX, откуда читаются и пишутся struct input_event, c таймстампами и кодами видов устройств и событий. Соответственно, я так понимаю, кернел должен знать про устройство, чтобы вернуть список его кнопок и диодов и уметь преобразовывать его командные последовательности в стандартный input_event вид. Зато прогам достаточно только с этой структурой уметь работать. | | Sunday, November 15th, 2009 | | 9:29 pm |
Не знаю чем
но эта картинка мне напоминает обе моих работы: | | Saturday, November 14th, 2009 | | 11:24 pm |
На тему споров про хаскель и отладки программ
Посетила странная мысль - если стек вызовов в программе становится слишком глубоким (не считая рекурсий по данным, видимо), это означает, что уровень абстракции, предоставляемый используемым инструментом разработки, не соответствует решаемой задаче. То есть, например, если я использую какую-то библиотеку - должно быть пофиг, как там она делает внутри себя, это должно быть черным ящиком, в том числе и в стеке вызовов. И если нужно отлаживать библиотеку - это нужно делать отдельно, когда кроме нее в стеке вызовов сверху только Main() сидит. А если мы отлаживаем конечную программу - то вызов библиотеки будет сидеть внизу стека, одной строкой. | | 7:29 pm |
О депрессивной торговле.
Вот эти блокнотики напомнили мне об одной вещи. Когда я вижу, что люди торгуют чем-то объективно ненужным и бесполезным, типа этих блокнотиков, всяких сувенирных фигурок из пластика и глины, какими-то фенечками, плохо нарисованными картинами и ужасными скульптурками(см. любую "художественную галерею" в минске) и прочим таким - меня это вгоняет в ужасное уныние. Очевидно, что на этом невозможно зарабатывать нормально - могут купить, могут не купить. А с учетом убогости этих произведений искусства - скорее не купят. А народ стоит, чо-то продает, делает вид что занят полезным делом. И ведь кто-то это их дурачное хобби спонсирует. Может даже, эти психи всерьез себя считают творцами. Хуже этого, только когда к этому приплетают какие-нибудь кошмарные истории типа "вот сестра-инвалид, делает фигурки, купите фигурку", блядь ужоснах. | | 12:30 pm |
Нас спрашивают ... >ээээ... а чо, результат программы должен быть вероятностно-правильным? Конечно. Если программа для 90% целевой аудитории пользователей работает ожидаемо, а от оставшихся 10% требует каких-то дополнительных действий - это лучше, чем от 100% требовать дополнительных действий.
Это к вопросу о стандартах. Конечно, хорошо писать программы для идеального мира, где стандарты соблюдены, кодировки все UTF, пользователи все знают что нужно читать маны и гугл, а компьютеры не глючат и TCP соединения работают корректно. Но на практике - практически гарантированно, что хоть что-нибудь но будет сделано неправильно, или не будет работать, как нужно. Поэтому софт должен допускать некоторые вариации входных данных, и или обрабатывать их корректно, или как минимум, ругаться понятными словами (а не виснуть, как audacious на cue-файлах). У меня есть в разном софте, как минимум, два модуля, в которых пришлось сделать натурально подгон под желаемый результат, потому что иначе пользователям пришлось бы сидеть на порядок больше времени, занимаясь исправлениями первичных данных, чем мне понадобилось для встраиваения относительно интеллектуального алгоритма кошеризации результата. | | 12:17 pm |
Вот и поработал.
Вообще, говоря, история с аудио-плеерами под линуксом началась с того, что я решил на рабочем компе освободить дырку под очередной USB-HID-микрофон для его отладки с нашим софтом. И перенес на комп с убунтой USB-коробочку с музыкой, решил проверить как ее поймут плеера на убунте, вспомнил, что поставил audacious и что еще не проверил до конца rhythmbox, начал копаться во всей этой шизе, написал в жж, начал экспериментировать с различными вариантами тэгов в файлах, начался срач, и соотвественно про работу я уже два часа как забыл. И таки cue-файлы ни один из плееров пока не понял. audacious виснет, amarok их не видит, rhythmbox игнорирует. | | 10:46 am |
А вот скажите мне,
чем под линуксом модно слушать музыку? Поставил audacious, открываю cue-файл - виснет. Как можно было написать плеер так, что он виснет на неизвестных файлах - уму непостижимо(не говоря уже о том, что cue должен быть известным форматом). Как в нем добавить директорию целиком, тоже не совсем понятно. Rhythmbox не понимает русских тэгов в 1251, и выглядит странно, с его чрезмерным интеллектом в плане сортировки по артистам и альбомам. В линуксе что-нибудь подобное foobar2000 вообще есть? Чтобы без выпендрежа, но с нормальным набором функций. PS: Познавательное чтиво про баг с 1251 в Rhythmbox. Вкратце "хуй мы на вас, русских, с вашими кодировками ложили, нам неинтересно. Triaged → Won't Fix". Это какбэ ПОКАЗАТЕЛЬ отношения к пользователю в этом вашем open-source комьюнити. При этом, смешно, но винамп и foobar2000 под виндой понимают русские тэги. Это при том, что у меня винамп версии 2001 года, фубар 2006. Вопрос, в чем принципиальная разница между виндовыми и линуксовыми разработчиками, если первые могут сделать нормальный софт, а вторые, как только доходят до вещей нужных енд-юзеру, так сразу и спотыкаются? PS2: Вообще, что курят авторы, неясно:  Из ID3v1 1251 кодировка читается. Если сделать export GST_ID3_TAG_ENCODING=cp1251 && rhythmbox. Из ID3v2 - не читается. Если есть и то и другое, то сначала читается из ID3v1, а затем заменяется тем, что есть в ID3v2. | | Friday, November 13th, 2009 | | 2:21 pm |
рубя на рельсах
В припадке ненависти к человечеству залез на рабочий редмайн и подкрутил исходники редмайна - чтобы больше 5 Last projects показывало(я тут как главный псих и организатор редмайна, вижу все проекты), и запилил долбанутый sidebar в issues, который занимает 20% ширины экрана, на котором 4 ссылки всего и теми никто не пользуется. Такое ощущение, что у разработчиков редмайна мониторы FullHD, что их этот сайдбар не напрягает. Я вот тоже, купил себе такой моник - резко стало удобнее работать - вижуал студия помещается, отчеты бухгалтерские целиком влазят, итды итпы. | | Thursday, November 12th, 2009 | | 8:43 am |
Убунта и NTFS
А скажите, как сейчас обстоят дела у линукса с записью на NTFS-разделы? А то я поставил убунту на комп, где кроме ее винта еще винт от винды остался, и хочется как бэ им пользоваться. С чтением понятно - примонтировал и читай, а вот про запись когда-то ходили слухи что она не безопасна вроде. | | Tuesday, November 10th, 2009 | | 6:59 pm |
Про собеседования и HR Вот тут, как я понимаю, про минские конторы и их "мегапрофессиональных" HR. Меня вот забавляет то, что я ни разу не сталкивался с такой ситуацией. Я ни разу не менял и не искал работу. Может быть, из-за этого сейчас сижу в не сильно удобном офисе, где нет никакой горячей воды, никаких кухонь и прочих комнат совещаний, а есть убогий колхозный туалет, где собираются уебищные недонаучные сотрудники НИИ из соседних комнат и курят. Кстати, из-за этого, а еще из-за того, что мне добираться до офиса по любому не меньше часа, я все больше ложу хер на хождение на работу, тем более и грипп свиной, и надобности туда ходить вообще нету - все делается удаленно, админов и службы безопасности, которая бы запрещала ходить на рабочие сервера извне, нету, и вообще эти сервера я самолично ставил и администрирую :) Короче, совершенно инверсный по отношению к нормальной организации труда майндфак - HR нет, начальству все пофиг, сервера администрируют программисты, воды горячей нет, пожрать пойти вообще некуда(минимум 20 минут до первой жральни, 40 минут до адекватной), в соседних комнатах убогие "научные лаборатории" по изучению прикладных свойств каловых масс в народном хозяйстве, итд итп. Но при этом работа делается и даже есть какое никакое движение вперед. Как это это все неправильно. | | Monday, November 9th, 2009 | | 8:28 pm |
Адъ CSV
А напишите кто-нибудь табличку состояний CSV парсера? Т.е. последовательность символов, разделенных запятыми, в строках, разделенных \r или \r\n разбить на список списков строк. Если в строке должны быть служебные символы (т.е. запятая или \r \n) - строка обрамляется в кавычки, если внутри такой строки нужна кавычка - ставится две кавычки подряд. На самом деле там немного сложнее, типа допустимо незначимые пробелы возле запятых, а значимыми их делают тоже через кавычки, управляющие символы <32 вроде тоже обязательно в кавычки, но это пофиг. Вроде блин простая задачка, а каждый раз когда ее приходится делать - получаются на пару страниц конечные автоматы. | | Saturday, November 7th, 2009 | | 11:44 am |
Как избавиться от мании админства
С тех пор, как я начал использовать линукс и проникся его идеологией, у меня появилась очередная мания - вместо работы заниматься вспомогательными вещами, типа администрирования рабочих серверов, настройки всяких там блин маршрутизаций, редмайнов на апачах с https и прочей пакости. Потому что получается примерно такой выбор занятий: 1) Читать теорию категорий и тому подобный мрак 2) Изучать хаскель 3) Общаться с клиентами на тему "какое еще мелкое исключение добавить в бизнес-логику опердени" и вставлять его в существующую систему, предварительно потратив месяц на обдумывание, чтобы это не сломало существующие функции. 4) Прочитать пару манов и поадминистрировать линукс. Так вот, первые три занятия печальны тем, что от них хоть какой-то практический результат будет минимум через месяц. А меня с детства вещи, от которых нельзя получить работающий результат сразу, садят на коня просто невыносимо. А четвертое занятие - админство, на моем уровне (немного серверов, не сильно сложная инфраструктура, итд) результат дает практически сразу, мозг не нагружает и поэтому вызывает навязчивое желание заниматься только им. PS: Кстати, пришло в голову еще вот что: для любого дела есть некий предел сложности, после которого заниматься им just for fun становится невозможно, либо возможно, но получается фигня. После чего fun превращается в унылую работу или разбиение дела на мелкие подмножества и раздача их другим людям, чтобы уменьшить сложность и вернуть хоть немного фана. | | Thursday, November 5th, 2009 | | 8:03 pm |
Адъ паранойи
Общение с заказчиками, установка линуксов, паника в городе по поводу свиного гриппа и обсуждение хаскеля привело мозг в состояние крайнего умопомрачения. Я вот думаю, может на работу перестать ходить пока? Что-то после того, как я еду на работу и думаю, что касаюсь зараженных свиным гриппом поручней в транспорте, и оглядываюсь на людей в поисках явных симптомов заразы, никакая работа в голову просто не идет. Да и дома особо никакого спокойствия - то скорая к соседям приедет, то в магазин нужно сходить, а там кассирши в масках, то еще чо. Я наверно, спокойней бы себя чувствовал, если бы реально объявили эпидемию и прочий пиздец:) | | 7:25 am |
| | Tuesday, November 3rd, 2009 | | 8:37 pm |
Монады на примере свиного гриппа.
Стоит толпа людей на остановке, ждет автобуса. Все в масках на лице. Приезжает автобус, все загружаются в него. При этом внутри автобуса люди оказываются без масок, а автобус - в маске. Нутром чую, тут где-то монады окопались :) | | 8:21 pm |
Подмножество хаскель-срача - beep-срач Вот это обсуждение beep-а (языка для программирования интеллектуальных GPS-трекеров, автор dmzlj) доставляет больше чем весь остальной хаскель-срач вместе взятый. Даже больше, чем обсуждение паттерн-матчинга с plumqqz Я никак не могу въехать, то ли этот юзер издевается над нами, то ли это бот, как в юзеринфо написано, то ли он псих, аналогичный ботам. Ну комментарии вроде по теме, но совершенно перпендикулярные и безумные. |
[ << Previous 20 ]
|