🔥🔥 Попробуйте компилятор K2 в своих проектах для Android
Компилятор Kotlin переписали под Kotlin 2.0. Новая реализация компилятора под кодовым названием K2 значительно повышает скорость сборки, чем оригинальный. Он также имеет более гибкую архитектуру, которая позволит внедрять новые языковые функции после версии 2.0.
Чтобы попробовать новый компилятор, обновитесь до Kotlin 1.9 и добавьте строчку в gradle.properties:
kotlin.experimental.tryK2=true
Плагины и инструменты, зависящие от интерфейса компилятора Kotlin, также нужно обновить, чтобы добавить поддержку K2. Некоторые инструменты уже имеют экспериментальную поддержку K2: например, Jetpack Compose поддерживает K2 начиная с версии 1.5.0.
#новость
Компилятор Kotlin переписали под Kotlin 2.0. Новая реализация компилятора под кодовым названием K2 значительно повышает скорость сборки, чем оригинальный. Он также имеет более гибкую архитектуру, которая позволит внедрять новые языковые функции после версии 2.0.
Чтобы попробовать новый компилятор, обновитесь до Kotlin 1.9 и добавьте строчку в gradle.properties:
kotlin.experimental.tryK2=true
Плагины и инструменты, зависящие от интерфейса компилятора Kotlin, также нужно обновить, чтобы добавить поддержку K2. Некоторые инструменты уже имеют экспериментальную поддержку K2: например, Jetpack Compose поддерживает K2 начиная с версии 1.5.0.
#новость
👍5
👍👉 Фиксация размера touch target
Интересный ролик от AndroidDev по тонкостям UI и Material Design.
Touch target — это любой элемент пользовательского интерфейса, на который можно нажать или прикоснуться, например кнопка или чекбокс. Он должен быть достаточно большим, чтобы любой пользователь мог с ним взаимодействовать. Material Design рекомендует использовать размер touch target 48 x 48 dp.
Изучить
Интересный ролик от AndroidDev по тонкостям UI и Material Design.
Touch target — это любой элемент пользовательского интерфейса, на который можно нажать или прикоснуться, например кнопка или чекбокс. Он должен быть достаточно большим, чтобы любой пользователь мог с ним взаимодействовать. Material Design рекомендует использовать размер touch target 48 x 48 dp.
Изучить
❤3
🍏 Жадность яблоко сгубила...
Если кто не знал, то просто написать приложение под iOS и пользоваться только у себя на телефоне не получится. Пройдет неделя и программа перестанет запускаться п причине того, что у Provisioning-сертификата, который предоставляет Xcode, срок действия – всего неделя 😱
Плати ежегодный взнос в размере 99 баксов и твое хобби будет работать. Казалось бы — не такие большие деньги в год, но приложенько используется только на одном девайсе 🤨
В пункте 4.2, все подробно расписано, но это никуда не годится — Android же такого не начудил...
В общем, онли бизнес, и никуда не деться 😒
#новость
Если кто не знал, то просто написать приложение под iOS и пользоваться только у себя на телефоне не получится. Пройдет неделя и программа перестанет запускаться п причине того, что у Provisioning-сертификата, который предоставляет Xcode, срок действия – всего неделя 😱
Плати ежегодный взнос в размере 99 баксов и твое хобби будет работать. Казалось бы — не такие большие деньги в год, но приложенько используется только на одном девайсе 🤨
В пункте 4.2, все подробно расписано, но это никуда не годится — Android же такого не начудил...
В общем, онли бизнес, и никуда не деться 😒
#новость
🥱6👍2
🚶🚶 Войти в айти в 2023 без Java и диплома ВУЗа, синдром самозванца и беседа о найме в СНГ
Видос о девушке и о ее пути в мобильную разработку. Такие истории всегда очень мотивируют новичков: «У нее получилось — и я смогу!». В нашем случае, ей возможно повезло или есть какой-то секрет, но история имеет шанс на существование.
Если вы новичок или думаете ворваться в этот мир — не бойтесь, но легко не будет. Чудесных свершений и волшебников в голубых вертолетах тоже — только куча постоянной учебы (даже когда устроитесь) и горы кропотливого труда.
Удачи! 🙌 👏
Смотреть
#новость
Видос о девушке и о ее пути в мобильную разработку. Такие истории всегда очень мотивируют новичков: «У нее получилось — и я смогу!». В нашем случае, ей возможно повезло или есть какой-то секрет, но история имеет шанс на существование.
Если вы новичок или думаете ворваться в этот мир — не бойтесь, но легко не будет. Чудесных свершений и волшебников в голубых вертолетах тоже — только куча постоянной учебы (даже когда устроитесь) и горы кропотливого труда.
Удачи! 🙌 👏
Смотреть
#новость
👍6
🔤 Промпт-инжиниринг: как правильно писать запросы нейросетям
Разберём, что же такое промпт-инжиниринг и как научиться писать качественные запросы для языковых моделей.
Читать
Разберём, что же такое промпт-инжиниринг и как научиться писать качественные запросы для языковых моделей.
Читать
👍2
😎 Очередной #дайджест полезных статей мира Mobile:
✍️ Swift Transformers — набор утилит для использования языковых моделей (LLM) в приложениях на Swift
✍️ Применение metal shader-а к тексту в SwiftUI — разбор представленных на WWDC ’23 модификаторов вью
✍️ Эмпатичное проектирование — подходы к проектированию кода для ускорения старта сложного модульного приложения
✍️ Android Generic Kernel Image — как Google может (теоретически) заменить ядро Linux
✍️ Создание генератор изображений с AI на Flutter с чистой архитектурой — хорошая архитектура делает систему легкой для понимания, разработки, обслуживания и развертывания
✍️ Junior to senior: план действий для успешной карьеры инженера — об инвестициях в hard и soft skills и о шагах к этому
✍️ Swift Transformers — набор утилит для использования языковых моделей (LLM) в приложениях на Swift
✍️ Применение metal shader-а к тексту в SwiftUI — разбор представленных на WWDC ’23 модификаторов вью
✍️ Эмпатичное проектирование — подходы к проектированию кода для ускорения старта сложного модульного приложения
✍️ Android Generic Kernel Image — как Google может (теоретически) заменить ядро Linux
✍️ Создание генератор изображений с AI на Flutter с чистой архитектурой — хорошая архитектура делает систему легкой для понимания, разработки, обслуживания и развертывания
✍️ Junior to senior: план действий для успешной карьеры инженера — об инвестициях в hard и soft skills и о шагах к этому
🔥2
Как добавить React navigation в React Native?
Anonymous Poll
20%
yarn add react-navigation
32%
npm install react-navigation
23%
Никак
34%
Оба варианта верны
9%
Свой вариант
❗«Библиотека программиста» в поиске контент-менеджера для ведения телеграм-каналов
Ищем человека, который грамотно пишет, разбирается в контенте и в одной из этих трех тем:
👉Data Science
👉Frontend
👉мобильная разработка
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Подробнее о вакансии и форма для отклика — по ссылке.
Ждем вас в команде!
Ищем человека, который грамотно пишет, разбирается в контенте и в одной из этих трех тем:
👉Data Science
👉Frontend
👉мобильная разработка
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Подробнее о вакансии и форма для отклика — по ссылке.
Ждем вас в команде!
👍2🤔1
❗«Библиотека программиста» ищет девушек, работающих в IT — разработке, тестировании, информационной безопасности и других направлениях
Мы проводим новое исследование, посвященное специфике работы женщин в IT — от сложностей и недостатков в работе до гендерных стереотипов.
Пройдите короткий опрос — он анонимный и займет не более 10 минут вашего времени.
Ссылка тут.
Мы проводим новое исследование, посвященное специфике работы женщин в IT — от сложностей и недостатков в работе до гендерных стереотипов.
Пройдите короткий опрос — он анонимный и займет не более 10 минут вашего времени.
Ссылка тут.
👍4
🍏 Как работает диспетчеризация в iOS на практике 🍏
Диспетчеризация — процесс, при котором программа выбирает, какие инструкции выполнить при вызове метода.
Видов диспетчеризации есть 3:
Direct Dispatch
Table Dispatch, делится на virtual table и witness table
Message Dispatch
Если кратко, то исходя из этого, понимаем, что при вызове любого метода в Swift, до его обработки есть еще процесс диспетчеризации, в ходе которого, определяется нужная имплементация.
Если хотите подробностей — вот тут они есть 😉
# новость
Диспетчеризация — процесс, при котором программа выбирает, какие инструкции выполнить при вызове метода.
Видов диспетчеризации есть 3:
Direct Dispatch
Table Dispatch, делится на virtual table и witness table
Message Dispatch
Если кратко, то исходя из этого, понимаем, что при вызове любого метода в Swift, до его обработки есть еще процесс диспетчеризации, в ходе которого, определяется нужная имплементация.
Если хотите подробностей — вот тут они есть 😉
# новость
👍3❤1🔥1
Если вам нужно готовое решение для навигации, то есть интересный вариант.
Odyssey — декларативная мультиплатформенная навигационная библиотека для Multiplatform Compose. В комплекте идет подробная инструкция: как запустить, что настроить и прочие советы.
Для быстрого старта в gradle понадобится добавить две строки:
implementation("io.github.alexgladkov:odyssey-core:1.3.20")
implementation("io.github.alexgladkov:odyssey-compose:1.3.20")
Создать каркас навигации:
fun RootComposeBuilder.navigationGraph() {
screen("splash") { SplashScreen() }
screen("login") { LoginScreen() }
screen("main") { MainScreen() }
}
Установить RootController:
setContent {
val configuration = OdysseyConfiguration(canvas = this)
setNavigationContent(configuration) {
navigationGraph()
}
}
Пользоваться:
@Composable
fun SplashScreen() {
val rootController = LocalRootController.current
rootController.push("login")
}
Подробнее здесь
Odyssey — декларативная мультиплатформенная навигационная библиотека для Multiplatform Compose. В комплекте идет подробная инструкция: как запустить, что настроить и прочие советы.
Для быстрого старта в gradle понадобится добавить две строки:
implementation("io.github.alexgladkov:odyssey-core:1.3.20")
implementation("io.github.alexgladkov:odyssey-compose:1.3.20")
Создать каркас навигации:
fun RootComposeBuilder.navigationGraph() {
screen("splash") { SplashScreen() }
screen("login") { LoginScreen() }
screen("main") { MainScreen() }
}
Установить RootController:
setContent {
val configuration = OdysseyConfiguration(canvas = this)
setNavigationContent(configuration) {
navigationGraph()
}
}
Пользоваться:
@Composable
fun SplashScreen() {
val rootController = LocalRootController.current
rootController.push("login")
}
Подробнее здесь
👍2🥱1
Kiosk (Lock task mode) для Android: польза, кейсы применения и кастомизация
🏚️🏚️ Есть такое понятие, как Mobile device management — технологий для управления поведением устройств. О ее применении в iOS можно прочитать здесь, а про использование в Android — здесь.
В статье разбирается один из режимов этого механизма — Lock task mode (Kiosk-режим).
Коротко — этот режим блокирует какую-либо активность пользователя приложения т. е. выйти на хоум-скрин или открыть шторку с настройками нельзя. И даже доступ к другим приложениям запрещен. Это часто нужно для девайсов, которые используются только для одной конкретно цели:
➖ цифровая вывеска компании;
➖ демонстрационный стенд;
➖ вендинг-автомат;
➖ автомат для заказа еды/товаров (как в популярной сети питания);
➖ и еще масса вариантов.
📱📲Для реализации API используется класс DevicePolicyManager и его метода DevicePolicyManager.setLockTaskPackages(), в параметры которого следует передать ComponentName и список, состоящий из строк с указанием package name приложений, которые должны быть доступны в рамках Lock Task mode. Если нужно получить список таких приложений — юзаем метод DevicePolicyManager.getLockTaskPackages().
Все подробности тут
🏚️🏚️ Есть такое понятие, как Mobile device management — технологий для управления поведением устройств. О ее применении в iOS можно прочитать здесь, а про использование в Android — здесь.
В статье разбирается один из режимов этого механизма — Lock task mode (Kiosk-режим).
Коротко — этот режим блокирует какую-либо активность пользователя приложения т. е. выйти на хоум-скрин или открыть шторку с настройками нельзя. И даже доступ к другим приложениям запрещен. Это часто нужно для девайсов, которые используются только для одной конкретно цели:
➖ цифровая вывеска компании;
➖ демонстрационный стенд;
➖ вендинг-автомат;
➖ автомат для заказа еды/товаров (как в популярной сети питания);
➖ и еще масса вариантов.
📱📲Для реализации API используется класс DevicePolicyManager и его метода DevicePolicyManager.setLockTaskPackages(), в параметры которого следует передать ComponentName и список, состоящий из строк с указанием package name приложений, которые должны быть доступны в рамках Lock Task mode. Если нужно получить список таких приложений — юзаем метод DevicePolicyManager.getLockTaskPackages().
Все подробности тут
👍2🔥1
😎 Очередной #дайджест полезных статей по мобильной разработке:
👉 Flutter с поддержкой платформы ОС Аврора
👉 Продаём тимлиду идею Server/Backend-Driven UI — зачем он вообще нужен и как с ним работать
👉 Как правильно обучаться, загрузка файлов и как войти в IT — 3 докладчика с душещипательными темами
👉 Закругляем углы в iOS 17 и SwiftUI 5 с помощью Uneven Rounded Rectangle — как создать фигуру с конкретными закругленными углами в новом Swift-е
👉 Как изменить порядок элементов RecyclerView с помощью Kotlin — функционал drag & drop для RecyclerView
👉 KivyMD и разработка — хорошо выглядящее приложение на Python-фреймворке для кроссплатформенной разработки в стиле Google Material Design
👉 Flutter с поддержкой платформы ОС Аврора
👉 Продаём тимлиду идею Server/Backend-Driven UI — зачем он вообще нужен и как с ним работать
👉 Как правильно обучаться, загрузка файлов и как войти в IT — 3 докладчика с душещипательными темами
👉 Закругляем углы в iOS 17 и SwiftUI 5 с помощью Uneven Rounded Rectangle — как создать фигуру с конкретными закругленными углами в новом Swift-е
👉 Как изменить порядок элементов RecyclerView с помощью Kotlin — функционал drag & drop для RecyclerView
👉 KivyMD и разработка — хорошо выглядящее приложение на Python-фреймворке для кроссплатформенной разработки в стиле Google Material Design
❤2
Шаблоны кода Android Studio для экономии времени программирования
В студии уже есть несколько шаблонов для Kotlin и Jetpack Compose: void, fun0, fun1, fun2 — создание функции с требуемым количеством параметров или prevCol — создание коллекции compose previews.
Можно создавать и свои шаблоны: File → Settings → Editor → Live Templates.
Нажав «+» в правом верхнем углу, вы сможете добавить свою группу шаблонов или шаблон в существующую категорию.
Если вы добавляете новый шаблон, контекст должен быть определен в левом нижнем углу желтым предупреждающим знаком. Создавать можно не только для Kotlin — набор языков велик: Java, Dart, Gradle или что-нибудь еще.
Читать
#новость
В студии уже есть несколько шаблонов для Kotlin и Jetpack Compose: void, fun0, fun1, fun2 — создание функции с требуемым количеством параметров или prevCol — создание коллекции compose previews.
Можно создавать и свои шаблоны: File → Settings → Editor → Live Templates.
Нажав «+» в правом верхнем углу, вы сможете добавить свою группу шаблонов или шаблон в существующую категорию.
Если вы добавляете новый шаблон, контекст должен быть определен в левом нижнем углу желтым предупреждающим знаком. Создавать можно не только для Kotlin — набор языков велик: Java, Dart, Gradle или что-нибудь еще.
Читать
#новость
👍4
🔥 Вышел в свет SwiftUI Cookbook 🧑🍳
Это справочник по общим шаблонам создания пользовательских интерфейсов в SwiftUI, к которым вы можете быстро обращаться при написании кода.
Для кого?
Для всех, кто пишет код SwiftUI и хочет быстро вспомнить определенный синтаксис или технику. Каждый раздел является независимым — не придется листать раздел до конца, чтобы перейти к следующему.
Что внутри?
Рассматриваются общие проблемы, которые приходится решать при разработке пользовательских интерфейсов и макета.
Начать чтение
#новость
Это справочник по общим шаблонам создания пользовательских интерфейсов в SwiftUI, к которым вы можете быстро обращаться при написании кода.
Для кого?
Для всех, кто пишет код SwiftUI и хочет быстро вспомнить определенный синтаксис или технику. Каждый раздел является независимым — не придется листать раздел до конца, чтобы перейти к следующему.
Что внутри?
Рассматриваются общие проблемы, которые приходится решать при разработке пользовательских интерфейсов и макета.
Начать чтение
#новость
🔥3👍1
💉 💉 🤖 Kodein DI для Android
В мире DI (dependency injection) есть Dagger 2, Hilt или Koin. Есть еще Kodein ‼️
Он создавался изначально как DI для Kotlin (в то время для Android все DI были написаны на Java). Отсюда он и получил своё название — KOtlin DEpendency INjection. Поэтому за основы были взяты новые возможности, которые давал Kotlin, в отличие от Java:
➖ декларативный DSL,
➖inline функции и reified типы,
➖ infix функции.
Кто же он: DI или Service Locator
Service Locator — это паттерн, когда мы запрашиваем и получаем зависимости.
DI — это паттерн, когда наши классы получают зависимости откуда-то извне.
Опираясь на официальную доку, Kodein — это все вместе:
👉 если мы инджектим зависимости, то у нас режим Injection (DI);
👉 если мы запрашиваем и получаем зависимости, то у нас режим Retrieval (Service Locator)
Хотите подробностей? Вот!
#новость
В мире DI (dependency injection) есть Dagger 2, Hilt или Koin. Есть еще Kodein ‼️
Он создавался изначально как DI для Kotlin (в то время для Android все DI были написаны на Java). Отсюда он и получил своё название — KOtlin DEpendency INjection. Поэтому за основы были взяты новые возможности, которые давал Kotlin, в отличие от Java:
➖ декларативный DSL,
➖inline функции и reified типы,
➖ infix функции.
Кто же он: DI или Service Locator
Service Locator — это паттерн, когда мы запрашиваем и получаем зависимости.
DI — это паттерн, когда наши классы получают зависимости откуда-то извне.
Опираясь на официальную доку, Kodein — это все вместе:
👉 если мы инджектим зависимости, то у нас режим Injection (DI);
👉 если мы запрашиваем и получаем зависимости, то у нас режим Retrieval (Service Locator)
Хотите подробностей? Вот!
#новость
👍6❤1🥰1🥱1
В веселенькой форме познаем синглтон 😂
Синглтон гарантирует, что у определенного класса есть только один экземпляр, и предоставляет способ доступа к его экземпляру из любой точки кода. Это может показаться тривиальным, но возможности, которыми он обладает для последовательного поддержания состояния в разных частях приложения, часто бывают очень крутыми.
Ничего не понятно 😂😂 Поймем лучше на примере.
У вас есть универсальный пульт дистанционного управления (Singleton), управляющий всеми электронными девайсами в доме. Вам не понадобятся отдельные пульты (экземпляры) для каждого устройства, и где бы вы ни находились, вы знаете, что есть только один пульт (экземпляр), который нужно искать.
Преимущества синглтона 🌟
🔹 Общий доступ: Любая часть вашего приложения может получить доступ к Singleton.
🔹 Управление состоянием: Если бы наш универсальный пульт дистанционного управления имел функцию «last-used», он был бы последовательным, независимо от того, кто обращался к нему последним.
🔹 Управление ресурсами: Иногда создание нескольких экземпляров может быть дорогостоящим. С синглтонами вы управляете только одним.
Подробнее читаем здесь
Синглтон гарантирует, что у определенного класса есть только один экземпляр, и предоставляет способ доступа к его экземпляру из любой точки кода. Это может показаться тривиальным, но возможности, которыми он обладает для последовательного поддержания состояния в разных частях приложения, часто бывают очень крутыми.
Ничего не понятно 😂😂 Поймем лучше на примере.
У вас есть универсальный пульт дистанционного управления (Singleton), управляющий всеми электронными девайсами в доме. Вам не понадобятся отдельные пульты (экземпляры) для каждого устройства, и где бы вы ни находились, вы знаете, что есть только один пульт (экземпляр), который нужно искать.
Преимущества синглтона 🌟
🔹 Общий доступ: Любая часть вашего приложения может получить доступ к Singleton.
🔹 Управление состоянием: Если бы наш универсальный пульт дистанционного управления имел функцию «last-used», он был бы последовательным, независимо от того, кто обращался к нему последним.
🔹 Управление ресурсами: Иногда создание нескольких экземпляров может быть дорогостоящим. С синглтонами вы управляете только одним.
Подробнее читаем здесь
👍4
🔍Насколько легко «войти в айти»?
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
IT — перспективная отрасль с высокими зарплатами и огромной конкуренцией. Собираем ваши истории: расскажите, как вам удалось сменить профессию (или сразу найти себя), какие шаги вы для этого предприняли и с какими сложностями пришлось столкнуться.
👉Пройдите наш 10-минутный опрос по ссылке.
👍1
Jetpack Compose: осваиваем состояния
Состояние в Jetpack Compose — это то, с чем приходится сталкиваться примерно в 90% случаев в проектах, поэтому важно иметь представление, что это, и с чем его едят.
MutableState — это интерфейс, который содержит значение, которое можно изменить. Этот объект запускает рекомпозицию при изменении значения. Когда появляется новое значение, он проверяет, изменилось ли новое значение структурно — отличаются ли свойства старого объекта от свойств нового.
Всю эту деятельность можно контролировать:
➖ structuralEqualityPolicy() - распознает изменения, основанные на структурных изменениях объекта.
➖ neverEqualPolicy() - сравнивает отличия старого и нового объектов
➖ referentialEqualityPolicy() - учитывает изменение, если ссылка на память старого объекта отличается от ссылки на память нового.
#новость
Состояние в Jetpack Compose — это то, с чем приходится сталкиваться примерно в 90% случаев в проектах, поэтому важно иметь представление, что это, и с чем его едят.
MutableState — это интерфейс, который содержит значение, которое можно изменить. Этот объект запускает рекомпозицию при изменении значения. Когда появляется новое значение, он проверяет, изменилось ли новое значение структурно — отличаются ли свойства старого объекта от свойств нового.
Всю эту деятельность можно контролировать:
➖ structuralEqualityPolicy() - распознает изменения, основанные на структурных изменениях объекта.
➖ neverEqualPolicy() - сравнивает отличия старого и нового объектов
➖ referentialEqualityPolicy() - учитывает изменение, если ссылка на память старого объекта отличается от ссылки на память нового.
#новость
👍7
😱 Как выйти из IT: опасный бизнес 💣
По каким критериям оценивается программист? Что хочет бизнес? Как просить повышения? Когда стоит увольняться? Как быстро расти в компании?
Вышел новый видос-интервью Гладкова.
Это видео не для новичков. Оно для тех, кто уже все познал в мире программирования и хочет двигаться дальше. Но также оно и для новичков, потому что позволит вам взглянуть на ваше дело глазами другой стороны, глазами человека, который был программистом, а теперь думает как бизнесмен.
#новость
По каким критериям оценивается программист? Что хочет бизнес? Как просить повышения? Когда стоит увольняться? Как быстро расти в компании?
Вышел новый видос-интервью Гладкова.
Это видео не для новичков. Оно для тех, кто уже все познал в мире программирования и хочет двигаться дальше. Но также оно и для новичков, потому что позволит вам взглянуть на ваше дело глазами другой стороны, глазами человека, который был программистом, а теперь думает как бизнесмен.
#новость
👍1