RU

Конвертация docx на сервере: LibreOffice headless против Apache POI, и где каждый ломается

Задача звучит безобидно: «нам нужно на бэкенде превращать .docx в .html (а иногда .html в .pdf )». В тикете это одна строчка. На практике конвертаци…

конвертация документовApache POILibreOfficedocx в htmlUNO APIheadless LibreOfficeJavaKotlinJODConverterhtml в pdf
Habr
RU

Корутины на бэкенде: семь ошибок, из‑за которых падает не тот запрос и висят не те задачи

На демо корутины выглядят почти безошибочно, но под нагрузкой один неверный выбор области, диспетчера или способа обработки искл…

KotlinкорутиныKotlin Coroutinesструктурная конкурентностьобработка исключенийотмена корутинасинхронное программированиеDispatchersFlowсерверная разработка
Habr
RU

Уведомления на Android без Google: почему UnifiedPush через публичный ntfy у вас не работает

Как вы помните мы делаем мессенджер. Google-сервисы в нашем основном регионе недоступны, значит FCM отпадает, что мы с этим сделали? Стандартный отв…

UnifiedPushntfypush-уведомленияAndroid без GoogleFCMWebPushforeground serviceKotlinself-hostedобход блокировок
Habr
RU

Один фреймворк для Android и iOS: звучит круто, работает?  Нет

Почему единый кроссплатформенный фреймворк для автотестов Android и iOS не работает на практике и когда стоит разделить его на два отдельных проекта…

JavaТестированиеAndroidGitРаспознаваниеiOSРаботаSwiftHRGitLabKotlinФинтехQAПриложениеdevСерверБиблиотекиТестирование приложений и сайтов плюсИнфраструктураСтатьи
Tproger
RU

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

Добавлял в свою читалку офлайн-словари и упёрся в MDX, формат словарей MDict. Проприетарный, официальной спеки от создателей нет. Готовые Java-парсе…

MDXMDictсловарипарсинг форматовKotlinreverse engineeringRIPEMD-128Androidшифрование
Habr
RU

Навигация в Jetpack Compose без магии: что на самом деле делают библиотеки навигации

Вы когда-нибудь задумывались, зачем нужны библиотеки для навигации в Jetpack Compose? Почему мы не можем просто взять  mutableStateOf  со…

Jetpack ComposeAndroidнавигацияModoKotlinrememberSaveableSaveableStateHolderViewModelLifecycleмобильная разработка
Habr
RU

Пять ошибок начинающих Android‑разработчиков при работе с жизненным циклом

Если после релиза Android‑приложения вы внезапно получаете краши, утечки памяти и жалобы на пропадающие данные, проблема может скрываться в&nbs…

AndroidKotlinжизненный цикл ActivityFragmentViewModellifecycleScopeутечки памятиSavedStateHandleкорутиныAndroid-разработка
Habr
RU

Девять лет, 514 коммитов и один посёлок: как я делал приложение с расписанием автобусов

Уже девять лет я делаю приложение с расписанием автобусов для посёлка Иртышский в Омской области. И почти всё это время сам там не&nb…

расписание автобусовAndroidKotlinpet-проектинди-разработкахобби-проектGoogle Playмонетизация приложения9 лет разработки
Habr
RU

Как я сделал личный центр управления VLESS для Android TV, потому что устал руками менять конфиги

Привет, Хабр. Меня зовут Валиев Артур. Пока мы активно работаем над EvertyDesk , я продолжаю писать небольшой цикл статей о том, что рождается вокру…

Android TVVLESSVPNVpnServiceKotlinXrayWordPressPHPsplit tunnelAndroid
Habr
RU

Архитектура Android-приложений. Как повысить качество архитектуры, не говоря об архитектуре

Салют, Хабр! Я Марк, Android-разработчик, работаю над мобильным приложением для управления умным домом Салют. Для мира Android-разработки вопросы ар…

доменная система типовKotlinтипыdesign by contractAndroidархитектура приложений
Habr
RU

Сравнение моделей конкурентности JVM языков: Нужен ли еще ThreadPool после coroutines, ZIO и Virtual Threads?

В последней части про модели конкурентности JVM языков мы сравним разные подходы друг с другом. И ответим на вопрос “А зачем теперь тред пулы, если…

JavaJVMKotlinClojureZIOcoroutinesvirtual threadsthread poolsProject Loomconcurrency
Habr
RU

Почему главные конфликты в разработке не связаны с технологиями

Почему конфликты в IT-командах возникают не из-за технологий, а из-за коммуникации, идентичности и инженерной культуры. Разбор споров вокруг Scala,…

Алгоритмы и структуры данныхФункциональное программированиеОпросБотыScalaHRKotlinТимлидLegoСтатьи
Tproger
RU

[Перевод] Mission Impossible: как добиться 0 рекомпозиций в сложном кастомном UI

Сотня рекомпозиций в секунду при скролле — это приговор. Приговор батарее устройства, плавности анимаций и вашей репутации как инженера. Мы привыкли…

Jetpack ComposeAndroidRecompositionPerformanceLazyLayoutCustom UIKotlinОптимизацияРендеринг
Habr