Telegram Web
🔍 Сompanion object (также Singleton)

Объекты можно объявлять внутри класса, при этом нет каких-либо ограничений по их количеству. Но только один объект можно пометить ключевым словом companion object в рамках одного класса.

Синглтон-свойство companion object достигается за счет того, что он создается внутри класса в качестве статического поля. Он будет инициализирован при первом обращении к нему или при создании первого экземпляра класса, в котором он объявлен.

Важно отметить, что companion object будет инициализирован первым, а затем уже будет создан экземпляр класса:

class MyClass {
init {
// Выполняется всегда после инициализации companion object
}

companion object {
init {
// Выполняется всегда перед блоком init содержащего класса
}
}
}

val myClass = MyClass()


Такому объекту можно не указывать свое имя, и обращаться к методам и свойствам объекта через имя содержащего его класса без явного указания имени объекта.

class SomeClass {

companion object {
fun create()
}
}

val someClass = SomeClass.create()


Компилируется в public static final class на Java. Работает подобно ключевому слову static в Java.

🐸 Библиотека мобильного разработчика

#буст #MiddlePath #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👏3
🤖 Лучшие нейросети для повышения уникальности текста в 2025 году

Топ-10 нейросетей для создания уникального контента. Обзор Arcy, ChatGPT, YandexGPT и других сервисов с ценами, функциями и советами по повышению оригинальности текстов.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
2
👾 AI-агенты — настоящее, о котором все говорят!

Уже 3 октября стартует второй поток нашего нового курса «AI-агенты для DS-специалистов».

Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи.

На обучении вы соберёте полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.

🎓 В рамках курса вы научитесь:

1️⃣ адаптировать LLM под разные предметные области и данные
2️⃣ собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
3️⃣ строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.

🗓️ Завтра первый вебинар, успевайте залететь в ряды ИИ-первопроходцев 👈🏻
🔒 Поймай меня, если сможешь: как обнаружить Root и Frida

Мобильное приложение кажется достаточно безопасным: оно исполняется и хранит данные независимо от других приложений. Бизнес-логика реализована на сервере, а перед публикацией на маркетплейсе приложений его тестируют.

Но эти меры не защитят от злоумышленника, который изучит логику работы приложения и использует полученные данные для атаки. Различные модификации Android, такие как root-права и кастомная прошивка, позволяют злоумышленнику быстрее и детальнее исследовать приложение.

Таисия рассказала об опыте решения проблемы по обнаружению эмуляторов, устройств с root-правами или кастомными прошивками. А еще познакомила нас с набором инструментов Frida, позволяющих внедрять код в другие приложения буквально на лету. Рассмотрела возможности и принцип работы этого тулкита и описала метод по его обнаружению, который можно использовать в проекте.

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

👀 Смотреть доклад

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21😁1
⚙️ Оптимизация времени запуска мобильного приложения

Заметили, что ваше приложение долго запускается? Этот промпт поможет найти и устранить узкие места в процессе старта.

📝 Промпт:

Analyze and optimize mobile app startup time that includes:

— Measure cold/warm/hot start durations
— Identify main thread blockers during launch
— Optimize application class initialization
— Reduce dynamic feature module loading time
— Implement lazy loading for heavy components
— Optimize dependency injection setup
— Improve splash screen and initial UI rendering


💡 Расширения:

— Добавьте Implement asynchronous resource loading для параллельной загрузки ресурсов
— Добавьте Add startup tracing and performance monitoring для постоянного отслеживания
— Добавьте Optimize pre-dexing and multidex configuration для больших приложений

🐸 Библиотека мобильного разработчика

#буст #MiddlePath
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🔔 Анонс: CrossConf 2025

📅 Когда: 17 октября 2025
📍 Где: Москва
🌐 Официальный сайт: crossconf.ru

📌 О событии

CrossConf — крупнейшая конференция в России и СНГ, посвящённая кроссплатформенным технологиям.

В фокусе:

🔘 Flutter и его развитие в больших проектах
🔘 Kotlin Multiplatform: кейсы компаний, которые уже внедрили KMM
🔘 React Native и современные подходы к работе с ним
🔘 Практика, архитектура, опыт внедрения в продакш

🐸 Библиотека мобильного разработчика

#МитапПоинт
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📱 UITableView с различными типами ячеек

Создание таблицы с различными типами ячеек достаточно стандартная задача. Конечно, можно использовать различное ветвление при помощи if, else или switch, но лучше и практичнее использовать Дженерики.

👀 Смотреть видео

🐸 Библиотека мобильного разработчика

#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🚀 Курс «ИИ-агенты для DS-специалистов» уже стартовал

Первый вебинар успешно прошёл, участники уже начали разбираться, как использовать ИИ-агентов в реальных проектах.

Но всё самое интересное только начинается!

🔥 Впереди 4 мощных занятия — с практикой, инсайтами и разбором кейсов от экспертов.

💸 Сейчас действует специальная цена → 69.000 ₽ вместо 79.000 ₽.

Осталось всего 4 места.

Не упустите шанс прокачаться в том, что будет определять будущее индустрии.

👉 Забронировать место на курсе
🎓 Как вайб-кодинг меняет рынок IT-образования

В карточках разобрали, как именно меняется обучение будущих айтишников и к чему это может привести.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Для чего используется Guard

Оператор guard используется для передачи управления программой за пределы области видимости. Оператор guard похож на оператор if, но он запускается только тогда, когда некоторые условия не выполняются.

Например, оператор guard используется для выхода из функции:

func myFun() {
guard false else {
print("This block is run")
return
}
print("This is never run")
}

myFun()


Вывод:

This block is run


👉 Узнайте больше о ключевом слове guard, прочитав эту статью

🐸 Библиотека мобильного разработчика

#буст #JuniorKit #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🗓 Новости недели

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

🔵 Массивы в Swift

Разобрали, как устроены массивы в Swift под капотом: от базовых операций добавления и удаления до тонкостей работы с value/reference типами. Посмотрели на Copy-on-Write и устройство буфера. Также узнали, почему массивы - это всего лишь обёртки над хранилищем в куче, и чем ArraySlice отличается от обычного массива.

🔵Swift Codable

Поговорим ещё об одном встроенном типе Swift - Codable. Думаю, все, кто писал клиент-серверные приложения, сталкивались с этим протоколом: он позволяет преобразовывать наши структуры в бинарные данные и обратно. Однако, полагаю, немногие задумывались, как этот привычный механизм работает под капотом.

🔵 F-Droid против регистрации разработчиков Google

Это нарушение основополагающих принципов свободы слова и мысли, которые лежат в основе функционирования демократических обществ по всему миру.

🔵 Скрытые угрозы Room: почему база тормозит и как это исправить

Room не медленный. Медленным его делает неправильное использование.

🔵 Внедрение пуш-уведомлений в React Native: от Firebase до кастомных модулей

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

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
2
📌 Ключевое слово reified

reified — это ключевое слово, которое может быть использовано только в inline-функциях. reified позволяет получить информацию о типе generic-параметра во время выполнения программы. В обычном случае, информация о типах стирается и недоступна во время выполнения, но с помощью reified можно сохранять эту информацию и использовать в других частях приложения.

Несколько простых примеров применения:

1. Получить доступ к типу параметра во время выполнения

fun main() {
printType<String>() // String
printType<Int>() // Int
}

private inline fun <reified T> printType() {
println(T::class.simpleName)
}


В этом примере мы определяем функцию printType() с типовым параметром T, который мы указываем с помощью reified. Внутри функции мы можем получить тип T во время выполнения, используя T::class. Затем выводим название типа на экран с помощью simpleName. Когда мы вызываем функцию printType() с типом String или Int, она выводит соответствующий тип на экран.

2. reified вместе с is для проверки типа аргумента во время выполнения

fun main() {
println(isOfType<Int>(1)) // true
println(isOfType<Int>("Hello")) // false
}

private inline fun <reified T> isOfType(value: Any): Boolean {
return value is T
}


Здесь мы определяем функцию isOfType(), которая принимает значение типа Any и возвращает true, если оно является типом T. Мы используем reified, чтобы получить доступ к типу T во время выполнения. Затем мы используем оператор is для проверки типа значения и возвращаем соответствующее boolean значение.

3. Получить список элементов перечисления

enum class Color { RED, GREEN, BLUE }

fun main() {
printEnumValues<Color>() // RED, GREEN, BLUE
}

private inline fun <reified T : Enum<T>> printEnumValues() {
enumValues<T>().forEach { value ->
println(value)
}
}


Определяем функцию printEnumValues(), которая выводит список элементов перечисления типа T. Мы применяем reified, чтобы получить доступ к типу T во время выполнения. Затем используем enumValues<T>(), чтобы получить список всех значений перечисления типа T. Внутри цикла выводим каждое значение на экран. Когда мы вызываем функцию printEnumValues() с типом Color, она выводит "RED", "GREEN" и "BLUE" в консоль.

🐸 Библиотека мобильного разработчика

#буст #JuniorKit #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
2
2025/10/15 10:33:14
Back to Top
HTML Embed Code: