Как стать автором
Обновить
53
40.1
Данил Перевалов @princeparadoxes

Android developer

Отправить сообщение

Многомодульное iOS-приложение: подходы к организации межмодульного взаимодействия

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

Привет, Хабр. Меня зовут Кирилл Смирнов. Я технический лидер iOS команды в СберЗдоровье. Последний год наша команда активно занимается улучшением инструментов разработки, в том числе модуляризацией, и уже успела получить опыт, который может быть полезен другим. В предыдущем материале я рассказывал, как компании подготовиться к модуляризации iOS приложений, а в этом остановлюсь на вопросах оптимизации сборки проекта и выборе вариантов линковки артефактов компиляции.

Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии7

Как создать анимированные шейдеры в Jetpack Compose

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.8K
Jetpack Compose — молодой, но бурно развивающийся фреймворк для разработки под Android, который обладает множеством не всегда очевидных фичей. Сегодня я хотел бы описать одну из таких встроенных возможностей: речь идет об использовании OpenGL-шейдеров. Они позволяют делать красивые анимированные интерфейсы, как на картинке ниже.
image
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии12

From Zero to Hero: определите ваш уровень решения LeetCode задач от 1 до 5

Время на прочтение8 мин
Количество просмотров57K

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

А какой у вас уровень?

Читать далее
Всего голосов 26: ↑21 и ↓5+16
Комментарии25

Как разговорить айтишника: превращаем инженера в спикера

Время на прочтение4 мин
Количество просмотров4.3K

Доброго времени суток, друзья. Меня зовут Константин Архипов, руководитель проектов в команде DocFlow МТС Digital, преподаватель IT-центра МАИ, амбассадор конкурса «Цифровой прорыв» АНО «Россия – страна возможностей». В этой статье я расскажу о том, как научить специалистов доходчиво рассказывать о своих навыках и сделать из неразговорчивого инженера общительного спикера.

Интересно? Тогда добро пожаловать под кат!

Читать далее
Всего голосов 29: ↑24 и ↓5+19
Комментарии6

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

Время на прочтение11 мин
Количество просмотров20K

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

Читать лонгрид
Всего голосов 4: ↑4 и ↓0+4
Комментарии2

Глубокое погружение в Java Memory Model

Время на прочтение53 мин
Количество просмотров128K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Всего голосов 109: ↑109 и ↓0+109
Комментарии60

Блеск и нищета IT в Германии

Время на прочтение7 мин
Количество просмотров178K

Уже четыре года я работаю Java разработчиком в небольшой немецкой компании.

В начале прошлого года я увидел на столе одного из моих «кураторов» забытый листок с расчётом заработной платы за месяц. Конечно же, я не мог в него не посмотреть. Сумма, которую я увидел у Нильса, меня удивила. Зарплата брутто: 3300€ в месяц. Живет один, жены нет, детей нет. Значит на руки у него выходит примерно 2130€ (~130000 рублей по курсу на 01.09.2022).

Можете себе представить? Мой куратор, урожденный немец, Senior Developer, прекрасно говорящий на английском, с опытом работы разработчиком более пятнадцати лет получает в Германии 3300€ в месяц. А я – Middle Java разработчик с немецким B2 и английским B1 на испытательный срок получил сразу 3500€! Сейчас моя мой зарплата 4000€ в месяц.

Многие мне не поверили. Некоторые не верят даже в мои 4000€ (слишком мало), не говоря уже про зарплату Нильса. Откуда такая мизерная зарплата для столь высококвалифицированного работника? Ведь в представлении большинства наших соотечественников все разработчики в Германии деньги просто лопатой гребут. Особенно, если они работают в финансовой сфере. Цифры должны по-любому начинаться от 6000€ в месяц. Какие 3300???

Вот и levels.fyi (на КДПВ) говорит, что медианная зарплата разработчика в Германии 83160€ в год (6930€ в месяц)

Выходит, что Зарплата Нильса ниже нижнего предела (такого столбца даже нет на этом графике). Так какая же в реальности зарплата у разработчиков в Германии?

И почему Нильс получает так мало?
Всего голосов 250: ↑242 и ↓8+234
Комментарии511

Патчим байт-код для просмотра логов в Android. Подробная инструкция и примеры кода

Время на прочтение8 мин
Количество просмотров3K

