vazilla

3 августа 2015, Kursk, Russia

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

Привет! На этой неделе @rubyunderhood веду я, @vazilla. Будем говорить о рельсовом фронтенде, Assets Pipeline и пользе

5:52

Работаю удаленно в Flatstack. Работаю и на бэкенде, и на фронтенде, потому что пришел в Рельсы с фронтенда

5:53

Мой карьерный путь: сисадмин, PHP, J2EE, Rails 2, верстка-верстка-верстка, Sinatra, и снова Rails

5:56

Уверен, главное — польза. Поэтому давайте сегодня поговорим о самых полезных книгах/статьях/видео

6:02

Какие книги/статьи/видео разделили вашу профессиональную жизнь на до и после? Что посоветует прочитать/посмотреть каждому Руби-программисту?

6:02
@rubyunderhood что можно сделать с assets pipeline? как спасти будущее связки rails + современный frontend?
7:05

.@G3D, об этом завтра. Предлагаю пока подумать, чем не устраивает Assets Pipeline? Чего в ней не хватает? Почему с ней нужно что-то делать?

7:06

.@rubyunderhood, Practical OOD in Ruby Сэнди Метц. Все, что надо знать, про объекты, SOLID, наследование и управление зависимостями в Руби

11:14

.@rubyunderhood, Don't Create Objects That End With -ER — yegor256.com/2015/03/09/obj… Вправляет мозги после контроллеров, интеракторов, хелперов

11:16

.@rubyunderhood, youtube.com/watch?v=27Ct3Z… — Алексей Плуталов из @evilmartians, о том как организовывать/структурировать JS в рельсах

11:18

.@rubyunderhood, vimeo.com/100010922 — Hot Reload в React/Webpack от @dan_abramov. Именно таким и должен быть DX (developer experience)

11:20

.@rubyunderhood, youtube.com/watch?v=URSWYv… — снова Сэнди Метц. Полчаса и ты знаешь о юнит-тестах всё

11:24

# Вторник 27 твитов

Гайз, в компанию по разработке игровых терминалов требуется RoR + Backbone.js dev на долгосрочный период. Remote.
/cc @rubyunderhood
8:15

Привет, привет. Сегодня о самом больном, об Assets Pipeline (sprockets). Но сначала немного истории

8:20
@rubyunderhood «Confident Ruby» by Avdi Grimm pragprog.com/book/agcr/conf… + «Ruby under microscope» by Pat Shaughnessy patshaughnessy.net/ruby-under-a-m…
8:24

AP появилась в 3.1 (2011 год). В то время ребята мучались с sass --watch. А в Рельсах из коробки мы как боги писали CSS без ; и {} (SASS).

8:26

AP простая и технология из трех процессов: компиляция (coffee -> js), конкатенация (//= require) и сжатие (uglify, ...)

8:27

Плюс cache busting и стильные хелперы. Для 2011 года этого было достаточно. Но сейчас 2015, а AP в том же состоянии

8:29

Взгляните, что нового добавили в sprockets 3.x: github.com/rails/sprocket…

8:29

Первым, кто заявил, что AP — мертва, был @andrey_sitnik в 24 выпуске RadioJS: radiojs.ru/2015/06/radioj… (25:00)

8:35

Есть теория, что застой в AP связан с застоем в Руби-комьюнити: Рельса и Руби сейчас именно в том месте, в котором хотели бы себя видеть

8:36

"Наш выбор: Turbolinks и RJS". Рельсы и AP застряли в том времени, когда вся динамика в приложении — это замена HTML фрагментов на странице

8:39

И это неплохой подход: он отлично будет работать для новостных сайтов и простеньких приложений. В таком случае с AP/Turbolinks можно жить

8:41
@rubyunderhood @andrey_sitnik, это уже довольно давно обсуждалось в комьюнити, задолго до 24-го выпуска RadioJS :)
8:44

Плагины для AP в 2014-2015 пишутся просто: берешь js-либу, прогоняешь через browserify и встраиваешь в AP через execjs

9:17

Дело нехитрое. Вот, например, мой CSS-постпроцессор для AP для поддержки rem в IE8: github.com/vast/rails-pix…

9:19

Но, когда я поймал себя на том, что корчую postcss-плагин для AP, понял, что это все неправильно

9:20

Поэтому в 2015 я стараюсь собирать фронтенд нодой, а Рельсу использовать в качестве тонкого сервера

9:21
@rubyunderhood рельса и тонкий сервер – лол
9:23

А вам как Assets Pipeline/Sprockets? Всего хватает? Не подставляете рядом webpack/gulp?

9:25
@rubyunderhood первые действия при сетапе проекта:
1) настроить базу
2) вырубить sprockets
3) включить православный gulp (либо webpack)
9:35
@artemeff @rubyunderhood тонкий сервер на Rails выглядит так pic.twitter.com/GnDAQ5myir
11:02
@rubyunderhood фронтенд живет в отдельных репозиториях. Problem Solved :)
11:03

.@listochkin, само собой. А тестируете как? В каком из проектов держите интеграционные тесты?

11:04
@rubyunderhood это же везде, комьюнити собирается идеей, потом комьюнити трудно принимать, что-то новое. Они же пришли сюда из-за идеи
11:04
@rubyunderhood всё хорошо: выключатель есть и работает, репозиторий с нодой рядом ставить удобно)
11:04
@rubyunderhood @andrey_sitnik давно обещал рассказать как у них там с gulp работа налажена
13:57
@rubyunderhood API only решает эту проблему. Бэкенд - отдельно, SPA - отдельно.
14:12
@rubyunderhood зависит от. но в целом:
16:08

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

Доброе утро. Жаль, но защитников у Assets Pipeline не нашлось. Сегодня поговорим об еще одной моей любимой теме: о тестах

7:16

Я начал с Test::Unit и фикстур. Прошел Cucumber и получил посттравматический синдром. В итоге, пришел к Rspec + Capybara + Jasmine

7:19

Весь наш стек для тестов можно посмотреть здесь: github.com/fs/rails-base/…

7:20

Долго бросался из крайности в крайность: 100500 интеграционных тестов, 0 юнит-тестов -> 0 интеграционных, 100500 юнит-тестов

7:22

В итоге пришел к чему-то похожему: robots.thoughtbot.com/testing-from-t… Начинаю с фича-спеки (одна на сценарий) и добавляю юнит-тестов по вкусу

7:25

В интеграционных тестах не опускаюсь до реализации и пишу на псевдо-DSL (почти site_prism): gist.github.com/vast/3771a6a0a…

7:30

Большую часть этих трюков подсмотрел тут: elabs.se/blog/51-simple…

7:31

Чтобы быстро переключаться между классом/тестом и запускать тесты из Саблайма пользуюсь packagecontrol.io/packages/RubyT…

7:32

По субъективной статистике test-first у меня получается в 40% случаев. В других случаях (code-first) не доверяю тестам, которые не падали

7:34

Пишу юнит-тесты и для вьюх (редко, чаще всего это смелл), и для JS (Jasmine + jasmine-jquery). Классицист, не мокист: martinfowler.com/articles/mocks…

7:40

Какие у вас секреты, принципы и правила в тестировании? Какой стек технологий используете? Какое соотношение интеграционные/юнит тесты?

7:42

Сразу отвечу про правила/принципы:

* signalvnoise.com/posts/3159-tes…
* justinweiss.com/blog/2015/05/0…

7:48

Плюс великолепные слайды доклада @darth_sim "50 оттенков красного": slideshare.net/ssuserfc4417/5… (жаль, не нашел видео)

7:55

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

@rubyunderhood @darth_sim не в лучшем качестве, но youtube.com/watch?v=ismsJY…
5:53

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

7:36
@rubyunderhood делаем быстрое ревью пул-реквестов, остальное через CI. В конце итерации более обстоятельное ревью
7:55

.@ptico, как выглядит быстрое ревью? Что смотрите и проверяете?

7:56
@rubyunderhood то что упускает замыленный глаз автора:явные ляпы, документацию,потенциальные проблемы.Подсказываем как лучше сделать вот это
8:01

.@ptico, круто. А что делаете с проблемами, найденными в конце итерации? В техдолг и исправлять когда-нибудь потом? Или сразу чините?

8:05
@rubyunderhood гитхаб в этом плане лапочка: комментировать можно каждую строку в диффе
8:05
@rubyunderhood Когда автор исправляет замечания, ставим +1. Пока не прошел CI и нет пары +1, пулл не мержится
8:07
@rubyunderhood зависит. Баги чиним, остальное в долг, если дело не 5 минут
8:11

Годные чеклисты для ревью:

* kevinlondon.com/2015/05/05/cod…
* css-tricks.com/what-a-css-cod…

11:28

Про настрой для ревью: medium.com/medium-eng/the…

11:29

В добавок к тому чеклисту смотрю тесты: понятны ли изменения в PR'е по тестам, нет ли ложно-положительных проверок?

11:30

# Пятница 38 твитов

Привет. Всегда было интересно. Что люди используют в тестовых данных, чьи имена, фразы, цитаты?

11:14

Я часто использую цитаты из боевиков моего детства: Робокоп, Хищник, Терминатор... pic.twitter.com/hBZzCPNuyf

11:21

Из персонажей чаще всего использую Тайлера. Люблю ссылаться на комиксы pic.twitter.com/8xGFBriHcp

11:26
@rubyunderhood Faker, ничего особенного. Вообще, от этого редко что-то зависит, так зачем тратить время на эти приколы?
11:26
@rubyunderhood хотя когда писал тесты на поиск с морфологией, то брал какие-то фразы из Дюны :)
11:26
. @rubyunderhood вот здесь github.com/marshall-lee/h… у меня сплошной Adventure Time и My Little Pony :)
11:26
@rubyunderhood @anton_davydov Faker, FFaker, вместе, да.
11:26
@rubyunderhood по-хорошему, данные должны быть рандомные
11:26
@ptico @rubyunderhood не совсем согласен. с одной стороны да, с другой стороны мы не ГСЧ тестируем, а юзера.
11:31
@ptico @rubyunderhood неужели не было такого, что на рандомных данных проблема не вопроизводится, а на реальных да?
11:32

.@ptico, не всегда. Как пример: поиск, сортировка

11:33
@ptico @rubyunderhood часто рандом на самом деле не такой уж и рандом. неправильно заюзанный рандом будет более предсказуемым,чем реальность
11:34
@common_disease @rubyunderhood тут соглашусь, нужно с умом подходить
11:39
@ptico @rubyunderhood ну а написание действительно качественной рандомизации данных это тот ещё оверхед.
11:39
@ptico @rubyunderhood ах да, ещё в реальном проекте видел тесты, которые валились через раз. из-за рандома.
11:39
@ptico @rubyunderhood так что тесты всё-таки должны быть детерменированными. чаще всего рандом это скорее плохо, чем хорошо.
11:39

Видел ребят, использующих Симпсонов и строчки из песен pic.twitter.com/RdpiyppFPb

11:42
@common_disease @rubyunderhood если тесты валятся через раз, то проблема либо в коде, либо в неправильном применении рандома
11:42

.@ptico @common_disease, плюс race condition. Тесты проходят локально (медленный PC), но валятся на CI (быстрый). Чаще всего: не ждали AJAX

11:44
@common_disease @rubyunderhood не rocket science, тем более что можно реюзать
11:44
@rubyunderhood симпсонов тоже использую как демо-юзеров
11:45
@ptico @rubyunderhood да, это так. но я также вообще не хочу, чтобы тесты хотя бы как-то *зависели от ГСЧ*. я за детерменированность.
11:45
@rubyunderhood @ptico вот это очень интересная и сложная тема — как тестировать рейс кондишны. я вообще не видел тестов на них. к сожалению.
11:47
@common_disease @rubyunderhood кстати, один раз видел, как разработчик на полном серьёзе из кода значение под тест возвращал
11:48
@common_disease @rubyunderhood потом, правда, оказалось что похапэшник
11:50
@common_disease @rubyunderhood ооо! А может кто поделится ноу-хау?
11:50
@rubyunderhood когда лень с факером заморачиваться-всегда использую свои данные(имя, фамилию, вот это все). плюсы-не надо ничего вспоминать
11:54
@rubyunderhood когда что-то сложное, то ffaker, а так имена персонажей из tbbt.
12:05
@rubyunderhood john doe, hello word и пр :D
12:44
@common_disease @rubyunderhood @ptico я могу рассказать как сам тестировал это дело + как тестировал это mike perham в его dalli
13:59
@rubyunderhood на самом деле, в этом нет ничего страшного и сложного. Достаточно просто сделать состояние гонки и проверить, что все норм ➤
13:59
@rubyunderhood например, вы можете писать что-то в массив в 20 тредах и потом проверять кол-во элементов массива, я например, тестировал ➤
13:59
@rubyunderhood что у меня нет гонки на запись в редис, т.к. я пишу плагин для сайкика, который собирает данные с джобов и это там важно ➤
13:59
@rubyunderhood сам тест выглядит очень просто
github.com/davydovanton/s…
в дали майка он выглядит намного жестче
github.com/mperham/dalli/…
13:59
@rubyunderhood могу сказать от себя, что после этого теста жизнь моя стала намного лучше, я стал крепче спать и волосы стали шелковистыми ➤
13:59
@rubyunderhood поэтому я всем рекомендую писать подобные тесты в местах, где вы мультитредово пишите куда-то и никогда не пологайтесь на GIL
13:59
@rubyunderhood всегда использую имена и топонимы из star wars
16:25

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

Суббота — отличный день для больших мыслей о будущем

11:17

Уверен, в будущем от работы будут страдать роботы, а не человек: youtube.com/watch?v=7Pq-S5…

11:18

Веб придет к идеальным приложения типа The Grid. Перетащил контент в браузер, а роботы сделали красиво: youtube.com/watch?v=OXA4-5…

11:19

Программисты останутся, конечно. Но в корне изменится developer experience (DX)

11:19

Чтобы понять, в какую сторону, посмотрите Брета Виктора:

* vimeo.com/36579366
* vimeo.com/97903574

11:20

А вам каким видится будущее веба, ИТ? Успеем поработать, как Тони Старк с Джарвисом?

11:21
@rubyunderhood мне нравится идея и попытки ухода в виртуальную реальность, это становится похоже на будущее Гибсона
11:29
@anton_davydov @rubyunderhood не понимаю всего этого бума VR. Какая-то крайняя форма попытки убежать от ответственности и реального мира.
11:32
@rubyunderhood да-да, фронтедщиков в итоге заменят wysiwyg редакторами и роботами =)
12:05

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

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

14:19

Мой первый проект на Рельсах — дипломная работа, сервис тлогов (лихой 2008 год). Умел маркдаун, TeX и подсветку кода с highlight.js

14:21
@rubyunderhood работает: silkfair.com
Даже остались мною сделанные "скругленные уголки gif-картинками" до сих пор
14:24

.@inem, с www тоже не работает, но я нашел его в веб-архиве: web.archive.org/web/2015031421… Очень круто 👍

14:35
@rubyunderhood работает, как написал для себя 4+ года назад, так всё ещё и пользуюсь.
15:47
@rubyunderhood нет, не работает :(, чот для чувака ios девелопера, типа проект, где бы он мог свои аппы выкладывать, в итоге усложнил я всё
16:50
@rubyunderhood первый проект на рельсах я сделал за ночь - два года назад.
(bit.ly/1DFygYh) - работает до сих пор.
17:52

Вот и конец недели. С вами был @vazilla. Спасибо за то, что делились опытом и помогли отыскать видео "50 оттенков красного". Всего доброго

18:58

www.youtube.com

github.com

other


@g3d