Обновить
128K+

Kotlin *

Статически типизированный язык программирования

46,36
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Veai 5.8-5.11: что изменилось в агенте, если смотреть на работу разработчика

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели5.8K

У AI-агентов есть неприятное свойство: они часто выглядят умнее, чем их обратная связь.

Модель может хорошо писать текст, аккуратно рассуждать о коде и уверенно предлагать правки. Но если все, что она видит, это grep, несколько похожих файлов, команда в терминале и длинный лог, то ее выводы строятся на шумном сигнале. Иногда этого хватает. На небольшом проекте, с сильной моделью и простой задачей, агент действительно может быстро помочь. Но! В enterprise-коде ситуация другая. Важны конкретная версия зависимости, выбранная run configuration, classpath, SDK, профиль, состояние объекта в рантайме, IDE warnings, usages, inspections, trace уязвимости, важны факты, без которых агент начинает угадывать.

Разберем на последних релизах Veai 5.8-5.11 рабочий цикл разработчика в любимой IDE.

Читать далее

Новости

Проблема фантомной записи: почему ваша реализация идемпотентности незаметно теряет данные

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.2K

В проде бывает так, что одна и та же операция часто повторяется: клиент не дождался ответа и ретраит, балансер порвал соединение, очередь переиграла сообщение. Вспоминаем про идемпотентность - это правило «повтор не должен создавать новый платёж/заказ».

Чтобы отличать повтор от новой операции, используют idempotency key (ключ идемпотентности). Это обычная уникальная строка-идентификатор, которую клиент или апстрим отправляет вместе с запросом (часто в заголовке Idempotency-Key). Сервис сохраняет этот ключ у себя и связывает с результатом операции.

Далее приходит запрос с тем же ключом - сервис не выполняет бизнес-действие второй раз, а дедуплицирует на основе ключа идемпотентности. Но так ли всё просто? Многолетний опыт анализа инцидентов показал, что на практике большое количество систем всё же регулярно допускают дублирования, хотя делали всё по методичке.

В новом переводе от команды Spring АйО рассмотрим не самые очевидные ошибки и то, о чём стоит подумать, при реализации идемпотентного API.

Читать далее

Обычный или облачный гейминг в EvertyDesk

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели9.6K

Рассказываю как собрал self-hosted платформу стриминга игр с нуля: Android sender на Kotlin + C++ JNI, собственный UDP транспорт, NAT traversal с relay fallback и Control Plane на ASP.NET Core с биллингом. Особое внимание — фиче TouchLatencySprint, которая режет input lag без root-доступа.

Читать далее

Как оптимизировать картинки в Android и не сломать UX: метрики, практики и компромиссы

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели5.6K

Если экран с картинками начинает тормозить, проблема редко сводится к одному AsyncImage. Разбираю, что действительно стоит измерять, как использовать preview и prefetch, зачем делить устройства на tier и почему одинаковое поведение на всех девайсах почти всегда ошибка.

Читать далее

AI Gateway для микросервисов: гайд по интеграции LLM в 2026

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели6.8K

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

В статье разбираем, как спроектировать AI Gateway — инфраструктурный слой для централизованной маршрутизации, кеширования, лимитов, observability и отказоустойчивости при работе с AI‑моделями.

Читать далее

JDK 27 Compact Object Headers: как сбросить до 30% кучи без кроссфита и жестких диет

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.9K

Каждый Java-объект в HotSpot начинается со служебного заголовка размером 12 байт. В JDK 27 по умолчанию он сжимается до 8 — это JEP 534, финальный шаг внедрения Compact Object Headers. Для типовых бэкендов это 5–15% экономии heap, для приложений с миллионами мелких объектов (особенно на Scala, Clojure и иммутабельных коллекциях) — до 30%, без изменений в прикладном коде.

Читать далее

Перевополщение Stable Values в JDK 26

Время на прочтение9 мин
Охват и читатели8.5K

В новом переводе от команды Spring АйО рассмотрим ленивую инициализацию в Java , которая почти всегда значит: поле сначала null, потом double-checked locking, volatile, синхронизация. Ошибиться легко, а final не поставить. Итог - код хрупче и JVM хуже делает constant folding.

В JDK 26 (preview, JEP 526) добавили LazyConstant<T>: final поле, рецепт вычисления через Supplier, значение доступно черезget(). Supplier выполнится при первом get и только один раз успешно, даже при гонке потоков. Кроме этого значение помечается как @Stable - JVM может считать его константой и агрессивнее оптимизировать.

Граничные случаи: null нельзя; не сериализуется; исключение из Supplier пробросится и следующая попытка снова пересчитает; equals у LazyConstant - только identity.

Для 1:n есть List.ofLazy и Map.ofLazy: элементы/значения считаются по индексу/ключу по требованию и кэшируются.

Читать далее

Как я заставил AI‑агента писать нормальный код на Spring

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели12K

Откуда берётся «среднее приложение с GitHub»? Если попросить агента создать JPA‑сущность или настроить Spring Security, то он выдаст вполне рабочий код. Вопрос только в одном: для какого проекта?

Модели натренированы на миллионах репозиториев: студенческие работы, всех задолбавшая Petclinic, туториалы с YouTube, у меня кстати, есть куча своих:D.

Но без чёткого контекста агент выдаёт типичное «среднее приложение с GitHub»: всё синтаксически верно, но далеко не всегда вписывается в существующий РЕАЛЬНЫЙ проект. С Lombok или без него? Используя @IdClass или @EmbeddedId? Предпочитаешь Record'ы или классические классы? Как у тебя маппятся DTO? Агент этого не знает и чаще всего либо пытается угадать, либо начинает грепать всё что можно и нельзя.

Prompt engineering помогает, но ненадолго. Прикреплять каждый раз примеры сущностей и архитектурные правила — прошлый век. Интеграция в IDE с @ и выбором файлов уже лучше, но всё равно надо постоянно об этом помнить и как РОБОТ писать ему одно и тоже.

Читать далее

Назирокодил утилиту на Kotlin и JavaScript для создания аккордов в любой тональности

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.7K

Написал утилиту для создания аккордов в любой мыслимой тональности.

Собственно в статье описываю путь от идеи до реализации этой утилиты и показываю, как ей пользоваться.

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

Читать далее, как легко сгенерить аккорды

SAST прямо в IDE: как Veai ищет уязвимости в Java/Kotlin-проекте и помогает их исправлять

Время на прочтение13 мин
Охват и читатели1.5K

Почему классический разбор SAST-находок — это боль

Сценарий, знакомый многим разработчикам в крупных компаниях: перед релизом ИБ-отдел присылает выгрузку из корпоративного сканера. В этом PDF-файле на сотни страниц собраны тонны находок. Большая часть из них снабжена метками вроде Critical. И вот, вместо скроллинга ленты подготовки релиза разработчик сталкивается с трудоемким процессом анализа:

Открыть указанный в отчете файл

Обнаружить там какую-нибудь generic-функцию, которая принимает строку и склеивает SQL-запрос

Раскопать через цепочки вызовов, откуда вообще берутся данные. Приходят ли они напрямую от пользователя из REST-контроллера, контролируются ли они внутренней конфигурацией, или это вообще внутренний технический ID, который заведомо безопасен?

Разобраться, была ли где-то по дороге валидация или экранирование

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

Читать далее

Java — быстрая. Ваш код может таким не быть

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели17K

Есть такие анти‑паттерны, которые выглядят нормально и даже проходят код‑ревью, но тихо убивают производительность в горячих местах: 

- Конкатенация строк в циклах

- String.format() в горячем коде

- Автобоксинг 

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

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

Читать далее

Gradle под капотом: как перестать страдать и заставить сборку летать

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.8K

Привет, Хабр! На связи «Исходный Код». Сегодня разбираем инструмент, который мы все запускаем по сто раз на дню, но часто воспринимаем как черный ящик. Без него мы бы до сих пор собирали проекты руками, писали скрипты на bash и страдали от вечного «у меня собирается, а у тебя нет».

Gradle дает нам единый источник правды, повторяемые сборки и масштабируемость: от пет-проекта до огромных многомодульных монорепозиториев. Давайте разберем его по косточкам, чтобы настройка билдов больше не была болью.

Читать далее

Что сейчас с Project Loom? Примеры и код

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели15K

Практика Project Loom: как включить preview Structured Concurrency в javac, Maven и Gradle, как использовать ScopedValue для request context и StructuredTaskScope для параллельных вызовов, joiner’ы, timeout и связка обеих фич в одном примере. Примеры под JDK 25+

Что же с Project Loom?

Ближайшие события

Соль и перец в безопасности паролей

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели12K

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

Однако обычного хеширования недостаточно из-за угрозы быстрых хакерских атак. Для защиты разработчики применяют «соль» (salt) — случайные данные, добавляемые к паролю. Минус соли в том, что она хранится рядом с хешем и не спасает от мощного перебора. Тогда на помощь приходит «перец» (pepper), скрытый в коде сервера. Его главная проблема — высокий риск потерять доступ ко всем аккаунтам при компрометации самого секретного ключа.

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

Читать далее

Что сейчас с Project Loom? Structured Concurrency: preview №7

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели12K

Project Loom меняет привычную модель конкурентности в Java: virtual threads делают потоки дешевле, Scoped Values дают аккуратную передачу контекста, а Structured Concurrency помогает управлять жизненным циклом связанных задач. Разбираем актуальное состояние Loom в JDK 25-27 и что из этого уже можно использовать.

Читать далее

Эволюция API без боли: ArchUnit, Gradle и правила для библиотек

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели10K

В Netflix тысячи Java-репозиториев. Когда в библиотеку вносят изменение, часть пользователей может перестать собираться или начать работать некорректно. Чаще всгео эта проблема возникает потому, что public контракты являются public только для авторов библиотеки, а не для пользователей.

С новом переводе от команды Spring АйО разбираемся, как ребята из Netflix ввели простые метки для API: @Public - можно использовать снаружи, @Experimental - тоже можно, но интерфейс может меняться, @Deprecated - готовится к удалению. Все остальное считается внутренним и использованию извне не подлежит. Но сами аннотации проблему не решают, нужна проверка на масштабе.

Решение - ArchUnit + Nebula ArchRules. 

ArchUnit анализирует скомпилированный байткод, поэтому одинаково работает для Java/Kotlin/Scala и проверяет реальный код на classpath. Команды пишут правила (например: «вне пакета библиотеки нельзя зависеть от ее deprecated/internal API»), публикуют их как отдельный arch-rules JAR, а runner автоматически запускает проверки в репозиториях и делает отчеты с точной строкой нарушения.

Читать далее

Переезд с XML на Jetpack Compose на проде: базовые классы, архитектура, сложности и готовые решения

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели12K

Меня зовут Родион, и я уже около 2,5 лет работаю в VK Android-разработчиком в крупном многомодульном проекте с сотнями экранов и довольно большой аудиторией. Когда я попал на проект, стек был классическим и проверенным: XML-вёрстка, навигация через Cicerone, Dagger 2 для DI, Coroutines и Flow для асинхронщины, а в качестве архитектурного паттерна — MVVM. 

Рано или поздно любая растущая кодовая база упирается в потолок своих архитектурных решений. У нас этот момент настал, когда количество экранов выросло до нескольких сотен и команда начала тратить больше времени на борьбу с неконсистентным состоянием UI. Классическая связка XML + ViewBinding + MVVM работала, но с каждым новым экраном мы всё острее чувствовали её ограничения: разрозненные StateFlow, дублирование кода во фрагментах, сложность переиспользования компонентов. 

Нужно было что-то менять — пересмотреть сам подход к построению UI. Так мы начали миграцию на Jetpack Compose (который на момент начала перехода уже был стабильным и самодостаточным). Полтора года спустя, пройдя через рефакторинг базовых классов, переход с MVVM на MVI и постепенную замену содержимого всех фрагментов, мы получили стек, на котором разработка ускорилась, а баги, связанные с состоянием экрана, практически исчезли. 

Полный переход на Jetpack Compose мы разделили на три больших этапа:

- переписываем содержимое всех фрагментов на ComposeView;

- переходим с Dagger2 на Koin;

- меняем навигацию с Cicerone на Compose-навигацию.

О втором и третьем этапах кратко расскажу ниже —  в главе стратегии перехода, а на первом этапе остановлюсь подробнее.

В этой статье не будет разбора плюсов и минусов Jetpack Compose, скорее она будет полезна тем, кто уже знаком с технологией, хочет её использовать, но боится нести в проект. Я расскажу, как мы шаг за шагом выполняли первый этап, и к чему в итоге пришли.

Читать далее

Рейтинг технологий для мобильной разработки для банков в 2026 году

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели9.4K

Сейчас рынок переживает не лучшие времена. Уже несколько лет заблокированы основные магазины приложений. В последнее время сильно участились кибератаки на приложение банков. Но технологии могут решить эти проблемы.

В этой статье я расскажу про:

·       Наш топ технологий

·       Как улучшить кибербезопасность в приложении

·       Последние функциональные тренды

Наш топ технологий

Swift – 5 звезд

Keychain и биометрия Face ID/Touch ID работают на уровне аппаратного шифрования, и разработчикам не нужно придумывать велосипед для защиты платежей. Swift дает производительность, идеальную работу с камерой для сканирования карт и чеков, и дает полный доступ ко всем API устройства.

Для банков важна не столько скорость разработки, сколько то, чтобы под каждую платформу были свои решения. Потому что Google или Apple могут что-то менять, и, допустим, в App Store потребуется внести обходы, дополнительные функции или модификации. Технически это можно сделать и на кроссплатформе, но если банк хочет поддерживать имидж и безупречную работу, ему нужно идеальное соответствие каждой платформе. Поэтому до сих пор во многих банках основная часть приложений пишется на нативе: для Apple — Swift, для Android — Kotlin.

Поэтому при использовании Swift компании нужно также иметь отдельную команду для разработки на Android. Поэтому стоимость разработки повышает и сразу две команды делают одно и тоже.

Читать далее

А с вашими миграциями все в порядке?

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели11K

Миграции базы данных вроде бы есть, Liquibase подключен, changelog лежит в репозитории, CI зелёный, релизы проходят регулярно. Значит, процесс под контролем?

Не всегда…

Читать далее

Telegram в IntelliJ: как устроен IDEGram и что он умеет

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели15K

Плагин для JetBrains-IDE, который встраивает полноценный Telegram прямо в редактор. Плюс шифрованный шеринг кода, подсветка синтаксиса в теме получателя и магия с метаданными в обычном тексте сообщения. Разбираю изнутри.

Читать далее
1
23 ...