TGViewer
Channel Public Channel
Mobile Native ️️

Mobile Native ️️

@mobile_native

Полезные материалы по мобильной разработке. Статьи, подборки, нововведения, анонсы.

Пробустить канал → https://t.me/mobile_native?boost

Автор: @artemiygreg
iOS / Swift: @swift_tips
Библиотеки и инструменты: @mobile_dev_tools
Митапы: @meetup_today
Subscribers
5.38K
Photos
1.2K
Videos
18
Links
1.3K

Showing posts older than #1173 · Back to latest

Older Posts 20 shown
Post #1171 5.19K
Про пагинацию

Я тут досматриваю очередной публичный собес и решил поделиться своими мыслями, касаемо пагинации.

Когда ребята проектировали реализацию списка объявлений, естественно затронули тему пагинации. Георгий предложил использовать пагинацию через Cursor и кажется он забыл сказать про одно важное преимущество этого способа – Гибкость. В чём же собственно гибкость? Попробую объяснить.

Давайте на примере пагинации через Page, посмотрим как мы взаимодействуем с бэком. Обычно в запросе мы передаём параметры вида page=1, size=20. При такой реализации бэкенд жестко привязан именно к этим параметрам и такому формату. Если допустим на бэке нужно будет поменять какую-то внутреннюю логику, то с большей вероятностью, это либо не получится сделать, либо нужно будет вносить правки на клиенте.

А теперь давайте посмотрим как мы взаимодействуем с бэком через Cursor. При использовании способа через Cursor, мы в запросе передаём полученный с бэка Cursor – обычно это строка, в которой закодированны какие-то данные(уникальный id, token, либо что-то подобное). При запросе первой пачки мы ничего не знаем о Cursor, передаём дефолтное значение(null или пустую строку), в ответ бэк нам присылает актуальный Cursor, который мы передаём в следующем запросе и так до тех пор, пока не закончатся данные.

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

То есть, теоретически можно сделать так: в курсор запихать Cursor="page=1", закодировать, вернуть в ответе клиенту, клиент в свою очередь отправит этот Cursor на бэк, бэк декодирует Cursor, вернёт следующую пачку данных и Cursor="page=2". Таким образом клиент будет взаимодействовать с бэком через курсорную пагинацию, но внутри бэк будет использовать постраничную. Это чисто пример для наглядности, так делать не надо 😁
  • 👍 20
  • 🔥 5
  • ❤ 3
  • 🤔 1
Post #1170 3.65K
ViewModel + Kotlin Multiplatform. Пробуем нативное решение

Тут Гугловцы подвезли поддержку ViewModel для Kotlin Multiplatform.

Анна Жаркова подготовила статью с обзором изменений и примером использования.

Читать (Ru)
  • ❤ 11
  • 🔥 8
  • 👍 4
  • 🤡 2
  • 🤗 1
Post #1168 3.22K
Avoid "Useless" Cases in Layered Architecture

Автор рассказывает про бесполезность UseCase`ов, которые не содержать логики и предлагает избавляться от таких сущностей, дабы не засорять кодовую базу.

Существуют разные мнения на этот счёт: кто-то предпочитает использовать по необходимости, кто-то вообще не использует UseCase`ы и т.д. Я считаю, нужно либо использовать везде, либо не использовать вообще. Но лучше использовать 😉 и вот почему:

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

