#рекомендация
Есть такой канал пропока еще мобильную разработку – Everlasting Loops
В нём можно встретить как популярные вопросы с собеседований, так и неочевидные инсайты, особенности IDE-шного тулинга,контрибьют в Kotlin (ну… как-нибудь), или же просто фан-факты
А также почему ломается Unity, зачем котлину public и чего можно ожидать от лямбды
И сначала думаешь, что вроде бы шаришь, а потом хоп – и вот ты уже гуглишь, что это за guards
Если crossinline уже выучил
Есть такой канал про
В нём можно встретить как популярные вопросы с собеседований, так и неочевидные инсайты, особенности IDE-шного тулинга,
А также почему ломается Unity, зачем котлину public и чего можно ожидать от лямбды
И сначала думаешь, что вроде бы шаришь, а потом хоп – и вот ты уже гуглишь, что это за guards
Если crossinline уже выучил
🔥9👍5🦄4🫡1
Осторожно, кринж
Попросил нейросеть написать стих про Android-разработчика. Она выполнила задание с первого раза:
Fragment-осколки в ViewModel-реке,
LiveData танцует в Lifecycle-ручье.
Jetpack-крылами взлетает за грань,
Где Room хранит секреты, как древний талисман.
Dagger-остротой разрезает тьму,
Coroutines плетут асинхронную мглу.
RecyclerView — его ритмы-маски,
А в Stacktrace — тайный шифр Пизанской башни.
ANR-демоны грызут тишину,
Но Proguard-магия стирает войну.
CI/CD — его алхимия в бойне,
Чтоб APK стал цифровой иконой.
Flutter-соперник? Не страшен мираж —
Compose-канвасом он рисует пейзаж.
API-бездны покоряет в прыжке,
Где Firebase звёзды горят на песне.
Его Git-хроники — вечный полёт,
Где Merge Conflict — лишь тень на восход.
Android-магнат, в его коде — эпоха,
Сквозь NullPointer — к звёздам прорвётся вздох! 🚀
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👏25😁14🗿8🔥4💊4
🐌 Чек-лист замера перфа
Если хочется бороться за миллисекунды, то можно померить с помощью готовых или самописных решений следующие этапы работы приложения:
🐌 Запуск приложения
🔵 отдельный вопрос — откуда до куда мерить запуск, тут есть простор для творчества
🔵 как минимум надо мерить Application.onCreate() и инициализацию библиотек
🐌 Открытие нового экрана
🔵 момент от нажатия пользователем кнопки до отрисовки первого полезного UI-элемента
🔵 часто включает в себя сетевой запрос на бэк — довольно рандомная по времени вещь
🔵 желательно разбить эту метрику на подэтапы
🐌 Скорость сетевых запросов на бэк
🔵 подготовка запроса и обработка респонса
🔵 установка соединения (DNS/TCP/TLS)
🔵 время отправки/чтения байтов по интернету
🔵 время работы бэка (когда запрос уже отправлен, но ответ еще не начал считываться)
🔵 загруженность установленных соединений (не пора ли увеличить connectionPool)
🔵 процент попадания в кэш
🔵 процент успешных запросов к упавшим
🔵 размеры запросов
🐌 FPS — количество кадров, которые успевают отрисоваться в секунду
🔵 интересны места, где идет просадка FPS
🐌 Видео-контент
🔵 скорость отрисовки первого кадра
🔵 процент подвисаний
🔵 скорость загрузки чанков
🔵 все вышеперечисленное для разных форматов и битрейтов
🐌 Картинки
🔵 всё, как и для обычных сетевых запросов, но с разбиением по cdn-ам и форматам изображений
Еще что-то забыл?
@dolgo_polo_dev
Если хочется бороться за миллисекунды, то можно померить с помощью готовых или самописных решений следующие этапы работы приложения:
Еще что-то забыл?
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15✍12
Функция String.trim() вырезает пробелы в начале и в конце строки:
" а " -> "a"
Ее лучше дергать со стороны бэка, но если вы ему не доверяете или делаете оффлайн логику, то не забывайте про нее, умоляю
Последняя нервная клетка умирает, когда вбиваешь в поиск гитлаба название ветки, а её там нет
И только после микроинсульта понимаешь, что это из-за лишнего пробела в названии " epic/123"
Или ищешь печеньки 🍪 в онлайн-магазине, а " печеньки" там нет, есть только "печеньки"
Или логинишься с помощью логина и пароля, а для аккаунта "терминатор6200 " почему-то логин не найден
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19😁15👍4❤🔥2🍌2
referer — стандартный хэдер для http-запросов
он показывает, откуда пользователь попал на страницу/в приложение
например, referer = google.com ознаечает, что пользователь попал на сайт/в приложение из гугла. полезная штука для аналитики
но забавно другое — слова referer не существует, правильное написание — referrer (с двумя rr)
вариант с опчаткой по ошибке добавили в стандарт в 1995 году, и с тех пор всем браузерам и сетевым клиентам приходится поддерживать оба варианта — с очрепяткой и без
например, Cronet (сетевой клиент от гугла для Android, iOS и не только) тупо вырезает хэдер referer
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22👍8🤯7❤🔥1🤣1
С дества слышал, что подключаться к общественным Wi-Fi небезопасно. И это утверждение у меня никогда не билось с фактом "https трафик зашифрован, ведь s — это security" (ну или TLS/SSL)
Если весь трафик зашифрован умными алгоритмами, то какая-разница, через какие радиоволны подключаюсь к бэку?
Разгадка нашлась простая — проблема в атаке man in the middle (мужик в середине)
Это не какая-то конкретная уязвимость, а весь спрект потенциальных проблем
Имея доступ к роутеру, то есть находясь посередине между приложением и бэком, злоумышленник может попытаться:
Естественно, все не так просто, и на произвольном сайте такое злодей не провернет. Нужно целое стечение обстоятельств, несколько допущенных дыр, чтобы любая из атак стала возможной. Но доступ к Wi-Fi, через который устанавливается соединение, повышает шанс этой атакой воспользоваться, ведь трафик льется через роутер как через прокси
А дальше начинается самое интересное — центры сертификации, разные версии SSL, шифрование трафика через VPN, дополнильные проверки IP браузером — огромный мир борьбы с мужиком в центре
Кстати проблема man in the middle справедлива и для мобильных приложений — существует не так уж много способов безопасно передать информацию между двумя приложеними, не дав кому-то посередине ее перехватить
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🦄9👍5✍2🤡2❤🔥1😎1
TLS / SSL / SSL Pinning / mTLS на пальцах
Не буду вдаваться в подробностипотому что я их не знаю и расскажу то, что достаточно знать мобильному разработчику
Первый запрос к бэку всегда особенный — на нем устанавливается соединение и происходит обмен информацией для шифрования трафика
TLS / SSL — протоколы шифрования
❌ SSL — старый
✅ TLS — новый (самая крутая версия 1.3)
Один из этапов шифрование — передача публичного ключа шифрования вместе с сертификатом
💡 Сертификат — это файлик с уникальным публичным ключем, который владелец домена (например, ya.ru) получает от центра сертификации
💡 Центр сертификации — организация, которая выдает сертификаты доменам и потом проверяет их
Так вот, бэк передает свой сертификат на мобилку. Мобилка идет к центру сертификации и спрашивает:
Если все ок, то с помощью этого сертификата трафик шифруется
➡️ стороннее лицо (центр сертификации) подтверждает, что мы общаемся напрямую с ya.ru
Это и есть SSL / TLS (если сильно упрощать)
продолжение
Не буду вдаваться в подробности
Первый запрос к бэку всегда особенный — на нем устанавливается соединение и происходит обмен информацией для шифрования трафика
TLS / SSL — протоколы шифрования
Один из этапов шифрование — передача публичного ключа шифрования вместе с сертификатом
Так вот, бэк передает свой сертификат на мобилку. Мобилка идет к центру сертификации и спрашивает:
Точно ли этот сертификат принадлежит этому домену?
Если все ок, то с помощью этого сертификата трафик шифруется
Это и есть SSL / TLS (если сильно упрощать)
продолжение
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19🌭2😎1
SSL Pinning
Помните про мужика в середине?
Он может прочитать наш зашифрованный трафик, если каким-то образом подсунет свой сертификат. Например, если пользователь по незнанию нажмет в настройках системы "доверять любым сертификатам"
Чтобы этого избежать, мы можем не передавать сертификат в момент установки соединения, а заранее зашить его в код мобилки
Там все просто — в коде указываем данные сертификата, и начинаем общаться с бэком только если он прислал этот же сертификат при установке соединения
В этой схеме приложение само является центром сертификации, так как само проверяет сертификат
➕
🔵 спасаем пользователей, которые отключили проверку сертификатов на устройстве, не понимая, чем рискуют
➖
🔵 сертификат выдается на определенное время. вам нужно заранее обновить его в коде мобилки и успеть перевести всех пользователей на новую версию, пока сертификат не протух
mTLS
Тут идея в том, чтобы передавать сертификат не только с бэка на мобилку, но и с мобилки на бэк
В код мобилки зашивается сертификат, который при установки соединения отправляется на бэк.
Если мобилка не отправила сертификат или отправила неверный — бэк не станет устанавливать соединение
➕
🔵 защищаем бэк от DDOS, даем ему возможность игнорировать запросы без сертификата
➖
🔵 добавляется еще один шаг при установке соединения -> может негативно сказаться на скорости сетевых запросов (тратим дополнительные миллисекунды)
первая часть поста
Помните про мужика в середине?
Он может прочитать наш зашифрованный трафик, если каким-то образом подсунет свой сертификат. Например, если пользователь по незнанию нажмет в настройках системы "доверять любым сертификатам"
Чтобы этого избежать, мы можем не передавать сертификат в момент установки соединения, а заранее зашить его в код мобилки
Там все просто — в коде указываем данные сертификата, и начинаем общаться с бэком только если он прислал этот же сертификат при установке соединения
В этой схеме приложение само является центром сертификации, так как само проверяет сертификат
mTLS
Тут идея в том, чтобы передавать сертификат не только с бэка на мобилку, но и с мобилки на бэк
В код мобилки зашивается сертификат, который при установки соединения отправляется на бэк.
Если мобилка не отправила сертификат или отправила неверный — бэк не станет устанавливать соединение
первая часть поста
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍5😎2🌚1
Короткий топ технологий
🔵 низкоуровневая разработка
🔵 нативная разработка
🔵 кросс-платформа
🔵 AI-вайб-кодинг
🔵 AI+вайб-кодинг
🔵 no-code
🔵 шаблоны
🔵 нам IT-отдел не нужон, а логотип дочка нарисует
@dolgo_polo_dev
гибкость 👇time to market 👆@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆21😁17🤡4
Помните про мужика в середине?
Давайте представим, что нам нужно передать секрет от одного приложения к другому так, чтобы его никто не перехватил
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥23⚡4🍓4❤3
🍏 Эко-френдли код
Почему какое-то приложение жрет батарейку больше остальных?
Потому что там много анимаций, а в бэкграунде запускается майнер? Возможно, но есть более физическое объяснение
💡 Например, сетевые запросы напрямую влияют на расход батареи
Чтобы выполнить запрос к бэку, нужно вывести Wi-Fi-модуль из сна➡️ подать на него напряжение ➡️ сначала отправить байты в интернет с помощью излучения радиоволн ➡️ повисеть какое-то время в режиме ожидания ответных радиоволн
То же самое с Bluetooth/NFC/динамиками/датчиками — для передачи информации нужно потратить энергию
При этом теоретически важно не только количество передаваемой информации в физический мир, но и частота
Например, энергоэффективнее отправить 10 запросов в бэкенд параллельно, чем последовательно — ведь так мы быстрее позволим Wi-Fi платке вернуться в режим сна
Но в реальном мире такими микрооптимизациями занимается в лучшем случае ОС или драйвер, нам же достаточно описать, откуда и куда перекладывать джейсончики
@dolgo_polo_dev
Почему какое-то приложение жрет батарейку больше остальных?
Потому что там много анимаций, а в бэкграунде запускается майнер? Возможно, но есть более физическое объяснение
Чтобы выполнить запрос к бэку, нужно вывести Wi-Fi-модуль из сна
То же самое с Bluetooth/NFC/динамиками/датчиками — для передачи информации нужно потратить энергию
При этом теоретически важно не только количество передаваемой информации в физический мир, но и частота
Например, энергоэффективнее отправить 10 запросов в бэкенд параллельно, чем последовательно — ведь так мы быстрее позволим Wi-Fi платке вернуться в режим сна
Но в реальном мире такими микрооптимизациями занимается в лучшем случае ОС или драйвер, нам же достаточно описать, откуда и куда перекладывать джейсончики
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12🍓10👍1
Купил себе мини-пк, так как прошлый домашний ноут умер. Пользуюсь полгода, делюсь впечатлениями
Задачи у него такие:
а) это эстетично
б) это практично — иногда кидаю его с собой в портфель в поездки, весит чуть больше блока питания от ноутбука
в) удобно с подъемным столом — не нужно ничего придумывать, просто положил под монитор
Со всеми этими задачами отлично справляется встроенка AMD 680M — не шумит, не греется выше нормы, не фризит
Если вы геймер, то судя по тестам из интернетов можно взять MacMini на M4 за 70-80к и комфортно играть на нем даже в киберпанк
Итого — все мои потребности закрыл на
Думаю, со временем все не_игровые пк перейдут в такой формат. Коробки размером с пылесос больше не имеют смысла, но пока они чуть дешевле
А в идеальном мире домашние компы заменят телефоны, которые с помощью внешнего монитора и type-c будут превращаться в полноценный пк. Надеюсь, лет через 5-10 мы окажемся в этой точке
Минусы и характеристики моей коробки скину в комменты👇
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍8
Пользователь нажимает на иконку
И тут начинается треш и угар — в ближайшие 300мс случится больше интересного, чем в фильмах Marvel за последние 5 лет
Пошло поехало:
фух, кончили. наконец-то можно вывести "Ваше приложение устарело, пожалуйста, обновите версию"
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁57❤6👍4😱4
#рекомендация
@mobile_appsec_world — один из крупнейших каналов про безопасность мобильных приложений
если вдруг не подписаны, то вот что вы пропускаете:
🔵 Как отключить SSL Pinning для дебага?
🔵 Новости про использование AI в реверс-инжиниринге
🔵 Анонсы конференций и вебинаров про мобильное ИБ
🔵 Ссылки на полезные тулзы для анализа apk
и все это ради благой цели — чтоб в вашемсыре аппе было меньше дырок
@mobile_appsec_world — один из крупнейших каналов про безопасность мобильных приложений
если вдруг не подписаны, то вот что вы пропускаете:
и все это ради благой цели — чтоб в вашем
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3❤2
Google предлагает:
Если этот проект не забросят в долгий ящик, то в ближайшие годы правила игры заметно поменяются
Как сейчас:
Как станет:
Почему эта идея имеет смысл:
сейчас у приложения и подключенных к нему библиотек полный коммунизм — всё общее (файлы, shared-preferences, медиа-контент...)
соответсвенно, библиотеки могут сливать данные пользователя без вашего ведома
Есть и обратная сторона:
В первую очередь гугл раскатывает SDK Runtime с Android 14 для рекламных библиотек, а будущее зависит от фидбэка разработчиков
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯20🔥8👍4🤔3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
👀 Зачем роверу глаза?
Вообще-то по образованию я не смузи-вайб-разработчик, а суровый хард-инженер-робототехник — могу передаточное число редуктора в уме посчитать, сделать инженерный чертеж фланца по ГОСТу, отличить дырку от отверстия
Поэтому был рад, когда пригласили на конференцию для технарей "Чинители прекрасного". Сейчас Яндекс создает роверов, умные колонки и другое железо, поэтому логично, что команда решила провести ивент для инженеров
Из плюсов:
➕ не было докладов про очередные 10 тысяч способов оптимизировать Compose
➕ были интересные доклады о том, чем занимаются инженеры в компании
Расскажу пару запоминающихся фактов
🎲 Кубик Рубика
С большой вероятностью вы видели статью про него на хабре — удалось увидеть в живую)
Точнее в живую успеваешь заметить только два состояния до/после, сам процесс сборки занимает менее 200мс
❄ Охлаждение серверов
Тут как в мобилке — можно потратить полгода на микрооптимизации, которые дадут улучшение всего в 5%, но на масштабах бигтеха даже такой результат многократно окупится
Для охлаждения серверов нужен очень сильный поток воздуха, а значит большие затраты на электроэнергию для вентиляторов
Поэтому в Яндексе проектируют свои коробки для размещения серверного оборудования
На ивенте рассказывали, как экспериментальным путем получилось сделать супер-дешевый пластиковый рассекатель воздуха (пластинка сдырками отверстиями определенной формы), который повышает эффективность охлаждения оперативной памяти
📦 Ровер-доставщик
🔵 если у доставщика мигает красный флажок, значит он находится в режиме ручного управления, помогать ему не надо)
🔵 роботы долго стоят на светофорах — это фича. дело в том, что робот не может определить, как долго еще будет гореть зеленый. поэтому просто зеленого сигнала не достаточно — ровер будет стоять, пока не увидет переключения с красного на зеленый
🔵 у робота-доставщика очень милая мордочка, на которой есть глаза. изначально эти глаза были фарами, но в последних версиях ровера используются новые камеры с ночным виденьем, а глаза остались от предыдущих моделей
🖥 Еще были доклады про
🔵 ДНК секвенатор и реверс-инжиниринг био-чипа
🔵 промышленные манипуляторы Yandex Robotics
🔵 световые мечи из звездных войн
🔵 и стенд со всеми версиями Алисы в разобранном виде
@dolgo_polo_dev
Вообще-то по образованию я не смузи-вайб-разработчик, а суровый хард-инженер-робототехник — могу передаточное число редуктора в уме посчитать, сделать инженерный чертеж фланца по ГОСТу, отличить дырку от отверстия
Поэтому был рад, когда пригласили на конференцию для технарей "Чинители прекрасного". Сейчас Яндекс создает роверов, умные колонки и другое железо, поэтому логично, что команда решила провести ивент для инженеров
Из плюсов:
Расскажу пару запоминающихся фактов
С большой вероятностью вы видели статью про него на хабре — удалось увидеть в живую)
Точнее в живую успеваешь заметить только два состояния до/после, сам процесс сборки занимает менее 200мс
Тут как в мобилке — можно потратить полгода на микрооптимизации, которые дадут улучшение всего в 5%, но на масштабах бигтеха даже такой результат многократно окупится
Для охлаждения серверов нужен очень сильный поток воздуха, а значит большие затраты на электроэнергию для вентиляторов
Поэтому в Яндексе проектируют свои коробки для размещения серверного оборудования
На ивенте рассказывали, как экспериментальным путем получилось сделать супер-дешевый пластиковый рассекатель воздуха (пластинка с
📦 Ровер-доставщик
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤1👍1😁1
Или архитектура SDK-first (отсылка на Mobile-first, который пришел на замену Desktop-first)
Постепенно все движется к тому, что большую часть кода можно будет сразу писать в виде sdk. Или хотя бы учитывать высокую вероятность выноса кода в sdk при проектировании модуля
Вижу несколько причин
Бигтех-копании нужно приложение и для продажи кофе, и для аренды электросамокатов, и для внутренних сотрудников
Плюс компаниям нравится переплетать эти стартапы между собой — продавать кефир в приложении такси
Поэтому нужно допускать, что в любую секунду функционал одного приложения понадобится в другом
И намного дешевле не писать новые приложения-эксперименты с нуля, а собирать их из одинакового набора готовых библиотек
Чем меньший процент кода написан ИИ, тем более приложение стабильно и поддерживаемо
Возможно, все придет к тому, что живые разработчики будут писать стабильные библиотеки с кучей документации и примерами, а ИИ агенты будут изучать их и собирать из этих библиотек приложения
Хороший пример — сетевой клиент OkHttp. ИИ не сможет написать его полноценный аналог, но при этом за пару минут соберет на базе него работающий клиент-серверный фича-модуль
За последние годы все ушли от монолита в сторону многомодульных приложений, научились шарить код между различными частями приложения
Следующий логичный этап — шарить код за пределами одного приложения (и одной платформы)
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20✍11🍓5
Поймал себя на мысли, что перестал пользоваться google поиском
Хотя пару лет назад это казалось невозможным
а гугл поиск зачем?
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡24👍13🤔9👎2✍1
В одном из постов предположил, что в идеальном мире офисный компьютер и телефон должны стать одним устройством
А может Android уже можно использовать как компьютер?
Чтобы использовать Android OS в качестве Desktop OS нужно решить пару проблем:
На данный момент существует два пути
К этой категории относятся полноценные адаптации AOSP под desktop-систему
Android-x86, PrimeOS, Bliss OS... — все это нативные операционные системы, их можно установить на пк/ноутбук и использовать независимо от смартфтона
(кто их использует как основную систему на ежедневной основе не могу придумать)
Тут другой подход — речь не про установку Android как системы на пк, а про специальный режим трансляции экрана телефона на внешний монитор
Работает это так:
Но такой режим пока есть не везде:
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🍓2🍾1
У Samsung OneUI прошивок есть фича — Samsung Edge Panel
Это такая шторка, которую можно вытащить свайпом у правой стороны экрана. По умолчанию там отображаются иконки часто используемых приложений
Раньше было специальное EdgePanel SDK, с помощью которого можно было написать свое приложение для этой шторки и запушить его в GalaxyStore, но оно deprecated
Но самое удивительное другое — в GalaxyStore до сих пор продаются приложения для этой шторки по 100-500 рублей
Например, в Edge Panel могут отображаться стремные селекторы громкости или мини крестики-нолики. Цена удовольствия всего 82 рубля
А ведь если вовремя залететь, можно было бы стать миллионером
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤡11👍7❤3🔥3😁2