⌨️ DSL в Kotlin: от теории к практике
Приглашаем на открытый урок.
🗓 20 ноября в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
Программа вебинара:
✔️ Что такое DSL и зачем он нужен в современной разработке
✔️ Основные элементы Kotlin для создания DSL: лямбды, infix-функции, расширения
✔️ Практические примеры использования DSL в Gradle, Ktor и TeamCity
Вебинар будет полезен:
Бэкенд-разработчикам на Kotlin, тимлидам и всем, кто хочет писать более чистый и поддерживаемый код.
В результате вебинара:
Научитесь создавать собственные DSL и применять их при разработке
🔗 Ссылка на регистрацию: https://vk.cc/cRbPWm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Приглашаем на открытый урок.
🗓 20 ноября в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
Программа вебинара:
Вебинар будет полезен:
Бэкенд-разработчикам на Kotlin, тимлидам и всем, кто хочет писать более чистый и поддерживаемый код.
В результате вебинара:
Научитесь создавать собственные DSL и применять их при разработке
🔗 Ссылка на регистрацию: https://vk.cc/cRbPWm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Claude Code лучше всего работает как мультишаговый агент — выполняя задачу итеративно, внося изменения и проверяя, совпадает ли результат с целевым.
Рассмотрим один из способов наделить Claude Code (далее — «CC») возможностью использовать свои мультимодальные способности для просмотра результатов SwiftUI-кода — с помощью Swift Snapshot Testing. Мы изучим, как усилить его способности к анализу изображений через вызов инструментов (tool calling). И, наконец, проверим, насколько успешно он справится с задачей воссоздания SwiftUI-вида по эталонному изображению.
Стратегия, описанная в этом материале, оптимизирована для юнит-тестирования SwiftUI-вью в изоляции (без строки состояния, с гибкими размерами и т. д.). В конце поста кратко рассмотрим другие подходы к визуализации.
https://twocentstudios.com/2025/07/13/giving-claude-code-eyes-to-see-your-swiftui-views/
#ios
👉 @developer_mobila
Рассмотрим один из способов наделить Claude Code (далее — «CC») возможностью использовать свои мультимодальные способности для просмотра результатов SwiftUI-кода — с помощью Swift Snapshot Testing. Мы изучим, как усилить его способности к анализу изображений через вызов инструментов (tool calling). И, наконец, проверим, насколько успешно он справится с задачей воссоздания SwiftUI-вида по эталонному изображению.
Стратегия, описанная в этом материале, оптимизирована для юнит-тестирования SwiftUI-вью в изоляции (без строки состояния, с гибкими размерами и т. д.). В конце поста кратко рассмотрим другие подходы к визуализации.
https://twocentstudios.com/2025/07/13/giving-claude-code-eyes-to-see-your-swiftui-views/
#ios
👉 @developer_mobila
👍1
🤝 Swift и C++: Прямая дружба без посредников
Долгое время использование C++ кода в iOS-разработке означало написание утомительных Objective-C++ (
Артур Гручала выпустил подробный гайд «Swift and C++ interoperability in practice», где разбирает, как настроить прямое взаимодействие двух языков на реальном примере.
Что внутри статьи:
🔹 Настройка с нуля: Как подружить Xcode, SwiftPM и CMake для сборки гибридного проекта.
🔹 Практика: Прямой вызов C++ классов и функций из Swift-кода.
🔹 Типы данных: Как передавать сложные структуры между языками (mapping types).
🔹 Подводные камни: Управление памятью, module maps и нюансы, о которых стоит знать заранее.
Если у вас есть легаси на C++ или вы хотите внедрить высокопроизводительные библиотеки в свой Swift-проект без лишней боли — это мастрид.
https://arturgruchala.com/swift-and-c-interoperability-in-practice/
#ios
👉 @developer_mobila
Долгое время использование C++ кода в iOS-разработке означало написание утомительных Objective-C++ (
.mm ) оберток. Но с выходом новых версий Swift ситуация кардинально изменилась.Артур Гручала выпустил подробный гайд «Swift and C++ interoperability in practice», где разбирает, как настроить прямое взаимодействие двух языков на реальном примере.
Что внутри статьи:
🔹 Настройка с нуля: Как подружить Xcode, SwiftPM и CMake для сборки гибридного проекта.
🔹 Практика: Прямой вызов C++ классов и функций из Swift-кода.
🔹 Типы данных: Как передавать сложные структуры между языками (mapping types).
🔹 Подводные камни: Управление памятью, module maps и нюансы, о которых стоит знать заранее.
Если у вас есть легаси на C++ или вы хотите внедрить высокопроизводительные библиотеки в свой Swift-проект без лишней боли — это мастрид.
https://arturgruchala.com/swift-and-c-interoperability-in-practice/
#ios
👉 @developer_mobila
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Mesh для Flutter: синхронизация данных без облака, серверов и боли
🗓 26 ноября в 20:00 МСК на открытом уроке вы узнаете, как построить децентрализованное Flutter-приложение, где данные синхронизируются через Bluetooth, Wi-Fi Direct и WebRTC — без облака и API. Мы покажем архитектуру Flutter Mesh, в которой каждое устройство становится полноценным узлом локальной сети. Разберём, как работает peer-to-peer-обмен, как тестировать mesh-архитектуру и подключать новую open-source библиотеку flutter_mesh. На практике создадим демо-приложение, которое само находит соседей и передаёт данные напрямую.
❗️ Если вы хотите выйти за рамки клиент-серверной модели и научиться строить автономные сети — этот урок для вас.
📖 Открытый вебинар проходит в преддверии старта курса «Flutter Mobile Developer». Регистрация открыта: https://vk.cc/cRu9RQ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👎1
Современные блокировки в Swift: мьютекс и фреймворк Synchronization
Фреймворк Synchronization вводит мьютексы — современные блокировки Swift для создания исключительного доступа к данным. Он отлично работает с Swift Concurrency и предоставляет решение для не-sendable типов, без введения накладных расходов на акторы.
Swift предлагает несколько решений для блокировки доступа к изменяемому контенту и предотвращения так называемого состояния гонки. Блокировки, такие как NSLock, DispatchSemaphore или последовательная DispatchQueue, являются популярным выбором для многих. В некоторых статьях сравнивается их производительность и указывается, какая из них работает лучше всего, но я хотел бы представить вам современный вариант блокировки Swift, представленный в SE-433 Synchronous Mutual Exclusion Lock.
В этой статье я не буду рассказывать, какой блокировщик работает лучше всего, и не буду сравнивать их с этим новым вариантом. Каждый блокировщик может иметь свой профиль производительности и свои особенности. В этой статье мы рассмотрим стандартизированную версию так называемого мьютекс блокировщика.
https://www.avanderlee.com/concurrency/modern-swift-lock-mutex-the-synchronization-framework/
#ios
👉 @developer_mobila
Фреймворк Synchronization вводит мьютексы — современные блокировки Swift для создания исключительного доступа к данным. Он отлично работает с Swift Concurrency и предоставляет решение для не-sendable типов, без введения накладных расходов на акторы.
Swift предлагает несколько решений для блокировки доступа к изменяемому контенту и предотвращения так называемого состояния гонки. Блокировки, такие как NSLock, DispatchSemaphore или последовательная DispatchQueue, являются популярным выбором для многих. В некоторых статьях сравнивается их производительность и указывается, какая из них работает лучше всего, но я хотел бы представить вам современный вариант блокировки Swift, представленный в SE-433 Synchronous Mutual Exclusion Lock.
В этой статье я не буду рассказывать, какой блокировщик работает лучше всего, и не буду сравнивать их с этим новым вариантом. Каждый блокировщик может иметь свой профиль производительности и свои особенности. В этой статье мы рассмотрим стандартизированную версию так называемого мьютекс блокировщика.
https://www.avanderlee.com/concurrency/modern-swift-lock-mutex-the-synchronization-framework/
#ios
👉 @developer_mobila
👍1
🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!
На курсе:
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Dev Hub
Основы AGSL для android разработчика
В последние годы интерфейсы приложений становятся все более интерактивными. Простого эффекта нажатия на кнопку уже недостаточно - пользователи ждут живых анимаций и визуальной глубины. Но создание таких эффектов традиционно требовало от разработчиков значительных усилий.
Представь: тебе нужно «поколдовать» над пикселями прямо в UI - добавить живой градиент, искажение картинки под пальцем, стеклянный блеск карточке и тому подобные эффекты. Раньше для этого приходилось прибегать к «тяжеловесам» таким как OpenGL/Vulkan, либо мучить CPU постобработкой битмапов. AGSL (Android Graphics Shading Language) решает это элегантнее: это язык фрагментных шейдеров, встроенный в сам графический стек Android, так что эффекты применяются прямо на уровне отрисовки интерфейса.
https://habr.com/ru/articles/971992/
👉@androidspb
В последние годы интерфейсы приложений становятся все более интерактивными. Простого эффекта нажатия на кнопку уже недостаточно - пользователи ждут живых анимаций и визуальной глубины. Но создание таких эффектов традиционно требовало от разработчиков значительных усилий.
Представь: тебе нужно «поколдовать» над пикселями прямо в UI - добавить живой градиент, искажение картинки под пальцем, стеклянный блеск карточке и тому подобные эффекты. Раньше для этого приходилось прибегать к «тяжеловесам» таким как OpenGL/Vulkan, либо мучить CPU постобработкой битмапов. AGSL (Android Graphics Shading Language) решает это элегантнее: это язык фрагментных шейдеров, встроенный в сам графический стек Android, так что эффекты применяются прямо на уровне отрисовки интерфейса.
https://habr.com/ru/articles/971992/
👉@androidspb
👍2
Утечка памяти: детективная история с Xcode
Я не мог предположить, что при повторном входе пользователя в систему возникнет такая серьезная проблема, как «половина функций нашего приложения дублируется в памяти». И что у нее есть такое простое решение, как перемещение захвата [weak self] на одну строку вверх.
Недавно я столкнулся с забавной ошибкой, связанной с глубокими ссылками.
Иногда при нажатии на push-уведомление некоторые пользователи сообщали, что целевой экран появляется дважды — приложение открывалось, переходило на нужный экран, но переход между экранами происходил дважды.
Я начал расследование, не подозревая, насколько глубокой окажется эта кроличья нора.
https://www.emergetools.com/blog/posts/the-memory-leak-an-xcode-detective-story
#ios
👉 @developer_mobila
Я не мог предположить, что при повторном входе пользователя в систему возникнет такая серьезная проблема, как «половина функций нашего приложения дублируется в памяти». И что у нее есть такое простое решение, как перемещение захвата [weak self] на одну строку вверх.
Недавно я столкнулся с забавной ошибкой, связанной с глубокими ссылками.
Иногда при нажатии на push-уведомление некоторые пользователи сообщали, что целевой экран появляется дважды — приложение открывалось, переходило на нужный экран, но переход между экранами происходил дважды.
Я начал расследование, не подозревая, насколько глубокой окажется эта кроличья нора.
https://www.emergetools.com/blog/posts/the-memory-leak-an-xcode-detective-story
#ios
👉 @developer_mobila
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Как сделать свой оператор Flow и не сломать логику приложения
Когда стандартных операторов Flow становится мало — значит, вы вышли на следующий уровень. На открытом уроке вы узнаете, как писать свои операторы для сложных сценариев, управлять потоками данных и правильно обрабатывать события в Kotlin. Мы покажем, как реализовать собственный оператор, работать с несколькими потоками в рамках одного и не потерять производительность.
❗️ Разберём подходы, которые помогают писать читаемый и поддерживаемый асинхронный код. Урок будет полезен Android-разработчикам уровня junior+, которые уже знакомы с Flow и хотят разобраться, как расширять его под реальные задачи.
🗓 8 декабря, 20:00 МСК. Открытый урок проходит в преддверии старта курса «Android Developer. Professional». Регистрация открыта: https://vk.cc/cRY1g7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Когда стандартных операторов Flow становится мало — значит, вы вышли на следующий уровень. На открытом уроке вы узнаете, как писать свои операторы для сложных сценариев, управлять потоками данных и правильно обрабатывать события в Kotlin. Мы покажем, как реализовать собственный оператор, работать с несколькими потоками в рамках одного и не потерять производительность.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Compose animations - Android Developers Backstage
Chapters:
Intro (00:00)
Animation capabilities of Compose (1:06)
Different types of animation specs (3:43)
Layers of functionality, transitions (7:49)
TargetBasedAnimation (9:48)
Vectors & velocity of color change (12:43)
Second layer parallel to animation spec (16:39)
Animation interruptions (18:48)
Motion layout problem-solving (20:19)
Both scale and move in question (25:45)
Different mental models for layout animation in Compose vs. View (26:20)
Shared element (31:05)
Are there things you wish more people were aware of? (34:19)
What's the tooling story for this? (41:57)
What is Look Ahead? (43:16)
All software is regret (48:49)
New API: Modifier.animateBounds (51:52)
How to reach Doris – leave a comment (55:57)
Motion Frame of Reference Placement (57:29)
Wrap up (59:10)
https://www.youtube.com/watch?v=kFtFP5dBJDo
#Android
👉 @developer_mobila
Chapters:
Intro (00:00)
Animation capabilities of Compose (1:06)
Different types of animation specs (3:43)
Layers of functionality, transitions (7:49)
TargetBasedAnimation (9:48)
Vectors & velocity of color change (12:43)
Second layer parallel to animation spec (16:39)
Animation interruptions (18:48)
Motion layout problem-solving (20:19)
Both scale and move in question (25:45)
Different mental models for layout animation in Compose vs. View (26:20)
Shared element (31:05)
Are there things you wish more people were aware of? (34:19)
What's the tooling story for this? (41:57)
What is Look Ahead? (43:16)
All software is regret (48:49)
New API: Modifier.animateBounds (51:52)
How to reach Doris – leave a comment (55:57)
Motion Frame of Reference Placement (57:29)
Wrap up (59:10)
https://www.youtube.com/watch?v=kFtFP5dBJDo
#Android
👉 @developer_mobila
YouTube
Compose animations - Android Developers Backstage
In this episode, Chet, Romain, and Tor chat with Doris Liu from the Compose team about animations in Compose -- covering everything from the basic primitives up to the recently added Shared Element Transitions.
Chapters:
Intro (00:00)
Animation capabilities…
Chapters:
Intro (00:00)
Animation capabilities…
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🛫 Flutter + Telegram: создаём полноценное веб-приложение с ботом и интерфейсом
Мир mini-apps в Telegram растёт, и теперь вы можете стать частью этого тренда. На открытом уроке вы узнаете, как соединить Flutter Web и Telegram Bot API, создать интерактивный интерфейс и развернуть приложение на Firebase Hosting. Мы разберёмся, как использовать dart:js_interop, связать Flutter Web-приложение с Telegram-ботом и настроить всё так, чтобы ваше приложение заработало прямо в мессенджере.
❗️ Занятие будет полезно Flutter- и Fullstack-разработчикам, которые хотят выйти за рамки мобильной разработки и использовать Flutter для современных Telegram-мини-приложений.
🗓 11 декабря в 20:00 МСК. Открытый урок проходит в преддверии старта курса «Flutter Mobile Developer». Регистрация открыта: https://vk.cc/cS9Ygm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Мир mini-apps в Telegram растёт, и теперь вы можете стать частью этого тренда. На открытом уроке вы узнаете, как соединить Flutter Web и Telegram Bot API, создать интерактивный интерфейс и развернуть приложение на Firebase Hosting. Мы разберёмся, как использовать dart:js_interop, связать Flutter Web-приложение с Telegram-ботом и настроить всё так, чтобы ваше приложение заработало прямо в мессенджере.
❗️ Занятие будет полезно Flutter- и Fullstack-разработчикам, которые хотят выйти за рамки мобильной разработки и использовать Flutter для современных Telegram-мини-приложений.
🗓 11 декабря в 20:00 МСК. Открытый урок проходит в преддверии старта курса «Flutter Mobile Developer». Регистрация открыта: https://vk.cc/cS9Ygm
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Custom Keyboards SwiftUI - iOS 16+
В этом видео я собираюсь показать, как создавать пользовательские клавиатуры для текстовых полей с использованием SwiftUI
источник
#ios
👉 @developer_mobila
В этом видео я собираюсь показать, как создавать пользовательские клавиатуры для текстовых полей с использованием SwiftUI
источник
#ios
👉 @developer_mobila
👍3
Ускоряем Android-приложения с помощью Baseline Profiles
Привет, меня зовут Даниль Гатиатуллин, я инженер юнита Performance в Авито. Наша команда отвечает за производительность приложения Авито: мы следим за скоростью старта приложения и отрисовки экранов, качеством скролла, отслеживаем сетевые ошибки и занимаемся оптимизациями.
В этой статье я расскажу, что такое Baseline Profiles, как он ускоряет запуск программы и каким приложениям он принесет больше пользы. В качестве примера возьму наш эксперимент, который ускорил время запуска приложения на 15%. Также расскажу, как мы автоматизировали добавление профилей в каждый релиз.
https://habr.com/ru/companies/avito/articles/842218/
#Android
👉 @developer_mobila
Привет, меня зовут Даниль Гатиатуллин, я инженер юнита Performance в Авито. Наша команда отвечает за производительность приложения Авито: мы следим за скоростью старта приложения и отрисовки экранов, качеством скролла, отслеживаем сетевые ошибки и занимаемся оптимизациями.
В этой статье я расскажу, что такое Baseline Profiles, как он ускоряет запуск программы и каким приложениям он принесет больше пользы. В качестве примера возьму наш эксперимент, который ускорил время запуска приложения на 15%. Также расскажу, как мы автоматизировали добавление профилей в каждый релиз.
https://habr.com/ru/companies/avito/articles/842218/
#Android
👉 @developer_mobila
👍1