Илья Зыкин. Pro Жизнь
137 subscribers
1.1K photos
45 videos
4 files
95 links
Download Telegram
❤️ Вот теперь тебя люблю я.
🎉 Вот теперь тебя хвалю я.
🔥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
Строчка, взорвавшая мозг 🤯

Вчера я вычистил первый Business Action до состояния, когда я стал им доволен.

Все на своих местах. Все так, как я хочу видеть.

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

Если пришли не валидные параметры запроса — возврат ошибки.

Если валидные — получаем переменные.

Проверяем пользователя на существование в Базе данных.

Возвращает результат.

Но самый блеск в этом коде — это валидатор, который жестко требует строго соответствия параметров, которые приходят от пользователя.

Привет Rails Strong Parameters!

Одна лишь эта строчка тут так удивила своей простой, силой и удобством, что у меня натурально случился взрыв мозга.

Благодаря тому, что у меня полный JavaScript/TypeScript стек — я могу практически все писать в едином стиле и на фронте и на бэке и держать жесткий контракт в разных частях системы и делать DRY решения по всему проекту.

Друзья рельсовики смотрят на меня с осуждением. 🙈
🔥2
Logo variants
🔥1
Алгоритм работы с AI (Vibe coding PRO)

— Сохраняюсь в Git, чтобы видеть и контролировать все новые правки
— Прошу реализовать форму с нужными полями + прикладываю пример уже готовой формы
— Проверяю базовую работоспособность
— Внимательное ревью
— Прошу раскидать большой массив кода на части
— Проверяю базовую работоспособность
— Прохожу по каждой детали и прошу внести правки
— Проверяю базовую работоспособность
— Запускаю тесты
— Пытаюсь понять что идет не так на не работающих кейсах
— Прошу исправить и Запускаю тесты, пока не станут зелеными
— Проверка сторибука
— Запуск, отладка существующих тестов / Исключение регрессии
— Рефекторинг и формирование общих решений
— Запуск, отладка существующих тестов / Исключение регрессии
— Сохраняю в Git текущую порцию результата

На что обращаю внимание:
— декомпозиция
— валидация данных
— локализация
— нейминг
— консистентность
— типизация
— отсутствие случайных и ненужных деталей
— присутствие важных деталей
👍1
Прорабатываю интерфейсы.

— Обкатываю UI-kit.
— Готовлю материалы для будущей интеграции.
— Растаскиваю код на части, рефакторю, организую структуру проекта
🔥2
Локализация (ч 1)

Допустим, мы взяли популярную библиотеку, чтобы в React приложении менять языки (локали)

Для простоты грузим все языки при загрузке приложения.

Так же можно поступать и в storybook, и в тестах.

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

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

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

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

Ну ладно. Это еще пол беды.
🔥1
Локализация (ч 2)

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

Раньше (при синхронной загрузке) правильно инициализировались валидации, тк валидации хочется тоже показывать на языке пользователя.

Однако при асинхронном способе загрузке локалей теперь в момент инициализации схемы валидации не известно какой язык текущий. И идет фолбек на дефольтный.

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

Исправить поведение можно передачей функции трансляции в момент инициализации компонент и схемы валидации. При использовании разных языков компонеты будут перерисовываться с учетом языка и инициализировать схему валидаций под текущий язык;

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

AI тут не помогает, тк он

1) не знает всех деталей желаемого
2) передача этих деталей невозможна в разовом формате, тк недостаточно информации о поведении системы
3) AI не знает особенностей поведения инструментов в разных окружениях
4) AI начинает зацикливаться и не может полностью "почувствовать задачу"

Итого:
1) чтобы получить итоговый результат, надо сформулировать задачу.
2) Чтобы сформулировать задачу — надо провести исследование.
3) Исследование для формулирования задачи приводит к фактическому решению задачи.

AI в таком процессе фактически бесполезен.
🔥1