2013-04-29

Как я футболку печатал

Розовые глюки сползают по стенам
В честь переезда в новый офис решил я себе запилить тематическую футболку. Со скептичным Лениным, который пришелся очень кстати. Вырезал, пол часа наяривал кривые в гимпе, чтобы вычленить ровный передний план.

Скептичный Ленин
Прихожу я значит в полиграфическую контору. Выбираю нанесение и отдаю картинку. Оказалось, что просто прозрачной картинки недостаточно, нужно было превратить в вектор. Ну и 400 рублей за обтравку: я ей фигасе, там ровная граница - контур обведется в одно нажатие. Девочка попробовала, герб обтравился, а голова - нет. Мне уже было пофиг - сошлись на пол цены.

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

Прозрачный контур
Прошли выходные, раздается звонок за час до того, как я собираюсь идти забирать заказ: не могли бы вы нам скинуть на почту картинку, мы вашу потеряли. О-ок, по смс получаю почту, скидываю. Осторожно интересуюсь: а вы успеете? На что мне отвечают: конечно. В шесть раздается звонок, я уж было подумал конец, но нет: приходите забирать заказ через 10 минут. Пронесло.

В общем, на футболке Ленин получился не таким скептичным, как на исходнике. Но я удовлетворен. По приезду надо будет нафигачить футболок с Кошем. Благо макетов они выложили уйму.

2013-04-28

Концентрируйся свободно

Лео Бабаута. Концентрируйся
свободно! Манифест простоты в «Век Разрушения сфокусированности». Долгая книга, все никак не мог сфокусироваться на её прочтении. Если вы не можете сосредоточиться на важных делах, вас постоянно отвлекают, вы постоянно забываете про важные дела и встречи, постоянно тянет проверить сообщения в любимой социальной сети, давит груз ответственности и обязательств. Если при этом вы чувствуете что это неправильно и хочется с этим что-то сделать - то книга для вас. Причем, книга находится в паблик домейне, а значит можно скачивать совершенно безвоздмезно. Итог - рекомендую к прочтению.

2013-04-27

Нетерпеливый кольцехвост

Заобновился вчера на новую убунту. Для этого пришлось выкачать больше гига обновлений. Когда уже все скачалось, примерно на середине обновления, я забыл, что  обновляюсь и закрыл крышку. Пришлось восстанавливать установку через sudo dpkg --configure -a, потому что стандартное средство обновления ругалось, но никакого эффекта от нажатия кнопок не было. Вроде всё прошло гладко.

2013-04-26

Юбилей

Разработчика повышают до менеджера
Сегодня испонилось ровно пять лет, как я начал восхождение по профессиональному пути. Надеюсь, что согласно товарищу Платову, меня уже можно считать овладевшим профессией. Еще столько же до профессионала.

2013-04-24

Бизнес-логика в базе


Типичный опердень
Выборка 41.5%
Фильтрация 5.8%
Обработка 13.4%
Аналитика 17.7%
Пост-обработка 21.6%
Комментарии 0%

Или почему это зло

Если бизнес-логика в базе

Первая по важности - это богатые возможности СУБД: умный оптимизатор, который может работать с индексами и собирать статистику, что драматически сокращает объем считываемых данных и памяти; под рукой дешевые джойны по внешним ключам; агрегатные и аналитические функции; группировка и сортировка; фильтрация.

Второе - возможность легко и непринужденно использовать результат такого запроса в качестве источника данных.

Если бизнес-логика в приложении

Нет размазывание бизнес-логики между приложением, и базой. Что же такого на стороне приложения?
1. Не нужно вырезать и вставлять куски кода, чтобы их прогнать в изолированном окружении
2. Легкая отладка - можно остановиться в любом месте обрабоки и посмотреть на данные
3. Версионирование - кто вообще версионирует код, в базе?
4. Легковесность базы - нет логики, достаточно простого SQL, нет требований к базе, можно на коленке разворачивать схему любой версии на любой пользовательской машине. Когда база всего-лишь тупое хранилище данных, нам для работы достаточно командной строки, в идеале поля для выполнения кода с подсветкой синтаксиса. Сам билд становится переносимым, позволяя развернуть рабочее приложение на чистой машине.
5. Декларативный подход против императивно-функционального - СУБД сама выбирает оптимальный порадок выборки данных, зато во втором варианте процесс обработки можно "читать"
6. Комментарии - их нет. Ноль целых ноль десятых процента. Какой смысл их писать, если один кусочек логики размазывается по всему запросу? В случае пошаговой обработки можно пояснять что мы делаем на каждом этапе и почему.
7. Пошаговость процесса и функциональный стиль написания - позволяет писать тесты. Тестирование кода, работающего с базой - это уже джедайские практики. Я ни разу не видел тестов внутри базы, покрывающих пакеты, хотя инструменты имеются.
8. Возможность написать высокоуровневый DSL, который будет адаптирован к бизнес-домену, что позволит транслировать код в SQL с жутким мультипликатором. На эту тему у ребе metaclass можно прочитать много интересного.

Минусы хранения логики в приложении

1. ORM, которые строят сложные и, порой, неоптимальные запросы. А еще, многие из них не умею работать с курсорами, что усложнает написание кода в функциональном стиле с минимумом побочных эффектов. Претензий много.
2. Резко вырастает объем данных, которые нужно загрузить для выборки, одна из причин, по которой аппликейшен сервер держат поближе к базе данных (в сравнении с расстоянием до клиента).

Итог

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

P.S. Пояснения к легенде

Выборка - это Select и Join,
Фильтрация - Where и Having,
Обработка - различные функции, рассчеты, кейсы,
Аналитика - агрегатные и аналитические функции,
Пост-обработка - захардкоженные константы, сортировка и группировка.