Кузенков x IT-Хозяева
318 subscribers
2 photos
30 links
Посты о всяких технологиях и не только. @bondiano
Download Telegram
REST API на Rust'е🦀

Конечно, Rust не идеален и кроме макросов и вариадиков в нем достаточно неоднозначных решений. Как упоминали в комментах, одно из них - реализация async. Но дело тут даже не в Pin/Unpin и прочих сложных типах.

Rust эволюционировал и даже знаменитый borrow checker в нем появился не сразу и когда я учился в универе: был знакомый чел, который писал на Rust'е со сборщиком мусора. И одним из витков эволюции стал тренд на уменьшение рантайма. Желательно, чтобы работало в условиях полного отключения рантайма - так появился no_std в котором по-умолчанию нет аллокатора.

И с позиции минимализации рантайма из коробки они и реализовали асинхронность. Для того, чтобы запустить что-то асинхронное вам понадобится что-то, что будет из синхронного Rust'а хитро парковать выполнение когда вы вызываете .await и продолжать выполнение, как что-то будет готово. Это тот самый рантайм. https://tokio.rs/ сейчас самое популярное решение и так как оно не коробочное - раскол сообщества успешно произошел, но не вылился во что-то очень крупное. Альтернативные рантаймы выбирают редко и когда уже понимают, что нужно где-то выжать доп производительность или, например, жить конкурентно в одном потоке.

У рантайма Tokio довольно богатая экосистема. И одной из core частей является Tower - это такая система мидлвар для http клиентов/серверов. И пока Tokio окончательно не стал тир-1 решением асинк рантайма была масса вариантов что бы выбирать для http сервер. Теперь же есть смысл выбирать только то, что построенно поверх Tower'а - tonik для grpc и axum для всего остального.

PS. Есть также прикольные попытки вроде https://loco.rs/ сделать полноценный RoR-like фреймворк, но это просто интересный проект, в котором надежностью и стабильностью пока не пахнет.

axum дает реализацию роутинга и набор модулей для более простой разработки (что-то вроде express'а). Для написания json api нам точно понадобится openapi и набор для валидации входящих запросов. Для open-api + макросов для роутинга я беру utoipa, а axum-valid в качестве обертки для валидации.

Для всяких крон и других видов фоновых задач меня устроил apalis(ощущается как давно знакомый мне Bull). А sqlx закрыл для меня вопрос взаимодействия с бд (Rust и ORM - это можно, но хочется больше контроля).

В целом вот такой вот набор вам понадобится для написания API на Rust'е. Для старта в асинхронщину на Rust'е рекомендую разобраться в синхронном коде, многопоточности и переходить к async-book (автор похоже начал ее переписывать и возможно даже наконец допишет). С utopia получается делать достаточно декларативный роутинг, а axum state позволяет обернуть все это дело в приятный DI. Успехов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4🌚2❤‍🔥1
Не только подземелья и Не столько драконы

Вчера доиграл свою первую большую компанию в DnD. Буря эмоций и долго не мог заснуть. Всем сопартийцам огромная благодартность и респект.
С текстовыми ролевками меня познакомили форумы по Наруто 😌. Сперва я там был игроком, но очень быстро стал модератором и начал развивать вселенную: придумывать новые задания, отыгрывать НИПов (так тут обычно называют персонажей мастеров). Ну и конечно всей этой терминологии в то время не существовало. Зато уже приходилось подпиливать неповоротливый Ucoz под себя, делать простую верстку и кайфовать с мелких интерактивных приколюх.
Свою первую партию в DnD я отодвигал как мог - совершенно не был уверен понравится ли мне. Я очень люблю фентази, запутанный ЛОР (историю, бестиарий и прочие атрибуты вымышленного мира) и ролевую составляющую. Куча пройденных RPG игр уже знакомили меня с основной вселенной DnD - Забытыми Королевствами. И вот я решился и сыграл свой первый ваншот - короткое приключение на одну сессию. И понял, что это мое - то самое, что отлично скрасит мои будни, вывернет из тревоги и типичных будней. Тут, конечно, могу выразить огромный респект талантливому мастеру, который провел мою первую игру и у которого я продолжил играть. Но пока затишье и ожидание.
До моей большой компании еще пара месяцев. А я перебивался мелким 😕 - играл у нескольких мастеров, подмечал фишки и разбирался, что мне нравится в играх, а что нет. Я сразу понимал, что только играть мне будет мало - нужно и водить. Так я отвел для друзей свой первый ваншотик (для кого-то это была первая игровая сессия, а кто-то уже играл), потом водил парные сессии, и еще и еще для друзей-знакомых, мы начинали компании и забрасывали их. Также познакомился с другими НРИ (настольно-ролевыми играми): Вампиры Маскарад, Пасфайндер, Блэксэд. Каждая система НРИ давит на разные эмоции, дает разные инструменты, чтобы игроки могли почувствовать себя творцами или всего причастными к истории. Играя и наблюдая, ты замечаешь, как какие-то мастера не дают сделать шага за "рельсы", а какие-то в самые линейные истории вносят элемент песочницы. Стиль вождения, готовность к импровизации, подготовка и множество еще мелких элементов делают игры в НРИ крутейшим игровым опытом для многих.
И вот я дождался и ворвался посреди приключения - битвы за Боровию в лапах Страда Фон Заровича☠️. Врыв мой оказался чутка смазанным, но компания и мастер сгладили оч много огрехов. И мой персонаж оказался в гуще событий и членом отличной партии, которая в итоге вырвала Боровию из злостных лап. Интриги от мастера, неожиданные развития персонажей игроков, ламповые истории и посиделки по вечерам после работы. Пять или шесть месяцев встреч, море эмоций и просто детский восторг почти каждую партию.
Если вы сами хотите поиграть - у крутейшего мастера Никиты периодически случаются наборы. Я уже занял слотик :D.
Сам процесс "записаться-прийти-поиграть" - только одна часть этого хобби. Тут есть очень много всякого, где можно проявить себя еще больше. Миниатюры, написание историй, разные геймплейные улучшения (правила достаточно гибкие и за каждым столом я встречал что-то новое в них), рисование, даже программисткое "улучшение автоматизации" имеет место быть. В общем дополнительные развлечения на любой вкус.
Могу еще много чего рассказывать и нахваливать, но лучше вам самим попробовать 🕺(конечно у Шефа Никиты).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥12👍4
И снова о типчиках

Изначально я хотел поныть про переписывание компилятора TypeScript’а на Go, как уже ныл в комментах под новостью, но вместо решил чуть более рационально подойти к вопросу «Что вам дает типизация?». И если в случае с JavaScript’ом все понятно: надежда только на дисциплину разработчиков, вместо помощи от типов, привела к печальному состоянию многие кодовые базы (прикиньте, полное отсутствие комментов и доки в легаси - т.е. нет вообще какой-либо мета инфы, и типчики тут лучше, чем ничего). То вот зачем другим экосистемам и языкам типы? Что они дают нам, разрабам?
Оговорюсь сразу, что дальше речь только про типы, доступные на этапе работы с кодом или компиляции, и пока не про рантайм типы.

Так что дает типизация? Надежность? Сама по себе нет. Перформанс в рантайме? Не совсем. Подерживаемость кода? Без дисциплины все равно ситуация не сильно лучше. Это все спорные вопросы.

Но вот с чем сложно поспорить:
➡️ Улучшение Developer Experience в виде помощи IDE, LSP и иногда хоть какой-то документации, хотя бы для LLM’ок
➡️ Как инструмент для дизайна. Иногда просто круто начать с типчаков, принести их команде на обсуждение, обложиться тестами и потом уже имплементировать.
➡️ Как доказательство корректности. Тема очень интересная и перспективная для некоторых областей, но не доступная для большинства мейнстримных «статически типизированных» языков

В замен мы платим большим кол-вом кода (иногда), не возможностью сделать какие-то выкрутасы (назовем это гибкостью), сложностью инструментария.

🔔С этими в голове у появилась очевидная мысль, что не все системы типов себя стоят и иногда ваш компилятор просто тупой или ленивый. И обычно тупость компилятора историческая (раньше вывод по ХМ был чисто игрушкой теоретиков), либо скрывается за попытками авторов ускорить компилятор за счет вашего удобства.

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

И от компилятора TypeScript'а хотелось бы таких же гарантий. И чтобы TypeScript сам был написан с использованием этих гарантий. А не на криво-косо сделанной системе типов Go с interface{}, на котором половина стандартной библиотеки зиждится. И чтобы TS спеку получил в одном из мажоров и чтобы соблюдение этой спеки тоже выводилась системой типов. Но мы уже знаем, что команде TypeScript'а важно другое. А кто хочет этого - пишите на чем-нибудь другом.

Да и в целом, вокруг получающих системы типов, других, ранее чисто динамических языков программирования, строятся интересные научные работы. И постепенное типизирование с gradual typing, например, Elixir’а - выглядит многообещающе, правда там это не приоритет. Да и то, что входит в мейнстрим (PHP, Python) все равно выглядит криво-косо. Но оно пока в процессе - дальше может будет получше.

Ну и в коменты скинул пару достаточно свежих папир с исследованиями, которыми я на эту тему вдохновился 😊.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133❤‍🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
3317👍8
Если бы я хотел стать разработчиком на Rust в 2025, с чего бы я начал?

Позвали написать статью в соавторстве про вкат в Rust на tproger. В итоге получился скорее краткий гайд по фичам языка.

https://tproger.ru/articles/esli-by-ya-hotel-stat-razrabotchikom-na-rust-v-2025--s-chego-by-ya-nachal-
1🔥12👍5😱3
📹 Выложили мое выступление про ФОП 📹

Мое первое онлайн выступление на конференции, в котороя я рассказал про проблемы ООП, как с этим справляется ФОП

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

Смотрите, лайкайкте, сритесь в комментариях (я уже начал)

Отдельное спасибо @bondiano за то, что был самым лучшим соведущим 💗
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
Скоро будет почти 6 лет, как я занимаюсь индивидуальным и групповым менторством, помогаю развивать харды и софты самым разным ребятам. Привет всем, кто ходил ко мне на сессии. Очень круто наблюдать, как менти нашли свое место, получили повышение, как вырос их скилл. Приходили с запросом на развитие - и получали его.
Стартанул я с наставничества на Хекслете в марте 2020 года. Тогда еще Кирилл сам проводил все собесы наставников. Я взял индивидуальных студентов, провел интенсив по тестированию и следовал регламентам Хекслета, прокачивал свое видение сессий. Появился групповой формат, который меня не особо зацепил, но можно было под свою группу сразу записывать лекцию.
Затем я начал совмещать с менти, пришедшими со Солвери. Там было больше необычных запросов, меня рекомендовали другим знакомым, через пару рукопожатий рекомендовали целым компаниям, где я провел несколько тренингов, консультировал по различным техническим и менеджерским вопросам и обзавелся интересными контактами.
В целом, если вы хороший спец с желанием делиться своими знаниями - обязательно пробуйте поменторить. Главное определиться с форматом и своим комфортным временем на эту активность. Поначалу может быть сложновато, но со временем вы обрастете и контактами, и материалом, который сможете выдавать и станет легче.
1🔥22👍7💯1
Вайбкод 🎸

Проекты для инди-дева — это всегда куча потраченного вне рабочего времени в выходные. Чтобы довести проект до достойного состояния к показу требовались месяцы упорной работы в свободное время. Все мои такие проекты всегда отправлялись в помойку. По разным причинам, но чаще всего я просто от них перегорал. Мой горизонт, на который хватало запала — до 3х месяцев.

С внедрения ИИ в практику я за прошлый год выкинул почти двадцать разных проектов. Самого разного масштаба — от no-code телеграм-ботов до движка нарративных игр. И вот впервые в этом году кайфую от использования написанного мною же достаточно объёмного тг-бота @harvardsplatebot

Теперь хочу поделиться немного своим подходом.
За то, чтобы понять, что меня устроил Claude Code, я суммарно заплатил больше 6к баксов на подписки на все возможные ИИ-сервисы в прошлом году 💸 Так что могу рекомендовать только CC и не тратить время и деньги ни на что больше. Для кодинга одного проекта будет достаточно $100 подписки, если хотите параллельно как за мульти-окнами покерного клиента сидеть с 3+ проектами — вам уже вариант за $200.

Три вещи про всех этих ии агентов, которые важно осознать:
1️⃣ Оно не сделает всё само
Основным ограничением будет всё ещё ваша насмотренность, умение проектировать и тестировать ПО, продуктовый вижен и прочие ваши скиллы, которые не возьмутся из воздуха. Потому сперва прокачивайте себя, затем вините нейронки.
2️⃣ Это инструмент, как ваша IDE
В чём-то более продвинутый, но не всезнающий и не полностью самостоятельный. И в конце концов им нужно научиться пользоваться.
3️⃣ Нужно найти цикл разработки, подходящий вам
Пока вы его не нашли — делюсь своим в следующем посте 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍14🔥2
Вайбкод: практика 🛠

Пошаговая инструкция к вайбовой разработке.

📋 Продуктовый вижен
Сперва нужно наметить его через юзер-стори и карты процессов-опыта. На этом этапе хорошо работает чат с агентом в формате event-storming для формирования хороших ASCII-схем (почти как ручками в Miro, но за вас фулл рисует моделька). Главное не переборщить с масштабом проекта, двигаться более итеративно. Лучше иметь хороший фундамент, чем на соплях держащийся замок. Всё сохраняем в md-файл, стартуем репо и заносим всё в доки.

🏗️ Архитектура
Выбрать стек, определить масштаб проекта и начать проектировать HLD — описывать его с ИИ-другом одно удовольствие. Поправлять, перечитывать что он там наголюционировал, выкидывать и начинать заново. Тут супер решает насмотренность на то, как реализовываются различные системы, какие компоненты общепринятые, где нужно быть действительно консервативным, а с чем можно поэкспериментировать. В результате — файлы с исчерпывающей инфой (1 файл = 1 компонент системы, поберегите окно контекста, оно вам ещё пригодится).

🎭 Роли и skills
Выделить роли на проекте и прописать skills для CC. Опыт работы с саб-агентами, выполняющими отдельную роль, у меня скорее позитивный. Обязательно накиньте «как делать не надо» — этот джун всё равно иногда проигнорирует, но лучше с примерами, чем без них.

✂️ Нарезка тасок
По юзер-сторям, компонентам системы, по заранее накиданному в v0 дизайну. Отдайте это агенту с ролью тимлида, натравите после агента с ролью системного аналитика, сделайте интеграцию. Затем /init чтобы создать главный CLAUDE.md. Прочтите его и дополните важными для вас практиками (ФП, тесты, типы).

1️⃣ Код
У вас есть роли для каждой вариации компонентов системы, должен быть оркестратор, который умеет назначать агентам роли. У меня не получилось пока запустить полностью самостоятельный рой — после каждой законченной задачи возвращаюсь потестить, прошу проревьювить и сам смотрю. Пользуйтесь туллингом для статического анализа (тайпчеки, линтеры, форматтеры). Не скупитесь дописывать тулинг для самостоятельных проверок ИИшкой (repl, тесты, MCP-серверы для дев-окружения).

💾 Версионирование
Делайте чекпоинт (гит-коммит) после каждой задачи, пишите ADR перед рефакторингом. Все документы стоит версионировать, а не только код — они основная память о ваших решениях. Периодически запускайте /init, ведите проект полностью в md-файлах. Так у агентов всегда будет вся свежая аккумулированная информация.

В итоге за пару недель получается проект по качеству иногда лучше, чем если бы его писало 3-5 человек командой полгода+ 🚀
Если вы ещё не пробовали подобный способ — однозначно рекомендую, чтобы наконец сделать свой проект-мечты.
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤‍🔥18👍8🔥6