говорят, нужно под каждый праздник обновлять иконку приложения, чтобы пользователи чувствовали развитие приложения и понимали, что его еще не забросили
работает?)
p.s. до нового года осталось пару дней. а у меня как раз осталось несколько историй, которые не успел рассказать в течение года
работает?)
p.s. до нового года осталось пару дней. а у меня как раз осталось несколько историй, которые не успел рассказать в течение года
🔥11🏆7👍3❤🔥1🎉1
🧊 Как у меня угнали telegram-аккаунт
У меня был запасной аккаунт, склад мусора
В какой-то из вечеров, сидя на концерте, увидел сообщение: "Ваш код для входа в telegram: 12345. Никому не сообщайте его"
Ну, сказано-сделано, решил никому не сообщать. Как можно обмануть того, кто ничего не делает?
Тем более такие сообщения иногда приходят в любых соцсетях — может кто-то ошибся номером, может кто-то в тупую перебирает код-пароли на случайных номерах...
После концерта достаю телефон, а имя аккаунта уже сменилось + появился чат со службой доставки, куда активно отправляются сообщения с целью зарегистрировать курьера на этот аккаунт
Поскольку доступ к аккаунту у меня остался, зашел в активные сессии и деактивировал все лишние. Пока думал, как такое могло произойти, и проверял, какие еще методы авторизации включены, кто-то снова запросил пароль и снова вошел в аккаунт
Это повторилось пару раз, пока не перевязал аккаунт к другому номеру
🤡 А теперь разгадка:
Аккаунт был привязан к номеру, симку с которым я кинул в шкаф около года назад, и благополучно про это забыл
Оператор вполне законно расторг со мной договор в одностороннем порядке (возможно даже уведомил меня об этом на тот номер) и продал этот номер кому-то следующему
Мораль — соцсети зло, надо их запретить
@dolgo_polo_dev
У меня был запасной аккаунт, склад мусора
В какой-то из вечеров, сидя на концерте, увидел сообщение: "Ваш код для входа в telegram: 12345. Никому не сообщайте его"
Ну, сказано-сделано, решил никому не сообщать. Как можно обмануть того, кто ничего не делает?
Тем более такие сообщения иногда приходят в любых соцсетях — может кто-то ошибся номером, может кто-то в тупую перебирает код-пароли на случайных номерах...
После концерта достаю телефон, а имя аккаунта уже сменилось + появился чат со службой доставки, куда активно отправляются сообщения с целью зарегистрировать курьера на этот аккаунт
Поскольку доступ к аккаунту у меня остался, зашел в активные сессии и деактивировал все лишние. Пока думал, как такое могло произойти, и проверял, какие еще методы авторизации включены, кто-то снова запросил пароль и снова вошел в аккаунт
Это повторилось пару раз, пока не перевязал аккаунт к другому номеру
Аккаунт был привязан к номеру, симку с которым я кинул в шкаф около года назад, и благополучно про это забыл
Оператор вполне законно расторг со мной договор в одностороннем порядке (возможно даже уведомил меня об этом на тот номер) и продал этот номер кому-то следующему
Мораль — соцсети зло, надо их запретить
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁35🤡11✍4👎1🍌1🍓1
Это история уже про основной аккаунт. И она будет больше интересна владельцам каналов из-за специфичного вектора атаки
Как работает взлом:
1. В личку пишет рекламный менеджер бигтеха и предлагает прорекломировать их событие — обычная история
2. Общаетесь, обсуждаете дату и цену, торгуетесь — обычная история
тут кстати бдительность усыпляется жадностью — менеджер соглашается на цену выше рынка (две пачки чипсов вместо одной), предлагает долгосрочное сотрудничество...
3. Когда все обговоренно, просят банковские реквизиты — обычная история
4. Просят подтвердить факт владения каналом, пройти авторизацию в боте/на сайте — вот тут-то и вы и попались, молодой человек
В процессе авторизации через телегу вы случайно и крайне неявно предоставите не публичные данные об аккаунте (номер телефона, имя/ник), а полный или частичный доступ к аккаунту. Например, передадите права на публикацию постов, изменение списка администраторов канала, чтение переписок через telegram api...
Берегите себя и аккаунты своих близких
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯18😎5👍4🤝2🤡1
Мне тут скинули историю с пикабу:
Приложение онлайн-аптеки каждую ночь начало выкачивать по 25 ГБ трафика
Причем случай не единичный, в гугл плей много пользователей пожаловались на перерасход трафика
Точных причин происшествия не нашел, есть только мое предположение:
единственное, это не объясняет, почему приложение, судя по отзывам, отправляет больше трафика, чем загружает
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16😱5🍾5👍4
с новым годом! 🎁
желаю хорошо отдохнуть и потом еще раз хорошо отдохнуть☕️
желаю хорошо отдохнуть и потом еще раз хорошо отдохнуть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28❤8👏3🍾3👍1😁1
Нашел ветку в гитхабе, где разработчиков библиотеки OkHttp на протяжении 11 лет (с 2014 года!!) просят поддержать http3, а они сопротивляются
Короткий пересказ:
Разработчики OkHttp отказываются поддерживать http3, потому что это сложно:
I could write a basic implementation of HTTP/1 in about a week.
I could write a basic implementation of HTTP/2 in about a month.
I fear HTTP/3 is larger still; maybe 6 months of work?
потому что нет времени и интереса:
We don't have time or interest to have QUIC in trunk at this time
да и в целом потому что:
The only plan is there is no plan
Их стойкости можно позавидовать
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
😁44👍18🔥3
Очень интересная паста о том, как зашить секретную строку в приложение так, чтобы ее нельзя было вытащить за 1 секунду, используя обычный поиск внутри файлов
Например, вы решили спрятать свой ключ от биткоин-кошелька в apk
Что можно попробовать и что из этого выйдет:
Просто положить строку в val/var/const string или в strings.xml — строка попадет в apk в неизменном виде
Разбить строку на байты и положить в массив byte[] — строка попадет в apk в неизменном виде (случилась оптимизация при компиляции)
new byte[]{'x','y','z'} -> "xyz"Положить строку в BuildConfig — строка попадет в apk в неизменном виде
Натравить Proguard/R8 на класс со строкой — строка попадет в apk в неизменном виде, proguard меняет только название переменных, но не их значение
Положить зашифрованную строку (например, в base64/sha254...) и декодить ее динамически — вот это уже сработает, за 1 секунду можно будет найти только зашифрованную строку
"eHl6".decodeBase64() -> "xyz"Но еще за 3 секунды можно будет раздебажить алгоритм шифрования, найдя его в .dex-файлах
Зашить строку в нативный с++ код и обращаться к нему через JNI — строка попадет в apk в неизменном виде
Выводы:
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍28🔥14🍓3
🤌 Опытный специалист
Тут надо было 1 строчку кода в 100 файлов добавить
Реально надо, так получилось
Как раньше я бы решил эту задачу:
🔵 поискал инструмент в студии, позволяющий это сделать
🔵 не нашел бы его и загуглил бы "how insert code line in class constructor automatically"
🔵 не нашел бы ответа и решил написать свой скриптик, который бы автоматизировал этот процесс
🔵 через какое-то время мучений понял бы, что нужен не просто скриптик, а целый парсер, чтобы оно отработало даже в корнер кейсах
🔵 пошел бы в GPT AI Capilot Code Generator, чтобы он помог мне в этой борьбе
Но я опытный разработчик. Поэтому скипнул все предыдущие шаги и за 3 минуты перекопировал строчку в 100 файлов вручную
@doglo_polo_dev
Тут надо было 1 строчку кода в 100 файлов добавить
Реально надо, так получилось
Как раньше я бы решил эту задачу:
Но я опытный разработчик. Поэтому скипнул все предыдущие шаги и за 3 минуты перекопировал строчку в 100 файлов вручную
@doglo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁105😎25👍21🔥11🏆8❤7
Чаще всего — нативные библиотеки, то есть c/с++ либы, подключенные к приложению
Обычно их в крыcу транзитивно тянут различные Kotlin/Java SDK
Особенность NDK либ в том, что они генерируются под 4 архитектуры отдельно (armeabi-v7a, arm64, x86, x86_64). Поэтому в каждом apk по 4 копии одной c/c++ либы. Если либа весит 5 мегабайт, то в apk попадет 20 мегабатайт
Плюс си плюс плюс код довольно жирный, так как тянет вместе с собой кучу стандартного кода, необходимый для его выполнения. Например, если вы напишите 5 строчек c++ кода, то либа все-равно будет весить минимум 500кб
Нативные либы обычно используют библиотеки по работе с картами, картинками, безопасностью, камерой -> если у вас такое есть, то вероятно в вашем приложении уже есть нативные либы
Топ-2 виновник размера apk — png картинка для экрана "О приложении" конечно
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33🍌5🤣4👍3
☁️Оффлайн-встречи мобильных разработчиков уже в эти выходные!
😉Привет! На связи Coffee&Code — международное сообщество мобильных разработчиков.
😎Приглашаем вас на бесплатные встречи мобильных разработчиков в формате дружеской беседы. Будем обсуждать разработку, делиться опытом, задавать вопросы и просто приятно проводить время в кругу единомышленников.
🤪Пообщаемся на технические темы, обсудим интересные события из мобильной разработки, разберем вопросы с собеседований и поделимся опытом!
🤖 Android | 📱 Mobile | 🍏 iOS
📍СПИСОК ГОРОДОВ
💃Также мы выкладываем интересные технические/полезные видосики в наш YouTube канал и записываем Подкаст! Ждем тебя на встречах!
😉Привет! На связи Coffee&Code — международное сообщество мобильных разработчиков.
😎Приглашаем вас на бесплатные встречи мобильных разработчиков в формате дружеской беседы. Будем обсуждать разработку, делиться опытом, задавать вопросы и просто приятно проводить время в кругу единомышленников.
🤪Пообщаемся на технические темы, обсудим интересные события из мобильной разработки, разберем вопросы с собеседований и поделимся опытом!
🤖 Android | 📱 Mobile | 🍏 iOS
📍СПИСОК ГОРОДОВ
💃Также мы выкладываем интересные технические/полезные видосики в наш YouTube канал и записываем Подкаст! Ждем тебя на встречах!
🔥7👍5❤3👏2😍2
раз сегодня день рекомендаций, то еще расскажу про митапчик от Ozon, на котором буду выступать в следующую пятницу (21.02.25, вечер, бауманская)
поговорю про подводные камни в проектировании API для SDK, о проблемах ABI и мажорных каскадных релизах
также там будут крутые доклады коллег, слайды с картинками и кейтеринг -> подробности и регистрация
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍7🌭4❤3
Dolgo.polo Dev | Денис Долгополов
запись докладов
📱 в VK Видео
📱 на YouTube
всем, кто дошел оффлайн и смотрел онлайн, привет 😉
@dolgo_polo_dev
всем, кто дошел оффлайн и смотрел онлайн, привет 😉
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡21🔥18🤡3
У каждого http-запроса и ответа есть заголовки (они же headers, они же мапка ключ-значений)
Но есть нюанс, о котором почему-то не написано красными большими буквами во всех гайдах по Retrofit/OkHttp
Если на мобилке добавить в хэдер запрещенный символ или бэк пришлет такой символ, то сетевой запрос крашнется, выкинув исключение
Актуальный список разрешенных символов можно найти в коде:
okhttp3.Headers.checkValue()okhttp3.Headers.checkName()
сейчас это:
c in '\u0021'..'\u007e' c == '\t' || c in '\u0020'..'\u007e'Например, в хэдере нельзя передавать знак рубля ₽ или иконки гендеров ♂♀
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
✍24🔥5🥴3
Топ #1 — минимально поддерживаемая версия приложения 🥇
Под каким предлогом это затащили вообще во все приложения?
Например, захожу в условный Вкуссвил раз в пару месяцев. И на кассе хочу пробить скидочную карту клиента, чтобы сэкономить 130 рублей
А вместо QR-кода вижу
"СРОЧНО! срочно! обнови приложение или тебя ждет 10 лет неудач!"
и встаю перед выбором:
Приложениям, которые часто меняют/дополняют свой основной функционал. Например, к Яндекс.Картам или Телеграмму в этом плане ноль претензий
Нет, ведь если не открывать приложение какое-то время, оно перестает автообновляться и архивируется
Если у вашего приложения 1-2 основные функции (например, показать штрихкод!), то не обязательно мучать пользователей принудительными обновлениями. Думаю, лояльность пользователей важнее time to market минорных фичей
При этом согласен видеть огромный красный баннер "Срочно обновите приложение, ведь мы добавили истории, новости компании и реакции на них", если основной функционал останется доступным
@dolgo_polo_dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍13❤🔥3
#рекомендация
Есть такой канал пропока еще мобильную разработку – 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
