Ruby/Rails expert
203 subscribers
28 photos
20 links
Рабочие практики, советы, полезные инструменты из мира Ruby on Rails

Автор: @gambala
Download Telegram
Channel created
Channel photo updated
Канал создан как кладезь опыта по работе и разработке на Ruby on Rails

Автор пишет на руби с 2012 года.

В комментариях к постам можно задавать вопросы, и просто общаться 🤟
yarn upgrade-interactive – обновление фронтенд-пакетов до новых версий с выводом ченджлогов

В yarn пакеты обновляются двумя командами:

yarn upgrade – обновляет пакеты «безопасно», с учетом выставленных в package.json ограничений по версиям. Обычно это значит, что скачиваться будут лишь минорные обновления и хотфиксы, без изменений, ломающих совместимость. Отсюда обновление и «безопасное»

yarn upgrade-interactive --latest – находит самые новые версии пакетов (включая мажорные обновления), и выдает интерактивный список всех пакетов с ссылками на репозитории и ченджлоги. Удобно, т.к. можно изучить ченджлоги и выбрать, какие пакеты обновляем по-крупному, а какие пока нет

Обычно я выполняю сначала upgrade-interactive, обновляю ряд пакетов крупно, и сразу после добиваю мелочь yarn upgrade – прим. ред.
gem_updater – полезный гем-помощник при обновлении бандла

Утилита обновляет гемы (через bundle update) и после выводит перечень changelog'ов. Оч удобно, т.к. теперь при каждом мажорно-минорном апдейте можно не лезть за ченджлогами в гугл

gem install gem_updater
gem_update

https://github.com/MaximeD/gem_updater
bundle install --jobs – ускоряем установку и обновление гемов

И у bundle install, и у bundle update можно задать параметр --jobs – кол-во параллельных воркеров, которые будут заниматься установкой/обновлением гемов

По-умолчанию --jobs равно 1. Ставим число, равное кол-ву ядер у процессора – получаем прирост в скорости

Также можно выставить глобальное значение по-умолчанию, и вызывать привычные bundle install, bundle update (и gem_update из поста выше – прим. ред.), и все они будут выполняться с параллелизмом

bundle config --global jobs 8
time – замеряет время выполнения команд в терминале

Полезно, когда нужно сравнить скорость выполнения команд во время экспериментов. Попробуйте, например, выполнить
time bundle install --jobs 1
time bundle install --jobs 8
и сравнить результаты

Кстати, тем же способом можно замерять вызов команд из bash и zsh
time zsh -i -c "print -n"
time bash -i -c "print -n"
Это полезно, если вы экспериментируете с расширениями и плагинами для bash и zsh. Каждая из этих команд сперва запустит zsh/bash, со всеми плагинами и конфигами, потом выполнит там команду в кавычках, и покажет итоговый отчет
annotate – держим перечень всех полей БД в ActiveRecord-моделях

Заходим, например, в модель User. Видим класс, DSL, ассоциации, методы. Но также бывает удобно в этом же файле увидеть, какие поля, индексы, дефолтные значения содержит таблица users. Annotate помогает в этом

Гем annotate запускается после каждой миграции и добавляет в модели комментарии-аннотации со всеми полями и индексами в БД по каждой модели (см. скрин)

В настройках гема можно указать, что хотим видеть в аннотациях, а что не хотим (индексы, дефолтные значения, внешние ключи), где хотим (только в моделях, или еще в тестах, фикстурах, фабриках), в начале файла или в конце (я размещаю аннотации в конце файлов – прим. ред.). Пример конфига можно найти здесь: https://github.com/gambala/rubyshow/blob/master/lib/tasks/auto_annotate_models.rake

Установка:

group :development do
gem 'annotate'
end


Генерация конфига:

rails g annotate:install
👍1
Знаешь английский на уровне чтения?
Anonymous Poll
85%
Да
15%
Нет
"comments": {} – оставляем комментарии в package.json

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

Gemfile является рубишным файлом, с возможностью оставлять комментарии где угодно по правилам руби. Например так:

gem 'fastimage' # shrine dependency
gem 'puma', '~> 4.0' # because of capistrano3-puma incompatible with 5.0


С package.json ситуация сложнее. Это json-файл, который не только парсится командами yarn install / upgrade-interactive (и поэтому не может содержать js-комментарии), но еще и меняется ими, в ноль затирая все неочевидные для yarn комменты-хаки

Продолжение – в комментариях к посту
Dave Thomas – My Dog Taught Me to Code – 30 советов о том, как писать хороший код

https://www.youtube.com/watch?v=yCBUsd52a3s

Одно из самых вдохновляющих меня видео о кодинге. Матерый программист Дейв рассказывает о вещах, о которых многие забывают или не видят за всеми этими SOLID GRASP OOP PATTERNS. Ведь написание понятного и поддерживаемого кода – скрывается в мелочах и простых принципах

А еще это видео – спойлер к контенту на канале

В сети достаточно инфы о том, как войти в руби и рельсы и дорасти до джуна и первой работы. А что потом? Почему-то выясняется, что в реальных проектах:
- Никто не спрашивает тебя 3 принципа ООП и расшифровку каждой буквы SOLID
- Откуда-то берется легаси, который обходят стороной
- Почему-то все новые сверх-крутые гемы и js-фреймворки не спешат внедрять в продакшн

И вот ты знаешь язык, фреймворк, практики. А на деле – еще столько вопросов и серых областей, на которые не дают ответы даже сеньоры и лиды из твоей команды. И как тогда быть?

Об этом канал. Оставайся с нами
❤‍🔥3
Пока я выстраиваю контент и решаю свои вопросики (новая работа, получение внж в Европе) – ссылка на мой тред в Тви по прохождению собеседований

Тред еще буду дополнять, поэтому задавайте свои вопросы, в продолжении отвечу на них тоже

https://twitter.com/gambala_codes/status/1426185185427697669
Скринкасты DHH как возможность взглянуть на вещи под другим углом

Девида (создатель Ruby on Rails, владелец Basecamp, автор книг Remote Rework) можно воспринимать по-разному. Кодер, бизнесмен, блоггер, инфлюенсер? Кто же он, хороший ли кодер, и стоит разработчикам прислушиваться к нему?

100% можно сказать, что как и во многих похожих случаях – знание всего по чуть-чуть открывает доступ к мышлению в смежных областях и нахождению новых нестандартных путей. Визионерство

И DHH именно такой. И блоги DHH в HEY и на ютюбе (где раз в несколько лет появляются скринкасты) – это место, где он доносит свое виденье массам. Экспериментально, ненадежно, но очень интересно
И пока весь мир использует для фронтенда Webpack, DHH находит в современных браузерах поддержку интересной фичи, видит возможность упростить написание простого фронтенда и выливает это виденье зрителям: https://youtu.be/PtxZvFnL2i0

И когда мир смотрит и говорит – ок, Девид, но как нам использовать React, а не твои специфичные библиотеки – Девид отвечает – да в общем-то вот, работает и с реактом: https://youtu.be/k73LKxim6tw

И когда мир говорит – ок, но у нас сложный и уже отлаженный фронт, мы не можем полагаться во всем на importmaps, и нам глупо использовать уже ставший медленным в 2021-м году webpacker – Девид отвечает – ну, вот, вы можете использовать чистый esbuild без какой-либо магии со стороны Rails не напрягаясь: https://youtu.be/Chiu-0EVW3g

Интересно наблюдать за этим общением и тем, как очень сырой в первом скринкасте подход крепнет и внедряется в ядро Rails 7
Почему сырые вещи на старте – это нормально

Последний мой тезис в прошлом посте – мол, круто смотреть, как очень сырой код крепнет со временем. DHH защищает и транслирует этот подход на многих примерах того, что он делает. Например, здесь: https://youtu.be/zKyv-IGvgGE

Все потому что:

«Сырой код сегодня – надежный и вылизанный завтра»

Но если сегодня не будет даже сырого кода – какова вероятность, что он вообще появится?

Гляньте видео, там много о том, как командам удается выживать при таком подходе
В новом скринкасте DHH снова дает понять, каким простым, быстрым и тонким будет фронтенд и его сборка в Rails 7 (альфа-версия которой выйдет уже на неделе)

https://youtu.be/JsNtLiph87Y

В скринкасте видим не только сборку JS esbuild вместо webpacker'а, но и сборку Tailwind CSS их встроенным быстрым и крутейшим JIT-сборщиком. На каждое изменение в коде – 50ms сборки, обновление страницы – готово

Ждем Rails 7. Наконец-то можно будет избавиться от webpacker'а со всей его магией и webpack'а, уже давно проигрывающего по скорости другим сборщикам

А еще я очень рад за создателей Tailwind CSS. Я бесконечно топлю за эту библиотеку стилей везде, где только можно, тейлвинду была посвящена серьезная часть моих постов в групповом менторстве в прошлом году. И не без оснований. Чудеснейшая библиотека, которая еще и развивается и не перестает удивлять с каждым обновлением. Из недавнего – JIT-сборка и динамические классы-стили (если интересно, могу рассказать подробнее)