Telegram Web Link
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость

Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

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

📅 Сроки: прием новостей до 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Осталась неделя — ждем ваших новостей!
🗓 IT Календарь: события мая

LinkMeetup14 мая, Москва

One Day Offer ЕДИНОГО ЦУПИС14 – 16 мая, Санкт-Петербург, онлайн

Митап «Cloud․ru Tech Lab: DevOps» 22 мая, Москва, онлайн

One Day Offer в VK для Go-разработчиков 24 мая, онлайн

QA Meetup SberHealth28 мая, онлайн, Москва

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔒 Инструмент недели: ZipArchive

SSZipArchive — простая библиотека для архивации и разархивации файлов на iOS, macOS, tvOS, watchOS и visionOS. Умеет распаковывать zip-файлы, в том числе защищенные паролем или зашифрованных AES, создавать архивы такие же архивы — с паролями и шифрованием (в том числе и прямо из NSData).

💻 SSZipArchive на GitHub

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 ТОП-46 курсов по iOS-разработке

Если вы хотите стать профессионалом в создании мобильных приложений, курсы iOS-разработчика — это отличный старт для вашего карьерного пути. Осваивая Swift, Objective-C и другие ключевые технологии, вы сможете разрабатывать качественные и эффективные приложения для платформы iOS.

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

👉 Читать подробнее

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Команда дня: git push -u origin

Ключ -u (полный вариант --set-upstream) создаёт в удалённом репозитории ветку, соответствующую локальной и связывает их.

Пример: git push -u origin master

Эта команда используется для отправки закоммиченных файлов в удаленный репозиторий (также известный как GitHub) в указанной ветке.

Используйте эту команду, когда вы впервые отправляете файлы в удаленный репозиторий. Он зафиксирует место, куда вы отправляете эти файлы. И в следующий раз можно будет использовать команду git push.

💡 Знали о такой штуке?

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Чек-лист: оптимизация мобильного приложения

Чтобы ваше приложение работало быстро и без лагов, проверьте выполнение этих пунктов:

✔️ UI и рендеринг
Используйте RecyclerView/LazyColumn для списков
Оптимизируйте сложные анимации
Избегайте overdraw (лишняя отрисовка)
Минимизируйте вложенность layout-файлов

✔️ Данные и сеть
Кэшируйте запросы (OkHttp, Retrofit)
Используйте пагинацию для больших данных
Оптимизируйте работу с базой данных (Room, Realm)
Сжимайте изображения (WebP, Glide/Picasso)

✔️ Производительность
Замеряйте FPS (чтобы избежать дропов)
Проверьте утечки памяти (LeakCanary)
Оптимизируйте холодный/горячий старт
Минимизируйте размер APK (ProGuard, R8)

Как оценить результат? Измерьте до и после:
– Время запуска приложения
– Потребление памяти (Android Studio Profiler, Xcode Instruments)
– Размер APK/IPA
– Скорость отклика интерфейса

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Compose Multiplatform 1.8.0

Вчера JetBrains официально объявили о выходе CMP 1.8.0, c которой поддержка iOS переходит в статус stable. Это важный этап, поскольку теперь CMP можно всерьез рассматривать как основу для кроссплатформенной мобильной разработки.

В этой статье автор знакомит с обновлением и рассматривает заявленные фишки, а заодно говорит о результатах опытов с CMP на «боевом» проекте.

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🎧 Подкасты и видео о мобильной разработке

Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.

🔵 Зачем нужен виртуальный дисплей в Андроиде?

🔵 Чего боится твой тимлид?

🔵 Разработчик и стартап: работать | основать | избегать?

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
💼⌛️ ТОП-5 причин, почему программист не может долго найти работу

Месяцы поиска работы и ноль офферов? Возможно, ты сам саботируешь свой успех. Рассказываем о пяти распространенных ошибках, которые мешают программистам найти работу мечты.

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 Chrome vs. FireFox vs. Opera vs. ...

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

Каждый браузер имеет свои козыри: Chrome — бешеную популярность и интеграцию с Google-сервисами, Firefox — открытый исходный код и приватность, Opera — встроенные фишки для разработчиков.

А где же истина? Какой браузер предпочитаете вы? Голосуйте и пишите своё мнение в комментариях 💬

❤️ — Chrome
👍 — FireFox
👏 — Opera
🌚 — другие

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 В чем здесь проблема и как вы можете ее решить?

Рассмотрим этот фрагмент кода, который пытается получить цвет темы из локального хранилища устройства iOS:

var color = UserDefaults.standard.string(forKey: "themeColor")!  
print(color)


Ответ:

Первая строка извлекает цвет темы из user defaults. Этот метод, однако, возвращает optional (поскольку themeColor может быть не определен). Если ключ не найден, возвращается nil, что приводит к крашу:

fatal error: unexpectedly found nil while unwrapping an Optional value

Это происходит потому, что в первой строке используется ! для force unwrap optional, которое теперь nil. Force unwrapping должно использоваться только тогда, когда вы на 100% уверены, что значение не nil.

Чтобы исправить это, вы можете использовать optional binding для проверки, найдено ли значение для ключа:

if let color = defaults.stringForKey("themeColor") { print(color)}


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

#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👏 Топ-вакансий для мобильных разработчиков за неделю

Java / Kotlin разработчик (Software Engineer)до 450 000 ₽, гибрид (Москва)

Junior iOS developer/Младший iOS разработчикдо 150 000 ₽, гибрид (Москва)

iOS разработчикдо 450 000 ₽, гибрид (Москва, Санкт-Петербург)

Android-разработчикот 150 000 ₽, офис (Москва, Санкт-Петербург)

Android Developerот 4 500 до 5 500 €, удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Mobile jobs

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
✏️ Шпаргалка: как можно получить тип класса?

1. Получение типа класса через функцию ::class

Функция ::class возвращает объект KClass, который содержит информацию о типе класса во время выполнения.

class Person(val name: String, val age: Int)

fun main() {
val person = Person("John", 30)
println(person::class) // выводит "class Person"
}


2. Получение типа класса через функцию
javaClass

Функция javaClass возвращает объект Class, который содержит информацию о типе класса во время выполнения.

class Person(val name: String, val age: Int)

fun main() {
val person = Person("John", 30)
println(person.javaClass) // выводит "class Person"
}


3. Получение типа класса через функцию
::class.java

Вызов функции ::class.java на объекте типа KClass возвращает объект Class, который содержит информацию о типе класса во время выполнения.

class Person(val name: String, val age: Int)

fun main() {
val person = Person("John", 30)
println(person::class.java) // выводит "class Person"
}


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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾 Kotlin Multiplatform: как писать код один раз и покорить все платформы

Kotlin давно перерос статус языка «только для Android». Благодаря технологии Kotlin Multiplatform (KMP), он позволяет создавать приложения, которые работают на JVM, iOS, macOS, вебе и других платформах, сохраняя единый код бизнес-логики.

В статье — без лишнего пафоса о том, как устроена архитектура KMP, чем она отличается от Flutter и React Native, как работает сборка, где границы общего и платформенного кода и почему это решение подходит командам, стремящимся к эффективности без компромиссов.

➡️ Читать статью

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

#cвежак
Please open Telegram to view this post
VIEW IN TELEGRAM
📱 How to: оптимизировать работу с API в мобильных приложениях

Проблема: Долгая загрузка данных, лишние запросы и падение приложения при плохом интернете.

1️⃣ Кеширование данных

Используйте Room (Android) или CoreData (iOS) для локального хранения:

// Android + Kotlin  
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getUsers(): Flow<List<User>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun saveUsers(users: List<User>)
}

// iOS + Swift  
func saveUsers(_ users: [User]) {
let context = persistentContainer.viewContext
users.forEach { user in
let entity = UserEntity(context: context)
entity.id = user.id
entity.name = user.name
}
try? context.save()
}


2️⃣ Пагинация

Делите данные на страницы:

🔵 Android: Paging 3 + RemoteMediator
🔵 iOS: UICollectionViewDiffableDataSource + async/await

3️⃣ Повтор запросов при ошибках

// iOS  
func fetchWithRetry(maxAttempts: Int = 3) async throws -> Data {
for attempt in 1...maxAttempts {
do {
return try await fetchData()
} catch {
if attempt == maxAttempts { throw error }
try await Task.sleep(nanoseconds: 1_000_000_000 * UInt64(attempt))
}
}
fatalError("Unreachable")
}


4️⃣ Оптимизация JSON

🔵 Используйте kotlinx.serialization (Android) и Codable (iOS)
🔵 Исключайте ненужные поля через @Transient / @Ignore

5️⃣ HTTP-кеширование

// Android + OkHttp  
val client = OkHttpClient.Builder()
.cache(Cache(cacheDir, 10 * 1024 * 1024)) // 10 MB
.build()


💬 Как вы оптимизируете работу в своих проектах? Делитесь опытом

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Промпт дня: настройка Firebase для мобильных приложений

Запутались в настройке Firebase для Android/iOS? Используйте этот промпт, чтобы быстро разобраться с типовыми задачами и избежать распространённых ошибок:

📝 Промпт:

Provide a step-by-step guide for setting up Firebase in a mobile
1. Initial setup for Android/iOS
2. Typical configuration mistakes and how to avoid them
3. Best practices for structuring Firestore/Firebase Auth
4. Performance optimization tips


📌 Дополнительные варианты:

Suggest solutions for common Firebase authentication errors (если столкнулись с проблемами логина)
Compare Realtime Database vs Firestore for a chat app (если выбираете базу данных)
Provide code samples for offline mode implementation (для работы без интернета)

💡 Лайфхак:

Добавьте Explain like I'm a junior developer, если нужно максимально простое объяснение.

А как вы настраиваете Firebase? Делитесь лайфхаками в комментариях 💬

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

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/01 22:43:03
Back to Top
HTML Embed Code: