
В данной статье обсудим создание REST-сервиса в “реактивном” исполнении. Приведу примеры кода на Kotlin в двух вариантах: Reactor и coroutines
Статически типизированный язык программирования
В данной статье обсудим создание REST-сервиса в “реактивном” исполнении. Приведу примеры кода на Kotlin в двух вариантах: Reactor и coroutines
Сейчас я учусь в 8 классе. Где-то с октября (сейчас апрель) я изучаю разработку мобильных приложения для андроид. И как это бывает у каждого - я столкнулся с проблемой: а какое приложение мне сделать? И мне крайне повезло. Я не стал делать какой-нибудь фейковый магазин, калькулятор, блокнот, туду лист и всякую подобную заезженную тему.
Исторически так сложилось, что macOS сильно отличается от других операционных систем, когда дело доходит до нативной работы с окнами и графикой. И нельзя сказать, что это определенно плохо или хорошо. В этом плане Apple решили пойти своей любимой дорогой: "мы лучше знаем что тебе нужно, поэтому сделали все за тебя". Как же это проявляется?
Сегодня я хочу поговорить про интересные моменты в Kotlin, связанные с вызовами конструкторов классов. Или не совсем конструкторов? Или же совсем не конструкторов? Давайте разбираться.
Это техническая статья для любителей языковых интересностей, не лишённая практического смысла.
Электронная подпись, шифрование данных с помощью RSA, AES. Реализация на Kotlin, Micronaut, bouncycastle.
В 1995 году Sun Microsystems представили Java — объектно-ориентированный язык программирования, основное кредо которого можно сформулировать так: «Написано один раз, работает всегда». В 2011 году как улучшенную альтернативу Java компания JetBrains представила Kotlin — язык с той же философией, но иной реализацией. С тех пор в сообществе программистов между адептами Java и Kotlin ведется непримиримая вражда…
Всем привет! Меня зовут Артем Панасюк, я ведущий backend-разработчик на Java/Kotlin в «Леруа Мерлен». В этом тексте я постараюсь залезть к этим языкам «под капот» и посмотреть, правда ли они такие разные — и в чем преимущества каждого из них.
Всем привет. На своем последнем месте работы я выполнял обязанности Java разработчика в одной из команд сервиса, чье приложение установлено в смартфоне большинства жителей РФ. Использовался стандартный стек технологий: Java, Spring(web, jdbc, core), PostgreSQL, Kafka. Обычное синхронное API по работе с данными, без всякой реактивщины, с нагрузкой более миллиона пользователей в день. Я столкнулся с тем что сервисы по работе с БД были обильно «усыпаны» Spring аннотациями @Transactional
. Даже одиночные запросы на чтение данных использовали аннотацию с параметром readOnly=true. Я пытался писать комментарии к мердж‑реквестам с вопросом: «зачем вы это делаете?». Но получал ответы из разряда: «для перфоманса», «у нас так принято, чтобы случайно не упустить случай когда транзакция будет действительна нужна», «раньше у нас была какая‑то проблема с коннектами (какая именно никто так и не вспомнил сколько я не пытал), мы везде добавили аннотации и все заработало». Если интересно чем в итоге закончилась эта дискуссия, то подробности далее.
Простой вопрос по Kotlin Coroutines для начинающих!
Проверь свои знания в этой небольшой статье.
Если у тебя есть свои интересные вопросы, буду рад увидеть их в комментариях :)
Всем привет! В своей прошлой статье я рассказывал как можно запустить Telegram клиент в качестве backend‑сервиса. В описываемой там библиотеке с тех пор были внесены некоторые оптимизации, и в целом, я остался доволен возможностями, которые получил. После чего возникло желание добавить визуальную часть к имеющемуся бэкенду и заодно изучить что‑то новое для себя. Выбор пал на фреймворк Compose Multiplatform. Давайте сделаем десктопную версию Telegram!
Как подготовить Java-код к виртуальным потокам? Как (и зачем) писать на Kotlin Script? Какими бывают интринсики? Зачем тащить Undertow? Как логгер должен реагировать на исключение? Как укротить БД? Как машины пишут музыку?
Так много вопросов — и все они найдут ответы на конференции JPoint. Там поговорят и о производительности, и о фреймворках, и об архитектуре — в общем, обо всём, полезном Java-разработчику.
Программа конференции готова, и пришло время представить её Хабру.
Поговорим сегодня про context receivers — фиче Kotlin, про которую я узнал давно, но смог найти применение лишь пару месяцев назад. Расскажу о том, что такое context receivers, где их можно использовать, и, конечно же, про «успешный успех» — минус 60% самописного DI в OzonID SDK. Но обо всём по порядку.
Привет, Хабр!
Меня зовут Соловьев Андрей, я Java-разработчик в «Рексофт». Сегодня мы поговорим про Kotlin Coroutines. Это моя первая серьезная публикация, и я буду рад вашему фидбеку.
Ну что ж, давайте начинать!
Я Александр Таношкин, ведущий инженер-программист сервиса Циан.Ипотека. В статье я поделюсь некоторыми экземплярами коллекции «ловушек» интеграционного тестирования — падений тестов, расследование которых может быть увлекательно, но крайне затратно. А также предложу практические рекомендации, как их избежать, чтобы сосредоточиться на главной задаче — обеспечении качества.
В этой статье хочу рассмотреть что такое ExecutorService в Java, зачем он нужен, варианты создания и в как его настраивать для решения практических задач
Понимаю что есть много подобных статей, но в тех статьях что мне удалось найти не хватало практических примеров, сегодня хочу рассказать вам то, что по-настоящему пригодиться в работе
Также я веду блог в телеграм, где вы сможете найти другие материалы от меня
flow
и channelFlow
, в которых часто подчёркивается, что channelFlow
по сути использует Channel
. Но что это на самом деле значит для мобильных разработчиков? Когда это различие действительно имеет значение? Можно ли добиться такого же поведения с помощью flow
без использования Channel
, и какие уникальные возможности предлагает ChannelFlow
, которых нельзя достичь с помощью обычного Flow
?Channel
. Концептуально Channel
и Flow
служат разным целям. Каналы (Channels) облегчают взаимодействие между корутинами, в то время как потоки (Flows) больше направлены на эффективное производство и распределение данных.ChannelFlow
использует Channel
для своих операций, что делает его мощным инструментом в сценариях, включающих сложную обработку данных или требующих одновременного выброса данных из нескольких корутин. Однако что же это такое?Эта статья отражает моё личное мнение и профессиональные взгляды, учитывающие различные точки зрения в сообществе Android-разработчиков. Кроме того, я регулярно просматриваю руководства от Google для Android.
Важно подчеркнуть: некоторые хорошие инструменты, паттерны и архитектуры я не упомянул в статье в явном виде, но это не отменяет их потенциал в качестве ценных альтернатив для разработки Android-приложений.
Всем доброго времени суток. Некоторое время назад мною была написана статья, где я детально описал процесс разработки демо игрового вебсокет сервера. На этот раз, я хотел бы поделиться более усовершенствованным и оптимизированным материалом на Kotlin и реактивном стеке.
Привет, хабр! Меня зовут Алексей, я ведущий разработчик платформенной команды и по совместительству лид архитектурной компетенции в проекте Альфа-Бизнес. Сегодня я расскажу, как можно автоматизировать повторяющуюся работу в андроид-разработке при помощи плагина для Android Studio.
Для программиста основная часть работы — это автоматизация и упрощение процессов. Эта часть может быть направлена на решение потребности клиентов (покупателей и пользователей софта), например упростить перевод денег, дать возможность сделать это с телефоном в руках, а не в отделении банка, или создать функционал, позволяющий пройти обучение дома за компьютером, а не ездить на курсы в другой город.
Также мы привыкли автоматизировать свою собственную работу. Инструменты CI/CD позволяют быстрее доставлять ценность клиентам, чем ручное развертывание, линты помогают уменьшить время, которое мы тратим на прохождение задачи код ревью.
В процессе написания кода тоже встречается много рутинной работы. Это может быть какой-то шаблонный код для написания тестов, например, создание моков и прокидывание в конструктор при создании экземпляра тестируемого класса или добавление нового экрана. Если вы используете подход MVI, что очень актуально для андроид-разработки, вы сталкивались с тем, что для каждого экрана приходится создавать множество отдельно файлов с шаблонным кодом, для редьюсера, экзекутора, стейта, экшены, сами файлы экрана, и это тоже хотелось бы делать «в один клик».
В прошлой статье я рассказал что это за платформа, и показал как можно получить данные с неё и как встроить код в стороннее приложение.
Однако, получение данных требует постоянно висящего приложения (на C#), и надо понять что же конкретно оно делает.
Давайте разберёмся как общаться с железом и избавимся от балласта!.. Переписав на Kotlin. Почему Kotlin? Потому что я на нем никогда еще не писал.
Привет, Хабр! Меня зовут Тимофей, я Android-разработчик в Сравни. Давайте поговорим о кросс-обновлении Android-приложений без привязки к конкретному стору – так, чтобы пользователи могли устанавливать из одного источника, а обновлять – из другого, без необходимости удалять и ставить заново.
Поводы задуматься о подобном сценарии у нас были разные: проработка рисков блокировки приложения в сторах, исследование новых возможностей добавить удобства пользователям, активация дополнительных каналов дистрибуции приложений.
Но первые реальные практические шаги в этом направлении мы сделали в формате
“А что, так можно было?”: пошли выкладывать приложение в RuStore и попутно обнаружили возможности использовать аналогичные механизмы для настройки кросс-обновления.