Почему может произойти краш при открытии ProfileViewController?
Anonymous Quiz
24%
userEmail может быть nil, если не передали значение
30%
emailTextField.text может быть nil
8%
Неправильное имя Storyboard ID
7%
Проблема с navigationController
31%
Посмотреть ответ
Please open Telegram to view this post
VIEW IN TELEGRAM
😢3
Когда старый монолит начинает мешать процессам в разработке, первое, что обычно приходит в голову командам — это переезд на новый стек. Логика понятна: сделаем новый UI, почистим код, а дальше и разработка пойдет бодрее.
Чаще всего такое решение — очень дорогая иллюзия. Потому что в бигтехе проблема обычно не в UI, а в связности компонентов, зависимости фронта от бэка, сложных релизах и фичах, которые требуют синхронной работы команды.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
Если вы iOS‑разработчик и планируете внедрять Live Activities в своё приложение — эта статья для вас.
Тестирование Compose-приложений, будь то Android или Multiplatform, часто связано с нестабильными тестами, избыточным кодом и сложностью поддержки. В докладе автор рассматривает практические способы решения этих проблем: рекомендации Google, сравнение популярных инструментов и разбор реальных кейсов.
В данной статье автор рассмотрит, какие ошибки чаще всего приводят к утечкам памяти во Flutter, как их обнаруживать и какие практики помогают избежать подобных проблем в реальных проектах.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
😎 Знакомьтесь с экспертом Proglib.academy: AI-архитектор Андрей Носов
Андрей — один из ключевых спикеров нашего курса AgentOps. Он выстраивает архитектуру, которая выживает в суровом проде и активно делится своим опытом.
За что его ценит IT-комьюнити:
🟣 Топ-спикер AI Conf 2026
🟣 Эксперт по GraphRAG и Knowledge Graphs
🟣 Автор «14 кругов ада для RAG»
🟣 Спикер Saint HighLoad
Андрей упаковал свои наработки в Google Colab, где можно пощупать 14 сценариев ошибок RAG и их решения:
🔗 Забрать Colab-ноутбук
На курсе Андрей отвечает за самые «мясные» блоки: RAG, оркестрацию агентов и их промышленную эксплуатацию.
Узнать больше о программе и обучении у Андрея:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса
Так, продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду тестить Colab Носова
Андрей — один из ключевых спикеров нашего курса AgentOps. Он выстраивает архитектуру, которая выживает в суровом проде и активно делится своим опытом.
За что его ценит IT-комьюнити:
Его доклад про мифы семантического поиска и провалы Naive RAG стал одним из самых рейтинговых на конференции.
Андрей внедряет инженерный подход в сложные системы, заменяя «слепую веру» в эмбеддинги строгой логикой графов.
Разработал уникальный набор из 14 unit-тестов, на которых ломается стандартный векторный поиск (от слепоты к отрицаниям до конфликта версий).
Регулярно выступает на крупнейших хайлоад-площадках, разбирая архитектуру отказоустойчивых ИИ-сервисов.
Андрей упаковал свои наработки в Google Colab, где можно пощупать 14 сценариев ошибок RAG и их решения:
🔗 Забрать Colab-ноутбук
На курсе Андрей отвечает за самые «мясные» блоки: RAG, оркестрацию агентов и их промышленную эксплуатацию.
Узнать больше о программе и обучении у Андрея:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса
Так, продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду тестить Colab Носова
Please open Telegram to view this post
VIEW IN TELEGRAM
Слабосвязанный код - это код, который написан такм образом, при котором один фрагмент кода может быть заменен на другой фрагмент кода, не требуя при этом изменений в других фрагментах кода. Как правило это достигается при помощи протоколов и интерфейсов.
Преимущество перед сильносвязанным кодом в том, что мы можем с куда меньшими затратами сил и времени менять часть программы.
protocol ColorProvider {
var color: UIColor { get }
}
struct LCDColorProvider: ColorProvider {
var color: UIColor {
UIColor(red: 0.3, green: 0.24, blue: 0.71, alpha: 1)
}
}
struct P3ColorProvider: ColorProvider {
var color: UIColor {
UIColor(displayP3Red: 0.32, green: 0.264, blue: 0.7142, alpha: 1)
}
}
struct ColorSettings {
var colorProvider: ColorProvider
}
let lcdSettings = ColorSettings(colorProvider: LCDColorProvider())
let p3Settings = ColorSettings(colorProvider: P3ColorProvider())#буст #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
Kore — это система дизайна Compose Multiplatform, которая предоставляет красиво оформленные компоненты, помогающие создавать масштабируемые и согласованные дизайн-системы.
Одно из главных преимуществ Kore заключается в том, что каждый компонент находится в своём собственном изолированном файле, что делает его очень простым для понимания, изменения и расширения. Если вы хотите полностью контролировать компонент, вы можете просто скопировать его и переименовать несколько элементов.
Фичи:
#буст #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
Senior Flutter Developer — 270 000 – 320 000 ₽? офис (Санкт-Петербург)
iOS-разработчик (Middle) — офис (Санкт-Петербург)
Flutter-разработчик — от 220 000 ₽, удалёнка/гибрид (Москва)
Android-разработчик (Услуги) — 320 000 - 450 000 ₽, удалёнка
Android-разработчик — удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 База по экономике токенов и кэшированию от AI Platform Lead из Bitrix24
Знакомьтесь, Сергей Нотевский. AI Platform Lead в Bitrix24.
Он один из ключевых экспертов нашего курса AgentOps. На своих лекциях он детально разбирает экономику AI-агентов, кэширование токенов, LLM-инфраструктуру и вывод генеративных систем в стабильный прод.
Мы попросили Сергея поделиться материалами для тех, кто хочет оптимизировать косты на LLM в проде. Сохраняйте методичку по prefix cache метрике, которая напрямую влияет на ваши деньги.
Как говорят создатели Manus:
🛠 Что внутри методички (комбо из 3 статей + код):
🍒 Вишенка на торте: готовый SKILL для агента, который делает ревью вашего проекта, находит анти-паттерны и предотвращает низкое попадание в кэш.
— Забрать комбо-материалы на GitHub
P.S. Если хотите послушать Сергея вживую — ловите его на конференциях Kode Waves (май), Conversations AI и Highload Spb (июнь).
🎁 Акция в честь старта продаж!
Прямо сейчас при покупке Инженерного трека вы получаете полный доступ к материалам курса «Разработка ИИ-агентов» в подарок.
👉 Забрать 2 курса по цене 1 и начать обучение
Знакомьтесь, Сергей Нотевский. AI Platform Lead в Bitrix24.
Он один из ключевых экспертов нашего курса AgentOps. На своих лекциях он детально разбирает экономику AI-агентов, кэширование токенов, LLM-инфраструктуру и вывод генеративных систем в стабильный прод.
Мы попросили Сергея поделиться материалами для тех, кто хочет оптимизировать косты на LLM в проде. Сохраняйте методичку по prefix cache метрике, которая напрямую влияет на ваши деньги.
Как говорят создатели Manus:
“KV-cache hit rate is the single most important metric for a production-stage AI agent.”
🛠 Что внутри методички (комбо из 3 статей + код):
Экономика кэширования — особенности провайдеров и как правильно считать затраты.
Частые анти-паттерны — почему ваш кэш постоянно сбрасывается и вы платите больше.
Кэш в AI-агентах — специфика работы с памятью в автономных системах.
🍒 Вишенка на торте: готовый SKILL для агента, который делает ревью вашего проекта, находит анти-паттерны и предотвращает низкое попадание в кэш.
— Забрать комбо-материалы на GitHub
P.S. Если хотите послушать Сергея вживую — ловите его на конференциях Kode Waves (май), Conversations AI и Highload Spb (июнь).
🎁 Акция в честь старта продаж!
👉 Забрать 2 курса по цене 1 и начать обучение
Автор статьи рассказывает о переходе крупного многомодульного проекта с сотнями экранов на Jetpack Compose. Классический стек (XML, Cicerone, Dagger 2, MVVM) работал, но когда экранов стало несколько сотен, команда начала тратить больше времени на борьбу с неконсистентным состоянием UI. Потребовалось менять подход.
За полтора года миграции разработка ускорилась, а баги, связанные с состоянием экрана, практически исчезли.
В статье автор делится, как процесс был разделён на три этапа, что делали на каждом и к чему пришли. Материал будет полезен тем, кто уже знаком с Compose, хочет внедрить его в проект, но сомневается. Без разбора плюсов и минусов технологии — только практика.
#свежак #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Раньше переключения видимости между состояниями UI могли выглядеть немного топорно.
AnimatedContent позволяет задавать, как контент появляется и исчезает — затухание, сдвиг, масштабирование, что угодно!AnimatedContent(
targetState = isLoggedIn,
transitionSpec = {
// Slide in from right, slide out to left
slideInHorizontally { it } togetherWith slideOutHorizontally { -it }
}
) { loggedIn ->
if (loggedIn) HomeScreen() else LoginScreen()
}
Да, переходы имеют значение — пользователи это замечают. Такой уровень проработки вызывает доверие.
Большинство разработчиков используют
LazyColumn без key. Это нормально — пока вы не измените порядок элементов списка, и тогда каждый элемент начнет мигать и перерисовываться.Стабильные ключи позволяют Compose более явно понимать, какой элемент есть какой.
LazyColumn {
items(messages, key = { it.id }) { message ->
MessageRow(message)
}
}Эту возможность используют редко и часто понимают неправильно. Если у вас есть состояние, зависящее от другого состояния, используйте
derivedStateOf — тогда Compose будет выполнять рекомпозицию только при изменении результата, а не каждый раз при изменении исходного состояния.val showScrollToTop by remember {
derivedStateOf { listState.firstVisibleItemIndex > 3 }
}Научитесь правильно это использовать: это критически важно для UI-логики, завязанной на прокрутке./
Забудьте о вложенных layout-контейнерах только ради того, чтобы нарисовать собственную форму или градиент.
drawBehind даёт вам прямой доступ к Canvas прямо внутри модификатора.Text(
text = "Hello",
modifier = Modifier.drawBehind {
drawRoundRect(
color = Color(0xFF00D4AA),
cornerRadius = CornerRadius(12f)
)
}
)
Принцип, лежащий в основе
Scaffold, BoxWithConstraints и наших кастомных систем компоновки, где размер одного компонуемого элемента необходимо измерить перед компоновкой другого, заключается в том, что компонуемые элементы не знают своего собственного размера.Знание о его существовании обычно является большей частью необходимого — и большинству разработчиков никогда не приходится это писать — но это объясняет, как работают сложные компоновки.
#свежак #MiddlePath #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
SwiftUI предоставляет встроенную поддержку анимации. Во многих случаях для добавления анимации достаточно привязать ее к изменению состояния.
Для этого есть два распространенных способа:
1.
animation(_:value:) модификатор представления для анимации при изменении определенного значения состояния2.
withAnimation(_:_:) глобальная функция, которую мы можем использовать для применения изменений состояния и создания анимации для всех представлений, на которые они влияют/В этом посте мы рассмотрим оба подхода и расскажем, когда следует использовать каждый из них.
🔹 Анимирование представления с помощью
animation(_:value:)Модификатор представления
animation(_:value:) полезен, когда нужно анимировать представление при каждом изменении определенного значения. Мы можем использовать его следующим образом:@State private var color = Color.brown
var body: some View {
Button("Change color") {
color = color == .brown ? .mint : .brown
}
.padding(20)
.background(color)
.foregroundStyle(.white)
.animation(.easeInOut, value: color)
}
Модификатор не анимирует само значение. Параметр value определяет, при каком изменении состояния должна запускаться анимация. При каждом изменении значения color SwiftUI анимирует все затронутые обновления.
Этот тип анимации часто называют неявной анимацией, поскольку представление автоматически анимируется при изменении указанного состояния.
Мы также можем отключить анимацию для представления, передав
nil:.animation(nil, value: color)
Это удобно, когда мы хотим исключить определенный элемент из анимации, которая в противном случае была бы унаследована от родительского элемента.
🔹 Анимация изменений состояния с помощью
withAnimationВместо того чтобы прикреплять анимацию к элементу, мы можем явно анимировать изменения состояния с помощью глобальной функции
withAnimation:@State private var color = Color.brown
var body: some View {
Button("Change color") {
withAnimation(.easeInOut) {
color = color == .brown ? .mint : .brown
}
}
.padding(20)
.background(color)
.foregroundStyle(.white)
}
При таком подходе анимация применяется ко всем обновлениям представления, вызванным изменениями состояния внутри
withAnimation замыкания.🔹 Реагирование на завершение анимации
withAnimation дополнительно предоставляет обработчик завершения (iOS 17+), поэтому мы можем выполнить код после завершения анимации:withAnimation(.easeInOut) {
color = color == .brown ? .mint : .brown
} completion: {
print("Color animation finished")
}Это полезно для объединения анимаций в цепочку или запуска последующих действий после завершения перехода.
🔹 Выбор между двумя подходами
Оба подхода часто позволяют добиться одинакового визуального результата, но они полезны в разных ситуациях.
animation(_:value:) хорошо подходит для случаев, когда определенный элемент представления всегда должен анимироваться в ответ на изменение определенного состояния.withAnimation часто является лучшим выбором, когда несколько изменений состояния должны анимироваться одновременно или когда нам нужен более четкий контроль над запуском анимации.#PixelPerfect #MiddlePath #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
Ежегодная конференция WWDC от Apple в 2026 году пройдёт с 8 по 12 июня. Мероприятие откроет традиционная презентация новинок, а следом пользователей ждёт серия более детальных докладов о новинках.
Apple уже начала рассылать приглашения журналистам, а слоганом WWDC стала фраза Coming bright up («На подходе что-то яркое»). Ожидается, что компания в первую очередь представит обновления набора своих ОС: iOS 27, iPadOS 27, watchOS 27, macOS 27, tvOS 27 и visionOS 27. Кроме того, в пресс-релизе Apple упоминает новые инструменты на базе нейросетей.
Кроме основной программы в офисе Apple пройдут очные встречи для разработчиков, дизайнеров, студентов и финалистов конкурсов, включая Swift Student Challenge и Apple Design Awards.
Трансляция WWDC будет доступна на сайте компании, на портале Apple Developer, в фирменном приложении и на YouTube-канале для разработчиков.
#свежак #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Хотите наглядно показывать статистику и аналитику в вашем приложении? Этот промпт поможет внедрить красивые и интерактивные графики.
Implement charts and data visualization for a mobile app that includes:
— Set up charting library (MPAndroidChart, Charts for iOS)
— Implement line charts for trends over time
— Add bar charts for comparisons
— Create pie/donut charts for distribution
— Implement real-time data updates with animations
— Add zoom and pan interactions
— Handle large datasets with performance optimization
— Добавьте
Implement combined charts (line + bar) для сложной аналитики— Добавьте
Add gesture-driven tooltips and data point selection для интерактива— Добавьте
Implement candlestick charts for financial apps для трейдинга#буст #JuniorKit
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5
Основная компетенция специалиста по Data Science – способность анализировать и интерпретировать данные, а математика является фундаментом для начала работы.
В карточках мы разбираем основные разделы математики, с которых стоит начать изучение специалисту по анализу данных.
Хотите подготовиться к офферу или подтянуть знания? Оставляйте заявку на наш курс по математике для Data Science 💙
P.S. Только до 31 мая на курс (и вообще на все программы Академии) действует
А как у вас дела с высшей математикой?
❤️ — Помню всё
🔥 — Знаю основы
🌚 — Ничего не знаю
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM