Заметки о pattern matching в Ruby 2.7

В недавно вышедшей Ruby 2.7 кроме регулярных обновлений библиотек внесли несколько интересных изменений в сам синтаксис языка. На фоне минорных расширений, таких как нумерованные аргументы (_1, _2, …), beginless range (..n) и изменение семантики splat-операторов (* и **), pattern matching выделяется очень заметно. Это, вероятно, последняя фича взрослых функциональных языков, которой не хватало в Ruby.

»
Author's profile picture Andrew Konchin on Ruby

Deadlock в RSpec

Недавно на глаза попался pull request с исправлением бага в RSpec - между двумя процессами возникал deadlock, который приводил к зависанию. Я не мог пройти мимо и не покопаться в деталях - не каждый же день встречаешь deadlock в Ruby-коде.

»
Author's profile picture Andrew Konchin on Rails

Невидимые SQL-запросы в Rails

Давайте представим, что происходит, когда запускается Rails-консоль и делается первый запрос к базе данных:

»
Author's profile picture Andrew Konchin on Rails

Что посмотреть из докладов на Highload Channel за 2018 год

Продолжаю серию обзоров конференций. Этим летом на YouTube выложили все доклады за прошлый 2018 год с Highload++ и смежных с ним конференций (Backend Conf, РИТ etc). В этом посте вы найдете топ самых интересных докладов с краткими заметками. В основном сюда вошли доклады посвящены матчасти, т.е. как работает та или иная технология, и обзорные доклалы.

»
Author's profile picture Andrew Konchin on conferences

Превращаем Puma в TCP-сервер

Updated on May 1, 2021. Эта функция была удалена из Puma в релизе 5.0.0 (2020-09-17)

»
Author's profile picture Andrew Konchin on Ruby

Сюрпризы c case-insensitive файловыми системами

Недавно я столкнулся с интересной проблемой и получил еще один ценный урок. Проблема была связана с особенностью файловой системы MacOS, которая по умолчанию case-insensitive (как и в Windows). И комбинация MacOS с Git у нас в проекте привела к неожиданным сложностям.

»
Author's profile picture Andrew Konchin on Ruby

Что посмотреть из докладов на Highload Channel за 2019 год

Этим летом начали выкладывать на YouTube доклады с конференций Highload++ и РИТ прошедших в этом году (на официальном канале Highload Channel). И, наконец, у меня дошли руки и до них. Так появился этот список интересных докладов и краткие заметки к ним.

»
Author's profile picture Andrew Konchin on conferences

Как выстрелить себе в ногу с prepared statements

Недавно столкнулся с необычной проблемой и пришлось восполнить еще один пробел знаний по Rails - на этот раз механизм prepared statements для SQL-запросов. Не то, чтобы я не знал, что Rails так умеет, но эта фича в свое время прошла как-то мимо меня. И только сейчас я занялся ею вплотную.

»
Author's profile picture Andrew Konchin on Rails

Как создать Enumerable-коллекцию

Когда работаешь со внешними источниками данных - файлом, HTTP API или базой данных, иногда удобно от него абстрагироваться и работать с данными как с ленивой Enumerable-коллекцией, скрывая детали реализации - механизмы загрузки или парсинга данных. Ведь хочется простоты и абстракций.

»
Author's profile picture Andrew Konchin on Ruby

Ликбез по исключениям в Ruby

Механизм исключений в Ruby мало чем отличается от реализаций в других распространенных ООП языках, таких как C++ и Java. Но динамическая природа Ruby вносит свои коррективы расширяя стандартные возможности. Механизм исключений Ruby хорошо описан не только в документации, но и в многочисленных детальных статьях. И, как всегда, здесь найдутся свои тонкости и нюансы, которые могут вас удивить.

»
Author's profile picture Andrew Konchin on Ruby

Ликбез по Enumerator в Ruby

Updated on May 1, 2021

»
Author's profile picture Andrew Konchin on Ruby

ActiveModel::Dirty без ActiveRecord

Ковыряясь недавно в модуле ActiveModel::Dirty в Rails я наткнулся на ряд интересных моментов, о чем дальше и пойдет речь. Мне надо было разобраться как подключить ActiveModel::Dirty в обычный Ruby класс без ActiveRecord. Процедура эта хорошо описана в документации, но в моем случае возникли неожиданные подводные камни. Обо всем по порядку.

»
Author's profile picture Andrew Konchin on Rails

Шпаргалка по транзакциям в Rails

Недавно разбираясь с багой в коде after_commit callback‘а в текущем проекте я внезапно осознал, что смутно представляю когда и как ActiveRecord создает неявные транзакции. after_commit вызывается при завершении транзакции и важно понимать где и когда это происходит. Особенно меня интересовали вложенные неявные транзакции. Изучив тему, пришла мысль систематизировать и оформить все в виде такой себе шпаргалки по работе с транзакциями в Rails. Для наглядности везде приводятся генерируемые SQL-запросы на примере PostgreSQL, так как обычно это опускают и в статьях и документации по Rails.

»
Author's profile picture Andrew Konchin on Ruby

Что не так c документацией в Ruby

Updated on May 1, 2021

»
Author's profile picture Andrew Konchin on Ruby

Алгоритмы в Unicorn

Unicorn это один из самых популярных веб-серверов для Ruby. Если кратко, то это Rack-совместимый классический pre-fork веб-сервер. Он следует принципу “Do one thing, do it well” и поэтому не умеет HTTPS, keep-alive, HTTP pipelining и не предназначен для обработки медленных клиентов. Кроме того, он поддерживает только Unix системы.

»
Author's profile picture Andrew Konchin on Ruby