Java Memory Model
Для тех, кто любит копаться в том, что и как работает под капотом. Отличная статья, где описываются механизмы работы JMM.
Тема непростая, однако автор довольно хорошо объясняет сложные вещи простым языком. Ну и на собесе можно выпендриться, если что.
Для тех, кто любит копаться в том, что и как работает под капотом. Отличная статья, где описываются механизмы работы JMM.
Тема непростая, однако автор довольно хорошо объясняет сложные вещи простым языком. Ну и на собесе можно выпендриться, если что.
Хабр
Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме. В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да,...
🔥9👍3❤2
Styles API в Jetpack Compose 🚀
Интересного завезли. В Compose появился экспериментальный API для работы со стилями, который делает их изменение гораздо удобнее.
Сейчас работа с динамическими стилями требует немало ручного труда. И хотя
Ниже приведён пример кнопки, которая меняет цвет при состояниях
Выглядит неплохо, посмотрим, что будет дальше. Детали тут.
Интересного завезли. В Compose появился экспериментальный API для работы со стилями, который делает их изменение гораздо удобнее.
Сейчас работа с динамическими стилями требует немало ручного труда. И хотя
InteractionSource неплохо приспособлен для этих задач, Styles API упрощает процесс в разы.Ниже приведён пример кнопки, которая меняет цвет при состояниях
hovered и pressed.
@Composable
fun InteractiveButton(onClick: () -> Unit) {
ClickableStyleableBox(
onClick = onClick,
style = {
background(Color.Green)
size(150.dp)
hovered { animate { background(Color.Yellow) } }
pressed { animate { background(Color.Red) } }
}
)
}
Выглядит неплохо, посмотрим, что будет дальше. Детали тут.
Dove Letter
Jetpack Compose Style API: Reusable Styles for Composables
How the experimental Compose Style API lets you define reusable, typed style objects for composables. Examples, use cases, and tradeoffs inside.
🔥15👍6👎1
Google Checks
На днях наткнулся на полезный, но не очень популярный сервис от Google — Checks.
Платформа предназначена для автоматической проверки кода на compliance, безопасность и другие подобные штуки.
Если их не мониторить в больших компаниях можно отрести прилично проблем, а данный сервис помогает их предотвратить. Пока всё бесплатно, можно пробовать и решить, надо ли оно вам. Подходит для Android и iOS.
Пробовали? Поделитесь опытом в комментариях. Я вот добавил себе задачку, чтобы не забыть попробовать.
На днях наткнулся на полезный, но не очень популярный сервис от Google — Checks.
Платформа предназначена для автоматической проверки кода на compliance, безопасность и другие подобные штуки.
Если их не мониторить в больших компаниях можно отрести прилично проблем, а данный сервис помогает их предотвратить. Пока всё бесплатно, можно пробовать и решить, надо ли оно вам. Подходит для Android и iOS.
Пробовали? Поделитесь опытом в комментариях. Я вот добавил себе задачку, чтобы не забыть попробовать.
Google
Simplify compliance with Google | Checks
Discover an easier path to compliance with Google. Checks takes the guesswork out of building safer products by bringing privacy and engineering teams together through automated analysis.
👍6❤2🔥2
Samsung One UI fix
Если вы пользователь Samsung с последним обновлением One UI, то вас, как и меня, мог раздражать новый двойной свайп для открытия панели быстрых настроек.
Оказывается — можно это вернуть! Один из немногих YouTube Shorts, который сэкономил время.😄
Если вы пользователь Samsung с последним обновлением One UI, то вас, как и меня, мог раздражать новый двойной свайп для открытия панели быстрых настроек.
Оказывается — можно это вернуть! Один из немногих YouTube Shorts, который сэкономил время.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Samsung broke this
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
😐8🔥4❤2👍1
Обновление зависимостей с Gemini
Может вы, как и я, пропустили, что начиная с Android Studio Otter можно обновлять зависимости в toml-каталогах при помощи Gemini.
Процесс обновления зависимостей хоть и простойшах и мат AGP 9 , но довольно затратный по времени. Gemini может решить эту проблему, хотя в идеале такие задачи стоит выносить на CI/CD
Попробовать новую фичу просто:
🔴 открываем toml-каталог;
🔴 нажимаем на зависимость, требующую обновления;
🔴 выбираем пункт «Update all libraries with Gemini».✨
Может вы, как и я, пропустили, что начиная с Android Studio Otter можно обновлять зависимости в toml-каталогах при помощи Gemini.
Процесс обновления зависимостей хоть и простой
Попробовать новую фичу просто:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3👎2🔥2
Local History в Android Studio
Мне кажется, что это довольно полезная функция Android Studio, о которой знают далеко не все разработчики.
Если вы случайно дропнули важный код и не успели закоммитить его в Git, данные можно восстановить при помощи Local History.
Для этого кликаем в IDE правой кнопкой и нажимаем на LocalHistory -> Show History. Ну и а затем найдите наиболее подходящую версию.
Важно помнить, что этот инструмент не заменяет Git: локальная история хранится только на вашем компьютере. Кроме того, её легко стереть при очистке кэша. Будьте бдительны!
Мне кажется, что это довольно полезная функция Android Studio, о которой знают далеко не все разработчики.
Если вы случайно дропнули важный код и не успели закоммитить его в Git, данные можно восстановить при помощи Local History.
Для этого кликаем в IDE правой кнопкой и нажимаем на LocalHistory -> Show History. Ну и а затем найдите наиболее подходящую версию.
Важно помнить, что этот инструмент не заменяет Git: локальная история хранится только на вашем компьютере. Кроме того, её легко стереть при очистке кэша. Будьте бдительны!
🔥16👍7🥴5🤡2❤1👎1
Ну что, Android юзеры, как вам новое обновление Telegram?
Anonymous Poll
44%
Дно полное, зачем мне настройки в основном меню?
20%
Вроде ничего так, красиво
17%
Пользуюсь iOS
19%
Хочу просто результаты посмотреть
😁3🤔3❤2👀2
Project Accessors
На днях узнал о полезной настройке в Gradle, которая пригодится проектам с большим количеством модулей. Даже если она не решит критических проблем, то как минимум сделает код чище и эстетичнее.
Предположим, у нас есть модули
В целом, ок, но можно сделать аналогично тому, как мы работаем с зависимостями из toml-каталога:
Для этого достаточно зайти в корневой
Хотя фича и считается «экспериментальной», вроде работает вполне себе стабильно. Надеюсь, было полезно.
На днях узнал о полезной настройке в Gradle, которая пригодится проектам с большим количеством модулей. Даже если она не решит критических проблем, то как минимум сделает код чище и эстетичнее.
Предположим, у нас есть модули
core-ui и core-common. Обычно при их добавлении в другой модуль используется такой синтаксис:
implementation(project(":core:common"))
implementation(project(":core:ui"))
В целом, ок, но можно сделать аналогично тому, как мы работаем с зависимостями из toml-каталога:
implementation(projects.core.common)
implementation(projects.core.ui)
Для этого достаточно зайти в корневой
settings.gradle и добавить там строку enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS»)Хотя фича и считается «экспериментальной», вроде работает вполне себе стабильно. Надеюсь, было полезно.
👍19🥱12👏6
Дано: большой проект из 180 модулей и Claude Sonnet 4.5.
Сможет ли модель осуществить миграцию на AGP 9.0 без внешнего вмешательства? То есть начинаем с промта в любом виде -> модель шуршит -> успешный запуск проекта. Ваши прогнозы:👇
Сможет ли модель осуществить миграцию на AGP 9.0 без внешнего вмешательства? То есть начинаем с промта в любом виде -> модель шуршит -> успешный запуск проекта. Ваши прогнозы:
Anonymous Poll
19%
Да, всё получится: не самая сложная задача для модели
12%
Нет, захлохнет на полпути
48%
Нет, миграцию «сделает», но проект не запустится
0%
Свой вариант ответа
19%
Просто. Покажи. Результаты
❤2
AGP 9.0 — миграция через Claude Sonnet 4.5
Спасибо за ваши комментарии и обратную связь.
На самом деле в вопросе не было опечаток, хотя он и звучал довольно абстрактно. Попробую рассказать подробнее.
Ещё до выхода Sonnet 4.6 я решил попробовать перевести рабочий проект на последний AGP. Стандартный «мигратор» Android Studio не втащил: добавил какие-то необходимые файлы, но после него даже не вышло собрать проект. А вот Sonnet — смог.
Не скажу, что это сверхсложная задача с точки зрения программирования, но она весьма монотонная для ручного выполнения. Как раз то, что идеально подходит для ИИ.
Для начала я объяснил задачу в режиме планирования (plan-mode). Промт был довольно простым, но я добавил в него несколько официальных гайдов по переходу. После корректировки плана мной — агент начал рабоать… и справился!
Проект успешно собрался, зависимые библиотеки обновились до совместимых версий, а модель самостоятельно «протестировала» результат, проверив сборку всех конфигураций. У меня, кстати, в проекте есть KMP-модули, хотя и довольно простые с бизнес-логикой.
Так что AI сегодня — инструмент, который не стоит игнорировать. Просто пробуйте некоторые задачи доверять ИИ, попутно смотря, что он там делает.
Спасибо за ваши комментарии и обратную связь.
На самом деле в вопросе не было опечаток, хотя он и звучал довольно абстрактно. Попробую рассказать подробнее.
Ещё до выхода Sonnet 4.6 я решил попробовать перевести рабочий проект на последний AGP. Стандартный «мигратор» Android Studio не втащил: добавил какие-то необходимые файлы, но после него даже не вышло собрать проект. А вот Sonnet — смог.
Не скажу, что это сверхсложная задача с точки зрения программирования, но она весьма монотонная для ручного выполнения. Как раз то, что идеально подходит для ИИ.
Для начала я объяснил задачу в режиме планирования (plan-mode). Промт был довольно простым, но я добавил в него несколько официальных гайдов по переходу. После корректировки плана мной — агент начал рабоать… и справился!
Проект успешно собрался, зависимые библиотеки обновились до совместимых версий, а модель самостоятельно «протестировала» результат, проверив сборку всех конфигураций. У меня, кстати, в проекте есть KMP-модули, хотя и довольно простые с бизнес-логикой.
Так что AI сегодня — инструмент, который не стоит игнорировать. Просто пробуйте некоторые задачи доверять ИИ, попутно смотря, что он там делает.
🔥26🤔4👍3❤1
Borders в Compose
Любопытно. Автор статьи решил заморочиться тем, как реализовать эффект светящихся рамок вокруг элементов в Compose.🎨
В статье сравниваются различные подходы с точки зрения производительности: от использования обычных PNG-изображений до написания собственных шейдеров.
Не знаю, понадобится ли эти знания на практике, но само исследование выглядит интересно.
Любопытно. Автор статьи решил заморочиться тем, как реализовать эффект светящихся рамок вокруг элементов в Compose.
В статье сравниваются различные подходы с точки зрения производительности: от использования обычных PNG-изображений до написания собственных шейдеров.
Не знаю, понадобится ли эти знания на практике, но само исследование выглядит интересно.
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
How Many Ways Do You Know to Draw a Glowing Border in Jetpack Compose?
If I asked you how many ways you know to draw a glowing rounded-rectangle border in Jetpack Compose, what would your answer be? One? Two…
❤10👍6🔥4
Compose Preview под капотом
Полезная техническая статья о внутреннем устройстве аннотации Preview.
Было любопытно узнать, что Android Studio использует так называемый ComposeViewAdapter: по сути, xml-прослойка, где парсятся атрибуты +- как при создании кастомной View. А вы говорите, что xml всё, пора выбрасывать.😄
Дальше происходит ещё немного магии, с ней довольно просто разобраться, прочитав статью.
Полезная техническая статья о внутреннем устройстве аннотации Preview.
Было любопытно узнать, что Android Studio использует так называемый ComposeViewAdapter: по сути, xml-прослойка, где парсятся атрибуты +- как при создании кастомной View. А вы говорите, что xml всё, пора выбрасывать.
Дальше происходит ещё немного магии, с ней довольно просто разобраться, прочитав статью.
Please open Telegram to view this post
VIEW IN TELEGRAM
Dove Letter
@Preview in Jetpack Compose: Parameters and Internals
How the @Preview annotation renders in Android Studio. showSystemUi, PreviewParameterProvider, LocalInspectionMode, and the Compose pipeline inside.
👍11😁4❤2
Как работает Shazam?
Слышали фразу: «Любая достаточно развитая технология неотличима от магии»? Хотел поделиться одним интересным моментом, который у меня как раз и вызывает это чувство. АРечь пойдёт о том, как работает Shazam. И, вероятно, другие похожие сервисы.
Итак, начнём наш пятничный длиннопост.
Любой оцифрованный звуковой файл по сути представляет собой список чисел. При записи микрофон записывает громкость воздуха тысячи раз в секунду. Однако если записать одну и ту же песню на два разных устройства, с точки зрения цифровых данных файлы не будут идентичными.
Это логично: фоновые шумы, разная громкость, а может — и разные комнаты. Всё это влияет на финальный набор чисел.
Так что сравнить два звука вот так «в лоб» не выйдет. И Shazam использует весьма изящное решение.
🟢 вместо raw-файла он нарезает аудио на очень короткие кусочки по ~20–50 мс;
🟢 далее выполняется Преобразование Фурье (Fourier Transform). Я не силён в математике, и вероятно, мне сейчас накидают в комментах, но... после преобразования у нас получается набор тонов и понимание, какие частоты присутствуют в звуке, и насколько громкие они. Даже при наличии шума ключевые частотные пики остаются узнаваемыми.
🟢 благодаря коротким отрезкам Shazam знает не только частоты и громкость, но и то, когда именно они были в песне;
🟢 если сложить всю эту информацию вместе — получаем спектограмму песни: слева-направо время, снизу-вверх частота, а точки показывают «яркость» звука;
🟢 а потом алгоритм отбрасывает почти всю спектограмму, и оставляет только самые яркие точки. Остаются редкие маркеры в местах, где песня звучала громче всего, — это напоминает карту созвездий.
🟢 для каждой «якорной» точки Shazam просматривает близлежащие точки и спрашивает, как далеко они находятся как по времени, так и по частоте. Каждое такое соотношение превращается в уникальный код.
Среднестатистический трек длительностью около трёх минут генерирует тысячи таких меток. Shazam хранит их в базе данных для большинства существующих песен. При этом сервис кодирует не просто отдельные точки, а их пары и расстояние между ними — это позволяет находить совпадения даже в шумной среде.
Ваш телефон выполняет все эти преобразования очень быстро, и за считанные секунды Shazam точно определяет, что за песня сейчас играет.
Это ли не магия? А вы говорите, что алгоритмы не нужны.🧐
Слышали фразу: «Любая достаточно развитая технология неотличима от магии»? Хотел поделиться одним интересным моментом, который у меня как раз и вызывает это чувство. АРечь пойдёт о том, как работает Shazam. И, вероятно, другие похожие сервисы.
Итак, начнём наш пятничный длиннопост.
Любой оцифрованный звуковой файл по сути представляет собой список чисел. При записи микрофон записывает громкость воздуха тысячи раз в секунду. Однако если записать одну и ту же песню на два разных устройства, с точки зрения цифровых данных файлы не будут идентичными.
Это логично: фоновые шумы, разная громкость, а может — и разные комнаты. Всё это влияет на финальный набор чисел.
Так что сравнить два звука вот так «в лоб» не выйдет. И Shazam использует весьма изящное решение.
Среднестатистический трек длительностью около трёх минут генерирует тысячи таких меток. Shazam хранит их в базе данных для большинства существующих песен. При этом сервис кодирует не просто отдельные точки, а их пары и расстояние между ними — это позволяет находить совпадения даже в шумной среде.
Ваш телефон выполняет все эти преобразования очень быстро, и за считанные секунды Shazam точно определяет, что за песня сейчас играет.
Это ли не магия? А вы говорите, что алгоритмы не нужны.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥8❤2
Kotlin’s Builder Functions
На днях попалась короткая статья, где рассказывается о разных штуках в Kotlin для уменьшения бойлерплейта. Больший упор на создание списков, maps, strings и т.д.
Наверное, функцией buildString и buildList никого не удивишь, но вот я совсем забыл про
Выглядит прикольно. Поделитесь своими подобными лайфхаками, может кто-то и не знает то, что вы используетесь каждый день.
На днях попалась короткая статья, где рассказывается о разных штуках в Kotlin для уменьшения бойлерплейта. Больший упор на создание списков, maps, strings и т.д.
Наверное, функцией buildString и buildList никого не удивишь, но вот я совсем забыл про
buildSpannedString: в итоге получаем что-то типа:
buildSpannedString {
color(colorOne) { append(text1) }
color(colorTwo) { append(text2) }
}
Выглядит прикольно. Поделитесь своими подобными лайфхаками, может кто-то и не знает то, что вы используетесь каждый день.
Domen Lanisnik
Kotlin’s Builder Functions: A Better Way to Create Lists, Maps, Strings & Sets
Kotlin offers several convenience functions to create lists, maps, strings, and more without the usual boilerplate code.
👍16❤3
Google Android Skills
Тут Google завёл репозиторий со скиллами для LLM, которые напрямую связаны с Android-разработкой. Пока он небольшой, но со временем материалов наверняка станет больше. В списке уже есть:
🟢 миграция на AGP 9;
🟢 миграция на Compose с xml;
🟢 переход на Navigation Library 3;
🟢 анализатор R8;
Что ж, тенденция ещё раз подтверждается, так что обогащаем наших агентов новыми знаниями.
Тут Google завёл репозиторий со скиллами для LLM, которые напрямую связаны с Android-разработкой. Пока он небольшой, но со временем материалов наверняка станет больше. В списке уже есть:
Что ж, тенденция ещё раз подтверждается, так что обогащаем наших агентов новыми знаниями.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - android/skills
Contribute to android/skills development by creating an account on GitHub.
🔥17👍2
yt-dlp
Пост не про Android, но не могу не поделиться.
На днях папа попросил скачать ему видео с YouTube, чтобы посмотреть его позже на телевизоре. А желательно — не просто один ролик, а весь канал целиком, чтобы далеко не ходить.
Для скачивания одного видео решений масса. А вот для скачать весь канал уже задача со звёздочкой. К счастью, мне попалась ультимативная утилита для сохранения любых видео и аудио— yt-dlp. Даже не представляю, какой гений её создал.
Она хоть и консольная, но невероятно мощная и кастомизируемая. В моём случае я смог:
🟢 выбрать не самое высокое качество видео, чтобы уменьшить размер и улучить стабильность на бюджетном телезизоре;
🟢 «прикинуться» браузером, чтобы скачивать без лишних сложностей: YouTube сейчас блокирует ботов, поэтому утилита сама предложила использовать эту опцию;
🟢 выбрать только одну звуковую дорожку;
🟢 загрузить сначала плейлисты, а потом и остальные видео. Без повторов.
В общем, если перед вами когда-нибудь встанет подобная задача — вы знаете, в какую сторону копать. Лучшего решения всё равно не найти.
Пост не про Android, но не могу не поделиться.
На днях папа попросил скачать ему видео с YouTube, чтобы посмотреть его позже на телевизоре. А желательно — не просто один ролик, а весь канал целиком, чтобы далеко не ходить.
Для скачивания одного видео решений масса. А вот для скачать весь канал уже задача со звёздочкой. К счастью, мне попалась ультимативная утилита для сохранения любых видео и аудио— yt-dlp. Даже не представляю, какой гений её создал.
Она хоть и консольная, но невероятно мощная и кастомизируемая. В моём случае я смог:
В общем, если перед вами когда-нибудь встанет подобная задача — вы знаете, в какую сторону копать. Лучшего решения всё равно не найти.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader
A feature-rich command-line audio/video downloader - yt-dlp/yt-dlp
👍41❤8👌4🔥2
Koin Migration
Ещё один MCP в копилку. Разработчики из Koin написали тулзу, которая поможет мигрировать текущий проект практически с любого DI-фреймворка на Koin.
Полагаю, что современные языковые модели в какой-то степени справятся с этой задачей и самостоятельно, но с данным решением переезд станет гораздо комфортнее.
Люблю Koin, считаю его одним из самых удачных dependency-библиотек.
Ещё один MCP в копилку. Разработчики из Koin написали тулзу, которая поможет мигрировать текущий проект практически с любого DI-фреймворка на Koin.
Полагаю, что современные языковые модели в какой-то степени справятся с этой задачей и самостоятельно, но с данным решением переезд станет гораздо комфортнее.
Люблю Koin, считаю его одним из самых удачных dependency-библиотек.
GitHub
GitHub - InsertKoinIO/koin-migration: Koin + Koin Compiler Plugin migration — reference docs and AI skill that automate the move…
Koin + Koin Compiler Plugin migration — reference docs and AI skill that automate the move from Hilt/Dagger/Toothpick/Kodein/manual DI to the Koin Compiler Plugin. - InsertKoinIO/koin-migration
👍19🔥7🙈1
Заметил интересный тренд в связи с появлением AI.
Люди массово публикуют скриншоты своих подписок на Claude Code и Codex, показывая исчерпанные лимиты в максимальных тарифах. Ну и полагают, что раз токены закончились, то и работа была продуктивной.
Однако чаще всего это говорит лишь о том, что ты потратил все токены. Эффективность этих трат — совсем другой вопрос.
Люди массово публикуют скриншоты своих подписок на Claude Code и Codex, показывая исчерпанные лимиты в максимальных тарифах. Ну и полагают, что раз токены закончились, то и работа была продуктивной.
Однако чаще всего это говорит лишь о том, что ты потратил все токены. Эффективность этих трат — совсем другой вопрос.
😁29💯28👍4🤷♂2❤1
Ну что — помянем
Google переводит их в режим поддержки, выпуская исключительно критические исправления.
Теперь Compose First подход официально.
Но, думаю,
View ⚰️Google переводит их в режим поддержки, выпуская исключительно критические исправления.
Fragment, кстати тоже всё. Теперь Compose First подход официально.
Но, думаю,
View останутся с нами ещё надолго: слишком много качественных приложений написано именно на них.Android Developers
Android is Compose-first | Jetpack Compose | Android Developers
Android is Compose-first, and the Views system is now in maintenance mode, meaning it will only receive updates for highly critical fixes.
👍22😢16👎3❤1🔥1
Что за Gemma 4?
Одним из не очень громких, но, на мой взгляд, важных анонсов Google I/O была поддержка Gemma 4 прям из IDE.
Android Studio и раньше поддерживала локальные модели, но теперь можно просто скачать себе подходящую модель напрямую, чуть ли не как SDK. В итоге вы получаете вполне приличного ИИ-ассистента.
Как я и сказал, модель локальная: подойдёт, если не хочется платить за подписки или использование сторонних моделей запрещено корпоративными правилами. Ну и вообще, тренд с локальными моделями мне нравится.
И хоть Gemma 4 и не самая топовая в бенче — всё равно будет полезной для разного рода задач.
Для запуска надо прилично RAM, так что бояре с 48+ гигами оперативы снова в тренде.
Одним из не очень громких, но, на мой взгляд, важных анонсов Google I/O была поддержка Gemma 4 прям из IDE.
Android Studio и раньше поддерживала локальные модели, но теперь можно просто скачать себе подходящую модель напрямую, чуть ли не как SDK. В итоге вы получаете вполне приличного ИИ-ассистента.
Как я и сказал, модель локальная: подойдёт, если не хочется платить за подписки или использование сторонних моделей запрещено корпоративными правилами. Ну и вообще, тренд с локальными моделями мне нравится.
И хоть Gemma 4 и не самая топовая в бенче — всё равно будет полезной для разного рода задач.
Для запуска надо прилично RAM, так что бояре с 48+ гигами оперативы снова в тренде.
👍9