ML на мобилках: пора учить матчасть
CoreML и ML Kit делают внедрение нейронок простым, но чтобы реально понимать, как оптимизировать модель под мобильное устройство, нужно знать базу.
Мы перезапустили курс по математике с живыми вебинарами.
Что в программе на этой неделе:
1. Линейная алгебра: векторы, матрицы, определители.
2. Линейная регрессия: как предсказывать значения и интерпретировать коэффициенты.
3. SVD-разложение: как снижать размерность данных (супер-актуально для мобайла).
Вы ещё успеваете присоединиться к потоку и получить доступ ко всем материалам.
Ссылка для регистрации (до 9 декабря):
https://clc.to/LojFzw
CoreML и ML Kit делают внедрение нейронок простым, но чтобы реально понимать, как оптимизировать модель под мобильное устройство, нужно знать базу.
Мы перезапустили курс по математике с живыми вебинарами.
Что в программе на этой неделе:
1. Линейная алгебра: векторы, матрицы, определители.
2. Линейная регрессия: как предсказывать значения и интерпретировать коэффициенты.
3. SVD-разложение: как снижать размерность данных (супер-актуально для мобайла).
Вы ещё успеваете присоединиться к потоку и получить доступ ко всем материалам.
Ссылка для регистрации (до 9 декабря):
https://clc.to/LojFzw
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
Anonymous Quiz
72%
Result: [2, 4, 6], Count: 3
13%
Result: [2, 4, 6], Count: 0
7%
Result: [2, 2, 2], Count: 3
8%
Ошибка компиляции
Please open Telegram to view this post
VIEW IN TELEGRAM
Из каждого утюга кричат, что в айти можно войти с улицы, просто выучив Python. Но статистика зарплат и требования топовых компаний говорят об обратном. Давай разберемся, где самоучке действительно рады, а где без профильного вуза (и даже PhD!) твое резюме полетит в корзину сразу после скрининга.
👉 Читать статью
🔸 Курс «Основы IT для непрограммистов»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
Приготовили для вас дайджест по актуальному из мира iOS, Android.
Рассказ о том, как используя Codex, за пару месяцев плотной работы по вечерам и субботам спроектировать специализированный ЯП (кодовое имя Branchline), написать интерпретатор, компилятор, виртуальную машину, а затем перевести это всё на Kotlin Multiplatform (KMP), чтобы получить версию под JS для онлайн-песочницы.
Что любят все разработчики? Конечно, автоматизировать рутинные повторяющиеся действия! Автор расскажет, как в этом может помочь язык Stencil, широко известный в узких кругах iOS-разработчиков.
В данной статье автор расскажет про встроенные инструменты Flutter, которые позволяют реализовать надежный и предсказуемый state-менеджмент без сторонних фреймворков. Вы узнаете, как использовать ValueNotifier и Provider для удобной работы с состоянием и когда такой подход является оптимальным.
🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Делегированные свойства — это свойства, которые не хранят своё значение напрямую, а делегируют это значение другому объекту, который реализует интерфейс
Delegate. При доступе к свойству, его значение запрашивается у делегата, который может выполнить какую-то дополнительную логику, а затем вернуть требуемое значение. Пример:class Example {
var p: String by Delegate()
}Ключевое слово
by используется для обозначения свойств, методы чтения и записи которых реализованы другим объектом, который называют делегатом.Синтаксис выглядит так:
val/var <имя свойства>: <Тип> by <выражение>. Выражение после by — делегат, потому что обращения get(), set() к свойству будут делегированы его методам getValue() и setValue(). Делегат не обязан реализовывать какой-то интерфейс, достаточно, чтобы у него были метод getValue() (и setValue() для var'ов) с определённой сигнатурой.В Kotlin существуют несколько встроенных делегатов для работы с делегированными свойствами:
lazy() — позволяет создавать лениво инициализированные свойстваobservable() — позволяет реагировать на изменения свойстваvetoable() — позволяет отклонять изменения значения свойства на основе заданного условияnotNull() — гарантирует, что свойство не будет иметь значение nullmap() — позволяет хранить значения свойств в словаре (Map)Кроме того, в Kotlin можно создавать свои собственные делегаты, реализуя интерфейс
ReadOnlyProperty или ReadWriteProperty. Это дает возможность создавать кастомные поведения для свойств, например, кеширование значений или логирование операций чтения/записи.🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#буст #JuniorKit #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
В SwiftUI представления являются декларативными и автоматически перестраиваются при изменении их базового состояния. Однако бывают ситуации, когда требуется принудительно перезагрузить представление. Один из распространённых способов добиться этого — использовать модификатор
.id(_:) в сочетании с управляемым состоянием идентификатором.🔹 Пример реализации
Вот минимальный пример того, как можно принудительно перезагрузить представление:
struct DemoView: View {
@State private var viewId = UUID()
var body: some View {
VStack {
Text(viewId.uuidString)
.id(viewId) // forces SwiftUI to recreate this view
Button("Retry") {
viewId = UUID()
}
}
}
}В этом примере при каждом нажатии на кнопку
Retry viewId заменяется на новое UUID. Поскольку .id(viewId) прикреплено к тексту, SwiftUI считает его новым представлением и уничтожает старое поддерево, заменяя его новым.🔹 Преимущества
Гарантированный сброс
Такой подход гарантирует, что представление и его внутреннее состояние будут полностью сброшены. Все
@State или внутренние привязки в поддереве удаляются, и создаётся чистый экземпляр иерархии представлений.Полезно для сценариев восстановления
Это может быть особенно полезно, когда вам нужно «полностью перезагрузить» представление после ошибки или при повторной попытке выполнить неудачный сетевой запрос. Вместо того чтобы вручную сбрасывать несколько переменных состояния, можно сгенерировать новый идентификатор, и это даст тот же результат, но с меньшим количеством кода.
Предсказуемое поведение
Поскольку SwiftUI в значительной степени полагается на идентификацию для согласования представлений, явное управление с помощью
.id(_:) делает перезагрузку предсказуемой и понятной.🔹 Недостатки
Снижение производительности
При принудительной перезагрузке старое представление удаляется и создаётся новое с нуля. Если иерархия представлений большая или сложная, это может привести к ненужным затратам ресурсов и снижению производительности рендеринга.
Потеря локального состояния
Все локальные состояния внутри поддерева будут сброшены. В некоторых случаях это может быть необходимо, но это также означает, что все, что пользователь ввел или с чем взаимодействовал, будет потеряно, если только это не сохранено за пределами перезагруженного поддерева.
Решение, ориентированное на симптомы
Использование принудительных перезагрузок может указывать на более серьёзные проблемы с архитектурой. Часто более идиоматичный для SwiftUI подход заключается в более тщательном структурировании состояния, чтобы обновления распространялись естественным образом, а не в обход системы согласования.
🔹 Когда использовать
Принудительную перезагрузку представления следует рассматривать как крайнюю меру, а не как предпочтительное решение. Это полезно для повторных попыток, очистки поврежденного состояния или создания прототипов. В рабочем коде старайтесь моделировать поток состояний так, чтобы обновления SwiftUI происходили автоматически. Если вы часто прибегаете к
.id(_:), возможно, стоит пересмотреть свой подход к управлению состоянием.🔹 Заключение
Использование
.id(_:) в сочетании с изменяющимся значением, например с UUID, — это простой способ принудительно перезагрузить представление SwiftUI. Это надёжный механизм для сброса настроек представления, но он имеет свои недостатки с точки зрения производительности и потери состояния. Как и большинство методов, его лучше применять выборочно, в тех случаях, когда требуется настоящий «сброс» настроек, а другие подходы менее эффективны.🔸 Курс «Основы IT для непрограммистов»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#PixelPerfect #MiddlePath #Swift
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
AnyLanguageModel — пакет Swift, предоставляющий готовую замену фреймворку Apple Foundation Models с поддержкой кастомных моделей. Всё, что вам нужно сделать, — это изменить оператор импорта:
— import FoundationModels
+ import AnyLanguageModel
struct WeatherTool: Tool {
let name = "getWeather"
let denoscription = "Retrieve the latest weather information for a city"
@Generable
struct Arguments {
@Guide(denoscription: "The city to fetch the weather for")
var city: String
}
func call(arguments: Arguments) async throws -> String {
"The weather in \(arguments.city) is sunny and 72°F / 23°C"
}
}
let model = SystemLanguageModel.default
let session = LanguageModelSession(model: model, tools: [WeatherTool()])
let response = try await session.respond {
Prompt("How's the weather in Cupertino?")
}
print(response.content)Поддерживаемые провайдеры:
• Apple Foundation Models
• Core ML models
• MLX models
• llama.cpp (GGUF models)
• Ollama HTTP API
• Anthropic Messages API
• Google Gemini API
• OpenAI Chat Completions API
🔸 Курс «Специалист по ИИ»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#буст #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
Android-разработчик Middle+ — до 250 000 ₽, удалёнка
Mobile KMP developer (Android/IOS + Flutter) — от 360 000 до 420 000 ₽, удалёнка
Senior Android Developer (Seller Experience) — от 300 000 до 400 000 ₽, удалёнка
Kotlin / Java разработчик (middle/senior) — гибрид (Москва)
Flutter разработчик — удалёнка
🔸 Курс «Специалист по ИИ»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
В карточках рассказали о способах, которые помогут подстраховать себя на работе в период кризиса в IT-индустрии.
👉 Читать статью
🔸 Курс «Основы IT для непрограммистов»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#MadeInProglib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM