Telegram Web
​​Эти PIN-коды могут быть легко подобраны
#статьи

Наткнулся на любопытное исследование безопасности pin-кодов, которые используют пользователи для разблокировки смартфонов.
Не секрет, что сегодня система обязательно запрашивает пин-код как, альтернативный биометрии, способ разблокировки телефона.

Мне кажется, что мало кто отдаёт себе отчёт, насколько безопасным является их код для разблокировки. Сегодня я хочу поделиться с вами исследованием, где публикуются списки небезопасных pin-кодов. Можно попробовать найти в нём свой собственный. 😏

Интересно, что исследователи пришли к выводу, что 6-значные коды фактически не увеличивают безопасность, так как в этом случае пользователи стараются вводить более простые коды: даты, запоминаемые коды или шаблоны клавиатуры.

Ссылка на исследование тут.
​​Бесконечная строка
#конкурс

У вас есть строка, которая теоретически может повторяться бесконечное количество раз.
Но кроме этой строки есть и ограничитель, который заставляет эту строку остановиться на заданном числе. Ваша задача посчитать, сколько раз встречается символ a в этой бесконечной, но ограниченной числом, строке.

Входные параметры
s — строка, которая становится бесконечной;
n — число-ограничитель до которого нужно посчитать количество символов a;

Выходные параметры
Целое число — количество символов a в этой строке.

Ограничения
1 <= s.length() <=100
1 <= n <=10^6

Пример входных данных
aba
10

Пример выходных данных
7

Объяснение
Строка aba, которая может повторяться бесконечно ограничивается числом 10 и превращается в abaabaabaa. И количество символов a в ней равно 7.

Шаблон на языке Kotlin.

Условия конкурса
1. Решения принимаются в течении 48 часов, то есть до 21 августа 2020 года, 18:00. Необходимо отправить только тело функции.

2. Отправить можно только одно решение.

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

4. Победителем будет являться самое короткое тело функции func().

5. В подсчете количества символов учитывается только тело функции. Например, в примере return 0; количество символов равняется 9. Это и определяет длину решения.

6. Переименовывать функцию нельзя, как и изменять входные параметры. Убирать return также запрещается.

7. Требований к форматированию нет, важно рабочее решение. Можно убирать пробелы между переменными и писать код в одну строку, если это не нарушит работоспособность решения.

8. В случае одинаковых по длине решений, победитель будет выбран рандомно, а запись с выбором победителя будет опубликована на канале.

Обратите внимание, что решения, которые не удовлетворяют условиям конкурса не будут учитываться при проверке. Очень часто участники забывают о том, что нужно отправить только внутреннюю часть функции (тело функции), а не всю функцию, включая её заголовок, поэтому будьте внимательны при отправке итогового решения.

Также, если кто-то хочет помочь в проверке решений при помощи тестов, то пишите мне.

Решение нужно отправить в форму. Желаю всем удачи!
​​Распознавание рисунков при помощи ML Kit
#статьи #разработка

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

Автор рассматривает Digital Ink Recognition API из ML Kit, которое распознаёт написанный вручную текст или изображение с экрана. По его словам, результаты довольно точные.

Любопытно, что приложение также может работать оффлайн, правда при этом надо скачать модель в виде 20 мегабайт.

Описание того, как сделать такое приложение и ссылка на готовое можно найти тут.
​​Результаты конкурса «​​Бесконечная строка»
#конкурс

Итак, самое время подвести итог нашего конкурса.
В этот раз в конкурсе участвовало 65 решений. Довольно много было и решений, которые не удовлетворяли условиям конкурса: присутствовали и удаления return из функции, и ошибки каста Long в Int.
Такие решения не прошли отбор, так как условия чётко оговаривали правила того, что нельзя никак менять параметры функции, равно как и удалять return. 😊

В результате победили решения, которые имели 52 символа:

1) return(0..n-1).count{s[it.toInt()%s.length]=='a'}*1L@Namolem
2) return(0..n.toInt()-1).count{s[it%s.length]=='a'}+0L@amihusb
3) return(0..n.toInt()-1).count{s[it%s.length]=='a'}+0L@luckycactus

Так как решения участников имеют однинаковую длину, то рандомное распределение призов выглядит следующим образом:
1) толстовка + сумка + мерч — достаются номеру 3, или @luckycactus
2) футболка + сумка + мерч — достаются номеру 2, или @amihusb
3) сумка + мерч — достаются номеру 1, или @Namolem

Ссылка на видео с рандомным распределением тут.

Спасибо команде Badoo на отличный мерч и призы.
Кроме того, отдельное спасибо @g_apollo и @KoteykaEvil за помощь в проверке заданий.

Также благодарю всех кто участвовал в конкурсе! И поздравляю победителей! 😎

Конкурс далеко не последний, поэтому вновь спрашиваю вас: какие призы вам были бы наиболее интересны при проведении подобных конкурсов? Напишите, пожалуйста, мне.
​​Android Lint Framework — введение
#разработка #статьи

Android Studio даёт довольно много инструментов для того, чтобы писать качественный код. Одним из таких является Lint: IDE подсказывает вам о каких-то неточностях в вашем коде и распространённых багах, к которым можем привести этот код.

Однако самым главным преимуществом является то, что каждый сам может написать свои правила для кода. 😎 Автор этой статьи описывает шаги для написания своего lint-правила:

🔹какие зависимости подключить;
🔹от какого класса наследоваться;
🔹как прописать типы классов, на которые будет распространяться правило;
🔹как применить написанное правило.

Также есть неплохой репозиторий от Uber, где содержится целый набор lint-проверок.
​​Как писать быстрые layouts
#разработка #статьи

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

Но всё равно нужно держать в голове следующий момент: большинство устройсв сегодня имеют частоту обновления экрана в 60 fps, то есть на отрисовку одного кадра у нас есть 1/60 ≈ 16 миллисекунд. Для того, чтобы добиться этого результата у нас есть несколько инструментов и советов.

1) Используйте средства для диагностики проблем с layouts: Layout Inspector, Systrace, Android Profiler. Каждая из них достойна отдельного поста, поэтому пока только ссылки в документации.

2) Переиспользование layouts с merge.
Вынесение layout в xml и использование его при помощи include — довольно распространённая практика. Однако, многие забывают, что вместо корневого layout можно написать merge, который уберёт лишний уровень вложенности.

3) Используйте подходящий родительский layout.
Для этого пользуйтесь следующим правилом: для сложной верстки — ConstraintLayout, для вертикальных или горизонтальных последовательных элементов — LinearLayout, для расположения элементов одного над другим — FrameLayout.

4) Используйте ViewStub.
ViewStub — это хорошая альтернатива, когда вам нужно показать тяжёлый layout на экране или сделать этот показ отложенным. Он быстро рендерится и легко применяется, поэтому не забывайте про этот инструмент.

Подробнее про эти советы можно почитать тут.
​​Jetpack Compose теперь в Alpha
#разработка #опрос

Сегодня вышла Alpha версия фреимворка Jetpack Compose.
Финальную версию обещают к 2021 году, ну а пока у нас есть:

🔹анимации;
🔹поддержка Constraint Layout;
🔹жесты;
🔹совместимость с текущими проектами и View;
🔹preview в Android Studio;
🔹и другие изменения.

Обновление довольно глобальное, с нетерпением жду beta версию. 😎
Примеры приложений уже есть тут, знаменитый Sunflower и новый для меня Tivi.

Подробнее про изменения можно почитать тут.

Ждёте Jetpack Compose?
​​Constraint Layout 2.0
#разработка #статьи #конференции

Constraint Layout — один из самых популярных компонентов Jetpack. И не зря: это отличный способ построения сложной вёрстки, причём для этого можно использовать только встроенный редактор (хотя иногда удобнее пописать код).

