Красный яхонт
Так на Руси называли рубин, считавшийся одним из наиболее ценных камней. Он присутствовал во многих артефактах и знаковых реликвиях древности. Мы не так сильны в истории, зато знаем всё про Ruby-разработку и делимся с вами самыми интересными материалами. Приступим!
GraphQL без N+1
ORM отличная технология, позволяющая скрестить ежа с ужом, а именно базы данных и методологию ООП. Выступая в роли переводчика, она позволяет разработчикам не думать о проектировании БД, а мыслить привычными информационными объектами. ORM — это абстракция, которая имеет не только преимущества, но и недостатки. Характерная проблема — повышенная нагрузка на базу данных из-за лишних SQL-запросов.
Давайте задумаемся — ORM ведь всё равно исполняет традиционные SQL-запросы. В его обязанности не входит какая-либо оптимизация. Часто основной запрос формируется с дополнительными SQL-запросами, хотя данные можно было бы извлечь из основного. Эту проблему как раз и называют «проблемой выбора Ν+1», обсуждение которой на StackOverFlow появилось аж 13 лет назад.
На Хабре была опубликована статья, демонстрирующая простое решение этой проблемы, в том числе и для GraphQL. Два инструмента N1Loader и ArLazyPreload, используемые вместе, волшебным образом убирают Ν+1. Работает с ActiveRecord (версии 5, 6 и 7) или полностью автономно.
Минус две уязвимости в Rails
Атаки с использованием межсайтового скриптинга XSS считаются одними из самых опасных. Пару таких уязвимостей, CVE-2022-22577 и CVS-2022-27777 закрыли в последнем обновлении. Единовременно вышли версии 7.0.2.4, 6.1.5.1, 6.0.4.8 и 5.2.7.1.
Первая проблема заключалась в том, что заголовки Content-Security-Policy не прикреплялись к API-запросам. Уязвимость затрагивала все версии Rails выше 5.2.0. Это делало возможным проведение XSS-атаки.
Вторая проблема подвергала опасности все вышедшие версии рельсов. Уязвимость заключалась в неверном экранировании хэш-ключа для атрибутов тега. атаку можно было провести, если передать вместо хэш-ключа специально подготовленный набор данных.
Make Jekyll great again
На Ruby написано множество крутых проектов (в том числе за это мы его и любим). На Ruby написан и Bridgetown, генератор сайтов и full-stack фреймворк, первый релиз которого был представлен чуть более месяца назад. Он начинался как форк одного из старейших генераторов статических сайтов — Jekyll. Идея проекта в том, чтобы максимальное количество возможностей работало «из коробки». Внутри Bridgetown есть:
- генератор статических сайтов,
- движок CMS,
- шаблонизаторы (Liquid / ERB / Serbea),
- full-stack фреймворк (Roda),
- сборщики (esbuild и PostCSS).
Напоминает походный рюкзак в котором собрано всё необходимое, что кстати упомянуто в их философии. Этот набор поможет разработчикам сосредоточиться на проекте, а не тратить время на выбор инструментов. Станет ли Bridgetown новой звездой Jamstack? Время покажет.
Рубиновый VSCode
Выбор редактора кода всегда остаётся личным предпочтением разработчика. Кому-то по душе VIM с его кроссплатформенностью, свободой автоматизации и почти 3000 расширений. Кому-то хочется использовать специализированные коммерческие IDE, такие как RubyMine. Достаточно универсальным вариантом остаётся Visual Studio Code. Для Ruby-разработчика его возможности можно расширить за счет Ruby Solargraph.
Расширение представляет из себя языковой сервер с механизмами умного автодополнения и показа документации. Ruby Solargraph поддерживает ядро языка, стандартную библиотеку и умеет автодополнять код гемов, включенных через require. Конфигурация проекта задается в .solargraph.yml, сгенерировать который можно командой solargraph config . Поставляемая в комплекте документация может быть актуализирована соответствующими командами.
Если бы существовал идеальный редактор, все бы им пользовались, а мы бы тут ничего не писали. Конечно же, тут не без недостатков. Rails пока что поддерживается только частично. По словам разработчиков в Rails много «магии», затрудняющей статический анализ и мешающий реализовать полную поддержку. Но работы ведутся (держим кулачки), например, есть вот такой плагин.
Видео с Ruby meetup №17
Мы продолжаем помогать разработчикам обмениваться опытом не вставая с любимого кресла. Наш коллега Никита Ратников рассказал как вместо привычного технического задания заказчики приносят свою идею в виде прототипа Figma. Станислав Герман из Gett Systems RU поделился секретами управления техническим долгом и инструментами, которые для этого используются. В заключение Григорий Окин из Level.Travel поведал как подружить старый монолит на рельсах с новым сервисом на Go.
Митапы
Ruby meetup №18
19:00
Рады сообщить, что у нас запланирован Ruby Meetup, который пройдёт 20 июля. Все доклады будут традиционно предзаписаны в студийном качестве 4К, а вести доклад и помогать вам допрашивать спикеров в прямом эфире будет Григорий Петров, Ruby-разработчик и организатор RubyRussia. Детальная информация о мероприятии будет опубликована позже, следите за нашими новостями.
Вакансии
Удаленка / Офис
Evrone
Мы открыты для новых Ruby-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах и выступления на конференциях, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.