dzaporozhets

9 ноября 2015, The Netherlands

# Понедельник 85 твитов

Всем привет! На этой неделе с вами буду я, @dzaporozhets :)

10:40

Меня зовут Дмитрий. На текущий момент я CTO компании GitLab

10:42

Будем общаться на тему open source, remote work и немного о руби :)

10:42
@rubyunderhood а почему на Ruby?
10:49

GitLab написан на Ruby по 2м причинам: скорость разработки и я тогда работал рубистом :) @dcromster

10:51

Благодаря Ruby + Rails я смог набросать первую версию GitLab меньше чем за месяц вне рабочее время

10:52
@rubyunderhood а как у вас организована remote work?
11:01

Вся команда GitLab работает из дома, Starbucks и тд. @freemanoid321

11:02

У нас есть маленький офис в Сан-Франциско для почты и гостей но он обычно пустой

11:03

Все общение или асинхронное (issues, emails) или видео звонок в Hangouts

11:04

в команде GitLab 35 человек. Географически в основном US, Европа. Но есть из Африки и Южной Америки. @anton_davydov

11:09
@rubyunderhood а можешь подробнее про команду рассказать? Сколько, от куда и тд
11:10

Инженеры и дизайнеры в основном из Европы. В штатах только Sales и маркетинг

11:14
@rubyunderhood а из постссср стран (или русскоговорящих) много инженеров?
11:15

Из постссср инженеров не много. Рубист и пару дизайнеров. В основном по причине "так вышло"

11:19

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

11:19
@rubyunderhood как держите команду в "тонусе"? Ежедневные видео-митинги, спринты, репорты? Используете ли pair programming?
11:20

Ежедневный митинг на 30 минут но присутствие не обязательно.

11:22

Никаких репортов не практикуем. У нас релиз каждый месяц 22го числа. Можно считать это месячный спринт

11:28

Pair programming отсутствует по причине: 1) все удаленно 2) каждый работает в удобное ему время

11:30
@rubyunderhood если причина "так вышло", значит предпочтение отдаете разработчикам не из постссср?
11:31

Предпочтение отдаем разработчикам со знанием английского и вкладом в open source. Откуда ты - не имеет значение.

11:32

Насчет "тонуса". Мы не заставляем работать с 9 до 6 в офисе. О эффективности судим по merge requests. Вроде все в тонусе :)

11:37
@rubyunderhood а какой английский вам нужен? Явно же не только чтение документации
11:37

Английский нужен уровня "позвонил и объяснил в чем проблема"

11:39
@rubyunderhood CTO продолжает писать код?
11:41

С ростом компании CTO перестает писать код. Пока я стараюсь избежать этого. В этом мне помогает Product Manager. @common_disease

11:45
@rubyunderhood почему приоритет у опен сорс котрибуторов? Как это характеризует человека с точки зрения тебя как СТО?
11:46

99% кода в GitLab это open source. Разработчик должен писать качественный код и взаимодействовать с комьюнити. Быть вежливым и тд

11:49

Поэтому если у вас есть опыт в open source - скорее всего вы нам подходите больше чем closed source разработчики

11:50
@rubyunderhood а сейчас бы GitLab на чём написал?
11:51

GitLab написал бы все равно на Ruby по причине скорости разработки и доступности библиотек. И open source community у руби отличное :)

11:54
@rubyunderhood Что посоветуется новичку, который начал изучать Ruby/RoR, книги/курсы/другое
11:55

Новичкам в Ruby советую ходить по собеседованиям и контрибьютить в open source. Есть куча гемов с мелкими багами которые вы можете исправить

11:57
@rubyunderhood почему так долго открывается gitlab.com/u/dzaporozhets ? особенно user activity долго грузится
12:08

Мы перевели gitlab.com на Azure потому что Amazon выходил дорого. В итоге получили кучу проблем. Но мы стараемся :)

12:10
@rubyunderhood а есть ли курс, уходить от ruby? Ну например у гитлаба стали появляться микросервисы на go
12:13

У нас два разработчика начали изучать Go. В итоге то что плохо работало на руби они переписали на Go. Но проект в целом остается на Ruby

12:15

Приложения внутри компании обычно пишем на Rails. Быстро и работает.

12:17
@rubyunderhood а что плохо работало на руби?
12:18

Git over HTTP и GitLab Runner (выполняет задачи по CI) переписали на Go. Все остальное пока нормальное работает.

12:19

У нас больше проблемы с файловой системой для хранения репозиторием чем с Ruby. Так что руби все еще торт :)

12:21
@OhTheAnguish @freemanoid321 @rubyunderhood все в одном часовом поясе? если нет, то как сихронизируетесь?
12:23

Работаем в разных часовых поясах. Пересечения в пару часов достаточно для решения срочных задач. Остальное общение асинхронно в GitLab

12:24
@rubyunderhood вы пробовали использовать JRuby или Rubinius?
12:31

Готовый проект перевести на Rubinius и JRuby довольно не просто. И не всегда
это даст выигрыш по производительности.

12:35
@rubyunderhood Сразу спрошу за мотивацию. Что вас двигает вперед, заставляет учиться, делать то, что не особо охото.
13:07

Мотивация основана на нуждах человека. Хочешь признания - сделай что-нибудь стоящее. Хочешь большой бицепс - качайся ;)

13:13
@rubyunderhood Что думаете о Elixir и Phoenix?
13:14

Думаю что рубистам стало скучно а учить Clojure/Erlang было лень. Поэтому появился Elixir :) Лично я предпочитаю Clojure

13:19
@rubyunderhood расскажи, почему всё-таки с puma обратно вернулись на unicorn?
13:22

Мы пробовали Puma web server пару лет назад но он у нас не пошел

13:26

До multithreading нам тогда было далеко. Даже если исправить само приложение всегда найдутся темы которые его не поддерживают

13:27

Если добавить сюда memory leak то проще использовать Unicron + worker killer. Puma у нас съедала всю память и умирала

13:29

Учитывая факт что GitLab должен работать на 2х гигабайтах ОЗУ - мы решили оставить идею с Puma

13:30

К тому же гитлаб активно работает с git, shell, network и тд. Иногда GC просто не освобождал память

13:33
@rubyunderhood если бы вы разрулили со своими утечками, то с пумой наверно проще было бы по памяти ужаться.
14:00

Разработка должна быть прагматична. Можно долго искать утечки памяти в приложении и 300х гемах. А можно поставить worker-killer и "на потом"

14:05
@rubyunderhood А как начать контрибьютить? Для меня здесь будто психолог-кий барьер.Жизнь не сталкивала,сам не знаю с какой стороны взяться
14:06

Начать контрибьютить в open source можно с документации. Там всегда есть что добавить или исправить.

14:10

Можно найти гем и заглянуть в issues. Предложить помощь в решении какого-либо issue простым комментарием

14:12
@rubyunderhood вопрос, который в разных формах всплывал в нескольких предыдущих эфирах: как вы таймаутите это всё?
14:14

У GitLab код открытый - можно посмотреть код тут gitlab.com/gitlab-org/git…

14:15

Немного о распорядке: понедельник начинается с кофе. Потом тренажерный зал и разбор email. К вечеру удается немного программировать

15:15
@rubyunderhood получается, есть "минимальные системные требования", которые надо поддерживать? Как поддерживаете?
15:21

GitLab в отличии от SaaS имеет системные требования. Чтобы его могли устанавливать небольшие команды и индивидуально. @killthekitten

15:24

Сейчас GitLab нужно 2 core cpu & 2gb ram для нормальной работы небольшой команды

15:25

Системные требования учитываются при проектировании нового функционала приложения.

15:35

По этой причине мы откладываем использование search server типа Elastic тк это увеличит минимальные требования в разы

15:40

Одна из сложностей разработки self-hosted application в том что тебе нужно дать людям простой установщик

15:47

RoR устанавливать не просто особенно если есть привязка к руби версии. Поэтому используем github.com/chef/omnibus для создания установщика

15:49

Хотели сделать тру debian пакет но у debian требование запаковать каждый gem отдельно. Если у вас 300 гемов это нереально.

15:50

О инструментах: iMac + linux laptop. Код пишу в vim. По сути 2 главных приложения - это терминал и браузер.

16:12
@rubyunderhood 1 монитор? Какая диагональ? Клавиатура маковская?
16:32

iMac 21" с маковской клавиатурой. Скучный набор :)

16:33
@rubyunderhood какая модель лэптопа?
16:33

ноут - Dell XPS 13 Developer Edition c убунтой на борту

16:34
@rubyunderhood а поддерживать две разных БД это требование бизнеса? могли бы дропнуть mysql, и всё на postgresql сделать :D
16:34

Enterprise требует поддержки mysql. Поэтому приходится поддерживать и postgres и mysql в GitLab

16:35

Только что прочитал твит от @gruz0 о том что "Все рубисты бухают" :) Мой ответ - джин с вермутом

16:54
@rubyunderhood @gruz0 джин вообще напиток богов :)
17:04
@rubyunderhood а ещё бычтрее с README которое отображается на гитхабе :)
17:43

У кого уже Ruby 2.2 крутится в production? Есть ли ощутимый прирост по производительности?

17:44
@rubyunderhood но те кто давно не обновлялся хвалят
18:18

На сегодня все. Всем спасибо за отличное общение. И не забывайте про life/work balance ;) Увидимся завтра

18:21

# Вторник 34 твита

Всем доброе утро. Свое начал с кофе и игры на xbox :)

8:28
@rubyunderhood хорошее утро) Во что играешь?
8:51

Играю в GTA V @killthekitten

8:52
@rubyunderhood @killthekitten а ты точно разработчик?
8:54

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

8:56

Пару лет назад я тратил пол часа утром чтобы добраться до офиса. Теперь использую это время для fun. Это из плюсов remote working :)

8:58

Давайте немного поговорим о remote working. Это круто но есть пару нюансов

9:23

Во-первых большинство времени вы будуте работать из дома иначе Starbucks вас быстро разорит :)

9:25

Правило 1: одевайтесь нормально. Не майка и спортивные штаны на фоне ковра а хотя бы джинсы и свежая футболка

9:27

Правило 2: старайтесь не кушать за рабочим местом и вообще держать его в чистоте

9:29
@rubyunderhood правило 1: начать надо с отдельного помещения, комнаты, больших колонок и кофе (воды) под рукой :)
9:31

Если дома не одни - то вам 100% нужно отдельная комната под кабинет

9:32

Еще всех рядом прийдется приучить что "вы работаете". Иначе будет "сходи в магазин - ты же все равно дома сидишь"

9:34
@rubyunderhood это знакомо. После рабочего дня: "ты же был дома, почему не мог сделать это и то?" :D
9:42

Немного о open source. В GitLab открыт не только код приложения но и много документации по работе в компании

11:39

Например у нас есть handbook - about.gitlab.com/handbook/ в котором есть почти вся нужная информация для сотрудников компании. Тоже open source

11:40

Работаем исходя из принципа все public кроме gitlab.com/gitlab-com/www…

11:47

Хочешь чтобы компания возмещала Starbucks - делаешь merge request в Handbook и ждешь пока(если) СxO его примет :)

11:51
@rubyunderhood а большой у вас ажиотаж заявок в компанию?
12:08

Специально для @anton_davydov cпросил у hiring person много ли людей хотят работать в GitLab. Ответили "A lot" :)

12:10

Теперь немного о технологиях в GitLab. Все веб приложения пишем на Rails. Базы данных: postgres и redis. На каждом сервере chef.

12:16

О профессионализме рубиста можно судить по соблюдению Ruby style guide. Какой там Rails если не можешь код выровнять.

13:12
@rubyunderhood то есть до технического собеедования мало кто добирается? кто у вас вообще занимается этим?
16:01

До технического собеседования доходит ~ 25%. Собеседованиями занимаются люди схожей позиции. Рубист для рубиста и тд.

16:03

Если человек проходит техническое собеседование - то потом финальный разговор с CEO и человек в тиме

16:04
@rubyunderhood у вас много внутренних самописных проектов? то есть команда не только гитлабом занимается?
16:04

Помимо самого GitLab есть связанные проекты. Например, менеджер лицензий для Enterprise версий. Тоже рельсовое приложение ;)

16:10
@rubyunderhood один человек собеседует? алгоритмы спрашиваете? просите ли писать код сразу на собеседовании? тестовые задания даёте?
16:11

Собеседует обычно один человек. Шаришь экран и пишешь код. Обычно это минимально простая задача для самого гитлаба или близкая к нему

16:13
@rubyunderhood а у вас все работают только на полную ставку? Есть кто-то, кто работает на part-time?
16:47

Пару человек которые совмещает учебу с работой. А так все фул тайм @anton_davydov

16:48
@rubyunderhood обучение разработчиков с нуля не планируете в далеком будущем? Понимаю, что сейчас вопрос об этом не стоит, но все-таки.
17:15

Обучение разработчиков с нуля это тяжелый труд. На данный момент это кажется очень далеким будущим для нас.

17:17

Кстати об обучении. Каждый новый сотрудник присылает merge request со своим именем на Teams page. Даже Sales. Вот они от git в шоке ;)

17:19

# Среда 40 твитов

@rubyunderhood а расскажите, пожалуйста, о масштабировании рельс. Что почитать, как вообще подходить к решению этой задачи
8:29

Масштабируемость: HA proxy, куча серваков c rails приложением и master/slave Postgres. А дальше зависит от специфики приложения.

8:33

О хостинге: сначала хостили gitlab.com на одном сервере Amazon. С ростом нагрузки просто увеличивали CPU, memory

12:10

Потом перешли на аренду физического сервера. Выходило значительно дешевле а мощность больше.

12:11

Но, как оказалось, с физическими серверами намного больше мороки. То проблемы с bios, то блок питания сгорит и тд

12:13

Вернулись на Amazon на время. Но когда pricing дошел до 40k$ в месяц опять задумались о физических серверах

12:14

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

12:17

В итоге сейчас думаем брать физические сервера для Rails а на Amazon держать только то что падать не должно (балансировщик, NFS)

12:19

Вывод: если нет людей но куча денег (любой стартап в долине) - то Amazon отличный вариант

12:21

На gitlab.com сейчас 16TB репозиториев. NFS пока еще справляется но ищем альтернативу

12:51
@rubyunderhood
Я не знаю какое сервера вы использовали, мы пользовались HP серверами и не знали с ними проблем.
12:52

От проблем в железе никто не застрахован. Вопрос в том: есть ли у вас персонал который обеспечит бесперебойную работу всего этого

12:52

Ну и главный момент: сравнение цены инженера занимающегося физическими серверами с ценой хостинга

12:53
@rubyunderhood все рассказывают/спрашивают как набирают сотрудников, а как увольняют(ся)? Где-то прибыло, где-то убыло.
16:02

Про увольнение никто и не пишет по той причине что писать нечего. Ты или хлопнул дверью или тихо ушел. Процесс везде одинаковый и скучный

16:03

Люблю эту веб страничку - ruby.sadi.st/Ruby_Sadist.ht…

16:09

Вот список наших CI jobs. Только сегодня добавил flog & flay. В идеале хочется видеть красный CI при плохом коде pic.twitter.com/B9NUGzotey

16:29
@rubyunderhood сможете поделиться опытом? twitter.com/jsunderhood/st…
16:44

Насчет "свой стартап" могу набросать пару мыслей @nick_jastix

16:47

Быть CEO это значит: продавать продукт и нанимать правильных людей. Про разработку можно забыть.

16:50

С точки зрения финансов чаще выгоднее работать на Google чем пытаться запустить стартап вне Долины.

16:53

Если стартап рассчитан на ИТ клиентов - то большая часть дохода будет из Штатов. Поэтому без присутствия в Долине будет тяжелее.

16:59

Стартап подразумевает инвестиции. Для европейского инвестора миллион это много а для Долины обычное дело.

17:01

Вообщем путь успеха: 1) переезд в долину 2) социализируемся 3) подаем заявку в инкубатор где вас учат 4) получаете миллион

17:03

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

17:05

Вообще если все-таки решите начинать стартап то посмотрите эти видео youtube.com/playlist?list=…. Лучшее что могу порекомендовать

17:29

Небольшой опрос для себя :) Что вы используете для code hosting?

17:35
@rubyunderhood у нас юзают self-hosted GitLab только потому, что компания параноидально не доверяет облакам.
18:40
@common_disease @rubyunderhood и правильно делают
18:45

Вообще хороший кейс для GitLab это когда у тебя в компании 1к+ девелоперов. github.com уже не вариант а EE стоит кучу денег

18:47

Из хорошего что недавно сделали в GitLab - это встроенный CI. Удобно когда тесты и код ревью в одном приложении

19:11
@rubyunderhood ceph хвалят
21:08
@rubyunderhood как правило, гитлаб выбирают либо из-за большого кол-ва проектов или из-за паранои, те кто не брезгует saas сидят на гитхабах
21:17
@rubyunderhood расскажи какое самое тяжелое решение тебе приходилось делать как руководителю
21:30

Не могу представить тяжелые решения у CTO небольшой компании. Сложные технические да но не тяжелые. Людей увольнять не приходилось

21:34
@rubyunderhood ну вот мне было тяжело уволить в первый (и единственный за 5 лет) раз
21:45
@rubyunderhood Ну и как-то я понял что нужно просто взять и выкинуть результат 2х-месячной работы
21:46

Релиз каждый месяц не дает возможность зависнуть на каком-нибудь такси надолго. Поэтому не бывает "пол года делал а оказалось ненужным"

21:47

Кстати я думаю одна из причин популярности Ruby это стартапы которые на коленке за месяц делали свои проекты на Rails.

21:51

В каком-то смысле говнокод на Rails спас ваш Ruby. А теперь вам что-то не нравится :)

21:52

# Четверг 47 твитов

@rubyunderhood Расскажите про собеседования. Что могут спрашивать, как лучше готовиться, какие у вас требуют умения?
8:21

Перед собеседованием сначала узнайте побольше о компании. Чтобы вы могли ответить на вопрос "Почему вы хотите работать именно у нас?"

8:23

Собеседование это не только ответы на технические вопросы. Это и общее впечатление о человеке и то насколько лоялен он будет компании

8:27

В странах бывшего СССР есть такое отношение "пофиг где работать лишь бы зарплату побольше выбить и печеньки"

8:32

В ответ у работодателей такое же отношение к сотрудникам. Офис с 9 до 6. Больше правил и минимум доверия.

8:34
@rubyunderhood потому что на практике выбора то и не было - магазин рядом (уже все свои) или завод рядом, где родился там и пригодился
8:40
@rubyunderhood Лояльность компании? Ты еще гимн предложи спеть. Это какой-то пиздец, работодателю ты нужен больше чем он тебе.
8:43

Вот так и живем. Работнику безразлично где он работает. Компании безразличны сотрудники.

8:44
@rubyunderhood про отчуждение работника от результата труда и связанные с этим проблемы ещё маркс писал так то
8:47

Самый яркий пример: "Я не знаю что вы за компания и чем занимаетесь но я тут самый умный и вообще это я вам нужен."

8:55

С такими людьми будет тяжело построить компанию. Поэтому мы их стараемся избегать.

8:58

Не стоит забывать что мы небольшая продуктовая компания. Если это out source конвейер то им может быть все равно.

8:59
@rubyunderhood проблема в том, что и компаний таких достаточно на свете
8:59

Верно подметили что плохих компаний не меньше (а может и больше). Все зависит от того где вам удобней работать

9:00
@rubyunderhood а почему бы тогда не спросить в ответ "зачем вы хотите, чтобы я работал у вас в компании, раз позвали собеседоваться?"
9:01
@rubyunderhood человек пришёл собеседоваться просто потому, что у вас есть вакансия, а ему нужна работа.
9:03
@freiksenet_ru @rubyunderhood да кому ты с таким отношением нужен? У меня такие на работу никогда не попадут
9:04

Даже если вам просто нужна работа но вы поленились загуглить страничку "о компании" то это скорее минус чем плюс

9:05
@rubyunderhood гениальных мудаков ни кто не берет работать. но вы впадаете в другую крайность - быть лояльным уже на собеседовании
9:06

Не надо быть лояльным уже на собеседовании. Надо быть осведомленным куда вы собеседуетесь и почему именно сюда. @backendsecret

9:08
@backendsecret @rubyunderhood иногда даже ищу потенциальных руководителей в соц сеточках. Если неадекват (по моим меркам) - в (*) компанию
9:09
про лояльность.Лучшее интервью было после письма "я ваш пользователь,продукт уродство,но я знаю как сделать лучше" twitter.com/rubyunderhood/…
9:14

Вообщем собеседование это не только ответ на технические вопросы по учебнику. А попытка понять подходите вы друг другу или нет

9:27

Чтобы через пол года не искать нового сотрудника на эту же позицию.

9:28

Мне кажется беда в том что работодатели и программисты видят себя по разные стороны баррикад. Хотя должно быть наоборот

9:36
.@rubyunderhood @backendsecret Вопрос - сейчас все cloud-ы предоставляют network storage (типа AWS EBS).
9:38
.@rubyunderhood @backendsecret Не кажется ли вам, что "скрывать" сеть за диском - плохая идея, и мы все упремся в blogs.oracle.com/jag/resource/F…
9:38

Может технически это неверно но удобство того же EBS сложно недооценить. И кстати работал у нас стабильней чем некоторые винты :) @fxposter

9:40
@code1n @rubyunderhood @freiksenet_ru если человеку пофиг на компанию и проект то толку с него будет мало.Творец должен любить свое детище
9:42
@ptico @code1n @rubyunderhood Ну это *твоя* задача сделать чтобы человеку было не пофиг. Если ты не крутой модный стартап или Фейсбук.
9:44
@freiksenet_ru @rubyunderhood @ptico @code1n обоюдная задача – уважать время друг друга и как можно раньше понять, случится ли польза
9:49
@backendsecret @code1n @rubyunderhood @freiksenet_ru ну, знаешь ли, я езжу через весь город к автомеханику «творцу» вместо ближайшей СТО
9:50
@rubyunderhood согласен.лояльность в такой формулировке уместна. и про подмену ценностей тоже.
9:53
@mktoid @rubyunderhood @backendsecret а лояльные действия сотрудника приносят + к баблу компании -> + к баблу сотрудника? Взаимовыгодно же.
9:57

Лояльность сотрудника — желание соблюдать установленные правила поведения в фирме, ценности, нормы поведения.

9:59

О методе разработке GitLab: есть список задач на каждый месяц. В большинстве случаев разработчик сам выбирает над какой задачей работать

14:52

По выполнении задачи создается merge request на другого разработчика для code review. После review код заливается в master

14:53

Сейчас хотим вынести максимум проверок на качество кода в CI. Тк чем больше diff тем менее качественно люди его проверяют :)

14:56

Крутая штука houndci.com Мне нравится что работает с diff а не с целым проектом. Актуально если вам достался плохой проект

15:02

Вот такой должен быть сайт с документацией у языка clojuredocs.org!

15:39
@rubyunderhood тебя на этой неделе не замучили vim/emacs/etc срачем почему-то. Расскажи про свой вим
15:45

Работаю в vim из терминала. Пару плагинов для ruby/rails и clojure. nerdtree для списка файлов. Обычно сплит между файлами. Табы редко юзаю

15:49

Раньше было куча плагинов и самописной фигни .Теперь vimc всего на 60 строк. И даже пользуюсь стрелочками вместо "hjkl" :)

15:55

Тем кто только изучает руби советую посмотреть destroyallsoftware.com/screencasts/ca… Они хоть уже и старые но все равно крутые :)

16:14

И надеюсь вы все смотрели destroyallsoftware.com/talks/the-birt… :)

16:15

# Суббота 2 твита

Кто-то пробовал уже listen weblog.rubyonrails.org/2015/11/11/sna…?

9:55
@backendsecret а мы вот тот, который с gitlab в комплекте осваиваем. Кажется норм и полная интеграция с гитлабом.
16:46

# Воскресенье 2 твита

Всем спасибо за эту неделю! Было круто :)

14:08
@rubyunderhood да, тебе спасибо, не плохая неделя и отличный у вас продукт!
14:47

gitlab.com

github.com

other