DroDev | Мобильная разработка: мысли вслух
529 subscribers
103 photos
226 links
Обсуждаю и рассказываю как сделать жизнь разработчика в команде интересной, легкой и продуктивной.

По всем вопросам @dilix90
Download Telegram
Впечатлило как #Compose из коробки поддерживает темную тему.

По факту для этого делать ничего и не надо. Вновь созданный проект использует Material из коробки и все базовые элементы уже приспособлены к смене темы 🔥
Когда лучше закидывать пост в канал? (Можно выбрать несколько)
Anonymous Poll
31%
Утром
20%
Днем
25%
Вечером
20%
Будни
14%
Выходные
39%
Мне все равно
А Key Promoter (плагин для AS) непхол, когда выполняешь какой-то экшн, подсказывает что для него есть хоткей.
Rainbow Brackets.
Классный плагин для AS, который подсвечивает скобки разным цветом.

Может звучать странно, но на самом деле визуально сильно помогает.
Смотрел примеры по навигации и поддержки разных форм-факторов на Compose.

Офф. пример JetNews:
https://github.com/android/compose-samples/tree/main/JetNews

Они используют NavComponent для верхнеуровневой навигации. Дальше, на home screen во viewModel держат текущий uIState:

data class HasPosts(
val postsFeed: PostsFeed,
val selectedPost: Post,
val isArticleOpen: Boolean,



В зависимости от размера экрана строят нужный compose.

По сути и лента и detailed page существуют в рамках одного «экрана» и на уровне UI решается как через Composable строить представление.

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

Или есть варианты интереснее?
Не самое очевидное применение Github Copilot.

В проекте есть дата классы на уровне общения с сервером. Надо было создать Sample Json из класса (в некоторых тестах, где то уже лежат разные части такого примера jsona).

Зашел в Data class, написал final val DemoResponseJsonDemo = и Copilot сам написал пример Jsona.

В следующем data классе достаточно было написать только final, чтобы Copilot понял что хочу пример Jsona.
Начал проходить собесы и в связи с фокусом на remote активно стал назначать созвоны.

Не могу не поделиться удобнейшей и бесплатной (в базе) тулзой Calendly.

Можно быстро выбрать удобные тебе слоты, скинуть ссылку и всё - профит. Человек сможет выбрать удобное для него время в его тайм зоне.
Раньше для работы с траффиком в приложении использовал charles или fiddler. Начиная с Flamingo Android Studio позволяет добавлять правила в Network Inspector 🔥

https://betterprogramming.pub/how-to-use-the-android-studio-network-inspector-to-debug-and-optimize-your-apps-network-requests-22f98dd02349
Есть ios, есть android, для одного свифт, для другого котлин.
Есть армия фронтедщиков на JS, им дали React Native, чтобы они могли кроме мобильной версии сайта сделать чуть более нативное приложение.
Есть kotlin разработчик, ему дают kotlin multiplatform, KMP compose (https://www.jetbrains.com/lp/compose-multiplatform/) и т.д., чтобы он мог запустить свое андроид приложение например в вебе или на ios.

А вот зачем вот тут флаттер нарисовался :) ?
Для кого он?
Одного из ботов (видимо статистики) видимо взломали. Прошу прощения за крайний пост, почистил и ботов и сообщение.
По Андроид разработке в РУ сегменте есть Android Broadcast, StartAndroid и другие.

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

По-этому решил слегка переформатировать формат контента.
Хочу попробовать писать НЕ только про Android разработку в техническом плане, а в целом про разработку продукта и то, с чем сталкиваюсь, как решаю и что делаю.

Например.
Прохожу system design interview, можно сделать выжимку что это, как прошло и зачем это вообще надо.
Искал долго баг, можно рассказать как искал и почему долго.

Получается из инфо канала про анроид пробую перейти в формат практических примеров в контексте разработки.
В примере о том, в каком формате буду писать упомянул System Design Interview.
Так это не с проста. С начала этого года с разной степенью интенсивности ищу новый проект.

Последние 4.5 года я провел на одном проекте и как-то не особо собесился в другие.
В одном из первых в этом новом цикле собесов пробовал залететь в проект. Прошел первую секцию с задачками, всё ок.

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

Тот собес я зафейлил с фидбеком "Хоть кандидат всё сделал нормально и всё работает, но вопросов мало задавал". После провала я пошел изучать в чем суть. Оказывается system design интервью очень сильно заточен на то как кандидат понимает задачу, спрашивает уточняющие вопросы и тд.

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

Для подготовки юзал ютуб канал проекта ByteByteGo и просто всё что находлось по запросу.

Главный вывод, который я сделал, то что к каждой секции надо готовиться, чтобы хотя бы понимать что от тебя хотят. Хотя это не панацея. Собеседовался в Glovo и там провалил последнюю секцию про "Cultural alignment". Хотя готовился. Об этом тоже расскажу, но потом.
Сейчас делаю мобилку для https://mapmagic.app/
Первая версия уже даже в закрытой бетке, скоро катнем на всех.

Изначально был вопрос на чем ехать, прототип даже на react native сделали.
Посмотрел на windy.com - у них в мобилке capacitorjs.com.

В очередной раз задумался когда нужная нативная, а когда crossplatform разработка.

ReactNative, Capasitorjs by Ionic - все про то, что если ты хорошо знаешь JS, то тебе не надо учить новый язык и можешь еще и мобилку написать. Не совсем супер нативную. Могут быть вопросики если нужно что-то не самое распространенное и тд.

Для себя пока отвечаю так.

Кроссплатформенное решение хорошо, когда
- Надо протестить MVP, сделать очень быстро и очень на коленке
- Уже есть команда крутых JS разработчиков, у которых есть время сделать мобилку
- Продукт подразумевает мобилку в основном как витрину (airbnb/booking/facebook)

Так как по-моему мнениею MapMagic про аппку как самостоятельный продукт и я не JS разработчик, то выбор пал на натив. А чтобы сократить время релиза (или увеличить, если не повезет 😄 ), всё что не касается UI делаю на kotlin multiplatform.

Есть Compose Multiplatform, когда можно и UI сделать на ios. Но пока что кажется, что в его текущей реинкарнации сделать нативный SwiftUI - более правильное решение.
Пробовал много разных "заметочных" программ - и evernote и маковские заметки и просто google docs 🙂
Пока что остановаился на Notion.

- Он умеет базовые таблички с формулами держать в заметках, что удобно, когда надо рассчеты вести
- Довольно простой и понятный интерфейс
- Удобные прилки на компе и на телефоне, но есть и веб морда
- Можно шарить отдельные страницы
- Есть разные темплейты для страниц
- Можно собрать мини-внутренний портал быстро и без боли

В общем для "личных" целей вообще пушка.
Пробовал вести в нем разработку, показалось не удобно, тут Jira, YouTrack и др. лучше справляются.

А вы чем пользуетесь?
На собесах бывают спршивают очень спацифичные вещи. Тут я даже не про дефолтный "как устроен hashmap". Однажды спросили - когда устанавливается аппка что происходит на устройстве.

Я не фанат under-the-hood движения. Я больше про горизонтальные знания. Например можно знать что такое и уметь применять корутины, но не знать в деталях как они работают. Зато знать что такое Кафка :)

Иногда глубокие знанеия требуются, но на моей практике редко. Если потребуется - можно разобраться. ИМХО куда важнее развить вдобавок софт скилы, знать что такое микросервисы на беке и иметь представления как писать на JS.
В Compose Multiplatform (это такой кросплатформенный Jetpack Compose на Android, Desktop, iOS, Web) есть вопрос к эффективному отображению, кешированию картинок. В Android для этого есть Picasso, Glide, Coil.

Так вот в Coil уже вот-вот завезут поддержку iOS 🔥
https://github.com/coil-kt/coil/issues/842
Please open Telegram to view this post
VIEW IN TELEGRAM
Начали за #KMP обсуждать.
Сейчас на проекте пробую максимально переиспользовать все что только можно.
При этом UI оставить нативным пока.
Полезности, которые для себя нашел:

- Decompose, подход который позволяет факту всё от даты до ViewModel написать кросплатформенное
- Список либ, который поддерживают КМП
- Kermit + crashlytics позволяет сделать универсальное логирование в КМП слое.
Еще момент с КМП - скорее всего kotlin будут писать Android разработчики.
Напишут, проверят что работает, зальют... и сломают iOS respective build 🙂

Нужен видимо процесс проверки всех платформ, в идеале автотестами.
С конца прошлого лета делал приложеньку для сервиса построения маршрута Mapmagic (раньше activetrip, manymap).

Как обычно есть 100500 штук, которые хочется улучшить, поправить и оптимизировать, но решили лучше катнуть чем можно раньше, собирать фидбек и импрувить по дороге 🙂

Отзывы (в личку и\или в маркет), замечания, вопросы привествуются:
https://play.google.com/store/apps/details?id=app.mapmagic.android

Из интересного:
- бОльшая часть аппки на #KMP. Ииспользовал Decompose чтобы логически написать viewModel (aka Component) один раз, а UI плагином прицепить на уровне платформы. Это дает теоритическую возможность вообще всю логику, в том число подготовку UI моделей сделать один раз.

- Карты на #maplibre+#maptiler сделаны на уровне платформы, а вот подготовка geoJson для отображения - кросплатформенно.

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

- Для #DI в КМП использован #Koin, а на уровне платформы его можно соединить и с Hilt/Swinject

- По ходу разработки нашел удобный сборник либ для КМП

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

https://play.google.com/store/apps/details?id=app.mapmagic.android