Pull to refresh
15
0
Иван @IL_Agent

Программист

Send message

Kotlin Coroutines. От А до Я

Level of difficultyEasy
Reading time28 min
Views42K

Полный разбор корутинного мира с нуля, который может послужить отличной шпаргалкой на собеседовании!
Разберем разницу между многопоточностью и асинхронностью; раскроем все основные понятия корутин, параллельно ссылаясь на исходники kotlinx.coroutines; посмотрим их применение на практике и в конце напишем свой собственный CoroutineScope.

Let's go

Telegram Desktop и Compose Multiplatform

Level of difficultyMedium
Reading time12 min
Views6.6K

Всем привет! В своей прошлой статье я рассказывал как можно запустить Telegram клиент в качестве backend‑сервиса. В описываемой там библиотеке с тех пор были внесены некоторые оптимизации, и в целом, я остался доволен возможностями, которые получил. После чего возникло желание добавить визуальную часть к имеющемуся бэкенду и заодно изучить что‑то новое для себя. Выбор пал на фреймворк Compose Multiplatform. Давайте сделаем десктопную версию Telegram!

Читать далее

Осознанная оптимизация Compose

Level of difficultyMedium
Reading time29 min
Views63K

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

Наша команда Ozon Seller также столкнулась с этой проблемой. Мы решили собрать воедино все советы и наработки по написанию оптимизированного Compose-кода. Активное применение этих советов при оптимизации существующих экранов и написании новых существенно улучшило наши метрики: длительность лага по отношению к длительности скролла (hitch rate; чем меньше, тем лучше) экранов со списками упала в среднем с 15-19 % до 5-7 % (на 90-м перцентиле). Все эти советы и наработки мы описали в этой статье. Она будет полезна и начинающим, и опытным разработчикам, в ней подробно описаны оптимизации и механизмы Compose, а также рассказано про слабо задокументированных особенности и исправления ошибок, которые есть в других статьях. Давайте же начнём.

Читать далее

Заводим Яндекс Карты в Compose Multiplatform

Level of difficultyMedium
Reading time11 min
Views5.9K

Привет! Это мой первый пост на Хабре, буду рад услышать профессиональное и не очень мнение по поводу этой статьи.

Реализуем Яндекс Карты в KMP проекте с использованием Compose Multiplatform. Нестандартное решение с интерфейсом на Swift и передачей кода через DI.

Читать далее

Project Loom. Не только виртуальные потоки

Level of difficultyHard
Reading time3 min
Views7.8K

Начиная с Java 19 нам доступны виртуальные потоки, которые отличаются от обычных, тем что умеют освобождать поток операционной системы во время блокирующих I/O операций. Для этого на уровне JVM был реализован механизм сохранения в хипе и восстановления из хипа стека вызова. Проще говоря, были реализованы полноценные корутины на уровне JVM.

И это небольшая революция, на которую мало кто обратил внимание. Само API для таких нативных корутин непубличное, доступно через класс jdk.internal.vm.Continuation, в котором есть методы yield() и run() для сохранения и восстановления стека вызова соответственно. Но получить доступ до него несложно, нужно лишь добавить пару аргументов в строку запуска JVM (либо воспользоваться инструментом, который позволяет обходить ограничения JPMS).

Поэтому представляю свою небольшую библиотеку для доступа к нативным корутинам на Java: https://github.com/Anamorphosee/loomoroutines.

Читать далее

2023 год возможно был лучшим годом в истории видеоигр. Игровые итоги года

Level of difficultyEasy
Reading time13 min
Views11K

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

Лавина игр, отложенных в 2021 и 2022 годах, обрушился в 2023 году, что стало лучшим годом для новых игр с момента запуска поколений PS5 и Xbox Series. Каждый из трёх производителей консолей выпустил как минимум по одному блокбастеру в этом году, в то время как сторонние студии также представили лучшие игры своих франшиз, в которую вошли Hogwarts Legacy, Resident Evil 4, Spider-Man 2, Alan Wake 2, Dead Space и Baldur's Gate 3, а также десятки других.

Это также был бурный год для людей, которые делают игры. Члены профсоюза SAG-AFTRA санкционировали забастовку, одну из крупнейших в отрасли. Microsoft закрыла сделку по покупке Activision Blizzard King за 69 миллиардов долларов — супер дорогое игровое приобретение в истории. К концу года более 6000 разработчиков игр потеряли работу из-за волны увольнений.

В этой статье мы хотели бы подвести итоги года по самым лучшим играм 2023 года.
Читать дальше →

Где россиянину легче получить гражданство в 2023 году

Reading time9 min
Views85K

Политическая и экономическая ситуация вынуждает многих россиян задуматься о втором гражданстве. Среди самых популярных причин 2023 года — упрощенное получение рабочих виз, разморозка иностранных активов, возможность упростить ведение бизнес‑деятельности за рубежом. Но к таким вопросам нужно подходить серьезно. Выбор страны гражданства — дело ответственное, поскольку второе гражданство — это не только право, но и обязанности, в том числе, необходимость платить налоги или проходить воинскую службу. Поэтому перед тем, как выбирать страну интересов, необходимо изучить, какие плюсы и минусы будут у каждого варианта.

Читать далее

Магия Spring Framework своими руками

Level of difficultyMedium
Reading time17 min
Views9.6K

Spring Framework позволяет сфокусироваться на бизнес-логике, а вся настройка инфраструктуры выполняется автоматически благодаря постобработке бинов. Зачастую для реализации дополнительной функциональности применяется Spring AOP - аспектно-ориентированное программирование.

Spring AOP бин, который накручивает дополнительную функциональность другим Spring бинам, помечается аннотацией @Aspect, но как потом этот бин используется для добавления дополнительной функциональности в поток исполнения?

В статье будет рассмотрен механизм проксирования объектов и его применение в Spring Framework.

Читать далее

Анонс Dart 3

Level of difficultyEasy
Reading time10 min
Views9.2K

100% sound null safety. Records, patterns, and class modifiers. And a peek into the future.

Привет с Google I/O 2023. Сегодня в прямом эфире из Mountain View мы анонсируем Dart 3 — крупнейший релиз Dart на сегодняшний день! Dart 3 содержит три мажорных улучшения. Во-первых, мы завершили путь к 100-процентной null-безопасности. Во-вторых, мы добавили новые языковые возможности: записи (records), паттерны (patterns) и модификаторы классов (class modifiers). В-третьих, мы даем предварительный прогноз на будущее, в котором расширим поддержку наших платформ, добавив нативный код для web с помощью Wasm-компиляции. Давайте углубимся в детали.

Читать далее

Оптимизируй или сдохни: профилирование и оптимизация Jetpack Compose

Reading time14 min
Views16K

В Google Play сыпятся жалобы на зависания и заторможенность вашего новенького-свеженького приложения на Compose? Вам пригодятся советы из данной статьи, чтобы это исправить.

Читать далее

Все способы легального вывода денег из России: детальный разбор со ссылками

Reading time12 min
Views118K

Многие сейчас временно или навсегда релоцируются из РФ. При этом задача вывоза накопленных внутри страны денег часто оказывается непростой. В этом гайде я систематизировал все работающие на текущий момент способы, которыми поделились участники нашего сообщества RationalAnswer.

Читать далее

Trunk Based Development — кто такой и зачем нужен

Reading time5 min
Views69K

Привет! Меня зовут Павел Лакосников, я тимлид команды бэкенд-инженеров в Авито. Сегодня расскажу про свой любимый подход к разработке Trunk Base Development, сравню его с другими моделями ветвления и подсвечу его достоинства и нюансы.

Краткий обзор трёх моделей ветвления: Central Workflow, Git Flow, Trunk Based Flow, с акцентом на моего фаворита — Trunk Based Flow.

Читать далее

Deep Dive Into Deep Link. Часть 1. Введение и исходная задача

Reading time11 min
Views30K

Давно хотели разобраться, как работают Deep Link-и? Мы стартуем новый цикл статей, который посвящен работе Deep Link в Android. В первой части мы зафиксируем основные понятия: ​​Deep Link, Web Link, App Link. Разберем особенности каждого вида Deep Link-ов и разницу между ними.

Читать лонгрид

Интеграция Google Pay

Reading time8 min
Views27K
Привет, Хабр!

Меня зовут Игорь, я Android-разработчик в команде Trinity Digital. Сегодня я хочу рассказать о классном инструменте — Google Pay API.

изображение с сайта https://developers.google.com/payments/

Итак, если в вашем приложении можно совершать покупки, и при этом вы используете не In-app Billing (за процессинг отвечает не Google Play), то скорее всего среди вариантов оплаты у вас есть и “Оплата картой”. А это значит, что вам каждый раз приходится отправлять пользователя вводить данные карты или на красиво сверстанные экраны с картой, или на веб-сайт вашего провайдера платежных сервисов (далее — payment processor). Уже посчитали сколько действий придется совершить пользователю, чтобы оплатить заветный заказ? Ага, а теперь представьте, что он сможет выполнить то же целевое действие всего в два тапа. Мы тоже представили и подумали, а почему бы не дать пользователям такую возможность? Основные условия успеха — продавец быть зарегистрирован в Google и payment processor должен сотрудничать с Google.
Читать дальше →

Jetpack Compose Navigation в многомодульном проекте

Level of difficultyMedium
Reading time10 min
Views18K

Всем привет! Я на Мосбирже занимаюсь мобильной разработкой под Android. Осенью этого года мы начали разрабатывать приложение для платформы личных финансов Финуслуги и воспользовались возможностью делать UI сразу на Jetpack Compose. Как и всегда, сразу встал вопрос выбора архитектуры многомодульности и механизма навигации. Решение должно быть, с одной стороны, достаточно лаконичным и понятным для новых разработчиков. С другой стороны, оно должно быть масштабируемым, чтобы рост числа и размера модулей не создавал неприятностей, таких как раздражающее времени сборки или частые merge-конфликты.

Читать дальше →

Вопросы к собеседованию Java-backend, Java core (60 вопросов)

Reading time17 min
Views262K
image

Добрый день! Представляю вашему вниманию список вопросов к собеседованию Java Backend, которые я оформлял на протяжении около 2х лет.

Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.
Читать далее

Стартап без денег. Личный опыт

Reading time3 min
Views14K
После запуска приложения всегда встает вопрос, откуда брать пользователей. В этой статье хотел бы поделиться своим опытом, как на старте проекта без денежных вложений привлечь пользователей для вашего продукта.
Читать дальше →

Кодогенерация при помощи Roslyn

Reading time10 min
Views13K

Время от времени, когда я читал о Roslyn и его анализаторах, у меня постоянно возникала мысль: "А ведь этой штукой можно сделать nuget, который будет ходить по коду и делать кодогенерацию". Быстрый поиск не показал ничего интересного, по этому было принято решение копать. Как же я был приятно удивлен, когда обнаружил что моя затея не только реализуемая, но все это будет работать почти без костылей.


И так кому интересно посмотреть на то как можно сделать "маленькую рефлексию" и запаковать ее в nuget прошу под кат.

Реализуем AutoMapper при помощи Roslyn и кодогенерации

Reading time6 min
Views5K

В прошлой статье я описал способ организации кодогенераци при помощи Roslyn. Тогдашней задачей было продемонстрировать общий подход. Сейчас я хочу реализовать то, что будет иметь реальное применение.


И так, кому интересно посмотреть на то как можно сделать библиотеку наподобие AutoMapper прошу под кат.

1

Information

Rating
Does not participate
Registered
Activity

Specialization

Mobile Application Developer, Software Architect
Senior
Kotlin
Dagger 2
Android development
RxJava 2
MVVM
Development of mobile applications
Android Studio
Coroutines
Flow
Android SDK