Обновить
64K+

Kotlin *

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

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

Навайбкодил до продакшена

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

Недавно я опубликовал в Google Play приложение 99.9% исходного кода которого написано AI. Это не просто "поделка на коленке за выходные": нативное (Kotlin), больше 50 экранов, сложная анимация, мультиязычность, расширяемое.

Этого удалось добиться через очень подробную спецификацию. Каждый экран был отрисован дизайнером, для каждой кнопки есть описание какие API дернуть. Стоило ли оно того? Давайте посмотрим на цифры.

Читать далее

Новости

Измеряя незримое: что и как измерять в мобильной разработке

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

Всем привет! Меня зовут Алексей, я техлид Android-направления в компании Домклик.

Этой статьёй я открываю цикл материалов, в которых будут собраны мысли, советы и инструкции о том, как сделать приложение и процессы его разработки измеримыми, как находить «узкие места», диагностировать проблемы и причины их возникновения, а также фиксировать их наличие. Минимум кода, сложных терминов и «rocket science» — только практический опыт и наработки по различным метрикам.

Читать далее

Что нового в IntelliJ IDEA 2026.2

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

Несмотря на то, что IntelliJ IDEA уже несколько лет официально недоступна в России, она по-прежнему остаётся одной из самых популярных IDE среди разработчиков. На днях вышла свежая версия 2026.2.

В релиз вошли новые инструменты для работы с ИИ-агентами, изменения в отладчике и автоматизация ряда повседневных операций. Также появилась поддержка Java 27, Kotlin 2.4, TypeScript 7, будущего Gradle 10 и обновления для Spring, Terraform и Docker Compose.

В статье пройдемся по основным изменениям.

Читать далее

Аутентификация через биометрию в Kotlin Multiplatform или Koncierge

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

Наконец-то неплохо продвинувшись в написании своего мультиплатформенного приложения Modern Money мне понадобилась аутентификация для Kotlin Multiplatform.

Хотелось иметь один API для PIN-кода и биометрии, а под капотом использовать Android Biometric Prompt, Windows Hello, Touch ID.

Так появился Koncierge — набор KMP-модулей biometric, auth и auth-compose

Казалось бы, задача довольно стандартная: объявить expect-класс и написать несколько actual-реализаций. На Android это примерно так и получилось. А вот Windows Hello, JVM-модуль и публикация всех артефактов заставили немного разобраться в том,

как Kotlin работает с нативным кодом

Тестовые фикстуры: управление зависимостями в Gradle

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

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

На самом деле Gradle умеет решать эту задачу из коробки без вспомогательных проектов и хитрых конфигураций. Начиная с версии 5.6, тестовые фикстуры стали в Gradle полноценной сущностью первого класса, и весь этот пласт боли можно убрать буквально несколькими строчками в build.gradle.

Плагин java-test-fixtures заводит в модуле отдельный SourceSet, а другие модули подключают эти классы через лаконичный DSL. При публикации Gradle даже собирает отдельный *-test-fixtures.jar для независимых проектов. В статье на примерах показано, как расшарить тестовые хелперы между модулями, избавиться от дублирования и при этом сохранить чистые архитектурные границы. Если вы устали таскать тестовый код из модуля в модуль, то Вам точно пригодится.

Читать далее

Аннотации в Kotlin: от @Deprecated до своего KSP-процессора

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

Аннотации в Kotlin — это не только @Deprecated и @Suppress. Разбираемся, где живут SOURCE, BINARY и RUNTIME, чем KSP отличается от kapt, как compiler plugins меняют код и какие практические задачи можно закрыть генерацией: debug menu, удаление экспериментов и каталог performance-метрик.

Читать далее

Лучшая архитектура KMP-приложений и когда её не использовать. Часть 2

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

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

Это вторая, практическая, часть из двух. Здесь про то, как организованы слои, какие контракты уходят в Swift, как готовить SKIE, как устроены обработка ошибок и DI, что с модульностью, скоростью сборки и тестами.

Читать далее

Gradle под капотом: как перестать мучиться и заставить свой компьютер работать на полную мощность?

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

Привет, Хабр. На связи Илья Новиков, технический директор команды разработчиков «Исходный код».

Сегодня я хочу разобрать инструмент, который мы все используем десятки раз в день, но часто по-прежнему воспринимаем как «черный ящик».

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

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

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

Читать далее

Масштабирование Java-систем реального времени

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

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

В переводе от команды Spring АйО разбирается опыт масштабирования Java-платформы контакт-центра: почему локальные кеши начали расходиться, как повторное воспроизведение Kafka-событий почти сделало бесполезным автомасштабирование, откуда взялось получасовое отставание потребителей и почему часть критических путей пришлось вернуть к синхронному взаимодействию.

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

Читать далее

Браузерная игра на Kotlin: практический обзор KorGE

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

Посмотрим на движок KorGE для разработки простых игр на Kotlin: спрайты, музыка, мобильное управление, fullscreen, landscape-режим и маленькие футбольные радости от Норвегии

Посмотреть демку

Мне надоело писать один и тот же код. Поэтому я сделал Featuregen

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

Привет, Хабр. Я уже не тот беззаботный парнишка, что собирал 486-й компьютер. Время бежит, я скуф успел поработать с C++, C#, Java и Kotlin, последние 10 лет занимаюсь мобильной разработкой. Программирование я до сих пор люблю потому что больше ничего не умею. Но чем дольше работаешь, тем чаще ловишь себя на мысли, что от некоторых вещей начинает подгорать. Сегодня я расскажу, как я попытался избавиться хотя бы от части таких вещей.

Читать далее

Самокорректирующийся структурированный вывод в Spring AI 2.0

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

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

Даже если явно попросить ответ по JSON Schema, модель может добавить пояснение, пропустить поле или вернуть не тот тип. Нативный structured output у части провайдеров есть, но он работает не везде и не одинаково.

В новом переводе от команды Spring АйО разбираем, как в Spring AI 2.0 решается эта проблема.

Читать далее

Лучшая архитектура KMP-приложений и когда её не использовать. Часть 1

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

В архитектуре KMP+CMP-приложений главный вопрос не в том, сколько кода можно пошарить. Он в том, где нужно остановиться.

Я покажу два рабочих подхода. Первый — архитектура для большого мобильного продукта: общий Kotlin-слой для бизнес-логики и нативный UI на каждой платформе. Второй — стартаповый путь, где Compose Multiplatform помогает быстро запустить мобильные продукты, web- и desktop-приложения. И даже backend на общих моделях данных.

Поговорим о том, когда нужно и не нужно применять «лучшую» архитектуру.

Читать далее

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

Reflection замедляет ваш Java-код. Почему?

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

Сколько раз вы слышали тезис о том, что в Java Reflection тормозит, и лучше его избегать. Насколько это правда?

В новом переводе от команды Spring АйО рассмотрим, почему производительность reflection-а имела проблемы.

Читать далее

Veai + TMS: как подключить Allure TestOps и Test IT к ИИ-агенту в IDE и чинить упавшие автотесты

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

Автотесты падают, а разбор занимает время: нужно открыть отчёт в системе управления тестами, понять причину падения, залезть в репозиторий, найти нужный тест и решить, где ошибка: в самом тесте или в приложении. Veai умеет забирать эту рутину на себя. Агент подключается к TMS (Test Management System), читает данные о падении по ссылке и предлагает правку прямо в открытом проекте.

В статье разберём, что такое TMS в контексте Veai, как подключить Allure TestOps и Test IT, и как агент разбирает причину падения автотеста: от инфраструктуры до флаков.

Читать далее

Словари MDict в закрытом приложении, или зачем я писал RIPEMD-128 вручную

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

Добавлял в свою читалку офлайн-словари и упёрся в MDX, формат словарей MDict. Проприетарный, официальной спеки от создателей нет. Готовые Java-парсеры под GPL, а у меня закрытое приложение, тащить нельзя. Значит, пишу свой, с нуля и без зависимостей. Рассказываю, как формат устроен внутри, где я споткнулся, и почему пришлось руками писать RIPEMD-128, чтобы прочитать даже оглавление словаря.

Читать далее

LSP vs весь стек JetBrains IDE: что получает AI-агент без доступа к платформе IDE

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

Привет, Хабр.

Сейчас почти каждый AI-кодинг-агент подключает LSP — Language Server Protocol. Это тот самый протокол, по которому редактор общается с языковым сервером: go-to-definition, find usages, hover с типом, диагностика. На этом обычно и пишут: «агент понимает код семантически».

Но мы в Veai делаем агента для JetBrains IDE, и нас периодически спрашивают: а зачем вообще нужен IDE, если LSP уже всё умеет? Хороший вопрос. LSP и правда решает много задач, но он проектировался для редактора, а не для агента. Подсветить ошибку, показать тип под курсором, найти ссылки — для этого LSP достаточно. А вот поменять Spring-бин в enterprise-проекте и не сломать сборку — тут нужно чуть больше.

Под катом разберём, что именно LSP даёт агенту, где этого перестаёт хватать и что поверх той же модели проекта предлагает JetBrains Platform. Спойлер: сравнивать LSP и PSI один в один бессмысленно — LSP это протокол, PSI это модель. Речь пойдёт о LSP vs весь стек IDE.

Читать далее

Как мы научили ИИ-агента в JetBrains за минуту настраиваться под чужой проект

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

Когда подключаешь ИИ-агента к новому репозиторию, первые полчаса уходят не на код, а на объяснения. Какой стек, какие соглашения в команде, чем отлаживаемся, где лежат тесты, что нельзя трогать. Агент всего этого не знает – он стартует «универсальным» и собирает контекст по кусочкам, твоими руками, в каждом новом чате заново.

В Veai 5.13 мы попробовали закрыть именно эту боль. Главная фича релиза — онбординг агента в проект: при первом запуске агент сам проходит короткий диалог и за минуту настраивает себя под вашу кодовую базу – создаёт правила, подключает навыки и внешние инструменты. Дальше он с первого сообщения говорит на языке вашего проекта.

Разберёмся, как это устроено, в какие файлы всё сохраняется. А ещё пройдёмся по остальным изменениям релиза: генерация тестов в WebStorm и PyCharm, доступ к файлам за пределами проекта и хоткей для переключения между редактором и чатом.

Читать далее

Хватит объяснять агенту проект в каждом чате: что появилось в Veai 5.14

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

Когда работаешь с AI-агентом в большом проекте каждый день, накапливаются две усталости. 

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

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

В Veai 5.14 мы взялись за обе. Появился Memory Bank – агент запоминает факты о проекте между чатами. И профили маршрутизации моделей – субагенты работают на разных моделях под разные задачи. Плюс окно результатов ревью, проектные MCP-серверы и несколько изменений в интерфейсе. Разберём по порядку.

Читать далее

Как энергосбережение на Android мешало Seamless-авторизации

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

Всем привет! Я Никита, тимлид команды Android в Банки.ру. 

Недавно, внедряя в приложение фичу авторизации без SMS-кода (seamless), мы столкнулись с тем, что она в упор отказывалась работать – но только на Android. Мы дебажили ее полторы недели, перепробовали все возможные варианты и закошмарили всех доступных операторов связи, прежде чем узнали, что все дело было… в энергосбережении.

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

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