🧠 Как я выбирал LLM для экранного кота
Когда начал прикручивать локальную LLM к ScreenCat, первым кандидатом была Llama 3.1 8B. Мощная, умная, красивая на бенчмарках… но на MacBook Air с M2 — это ядерный реактор. Интерфейс лагает, фон моргает, котик тормозит. Не вариант.
🔁 Начал перебирать:
- Llama 3.2 1B - лёгкая, запускается быстро, но ответы… странные. То галлюцинирует, то резко переходит на английский, то просто зависает.
- Llama 3.2 3B (Q6\_K) - пока победитель. Более стабильна, держится в русле промта, не путает роли.
- Gemini 1.5 Flash - шикарно говорит по-русски, почти как ChatGPT, но тяжелющая. На Air дико тормозит. Зато на M3 Max - отлично.
💬 Примеры диалогов:
Ты: Привет, котик! Как настроение?
Кот 1B: Meow. Weather is 23C. Я… летаю… мечтаю… 🤖🐱
🤦♂️ Русский, английский, полёт во сне и наяву.
Кот 3B: Мрр, всё отлично! Я только что наблюдал за курсором — он такой смешной 😺
✅ Вот это уже похоже на экранного котика.
📦 Использую библиотеку LLM.swift - прикольная, но довольно сырая.
Пришлось допиливать: фиксить логику, добавлять поддержку стоп-токенов, чистку контекста, многопоточность.
Про то, что именно переделал - расскажу отдельно в следующем посте 👨💻
🧩 Сейчас в проекте используется кастомный движок с кастомными промтами и автостопами. Вот пример модели:
Плюс добавил определение железа, чтобы автоматически выбирать модель:
если MacBook Air - 1B, если MacBook Pro с M3 - 3B или даже Gemini. Ну и настройки использования ядер CPU и GPU тоже зависят от железа.
А вы что используете на слабом железе?
Когда начал прикручивать локальную LLM к ScreenCat, первым кандидатом была Llama 3.1 8B. Мощная, умная, красивая на бенчмарках… но на MacBook Air с M2 — это ядерный реактор. Интерфейс лагает, фон моргает, котик тормозит. Не вариант.
🔁 Начал перебирать:
- Llama 3.2 1B - лёгкая, запускается быстро, но ответы… странные. То галлюцинирует, то резко переходит на английский, то просто зависает.
- Llama 3.2 3B (Q6\_K) - пока победитель. Более стабильна, держится в русле промта, не путает роли.
- Gemini 1.5 Flash - шикарно говорит по-русски, почти как ChatGPT, но тяжелющая. На Air дико тормозит. Зато на M3 Max - отлично.
💬 Примеры диалогов:
Ты: Привет, котик! Как настроение?
Кот 1B: Meow. Weather is 23C. Я… летаю… мечтаю… 🤖🐱
🤦♂️ Русский, английский, полёт во сне и наяву.
Кот 3B: Мрр, всё отлично! Я только что наблюдал за курсором — он такой смешной 😺
✅ Вот это уже похоже на экранного котика.
📦 Использую библиотеку LLM.swift - прикольная, но довольно сырая.
Пришлось допиливать: фиксить логику, добавлять поддержку стоп-токенов, чистку контекста, многопоточность.
Про то, что именно переделал - расскажу отдельно в следующем посте 👨💻
🧩 Сейчас в проекте используется кастомный движок с кастомными промтами и автостопами. Вот пример модели:
static var llama3_2_3B = Model(
quantization: .Q6_K,
repoName: "MaziyarPanahi",
modelName: "Llama-3.2-3B-Instruct-GGUF",
fileName: "Llama-3.2-3B-Instruct.Q6_K.gguf"
)
Плюс добавил определение железа, чтобы автоматически выбирать модель:
если MacBook Air - 1B, если MacBook Pro с M3 - 3B или даже Gemini. Ну и настройки использования ядер CPU и GPU тоже зависят от железа.
А вы что используете на слабом железе?
👨💻 Как я допиливал LLM.swift под своего экранного кота
В прошлом посте я упоминал, что использую LLM.swift - библиотеку для запуска локальных LLM-моделей на macOS. Концепция крутая, но реализация - сырая. Чтобы ScreenCat стабильно работал, пришлось серьёзно допиливать.
Вот, что именно улучшил:
🔸 1. Чистка контекста между запросами
Без
Решается так:
🔸 2. Очередь запросов и работа в фоне
Если запустить несколько запросов подряд — ответы могли пересекаться.
Добавил очередь на
🔸 3. Кастомизация производительности (`n_gpu_layers`, `nThreads`, `nBatch`)
В оригинальной библиотеке
Я добавил ручной контроль - чтобы под слабое и мощное железо выставлялись оптимальные настройки.
Пример:
И функция:
🔸 4. Фикс bot.stop()
В оригинале
Я пофиксил это: теперь метод реально прерывает вывод, как только нужно (например, по
🧠 Если кому нужно — могу сделать Pull Request в
А если интересно попробовать готовый движок из ScreenCat — тоже пишите, соберу демку 🧩
В прошлом посте я упоминал, что использую LLM.swift - библиотеку для запуска локальных LLM-моделей на macOS. Концепция крутая, но реализация - сырая. Чтобы ScreenCat стабильно работал, пришлось серьёзно допиливать.
Вот, что именно улучшил:
🔸 1. Чистка контекста между запросами
Без
clearContext()
модель сохраняла "память" о предыдущих сообщениях. В итоге кот мог отвечать на то, чего не было.Решается так:
bot.stop()
bot.clearContext()
await bot.respond(to: text)
🔸 2. Очередь запросов и работа в фоне
Если запустить несколько запросов подряд — ответы могли пересекаться.
Добавил очередь на
Task
, чтобы каждый запрос дожидался предыдущего, с пониженным приоритетом:let waitFor = tail
let next = Task(priority: .utility) {
if let prev = waitFor {
_ = try await prev.value
}
return try await self.run(text, systemPrompt: systemPrompt)
}
tail = next
return try await next.value
🔸 3. Кастомизация производительности (`n_gpu_layers`, `nThreads`, `nBatch`)
В оригинальной библиотеке
LLM.swift
всё это было захардкожено.Я добавил ручной контроль - чтобы под слабое и мощное железо выставлялись оптимальные настройки.
Пример:
let threads = ProcessInfo.processInfo.processorCount / 2
let bot = LLM(
from: modelUrl,
template: template,
topK: 40,
topP: 0.92,
temp: 0.6,
historyLimit: 0,
maxTokenCount: 1024,
nThreads: threads,
nThreadsBatch: threads,
nBatch: 8,
n_gpu_layers: suggestedGPULayers()
)!
И функция:
static func suggestedGPULayers() -> Int32 {
let gb = ProcessInfo.processInfo.physicalMemory / (1024 * 1024 * 1024)
if gb <= 8 { return 0 }
if isHighEndAppleSilicon() { return 20 }
if gb >= 16 { return 10 }
return 0
}
🔸 4. Фикс bot.stop()
В оригинале
bot.stop()
не работал как надо — генерация продолжалась.Я пофиксил это: теперь метод реально прерывает вывод, как только нужно (например, по
<|eot_id|>
или внешнему событию).🧠 Если кому нужно — могу сделать Pull Request в
LLM.swift
с этими доработками.А если интересно попробовать готовый движок из ScreenCat — тоже пишите, соберу демку 🧩
Как я попробовал GitHub Copilot в Xcode — и почувствовал себя тимлидом для джуна
Скачал Copilot for Xcode — отдельное бесплатное приложение от GitHub. Вроде штука простая: ставишь, даёшь доступ к проекту — и у тебя внутри Xcode появляется AI-агент, который предлагает подсказки, сам правит код и даже может создавать новые файлы.
Попробовал на живом проекте — ScreenCat (у меня котик бегает по экрану и реагирует на действия). Попросил Copilot сделать надпись с мыслями кота — в виде баббла с emoji. Сначала он выдал что-то странное, но… сам понял и тут же переписал на адекватный вариант. Это было приятно.
Плюсы:
👉 Крутые suggestions, местами реально сэкономили время
👉 Умеет запускать код, искать ошибки, создавать файлы
Минусы:
👉 Иногда мешает обычному автокомплиту Xcode (особенно когда жмёшь tab — и он перехватывает)
👉 Пока что как “агент” работает ограниченно — скорее умный помощник, чем полноценный напарник
Мой вывод:
Я пользуюсь Copilot всего пару дней, но уже приятно. Как друг сказал — чувствуешь себя лидом, который ставит задачи джунам. Только джун никогда не устает и не задаёт лишних вопросов.
Советую попробовать. Особенно если вы хотите чуть-чуть автоматизировать рутину.
Скачать Copilot for Xcode
Скачал Copilot for Xcode — отдельное бесплатное приложение от GitHub. Вроде штука простая: ставишь, даёшь доступ к проекту — и у тебя внутри Xcode появляется AI-агент, который предлагает подсказки, сам правит код и даже может создавать новые файлы.
Попробовал на живом проекте — ScreenCat (у меня котик бегает по экрану и реагирует на действия). Попросил Copilot сделать надпись с мыслями кота — в виде баббла с emoji. Сначала он выдал что-то странное, но… сам понял и тут же переписал на адекватный вариант. Это было приятно.
Плюсы:
👉 Крутые suggestions, местами реально сэкономили время
👉 Умеет запускать код, искать ошибки, создавать файлы
Минусы:
👉 Иногда мешает обычному автокомплиту Xcode (особенно когда жмёшь tab — и он перехватывает)
👉 Пока что как “агент” работает ограниченно — скорее умный помощник, чем полноценный напарник
Мой вывод:
Я пользуюсь Copilot всего пару дней, но уже приятно. Как друг сказал — чувствуешь себя лидом, который ставит задачи джунам. Только джун никогда не устает и не задаёт лишних вопросов.
Советую попробовать. Особенно если вы хотите чуть-чуть автоматизировать рутину.
Скачать Copilot for Xcode
🚨 Xcode 16.4 RC — багфиксы и ожидание Xcode 17
Apple выкатили Release Candidate Xcode 16.4. Нового почти нет — всё внимание явно на Xcode 17 и WWDC.
Что появилось или поправили:
– Swift 6.1.2 (багфиксы и оптимизации)
– Строки из SwiftUI Preview больше не попадают в локализации
– Исправлены падения при раскрытии макросов
– При сборке fat static libs теперь используется lipo, а не libtool — меньше проблем с размером
– Обновлены SDK: iOS 18.5, macOS 15.5 и др.
⚠️ Что ещё не пофиксили:
– Симуляторы могут грузить CPU через diskimagesiod
– Отладка по Wi-Fi может не видеть включённый Developer Mode
📦 Требуется macOS 15.3+
🛠 Версия: Xcode 16.4 RC (16F6)
Ждём настоящих новинок в Xcode 17 — уже скоро!
Apple выкатили Release Candidate Xcode 16.4. Нового почти нет — всё внимание явно на Xcode 17 и WWDC.
Что появилось или поправили:
– Swift 6.1.2 (багфиксы и оптимизации)
– Строки из SwiftUI Preview больше не попадают в локализации
– Исправлены падения при раскрытии макросов
– При сборке fat static libs теперь используется lipo, а не libtool — меньше проблем с размером
– Обновлены SDK: iOS 18.5, macOS 15.5 и др.
⚠️ Что ещё не пофиксили:
– Симуляторы могут грузить CPU через diskimagesiod
– Отладка по Wi-Fi может не видеть включённый Developer Mode
📦 Требуется macOS 15.3+
🛠 Версия: Xcode 16.4 RC (16F6)
Ждём настоящих новинок в Xcode 17 — уже скоро!
🧪 UI-тесты без боли — SwiftLens
Все мы знаем, какие XCUITest бывают:
медленные, флакающие, симуляторы жрут всё.
⠀
Автор SwiftLens придумал, как тестировать SwiftUI,
как будто это unit-тест. И это 🔥
Что даёт SwiftLens:
✅ Видит иерархию SwiftUI через PreferenceKey
⚡️ Тесты за 0.06 сек (vs 15 сек в XCUITest)
🧼 Меньше кода — .lensTrack(id:) и поехали
🔁 Работает с async: ждёт views, проверяет текст, нажимает кнопки
Пример — было и стало:
❌ XCUITest:
✅ SwiftLens:
Где особенно полезно:
🚀 На CI — быстро и стабильно
🛠 В pet-проектах — когда важен фидбек
📱 В любом SwiftUI-приложении — без боли
Минусы :
⚠️ Нужно вставлять .lensTrack, .lensSheet
⚠️ PreferenceKey не работает из .sheet — нужен обход
⚠️ Только SwiftUI
⚠️ Авторский проект, не стандарт Apple — но уже юзабельный
Хочешь попробовать?
1️⃣ Добавь .lensTrack(id: "myView")
2️⃣ Подключи LensObserver и LensInteractor
3️⃣ Запусти — и кайфуй от скорости
🎥 Видео
💾 GitHub
Все мы знаем, какие XCUITest бывают:
медленные, флакающие, симуляторы жрут всё.
⠀
Автор SwiftLens придумал, как тестировать SwiftUI,
как будто это unit-тест. И это 🔥
Что даёт SwiftLens:
✅ Видит иерархию SwiftUI через PreferenceKey
⚡️ Тесты за 0.06 сек (vs 15 сек в XCUITest)
🧼 Меньше кода — .lensTrack(id:) и поехали
🔁 Работает с async: ждёт views, проверяет текст, нажимает кнопки
Пример — было и стало:
❌ XCUITest:
app.buttons["saveButton"].tap()
XCTAssert(app.staticTexts["successToast"].exists)
✅ SwiftLens:
try await interactor.tap("saveButton")
try await observer.waitForVisible("successToast")
Где особенно полезно:
🚀 На CI — быстро и стабильно
🛠 В pet-проектах — когда важен фидбек
📱 В любом SwiftUI-приложении — без боли
Минусы :
⚠️ Нужно вставлять .lensTrack, .lensSheet
⚠️ PreferenceKey не работает из .sheet — нужен обход
⚠️ Только SwiftUI
⚠️ Авторский проект, не стандарт Apple — но уже юзабельный
Хочешь попробовать?
1️⃣ Добавь .lensTrack(id: "myView")
2️⃣ Подключи LensObserver и LensInteractor
3️⃣ Запусти — и кайфуй от скорости
🎥 Видео
💾 GitHub
🍏 Сегодня в 20:00 по МСК - старт WWDC.
Будет большая презентация Apple.
Ждём новую iOS, новые SDK, апдейты для Xcode и, возможно, что-то новое по AI.
По идее, сразу после презентации выкатят beta версию iOS 19 (26).
Пока не решил — ставить ли её сразу или подождать. Обычно первые беты бывают весёлыми 🐛.
Будет большая презентация Apple.
Ждём новую iOS, новые SDK, апдейты для Xcode и, возможно, что-то новое по AI.
По идее, сразу после презентации выкатят beta версию iOS 19 (26).
Пока не решил — ставить ли её сразу или подождать. Обычно первые беты бывают весёлыми 🐛.
Русский язык в Apple Intelligence не завезли, хотя завезли еще несколько языков #WWDC
🛠 Xcode 26 — теперь с AI прямо внутри
Apple на WWDC представила Xcode 26 — и это, пожалуй, самая «умная» версия Xcode за всё время.
👉 Внутри редактора теперь можно прямо подключать ChatGPT или любую другую LLM — по API-ключу или даже локально (если у вас Mac на Apple Silicon).
👉 Можно писать код, тесты, доку, фиксить баги, улучшать дизайн — и всё это в привычном Xcode, не прыгая по чатам.
👉 ChatGPT встроен сразу, можно начинать без аккаунта. А если есть подписка — подключаете её и получаете больше возможностей.
Кроме этого:
✨ Новый интерфейс Coding Tools — умные подсказки, генерация playground’ов, фиксы прямо в коде.
✨ Переработанная навигация.
✨ Улучшенная работа с локализациями.
✨ И даже поддержка полного Voice Control — можно продиктовать код на Swift и управлять Xcode голосом.
🤖 Мне особенно интересно посмотреть, насколько удобно будет работать с локальными моделями (например, Llama) прямо из Xcode — это может быть реально крутой апгрейд.
📝 А вы будете ставить Xcode 26 beta? Планируете использовать встроенные LLM?
Apple на WWDC представила Xcode 26 — и это, пожалуй, самая «умная» версия Xcode за всё время.
👉 Внутри редактора теперь можно прямо подключать ChatGPT или любую другую LLM — по API-ключу или даже локально (если у вас Mac на Apple Silicon).
👉 Можно писать код, тесты, доку, фиксить баги, улучшать дизайн — и всё это в привычном Xcode, не прыгая по чатам.
👉 ChatGPT встроен сразу, можно начинать без аккаунта. А если есть подписка — подключаете её и получаете больше возможностей.
Кроме этого:
✨ Новый интерфейс Coding Tools — умные подсказки, генерация playground’ов, фиксы прямо в коде.
✨ Переработанная навигация.
✨ Улучшенная работа с локализациями.
✨ И даже поддержка полного Voice Control — можно продиктовать код на Swift и управлять Xcode голосом.
🤖 Мне особенно интересно посмотреть, насколько удобно будет работать с локальными моделями (например, Llama) прямо из Xcode — это может быть реально крутой апгрейд.
📝 А вы будете ставить Xcode 26 beta? Планируете использовать встроенные LLM?
Ставлю Xcode на свою macOS 15.x. Пишет что не поддерживается, но кого это останавливало? 😃
Если коротко, как поставить:
- нажимаете правой кнопкой на
- Заходите в
- Запускаете там
Пока не уверен что после установки будет работать, отпишу как поставится
Поставилось, вроде работает.
Единственное НО, вообще нет намека на ChatGPT или AI 🥲
Если коротко, как поставить:
- нажимаете правой кнопкой на
Xcode -> Показать содержимое пакета
- Заходите в
Contents -> MacOS
- Запускаете там
Xcode
файлПоставилось, вроде работает.
Единственное НО, вообще нет намека на ChatGPT или AI 🥲
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 Попробовал IconComposer — очень удобно.
Это простая утилита, в которой можно быстро собрать иконку для macOS / iOS / visionOS:
✅ Cразу видно, как она будет выглядеть в светлой и темной теме
✅ Можно экспериментировать с фоном, скруглением, тенями
✅ Есть экспорт — удобно сразу получить готовые ассеты для проекта
В целом, если хочется быстро сделать тестовую иконку или собрать что-то для pet-проекта — прям отличный инструмент. 👍
Это простая утилита, в которой можно быстро собрать иконку для macOS / iOS / visionOS:
✅ Cразу видно, как она будет выглядеть в светлой и темной теме
✅ Можно экспериментировать с фоном, скруглением, тенями
✅ Есть экспорт — удобно сразу получить готовые ассеты для проекта
В целом, если хочется быстро сделать тестовую иконку или собрать что-то для pet-проекта — прям отличный инструмент. 👍
This media is not supported in your browser
VIEW IN TELEGRAM
🥃 LiquidGlass — open-source реализация нового «живого стекла», только что показанного Apple
Apple показала свежий дизайн-язык с жидкими рефракциями — я сел и повторил его в SwiftUI. Снаружи это всего одна строчка модификатора, но под капотом серьёзная кухня: Metal-шейдеры, off-screen snapshot в MTLTexture, ленивый redraw без мерцания, защита от рекурсий и никаких скриншотов руками.
Что делает
• ⚡️ Захватывает фон в реальном времени, но только когда он реально меняется
• 💤 MTKView спит — батарея не горит
• 🛠 Режимы: .continuous, .once, .manual
• 🎨 Шейдер открыт: меняйте blur, refraction, tint как хотите
• 🍏 Чистый SwiftUI, iOS 14+, MIT
Подключить:
https://github.com/BarredEwe/LiquidGlass
Скрины + GIF примера — в README. Забирайте, форкайте, кидайте идеи! 🚀
Apple показала свежий дизайн-язык с жидкими рефракциями — я сел и повторил его в SwiftUI. Снаружи это всего одна строчка модификатора, но под капотом серьёзная кухня: Metal-шейдеры, off-screen snapshot в MTLTexture, ленивый redraw без мерцания, защита от рекурсий и никаких скриншотов руками.
Button("Click Me 🔥") { … }
.liquidGlassBackground()
Что делает
• ⚡️ Захватывает фон в реальном времени, но только когда он реально меняется
• 💤 MTKView спит — батарея не горит
• 🛠 Режимы: .continuous, .once, .manual
• 🎨 Шейдер открыт: меняйте blur, refraction, tint как хотите
• 🍏 Чистый SwiftUI, iOS 14+, MIT
Подключить:
https://github.com/BarredEwe/LiquidGlass
Скрины + GIF примера — в README. Забирайте, форкайте, кидайте идеи! 🚀
🇯🇵 Зашёл в книжный в Токио
Куча книг по iOS: SwiftUI, Xcode 16, iOS 18, Swift 6. Всё в духе «освой за 2 дня», «сделай 6 приложений», «начни с нуля».
Каждая — как отдельный мини-курс, с кучей скриншотов, пошаговыми инструкциями и объяснениями, почему вот тут .padding() не работает.
🔍 А теперь внимание — книга про iOS на Python. Да, серьёзно.
Pythonista 3, NumPy, GUI, игры, расширение iOS‑функционала. Всё это — прямо на айфоне.
Похоже на гайд для школьника, который хочет сделать свою первую игру и параллельно — калькулятор с графиком.
📚 В целом — в Японии дико много литературы по iOS.
Не абстрактные философские книги, а прям пошаговые гайды, как будто для внутреннего дзена:
«Нажми здесь, запусти вот это, а теперь обратись к SwiftData через ObservableObject и помолись».
Куча книг по iOS: SwiftUI, Xcode 16, iOS 18, Swift 6. Всё в духе «освой за 2 дня», «сделай 6 приложений», «начни с нуля».
Каждая — как отдельный мини-курс, с кучей скриншотов, пошаговыми инструкциями и объяснениями, почему вот тут .padding() не работает.
🔍 А теперь внимание — книга про iOS на Python. Да, серьёзно.
Pythonista 3, NumPy, GUI, игры, расширение iOS‑функционала. Всё это — прямо на айфоне.
Похоже на гайд для школьника, который хочет сделать свою первую игру и параллельно — калькулятор с графиком.
📚 В целом — в Японии дико много литературы по iOS.
Не абстрактные философские книги, а прям пошаговые гайды, как будто для внутреннего дзена:
«Нажми здесь, запусти вот это, а теперь обратись к SwiftData через ObservableObject и помолись».