Заповедник репрессивной психиатрии
[Most Recent Entries]
[Calendar View]
[Friends]
Below are the 20 most recent journal entries recorded in
metaclass' LiveJournal:
[ << Previous 20 ]
| Thursday, July 9th, 2009 | | 8:34 am |
SQL извраты
Не хватает в SQL аггрегирующей операции типа MIN или MAX(поле1, поле2, поле3), т.е. минимум или максимум тупла из полей. Операция сравнения задана обычным образом - сначала сравниваем первое поле, если больше-меньше, то возвращаем результат, если равны - переходим к следующему, итд. Тогда можно было бы простым образом решать классическую задачу "при группировке выбрать значения некоторых полей в тех записях, где заданное поле имеет минимальное или максимальное значение". Типа например "состояние объекта на начало и конец дня" - группируем по дням и объектам, а аггрегацию делаем в виде MIN(DT,STATUS) и MAX(DT,STATUS). | | Tuesday, July 7th, 2009 | | 8:48 pm |
Зарядка аккумуляторов
Имеется три 2250 NiMH аккума от девайса. Имеется чрезмерно умный зарядник, который заряжает либо только два либо только четыре аккума. Что с этим сделать - не соображу. Купить что ли еще пару аналогичных аккумуляторов, или вообще комплект из четырех одинаковых, заряжать по четыре, для одного купить светодиодный фонарик подходящий для разрядки :) Но по моему, граждане, это какой-то бунт машин. | | 12:15 pm |
| | 11:15 am |
| | 10:29 am |
Теория категорий.
Расслабляюсь от писания в лоб гуевых редакторов и маппинга объектов из БД тем, что под пиво часов в 10-12 вечера читаю книжку "Basic Category Theory for Computer Scientists". Ад неимоверный, надо сказать, в голове всплывают прослушанные когда-то в универе курсы функционального анализа и еще какая-то ересь с еще более давних времен(не помню откуда вообще), про иньективные, сюрьективные и биективные функции, все это путается в мозгу с более приземленными вещами типа реляционной алгебры и реализации всякой дури в функциональных языках. | | Sunday, July 5th, 2009 | | 2:19 pm |
Рефакторинг холокоста
В честь нового адского функционала в софт занимаюсь рефакторингом - разгребаю завалы адской чуши и копипасты накопившиеся в софте с 2005 года. Мрак в том, что это основа для пяти проектов, и каждое изменение приходится проверять в каждом из пяти. А вредящие гнидогадоиды при этом отключили свет моему уютному серверу с багтрекером и svn. Второе придется заменять на что-нибудь распределенное, очевидно, а вот что делать с первым вообще неизвестно. Очевидно времени и ресурсов на перенос этого дела куда-нибудь в датацентр мне не выделят, да и в датацентре радости немного, без физического доступа к мойшыне придется менять всю идеологию работы. PS: Блин. Обнаружил, что в процессе рефакторинга одного проекта сделал практически полный аналог функциональности, уже существующей во втором, единственное но - гораздо более аккуратно. Теперь придется то, что в втором выпиливать и заменять на более кошерный вариант. | | Saturday, July 4th, 2009 | | 3:49 pm |
Рабочее
Удар головой о стенку, обитую войлоком "Хочу строгой типизации" Удар головой о стенку, обитую войлоком "Хочу автоматический вывод типов" Удар головой о стенку, обитую войлоком "Хочу метапрограммирование" переход к началу. Альтернатива: для объекта Config регистрируется TypeDescriptionProvider, который создает и возвращает CustomTypeDescriptor, который из ServiceProvider достает XmlConfigProvider, загружает из него список кастомных свойств объекта, для каждого из них генерит ConfigPropertyDescriptor, добавляя к нему CategoryAttribute,DisplayNameAttribute,D escriptionAttribute,иногда TypeConvertorAttribute и ChoiceDescriptionAttribute, указав для них ChoiceConverter, который возвращает StandardValuesCollection, исходя из ChoiceDescriptionAttribute, найденного в TypeDescriptorContext. Это всего лишь показ объекта в user-friendly виде с локализованными именами пропертей и динамически меняющимся их списком в PropertyGrid. PS: А тут еще max_posedon всякую завлекаловку с LVEE про линуксы и железо пишет. Хоть ты точно, на линукс и какой-нибудь трэшак типа руби с питоном пересядь, чтобы этого дотнета с его гирляндами типов никогда не видеть. Или вообще на low-level работу с железом, там уж ТОЧНО НИКОГДА не придется писать что-нить вроде IServiceProviderFactoryOfProviderForServ iceProviderFactoryFacade. | | Friday, July 3rd, 2009 | | 5:53 pm |
Creeping fields
Не знаю, что делать с одной гнилой проблемой. Вернее, знаю что, но это мне ничем не поможет. Дано: продукт со сложной бизнес-логикой. Множество разнообразных клиентов, которые используют эту бизнес-логику, и у каждого по сути работы имеются различные требования к ней. Очевидно, поддерживать 10 версий продукта никакого желания нет, поэтому различные требования объединяются до кучи и все сводится к единообразному коду. Подгружаются различные классы-обработчики там исходя из настроек и считают что надо. Но проблема в том, что при каждому из этих вариантов нужен свой набор входных данных, а каждому варианту входных данных - свой GUI. В итоге работа по добавлению нового функционала на 50% состоит из "добавить поле в таблицу, добавить поле в объект, добавить поле на экран". Причем каждый из пользователей использует только часть всего этого добра, а остальное оставляется незаполненным. И это сильно действует на нервы. В итоге эта пакость ползучим образом разрастается до типичного "окна ввода данных в производственную систему". Видели когда-нибудь окна у бухгалтеров в ЖЭСе, в 1С, или там в банках? 20 закладок, пару сотен полей. Вот это оно самое и есть. Понадобилась новая аналитика в отчетах - добавили поле всюду, дописали отчеты. И так годами, пока там этих аналитик не наберется столько, что никто уже не помнит зачем оно. И хорошо еще если аналитика эта тупым group by собирается, а то еще иногда бывает что ее какими-то адскими расчетами учитывать надо. Комбинации используемых полей устроены таким образом, что оформить это в виде иерархии наследуемых классов не получается. Кроме того, при наследовании класса модели данных приходится наследовать еще несколько штук классов(редактор, orm, и прочая хрень), и в каждом из них задалбываться с проверками "а того ли мы класса объект получили" и преобразовывать типы. Если бы мы писали на нормальных языках - то каждый вариант использования можно было бы вытащить в некий подзагружаемый модуль с описаниями полей, их маппинга в БД и редакторов, который при старте программы бы комбинировался с такими же и тут же бы компилировался/интерпретировался в выполняемый код. И ключевой момент - чтобы это дело сразу строго типизированным было, без всяких преобразований долбаных и проверок. Но: с реляционными БД такого не сделаешь. Т.е. просто так удалить-добавить поля при старте программы не выйдет. Обновления БД становятся адом. Если использовать вертикальное хранение атрибутов объектов - это можно сделать, но запросы тогда превращаются в нечеловеческую тыкву и тормозит это все адски. Если же нужно добавить не поле, а например подчиненную таблицу со списком детализации - воще гамон. В коде тоже радости мало - сиди как пень и реализовывай поверх обычного языка с объектами, объектную систему еще раз. Я видел такие реализации, ну оно конечно мегаинтересно с точки зрения программиста ("да что нам свой язык сделать стоит") но каждый раз результат получался весьма печальным - свой птичий язык, тормозит, радости никакой. И GUI все равно руками рисовать, вместо генератора автоматического. PS: И кстати, использование реляционных БД тут ключевой аспект - как только начинаются поползновения в сторону "изолируемся от БД", "а не использовать ли нам объектную БД" - это еще больше все усложняет, ничего не решая реально. Дело в том, что из всех вариантов составления выходных отчетов и вообще работы с данными, SQL наиболее лаконичен и понятен(не считая хаскеля, конечно). И общеизвестен. А остальное все мрак нечеловеческий. | | Wednesday, July 1st, 2009 | | 9:27 pm |
Юзабилити бытовой техники
Я так подозреваю, что дизайном интерфейсов к бытовым приборам занимаются те, кого к софту не допустили по причине крайней профнепригодности. Выключали электричество, сбросились часы на духовке. Решил их поставить на нормальное время. И что бы вы думали? Интутивно разобраться не получилось. Есть три кнопки с пиктограммами +, - и "циферблат", четыре светодиодных цифры и четыре светодиодных индикатора по бокам, с пиктограммами у каждого. Слева два индикатора с нарисованными стрелками упирающимися в стену, слева два - с колокольчиком и циферблатом. По идее это означает таймер, секундомер, будильник и часы. Так вот кнопка "циферблат" переключает индикаторы не по кругу как хотелось бы исходя из логических соображений(настройка каждой из функций) а в каком-то порядке, напоминающем код Грея. Кнопки + и - увеличивают и уменьшают цифры, но не во всех комбинациях индикаторов режима, в некоторых просто тупо пищат и ничего не делают. Я вот думаю, порыться в поисках инструкции или применить опыт игры в квесты и реверс-инжиниринга софта и прокололов и выяснить логику работы этой хрени. PS: Это апофеоз. "Время можно установить только если не настроена любая из других функций". Т.е. после перезагрузки девайса он находится в режиме "настройка времени". Если нажать переход в любой другой режим - в режим настройки времени больше перейти нельзя. Никак. Т.е. нужно сразу настроить время(причем часы и минуты настраиваются кнопками + и -, с скоростью, зависящей от времени нажатия на кнопку), затем ждать 5 секунд и девайс переходит в обычный режим. Индицируется это наличием или отсутствием мигания индикатора у пиктограммы "циферблат". Ебаный кошмар. А мы потом удивляемся, откуда такие адские интерфейсы у софта и приборов. Тут в вещах рассчитанных на домохозяек без мануала разобраться невозможно просто по определению. | | Tuesday, June 30th, 2009 | | 1:50 pm |
Гуглозло
Хотел спросить в ЖЖ, какой смысл несут слова "ковариантный" и "контравариантный" при использовании их в рассуждениях о системах типов и прочем CS-зле, но сначала пошел искать в гугле как правильно сформулировать вопрос, вместо этого нашел ответ. | | Sunday, June 28th, 2009 | | 7:01 pm |
Производственный троллинг.
Собирать всю неделю баги в софте, добиваться их воспроизведения, а затем в пятницу вечером, часиков в 4-5 вносить в баг трекер дружественным жыдожаббам. "Удачных выходных." PS: Это мне уведомление из их трекера пришло о исправленном злом баге. :) | | 5:54 pm |
Продолжение про железо
К вчерашнему посту про железо: сегодня полдня занимался шизой, для которой это все надо. Параллельно смотрел что делает сервер у заказчиков, одновременно общался с ними по жаберу, и повторял те же действия на своем компе и виртуальной машине с эмулятором железяки, которую собственно мы и настраивали для общения с сервером. В связи с этим могу сообщить, что asp.net при разработке еще куда ни шло, но вот деплоймент приложений - ад. К примеру, еще практически ни разу не было, чтобы приложение, поставленное вручную на IIS на чистой 2003 винде заработало сразу. | | Saturday, June 27th, 2009 | | 9:45 pm |
Количество железа
Практика показывает, что нужно минимум три компа и четыре монитора. Один комп с двумя мониторами для непосредственной работы. Один комп для разнообразных виртуальных машин. Еще можно его в качестве файл сервера использовать, все равно там нужно дохренища места для образов. Один комп для всякой хрени, вроде запуска игрушек, хождения в инет и проигрывания музыки и видео. И еще нужен ноут чтобы с ним ездить в всякие дебри. Пока из вышеописанного мне не хватает двух мониторов и еще одного компа. | | Friday, June 26th, 2009 | | 8:12 pm |
Комплексы
А вот нет ли у вас комплекса насчет "срать в чужие баг-трекеры"? Мне тут по долгу службы приходится гадить как в собственный баг-трекер, так и в баг-трекер дружественных жабо-разработчиков. Так вот в свой гадить, а тем более назначать баги себе меня совершенно не парит, а вот в чужой - как-то напрягает. "Людям жеж ведь придется разбираться". Правда, судя по содержимому того баг-трекера и ихним исходникам(к которым у меня тоже доступ есть) за качеством они особо не парятся, хотя и знают всякое ентерпрайзно-фреймворковое-жабие лучше меня. В коде чувствуется положение болта на архитектуру и осмысление задач. "Фреймворк вытянет". НО! Ихний руководитель всегда прислушивается к моим замечаниям и просьбам. Есть предположение, что он там вменяемый, а остальные какие-то психи. | | Wednesday, June 24th, 2009 | | 12:25 pm |
Нужна помощь спецов по автоматизации бухучета Как организовать расчет в случае, если есть документы покупки и документы оплаты, они закрывают друг друга(т.е. формируется связь m:n по мере поступления тех и других и по другим критериям из мозга бухгалтера), но есть необходимость учесть сторнирование документов? Я что-то за 10 лет автоматизации бухучета этот вопрос теоретически правильно так и не решил - оставил на усмотрение бухгалтерам, чтобы они вручную разбирались. Кстати тема "закрытие(оплата) одних документов другими" это такой специальный бухгалтерско-программистский фетиш, она выедает мозг просто феноменально. | | 1:38 am |
Шиза DVD привода
Случайно коснулся DVD привода в компе, а он, оказывается, горячий как неизвестно что, сильнее винчестера наверно. Что может так греть неиспользуемый привод, интересно? У меня единственная мысль - или у него замыкание линии питания где-то на корпус (блок питания там мощный, защите какие-то жалкие 10-20 ампер пофиг) или какой-то конструктивный элемент в тыкву превратился. Выдрал из него провода на всякий случай, надо будет достать его и сопротивление померять между корпусом и питанием. Таки бесит отсутствие диагностических средств внутри блоков питания, было бы весьма полезно что-нибудь вроде статистики потребляемой мощности. | | Saturday, June 20th, 2009 | | 1:56 pm |
К вопросу о контроле качества
Нужно построить график. Excel задолбал. Решил скачать gnuplot под винду. Результат первого запуска:  Непонятные закорючки - это таки, как ни странно, буквы, в непонятном шрифте мелкого размера. Все таки, когда нет связи "сделал хреновину - тебя тут же поимели в мозг юзера", это приводит к таким вот вещам. PS: Метод лечения: читаем хелп, про wgnuplot.ini,там есть пример файла создаем его C:\Documents and Settings\user\Application Data\wgnuplot.ini вместо той херни что написана в хелпе(TextFont=Terminal,9), пишем: TextFont=Fixedsys,10 Достаточно самоочевидно для обычного виндовс-юзера, не так ли? PPS: Более логичный способ лечения: щелкаем правой клавишей мыши в заголовок окна, выбираем Options - Choose Font, ставим нужный шрифт и затем там же выбираем "update wgnuplot.ini". Это уже лучше, за исключением того, что в системном меню окна такие вещи делать как бэ моветон. Но таки за исключением этой ереси, gnuplot оказался именно тем, что мне было нужно. Из консоли графики оно мне уже показывает, осталось понять, как бы это его заставить читать данные для графика прямо из stdin или как минимум из файла, указанного в командной строке, или хотя бы с заданным именем из текущей папки. Пока указываю имя файла в командном файле явно, с полным путем. | | 11:50 am |
О пользе юнит-тестов
Нужно рассчитать цифровой фильтр, а модуль работы с комплексными числами написанный еще в универе, куда-то потерялся нахрен. Написал заново, дай, думаю, тесты прогоню. Бац, ошибка, формулу Эйлера неправильно считает. Не ту компоненту написал в функции, блин. | | Wednesday, June 17th, 2009 | | 3:20 pm |
Сектантско-юзабилити вопрос
У ребе belnetmon дискуссия про браузер Сафари. И в ней маководы утверждают, что окна настроек без явных кнопок "Применить" и "Отменить" это есть хорошо. Весь мой опыт обслуживания бухгалтерии и работы в неудобных условиях с чужим кривым софтом свидетельствует об обратном - любые операции и изменения должны быть отменяемы и не приводить к изменениям без явной на то команды, ибо на том конце настроек могут оказаться не clear-type шрифты, а управление задвижкой на газопроводе. Или проводка москалям за газ на пару сотен миллионов баксов. Или еще какая-нибудь трасца, от которой потом юзера в истерике звонят мне "я тут что-то нажала и у меня все поменялось". PS: Еще есть один момент с вводом текста в поля с заданным форматом(числа, даты, время). По идее, можно при этом показывать баллун типа "инвалид валуе", но вот сохранять очевидно "по изменению" здесь не выйдет - как юзера вводят данные, так подлежащая этому полю сущность изменится 20 раз за один сеанс ввода. | | Saturday, June 13th, 2009 | | 12:40 pm |
Дискуссия про национализм
В дискуссии у vitus_wagner привели такой, весьма правильный на мой взгляд, аргумент: ссылко: Наконец, забавнее всего с "народностью". Это может на первый взгляд показаться диким, но на самом деле национализм враждебен и "народности" как традиционной идентичности и традиционной культуре. Ататюрк, создатель турецкой нации, уничтожил традиционную письменность и основательно урезал в правах традиционную религию (это и к вопросу о "православии, кстати); Жаботинский и его последователи, основатели еврейского национализма — сионизма, активно боролись с народной культурой евреев того времени (вплоть до создания, по сути, нового языка); японские националисты в эпоху Реставрации Мэйдзи основательно реформировали письменность и всерьёз обсуждали переход на латиницу, и т.д., и т.п. Если это переложить на белорусские реалии, то главный "народник" у нас - это Батька. А вот националисты-оппозиционеры таки стремятся в европу, и "народность" 83% (ака чарка, шкварка, жабба и пофигизм) явно отрицают. |
[ << Previous 20 ]
|