Привет, Хабр! Меня зовут Саша Лепехин, я разрабатываю мобильное приложение СберИнвестор под Android. Во время разработки и тестирования мобильного приложения мне часто нужно  просматривать логи внутри приложения, причем без подключения по adb.

В принципе, есть множество приложений, которые позволяют просматривать содержимое logcat на устройств. Но с ними часто возникают самые разные проблемы:  такие приложения нуждаются в специальных разрешениях или наличии root доступа, запускают отдельные процессы или сервисы. Или же они могут просто не работать на некоторых устройствах (например, там, где выключен logd). В этой небольшой статье предложено решение большинства подобных проблем. Оно основано на трансформации байт-кода приложения. Поехали!

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии3

Как заряжать макбук

Время на прочтение2 мин
Количество просмотров78K


Автор не сошел с ума и не собирается учить пользователей хабра тривиальным вещам, но оказывается, есть нюансы при таком обыденном действии, как зарядка вашего Mac Book Pro.

TL;DR Для лучшей энергоэффективности зарядку в Mac Book Pro необходимо втыкать справа, а монитор слева.
Читать дальше →
Всего голосов 83: ↑71 и ↓12+59
Комментарии118

Многомодульность в Android с точки зрения архитектуры. От А до Я

Время на прочтение20 мин
Количество просмотров62K
Всем привет!

Не так давно мы с вами осознали, что мобильное приложение — это не просто тонкий клиент, а это действительно большое количество самой разной логики, которое нуждается в упорядочивании. Именно поэтому мы прониклись идеями Clean architecture, прочувствовали, что такое DI, научились использовать Dagger 2, и теперь с закрытыми глазами способны разбить любую фичу на слои.

Но мир не стоит на месте, и с решением старых проблем приходят новые. И имя этой новой проблемы — мономодульность. Обычно об этой проблеме узнаешь, когда время сборки улетает в космос. Именно так и начинаются многие доклады про переход на многомодульность (раз, два).
Но почему-то все при этом как-то забывают, что мономодульность сильно бьет не только по времени сборки, но и по вашей архитектуре. Вот ответьте на вопросы. На сколько у вас AppComponent большой? Не встречаете ли вы периодически в коде, что фича А зачем-то дергает репозиторий фичи Б, хотя вроде такого быть не должно, ну или оно должно быть как-то более верхнеуровнево? Вообще у фичи есть какой-то контракт? А как вы организовываете общение между фичами? Есть какие-то правила?
Вы чувствуете, что мы решили проблему со слоями, то есть вертикально все вроде хорошо, но вот горизонтально что-то идет не так? И просто разбиением на пакеты и контролем на ревью не решить проблему.

И контрольный вопрос для более опытных. Когда вы переезжали на многомодульность, не приходилось ли вам перелопачивать половину приложения, вечно перетаскивать код с одного модуля в другой и жить с несобирающимся проектом приличный отрезок времени?

В своей статье я хочу вам рассказать, как дошел до многомодульности именно с архитектурной точки зрения. Какие проблемы меня беспокоили, и как я их старался поэтапно решать. А в конце вас ждет алгоритм перехода с мономодульности на многомодульность без слез и боли.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии18

Еще раз про многомодульность Android-приложений

Время на прочтение11 мин
Количество просмотров34K

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


Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии23

Ленивая склейка модулей Android-приложения

Время на прочтение9 мин
Количество просмотров11K

Тема многомодульности уже давно витает в среде Android-разработчков. За много лет проб и ошибок, выработались определённые подходы к разбиению приложения на модули. В целом о принципах разбиения на модули есть хорошая статья Андрея Берюхова: https://habr.com/ru/company/kaspersky/blog/520766/

В статье Андрея хорошо описано как разбивать приложение на модули, что должны делать модули и как они должны друг от друга зависеть. Собственно, такой же подход к разбиению предполагается и в текущей статье. Для лучшего понимания как начать писать модули или начать делить приложение на модули  - ознакомьтесь со статьёй Андрея. Отличие текущей статьи от статьи Андрея - подход к склейке модулей. 

Читать далее
Всего голосов 13: ↑13 и ↓0+13
Комментарии24

Активная конкуренция за RAM в Android

Время на прочтение4 мин
Количество просмотров6.7K

Разработав инструмент для визуализации RAM и zRAM в Android, я обнаружила, что в телефонах происходит активная конкуренция за ресурсы. И если процессу понадобятся ресурсы, которые уже заняты кем-то другим, он отберет их, что может привести к критическим ситуациям и конфликтам оборудования.

Пользовались ли вы когда-нибудь такими утилитами как htop, top, vmstat? Если у вас вообще установлен Linux, то скорее всего да. И они действительно хорошо показывают статистику использования ресурсов в ОС. Я исследовала операционные системы, и мне не хватало понимания того, как реально выглядит физическое адресное пространство: какие конкретно адреса заняты, какие свободны, что происходит, если процессы запрашивают одни и те же адреса, как часто это происходит.

Была гипотеза, что в Android (и в Linux), возникает активная конкуренция за ресурсы. Спойлер из названия статьи: она подтвердилась.

Читать далее
Всего голосов 20: ↑14 и ↓6+8
Комментарии10

Взлом и внедрение своего кода в чужое iOS-приложение

Время на прочтение15 мин
Количество просмотров15K


В жизни хакеры не так всесильны и эффектны, как в голливудских фильмах. Но это не значит, что iOS-разработчик может вообще не думать о безопасности своего приложения. Пусть оно и не хранит тайны Пентагона, взломать его всё равно могут хотя бы для того, чтобы получить платные функции бесплатно.


На нашей конференции Mobius разработчик Мурад Татаев рассказывал о взломе iOS-приложений — и о том, что разработчики могут делать для защиты от него. А теперь мы расшифровали этот доклад (видеозапись также прилагаем). Далее повествование идёт от лица спикера.

Всего голосов 27: ↑27 и ↓0+27
Комментарии16

Vulkan. Руководство разработчика. Рендеринг и отображение на экране

Время на прочтение14 мин
Количество просмотров6K


Добрый день. Я занимаюсь переводом уроков к Vulkan API с английского языка на русский (ссылка на оригинальный тьюториал — vulkan-tutorial.com).

Сегодня я бы хотела поделиться с вами переводом заключительной главы в разделе Drawing — «Rendering and presentation».

Содержание
Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Оптимизируем отображение 10 000 объектов на карте

Время на прочтение13 мин
Количество просмотров12K

В приложении ЦИАН размещены десятки тысяч объявлений о недвижимости. Нашим пользователям важно видеть географическое расположение этих объявлений на карте. Самым популярным способом отображения оказался вариант, когда каждое объявление показано отдельной точкой. Внутри команды такой вариант мы назвали «Горошек на карте».

Проблема в том, что объявлений очень много: в одной только Москве более 10 000. Из-за этого наша карта работала не очень стабильно: при зуме и движении были тормоза, дёргалась и лагала картинка. С этим нужно было что-то делать. Чтобы разобраться в причинах проблем и найти решения, мы засучили рукава и начали копаться в используемых механизмах. Под катом подробно опишем весь путь оптимизации карт в Android-приложении: от постановки задачи до результата.

Читать далее
Всего голосов 30: ↑30 и ↓0+30
Комментарии18

«Галоп пикселя — часть первая» — базовые понятия, этапы взросления, прикладные упражнения

Время на прочтение42 мин
Количество просмотров265K


«Галоп пикселя», часть I — базовые понятия, этапы взросления, прикладные упражнения (линк)
«Галоп пикселя», часть II — перспектива, цвет, анатомия и прикладные упражнения (линк)
«Галоп пикселя», часть III — Анимация (линк)
«Галоп пикселя», часть IV — Анимация света и тени (линк)
«Галоп пикселя», часть V — Анимация персонажей. Ходьба (линк)
«Галоп пикселя», часть VI — Анимация персонажей. Бег (линк)

Всем хорошо известно, как мейнстрим подстегивает появление публикаций, связанных с тем, что популярно «на этой неделе». Последние полгода я часто натыкался на статьи «знакомство с пиксель-артом». Начинались они, как правило, с перечисления возможностей определенного софта. Однако за вычетом вопроса выбора программы и беглого перечисления известных фактов ни на йоту не приближали читателя к пониманию того, как этот пиксель-арт готовить. Именно этим досадным упущением мне хотелось бы заняться на первых же страницах 2015-года.

В данной публикации мы не рассматриваем программы, но копаем нечто большее. Сами пиксели. От истоков, начав с четырехцветной CGA-эры, вплоть до эпохи ренессанса. В публикации мы не рассматриваем игры, не поем дифирамбы художникам прошлого (разве что самую малость), занимаясь именно процессом создания простейшего пиксель-арта. Данный материал будет интересен начинающим артистам и интересующимся. Статья практически не содержит теории, нудных умозаключений и представляет сторонний взгляд на мир пиксель-арта со стороны некоего самоучки, который предпочел открыть каждую из Америк самостоятельно, не оглядываясь на официальных, общепризнанных и задокументированных Колумбов. Статья снабжена обильным количеством поясняющих иллюстраций, примеров, и советов.

Материал разделен на несколько публикаций в виду объема текста и изображений. Каждая статья имеет свою степень сложности, однако, все из них наглядны и могут быть использованы как руководство к действию.


Лопатить пиксели
Всего голосов 190: ↑185 и ↓5+180
Комментарии86

Как работает 3D эмулятор 8-битных NES игр?

Время на прочтение3 мин
Количество просмотров22K


Еще в марте один из обозревателей ресурса Kotaku обнаружил браузерную бета-версию эмулятора NES. Этот эмулятор умеет превращать «плоские» 8-битные игры в трехмерные. Как сообщалось, написан этот эмулятор на JavaScript. Работает он в браузере Firefox. Программа умеет добавлять тени и горизонтальные поверхности к вертикальным. «Трехмерный» эмулятор работает с образами игр (ROM) — так же, как и обычные эмуляторы.

Сейчас вышла финальная версия программы в виде приложения под Windows. Разработчики выложили бесплатную и платную ($4.99) версию приложения. Вероятно, создатели софта рассчитывают на любителей классических NES игр, готовых расстаться с 30 долларами в обмен на новые ощущения при игре в хорошо знакомые Duck Tales, Super Mario Bros. или Mega Man. На днях создатели эмулятора прояснили принцип его работы и показали, как можно провести настройку ряда игровых элементов, если алгоритм эмулятора не справляется с какой-либо игрой самостоятельно.
Читать дальше →
Всего голосов 28: ↑21 и ↓7+14
Комментарии33

Как Android запускает MainActivity

Время на прочтение6 мин
Количество просмотров30K
Недавно я провел исследование о main() методе в Java и то, как он служит точкой входа для любого приложения Java. Это заставило меня задуматься, а как насчет Android-приложений? Есть ли у них основной метод? Как они загружаются? Что происходит за кулисами до выполнения onCreate()? Майкл Бэйли очень подробно рассказал о том, как работает Main Thread, так что это быстрый обзор его доклада плюс дополнительная информация из Android Open Source Project (AOSP).

В этой статье мы рассмотрим:

  1. Что происходит от нажатия на иконку приложения до запуска MainActivity
  2. Найдем основной метод приложения и узнаем, как основной поток (он же UI, он же Main Thread) получает свое назначение.
  3. Рассмотрим роль, которую играют Looper & Handler в передаче сообщений, которые в конечном итоге приводят к созданию вашей Activity.

Что происходит при запуске приложения


При запуске любого приложения, многое происходит глубоко внутри на уровне ядра, например начальная загрузка Zygote, загрузка классов в JVM, а для JVM — найти основной метод static void main(String args []) и вызывать его. В случае Android JVM находит основной метод main() в ActivityThread. Затем он вызывает main(), после чего ядро передает управление вашему приложению. Итак, мы нашли точку входа — ActivityThread, но прежде чем подробно изучить это, давайте посмотрим на дорожную карту процесса, чтобы визуализировать всю операцию.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

Проблемные личности среди тестировщиков

Время на прочтение12 мин
Количество просмотров42K


Отдел обеспечения качества (QA) занимается поиском багов в ПО. Методы отличаются в разных компаниях, но обычно этим занимаются сотрудники, знакомые с программным обеспечением. Они используют его различными способами и пытаются найти баги, которые упустили разработчики.

Термин QA может относиться к самому процессу, к организации, а также к отдельному тестировщику в рамках этой организации. Обычно тестировщиков в организации по обеспечению качества называют “QA”. В этой статье для единообразия будем использовать общую аббревиатуру QA вместо более точного «тестировщик отдела обеспечения качества».

В разных компаниях отличается степень ответственности QA за общее качество продукта. Иногда термин «обеспечение качества» не совсем применим к этому отделу, если он только ищет баги и подсчитывает их количество.
Читать дальше →
Всего голосов 40: ↑27 и ↓13+14
Комментарии29
1

Информация

В рейтинге
137-й
Откуда
Омск, Омская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность