28 мар. 2013 г.

Идёт охота на жуков, идёт охота...

Так уж получилось, что мне на работе перепало счастье поддерживать древнее чудовище, выполняющее функции проксирования запросов к СУБД.
По сути это демон, который принимает запросы в виде дампа объектов, выполняет их, сериализует ответ СУБД и шлёт клиенту.
Всё это барахло написано в виде серверного приложения, клиентской библиотеки и отдельной библиотеки, содержащей описание самих сериализуемых классов (описания таблиц, столбцов, условий выборки и типов запросов).
Проблема в том, что эта хрень течёт за неделю на 10 Гигабайт.
Я решил использовать valgrind для поиска утечек. Первый раз я удивился, когда обнаружил, что на нашем девелоперском серваке нет valgrind'а. Ну ладно, поставил. Хотя странно, вроде бы уже лет 5 разработка идёт...
Второй раз я удивился, увидев результат работы valgrind. За один запрос сервер утекает на 2-3 Мегабайта. В результатах была куча текущих методов, но все они являлись просто дефолтными конструкторами передаваемых объектов.
Смутная мысль посетила меня, чтобы подтвердиться при открытии исходников: да, виртуальными деструкторами мои предшественники свой код не баловали.
Добавляю виртуальные деструкторы (это был весьма муторный процесс в виду того, что отдельная либка представляла собой хидер в овер 1500 строк без единого шаблона с объявлением и реализацией 100500 классов и файл реализации в овер 3000 строк, который тоже был способен удивить случайного зрителя тщательно припрятанными объявлениями структур и классов), чтобы обнаружить, что утечки уменьшились лишь незначительно. Всё ещё течёт некий метод getClassName.
Я вчитался в его название и на меня снизошло классическое "Ну нахера, блиать!?".
Открыв хидер, я увидел в нём следующий кусочек няшного говнокода:

#if defined(Q_OS_UNIX)
#include
#define OMAKE_CLASSNAME_METHOD\
    virtual QString getClassName() const { int status; char * realname; \
    realname = abi::__cxa_demangle(typeid(*this).name(), 0, 0, &status); \
    return QObject::tr(realname); }
#else
#define OMAKE_CLASSNAME_METHOD\
     virtual QString getClassName() const { return QObject::tr(typeid(*this).name()).remove("const").remove("class").remove("struct").remove(" ");}
#endif 

Да, память, выделенную под realname, никто не удаляет. Но это мелочи по сравнению с той "архитектурой", которая потребовала введение этого метода.

Там же обнаружился ещё один кандидат в палату мер и говен:

#define OMAKE_NEWINTANCE_METHOD( C )\
virtual C* newInstance(){return new C();}

Вот такие авгиевы конюшни приходится разгребать.

15 мар. 2013 г.

Корпорация добра закрывает Google Reader 01.07.13

Я не знаю, как эта новость умудрилась просочиться мимо меня, но только сегодня я узнал, что гуглоуёбки с 1 июля этого года закроют Google Reader.
Ненависть моя не знает границ. Желаю им неудержимых лучей поноса на веки вечные.
Это единственный сервис гугла, который я использую каждый день.
Вот здесь можно подписать петицию против закрытия бла-бла-бла, на которую всем насрать.

Из альтернатив рассмотрел Яндекс.Ленту (богомерзкое поделие с интерфейсом в стиле всего прочего Яндекса) и Feedly (они пока что используют в качестве бэкэнда Google Reader API, но с 01.07.13 обещают своим пользователям прозрачный переход на собственную технологию).
На последнем сервисе я и решил остановиться.

P.S. Яндекс.Лента оказалась неспособной отображать фиды с blogspot.com. Межкорпоративные тёрки или просто баг?

25 февр. 2013 г.

Лучи любви в мелком пакете заказном

Это будет длинный пост, наполненный ненавистью, с большими простынями почтовых треков.

Итак, угораздило меня под новый год заказать в Китае пару посылок. Кто же знал, что кратчайший путь до Москвы из Гуанчжоу лежит через Брянск и Новосиб, и что посылки будут идти полтора-два месяца.
Первую посылку китайцы отправили 14 декабря в 9:43, вторую - в 10:53, но пределы Китая они покинули в обратном порядке - в 22:45 и 21:18 соответственно.
Далее их пути разошлись.
Первая посылка через 30 дней всплыла в Новосибирске, где её оперативно (менее чем за неделю) обработали и отправили в Москву. Затем прошло всего 16 дней, и посылка у меня в руках. Итого посылка ехала месяц и 10 дней:
Приём14 December 2012 09:43Китай 200949
Экспорт14 December 2012 22:45Китай CNSHAA
Импорт4 January 2013 12:13630982НОВОСИБИРСК PI-20,10100104001МОСКВА
Передано таможне5 January 2013 17:15630982НОВОСИБИРСК PI-20,10100
Таможенное оформление завершено5 January 2013 17:17630982НОВОСИБИРСК PI-2Выпущено таможней0,10100
Обработка8 January 2013 06:45630982НОВОСИБИРСК PI-2Покинуло место международного обмена0,00000
Обработка13 January 2013 13:33104001МОСКВА PCI-1Сортировка0,00000
Обработка18 January 2013 00:00102027МОСКВА-КАЗАНСКИЙ ВОКЗАЛ ПЖДП ЦЕХ-3 УЧ-3.4Покинуло сортировочный центр0,00000
Обработка21 January 2013 00:00111948МОСКВА МСП-3 УЧ-48Покинуло сортировочный центр0,00000
Обработка22 January 2013 13:53127422МОСКВА 422Прибыло в место вручения0,00000
Вручение24 January 2013 00:00127422МОСКВА 422Вручение адресату0,10100

Второй посылке повезло меньше. Более чем через месяц она обнаружилась в Брянске (смотрим на глобус, ищем на нём Гуанчжоу, Москву и Брянс, охреневаем). Оттуда она пинком отправилась в Нерезиновую, где и была вручена получателю. Итого чуть менее двух месяцев, блиать.
Приём14 December 2012 10:53Китай 200949
Экспорт14 December 2012 21:18Китай CNSHAA
Импорт19 January 2013 14:53241982БРЯНСК PI-20,10700101000МОСКВА
Передано таможне20 January 2013 18:41241982БРЯНСК PI-20,10700
Таможенное оформление завершено20 January 2013 18:54241982БРЯНСК PI-2Выпущено таможней0,10700
Обработка21 January 2013 18:17241982БРЯНСК PI-2Покинуло место международного обмена0,00000
Обработка26 January 2013 14:52104001МОСКВА PCI-1Сортировка0,00000
Обработка1 February 2013 00:00102027МОСКВА-КАЗАНСКИЙ ВОКЗАЛ ПЖДП ЦЕХ-3 УЧ-3.4Покинуло сортировочный центр0,00000
Обработка3 February 2013 00:00111948МОСКВА МСП-3 УЧ-48Покинуло сортировочный центр0,00000
Обработка5 February 2013 07:54127422МОСКВА 422Прибыло в место вручения0,00000
Вручение7 February 2013 00:00127422МОСКВА 422Вручение адресату0,10700
Ну и последний трек, заказ из Сингапура. Посылка где-то месяц пряталась, после чего была обнаружена на каком-то задрипанном складе в Москве, оперативно (за 10 дней всего) обработана и выдана.
Экспорт19 January 2013 10:58Сингапур SGSINJ
Прибытие в ММПО19 January 2013 10:58Сингапур SGSINJ
Импорт12 February 2013 10:17104001МОСКВА PCI-10,47800127422МОСКВА
Передано таможне13 February 2013 02:50104001МОСКВА PCI-10,47800
Таможенное оформление завершено13 February 2013 02:53104001МОСКВА PCI-1Выпущено таможней0,47800
Обработка17 February 2013 00:00111985МОСКВА МСП-3 УЧ-5Покинуло сортировочный центр0,00000
Обработка17 February 2013 00:51104001МОСКВА PCI-1Покинуло место международного обмена0,00000
Обработка19 February 2013 00:00111948МОСКВА МСП-3 УЧ-48Покинуло сортировочный центр0,00000
Обработка21 February 2013 08:16127422МОСКВА 422Прибыло в место вручения0,00000
Вручение22 February 2013 00:00127422МОСКВА 422Вручение адресату0,47700
При этом у продавцов, чьи посылки и пыталась оперативно доставить Почта России, значится среднее время доставки посылок 10-15 дней. Вна Украину под Новый год посылки шли за 8 дней, например.

Шлю лучей любви Почте России через Брянск и Новосиб.

23 февр. 2013 г.

Московские PHP-госуслуги

Московский портал госуслуг такой портал.

PHP-программисты набигают.

18 окт. 2012 г.

Ройбуш - бобовый чай

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

Я пил вот такой ройбуш с земляникой:
Здание в восточном стиле, изображённое на упаковке, является памятником профессиональной импотенции дизайнера, у которого в мозгу доминирует совковая ассоциация "экзотический чай = китай".

Земляника очень удачно дополняет сладковатый вкус ройбуша.
Цвет у настоя очень красивый, глубокий красный. Сам настой несколько гуще чая.
В общем, очень приятная штука этот ройбуш, буду брать ещё.

17 окт. 2012 г.

Анальная оккупация МИФИ

Меня ещё во время участия в олимпиадах по программированию заинтересовал "феномен МИФИ": сильные команды этого ВУЗа куда-то исчезли, а оставшиеся сливали всё и вся.
Кажется, я теперь знаю почему.

Собственная кафедра теологии появилась в московском инженерно-физическом институте.
Новое учебное подразделение возглавил глава отдела внешних связей Патриархии митрополит Илларион.
...
По словам главы кафедры митрополита Иллариона, МИФИ должен стать местом «плодотворного сотрудничества православного богословия и современной науки»

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

Горжусь Роиссей, блиать!

15 окт. 2012 г.

Зелёный чай Tess, дес~

Ещё одним приятным открытием оказался зелёный чай, производимый компанией Greenfield под маркой Tess (Компания, кстати, российская с офисом в Британии. Типа, чай из Британии - это понтово, ага.).
Я пробовал их зелёный чай с лаймом и зелёный чай с земляникой.

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

Чай с земляникой мне понравился меньше. Возможно, из-за того, что я больше люблю чай с лимоном, а может, потому что в то же время я приобрёл ройбуш с земляникой, и он оказался вкуснее.
Состав этого чая такой: чай зелёный байховый, яблоко сушёное, лист чёрной смородины, цедра цитрусовых, кусочки земляники, ароматизатор земляничный идентичный натуральному (беее~).
Вкус земляники, впрочем, при повторном заваривании не исчезает. Да и при первом заваривании, он не настолько уж и выраженный, просто приятный зелёный чай с лёгким привкусом ягод. Послевкусие от этого чая менее приятное, чем от лаймового.