Pull to refresh
15
0
Иван @IL_Agent

Программист

Send message

Kotlin Coroutines. От А до Я

Level of difficultyEasy
Reading time28 min
Views10K

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

Let's go
Total votes 17: ↑17 and ↓0+21
Comments9

Telegram Desktop и Compose Multiplatform

Level of difficultyMedium
Reading time12 min
Views5.6K

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

Читать далее
Total votes 3: ↑2 and ↓1+3
Comments0

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

Level of difficultyMedium
Reading time29 min
Views45K

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

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

Читать далее
Total votes 37: ↑37 and ↓0+37
Comments15

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

Level of difficultyMedium
Reading time11 min
Views4.6K

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

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

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments2

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

Level of difficultyHard
Reading time3 min
Views6.8K

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

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

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

Читать далее
Total votes 22: ↑17 and ↓5+16
Comments20

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

Level of difficultyEasy
Reading time13 min
Views8.9K

За последнее десятилетие, и в частности, в последние годы, количество компьютерных игр возросло. Благодаря большому количеству новых систем, новых технологий и нового дизайна игры стали огромной частью индустрии развлечений. 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 года.
Читать дальше →
Total votes 37: ↑25 and ↓12+28
Comments41

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

Reading time9 min
Views74K

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

Читать далее
Total votes 49: ↑25 and ↓24+10
Comments170

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

Level of difficultyMedium
Reading time17 min
Views8.2K

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

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

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

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments2

Анонс Dart 3

Level of difficultyEasy
Reading time10 min
Views8.6K

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-компиляции. Давайте углубимся в детали.

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments14

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

Reading time14 min
Views14K

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

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments3

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

Reading time12 min
Views116K

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

Читать далее
Total votes 86: ↑74 and ↓12+88
Comments87

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

Reading time5 min
Views46K

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

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

Читать далее
Total votes 27: ↑22 and ↓5+21
Comments44

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

Reading time11 min
Views24K

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

Читать лонгрид
Total votes 4: ↑4 and ↓0+4
Comments2

Интеграция 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.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments3

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

Level of difficultyMedium
Reading time10 min
Views15K

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

Читать дальше →
Total votes 7: ↑6 and ↓1+6
Comments17

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

Reading time17 min
Views249K
image

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

Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.
Читать далее
Total votes 25: ↑17 and ↓8+15
Comments76

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

Reading time3 min
Views14K
После запуска приложения всегда встает вопрос, откуда брать пользователей. В этой статье хотел бы поделиться своим опытом, как на старте проекта без денежных вложений привлечь пользователей для вашего продукта.
Читать дальше →
Total votes 47: ↑25 and ↓22+3
Comments13

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

Reading time10 min
Views12K

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


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

Total votes 21: ↑20 and ↓1+19
Comments9

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

Reading time6 min
Views4.9K

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


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

Total votes 12: ↑12 and ↓0+12
Comments9
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