ivan.nemytchenko

Омский руби-митап

19 июня в Омске состоялся руби-митап, и получился он очень клевым.

Начался он с выступления Руслана Шарипова: "Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?".

Я на этом проекте успел тоже поработать. И поскольку боль у нас с Русланом немного общая, копали мы примерно в одну сторону, соответственно мой доклад был на эту же тему: "От rails-way к модульной разработке".

До этого я выступил с ним на Devconf. И что в Москве, что в Омске, он получил очень живой отклик и послужил началом очень интересной дискуссии. А это значит что надо продолжать и усугублять.

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

На слайдах тыкайте в названия библиотек и имена - это все ссылки.

Дальше Алексей Родионов рассказал про способы документации кода в руби-приложениях:

https://speakerdeck.com/p0deje/yard-bol-shie-chiem-prosto-dokumientatsiia

Доклад оказался полезным тем, что расставил точки над i, в том, в каком формате нужно документировать код(не так уж важно) и чем генерить документацию(YARD). Интересно было послушать про специфические фишки Yard-а, ну и на сладкое - yard-doctest - реализация doctest на руби 

Последним выступил Саша Александров с рассказом про старые и новые фишки постгреса: http://juike.github.io/sprug-postgresql. Это очень круто, так как для многих база спрятана за ORM, что мешает даже подумать, и в итоге программисты забывают что возможностей у них гораздо больше, чем дает этот самый ORM.

Спасибо Андрею Дерябину за то что предложил всем собраться. Идея была очевидная, все возможности были, тока никто почему-то не собирался :) Надо будет обязательно повторить.

Самые смелые и упорные из тех кто не смог прийти на митап могут попробовать посмотреть запись трансляции с хэнгаута: 

Current status и планы на лето

Linkedin подсказывает, что я уже три года как в 7bits. На самом деле моя деятельность в 7bits уже полгода как на паузе, а ее продолжение пока под вопросом. Мы с Аней сделали много всего крутого за это время, думаю сделаем и еще. Не в рамках 7bits, так еще под каким-нибудь соусом.

Если совсем в двух словах описать, то чем я сейчас занимаюсь, то вот они: программирование, путешествия.

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

Теперь что касается дальнейших планов. В этом году я решил пойти в разнос. Из намеченного:

А чтобы было севсем нескучно, я придумал себе такую развлекушку: начал коллекционировать подходы разных команд к проектированию веб-приложений в зависимости от решаемых задач. В Белграде я встретился с командой Activato, в Нови Саде - с ребятами из Semapore.

В первом случае, получилось что я больше делился своим опытом, во втором - узнавал, как все устроено у ребят. Завтра выложу пост про это на медиуме.

Обязательно поймаю и попытаю на эту же тему кого-нибудь интересного в Москве. В планах - Undev (в лице Кирилла Мокевнина), WaveAccess (в лице Николая Рыжикова), Злые марсиане и Букмэйт.

Если вы знаете какую-то еще команду, у которой есть чему поучиться - скажите мне об этом. Если у вас на примете есть пост-другой про архитектуру какого-то веб-приложения на руби, буду благодарен за ссылки.

Если вам интерсно встретиться и узнать что-нибудь от меня - пишите. Мне точно также интересно делиться опытом, как и узнавать о чужом.

Делюсь с вами простым способом занедорого увеличить свободное место на вашем ноутбуке.
Одно время моим основным рабочим инструментом был Macbook Air с 64Gb SSD. Жить можно на самом деле, но временами поджимало конечно.
Ну вообще говоря, рецепт на фоточке. Покупаете себе такую флэшку, втыкаете в USB-порт - и у вас есть еще 64 гига.
Вынимать флэшку совсем не обязательно. Из-за своего размера у нее нет шансов отломаться при переноске ноута в рюкзаке или еще как бы то ни было.
Да, одним свободным USB-портом у вас станет меньше.
Да, флэшка сильно медленней вашего SSD. Но не надо туда складывать что-то с чем вы активно работаете. Там самое место архивным документам, видео, музыке, фоточкам.
P.S. Я слышал, что уже есть MicroSD на 128гб. Если кто-то видел флэшку такого же размера, как на фото на 128гб, поделитесь ссылкой. 

Делюсь с вами простым способом занедорого увеличить свободное место на вашем ноутбуке.

Одно время моим основным рабочим инструментом был Macbook Air с 64Gb SSD. Жить можно на самом деле, но временами поджимало конечно.

Ну вообще говоря, рецепт на фоточке. Покупаете себе такую флэшку, втыкаете в USB-порт - и у вас есть еще 64 гига.

Вынимать флэшку совсем не обязательно. Из-за своего размера у нее нет шансов отломаться при переноске ноута в рюкзаке или еще как бы то ни было.