Во-вторых – Переиспользование. Если мы переиспользуем UseCase`ы, при любых изменениях в будущем, нам не нужно будет вносить правки во все места, где используется текущая функциональность. При использовании репозитория напрямую, нужно будет вносить везде.

В-третьих – Стандарт. Если уж используется слоёная архитектура, то зачем игнорировать один из слоёв?! 🤔

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

Читать (En)
  • 👍 17
  • 💩 6
  • 👎 4
  • ❤ 2
  • 🔥 2
  • 🤔 1
  • 🤮 1
  • 🙏 1
Post #1167 3.67K
Вы за это заплатите! Цена Чистой Архитектуры

Статья о способах обеспечения масштабируемости проекта и как этому может навредить неправильное восприятие Чистой Архитектуры.

👉 Цена и ценность. Немного теории
👉 Для чего нужен SOLID?
👉 На чём основана Чистая Архитектура
👉 Непонимание терминологии
👉 Противопоставление Чистой Архитектуры другим архитектурам
👉 Что делает Чистую Архитектуру дорогой?
👉 Примеры

Читать (Ru)
  • 👍 7
  • 🔥 6
  • 🤔 3
  • 😁 1
  • 🏆 1
Post #1165 3.42K
Optimize App Performance By Mastering Stability in Jetpack Compose

Ещё одна статья про управление стабильностью в Jetpack Compose и понимание внутренней работы Compose для повышения производительности вашего приложения.

👉 Jetpack Compose Phases
👉 Understanding Stability
👉 Inferring Composable Functions
👉 Stability Annotations
👉 Stabilize Composable Functions
👉 Stability In Multi-Module Architecture
👉 Strong Skipping Mode

Читать (En)
  • 👍 10
  • 🔥 2
  • ❤ 1
Post #1164 3.63K
Seven recipes to understand flows and asynchrony in Kotlin

Статья с наглядными примерами, про асинхронность в Kotlin и flows в частности: зачем нужны flows, отличия горячих от холодных, как преобразовать коллбеки в suspend функции и flows и т.д.

👉 Java callbacks, the bad old days
👉 Doing callbacks the Kotlin way: suspendCoroutine
👉 Suspend functions can only return once
👉 Using callbackFlow to return multiple things from an async callback
👉 Collecting a flow
👉 Cold flows and awaitClose
👉 SharedFlow and multiple collectors
👉 Sharing a cold flow, making it hot

Читать (En)
  • ❤ 8
  • 👍 4
  • 🔥 3
Post #1162 5.82K
Как и где практиковаться начинающему мобильному разработчику

В статье рассказывается, как начинающим разработчикам можно прокачивать свои знания и применять их на практике.

👉 Пет-проекты
👉 Известные приложения
👉 Вклад в Open Source
👉 Хакатоны
👉 Тестовые задания
👉 Стажировки
👉 Решение алгоритмических задач
👉 Портфолио на Github

Читать (Ru)
  • ❤ 6
  • 🔥 4
  • 💩 4
  • 👍 1
Post #1159 3.46K
Container transform animation with Jetpack Compose

На данный момент в Jetpack Compose нет поддержки shared element transitions, но если вам хочется сделать нечто подобное, читайте статью.

Там рассказывается, как сделать похожее с помощью AnimatedContent.

Читать (En)
  • ❤ 8
  • 👍 6
  • 🔥 2
  • 🤔 1
Post #1157 3.14K
Hilt, ViewModels & Assisted Injection

Если пропустили, там это, в Hilt подвезли поддержку Assisted Injection. Если используете Hilt, в статье смотрите как использовать.

Читать (En)
  • 👍 7
  • 🤔 3
  • 🤮 2
  • ❤ 1
  • 👎 1
  • 🔥 1
Post #1156 2.97K
What’s new in Android Studio Iguana

Обзор фичей новой Android Studio Iguana.

Debugging
• Version control in App Quality Insights
• View Crashlytics in App Quality Insights

Design
• Jetpack Compose UI Check
• Progressive rendering for Compose Preview

Develop
• Intellij platform update

Testing
• Baseline Profiles wizard
• Espresso Device API
• The latest Android Virtual Devices

Build
• Support for Gradle Version Catalogs
• Policy issue warnings in Google Play SDK Index
• CompileSDK version support

Читать (En) | Смотреть (En)
  • 👍 9
  • 🔥 3
  • 🤔 1
  • 🥱 1
Post #1155 3.02K

Forwarded from Swift Tips

Как работает async/await в Swift

Статья-перевод про то, как устроен async/await под капотом, чего можно добиться и какие нюансы следует учитывать при работе с async/await.

👉 Swift и цель обеспечения безопасности памяти
👉 Проблема конкурентности в Swift
👉 Async/await изнутри
👉 Cooperative Thread Pool
👉 Исполнители
👉 Паттерн async/await
👉 Задачи и структурированный параллелизм
👉 Защита общего изменяемого состояния: акторы
👉 Заключение

Оригинал тут: How async/await works internally in Swift

Читать (Ru)
  • 🔥 9
  • ❤ 3
  • 👍 3
  • 🥰 1
  • 👨‍💻 1
Post #1154 3.44K
Автоматизируем рутину в Android разработке: плагин для создания шаблонного кода на примере создания -api -impl модулей

Разработчик платформенной команды Альфа-Бизнес рассказывает, как можно автоматизировать повторяющуюся работу в андроид-разработке при помощи плагина для Android Studio, на примере отдельных -api -impl модулей.

Читать (Ru)
  • 🔥 10
  • 🤔 7
  • 👍 4
  • 👎 2
Post #1152 3.58K
Рисуем эффект «Таноса» на Android

Большая и подробная статья про то, как реализовать эффект «Таноса» как в телеге при удалении сообщений.

В телеге при удалении сообщений, они распадаются на множество частиц, словно по щелчку Таноса (в исходниках Telegram Android эффект так и назван – ThanosEffect).

А вот тут можно посмотреть, как реализовать спойлеры как в телеге под iOS на SwiftUI.

Читать (Ru)
  • 🔥 13
  • 👍 6
  • ❤ 2
Post #1151 4.41K
Kotlin Coroutines Concepts

Большая статья про корутины, flow и channels с примерами.

👉 What is a Coroutine?
👉 Suspending Function
👉 Coroutine Builders
👉 CoroutineScope
👉 CoroutineContext, Distpatchers and threads
👉 Job
👉 SupervisorJob
👉 Channels
👉 Flow

Читать (En)
  • 🔥 19
  • 👍 4
  • ❤ 3
Post #1150 3.4K
Проводим и проходим собеседование по системному дизайну

Вторая часть про организацию процесса собеседования.

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

👉 Вспоминаем, что такое системный дизайн
👉 Интегрируем системный дизайн в свой процесс интервью(инструменты, требования, подготовка, тайминги)
👉 Маркеры, сигналы и темы для обсуждения(хард скиллы, софт скиллы)

Читать (Ru)
  • 👍 5
  • 🔥 4
  • 🤔 2
  • 🤮 2
  • ❤ 1
Post #1149 3.69K
Дорогие девушки, с Международным женским днём вас. Весеннего настроения, исполнения желаний и успехов во всех начинаниях. С Праздником 🌷🌷🌷
  • 👍 6
  • 👎 4
  • ❤ 2
  • 🥰 1
Post #1148 4.1K
Обновление AppMetrica: предсказания LTV (lifetime value) и оттока

Новый инструмент Предикты строится на базе ML-технологий Яндекса с использованием анонимных данных из нескольких десятков тысяч приложений.

Вот, что можно делать с помощью Предиктов:

👉 Оптимизировать рекламные кампании на пользователей с высоким LTV;
👉 Находить рекламные каналы с высокой рентабельностью;
👉 Своевременно начинать работу по удержанию пользователей;
👉 Строить прогнозы, когда есть информация о монетизации в приложении, а также, когда ее нет;
👉 Настроить модель под поведение пользователей конкретного приложения, увеличивая точность прогноза до 99%.

Читать (Ru)
  • 🔥 4
  • 👍 3
  • 🤔 2
  • 👎 1
  • 👏 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →