Илья Зыкин. Pro Жизнь
137 subscribers
1.1K photos
45 videos
4 files
95 links
Download Telegram
Что не так с Ruby on Rails? (4)

У rails было несколько мощных инструментов, которые помогли рельсу занять лидирующую позицию в web.

1) Роутер
2) Миграции
3) Генераторы
4) Мощная ORM — Active Record.

Роутер помогал поймать запросы и отправить их в нужный контроллер / action на обработку. Роутер был красивый и удобный.

Миграции помогали поддерживать БД в нужном состоянии. Это было счастье!

Генераторы могли нагенерировать по параметрам настоящие админки. Это еще за 20 лет до появления AI.

Правда писать и поддерживать генераторы было невозможно. Их мало кто использовал.

Все эти идеи лет 15 назад растеклись по другим фреймворкам.

У rails осталось только одно — невероятно мощная и совершенная ORM.

Прослойка между программистом и Базой Данных.

Вы могли писать код на руби, а он превращался в SQL.

За 20 лет никто даже близко не подошел к тому, что бы сделать что-то хотя бы похожее.

Для меня ORM Active Record была всегда сердцем фреймворка. За это рельсу я всегда и любил по большому счету.
👍2
Что не так с Ruby on Rails (5)

И вот получается, что все классные идеи Rails давно растеклись по интернету.

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

Если есть понимание как работают сервисы — то интеграция одного в другое — дело несложное. Хотя и трудо и время затратное.

К 2025 году Rails растерял все преимущества. А новые подходы, которые появились у рельсовиков, фреймворк не особо то и хочет.

Но что не так с сердцем рубинового короля? Что не так с Active Record?

AR это решение одной большой проблемы. — Web программисты не любят писать SQL. Он объемный, он мало красивый, с ним трудно. А еще можно параметры вставить так, что пропустишь SQL инъекцию.

Обертка упрощающая жизнь, скрывающая детали.

И хоть AR невероятно крутая — она не может покрыть всех возможных кейсов SQL.

То и дело в проектах AR соседствует с обычным SQL, который если и можно написать на AR то с таким ужасным трудом и синтаксисом — что ну его нафиг.

Удар по сердцу Rails наносит AI.
👍2
Прощай Active Record. SQL снова король.

Кто теперь будет бояться SQL? Никто!

Кто теперь захочет оборачивать свой SQL, в руби, в JavaScript, в Go?! Никто!

Дайте мне коннекшн к базе — и примите мой SQL обернутый в транзакцию.

AI теперь пишет, отлаживает, объясняет SQL любого объема.

Современные коннекторы MCP подключаются в вашей базе, выбирают оттуда схему данных, знают все связи таблиц и могут сделать любые JOIN через 15 таблиц и дать вам SQL ровно такой какой вам надо.

И все это за 10 секунд, а не за 3 часа отладки AR запроса или 3 дня отладки SQL в PGAdmin.

Все это вы получаете за 4 цента за запрос.

Я смотрю на Rails, фреймворк, который подарил мне столько радости, удовлетворения и денег.

Знаешь, старик, это было круто. Но, кажется, времена изменились.

Меня ждет новое приключение.
👍3
Логотип для пет проекта нарисовал тоже AI.

Отрисовать в SVG 2000 рублей.
🔥3
Суббота и Миграции

День был насыщенным. Ходили с ребенком на тренировку, провели много времени в игровом центре. Стреляли с двух рук по инопланетным захватчикам, играли в разные игры, собрали почти 1000 бонусов и получили в награду игрушку, смотрели Бременских Музыкантов, поели в ресторане и день пролетел.

Семья отдыхает, а у папы pet проект. Мигратор сам себя не допишет.

Осталось расставить функции по местам и должно все заработать.

Забавно, но для бекенда сейчас я почти не прошу AI писать тесты.

Все функции которые я пишу последние дни — сервисные. Они не имеют отношения к самому проекту и я могу полагаться просто на их фактическое исполнение.

Кроме того, AI очень много мокает и по факту ценность таких тестов близка к нулю.

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

Еще AI писал очень много хлама. Проверок и Try/Catch/Finally — которые ценности не имели — я чистил, чистил, чистил.

Немного полировки и мигратор должен быть готов.
🔥2👍1
Мигратор. Зачем и нафига?

Я почти не знаю тех, кто читает мою личную страницу и почему они все еще здесь, ведь порою я пишу вызывающе много.

Пишу для себя, потому что за работой очень быстро забываешь что вообще происходило. А этот микро-блог для меня рабочий дневник важных мне событий и мыслей.

У читателей, вероятно, может возникнуть вполне резонный вопрос — Зачем он все это делает?

1️⃣ Я делаю pet проект. В какой-то момент мне надо будет делать промо проекта — заметки помогут сформировать контент для статей.

2️⃣ Я изучаю возможности AI. Мне нужно видеть мой прогресс и развитие мыслей.

3️⃣ Я делаю мини фреймворк на JavaScript, который я смогу в нужный момент переписать на любом языке.

4️⃣ Все мои pet проекты чуть позже всегда приносят мне заработок. Полученный опыт в итоге хорошо продается на консультациях.

5️⃣ Мне просто по кайфу что-то создавать. Я делаю то, что люблю.

Мигратор готов.
👍3
Мигратор. Зачем и нафига? (2)

Но кроме личных личных и развлекательных мотивов есть еще и мотивы исключительно утилитарные.

1) Я выбрал SQlite как базу для проекта.

2) Предполагается, что каждый пользователь будет иметь свою собственную базу со своими данными. У этого много плюсов, но и минусов достаточно.

3) У меня должна быть и база данных на уровне всего проекта — например хранить список зарегистрированных пользователей.

Итого

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

Мигратор должен

1) Запускаться с указанием разных каталогов из которых будут браться миграции.

2) Уметь контролировать выполенные миграции, уметь откатывать их, уметь строить схему.

3) Уметь запускаться и как скрипт из консоли и как функция при работе самого проекта. — я предполагаю запускать проверку на структуру БД при запуске каждой сессии.

Из доступных вариантов на JavaScript я нашел только sequelize/umzug, но он настолько простой, что было и надежнее и веселее написать свой.
👍1
Мигратор. Рефлексия. (1)

Я успешно "написал" мигратор. Он замечательно справляется со своей функцией как консольная утилита (набор утилит).

Однако все его функции по моему представлению можно переиспользовать для тестов или для обеспечения консистентности структуры баз данных в системе, где у каждого пользователя своя собственная база данных.

Я не знаю как правильно называются такие системы. Я раньше не экспериментировал с этим подходом.

Я отдал на откуп AI реализацию. Я мало следил за тем что он делает. Главное было — получить результат.

Я постоянно говорю, что тестирование это то, что отличает начинающих специалистов от опытных.

Тесты создают совершенно другое окружение использования разработанных функций, отличное от окружения самого проекта. И, как правило, это выявляет все огрехи проектирования.

Сразу как только я начал использовать AI сгенерированные функции в тестах — начала проявляться все слабость AI.

Неконсистентность подходов, интерфейсов похожих функций, отсутствие общего виденья системы.
👍1
Мигратор. Рефлексия. (2)

Стоило только на короткий период отпустить внимание и AI начал делать дичь на объеме 5 файлов и 10 функций.

В твиттере говорят, что через высокоуровневое планирование проекта люди уже написали свой клон Witcher 3.

Глава Anthropic говорит, что завтра программисты будут не нужны.

Практика показывает, что именно сейчас нужно будет как можно больше квалифицированных разработчиков с навыками дизайна и контроля за качеством реализации проекта — иначе в море random-кода проекты будут тонуть.

AI нельзя доверить не только создание полноценного проекта, но и даже создание небольшого модуля.

Пока нельзя.

В скольких инструкциях и предложениях можно выразить мои ожидания от проекта — не понятно. Я никогда не формулировал это четко. Все на уровне интуиции и эмоций.

Будет страшно осознать, что все навыки и знания формулируются в 20-30 установках, которые AI сможет воспроизводить.

Однако, это не отменяет того, что перманентный контроль за AI нужен как плотина, удерживающая массу random-кода.
👍1
❤️ Вот теперь тебя люблю я.
🎉 Вот теперь тебя хвалю я.
🔥3
20 лет Ruby on Rails за 3 недели

Если взять в совокупности, ну, недели 3 я развлекался над бекендом.

Это все, конечно, размазано на несколько месяцев в перерывах между созвонами, консультациями, рутинным кодом и личными делами.

За это время я реализовал

✅ Коннектор к БД с транзакциями
✅ Миграции + database cleaner
✅ Довольно мощный роутер
✅ Подготовил окружение для тестов
✅ Strong Params в рельсовом стиле на Zod
✅ Архитектуру на основе Business Actions.
✅ Довольно хорошая типизация на TypeScript

У меня нет ORM. На JavaScript они все откровенное 💩 Славься Ruby on Rails! 👑

В этот раз я отказался от ORM. Вышел за границы личных ментальных искажений и принял факт, что лучше SQL ничего не придумано. (Спасибо проекту из Пенсильванского Университета, для которого я писал много SQL и познал дзен)

Я чертовски доволен результатом.

Я в одно лицо переработал под себя и кучу идей Rails. Взял все лучшее из обоих экосистем. Заставил работать и планирую развивать успех.

"Боже как я хорош. Как мощны мои лапищи" 🤣
🔥5👍1