Да, одним свободным USB-портом у вас станет меньше.

Да, флэшка сильно медленней вашего SSD. Но не надо туда складывать что-то с чем вы активно работаете. Там самое место архивным документам, видео, музыке, фоточкам.

P.S. Я слышал, что уже есть MicroSD на 128гб. Если кто-то видел флэшку такого же размера, как на фото на 128гб, поделитесь ссылкой. 

Всех рельсоразработчиков скоро заменят скриптом

На самом деле не всех конечно. Но какой-то процент точно :)

В общем, мне пришел инвайт на Prelang. Зайдите, посмотрите интереса ради.

Ребята сделали сервис, с помощью которого можно склепать простенькое rails-приложение за 5 минут. Процесс выглядит так: натыкиваешь себе модельки и плагины нужные, генерится приложение в отдельной репе, git clone, bundle install, rake db:migrate, и все готово. 

Не сказать что это прямо сейчас дает вагоны ценности, но например отсуствие необходимости конфигурировать devise и bootstrap - уже хлеб.

Ну и да, это в потенциале способно зарулить потребности заказчика с того же одеска, которому нужен клон AirBnb за 500 баксов.

Такой заказчик с удовольствием отнесет свои кровные в Prelang, вместо того чтобы тратить время на:

  • отбор исполнителя
  • митинги и разъяснение требований
  • а потом и выслушивание объяснений, почему все не готово и глючит.

Давайте посмотрим, что Prelang дает прямо сейчас:

  • модели, поля, ассоциации, все пироги: https://cloudup.com/c0Isjx3oZhf
  • куча разных плагинов типа devise, scaffolding, bootstrap: https://cloudup.com/c68WFbWlkfq
  • чистенький код на выходе по заветам DHH. Самый что ни на есть rails-way.
  • очень порадовали атомарные коммиты в сгенерированной репе: https://cloudup.com/c-SvCR-MFpt

Вывод один: развивайтесь или умрите ;) Учитесь наносить ценность на гораздо более высоком уровне, нежели написание примитивных active-record моделей, формочек и контроллеров для их обработки.

P.S. Если вам нужен инвайт, напишите мне письмо на inem@bk.ru

Про руби и HappyDev

Тут все руки не доходии написать про немаловажное.

Не так давно мы с @AnnieOmsk выяснили, что у кучи рубистов отсутствуют фундаментальные знания - среди них полным полно самоучек, которые быстро освоив инструмент(читай рельсу), начали фигачить приложения, нанося какую-никакую пользу бизнесу(я сам такой).
Да, и тайм-ту-маркет хорош, и инструменты разработки прекрасные. Но блин почему-то как только проект дорастает до определенного уровня, его становится невозможно нормально развивать.

Я начал копать в эту тему и насобирал кучу всего. Все круто, но часто попадаются готовые рецепты, которые без понимания принципов малополезны :\

Едем дальше. Этим летом на UlCamp’13 мне довелось познакомиться с Кириллом Мокевниным и Николаем Рыжиковым, которые в рамках баркэмпа вместе с Сашей Бындю на пальцах рассказали и объяснили основные принципы DDD.

Если коротко, это такой способ думать и проектировать приложения, когда в основе всего лежит непосредственно предметная область и ее бизнес-логика.
А как же можно по-другому? Антипример на самом деле очень простой: вы берете рельсовые соглашения и радуясь тому как все просто фигачите свое приложение. В итоге бизнес-логика размазывается по куче моделей, контроллеров, и не дай бог вьюх.
И как только нужно вносить изменения, приходится перелопачивать код в куче мест.

Лучшая иллюстрация на тему DDD: https://cloudup.com/cSrYSDJs7cB

Я на DDD натыкался еще пару лет назад, но все примеры были на .NET, так что у меня не хватило напору через это пробраться и я забил. А тут вот ребята, оказывается тему раскурили и применили к руби и рельсе.

Через время был еще клевый hangout с Кириллом и Николаем на тему моделей и persistence в рельсе, который я всем рекоммендую посмотреть: http://www.youtube.com/watch?v=QNnewJ-lzdc

Так вот, к чему я. Так сложилось что и Кирилл и Николай приедут на HappyDev’13, выступят с докладами, и будут доступны для общения в течение обоих дней.

Короче говоря, если вы живете в Омске и пишите код на руби, но не идете на нынешний HappyDev - вы идиот :) Ничего личного :)

Архитектура, рефакторинг, реорганизация кода, single responsibility principle в Rails

Накопилось некоторое кол-во хороших ссылок про это все. Положу пока здесь. Будет время, расскажу то я об этом всем думаю.

