![](https://habrastorage.org/getpro/habr/post_images/35d/932/bfe/35d932bfef8f329aa9d1cf29cddf4c2d.jpg)
Проснувшись однажды утром… (нет). Проснувшись как-то вечером… (нет!). Короче, проснувшись однажды на работе солнечным утром (вот уже провокационно звучит), и протерев глаза от производственной рутины, подумал я о том, что команда наша — конечно великолепная, но технологически несколько узковата… “И надо бы покодить на чем нибудь другом!” — блеснул я
После короткого анализа нашей текучки, условия были поставлены следующие:
- 3 полных дня на выезде с ночевками (не отвлекаться!);
- Обязательно в полном составе;
- Формат — стандартный (от естественных идей, через естественный их отбор, и вперед — к реализации);
- Идеи проектов — ограничили веб-сервисами (десктопы категорически не хотим), да и само по себе “программирование для людей” — в целом приятное дело.
Технологические условия:
- кодим на чем угодно, только не на нашем “рутинном” стеке (php / java / python / mongodb / *sql / мобильники / пайка микросхем / программирование микроконтроллеров);
- что означало: [node.js] [go] [erlang] [redis] и любые базы [кроме sql] и поднадоевшей уже [mongodb];
- Фронтенда у нас совсем нет, поэтому приглашали друзей/знакомых, но они почему то не присоединились (выходных пожалели — и зря!) — поэтому на фронтенд-ные технологии не ориентировались вовсе;
- Подготовка по стеку минимум на уровне ‘hello world’ для всех участников;
Алкогольныемотивирующие напитки за свой счет.
Первое — надо было выбрать идею для реализации. Несмотря на предстоящие объяснения и прочее умное агитирующее бла-бла, выражения кодерских лиц на 97,43% было тождественно с “WTF, что я здесь делаю?”.
![](https://habrastorage.org/getpro/habr/post_images/04a/26e/712/04a26e712a81ad58ec38a232f9633b96.jpg)
Но уже через несколько минут первые набросы на вентилятор сделали свое дело — поток дружественного троллинга различной толщины активировал творческие доли мозга и идей набросали на несколько листов флипчарта. Выглядят они не особо интересно, весь цимус был в живом обсуждении:
![](https://habrastorage.org/getpro/habr/post_images/6ff/1a7/7d2/6ff1a77d2a265eca0f5e0c0419384d71.jpg)
Идеи были разные, лишенные какого либо бизнес-смысла (не для бизнеса мы все это затеяли).
Но все они — из области нанесения добра и улучшения (с дальнейшим покорением) интернет-ойкумены:
- оптимизация продаж билетов ржд;
- несколько вариантов гениальных замен для ужасных форм обратной связи на сайтах;
- социальные сети на звуковых сообщениях;
- несколько онлайн-много-человек-игр (мафии/покеры/etc со значительно улучшенными для онлайна правилами с видео-перепиской и системами распознавания мимики);
- муравьиные баталии (http://habrahabr.ru/post/135287/) с переносом действия на онлайн-карты Москвы (исключительная идея зла и разрушения);
- создание неангажированного и грамотного агрегатора новостей с правильным анализом популярности/распространенности;
- космически оперативная курьерская служба, по аналогии с яндекс.такси и механизмами защиты от преступных намерений
Пришло время выбора. На вторых местах — конечно же “эРЖэДэ” (самый толстый троллинг был именно тут). На первых — злые муравьиные сражения и добрый напоминательный сервис. Для разработки выбрали сначала добро, а зло (если успеем) отложили на потом :-)
Идея очень простая, но участникам интересная — сервис с открытым API, через который можно оставить заявку-напоминалку себе, или фолловеру, или группе друзей или корпоративно-административной группе, которую можно сделать периодической или назначить на какое-то время, а также механизмы защиты от использования сервиса в качестве спама, и т.п. кучка связанных фич.
Приступили к архитектурному
![](https://habrastorage.org/getpro/habr/post_images/c7b/bd1/a32/c7bbd1a3201858a6899445d66654a0e1.jpg)
Схемы и варианты реализации размножались со скоростью 27 флипчартов в час:
![](https://habrastorage.org/getpro/habr/post_images/eac/a42/6f7/eaca426f78002f8a2c9979d763193dc7.jpg)
Режиссура процесса: визуализация провайдерского масштаба доставок для напоминалок:
![](https://habrastorage.org/getpro/habr/post_images/c65/ba2/08f/c65ba208f3b3e695bcbd413f3f8ba4e2.jpg)
Команда R&D уже придумала бренд, зарегистрировала домен и приступила к расчету прибылей :-)
![](https://habrastorage.org/getpro/habr/post_images/d17/4d1/0bd/d174d10bd3a212d1a95dd61b94757f55.jpg)
К обеду все было готово, а именно:
- Запротоколирована предметная область и архитектурные слои;
- Команда “ERLANG” — делает фронтовую часть и разбрасывание заявок-напоминалок по предметной области (людям/группам/фолловерам) задуманного сервиса;
- Команда “GO” — реализует многопотоковое считывание данных из предметной области и архи-нагрузочное разбрасывание напоминалок по провайдерам доставки;
- В качестве базы взяли Redis;
- Команда “СИСАДМИН” — готовит софт на боевых серверах и бездельничает в ожидании задач по деплою;
- Команда “R&D” уехала искать большие чемоданы для денег :-)
- Осмысленности в выборе технологий под задачи — не было никакой — участники хакатона на данных языках раньше ничего не делали и с Redis-ом не работали. Но именно в таком развитии событий и был задуман хакатон :-)
После обеда — полезные для продуктивной работы серых клеток — моционы.
Табличка “для детей до 14 лет” никого не смутила, тем более что ни одного человека в заданном диапазоне в округе не наблюдалось :-)
![](https://habrastorage.org/getpro/habr/post_images/ec9/f3d/f60/ec9f3df60365d4c560875bbe1d65629a.jpg)
![](https://habrastorage.org/getpro/habr/post_images/16d/cd3/e26/16dcd3e267a8ec09ab0becd133d1cea5.jpg)
![](https://habrastorage.org/getpro/habr/post_images/413/cae/dc2/413caedc287225fd434a045bbf2b4c72.jpg)
Команды сформированы, задачи ясны — за работу!
![](https://habrastorage.org/getpro/habr/post_images/6a6/b7e/93d/6a6b7e93d60b14ff9101d18fe4890636.jpg)
Команда “GO”. Тот, кто подготовился чуть больше чем ‘hello world’ — закономерно популярен и величественен :-)
![](https://habrastorage.org/getpro/habr/post_images/62f/ae6/23f/62fae623fe731d245beb0da192cb20fe.jpg)
В команде “ERLANG” весело. Они еще не подозревают о всей тяжести последствий их выбора :-)
![](https://habrastorage.org/getpro/habr/post_images/86e/bdb/6af/86ebdb6afb85ef49b824cb826179b7d1.jpg)
Периодически пытались вспомнить все то, что было нагенерено в идею на старте и ввиду разницы пониманий, приходилось собирать все “в реальную для реализации конкретную кучку”:
![](https://habrastorage.org/getpro/habr/post_images/7c6/ee6/4e9/7c6ee64e995041ce11570892825306bc.jpg)
В фоновом режиме общий скайп-чат затягивает на темную сторону силы:
![](https://habrastorage.org/getpro/habr/post_images/170/e34/cd4/170e34cd4195dcf77156da8f3d47218f.jpg)
Вечерняя программа.
Футбол в нынешнем сезоне лучше играть, чем смотреть:
![](https://habrastorage.org/getpro/habr/post_images/513/5e2/5f8/5135e25f836e403cbac72a8283d36bf3.jpg)
Реактивные испытания:
![](https://habrastorage.org/getpro/habr/post_images/d4a/c20/1bd/d4ac201bda25dce65a606f347de8fabc.jpg)
Второй и третий день. Только кодинг, только хардкор: для чего меняем помещение и обустраиваемся с комфортом:
![](https://habrastorage.org/getpro/habr/post_images/9b3/b99/ec8/9b3b99ec8885e1727bfab9bfbf679504.jpg)
Затылки команды “ERLANG” умны и сосредоточенны:
![](https://habrastorage.org/getpro/habr/post_images/d87/20c/549/d8720c5494e4422e25e9fdcca0cdb616.jpg)
Вероятно, кодят API для фронта:
![](https://habrastorage.org/getpro/habr/post_images/ea9/085/bc7/ea9085bc7ab00731d25c7dafbc1c0674.jpg)
Робкая история коммитов “от новичков в жанре”:
![](https://habrastorage.org/getpro/habr/post_images/754/531/462/754531462cebba397e0f61c3208ccebd.jpg)
Команда “GO” ищет коннект в Redis:
![](https://habrastorage.org/getpro/habr/post_images/941/4ec/f32/9414ecf320825274cbc2ebf1280083f0.jpg)
… и найдя, сочиняет романтические японские стихи, в которых каждая строка начинается с волшебного “go”, наделяется ведомым только автору смыслом, посвящая их прекрасным и доступным горутинам :-)
![](https://habrastorage.org/getpro/habr/post_images/338/10f/958/33810f95801bcf09e099cd0c48c21cb3.jpg)
По ходу дела — парочка ноу-хау.
Например, “nosql-paper-database”, версия “flomaster”.
- скорость записи — 4 фломика в час
- скорость чтения — световая
- скорость понимания — нулевая :-)
![](https://habrastorage.org/getpro/habr/post_images/a3f/995/314/a3f995314a3aeb85fe9e5e46929a0d74.jpg)
А теперь всем бояться… ОНО компилируется:
![](https://habrastorage.org/getpro/habr/post_images/ec3/563/7c2/ec35637c2ef5df4d58bd6a63acf17f3c.jpg)
ОНО что-то делает:
![](https://habrastorage.org/getpro/habr/post_images/784/e15/557/784e1555771d222bd807bc2a2367a5ba.jpg)
При этом Асинхронно и Параллельно!
![](https://habrastorage.org/getpro/habr/post_images/1b9/420/387/1b942038761119fdaaf15d9d9a21e7b5.jpg)
И достаточно быстро…
![](https://habrastorage.org/getpro/habr/post_images/a7f/a9f/703/a7fa9f703294a72db8fd3bb8672a312c.jpg)
Итоги:
- Придумали и сделали сервис (даже слегка работающий), на ЯП-ах, ранее нам неведомых.
- Жалейте те, кого мы звали, но вы не пришли :-)
- Как нибудь повторим.