Когда дело доходит до реализации CI/CD пайплайнов, то никогда не бывает просто.
Делюсь с вами новыми рекордами по кол-ву фиксов:
Почему никто еще не додумался сделать нормальные тесты/окружения для этого, ведь постоянно приходится все в продакшене проверять🥶
Fun fact: у меня никогда не удавалось с первого раза написать рабочий CI пайплайн - делает ли это меня плохим разработчиком🧐
Делюсь с вами новыми рекордами по кол-ву фиксов:
предыдущий рекорд - 4 исправления
новый рекорд - 9 исправлений
Почему никто еще не додумался сделать нормальные тесты/окружения для этого, ведь постоянно приходится все в продакшене проверять
Fun fact: у меня никогда не удавалось с первого раза написать рабочий CI пайплайн - делает ли это меня плохим разработчиком
Please open Telegram to view this post
VIEW IN TELEGRAM
Честно говоря, я под огромным впечатлением от текущих возможностей LLM.
В университете дали задание - написать парсер статей для сайта Habr.
Предлагалось выбрать любой язык для реализации. Я, недолго думая, подумал сделать это на чистом C.
Побрейнштормил с ChatGPT про возможность такой реализации, но я до последнего не верил, что у нейронки получится такое написать - все-таки C очень сложный язык с кучей своих особенностей.
В итоге попросил у ChatGPT собрать мне детализированный промпт для Codex на реализацию такого парсера с пагинацией, выделением тегов и тд. Плюс, решил, что пусть оно упакует все в Docker-контейнер, чтобы можно было везде запускать.
И на мое огромное удивление - спустя минут 15, Codex написал идеальный код, который РАБОТАЕТ🤯
Мне даже не пришлось это как-то фиксить или докручивать - я просто собрал максимально детальные требования, добавил примеров и просто запустил генерацию.
Если вам интересно, можете глянуть на результаты: https://github.com/ksilisk/habr-c-parser
Жесть насколько они становятся умными....😮
В университете дали задание - написать парсер статей для сайта Habr.
Предлагалось выбрать любой язык для реализации. Я, недолго думая, подумал сделать это на чистом C.
Побрейнштормил с ChatGPT про возможность такой реализации, но я до последнего не верил, что у нейронки получится такое написать - все-таки C очень сложный язык с кучей своих особенностей.
В итоге попросил у ChatGPT собрать мне детализированный промпт для Codex на реализацию такого парсера с пагинацией, выделением тегов и тд. Плюс, решил, что пусть оно упакует все в Docker-контейнер, чтобы можно было везде запускать.
И на мое огромное удивление - спустя минут 15, Codex написал идеальный код, который РАБОТАЕТ
Мне даже не пришлось это как-то фиксить или докручивать - я просто собрал максимально детальные требования, добавил примеров и просто запустил генерацию.
Если вам интересно, можете глянуть на результаты: https://github.com/ksilisk/habr-c-parser
Жесть насколько они становятся умными....
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Программирование на Kotlin - это как постоянно кушать чистый сахар
Программирование на C++ - это как постоянно кушать перец чили, даже если ты этого не хочешь
Программирования на JS - это как кушать undefined, даже если ты null
Продолжайте в комментах, можно повторяться)
Программирование на C++ - это как постоянно кушать перец чили, даже если ты этого не хочешь
Программирования на JS - это как кушать undefined, даже если ты null
me && it
Спустя почти десяток проектов и кучи копипаст-кода я все-таки созрел на разработку своего Spring Boot Starter’а для разработки телеграм ботов. Идея до боли простая: реализовать большой Java-фреймворк для быстрого bootstrap’а ботов без необходимости самому…
Чуть больше месяца назад рассказывал вам про свою новую разработку - Telegram Bot Spring Boot Starter
Так вот, спешу поделиться - выпущен первый релиз этой библиотеки в Maven Central.
В первой версии поддержал большинство базовых хотелок и теперь оно готово к использованию!🎉
В процессе разработки у меня даже появилось 3 новых контрибьютора, они сами как-то нашли проект и взялись порешать некоторые задачки из бэклога - мне меня это очень приятно удивило.
В общем, приглашаю Java-разработчиков (и не только) посмотреть, прощупать проект и потестировать на своих задачах.
Звездочки на GitHub очень приветствуются - так проект увидит больше людей🦞
Планирую развивать его дальше, так как еще не все задумки были покрыты и реализованы.
Так вот, спешу поделиться - выпущен первый релиз этой библиотеки в Maven Central.
В первой версии поддержал большинство базовых хотелок и теперь оно готово к использованию!
В процессе разработки у меня даже появилось 3 новых контрибьютора, они сами как-то нашли проект и взялись порешать некоторые задачки из бэклога - мне меня это очень приятно удивило.
В общем, приглашаю Java-разработчиков (и не только) посмотреть, прощупать проект и потестировать на своих задачах.
Звездочки на GitHub очень приветствуются - так проект увидит больше людей
Планирую развивать его дальше, так как еще не все задумки были покрыты и реализованы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Спустя 4 дня модераторы Хабра все-таки опубликовали мою статью наконец🎉
В ней рассказал более подробно про фреймворк Telegram Bot Spring Boot Starter - откуда появилась идея, какая архитектура и дальнейшие пути развития проекта.
Приходите почитать - https://habr.com/en/articles/975552/
В ней рассказал более подробно про фреймворк Telegram Bot Spring Boot Starter - откуда появилась идея, какая архитектура и дальнейшие пути развития проекта.
Приходите почитать - https://habr.com/en/articles/975552/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤2
Я тут немного зачастил с постами, но не могу не поделиться этим.
Позвали меня на Хакатон от Сбера для разработки "Городского помощника" (чат-бот) жителям и гостям Санкт-Петербурга.
Постарался реализацию сделать по самым современным трендам: удалось собрать RAG для хранения статической информации, MCP-сервер для интеграции с внешним API и фильтр токсичности сообщений пользователя.
Удалось покрыть кучу кейсов, например: получение афиши, ближайших поликлиник, детских садов, ветклиник, красивых мест и т.д. (список довольно большой)
В рамках кейса мне даже довелось написать Max-бота на Golang (мне не понравилось их SDK ).
В качестве LLM-модели использовали GigaChat, который ИМЕННО на презентации в финале нас фатально подвел и отказался корректно следовать промптам - поэтому презентация решения с треском провалилась, увы🤢
Однако, даже несмотря на это, нам удалось занять 3-е место в финале🦔
PS: Исходный код решения и его архитектуру вы можете посмотреть здесь - https://github.com/ksilisk/spbtechrun-hack
PPS: теперь пропадаю на N дней, но stay tuned
Позвали меня на Хакатон от Сбера для разработки "Городского помощника" (чат-бот) жителям и гостям Санкт-Петербурга.
Постарался реализацию сделать по самым современным трендам: удалось собрать RAG для хранения статической информации, MCP-сервер для интеграции с внешним API и фильтр токсичности сообщений пользователя.
Удалось покрыть кучу кейсов, например: получение афиши, ближайших поликлиник, детских садов, ветклиник, красивых мест и т.д. (список довольно большой)
В рамках кейса мне даже довелось написать Max-бота на Golang (
В качестве LLM-модели использовали GigaChat, который ИМЕННО на презентации в финале нас фатально подвел и отказался корректно следовать промптам - поэтому презентация решения с треском провалилась, увы
Однако, даже несмотря на это, нам удалось занять 3-е место в финале
PS: Исходный код решения и его архитектуру вы можете посмотреть здесь - https://github.com/ksilisk/spbtechrun-hack
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤6🔥4⚡2👏1🤩1👨💻1
Внезапно, но мне выдали доступ до Sora 2 😛
Для тех, кто не знает - Sora 2 передовой сервис от OpenAI для генерации видео. Половина необычных коротких роликов, которые вы видите в TikTok и Нельзяграмме сгенерированы при помощи него.
Суть в том, что когда выпустили релиз Sora 2, то доступ выдали только некоторому количеству людей, которые могли пригласить других. И я похоже попал под раздачу от самого OpenAI.
Я немного потестировал и реально остался под впечатлением от возможностей это штуки, но нужно плотно работать с промптами для качественного результата.
Если вдруг нужен инвайт, то пишите🦞
Для тех, кто не знает - Sora 2 передовой сервис от OpenAI для генерации видео. Половина необычных коротких роликов, которые вы видите в TikTok и Нельзяграмме сгенерированы при помощи него.
Суть в том, что когда выпустили релиз Sora 2, то доступ выдали только некоторому количеству людей, которые могли пригласить других. И я похоже попал под раздачу от самого OpenAI.
Я немного потестировал и реально остался под впечатлением от возможностей это штуки, но нужно плотно работать с промптами для качественного результата.
Если вдруг нужен инвайт, то пишите
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🙏2❤🔥1🔥1🤩1
Рассказываю вам критический путь разработчика по работе с АОП (аспектно-ориентированное программирование)🦔
1) Знакомишься с аспектами и АОП;
2) Радуешься простоте, гибкости и применимости;
3) Используешь у себя в небольших проектах (тоже радуешься);
4) Приходишь в большой и незнакомый сервис;
5) Твои изменения в этом коде порождают баг (уже не радуешься);
6) Тратишь 2 дня на поиски (сильно не радуешься);
7) Оказывается, что в другой части кодовой базы был обработчик твоего метода (они были связаны между собой неявно);
8) Корни этого обработчика проходят почти по всему сервису;
9) Чинишь так, чтобы не сломать работу половины проекта;
10) Профит! (или не совсем...)
Итог: разбитые розовые очки, кучу потраченного времени и новый взгляд на применимость/надежность АОП🔫
PS: Речь по большей части про Java, но имеет место быть и в других языках.
1) Знакомишься с аспектами и АОП;
2) Радуешься простоте, гибкости и применимости;
3) Используешь у себя в небольших проектах (тоже радуешься);
4) Приходишь в большой и незнакомый сервис;
5) Твои изменения в этом коде порождают баг (уже не радуешься);
6) Тратишь 2 дня на поиски (сильно не радуешься);
7) Оказывается, что в другой части кодовой базы был обработчик твоего метода (они были связаны между собой неявно);
8) Корни этого обработчика проходят почти по всему сервису;
9) Чинишь так, чтобы не сломать работу половины проекта;
10) Профит! (или не совсем...)
Итог: разбитые розовые очки, кучу потраченного времени и новый взгляд на применимость/надежность АОП
PS: Речь по большей части про Java, но имеет место быть и в других языках.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3👍3💔3
Я тут вернулся к чтению кабанчика (aka Высоконагруженные приложения. Программирование, масштабирование, поддержка)
И узнал, что оказывается в компьютерных системах существуют 2 вида часов:
- Часы истинного/реального времени
- Монотонные часы
Их отличие в том, что первые показывают точное время на данный момент, но в случае расхождений с реальным временем могут прыгать вперед или назад💆♂️
А вот монотонные часы наоборот - всегда монотонно возрастают (грубо говоря, обычный счетчик), однако по ним нельзя узнать текущее время, так как они могут отсчитываться от произвольных моментов (например, от момента запуска компьютера).
Более того, оказывается, что когда в Java вызывается System.currentTimeMillis(), то результат рассчитывается как раз на основе часов истинного времени.
А вот при вызове System.nanoTime() используются именно монотонные часы.
Вообще, в Java разработке везде, где нужно померить отрезок времени (например, длительность HTTP запроса), используется именно nanoTime.
И мне всегда казалось, что так делают, потому что nanoTime возвращает более точное время, но оказалось, что не все так просто (кто бы сомневался, ага🙄 ).
PS: возможно в более современных системах все работает немного иначе, но вряд ли с ощутимыми различиями.
И узнал, что оказывается в компьютерных системах существуют 2 вида часов:
- Часы истинного/реального времени
- Монотонные часы
Их отличие в том, что первые показывают точное время на данный момент, но в случае расхождений с реальным временем могут прыгать вперед или назад
А вот монотонные часы наоборот - всегда монотонно возрастают (грубо говоря, обычный счетчик), однако по ним нельзя узнать текущее время, так как они могут отсчитываться от произвольных моментов (например, от момента запуска компьютера).
Более того, оказывается, что когда в Java вызывается System.currentTimeMillis(), то результат рассчитывается как раз на основе часов истинного времени.
А вот при вызове System.nanoTime() используются именно монотонные часы.
Вообще, в Java разработке везде, где нужно померить отрезок времени (например, длительность HTTP запроса), используется именно nanoTime.
И мне всегда казалось, что так делают, потому что nanoTime возвращает более точное время, но оказалось, что не все так просто (кто бы сомневался, ага
PS: возможно в более современных системах все работает немного иначе, но вряд ли с ощутимыми различиями.
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥3🔥3🏆2🗿1
Оказывается существует возможность поднять свой личный Telegram Bot API и получать события не из api.telegram.org/bot, а со своего сервера...
К сожалению, Telegram начали жестко блокировать и почти все мои сервисы начали сильно деградировать. Самое интересное, что об этом я узнал от самих пользователей, так как в Питере все работает на удивление неплохо.
Ладно, на самом деле я сам виноват, что не настроил алерты на деградацию, хотя возможность у меня была - мой фреймворк для TG ботов уже умеет в метрики.
Короче в Москве с блокировками все особенно плохо, ну и как вы поняли основной сервак у меня как раз в Москве => все деградирует.
Пришлось поднять собственный Telegram Bot API вне RU, чтобы ходить за событиями туда вместо официальногои известного РКНу api.telegram.org/bot.
После перехода стало ощутимо лучше, но latency все-таки подросло (кто бы сомневался, ага😛 ).
Если кто-то столкнулся с такой же ситуацией, то вот инструкция. В целом могу поделиться доступом до моего API - пишите в личку🤝
К сожалению, Telegram начали жестко блокировать и почти все мои сервисы начали сильно деградировать. Самое интересное, что об этом я узнал от самих пользователей, так как в Питере все работает на удивление неплохо.
Ладно, на самом деле я сам виноват, что не настроил алерты на деградацию, хотя возможность у меня была - мой фреймворк для TG ботов уже умеет в метрики.
Короче в Москве с блокировками все особенно плохо, ну и как вы поняли основной сервак у меня как раз в Москве => все деградирует.
Пришлось поднять собственный Telegram Bot API вне RU, чтобы ходить за событиями туда вместо официального
После перехода стало ощутимо лучше, но latency все-таки подросло (кто бы сомневался, ага
Если кто-то столкнулся с такой же ситуацией, то вот инструкция. В целом могу поделиться доступом до моего API - пишите в личку
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
В общем, я теперь еще и официально сотрудник ИТМО, лол🏅
Взялся менторить первокурсников по дисциплине "Программирование на Python" (жаль не Java, конечно)
Буду вести им лабораторные работы, готовить задания и менторить по дисциплине и по Python в целом.
Посмотрим насколько отличаются сегодняшние перваки в ИТМО от перваков в СТАНКИН-е 4 года назад 🦔
Взялся менторить первокурсников по дисциплине "Программирование на Python" (жаль не Java, конечно)
Буду вести им лабораторные работы, готовить задания и менторить по дисциплине и по Python в целом.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🎉4💯4
Еще 365 дней пролетело и сегодня каналу исполнилось уже 2 года!🍾
Время продолжает беспощадно лететь вперед, а нам остается лишь поспевать за ним с горящими дедлайнами!👨🦽
Спасибо, что продолжаете оставаться со мной здесь, постараюсь и дальше делиться интереснымии не очень новостями на стыке IT и моей жизни🤝
PS: возможно следующий день рождения канала мы встретим уже в MAX...
Время продолжает беспощадно лететь вперед, а нам остается лишь поспевать за ним с горящими дедлайнами!
Спасибо, что продолжаете оставаться со мной здесь, постараюсь и дальше делиться интересными
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉11👍3😎2
Сегодня занимался ручным восстановлением таблицы на 120 млн записей и обьемом +- 100 ГБ из сырых данных🥲
Все потому что при миграции схемы промахнулся с первичным ключом, а ClickHouse любезно подропал кучу записей.
Это весьма неприятный процесс, учитывая, что потребовалось около 2х часов и 2 итерации полной перезаписи таблицы, а еще ограниченные ресурсы кластера не позволяют делать жирные запросы как душе угодно.
На самом деле, это не первый мой опыт. Где-то 3 года назад я похожим образом промахнулся с названием метода и полностью испортил 60 ТБ данных прямо на production-е (ну да, а кто ж без греха?)
спойлер:мы тогда додумались сделать бекап, но восстановление заняло почти 10 часов
Проверяйте SQL-запросы повнимательнее и используйте LLM для этого🫂
Все потому что при миграции схемы промахнулся с первичным ключом, а ClickHouse любезно подропал кучу записей.
Это весьма неприятный процесс, учитывая, что потребовалось около 2х часов и 2 итерации полной перезаписи таблицы, а еще ограниченные ресурсы кластера не позволяют делать жирные запросы как душе угодно.
На самом деле, это не первый мой опыт. Где-то 3 года назад я похожим образом промахнулся с названием метода и полностью испортил 60 ТБ данных прямо на production-е (ну да, а кто ж без греха?)
спойлер:
Проверяйте SQL-запросы повнимательнее и используйте LLM для этого
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7⚡1❤🔥1🔥1🙏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7⚡3👍3👌1
Взялся переносить часть своих ботов из Telegram в VK и делюсь с вами приколами, которые я обнаружил в их официальном SDK - vk-java-sdk (там почти 300 звезд)
Первое, что бросается в глаза - последний коммит был 2 года назад (!)
В общем, попросил Codex собрать мне простенького бота и проверил результат - все выглядит красиво и должно работать.
Запускаю и все умирает на первом же Update:
Начинаю копать и натыкаюсь вот на такой интерфейс: CallbackEvent
В котором внезапно нормальное логирование перемешано с обычным
System.out.println (реф):
То есть настройка уровней логирования не работает, эти сообщения ВСЕГДА пишутся в лог.
Ладно, хочется понять почему сервис умирает. Копаю дальше и вижу метод LongPollApi.run, в котором при любой runtime-ошибке в handleUpdate поток просто умирает, а в самом методе нет никакой обработки внештатных ошибок, лол😕
И эти проблемы - лишь вершина айсберга...
PS: проблему я починил переопределением метода CallbackEvent.parse - выкинул оттуда весь мусор и оставил только нужное мне.
Первое, что бросается в глаза - последний коммит был 2 года назад (!)
На самом деле раз уж происходят блокировки Telegram, то наверное можно было бы подсуетиться и пообновлять проект
В общем, попросил Codex собрать мне простенького бота и проверил результат - все выглядит красиво и должно работать.
Запускаю и все умирает на первом же Update:
NullPointerException: Cannot invoke "Events.ordinal()" because the return value of "CallbackMessage.getType()" is null
Начинаю копать и натыкаюсь вот на такой интерфейс: CallbackEvent
В котором внезапно нормальное логирование перемешано с обычным
System.out.println (реф):
System.out.println("Received callback message type: " + message.getType());
System.out.println("Received callback message: " + message.getObject());
System.out.println("Deserialized event object: " + event.toString());
То есть настройка уровней логирования не работает, эти сообщения ВСЕГДА пишутся в лог.
Ладно, хочется понять почему сервис умирает. Копаю дальше и вижу метод LongPollApi.run, в котором при любой runtime-ошибке в handleUpdate поток просто умирает, а в самом методе нет никакой обработки внештатных ошибок, лол😕
И эти проблемы - лишь вершина айсберга...
PS: проблему я починил переопределением метода CallbackEvent.parse - выкинул оттуда весь мусор и оставил только нужное мне.
👍6⚡3
Построение мульти-агентных и прочих AI-систем оказывается не такая уж и простая задача.
Вписался тут в интенсив AgentsWeek от ШАДа и узнал много нового про построение production-ready агентских систем.
Многим может показаться создание AI-агентов простой задачей, так как LLM стали очень умными и библиотек-оберток появилось уже много, но на деле это не совсем так, увы😕
В общем, впечатления от интенсива очень положительные, но розовые очки тотально разбиты.
Ребята из Яндекса рассказали кучу полезной информации по работе с AI-агентам, например:
- Механизмы управления памятью
- Паттерны построения мульти-агентных систем
- Векторы атаки на LLM
- Подходы к тестированию таких систем
- Работа с tool calling, MCP
Однако применимость мульти-агентных систем осталась не раскрытой, так как сложность их построения кратно выше, чем поднятие простого бекенда🏄♂️ (Вова, тут цитирую твои слова )
Вписался тут в интенсив AgentsWeek от ШАДа и узнал много нового про построение production-ready агентских систем.
Многим может показаться создание AI-агентов простой задачей, так как LLM стали очень умными и библиотек-оберток появилось уже много, но на деле это не совсем так, увы
В общем, впечатления от интенсива очень положительные, но розовые очки тотально разбиты.
Ребята из Яндекса рассказали кучу полезной информации по работе с AI-агентам, например:
- Механизмы управления памятью
- Паттерны построения мульти-агентных систем
- Векторы атаки на LLM
- Подходы к тестированию таких систем
- Работа с tool calling, MCP
Однако применимость мульти-агентных систем осталась не раскрытой, так как сложность их построения кратно выше, чем поднятие простого бекенда
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
me && it
record Barbell(int weightKg) {} // штанга class Human { private final String name; Human(String name) { this.name = name; } boolean press(Barbell barbell) { return barbell.weightKg() <= 100; } } public static void main(String[]…
Well, by the way:
System.out.println("Successful hit 110kg bench press!")
🔥6