7 Patterns to Refactor Fat ActiveRecord Models

Making ActiveRecord Models Thin

Single Responsibility Principle and Rails

Single Responsibility Principle on Rails Explained

SOLID Ruby: Single Responsibility Principle

SOLID Ruby: Dependency Inversion Principle

Extreme isolation in web apps

Refactoring with Hexagonal Rails

Posts about Hexagonal Architecture

Datamappify - Compose, decouple and manage domain logic and data persistence separately

http://railscasts.com/episodes/416-form-objects - an approach to separate form handling from active-record models

http://railscasts.com/episodes/398-service-objects - good example of how to split up one huge model to number of small classes with single resposobilites

Принципы ООП дизайна

ActiveRecord inheritance and contexts

Strive for Simplicity

Objectify

Removing notifications from callbacks

Базовый набор менеджера

Начало истории здесь.

Вот такой набор техник и инструментов получился пока что у меня. Он наверняка еще будет видоизменяться, а к самим техникам будут появляться ссылки на карточки.

Сбор требований

  • Vision
  • Персонажи
  • Один день
  • Story Mapping
  • Impact Mapping
  • Т.З.
  • Дерево реальности
  • Customer journey

Планирование

  • Roadmap
  • Критический путь
  • Критическая цепь
  • Заложить буфера

Оценка сроков

  • Planning poker
  • Экспертная оценка
  • Одна-две-три точки
  • Дорофеевский метод

Приоритезация

  • Срочноважность
  • Важнопонятность
  • Buy a feature
  • 100% зрение

Процессы

  • Scrum
  • Kanban
  • Waterfall
  • RUP

Пилюли для менеджера

Три года назад я написал пост под названием “Пилюли для программиста”. С тех пор род моей деятельности поменялся довольно сильно. То, чем я сейчас занимаюсь, проще всего описать словом “менеджер”. На самом деле это дикая смесь из аналитака, продакт-овнера, проджект-менеджера, скрам-мастера и наверняка, чего-то еще.

В 7bits мы обычно берем молодых неиспорченных новичков, и растим из них программистов.

С менеджерами сложнее. Хороший менеджер - опытный менеджер, имеющий за плечами и успехи, и провалы. Но вот таких опытных мы как-то опасаемся звать из-за боязни нарушить экосистему внутри компании. А сами растить менеджеров пока не научились.

Да и вообще, спроси меня - что есть идеальный менеджер, и я отвечу: “Отсутствие менеджера”. 

Но понятно что просто выкинуть роль менеджера из уравнения не получится. Кто-то должен собирать требования, обеспечивать выполнение проекта в срок, общаться с заказчиком и так далее.

Идеальная ситуация - команда должна сама обладать всеми вышеперечисленными компетенциями. Но как к этому прийти? 

Со стороны, глядя на работу менеджера может показаться, что он все делает “по наитию”, руководствуется какими-то своими соображениями, недоступными остальным.

Однако, мне кажется, в большинстве случаев набор методик у каждого менеджера вполне себе дискретен, конечен, и образовался естественным образом - из прочитанных книг, проваленных проектов, конференций и тренингов.

Однако же методик этих в голове у менеджера может быть довольно много, и не все они нужны команде прямо сейчас. 

Я решил “сдампить” свой мозг. Вот что получилось:

Для каждой методики есть короткое описание плюс объяснение какую она собственно задачу может помочь решить и в какой ситуации возможное ее применение.

Вот так это выглядит в черновом варианте:

image image

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

Еще один способ использования: выбрать только то, что подходит для текущего проекта. Это может сделать сам менеджер. Команде при этом не нужно метаться в условиях неопределенности - нужно брать и применять конкретные методики.

Обязательно должно быть некоторое количество пустых карточек, которые можно будет заполнить самостоятельно.

В идеале на карточке должен быть QR-код, считав который можно попасть на страницу с подробной информацией о данной технике, ссылки на книги, доклады, посты в блогах.

Вообще, у меня закралось подозрение, что почти любую специализацию можно “разложить” подобным же образом. Нетрудно представить себе разложенные таким образом cкрам, креативные методики, или работу над стартапом. Или вообще, взять книжку любую бизнесовую, и расфигачить ее на такие отдельные карточки.

А пока идет работа над карточками для базового менеджерского набора, хочу вас попросить ответить на вопросы, чтобы лучше понять направление развития этой темы.

P.S. Если вам интересно посмотреть на черновой вариант моей колоды, укажите это в ваших ответах, и я пришлю вам копию.

P.P.S. Пока что придумалось спорное название “Раступлятор” для всего этого. Если у вас есть идеи получше, буду рад выслушать :)

Заполнить форму