Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Затишна Галера
Додано 06 січ 2025

Затишна Галера

@Zatishna_Galera
Кількість підписників: 2 706
Фото: 1,370
Відео: 437
Посилання: 1,850
Опис:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley

👥 Кількість підписників

2 706
Середній/День:: -2
Середній/Тиждень:: +4
Середній/Місяць:: +3

👁️ Середній перегляд на повідомлення

614
Середній/День:: 584
Середній/Тиждень:: 639
ERR: 22.69%

📊 Кількість повідомлень на день

1.5
Останній день: 0
Середнє за тиждень: 1
Середнє за день: 1.5

Історія зміни статуса

Офіційно не підтверджена 2025-01-06

Стіна

Статистика telegram каналу

👁 637 26-04-20 10:21
#ЧарівнийКомпас 🧭2️⃣3️⃣6️⃣ Завдання 236Що таке data-driven testing і які в нього переваги?Капітан повернувся з відпустки та Дня Народження і влітає в цей тиждень із новою п’ятіркою запитань з теорії тестування.🤔 Data-driven testing - це підхід до тестування, за якого логіка тесту відокремлюється від тестових даних. Головне завдання не тільки відокремити логіку тесту від даних, а й проганяти тести з різними наборами вхідних даних, щоб перевірити якомога більше кейсів.Тобто, маючи один і той самий набір тестів, ви проганяєте його перший раз з одним набором даних, другий раз з іншим і так далі. Крім даних, це може стосуватися і конфігурацій.Для прикладу візьмемо тест на логін. Замість безлічі різних тестів на валідний логін, невірний пароль, порожній пароль і так далі, ви пишете один тест, а всі комбінації даних виносите окремо, наприклад у таблицю. Далі проганяєте цей тест для всіх варіантів вхідних даних із таблиці.👍 Це часто корисно для автоматизації, бо зменшує кількість коду, один тест покриває безліч сценаріїв. Це спрощує підтримку тестів, дає простіше масштабування, спрощує читабельність і структуру.Використовувати рекомендується у випадках, коли у вас безліч варіантів поведінки системи залежно від вхідних значень, потрібно перевірити безліч комбінацій і коли вам потрібна красива автоматизація.😡 Складність може виникнути, коли у вас поведінка системи ну дуже відрізняється залежно від даних, тоді написати один тест на різні дані й поведінку стає складнувато.@Zatishna_Galera
👁 615 26-04-17 16:30
Трохи порад по використанню AI у вайбкодингу розробціБуду від простого до складного - бери те, що підходить під твій рівень зараз.Рівень 0. Починай з правильного інструментуЮзати одну модель під усе - це як закручувати шурупи кубалдою. Перестань це робити.Для UI і лендингів беру Gemini 3.1 Pro Preview - логіка не її сильна сторона, але красивий компонент або лендинг він робить краще за конкурентів. Для генерації картинок і плейсхолдерів - Nano Banana або Qwen Image як китайська альтернатива.Claude Sonnet 4.6 - коли є простий баг без великого контексту. Швидко, надійно, в ліміти упрешся не так швидко. Claude Opus 4.7 - коли пилиш нову велику фічу і потрібно трохи поthinkати. Але готуйся до плану $100+ або екстра юзеджу. GPT-5.4 - гідна альтернатива Opus якщо вперся в ліміти.Є ще декілька непоганих китайских моделей для дейлі юзеджу, останнім часом користувався MiniMax та Kimi, але не радже їх як основні.Рівень 1. Голос і сетап - мікрофішки, що економлять годиниВідкрив для себе Aqua Voice кілька місяців тому - диктуєш промпт замість того щоб набирати. Поставив курсор, хоткей, надиктував - текст у полі. Звучить як очевидна штука, але на практиці реально прискорює.По сетапу проєкту - якщо не робив /init у Claude Code, зроби зараз. Він створить CLAUDE.md і базову структуру .claude/. Якщо працюєш з UI - заведи окремий DESIGN.md з дизайн-спеками, тоді модель менше фантазую і строїть з себе Джонні Айва.Один лайфхак з CLAUDE.md: напиши там що код буде ревьюити інша модель. Результат виходить трохи якіснішим - модель починає писати так, ніби тімлід стоїть над головою.На картинці вище - повна структура .claude/ зі скілами, командами, агентами і рулами. Якщо не розумієш навіщо воно - не лізь поки що, розберись спочатку з базою. Якщо цей пост набере 50 реакцій 🔥 - розпишу кожен блок окремо.Рівень 2. AI SDLC - якщо йдеш в all in Викинь з голови ілюзію, що AI розуміє тебе з півслова. Це джун, можливо мідл, але точно не бородатий сіньйор (¡hola! @Zatishna_Galera). Без детального ТЗ він зробить ХЗ (garbage in - garbage out). Забудь про one-shot prompting на складних тасках.Мій флоу зараз виглядає ось так:1. Детально розписав реквайрменти у Fizzy (дуже проста альтернатива Jira чи ClickUp, в нього є MCP, одразу підключив до агента)2. Згодував іх агенту в plan-mode3. Разом спланували кроки4. Закинув у роботу5. Рев'ю <-- починаючи з цього степу починається Fine Tuning6. Прийомка7ю Давай по новой, Міша Те, на що раніше йшли дні, зараз закривається за пару годин. І це ще є куди оптимізувати.Якщо працюєш над своїм проектом в соло, особисто рекомендую використовувати цей флоу - значно прискорює делівері і будує адекватну картинку навколо проєктуюГоловне що я виніс почавши працювати на кодом з AI: AI coding - це не про те щоб модель писала код замість тебе. Це про те щоб ти думав про продукт, поки модель думає про код.Репостни якщо корисно - хай більше людей дізнається 🙏 Ну і не забувай про реакції!
👁 677 26-04-15 07:04
#iOSКомпас 🧭1️⃣5️⃣0️⃣ Завдання 150Як проводити міграцію в SwiftData без втрати даних?Пробачте за кілька днів тиші, Капітан святкував День Народження, але ми повертаємось! Доброго здоровля мої любі друзі. З вами ваш незмінний iOS розробник Сергій з @badlinkschannel.Коли в застосунку змінюється модель даних, міграція стає тим ще головняком. Особливо якщо користувачі вже накопичили тонни інформації, яку не можна просто викинути. SwiftData пропонує кілька способів розрулити це: від автоматичних легких міграцій до повністю ручних, де розробник контролює кожен крок. Розбираємося, як не наступити на граблі.🔣 Версіонування з першого дня:Будь-яку роботу з даними краще одразу будувати з версіонуванням. Навіть якщо зараз у вас одна-єдина модель, закласти VersionedSchema - хороша ідея. Це створює стабільну точку відліку. Потім, коли з'являться зміни, буде зрозуміло, звідки і куди мігрувати.Зазвичай схемам дають номери версій: V1, V2, V3. У коді вони живуть як окремі enum зі списком моделей та ідентифікатором версії. А для зручності в основному коді часто використовують typealias, щоб щоразу не писати щось на кшталт ExerciseSchemaV5.Exercise.Нову версію варто заводити перед кожним релізом, у якому змінюються моделі. Навіть якщо змін кілька, вони всі можуть увійти в одну версію схеми. Головне - щоб користувачі, які пропустили пару оновлень, могли доїхати одразу в актуальну версію без втрати даних.🔣 Коли SwiftData справляється сама:Є зміни, які SwiftData вміє обробляти автоматично. Серед них: Додавання опціонального поля - старі об'єкти просто отримають nil. Видалення поля - дані цього поля загубляться, але сама міграція пройде спокійно. Перейменування поля - якщо вказати @Attribute(originalName:).У таких випадках можна або взагалі не писати міграційний план, або додати його для порядку, але використати легкий етап .lightweight. План може стати в пригоді, коли хочеться чітко контролювати всі кроки й нормально це тестувати.🔣 Коли потрібна ручна робота:Легка міграція перестає бути достатньою, коли нове поле треба не просто додати, а ще й осмислено заповнити для старих записів. Те саме - коли треба перетворити дані: змінити тип, розбити одне поле на кілька, змерджити сутності, почистити дублікати.У таких випадках пишеться SchemaMigrationPlan з кастомними етапами. У кожного етапу є дві фази: willMigrate - виконується до застосування нової схеми й працює зі старими даними, наприклад тут можна почистити дублікати. didMigrate - виконується після застосування нової схеми, і тут уже доступні нові моделі та можна доробити дані під нову структуру.Наприклад, якщо в новій версії з'являється поле createdAt, безпечніше або дати йому дефолтне значення, або спочатку зробити його опціональним, а вже потім окремим кроком заповнити для старих об'єктів.#️⃣ сМіграції в SwiftData - це не про героїзм, а про акуратність. Якщо з самого початку закласти версіонування й продумувати зміни, більшість проблем вирішуються або автоматично, або невеликими кастомними етапами. А для найскладніших випадків завжди можна розбити задачу на кілька версій, щоб не переписувати все за один раз. Головне - не забувати тестувати на реальних даних, а не тільки на порожній базі в симуляторі.@Zatishna_Galera
👁 726 26-04-10 08:04
#Партнерка Пасажири, поділюсь з вами каналом (@sololemonx), який мені не соромно вам порадити. Веде мій гарний друг, робить реально цікавий контент, тому роблю це впевнено і вам у нагоду. Далі - з його слів:Скільки фіч ти вже навеслував для чужих продуктів?Сто? Двісті? І що з того залишилось тобі - досвід? зарплата? опціон (ой, кому ти розказуєш)?Ти знаєш, як робиться продукт від ідеї до прода. Як думає користувач. Де ламається воронка. Але кожного ранку береш весло і гребеш далі.AI вже замінює частину того, що ти вмієш. Layoff-хвилі йдуть третій рік. Страховка тут одна - щось своє.Solo Lemon - канал про те, як IT-спеці запускають власні продукти. Маркетинг без бюджету, перший фідбек від реальних юзерів, процеси, коли ти сам собі і CEO і розробник. Без звільнення з роботи, без венчуру.На каналі є кейси людей, які вже запустились:🍋 $13K MRR на open source інструменті🍋 Як брати $29 за MacOS апку для скрінрекордингу без знання Swift і заробляти (привіт Сергію з @badlinkschannel)З нуля, в соло.Якщо в твоїх нотатках давно пилиться папка "Ідеї" - час перетворити їх на MRR. Залітай: @sololemonx@Zatishna_Galera
👁 560 26-04-08 07:01
#iOSКомпас 🧭1️⃣4️⃣9️⃣ Завдання 149Як відмініти Operation?З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.🤔 В Operation (раніше NSOperation) у Foundation є вбудований механізм скасування, який дозволяє коректно завершити операцію, якщо вона більше не потрібна. Однак скасування не перериває виконання автоматично - код усередині операції повинен сам перевіряти прапор скасування і коректно завершуватися.🔣 Як працює скасування Operation?Викликається cancel() - операція позначається як скасована.Прапор isCancelled стає true, але операція продовжує виконуватися, якщо не перевіряє цей прапор.Операція повинна самостійно перевіряти isCancelled і перериватися.class MyOperation: Operation { override func main() { for i in 1...10 { if isCancelled { return } // Перевіряємо, чи скасована операція print("Виконується крок \(i)") sleep(1) // Симуляція роботи } }}let queue = OperationQueue()let operation = MyOperation()queue.addOperation(operation)DispatchQueue.main.asyncAfter(deadline: .now() + 3) { operation.cancel() // Скасовуємо через 3 секунди} 🔣 Скасування асинхронних операційЯкщо операція асинхронна (isAsynchronous = true), просто перевіряти isCancelled недостатньо. Треба коректно керувати станами (isExecuting, isFinished).class AsyncOperation: Operation { private var _executing = false private var _finished = false override var isAsynchronous: Bool { true } override var isExecuting: Bool { get { return _executing } set { willChangeValue(for: \.isExecuting) _executing = newValue didChangeValue(for: \.isExecuting) } } override var isFinished: Bool { get { return _finished } set { willChangeValue(for: \.isFinished) _finished = newValue didChangeValue(for: \.isFinished) } } override func start() { if isCancelled { isFinished = true return } isExecuting = true executeTask() } private func executeTask() { DispatchQueue.global().asyncAfter(deadline: .now() + 3) { if self.isCancelled { self.complete() return } print("Асинхронна операція завершена") self.complete() } } private func complete() { isExecuting = false isFinished = true }}let queue = OperationQueue()let asyncOp = AsyncOperation()queue.addOperation(asyncOp)DispatchQueue.main.asyncAfter(deadline: .now() + 1) { asyncOp.cancel() // Скасовуємо через 1 секунду} 🔣 Скасування залежних операційЯкщо у вас є залежності між операціями, скасування однієї операції не скасовує інші автоматично. Залежні операції просто не почнуть виконуватися, якщо їхня залежність не завершилася коректно.let op1 = MyOperation()let op2 = MyOperation()op2.addDependency(op1)let queue = OperationQueue()queue.addOperations([op1, op2], waitUntilFinished: false)// Скасовуємо першу операціюop1.cancel() @Zatishna_Galera
👁 614 26-04-06 13:25
#ЧарівнийКомпас 🧭2️⃣3️⃣5️⃣ Завдання 235Що робить команда nslookup і чим вона відрізняється від ping?Закінчуємо п’ятірку технічних питань зі співбесід. Вкрай просте питання, але різницю знати важливо.🤔 nslookup використовується для перевірки DNS. Ця команда робить запит до DNS-сервера і показує, в яку IP-адресу резолвиться доменне ім’я або навпаки. Вона потрібна для перевірки, чи працює DNS правильно і як налаштовані записи.🤔 ping, своєю чергою, перевіряє вже мережеву доступність за IP або доменом. По суті показує, чи доходить пакет до хоста і яка затримка присутня.#️⃣ Головне, що потрібно пам’ятати, це те що nslookup відповідає на питання «чи правильно ім’я перетворюється на IP», а ping - «чи можна взагалі достукатися до цієї адреси». Можуть бути ситуації, коли nslookup працює і повертає IP, але ping не проходить, означає, що DNS у порядку, але є проблеми з мережею або хост недоступний. І навпаки, якщо nslookup не може резолвити ім’я, то проблема саме на рівні DNS, навіть якщо сам сервер фізично доступний.@Zatishna_Galera
👁 593 26-04-03 07:02
#ЗатишнийDigest👍 П'ятничний digest новин зі світу IT:1️⃣ SPACEX ГОТУЄ НАЙБІЛЬШЕ IPO В ІСТОРІЇSpaceX подали конфіденційну заявку на IPO в SEC, але головне - за чутками компанія підняла орієнтир оцінки вище $2 трлн. Це може стати найбільшим IPO в історії.2️⃣ OPENAI ЗАКРИЛИ РАУНД НА $122 МЛРДOpenAI офіційно закрили раунд на $122 млрд при оцінці $852 млрд. Чекаємо IPO..3️⃣ OPENAI КУПУЄ ASTRALOpenAI купули Astral і прямо кажуть, що це потрібно для посилення Codex. Codex уже має понад 2 млн тижневих активних користувачів і з початку року виріс утричі.4️⃣ ANTHROPIC ПРИЦІЛЮЄТЬСЯ МАЙЖЕ В $2 ТРЛНУ слайдах для інвесторів Coatue прогнозує Anthropic оцінку в $1,995 трлн у 2030 році і $2,413 трлн у 2031-му. Там же фігурують $18 млрд виручки у 2026 і вже $200 млрд виручки до 2031. Звучить як дуже сміливий прогноз, але ринок ШІ зараз дуже дивний.5️⃣ ANTHROPIC ЗЛИЛИ ЧАСТИНУ КОДУ CLAUDE CODEAnthropic випадково виклали понад 500 тисяч рядків коду Claude Code через packaging error. Компанія каже, що це людська помилка, і що дані клієнтів не постраждали, але сам факт не дуже неприємний.6️⃣ BLUE ORIGIN ТЕЖ ПОЛІЗЛИ В КОСМІЧНІ ДАТА-ЦЕНТРИBlue Origin подали документи на Project Sunrise - мережу майже з 52 000 супутників для обчислень на орбіті. Схоже, орбітальні дата-центри перестають бути дивною фантазією і стають новою колективною манією мільярдерів.7️⃣ ІНЖЕНЕР MIDJOURNEY ПОКАЗАВ PRETEXTPretext - це новий open-source інструмент від інженера Midjourney, який дозволяє поводитися з текстом у вебі майже як із живою субстанцією. Текст динамічно обтікає об’єкти, рухається і перебудовується в реальному часі. Виглядає ефектно.8️⃣ TELEGRAM ВИКАТИВ ВЕЛИКЕ ОНОВЛЕННЯTelegram додав ШI-редактор для редагування, перекладу і переписування тексту, нові фічі для опитувань, підтримку Live і Motion Photos, а також сканер документів. 9️⃣ GOOGLE ДОЗВОЛИЛИ ЗМІНЮВАТИ АДРЕСУ GMAILGoogle дозволили змінювати адресу без втрати акаунта і даних. Але є нюанс - зараз це повноцінно доступно в США та змінювати можна раз на 12 місяців і не більше трьох разів за весь час. 1️⃣0️⃣ QWEN 3.5-OMNI ВИЙШЛАQwen 3.5-Omni офіційно представили як повністю omnimodal модель із підтримкою тексту, зображень, аудіо та аудіовізуального контенту. 1️⃣1️⃣ CLAUDE CODE ТЕПЕР МОЖЕ ТЕСТУВАТИ UI ПРЯМО З CLIAnthropic відкрили computer use у Claude Code CLI на macOS у research preview для Pro і Max підписок. Через /mcp Claude може клікати, друкувати, бачити екран і тестувати нативні застосунки та UI-флоу прямо з термінала. @Zatishna_Galera
👁 487 26-04-01 10:35
#iOSКомпас 🧭1️⃣4️⃣8️⃣ Завдання 148Що таке м’ютекс (mutex)?Починаємо мобільну середу! З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.🤔 М’ютекс (від англ. «mutex» - mutual exclusion, взаємне виключення) - це механізм синхронізації, який використовується у багатопотоковому програмуванні для запобігання одночасному доступу кількох потоків до спільних ресурсів, таких як змінні, структури даних або файли. Він допомагає уникнути стану гонки (race condition), коли результат виконання програми залежить від невизначеного порядку доступу потоків до ресурсу.🔣 Основні концепції м’ютекса🔣 Взаємне виключенняМ’ютекс забезпечує доступ до спільного ресурсу лише одному потоку в кожен момент часу. Коли один потік захоплює м’ютекс, інші потоки повинні чекати, поки м’ютекс не буде звільнений.🔣 Захоплення і звільненняПотік захоплює м’ютекс перед доступом до спільного ресурсу і звільняє його після завершення роботи з цим ресурсом. Якщо м’ютекс уже захоплений іншим потоком, поточний потік буде заблокований доти, поки м’ютекс не буде звільнений.🤓 Приклад використання м’ютекса в Swiftimport Foundationclass SafeCounter { private var value = 0 private let lock = NSLock() func increment() { lock.lock() value += 1 lock.unlock() } func getValue() -> Int { lock.lock() let currentValue = value lock.unlock() return currentValue }}let counter = SafeCounter()let group = DispatchGroup()for _ in 0..<2 { DispatchQueue.global().async(group: group) { for _ in 0..<1000 { counter.increment() } }}group.wait()print("Final counter value: \(counter.getValue())") 🔣 Плюси і мінуси👍 Безпека данихМ’ютекси захищають спільні ресурси від одночасного доступу, запобігаючи пошкодженню даних.👍 ПередбачуваністьКод стає більш передбачуваним і стабільним, оскільки виключаються стани гонки.😡 Мертві блокування (Deadlocks)Якщо м’ютекси захоплюються у неправильному порядку, це може призвести до ситуації, коли два або більше потоків блокують один одного, очікуючи звільнення м’ютексів.😡 ПродуктивністьНадмірне використання м’ютексів може призвести до зниження продуктивності через збільшення часу очікування потоків.@Zatishna_Galera
👁 688 26-03-27 10:01
GOOGLE І TURBOQUANT - ПОРЯТУНОК ЧИ НІ?Інтернет уже шумить кілька днів з приводу TurboQuant, алгоритму, який, за заявою багатьох авторів, може скоротити в 6 разів використання пам’яті для нейронок і збільшити швидкість у 8 разів, але чи так це?Я не буду вдаватися в подробиці, як це працює технічно дуже глибоко, скажу лише, що головна штука цього алгоритму в тому, що він результат, дуже грубо кажучи, розмазує й округляє для кожної частини вхідних значень, а потім цей «апроксимований результат» з великого обсягу даних видає як кінцевий. І загалом ідея здорова, коли точність вам не важлива.Проблема тільки в тому, що якраз для LLM точність важлива, інакше що ми отримаємо на виході? Правильно - безліч галюцинацій. І хоч алгоритм має право на існування й може зробити свій внесок, ось тільки він був опублікований ще 28 квітня 2025 року, а зараз просто з цього роздули новину. Тобто його вже точно застосовують, якщо він може бути десь корисним, а значить, і так уся можлива на сьогодні економія використана, і це ніяк не вплине на пам’ять.При цьому десяток каналів, тільки в мене в підписках, уже радісно видають цю новину як «прорив». Ну так, прорив, який, по-перше, не завжди допоможе, а по-друге, вже старуватий. Ну лох не мамонт, як то кажуть, підписники таких каналів схавають.А ми з командою наших пасажирів такими не вважаємо, тому читайте перевірені новини й робіть висновки самі.Акції компаній, що виробляють пам’ять, на тлі новини все одно впали на 10-15% (зокрема Samsung і Micron).@Zatishna_Galera
👁 592 26-03-26 10:04
OPENAI ЗАКРИВАЮТЬ SORAПри цьому компанія втрачає $1 млрд, який фігурував у переговорах з Disney. Мабуть, перекидання ресурсів на бізнес-сегмент справді сильно припікає, раз ухвалюються такі кроки.При цьому, буквально днями ми обговорювали з друзями, що Anthropic дедалі більше виглядає потенційним лідером на ринку, ніж OpenAI.Щоправда, я з цим не згоден. На цей момент, на думку Капітана, OpenAI далеко попереду планети всієї у сфері ШІ для «домогосподарок» (або звичайного обивателя, нікого не хочу образити), тобто міцно тримають нішу звичайного повсякденного чат-бота, з яким простіше за все початитися і поріг входу мінімальний. А ось Anthropic точно обганяє в плані бізнес-сегмента.Якщо говорити про голі цифри, то у OpenAI вливань куди більше капіталу, ніж у Anthropic, а значить і можливостей для розвитку за правильного застосування всіх цих грошей більше. Плюс показники на цей момент за виручкою - OpenAI приблизно $25 млрд (з них на бізнес припадає близько $10 млрд), а у Anthropic із $19 млрд - близько 80% припадає на бізнес-сегмент (більше $15 млрд). Це показує, що OpenAI дешевими підписками може генерувати купу грошей, має більшу базу користувачів, але дуже погано розвивала бізнес-сегмент, а ось Anthropic навпаки. А далі у OpenAI підуть гроші з реклами, тому що саме «обивательський» сектор реклама і буде таргетувати, а ось Anthropic рано чи пізно упреться в межу професійного ринку, який за кількістю юзерів точно менший, ніж «обивательський».Тому в довгу я особисто бачу два сценарії: перший, де OpenAI займає нішу повсякденного використання ШІ для звичайної людини, а Anthropic домінує у професійному, або ж, у що я більше вірю, OpenAI нас ще здивує і зуміє перебити карти Anthropic, нагадаю про перехід засновника OpenClaw до OpenAI, про який поки новин ми не чули.Час покаже, але я майже впевнений, що OpenAI готує якусь бомбу вже найближчим часом.@Zatishna_Galera