Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Затишна Галера
Added 06 Jan 2025

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

@Zatishna_Galera
Number of subscribers: 2 703
Photos: 1,360
Videos: 432
Links: 1,830
Description:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley

👥 Number of subscribers

2 703
Average/Day:: -1
Average/Week:: -2
Average/Month:: -11

👁️ Average views per message

615
Average/Day:: 614
Average/Week:: 579
ERR: 22.75%

📊 Messages per Day

2.6
Last day: 0
Week average: 1.9
Average per day: 2.6

Status change history

Officially not confirmed 2025-01-06

Wall

Telegram statistics channel

👁 679 25-10-13 14:53
#ЧарівнийКомпас 🧭2️⃣1️⃣0️⃣ Завдання 210Чим відрізняється специфікація від вимог?Закриваємо останнє питання з п’ятірки про QA-теорію питанням від пасажира, каже, запитали на співбесіді на junior позицію в одній з відомих компаній у нас. Запитали - розберемо.Почнемо з визначень:🤔 Вимоги (вони ж requirements) - опис того, що клієнт хоче отримати з точки зору бізнесу або кінцевого користувача.🤓 Приклади: Можливість оплачувати товари карткою Історія покупокГрубо кажучи - що потрібно з точки зору бізнесу, без детальних подробиць і вже тим більше без технічних. Наша головна мета - зрозуміти вектор, якщо можна так сказати, куди ми рухаємося і до чого хочемо прийти в кінці. 🤔Специфікація (або ж specification) - деталізований опис роботи системи, щоби вона змогла відповідати заздалегідь обговореним вимогам.🤓 Приклади: Логіка роботи Формати даних Правила валідаціїТут уже головна мета - отримати відповідь на запитання, а як саме ми досягнемо вимог, отриманих від замовника. Саме специфікація чудово підходить для побудови тест-кейсів.#️⃣ Для QA-інженера насправді обидві ці речі важливі. Вимоги - допомагають зрозуміти, що важливо для нашого замовника, яке його уявлення про бізнес, які сценарії основні. Специфікації - детальне джерело для тест-кейсів, детальна поведінка системи за певних умов.@Zatishna_Galera
👁 729 25-10-01 12:05
#iOSКомпас 🧭1️⃣2️⃣2️⃣ Завдання 122Що таке бар’єри?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.🤔 Barrier - це механізм синхронізації потоків, який дозволяє контролювати порядок виконання операцій у багатопотоковому середовищі.🔣 Memory BarriersВикористовуються у багатопоточному програмуванні для керування порядком операцій із пам’яттю.У багатопотоковому середовищі процесори й компілятори можуть змінювати порядок команд задля оптимізації, що може призвести до непередбачуваної поведінки. Бар’єри пам’яті запобігають цьому.#include <stdatomic.h>atomic_int sharedValue = 0;void updateValue() { atomic_store_explicit(&sharedValue, 10, memory_order_release);}void readValue() { int value = atomic_load_explicit(&sharedValue, memory_order_acquire);} 🔣 Бар’єри в GCD (dispatch_barrier)Використовуються у Grand Central Dispatch (GCD) для контролю порядку виконання завдань у паралельній черзі (DispatchQueue з атрибутом .concurrent). Дозволяють синхронізувати доступ до ресурсу, блокуючи чергу на час виконання завдання. Усі завдання до бар’єра виконуються паралельно. Бар’єр чекає завершення всіх попередніх завдань, виконується ексклюзивно, а потім дозволяє наступним завданням продовжити роботу.let queue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)queue.async { print("Завдання 1")}queue.async { print("Завдання 2")}// БАР'ЄРНА ОПЕРАЦІЯqueue.async(flags: .barrier) { print("Бар'єр: усі попередні завдання завершені, виконуюсь один!")}queue.async { print("Завдання 3")} @Zatishna_Galera
👁 500 25-08-13 08:55
#iOSКомпас 🧭1️⃣1️⃣5️⃣ Завдання 115Навіщо потрібен оператор future?Команда повертаємось потрошки до роботи! Повна сил і готова роботи ще більше!Сьогодні з вами знову на зв'язку Сергій з @badlinkschannel. Продовжуємо занурюватися у глибини на нашому маленькому iOS батискафі.У мові Swift немає вбудованого оператора future, але якщо йдеться про концепцію Future з асинхронного програмування, розберімося, навіщо вона потрібна і як використовується.🤔 Що таке Future?Future (або Promise у деяких реалізаціях) - це об’єкт, який представляє значення, що стане доступним у майбутньому після завершення асинхронної операції. Це зручно, коли потрібно працювати з кодом, який виконується не миттєво: Запити до мережі (API) Зчитування файлів Тривалі обчисленняУ Swift Future найчастіше використовується в рамках Combine.🔣 Як працює Future у Swift (на прикладі Combine)?У Combine є структура Future, яка дозволяє створити асинхронну операцію і підписатися на її результат:import Combine// Функція, що повертає Futurefunc fetchData() -> Future<String, Error> { return Future { promise in DispatchQueue.global().asyncAfter(deadline: .now() + 2) { let success = Bool.random() // Симулюємо успіх або помилку if success { promise(.success("Дані завантажено!")) } else { promise(.failure(NSError(domain: "Помилка завантаження", code: -1, userInfo: nil))) } } }}// Використання Futurelet future = fetchData()let cancellable = future.sink(receiveCompletion: { completion in switch completion { case .finished: print("Завершено без помилок") case .failure(let error): print("Помилка: \(error.localizedDescription)") }}, receiveValue: { value in print("Отримані дані: \(value)")}) #️⃣ Коли використовувати Future? Коли потрібна одноразова асинхронна операція (наприклад, запит до мережі) Коли використовуєш Combine і хочеш обгорнути асинхронний код у реактивний стиль Якщо у майбутньому плануєш об’єднувати кілька асинхронних операцій (композиція Future)@Zatishna_Galera
👁 734 25-08-05 21:02
OPENAI ВИПУСТИЛИ ДВІ OPEN SOURCE МОДЕЛІПоки під постом про збір нашим бійцям у нас іде перепис довбойобів, OpenAI зробили цілу низку анонсів.Для початку випустили дві відкриті моделі GPT OSS, на 120b (5.1 активних) і 20b (3.6 активних) параметрів. Обидві мислячі й підтримують 3 типи «глибини»: low, medium, high. Є виклик інструментів прямо в ланцюжку міркувань (як в o3). На жаль, модельки без мультимодальності, тобто відсутня підтримка картинок, відео і звуку.Судячи з усього, старша модель обходить o4‑mini, а молодша - на рівні o3‑mini. Ліцензія Apache 2.0, по суті їх можна використовувати в стартапах для чого завгодно і як завгодно, а це саме те, за що OpenAI завжди прилітало - що вони, мовляв, Open, але не дуже; схоже, що ця ера вже в минулому.З цікавого: молодшу модель можна запустити на GPU з 16 GB пам’яті, а старшу - на 80 GB. Грубо кажучи, цю радість можна запускати практично вдома на досить простому залізі. Посилання на GitHub додаю.Але й це ще не все. GPT‑5 чекаємо вже 7 серпня, і, за запевненнями - це бомба. Усі функції в одному чаті, якщо нас не обманюють.@Zatishna_Galera
👁 891 25-07-23 08:30
#iOSКомпас 🧭1️⃣1️⃣2️⃣ Завдання 112У чому плюси й мінуси Auto Layout і frame?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel. 🤔 В iOS-розробці існує два основних способи керування розташуванням і розміром елементів інтерфейсу: Auto Layout і використання фреймів (frame). Розглянемо переваги й недоліки кожного підходу.🔣 Auto Layout👍 Плюси АдаптивністьAuto Layout дає змогу створювати інтерфейси, які підлаштовуються під різні розміри екранів та орієнтації пристроїв. Це особливо важливо для підтримки iPhone та iPad. Реакція на зміниЛегко змінювати інтерфейс при зміні контенту чи розміру екрана, наприклад, під час повороту пристрою. Зручність локалізаціїАвтоматично враховує зміну розмірів елементів при перекладі додатка різними мовами. Підтримка динамічного шрифтуЛегко адаптується для різних розмірів шрифтів, що важливо для доступності. ГнучкістьДозволяє створювати складні інтерфейси з мінімальними зусиллями завдяки використанню констрейнтів (constraints).😡 Мінуси СкладністьМоже бути складним для вивчення, особливо для початківців. ПродуктивністьУ деяких випадках вимагає більше ресурсів, що може вплинути на продуктивність, особливо при великій кількості констрейнтів. Залежність від версії XcodeПотребує сучасних версій Xcode для повного доступу до всіх можливостей.🔣 Frames👍 Плюси ПростотаЛегко зрозуміти й використовувати, особливо для простих інтерфейсів чи прототипів. ПродуктивністьЧасто це швидший спосіб розташування елементів, бо не потребує обчислень для констрейнтів. КонтрольПовний контроль над розташуванням і розміром кожного елемента.😡 Мінуси Складнощі з адаптивністюВажко пристосувати інтерфейс до різних розмірів екранів і орієнтацій. Потрібне ручне налаштування під кожний пристрій. Підтримка змінПотрібно додатково обробляти зміни, такі як поворот пристрою або зміна контенту. МасштабованістьМенш зручний для масштабованих інтерфейсів і локалізації, адже розміри та позиції потрібно задавати вручну. Складні інтерфейсиСтворення складних інтерфейсів займає більше часу й зусиль.🤓 Приклади використання🔣 Auto Layoutlet button = UIButton()button.translatesAutoresizingMaskIntoConstraints = falseview.addSubview(button)NSLayoutConstraint.activate([ button.centerXAnchor.constraint(equalTo: view.centerXAnchor), button.centerYAnchor.constraint(equalTo: view.centerYAnchor), button.widthAnchor.constraint(equalToConstant: 100), button.heightAnchor.constraint(equalToConstant: 50)]) 🔣 Frameslet button = UIButton()button.frame = CGRect(x: 100, y: 100, width: 100, height: 50)view.addSubview(button) @Zatishna_Galera
👁 871 25-07-21 07:02
#ЧарівнийКомпас 🧭2️⃣0️⃣0️⃣ Завдання 200Що таке Lead Time та Cycle Time в Kanban?Закінчуємо п’ятірку запитань з менеджменту. Сьогодні будемо розглядати Kanban і дві метрики з нього – Lead Time і Cycle Time.🤔 Lead Time і Cycle Time – надзвичайно важливі метрики, які притаманні Kanban і не тільки. Вони показують, наскільки швидко ваша команда приносить користь, і допомагають зрозуміти, чи можна щось оптимізувати для ще більших результатів. Це частково пов’язано з питанням Value Stream Mapping, який ми вже розбирали в цій п’ятірці.🔣 Lead Time (воно ж час від запиту до завершення) – проміжок часу, що пройшов від моменту появи задачі від клієнта або іншого стейкхолдера до її завершення або релізу. До нього входить абсолютно все – очікування вимог, підготовка до початку роботи, сама робота, включно з розробкою і тестуванням, рев’ю і навіть простой у беклозі, коротше – увесь час від появи задачі до її завершення.🔣 Cycle Time (воно ж час активної роботи над задачею) – на відміну від Lead Time, сюди ми включаємо лише час активної роботи над задачею, тобто – тестування, розробку й інші роботи, пов’язані з активною фазою. Ми не включаємо простої задачі в беклозі, очікування вимог та інші речі, які не відповідають реальній роботі над цією задачею.🤓 Для наочності приклад:Клієнт передав нам задачу в беклог 1-го липня. Ми уточнювали якісь деталі і взяли її в роботу тільки 5-го липня, а 20-го включно завершили. Уявімо, що робота кипіла без вихідних для спрощення розрахунків.У такому разі:🔣 Lead Time: 1–20 липня, тобто 20 днів🔣 Cycle Time: 5–20 липня, тобто 16 днів.📌 Грубо кажучи:Lead Time: Backlog 🔣 DoneCycle Time: In Progress 🔣 Done#️⃣ Чим це корисно?Lead Time показує, наскільки довго клієнт реально чекає на виконання задачі з моменту її появи в голові, а Cycle Time – наскільки ефективно команда працює.І тут саме стає важливо Value Stream Mapping, який цілком накладається на ці два показники. Наприклад, якщо клієнт жаліється, що задача виконується занадто довго, тому що він вважає, що вона взята в роботу з моменту появи в беклозі, але ви можете показати, що її Cycle Time значно менше за Lead Time, то це значить, що багато часу витрачається на простій або уточнення деталей – і це саме те місце для оптимізації.@Zatishna_Galera
👁 765 25-06-30 11:34
#ЧарівнийКомпас 🧭1️⃣9️⃣7️⃣ Завдання 197Хто такий Program Manager і чим він відрізняється від Project Manager?🤔 Program Management - це координація кількох взаємопов’язаних проєктів в межах одного акаунта. Зазвичай ці проєкти мають спільну мету, якої неможливо досягти один без одного.Project Manager зазвичай відповідає за окремо взятий проєкт і досягнення його цілей. У свою чергу, Program Manager працює з усіма проєктами, які пов’язані з глобальною метою конкретного акаунта. Наприклад, маємо окремі проєкти в межах акаунта інтернет-магазину: мобільний застосунок для магазину, вебсайт, сервіс для логістики й обліку товарів, складський облік тощо. Якщо це достатньо великий і потужний гравець на ринку, то кожен із цих проєктів може розробляти окрема команда зі своїм Project Manager. Але всі ці проєкти матимуть залежності між собою і переслідуватимуть одну спільну мету. Координацією й роботою з цими залежностями займається Program Manager.Звідси випливає, що важливими рисами Program Manager є робота із залежностями між проєктами, адже без цього неможливо досягти глобальної мети акаунта, а також стратегічне мислення задля досягнення загальної мети, а не цілей окремого проєкту у вакуумі. Можна сказати, що Project Manager - тактик, а Program Manager - стратег.Program Manager може принести велику користь і є цінним тоді, коли в акаунті багато інтеграцій, різних стрімів і підпроектів. Він може: виступати єдиною точкою входу для клієнта й мати глобальне бачення всього продукту знизити ризики дублювання роботи різними командами допомогти з бізнес-вимогами, адже бачить повну картину в цілому@Zatishna_Galera
👁 790 25-06-16 11:55
#ЧарівнийКомпас 🧭1️⃣9️⃣5️⃣ Завдання 195Що таке false positive і false negative в тестах?Один з пасажирів з patreon надіслав у особисті таке питання (до речі, підписуйтесь, якщо хочете підтримати галеру на плаву). Каже, запитали на співбесіді та попросили навести приклади. Давайте розберемося.🤔 Це два типи помилок, які вказують на невідповідність отриманого результату очікуваному. У межах тестування дуже часто пов’язані з криво написаними тестами, особливо це властиво автоматизації. False Positive (він же хибнопозитивний результат) - результат, у якому на перший погляд усе правильно, але насправді ховається помилка.🤓 Для наочності приклад:Ви перевіряєте реєстрацію користувача. На UI отримуєте повідомлення, що ваш користувач успішно зареєстрований. Якщо цей тест більше нічого не перевіряє, то є ймовірність отримати той самий False Positive результат. Наче тест пройшов, повідомлення про реєстрацію є, а от чи справді реєстрація відбулася - ми не перевірили. Тому хороший тест, щоб уникнути цієї проблеми, має ще містити перевірку того, що ми були автоматично залогінені під цим користувачем після реєстрації, або окремий логін під цим користувачем, або ж перевірку, що в базі даних створено відповідний запис про нового користувача.Головна проблема False Positive результатів у тому, що вони створюють впевненість, що у вас усе працює і багів немає, хоча це не відповідає дійсності, і можливо у вас просто тести та перевірки зроблені надто поверхнево. False Negative (він же хибновід’ємний результат) - результат, коли ми отримуємо помилку і вважаємо її дефектом, хоча це очікувана поведінка системи.🤓 І знову приклад для наочності:Дуже часто зустрічається в автоматизації, коли вона написана не надто досвідченими автоматизаторами. Наприклад, ми намагаємося натиснути на кнопку одразу після якоїсь дії, а цей елемент просто ще не підгрузився, відповідно автоматизація не може його знайти й натиснути, тест падає, але через секунду-дві сторінка догружається і кнопка з’являється. В результаті система працює як очікувалося, але тест впав і ми отримали помилку.Головна проблема False Negative результатів у тому, що вони забирають час команди на дослідження тих проблем, яких насправді в системі може й не бути.Обидві проблеми ведуть до того, що користі від такої автоматизації мало і вона підриває довіру до себе. У випадку з False Positives ми просто пропускаємо повз реальні дефекти, у випадку з False Negatives - нам доводиться за такою автоматизацією постійно ще вручну перевіряти результати.Щоб цього не відбувалося, є кілька корисних порад:1️⃣ Тести й тестові дані потрібно підтримувати в актуальному стані, якщо щось змінюється в вимогах, то потрібно адаптувати й тести2️⃣ Синхронізація в тестах має бути налаштована з використанням best practices3️⃣ Тести мають бути максимально ізольовані, а середовище стабільне4️⃣ Перевіряти не лише UI, але й здійснювати перевірки в рамках логів, беку, БД тощо@Zatishna_Galera
👁 734 25-06-11 09:30
#iOSКомпас 🧭1️⃣0️⃣6️⃣ Завдання 106Як зробити клас спостережуваним (починаючи з iOS 17)?З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.🤔 Починаючи з iOS 17, Apple представила новий спосіб зробити клас спостережуваним за допомогою атрибута @Observable та властивості @Published. Цей підхід спрощує створення спостережуваних об’єктів і покращує інтеграцію зі SwiftUI.🔣 Створення спостережуваного класу з використанням @Observable1️⃣ Імпортуємо необхідні модулі:import SwiftUI 2️⃣ Створюємо клас і додаємо атрибут @Observable:@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"} 3️⃣ Використовуємо спостережуваний об’єкт у SwiftUIТепер ми можемо використовувати наш спостережуваний об’єкт у SwiftUI, і представлення автоматично оновлюватиметься при зміні властивостей, позначених як @Published.struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }} 🤓 Приклад із поясненням🔣 Повний приклад використання спостережуваного класу в SwiftUI:import SwiftUI@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"}struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }} 🔣 Приклад використання @EnvironmentObject:import SwiftUI@Observableclass ViewModel { @Published var message: String = "Привіт, світе!"}struct ParentView: View { @StateObject private var viewModel = ViewModel() var body: some View { ChildView() .environmentObject(viewModel) }}struct ChildView: View { @EnvironmentObject var viewModel: ViewModel var body: some View { VStack { Text(viewModel.message) Button("Змінити повідомлення") { viewModel.message = "Привіт, SwiftUI!" } } }} @Zatishna_Galera
👁 845 25-06-10 15:15
Пройшла WWDC від Apple. Apple Intelligence: спочатку я подумав, що це пародія або комедійний стендап, а не справжня WWDC. З такою помпезністю розповідати про роботу функцій, яких вже рік в повному обсязі нема, або які працюють так, що краще б і не працювали - це вміє тільки Apple. Новий єдиний стиль для всіх платформ: Liquid Glass. Дизайн додає прозорості й ефект скла в інтерфейс. Кажуть, що це наймасштабніше оновлення дизайну від Apple. Мабуть, мені, простому Капітану, не дано зрозуміти цю «масштабність». «Теми для Windows 98 завантажити без SMS і реєстрації» видали за якийсь гігантський next step. І так, щось подібне вже було і на Android, і на Windows - в мережі вже мільйон мемів. І так, Apple досі не відповіла на слона в кімнаті - як узагалі з цим жити? Навіть людині без проблем із зором доведеться постаратися, щоб прочитати білий текст у прозорому віконці на світлому фоні. Що робити людям з вадами зору - поки загадка. Як ми й припускали, усі ОС тепер отримають номери року випуску +1. Тобто наступні ОС будуть під номером 26. Перекладач: додали в кілька застосунків і ОС можливість живого перекладу. Наприклад, якщо вам зателефонує дядько з Африки, який хоче залишити спадок, але ви не знаєте його мови - ви зможете в режимі реального часу чути замість тарабарщини зрозумілу мову. Крута штука, якби в Apple щось навколо ШІ працювало так, як очікується. Тому заочно ставимо 5, але в релізі сумніваємось. Оновили CarPlay: сюди теж прикрутили Liquid Glass, зробили компактнішим, додали віджети. iOS 26: усі приколдеси Liquid Glass, оновлення повідомлень, браузера, камери, фото. Загалом, зміни радше «мінорні», на мій погляд. Там кнопочку додали, там місцями поміняли. Оновили застосунок для дзвінків, додали асистента, який до того, як ви візьмете слухавку, може дати інсайти про дзвінок або допомогти з «утриманням на лінії». watchOS 26: вже згаданий Liquid Glass. Workout Buddy - ШІ-помічник для тренувань. Робитиме висновки після тренування, даватиме поради тощо. Працюватиме англійською з 6 популярними видами спорту. Тепер можна автоматично підібрати плейлист або подкаст під конкретний вид спорту, залежно від ваших вподобань і історії прослуховування. tvOS 26: оновили інтерфейс, звісно ж, Liquid Glass і тут. Зʼявився режим караоке Sing with Apple Music. iPhone можна використовувати як мікрофон і контролер. Навіщо це потрібно - поки не знаю. Додали профілі, як у Netflix. macOS 26 Tahoe: Liquid Glass - ну ви зрозуміли. Більше опцій для налаштувань і кастомізації іконок і папок. Нові фічі для праці з iPhone. Прокачали Spotlight - тепер це частково Raycast на мінімалках. Оновили Shortcuts.Це буде остання ОС з підтримкою Intel-чипів. iPadOS 26: зʼявиться нова система багатозадачності. Тепер працювати з великою кількістю відкритих вікон стане значно простіше. Ноутбук вам все ще не замінить, але тим, хто не згоден і скаже «та мені вже кілька років як замінює» - страждати й самообманювати себе стане трохи легше. Крім цього, додадуть нові можливості й застосунки для зручності роботи, наприклад Files, Preview та інші. І, звісно ж, Liquid Glass. visionOS 26: додали цікаві віджети, які можна «закріпити» у просторі - наприклад, повісити віджет погоди як картину на стіну. Прокачали віртуальних аватарів, або «персон». Інтегрувались із кількома виробниками 360-камер для перегляду контенту, знятого на них. GoPro є у списку. І ще купа дрібних нововведень. Інше: також трохи прокачали карти, в Apple Music додали функцію зведення треків для безперервного програвання плейлисту (привіт Spotify, дякуємо, що вигадали до нас), додали переклад текстів, трекінг посилок у Wallet, можливість додати цифровий паспорт для внутрішнього використання в США. Додали застосунки для ігор з лідербордами - кіберкотлети на iPhone в захваті.@Zatishna_Galera