Telegram Web
📉💻⚡️ IT-рынок обвалился: на одну вакансию теперь 2383 отклика

Если ты еще не почувствовал, как изменился IT-рынок, то скоро почувствуешь на своей шкуре. Вакансий стало в разы меньше, требования выросли до небес, а конкуренция превратилась в кровавую баню. Рассказываем, как лихорадит рынок труда в IT.

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

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

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱62
📱 Железный опрос

Пора узнать, на чём живёт Android Studio и Xcode в 2025.

Расскажите в комментариях, какой у вас ноутбук или ПК:

➡️ модель и процессор,
➡️ сколько оперативки,
➡️ и тянет ли всё это ваши сборки и эмуляторы без подтормаживаний?

Интересно, сколько у нас счастливчиков с M-чипами и кто до сих пор держится на стареньком i5 👇

🐸 Библиотека мобильного разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
4
⚙️ PostgresNIO — клиент PostgreSQL для Swift

PostgresNIO — неблокирующий event-driven клиент Swift для PostgreSQL, построенный на SwiftNIO.

Фичи:


🔘 PostgresConnection, позволяющий подключаться к серверу PostgreSQL, авторизоваться, отправлять запросы и получать результаты
🔘 PostgresClient, объединяющий и управляющий соединениями
🔘 Интерфейс async/await с поддержкой backpressure
🔘 Автоматическое преобразование примитивных типов Swift в формат Postgres
🔘 Интеграция с экосистемой серверов Swift, включая использование SwiftLog и ServiceLifecycle
🔘 Разработан для эффективной работы на всех поддерживаемых платформах (протестировано в системах Linux и Darwin)
🔘 Поддержка Network.framework (при наличии) (например, на платформах Apple)

💻 PostgresNIO на GitHub

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

#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💥 Октябрь — месяц апгрейда!

До конца этого месяца действует скидка 40% на все курсы Proglib Academy (кроме AI-агентов, ML для старта и математики).

Под акцию попал и наш хит — курс «Алгоритмы и структуры данных».

👨‍💻 Он подойдёт джунам, мидлам и всем, кто хочет писать код осознанно, а не наугад.

👨‍🏫 Преподаватели — инженеры из Яндекса и ВШЭ.

🎓 Сертификат по итогам обучения — в портфолио.

47 видеоуроков и 150 практических задач;
поддержка преподавателей и чат;
доступ к материалам на 12 месяцев.

Полная программа курса тут 👈

👉 Остальные курсы
1
В чем основная ошибка и почему UI может не обновляться?
Anonymous Quiz
47%
Изменение @Published свойства не в главном потоке
5%
Weak self в Task не используется
14%
@StateObject создается внутри View
4%
Отсутствует обработка ошибок
29%
Посмотреть ответ
👍2
🧠 ИИ-генерация изображений в Firebase AI Logic

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

В этой статье рассматриваются две новые возможности генерации изображений с помощью Firebase AI Logic: специализированные функции редактирования Imagen, которые в настоящее время находятся в стадии предварительной версии, и общедоступный Gemini 2.5 Flash Image (также известный как «Nano Banana»), предназначенный для создания контекстных или диалоговых изображений.

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

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

#свежак #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
2
⚙️ Семантический Gradle: публикуем артефакты со спокойствием и уверенностью

Приходилось ли когда-нибудь развивать библиотечный проект и публиковать из него артефакты? Команде Александра пришлось, когда появилась своя дизайн-система и разные переиспользуемые части приложения. Поначалу все были довольны, но со временем оказалось, что довольно трудно следить за тем, чтобы не сломать неаккуратными изменениями другие проекты.

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

Александр рассказал о том, как научить Gradle анализировать изменения в API и автоматически поднимать версии артефактов с соблюдением семантического версионирования. Заодно он показал некоторые приемам в Gradle, которые помогут писать плагины.

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

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

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

#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤖 Красивое резюме = провал

Представь: ты опытный разработчик, знаешь стек как свои пять пальцев. Отправляешь резюме — а в ответ тишина. Проблема не в тебе — просто ATS не увидела нужные ключевые слова или не смогла распарсить твое красивое резюме с инфографикой.

Рассказываем, как устроены эти системы, какие из них используют российские и зарубежные IT-компании, и главное — как адаптировать резюме, чтобы робот тебя пропустил.

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

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

#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Предложите небольшую доработку для следующего кода

if age >= 18 {
driveCar()
} else {
doNotDrive()
}


Этот код хорошо работает - но можете ли вы предложить небольшое улучшение рефакторинга, чтобы сделать его еще лучше?

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

age >= 18 ? driveCar() : doNotDrive()


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

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

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

🔵 Сам себе Шерлок: 7 способов найти логи и поймать баг на iOS

Знакома ситуация, когда кнопка не работает, приложение виснет, анимации тормозят, но при этом нет никаких ошибок на экране? Можно часами играть в детектива, гадая по UI и строя догадки, что пошло не так. А можно за несколько минут найти настоящего преступника — ведь iOS щедро оставляет улики в виде логов. Нужно лишь знать, где их искать. Секрет — в грамотном выборе способа, как собрать доказательства.

🔵 Эффект глюка на Jetpack Compose

Эффекты глитча (глюка, сбоя) — неотъемлемая часть научно-фантастических фильмов и киберпанк-игр. В этой статье мы увидим, как легко реализовать этот эффект в Jetpack Compose.

🔵 Что такое ANR и как с ним работать правильно

Когда пользователь открывает приложение, нажимает на кнопку — и ничего не происходит несколько секунд, Android начинает считать, что “приложение не отвечает”. Через 5 секунд на главном потоке система показывает диалог: “Приложение не отвечает. Закрыть?” Это и есть ANR (Application Not Responding).

🔵 Dart 3.9: актуальность новых фич

Это плановый, «прикладной» апдейт, который делает анализатор умнее, CLI — ощутимо быстрее, pub — точнее в разрешении зависимостей, а также приносит официальный MCP-сервер для интеграции Dart/Flutter с ИИ-ассистентами. В статье — только существенное, с примерами и пошаговыми рекомендациями

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📎 Блок инициализации (init блок)

Основной конструктор не может в себе содержать какую-либо логику по инициализации свойств (исполняемый код). Он предназначен исключительно для объявления свойств и присвоения им полученных значений. Поэтому вся логика может быть помещена в блок инициализации — блок кода, обязательно выполняемый при создании объекта независимо от того, с помощью какого конструктора этот объект создаётся. Помечается он словом init.

class Person(val name: String, var age: Int) {
var id: Int = 0

// require выдает ошибку с указанным текстом, если условие в левой части false
init {
require(name.isNotBlank(), { "У человека должно быть имя!" })
require(age > -1, { "Возраст не может быть отрицательным." })
}

constructor(name: String, age: Int, id: Int) : this(name, age) {
if (id > 0) this.id = id * 2
}
}


По сути блок инициализации — это способ настроить переменные или значения, а также проверить, что были переданы допустимые параметры. Код в блоке инициализации выполняется сразу после создания экземпляра класса, т.е. сразу после вызова основного конструктора. В классе может быть один или несколько блоков инициализации и выполняться они будут последовательно.

class Person(val name: String, var age: Int) {
// сначала вызывается основной конструктор и создаются свойства класса
// далее вызывается первый блок инициализации
init {
...
}

// после первого вызывается второй блок инициализации
init {
...
}

// и т.д.
}


Блок инициализации может быть добавлен, даже если у класса нет основного конструктора. В этом случае его код будет выполнен раньше кода вторичных конструкторов.

➡️ Подробнее в статье

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

#буст #MiddlePath #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🧠 Готовишься к собесам, а ноутбук еле тянет IDE?

Самое время прокачать скиллы и апгрейднуть железо!

Proglib Academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻

Купи любой наш курс до 15 ноября → пройди 2 недели обучения → напиши куратору #розыгрыш. Всё, ты в игре!

📚 Среди курсов:

▫️ Алгоритмы и структуры данных — топ для подготовки к собесам в Яндекс и FAANG.

▫️ Архитектуры и шаблоны проектирования — чтобы думать как senior.

▫️ Python, математика для DS, основы IT и другие направления.

👉 Принять участие
🎮 «Чистая» структура View-компонентов в SwiftUI

В проектах на SwiftUI тело View может быстро разрастись: десятки вложенных VStack/HStack, логика отображения, стили — всё в одном месте.

Вот три практики, которые помогут сделать код более понятным, гибким и удобным в сопровождении.

1️⃣ Извлечение отдельных View

Если часть интерфейса имеет собственное назначение — вынеси её в отдельный struct-View:

struct ArticleRow: View {
let article: Article
var body: some View {
HStack { … }
}
}


Затем:

ForEach(articles, id: \.url) { article in
ArticleRow(article: article)
}


Это делает главный View более “обзорным” и облегчает повторное использование.


2️⃣ Использование ViewModifiers для стилей

Когда видишь дублирования стилей, вынеси их:

struct CardStyle: ViewModifier {
func body(content: Content) -> some View {
content
.padding()
.background(Color(.secondarySystemBackground))
.cornerRadius(8)
}
}
extension View {
func cardStyle() -> some View {
modifier(CardStyle())
}
}


Теперь:

ArticleRow(article: article)
.cardStyle()


Так ты централизуешь “язык дизайна” и можешь менять стиль в одном месте.

3️⃣ Создание универсальных расширений для просмотра

Если повторяются шаблоны (например, “заголовок секции”), можно сделать расширение:

extension View {
func sectionHeader(_ title: String) -> some View {
VStack(alignment: .leading, spacing: 4) {
Text(title)
.font(.title3)
.bold()
self
}
}
}


Пример:

VStack {
ForEach(articles, id: \.url) { article in
ArticleRow(article: article)
}
}
.sectionHeader("Articles")


Такие расширения уменьшают вложенность и делают код декларативнее.

📌 Практическое руководство по созданию хорошей архитектуры SwiftUI

Если вы не уверены, стоит ли что-то извлекать, спросите:

Есть ли у этого элемента пользовательского интерфейса чёткое назначение и возможность повторного использования?


🔘 Если да → создайте новый View или ViewModifier.

🔘 Если нет → оставьте его локальным или используйте вычисляемое свойство.

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

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

#АрхитектурныйКод #SeniorView #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
3🤝1
💬 Комментировать код или нет

Каждый разработчик хоть раз видел этот шедевр:

// incerment i
i += 1


или

// TODO:  fix later


который висит в коде уже третий год.

Одни считают, что комментарии — это добро и забота о команде. Другие уверены — если код требует пояснений, значит, его надо переписать.

А ты как думаешь?
💬

❤️ — Пишу комментарии, я не зверь
👍 
Код должен говорить сам за себя
🤝 Комментарии? Только TODO и сарказм

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

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

Middle iOS Developer — от 300 000₽, удалёнка

Flutter разработчик (Middle) — от 1600 до 2240 $, удалёнка

Разработчик мобильных приложений Android/iOS — гибрид (Москва)

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

Senior Flutter Developer — до 350 000 ₽, гибрид (Москва, Санкт-Петербург)

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

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

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
3
2025/11/09 07:38:43
Back to Top
HTML Embed Code: