Pull to refresh
1
0
MetAmfetamin @MetAmfetamin

User

Send message

Яндекс выпускает Yatagan — опенсорс-фреймворк для внедрения зависимостей, позволяющий ускорить сборку

Reading time29 min
Views23K


Меня зовут Фёдор Игнаткевич, я делаю приложение Яндекс и мобильный Яндекс Браузер для Android. Примерно год назад я предложил команде идею фреймворка для внедрения зависимостей, который более чем вдвое ускорил сборку обоих проектов и который мы сегодня выложили на Гитхаб — чтобы разработчики других приложений тоже могли улучшить скорость сборки. Я с нуля реализовал фреймворк, а затем мы вместе с командой интегрировали его в проекты и сейчас активно используем.

Как раз про свой опыт разработки я и хочу рассказать. Давайте попробуем разобраться, какие есть факторы замедления сборки, как Yatagan, совместимый с Dagger по API, с ними справляется и какие ещё задачи могут стоять перед DI-фреймворком — например, в части зависимостей под рантайм-условиями. Кстати, нативная поддержка этих зависимостей в Yatagan избавила нас от ручной обработки состояний A/B-экспериментов в DI.

Статья содержит много технических моментов, которые я открыл для себя по ходу исследований. В конце посмотрим, каким проектам Yatagan может быть полезен в качестве замены, а в каких польза от него будет невелика.
Читать дальше →
Total votes 57: ↑53 and ↓4+62
Comments13

Как мы ускоряли сборку Android-приложения из двух миллионов строк кода

Reading time18 min
Views16K

Всем привет! Наверняка каждый Android-разработчик хоть раз сталкивался с проблемой скорости сборки своего проекта. После нехороших слов в адрес кодогенерации, покупок более мощного железа, многочисленных попыток распилить проект на небольшие параллельно собираемые модули и прохождений всех стадий торга мы продолжаем искать решение этой проблемы. К счастью, за годы развития и в Gradle, и Android Gradle Plugin (AGP) появилось много полезных штук для ускорения сборки, о которых я расскажу дальше.


Несмотря на шутку в адрес многомодульности, это действительно полезный подход, но для большого проекта с богатой историей модуляризация может быть очень сложным процессом. Поэтому пока давайте посмотрим, что можно сделать без больших болей на уровне Gradle и AGP.


Я расскажу на примере мобильного Яндекс Браузера. У нас было ~150 Gradle-модулей, ~2 млн LoC на Java/Kotlin, десяток Gradle-плагинов, тысячи строк кода в buildSrc и лёгкая дрожь от вопроса, сколько ещё может переварить билд-система. Не скажу, что это всё было категорически необходимо, но к написанным строчкам кода надо проявлять уважение.

Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments19

Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Reading time7 min
Views701K
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Читать дальше →
Total votes 212: ↑212 and ↓0+212
Comments352

Как мы используем фича-флаги в мобильном приложении QIWI Кошелек

Reading time11 min
Views5.5K

Привет, Хабр! 

Меня зовут Василий Материкин, я — Android-разработчик в QIWI. В этом посте я расскажу о применении фича-флагов в QIWI Кошельке.

Внедрение Trunk-Based Development и Feature Flags

В процессе работы над большими приложениями, в которых много фич и над которыми трудится большая команда разработчиков, часто приходится сталкиваться с такой проблемой как конфигурация приложения помощью фича-флагов. Мы в QIWI столкнулись с этим два года назад, когда в QIWI Кошельке было создано несколько feature-команд. Выяснилось, что разрабатывать новые фичи с помощью стандартных feature-веток не так удобно, потому что когда над одним проектом работает несколько feature-команд, ветки становятся достаточно объёмными. Потом смержить их в мастер становится довольно непростой задачей, появляются постоянные конфликты. 

Поэтому мы решили перейти на Trunk-Based Development (TBD). TBD предлагает работать в небольших ветках и, желательно, чтобы они как можно быстрее были влиты основную ветку. Для этого, конечно же, реализацию нового функционала нужно оформлять небольшими пулл-реквестами, чтобы они быстро проходили ревью и были влиты в основную ветку. Это, в свою очередь, создает другую проблему — когда в главной ветке может появиться код, который ещё не готов к релизу, но при этом нам нужно как-то релизить с этим кодом приложение. Мы же релизы выпускаем достаточно часто. И для этого TBD предлагает пользоваться такими подходами, как Branch by Abstraction (BBA) и Feature Flags (FF).

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

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

Сравниваем готовые решения для реализации MVI-архитектуры на Android

Reading time8 min
Views17K


Когда прежние инструменты не соответствуют растущей сложности программ, появляются новые подходы в программировании, паттерны проектирования. MVI помогает там, где не справляются MVP- и MVVM-подходы. Сейчас, в том числе, этот подход активно используется и на многих крупных приложениях. В одних случаях MVI задействован только на части экранов, в других – все экраны построены на нем. В нашей команде знание MVI – одно из обязательных требований.

В этой статье мы разберем решения для реализации MVI-архитектуры на Android, большинство из которых применимы в работе. Описали их преимущества и недостатки, основываясь на опыте коллег и собственной практике. Материал будет полезен для разработчиков, ещё не знакомых с паттерном MVI, и для тех, кто выбирает библиотеку для своего проекта.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments2

Подборка материалов по мобильной безопасности «Awesome Mobile Security»

Reading time18 min
Views8.6K

Привет, Хабр!

Меня зовут Юрий Шабалин, я один из основателей компании "Стингрей Технолоджиз" (входит в группу компаний Swordfish Security), мы разрабатываем платформу анализа защищенности мобильных приложений iOS и Android.

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

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

Код выгорания: как пофиксить баги в своей собственной жизни

Reading time15 min
Views28K


Все мечтают ворваться в IT ради красивой жизни, высоких зарплат и «императорских» условий работы. Но так ли сладко живётся инженеру, как это малюют? Несмотря на все блага, доступные среднестатистическому разработчику, исследования фиксируют средний уровень благополучия, самочувствия и удовлетворённости жизнью. Оказывается, стакан полон только наполовину. IT-специалисты страдают от переработок, выгорания и не умеют справляться со стрессом. Это пост о заботливом отношении к себе. Здесь мы собрали конкретные практики, как наладить work-life balance, о котором так много говорят, повысить стрессоустойчивость, справиться с выгоранием и улучшить качество жизни, если ты в IT.

Приятного чтения!
Total votes 25: ↑22 and ↓3+23
Comments6

Синдром сухого глаза как частный случай дистрофических процессов (ВМД) и его друг — компьютер

Reading time4 min
Views51K
Количество диагнозов синдрома сухого глаза по миру растёт вместе с развитием технологий. Основные факторы: ухудшение атмосферного воздуха, в частности, близ промзон, кондиционированный воздух, побочные эффекты многих лекарственных средств, излучение светодиодов (особенно сверхъярких по синей части спектра, в т. ч. AMOLED-экранов и подобных).

Признаки заболевания: зуд, покраснение, усталость, сухость в области глаз и век. Причина— нарушение слёзопродукции.

Если выявить синдром на ранней стадии, когда обычная поликлиника ещё не ставит его как диагноз, можно избежать целого моря проблем. Давайте начнём с короткой таблицы, позволяющей понять, касается это вас или стоит пройти мимо.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments37

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

Reading time12 min
Views21K
image

Если вы PC-геймер, то, вероятно, постоянно обновляете драйверы GPU устройств AMD или NVIDIA. Обновление графических драйверов может повысить производительность и совместимость с новыми играми, поэтому нет никаких причин их не обновлять. Кроме того, обновление графических драйверов в Windows выполняется очень легко, или вручную через «Диспетчер устройств», или автоматически при помощи программы, предоставленной производителем GPU.

В Android нет простых способов обновления графических драйверов планшета или телефона. Если у вас отсутствует root-доступ, то самостоятельное обновление графических драйверов на большинстве устройств практически невозможно. В этой статье мы расскажем о том, как распространяются драйверы GPU, как Google и поставщики устройств пытались упростить их обновление, и что придумывают сторонние разработчики, чтобы обойти ограничения Android.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments0

Android Vitals — Почему запустился мой процесс?

Reading time4 min
Views1.5K

Эта серия статей посвящена мониторингу производительности и стабильности работающих Android-приложений. На прошлой неделе я писал о том, как определить, является ли запуск приложения холодным.

Читать далее
Total votes 6: ↑5 and ↓1+4
Comments0

Как ИТ-специалисту развить навыки коммуникации. 20+ полезных материалов

Reading time10 min
Views24K


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

Конечно, можно не выступать вообще, тогда проблема будет «решена». Но если вы хотите повышать авторитет в команде, убедительно доказывать свою точку зрения и продвигать собственные идеи, придется прокачивать коммуникативные навыки, в которые по многим типологиям входит в том числе и презентационное мастерство. В этой статье максимально конкретно рассмотрим, как это сделать.
Читать дальше →
Total votes 18: ↑17 and ↓1+18
Comments3

Как понять, что ты выгорел и что делать, чтобы выбраться

Reading time14 min
Views202K

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

Вы не одни. В сегодняшней статье Юлия Белозерова, которая выгорала уже полтора раза, решила поделиться своим опытом. Последние 10 лет она занималась управлением проектами в аутсорсинге, в продуктовых компаниях (ex-Yandex, ex-Epam, ex-Booking.com). Юля не врач, не терапевт, не психолог и не профессионал по выгоранию. Это взгляд выжившего.

Читать далее
Total votes 47: ↑29 and ↓18+20
Comments40

Создаем и тестируем свой plugin для Gradle 7.0+

Reading time8 min
Views4K

Система сборки проектов Gradle стала значительной вехой в эволюции инструментов подготовки артефактов и заменила во многих проектах ранее популярный Maven (который ранее стал заменой для make и ant). Де-факто Gradle является стандартом для сборки проектов для Android, но в действительности он может использоваться и для других целевых платформ и технологий разработки, отличных от JVM. Подобно maven в gradle используются устанавливаемые дополнения, которые могут добавлять свои цели и элементы конфигурации, а также встраиваться в существующие цели и добавлять операции как и исходными текстами (например, форматирование), так и с вспомогательными объектами (как пример можно привести кодогенерацию), а также вызов внешних команд или объектов классов (например, компилятора kotlin или инструментов сборки ресурсов для android).

В этой статье мы пошагово создадим и протестируем простой plugin трансформации текстовых файлов для gradle (при разработке будем в основном использовать API, который поддерживается версиями 6.0+, но отдельно отметим, какие функции поддерживаются только в Gradle 7.0 и более новых).

Сначала начнем с определения контекста. Сборка любого проекта состоит из последовательности действий (actions), которые в конечном счете приводят к появлению целевого состояния (task). Конфигурация сборки описывается в виде gradle-сценария, который может взаимодействовать с методами, импортированными из plugin'ов или входящих в gradle-core, либо с версии Gradle 4.0 с использованием Kotlin Scripting (.kts) с возможностью использования объектов стандартной библиотеки Kotlin и импортируемых библиотек.

Читать далее
Total votes 12: ↑11 and ↓1+10
Comments0

Адаптация Android-приложения для незрячих

Reading time20 min
Views4.5K

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

На нашей конференции Mobius Виктор Вихров (Яндекс Go) рассказал о том, как сделать Android-приложение более подходящим для использования «вслепую». А эксперт в сфере цифровой доступности Анатолий Попко помог ему, прокомментировав представленные решения с точки зрения такого пользователя. Мы считаем, что такой контент нужен и на Хабре — поэтому сделали текстовую расшифровку доклада.

Читать далее
Total votes 18: ↑17 and ↓1+21
Comments1

Как ускорить автотесты

Reading time6 min
Views6.2K

Подбираем эффективную конфигурацию под ваши нужды

Всем привет! Меня зовут Иван Левиков, я старший инженер по тестированию.

ВКонтакте развиваю и ускоряю автотесты, анализирую и улучшаю инфраструктуру, создаю новые решения.

При проектировании инфраструктуры для автотестов на Android приходится искать ответы на вопросы о том, где можно их запускать и где лучше это делать. 

Рассмотрим самые популярные места для запуска автотестов: 
• облачные решения;
• решения на физических девайсах. 

Disclaimer. В статье рассмотрим конфигурацию, которую вы можете внедрить в свои проекты. При этом помните про несколько факторов:

Результат может варьироваться, если используются разные серверные машины.
Избыток ресурсов — это не всегда хорошо.
Оптимизация железа должна идти бок о бок с оптимизацией тестов.

Читать далее
Total votes 18: ↑17 and ↓1+25
Comments13

HSLuv — удобное цветовое пространство для разработчиков

Reading time5 min
Views6.7K
Меня, как разработчика, работа с цветами порой утомляет, но существуют проекты, упрощающие эту деятельность. HSLuv — это один из таких проектов, и в рамках этой статьи я постараюсь объяснить, что это и как это может помочь разработчикам.

Проблема традиционных цветовых пространств


Традиционно в IT используются RGB или HSL.

Основная проблема этих цветовых моделей заключается в том, что они нелинейны с точки зрения человеческого восприятия.

RGB


Для примера возьмем равномерные ступенчатые градиенты RGB цветов.

  • градиент красного — это цвета #000, #100, #200, #FEE, #FFFи т.д.;
  • градиент зеленого — это цвета #000, #010, #020и т.д.;
  • градиент синего — это цвета #000, #001, #002и т.д.;
  • градиент желтого — это цвета #000, #110, #220и т.д.;
  • градиент голубого — это цвета #000, #011, #022и т.д.;
  • градиент пурпурного — это цвета #000, #101, #202и т.д.


Мы можем увидеть несколько вещей:

  • Яркость цветов увеличивается неравномерно: чем оттенок ближе к белому цвету, тем изменение яркости меньше;
  • Яркость разных цветов различается: синий намного темнее остальных;
  • Насыщенность также неравномерна: синий и красный выглядят «ненасыщенными» в правой части градиента.

Хорошо, RGB — это способ визуализации пикселей, да и разрабатывалась эта модель не для удобного «управления» значениями.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments6

О дебаге Kotlin-корутин

Reading time5 min
Views6K

Привет, Хабр. Хочу поделиться своим решением одной из проблем использования корутин в Kotlin.

Корутины в Kotlin - одна из значимых фич языка, которая позволяет писать асинхронных код в синхронном стиле. Корутины прекрасны во всём, до тех пор пока не возникает необходимость их дебажить.

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

Как тестировать gradle-плагины

Reading time4 min
Views3.6K

Когда я писал свой первый gradle-плагин, я проверял его работоспособность следующим образом:

1. Опубликовал версию n в plugins.gradle.org
2. Проверил опубликованный плагин вручную на тестовом проекте
3. Нашел ошибку/доработал, увеличил версию n=n+1, затем снова пункт 1

Такой вот PDD (Publish Driven Development). Сегодня поговорим о том, как писать эффективные тесты на собственные gradle плагины.

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

Как мы избавились от 80% своего кода, повысив скорость разработки и уменьшив количество ошибок

Reading time12 min
Views63K


Оптимизация кода и развитие микросервисной архитектуры занимает значительную часть жизни команды разработчиков МВидео-Эльдорадо. Тем любопытней изучить опыт коллег за рубежом. Предлагаем вашему вниманию очередной пост на тему: «А как там у них».
Читать дальше →
Total votes 81: ↑73 and ↓8+82
Comments101

LJV: Чему нас может научить визуализация структур данных в Java

Reading time26 min
Views28K

Эта статья является пересказом моего доклада на Java-конференции SnowOne 2021 года. LJV — проект, созданный в 2004 году как инструмент для преподавания языка Java студентам. Он позволяет визуализировать внутреннее устройство структур данных. В этом докладе я запускаю LJV на разных структурах (от String до ConcurrentSkipListMap) в разных версиях Java и разбираю, что там внутри, как оно менялось от версии к версии, и как это всё работает.


image

Читать дальше →
Total votes 85: ↑85 and ↓0+85
Comments11
1
23 ...

Information

Rating
Does not participate
Registered
Activity