dzaporozhets

9 ноября 2015, The Netherlands

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

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

13:40

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

13:42

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

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

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

13:51

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

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

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

14:02

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

14:03

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

14:04

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

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

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

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

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

14:19

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

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

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

14:22

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

14:28

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

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

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

14:32

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

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

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

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

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

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

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

14:49

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

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

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

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

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

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

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

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

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

15:15

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

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

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

15:19

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

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

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

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

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

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

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

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

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

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

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

16:26

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

16:27

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

16:29

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

16:30

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

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

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

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

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

17:10

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

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

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

17:15

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

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

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

18:24

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

18:25

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

18:35

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

18:40

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

18:47

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

18:49

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

18:50

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

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

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

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

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

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

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

19:35

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

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

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

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

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

21:21

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

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

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

Играю в GTA V @killthekitten

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

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

11:56

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

11:58

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

12:23

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

12:25

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

12:27

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

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

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

12:32

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

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

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

14:39

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

14:40

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

14:47

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

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

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

15:10

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

15:16

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

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

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

19:03

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

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

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

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

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

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

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

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

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

20:17

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

20:19

# Среда 31 твит

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

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

11:33

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

15:10

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

15:11

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

15:13

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

15:14

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

15:17

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

15:19

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

15:21

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

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

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

15:52

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

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

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

19:03

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

19:09

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

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

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

19:47

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

19:50

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

19:53

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

19:59

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

20:01

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

20:03

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

20:05

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

20:29

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

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

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

21:47

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

22:11

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

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

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

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

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

0:47

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

0:51

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

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

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

11:23

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

11:27

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

11:32

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

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

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

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

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

11:55

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

11:58

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

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

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

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

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

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

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

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

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

12:27

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

12:28

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

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

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

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

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

12:59

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

17:52

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

17:53

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

17:56

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

18:02

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

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

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

18:49

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

18:55

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

19:14

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

19:15

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

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

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

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

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

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

gitlab.com

github.com

other