Одна маленькая ошибка в дизайне Java API, за которую потом приходится платить очень дорого

Привет, Друзья!Хотел написать короткий пост по мотивам одного казалось бы простого ПР-а, который мы недавно получили в рамках Axelix: Open Core продукта для решения основных известных болей при разработке Spring Boot приложений (кстати, give us a star!).В общем, контрибьютор пришёл к нам и исправил с виду совершенно безобидную проблему, которую мы упустили. Но на деле, эта проблема со временем могла привести к другим багам, которые дебажить было бы крайне тяжело. И я посчитал, что это стоит небольшой статьи, потому что сам помню проблемы в Spring Data, которые возникали из-за подобных просчётов.Я не буду погружать вас в детали того, что мы делали, просто покажу на абстрактном примере.Давайте с места в карьер. Посмотрите на этот код: Читать далее

Можно учить иностранные слова без интервальных повторений. Но зачем?

Когда-то я учил английские слова по обычной тетради: записывал слово, транскрипцию и перевод, а потом проходил весь список с самого начала. Пока слов было несколько десятков, это работало. Но когда их стало около тысячи, повторение превратилось в отдельную работу: большая часть времени уходила на слова, которые я и так давно помнил.Тогда я начал разбираться, почему мы забываем новую информацию, как устроены интервальные повторения и по какому принципу Anki выбирает дату следующего показа карточки. В статье расскажу о кривой забывания, системе Лейтнера и алгоритме FSRS, а также покажу, как я реализовал собственную систему повторений в приложении VibeLing — без необходимости каждый раз выбирать между Hard, Good и Easy. Читать далее

Назад в будущее UI-kit: как мы перевели живую библиотеку на дизайн-токены и ничего не сломали

UI-kit, которым пользуются несколько продуктовых команд, нельзя просто отправить в будущее и переписать под новый дизайн. За ним тянется прошлое: старые CSS-переменные, публичный API, кастомизации у потребителей и независимые релизные циклы. При этом бренд уже меняется, дизайнеры приносят новую палитру, типографику, motion, скругления и тёмную тему и всё это нужно аккуратно посадить на компоненты, которые продолжают работать в продакшене.Привет, Хабр! Меня зовут Амир, я Senior Vue.js Frontend Developer в экосистеме Лукоморье. Уже шесть лет я развиваю фронтенд большой внутренней ERP-платформы, в том числе внутренний UI-kit: около 50 компонентов на Vue 3 и TypeScript, которыми пользуются несколько продуктовых команд в Ростелекоме.В этой статье расскажу, как мы устроили для UI-kit такое «назад в будущее»: в одной долгоживущей ветке sova провели редизайн поверх работающих компонентов, сохранили публичный API для команд-потребителей и перевели визуальный слой на новую архитектуру. Мы внедрили 3-tier-систему дизайн-токенов, собрали pipeline на Style Dictionary и Tokens Studio for Figma, оставили старые CSS-переменные через legacy-алиасы, а заодно закрыли несколько долгов библиотеки: типизацию шаблонов, встроенный SVG-спрайт на 816 иконок, утилиту темизации и вынос runtime-зависимостей с сокращением бандла с 940 до 150 КБ.Материал будет полезен инженерам дизайн-систем, фронтенд-архитекторам и тимлидам, которые поддерживают UI-kit для нескольких продуктовых команд и думают, как провести редизайн без поломки потребителей. Внутри — код, архитектурные решения, компромиссы и честные выводы по итогам миграции. Читать далее

Как я написал BGP-сервер и не сошёл с ума

BGPLite — open-source BGP route-server на C# и .NET 10. Он принимает BGP-сессии, динамически загружает префиксы через RIPE Stat и управляется через HTTP API. В статье разберём архитектуру проекта и реализацию собственного BGP-сервера с нуля. Читать далее