Совсем недавно ConstraintLayout 2.0 перешёл в релизную стадию, и теперь его можно смело затягивать в проект. Давайте же поговорим, что там появилось нового в отличии от первой версии.

🔹Flow — это «виртуальный» layout, который позволяет соединять view в цепочки, которые могут переходить на следующую строку при недостатке места. Очень полезная штука, особенно когда вы не знаете, насколько широкими и разными будут компоненты у вас на экране, но вам обязательно нужно показать их все. Так как это виртуальный layout, то он не добавляет новых view в иерархию, а просто содержит в себе несколько свойств для перечисленных ссылок на view. Почитать побольше об этом компоненте можно тут

🔹Layer — это так же «виртуальный» layout, который позволяет применять какие-то трансформации для view сразу для всей группы. Например, если вы хотите применить анимацию перемещения для большого числа view, то можно просто перечислить их в отдельный layer и применить анимацию только для layer.

🔹Motion Layout — наверное, одна из самых ожидаемых фич. Он позволяет создавать фактически любые анимации довольно простым и удобным способом благодяря встроенному в Android Studio редактору.

В одном пункте об этой фиче не расскажешь, но тут очень кстати ребята из Android Academy Minsk организуют митап, который рассказывает про Motion Layout и как его применять.
Пройдёт он 3 сентября в 19:00 по МСК. На митапе мы узнаем что такое MotionLayout и какие проблемы он может решать, изучим базовые вещи для анимаций а также пошагово в конце получим готовый экран Логина/Регистрации. Ссылка на регистрацию тут, а само мероприятие онлайн и бесплатно.

А почитать чуть-чуть больше об описанных изменениях можно в этой статье.
Ещё немного о Jetpack Compose
#конференции

Ребята из Android Academy Global организуют митап, который посвящён теме Jetpach Compose. Доклады довольно крутые, учитывая свежесть технологии:

1) Jetpack Compose and MVI — Артур Бадретдинов, Squire Technologies. Доклад будет о том, как связать паттерн MVI и свежий Jetpack Compose. Посмотрим на примеры реализации и как это будет работать в связке.

2) Easing In and Out with Jetpack Compose — Артем Нестеренко, Loóna Inc. Новый подход даёт нам возможность легче создавать анимации. Также посмотрим на примеры кода и узнаем, каково же это писать анимации в декларативном стиле.

Мероприятие будет уже завтра, 01.09.2020 в 19:00, оно будет онлайн и бесплатно.
Ссылка на регистрацию тут, а ссылка на YouTube прилетит прям перед началом😎.
​​Kotlin Multiplatform Mobile теперь в Alpha
#разработка

Сегодня команда JetBrains анонсировала альфа версию Kotlin Multiplatform Mobile! Это SDK, который позволяет писать бизнес-логику приложений сразу под 2 платформы. 👍🏻 Альфа версия включает в себя также и плагин для Android Studio, который позволяет писать такие проекты.

Уже есть примеры приложений, которые использовали у себя KMM:

Quizlet мигрировали бизнес-слой с JavaScript на KMM и значительно улучшили производительность как Android, так и iOS приложений;

Fastwork начали использовать KMM для шаринга бизнес-логики и API для нескольких команд разработки;

Yandex.Disk начали экспериментировать с небольшой фичи, после чего переписали всю синхронизацию данных на KMM.

Больше информации и полный текст анонса можно почитать тут.

Что-то конец лета выдал нам кучу новинок и теперь не знаешь даже, за что ухватиться в первую очередь 😄
​​Зачем использовать Material Design тему?
#разработка #статьи

Любое Android-приложение соседствует с множеством других установленных приложений. Именно поэтому одним из принципов Material Design — это: «Все приложения должны иметь схожее поведение в рамках одной операционной системы».

Чтобы этого достичь, Google рекомендует использовать Material Design Components. Кроме этого, есть MaterialComponents Theme для приложения.

Давайте рассмотрим, почему вам стоит использовать именно её вместо AppCompat или стандартной библиотеки.

1️⃣Поддержка большего числа компонентов. MDC даёт довольно большое количество стандартных компонентов для показа, а также «расширяет» возможности текущих.
Например, MaterialButton предлагает гораздо больше стандартных стилей, чем обычный Button.

2️⃣Material Theming — это способ, который позволяет правильно кастомизировать приложение конкретно под ваш дизайн.
При помощи MDC можно настраивать цвета, тип шрифта, форму для приложения и использовать их при помощи атрибутов.

3️⃣Темная тема. Поддержка тёмной темы — это распространённая фича в приложении.
MDC позволяет настраивать этот паттерн из коробки, учитывая настройки пользователя в системе.

4️⃣Material Motion. MDC предлагает целый раздел о том, как должны быть устроены переходы между экранами. Их не очень сложно применить в проект, но при этом само приложение выглядит гораздо живее.

5️⃣Jetpack Compose. Уже не в первый, и далеко не в последний раз мы будем говорим об этом новом фреимворке. MDC уже готовит свою кодовую базу для перехода с Compose в будущем, что существенно ускорит миграцию нам.

В целом, переход на Material Theme довольно прост и даёт преимущества. На него стоит перейти только ради стилей для стандартных виджетов, которые особенно круто выглядят на последних версиях Android.

Подробнее про эти преимущества можно почитать в этой статье.
​​Уменьшение времени старта приложения с I/O prefetching
#разработка #статьи

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

Разработчики обещают уменьшение времени старта приложения, как минимум 5%, на большом числе устройств, хотя некоторые из наблюдаемых приложений показывали улучшения более, чем на 25%.

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

Ребята подсчитали, что 80% популярных приложений из Google Play проводят больше 10% времени старта, блокируя I/O во время запуска, поэтому от этой фичи пользу получитат довольно многие приложения.

Подробнее о том, как работает OIRap можно почитать тут.
​​Как использовать Jetpack DataStore?
#разработка #статьи #опрос

С появлением Jetpack у нас появилось довольно много библиотек, делающих жизнь разработчиков проще. Думаю, что для многих не секрет, что недавно Google представили ещё одну крутую библиотеку — DataStore, которая призвана заменить старый добрый SharedPreferences, имеющий недостатки.

DataStore предлагает асинхронный API для работы с данными, в то время как SharedPreferences даёт такую возможность только при помощи listeners;
DataStore безопасно вызывать в UI-потоке, так как под капотом он использует Dispatchers.IO
DataStore лучше работает с Runtime Exceptions, в то время как SharedPreferences могут вызывать ошибки при парсинге, которые сложнее поймать;
• есть API для миграции с SharedPreferences;
• работают на основе Coroutines и Flow из коробки.

В общем, это довольно мощная библиотека, которую вскоре будут использовать большинство приложений. 🤓
Ну а если ваше приложение может использовать alpha-версии библиотек, то у вас уже есть возможность попробовать эту библиотеку.

Хорошая статья с пошаговым руководством тут.

Как вам библиотека? На мой взгляд, получилось довольно круто.
​​С днем программиста, друзья!

Время мчится, за окном осень и приходит наш профессиональный праздник 🤗.
Сегодня 256 день в году, 12 сентября, и уже несколько лет именно в этот день отмечается день программиста.

Желаю всем нам крутых проектов, интересных задач, профессионального и личностного роста. А завтрашний день лучше используйте, чтобы провести его в теплом круге друзей, а не сидя за IDE.👨‍💻

Хорошего вам Дня программиста и выходных!
​​Лимит уведомлений от одного приложения
#разработка #статьи

Задумывались ли вы, есть ли ограничение на максимальное количество уведомлений от одного приложения? Если попытаться найти какие-то упоминания об этом в документации, то там не будет какой-то внятной информации об этом. Однако, такой лимит существует.

Автор статьи провёл исследование и пришёл к выводу, что количество уведомлений от одного приложения контролируется производителем смартфонов.
Например, у Google Pixel 3A максимальное количество уведомлений равно 25, а у OnePlus 6T или Samsung — 50.

Вы можете подумать: но ведь 25 уведомлений — это много, что уж говорить про 50. Но если ваше приложение завязано на уведомлениях (например мессенджер), то такое ограничение может привести к некорректной работе приложения, и тем более сервисов.

Так что рекомендую проверить своё приложение, если оно может выводить такое количество уведомлений пользователю.
​​Не используйте LiveData в репозиториях
#разработка #статьи

Одной из частых ошибок при разработке приложений является использование LiveData в репозиториях. Связано это прежде всего с тем, что изначально Google советовали использовать её подобным образом.

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

Альтернативой LiveData будет использование Flow, который имеет больше контроля над местом, где он исполняется. Подробнее об этом можно почитать тут.
​​WorkManager. Базовая информация
#разработка #новичкам

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

Если вы не так давно в мобильной разработке или хотите упорядочить свои знания по нему, то рекомендую две статьи.

Первая даёт базовые основы использования WorkManager: какие зависимости добавить, какие есть типы операций и параметры для них.

Вторая описывает работу с WorkManager чуть дальше и рассказывает о цепочках запросов, прогрессе, статусе операции и как завершить текущую работу.
Жизнь разработчика в Израиле
#интервью #экспаты

Друзья, первая статья из новой рубрики на канале готова.

Она получилась объёмной и рассматривает большинство вопросов жизни в Израиле и отвечает на те вопросы, которые вы задавали: как найти работу, какая там зарплата, насколько легко получить визу и гражданство, как хорошо развита медицина и быт в целом.
Была проделана огромная работа, и я надеюсь, что вам понравится статья.😎

Ссылка на статью тут, обязательно ставьте лайки (их можно поставить не один раз, а аж 50😁) !

Ещё приятный момент. Я долго размышлял, нужен ли каналу чат, и понял, что он не будет лишним, ведь в нём мы сможем обсуждать всё, что происходит на канале, в частности подобные статьи (их можно обсудить там же с героем).
Поэтому, если у вас останутся вопросы к Андрею (герою статьи), то вы можете задать их в @android_live_chat, а самыми интересными я дополню статью.😏

Давайте сделаем наш чатик уютным и интересным!
​​Paging3
#jetpack #чтонового

Совсем недавно появилась, так называемая, третья версия Paging-библиотеки, созданная для улучшения загрузки данных по частям и отображения их в списках.

Текущая версия — 3.0.0-alpha03.

Что нового?
🔸полностью написана на Kotlin;
🔸поддерживает Coroutines и Flow из коробки, как и RxJava с LiveData;
🔸кэширует данные в памяти, чтобы помочь в распределении системных ресурсов и загрузки данных без задержек;
🔸улучшенный адаптер для RecyclerView;
🔸встроенная поддержка обработок ошибок, повторных запросов и обновлений.

Подробнее
Ссылка на статью с примерами использования тут.
Пример codelab с Paging3 тут.
​​Mobius 2020
#конференции

Думаю, что большинству разработчиков известна конференция Mobius. Напомню, что это крутая техническая конференция, целиком посвящённая мобильной разработке. Ну и доклады от экспертов, которые из первых рук делятся своими наработками со всеми.

В этом году конференция стала online и пройдёт с 11 по 14 ноября. Нас ждёт: 4 дня эфира, несколько треков, около 20 докладов, воркшопы и Q&A-сессии.

Для подписчиков канала ребята дают скидку на билеты из категории Personal в 1500 рублей: AndroidLive2020aupc.

Программа потихоньку заполняется, и сейчас самое время купить билеты по более низкой цене. Ссылка с информацией тут.
2025/09/06 13:59:27
Back to Top
HTML Embed Code: