Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Затишна Галера
Додано 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 каналу

👁 595 26-03-25 08:02
#iOSКомпас 🧭1️⃣4️⃣7️⃣ Завдання 147Для чого потрібен prepareThumbnail?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.UIImage.prepareThumbnail(of:completionHandler:) - це той самий маленький UIKit-хелпер, про який легко забути, а потім знову винаходити велосипед через CGImageSource, ресайз і зайві танці з декодуванням. Метод асинхронно готує thumbnail заданого розміру у фоновому потоці й повертає UIImage? у completion handler. І важливий нюанс - сам completion теж викликається не на головному потоці. Тобто будь-яке оновлення UI після цього треба явно перекидати на main thread. 🔣 Практичний сенс простий: коли у вас список карток, галерея, прев’ю файлів або стрічка з картинками, немає жодного сенсу тягнути повнорозмірне зображення в інтерфейс, якщо на екрані все одно потрібна мініатюра. Apple прямо підводить до того, що підготовка thumbnail знижує накладні витрати порівняно з роботою з повним розміром зображення. Для цього в UIImage є і синхронний варіант preparingThumbnail(of:), і асинхронний prepareThumbnail(of:completionHandler:). Другий - куди здоровіший вибір для скролів, списків і будь-якого місця, де не хочеться блокувати потік рендерингу. По суті, це API про одну дуже приземлену річ: не мучити інтерфейс великими картинками там, де вистачить маленької. Менше зайвої роботи, менше шансів спіймати фризи, більш передбачуваний скрол. А ще це хороший приклад старої доброї UIKit-логіки: важку роботу - у фон, UI - окремо й акуратно. 🤓 Можна навіть дати мікроприклад:image.prepareThumbnail(of: CGSize(width: 120, height: 120)) { thumbnail in DispatchQueue.main.async { imageView.image = thumbnail }} #️⃣ Якщо вам для інтерфейсу потрібна саме мініатюра - готуйте мініатюру, а не тягніть у UI повну JPEG-цеглину й не сподівайтеся, що система все якось сама розрулить.@Zatishna_Galera
👁 677 26-03-23 14:05
ЕКСПЕРИМЕНТ ВІД ANTHROPIC НАД ДЖУНАМИКомпанія взяла 52 джуна для розв’язання задачки і проходження невеликого опитувальника по темі цієї задачі. Основні питання були спрямовані на розуміння коду, дебагінг та інші основи програмування. Усіх джунів розділили на 2 групи – використання ШІ дозволено і заборонено.Висновки вийшли цікаві. Група без ШІ краще впоралася з тестом після задачі, хоч і частіше помилялися і гірше вирішили саму задачу. А от учасники з використанням ШІ виконали саму задачу швидше, а от тест після неї пройти нормально не зуміли. Що загалом очевидно – якщо ти намагаєшся методом проб і помилок зробити задачу, ти краще будеш розбиратися в тому матеріалі, який за нею стоїть.Але, була невелика група джунів, яка задачу навіть з використанням ШІ розв’язувала у взаємодії та намагаючись зрозуміти усі деталі. Тобто багато спілкувалися з чатом, намагалися розібратися в задачі і зрозуміти те, що їм ШІ генерував. Такі впоралися відмінно і з задачею і з тестом.Висновок простий – навіть якщо ви використовуєте ШІ, то не забувайте пробувати розбиратися, а що саме і чому вам генерується.@Zatishna_Galera
👁 636 26-03-20 16:01
DLSS 5 ЦЕ НЕЙРОСЛОП, ЯКИЙ КОРИСТІ ПРИНІС ЛИШЕ В МЕМАХНезважаючи на те, що Дженсен Хуанг заявив зі сцени, що їхня технологія - це не просто постобробка поверх кадру, а що це нейрорендеринг, який працює на рівні геометрії та гри, і що технологія підлаштовується під стилістику розробників, але люди йому не дуже вірять.Навіть Тодд Говард, який виступив і розповів, наскільки він у захваті від технології, не зміг нікого переконати.За фактом і розслідуваннями користувачів DLSS 5 виявилася реально нейро-слопом. Так технічний євангеліст NVIDIA, Джейкоб Фріман, сам же й спростував слова СEO NVIDIA і підтвердив, що DLSS 5 бере просто фінальний 2D кадр і вектори руху, це все, на чому базується перемальоване зображення. Технологія абсолютно ніяк не враховує геометрію, глибину та інші параметри 3D оточення і сцен.Виходить, і Тодд Говард, і Дженсен Хуанг трошки напіздюнкули.А Капітан з командою не обманює своїх читачів і впевнено заявляє, що сьогодні п'ятниця, саме час привести моральку і фізичний стан у норму перед новим робочим тижнем.@Zatishna_Galera
👁 620 26-03-18 08:03
#iOSКомпас 🧭1️⃣4️⃣6️⃣ Завдання 146Чим відрізняється garbage collector і підрахунок посилань?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.🤔 Garbage Collector (GC) і Automatic Reference Counting (ARC) - це два різних підходи до управління пам’яттю в програмуванні. Вони вирішують одну задачу: автоматичне звільнення невикористовуваної пам’яті, але роблять це по-різному.🔣 Garbage Collector (GC)Java, Kotlin, C#, Python, JavaScript GC використовує алгоритми трасування (наприклад mark-and-sweep) і визначає, які об’єкти доступні з кореневих посилань, а які вже недосяжні. Об’єкти, до яких немає досяжних посилань, вважаються «сміттям» і видаляються, а пам’ять звільняється. Це автоматичний процес, який запускається рантаймом за потреби.🔣 Підрахунок посилань (ARC - Automatic Reference Counting)Де використовується: Swift, Objective-C Кожен об’єкт має лічильник strong посилань (reference count). Коли змінна створює strong посилання на об’єкт, лічильник збільшується. Коли посилання зникає, лічильник зменшується. Коли лічильник досягає нуля, об’єкт деініціалізується і пам’ять звільняється.class Person {var pet: Pet?}class Pet {var owner: Person?}let person = Person()let pet = Pet()person.pet = petpet.owner = person // Тепер обидва об’єкти тримають один одного, і ARC їх не видалить 🔣 Рішення - використовувати weak або unowned:class Pet { weak var owner: Person? // Тепер витоку пам’яті не буде} @Zatishna_Galera
👁 697 26-03-16 14:28
#ЧарівнийКомпас 🧭2️⃣3️⃣2️⃣ Завдання 232Що таке «ідемпотентність» для HTTP PUT - наведіть практичний приклад перевірки.🤔 Ідемпотентність означає, що якщо один і той самий запит виконати кілька разів поспіль, результат на сервері буде таким самим, як після одного виконання. Тобто повторний запит не повинен далі змінювати стан ресурсу.Для HTTP PUT це означає, що ми не додаємо щось щоразу, а встановлюємо ресурс у конкретний стан.Наприклад, якщо є запит до API для сутності користувача PUT /users/123 і ми надсилаємо тіло запиту з новим ім’ям і обов’язковими деталями користувача, то перший запит оновить/створить користувача. Якщо я надішлю абсолютно такий самий PUT ще раз, стан користувача не повинен змінитися ще раз - ім’я залишиться тим самим, жодних додаткових дій відбуватися не повинно.На практиці, рекомендую перевіряти так: спочатку робимо PUT-запит із певним тілом, наприклад змінюємо поле email у користувача. Перевіряємо відповідь сервера і потім робимо GET, щоб переконатися, що дані справді оновилися. Після цього надсилаємо той самий PUT вдруге і втретє (про всяк випадок) з тим самим тілом запиту. Потім знову роблю GET і перевіряю, що стан ресурсу не змінився і залишається таким самим, як після першого запиту. Тобто дані не дублюються, не створюються додаткові записи, а сама операція не має додатково змінювати стан ресурсу. Це і підтверджує ідемпотентність операції.@Zatishna_Galera
👁 819 26-03-13 16:33
На злобу дня.Випадок з Monobank і Гороховським, звісно, дуже сильно гримить на просторах інтернету. Я не буду заглиблюватися, вірити дівчині, що це все-таки прапор не тієї країни, про яку всі подумали, чи ні.Реакція Гороховського мені більше цікава. Навіть якщо ми згодні, що це прапор рф, то його дії були б зрозумілі, якби він був звичайним обивателем, який хотів зловити лайків і порофлити, але це не та реакція, яку ти очікуєш від глави одного з достатньо розповсюджених і великих банків, який просто заради хайпу зливає дані своїх клієнтів. Особливо беручи до уваги, що це емоційний сплеск, не підкріплений реальними перевірками і доказами. Що на мій погляд було потрібно зробити - сказати дівчині, що поки розблокувати аккаунт не можемо і треба зробити додаткові перевірки, звернутися в правильні структури з таким запитом і після перевірки, вже вирішувати, що з цим робити. Ну що ж, думаю, справа погримить ще, але чомусь я впевнений, що далі срачів в інтернеті і номінальних перевірок нічого не станеться.А я вам нагадую, що сьогодні п'ятниця, саме час привести моральку і фізичний стан до норми. Але нагадаю, що сьогодні ще й 13 число.@Zatishna_Galera
👁 601 26-03-11 15:16
#iOSКомпас 🧭1️⃣4️⃣5️⃣ Завдання 145Яка різниця між some View і AnyView, про яку важливо знати в SwiftUI?Доброго здоровля мої любі друзі. З вами ваш незмінний iOS розробник Сергій з @badlinkschannel.У SwiftUI постійно зустрічаються два схожі, але такі, що працюють по-різному, підходи: some View і AnyView. Для новачка різниця непомітна: і там і там повертається View. Але для SwiftUI це дві абсолютно різні історії, які впливають на те, як фреймворк буде оновлювати інтерфейс і споживати ресурси.🔣 Що ховається за some View:Коли ви оголошуєте var body: some View, відбувається щось на кшталт контракту з компілятором. Ви обіцяєте, що властивість повертатиме значення конкретного типу, який відповідає протоколу View, але сам тип залишається неназваним. Компілятор це влаштовує, він самостійно визначить тип на основі того, що ви написали всередині.Далі вступає SwiftUI. Отримавши від компілятора точну інформацію про типи всіх вкладених елементів, фреймворк вибудовує статичне представлення інтерфейсу. Це ніби SwiftUI заздалегідь знав повну схему екрану з усіма комірками, текстами та зображеннями. Завдяки цьому при зміні даних він може швидко зрозуміти, яка саме частина екрану потребує перемальовування, і оновити лише її.🔣 Як працює AnyView:AnyView працює інакше. Він стирає тип і залишає від конкретної в’юшки лише факт, що вона відповідає протоколу View. Для SwiftUI це означає втрату інформації: він більше не знає, що всередині - текст, зображення чи цілий стек. Усе, що залишається - чорна скринька.Типова ситуація, коли хочеться використати AnyView - повернення різних типів залежно від умови:func content(isLoggedIn: Bool) -> some View { if isLoggedIn { return HomeView() } else { return LoginView() }} Компілятору це не сподобається: типи різні, а some View вимагає один конкретний. Найпростіший, але неправильний спосіб полагодити - обгорнути обидва варіанти в AnyView. Код скомпілюється, але SwiftUI втратить інформацію про структуру і не зможе нормально оптимізувати оновлення.🔣 Правильний підхід - ViewBuilder:Замість ручного повернення і стирання типів SwiftUI пропонує використовувати @ViewBuilder. Цей атрибут перетворює набір View в єдиний вираз із типом ConditionalContent:@ViewBuilderfunc content(isLoggedIn: Bool) -> some View { if isLoggedIn { HomeView() } else { LoginView() }} Тип залишається конкретним і відомим компілятору, просто він уміє описувати умовну структуру. Усі переваги оптимізації зберігаються.🔣 Коли AnyView все-таки потрібен:Є ситуації, де без стирання типу не обійтися: Масив в’юшок різного типу. Інʼєкція в’юшки під час виконання, коли тип заздалегідь невідомий. API, де не можна використати дженеріки.Наприклад, список різнорідних комірок, які приходять із конфігурації:let cells: [AnyView] = [ AnyView(ProfileCell()), AnyView(SettingsCell()), AnyView(NotificationCell())] Але навіть тут варто подумати: можливо, можна обійтися переліком з associated value або якимось іншим дизайном, що зберігає типи.🔣 Просте правило:Якщо SwiftUI може дізнатися тип на етапі компіляції - використовуйте some View. Якщо тип стає відомим лише під час виконання - використовуйте AnyView.AnyView сам по собі не зло. Зло - використовувати його як костиль, щоб швидко полагодити помилку компіляції, не замислюючись про наслідки для продуктивності.#️⃣ Різниця між some View і AnyView - це різниця між статичною типізацією з можливістю оптимізації та динамічною диспетчеризацією з потенційною втратою продуктивності. SwiftUI спроєктований так, щоб максимально використовувати інформацію про типи на етапі компіляції. Будь-яке стирання типів змушує фреймворк працювати всліпу, що рано чи пізно може позначитися на плавності інтерфейсу. Хороша звичка - завжди спочатку пробувати some View і лише в крайньому разі опускатися до AnyView, чітко розуміючи ціну такого рішення.@Zatishna_Galera
👁 788 26-03-06 12:03
#ЗатишнийDigest👍 П'ятничний digest новин зі світу IT:1️⃣ GPT-5.3 INSTANT ВИЙШОВOpenAI оновили «щоденну» модель ChatGPT: менше зайвих відмов і краща поведінка в побутових сценаріях. 2️⃣ GPT-5.4 ВИЙШОВOpenAI викотили GPT-5.4 як модель під «дорослу» роботу. Є Thinking та Pro версії. Ключове - нативний computer-use в API/Codex і контекст до 1M токенів.3️⃣ PROJECT HELIX - НАСТУПНИЙ XBOXMicrosoft підтвердили Project Helix і прямо сказали: консоль буде підтримувати і Xbox-ігри, і PC-ігри. 4️⃣ META ОКУЛЯРИ У СЕРЕДИНІ СКАНДАЛУБританський регулятор починає розбиратися з Meta після історій, що підрядники, які покращують ШI моделі, могли бачити чутливі записи зі смартокулярів, включаючи інтимні відео. 5️⃣ США ДУМАЮТЬ, ЧИ НЕ ПРИБРАТИ ДО РУК ЧАСТКИ TENCENTБілий дім обговорює, чи дозволяти Tencent тримати частки в Epic, Riot та Supercell. Ключове - це прив’язують до нацбезпеки і до підготовки зустрічі Трампа з Сі у квітні.6️⃣ GEMINI 3.1 FLASH-LITE - МАКСИМУМ ШВИДКОСТІ ЗА МІНІМУМ ГРОШЕЙGoogle випустили Flash-Lite як найдешевший Gemini: $0.25 за 1M на вхід і $1.50 за 1M на вихід. 7️⃣ APPLE ЗРОБИЛИ ВЕЛИКИЙ ВЕСНЯНИЙ ДРОП ЗАЛІЗАApple показали MacBook Neo на A18 Pro зі стартом $599, MacBook Air на M5 від $1099 і MacBook Pro на M5 Pro/Max від $2199. Паралельно оновили iPad Air до M4 зі стартом $599, додали iPhone 17e зі стартовими 256GB за $599 і оновили Studio Display та Studio Display XDR (XDR стартує з $3299).8️⃣ OPENAI ПІДКРУТИЛИ УГОДУ З ПЕНТАГОНОМ ПІСЛЯ СКАНДАЛУПісля хвилі критики OpenAI додали в угоду прямий текст, що їхні системи не можна навмисно використовувати для внутрішнього стеження за громадянами США. Віримо?9️⃣ AWS В ОАЕ ПОШКОДЖЕНО ПІСЛЯ ВЛУЧАННЯ «ОБ’ЄКТІВ»AWS повідомили, що в їхній Availability Zone mec1-az2 в ОАЕ щось влучило в майданчик, були іскри та пожежа, і пожежники відключили живлення. Українці такі пошкодження бачать кілька разів на день. 1️⃣0️⃣ NANO BANANA 2 ВІД GOOGLEGoogle оновили модель генерації та редагування зображень Nano Banana 2 (Gemini 3.1 Flash Image) і роблять ставку на швидкість без втрати якості. Текст і переклад значно покращили. Тепер підтримує до 5 персонажів і 14 об’єктів, плюс контроль від 512px до 4K.1️⃣1️⃣ OPENAI ВИЙШЛИ НА $25B РІЧНОГО ВИТОРГУOpenAI перевалили за $25 млрд річного ревеню станом на кінець минулого місяця. Але різниця з Anthropic скорочується. 1️⃣2️⃣ CLAUDE CODE ОТРИМАВ VOICE MODEУ Claude Code з’явився голосовий режим: вмикається командою /voice і можна диктувати задачі, щоб агент робив зміни в коді. 1️⃣3️⃣ OPENAI РОБЛЯТЬ АЛЬТЕРНАТИВУ GITHUBЧутки кажуть, що OpenAI розробляють власну платформу для коду як відповідь на часті збої GitHub. Поки без деталей. 1️⃣4️⃣ CLAUDE IMPORT MEMORY - МІГРАЦІЯ КОНТЕКСТУ ЗА ХВИЛИНУAnthropic запустили Import Memory, щоб швидко перенести в Claude те, що ми напрацювали з іншими моделями. З цікавого - по суті це просто промт. 1️⃣5️⃣ CURSOR СТРИБНУВ ДО $2B ВИТОРГУ НА РІКCursor перевалив за $2 млрд річного ревеню, подвоючи показники всього за квартал. 1️⃣6️⃣ UBER КУПУЄ SPOTHEROUber домовились купити SpotHero і вбудувати бронювання паркінгу прямо в застосунок. @Zatishna_Galera
👁 502 26-03-04 08:03
#iOSКомпас 🧭1️⃣4️⃣4️⃣ Завдання 144Які плюси і мінуси layout-а?З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.Кожен спосіб створення макетів (layout-а) в iOS-розробці має свої переваги і недоліки.🔣 Interface Builder (IB)👍 Візуальне редагуванняЗручний графічний інтерфейс для швидкого налаштування і візуального перегляду змін.👍 Інтеграція з Auto LayoutAuto Layout доступний прямо в IB для адаптивного інтерфейсу.👍 Швидке прототипуванняМожливість швидкого створення і зміни макетів без написання коду.😡 Менша гнучкістьHe завжди зручно створювати дуже складні динамічні макети лише через IB.😡 Конфлікти при спільній роботіТруднощі при злитті змін у storyboard або xib файлах у великих командах.😡 ПродуктивністьУ великих IB-файлах редактор може працювати повільніше, ніж чистий код.🔣 Auto Layout👍 АдаптивністьЕфективно підтримує різні пристрої і орієнтації екрану.👍 Потужні інструментиМожливість створення складних макетів за допомогою обмежень.👍 Інтеграція з Interface BuilderСпрощена настройка обмежень через візуальний інтерфейс.😡 Крута крива навчанняПочатківцям може бути складно відразу освоїти концепцію обмежень.😡 Управління складними макетамиВелика кількість обмежень може ускладнити підтримку.🔣 Programmatic Layout👍 Повний контрольМожливість точної настройки макету за допомогою коду.👍 ГнучкістьЛегкість створення динамічних і умовних макетів.👍 Управління версіямиЛегше управляти змінами в коді порівняно з XML-файлами IB.😡 Велика трудомісткістьВимагає більше часу і зусиль для настройки, особливо для складних макетів.😡 Менша наочністьВідсутність візуального редактора може ускладнити уявлення кінцевого результату.🔣 Stack Views👍 Спрощення макетівUIStackView значно зменшує кількість явних обмежень.👍 Інтеграція з Auto LayoutВони автоматично керують розміщенням вкладених елементів.👍 АдаптивністьПідтримка різних орієнтацій і розмірів екранів.😡 Обмеження при складних композиціяхДля деяких складних макетів можуть знадобитися додаткові обмеження.😡 ПідтримкаНе завжди оптимальні для всіх макетів без комбінування з іншими підходами.🔣 SwiftUI👍 Декларативний синтаксисПростота і зрозумілість коду завдяки декларативному підходу.👍 Превʼю в реальному часіМиттєве оновлення інтерфейсу при зміні коду.👍 Інтеграція з SwiftСучасні можливості мови і тісна інтеграція з екосистемою Apple.👍 КросплатформеністьПідтримка iOS, macOS, watchOS, tvOS і інших платформ.😡 Вимоги до версії iOSПідтримка тільки iOS13 і вище.😡 Зрілість фреймворкуДеякі API можуть бути менш повними порівняно з UIKit на даний момент.@Zatishna_Galera
👁 555 26-03-02 10:29
#ЧарівнийКомпас 🧭2️⃣3️⃣0️⃣ Завдання 230Як діяти, якщо пріоритизація задач клієнта суперечить цілям проєкту?Закриваємо п’ятірку питань з менеджменту достатньо простим питанням, але з яким, на жаль, доводиться стикатися досить часто, бо не завжди клієнти розуміють різницю між тим, що їм потрібно, і тим, чого їм бажається, а це далеко не завжди одне й те саме.Якщо пріоритети від клієнта суперечать цілям, які ми ставимо як результат проєкту, то тут є 2 варіанти: або наша ціль має змінитися, бо змінився ринок або зіграв якийсь інший фактор, і тепер ми маємо рухатися в іншому напрямку, або пріоритети помилкові й не відповідають стратегічній цілі проєкту.Передусім потрібно ще раз підтвердити з клієнтом, що цілі проєкту не змінилися, або ж отримати від нього підтвердження їхньої зміни, самі нові цілі та причину їх зміни. Якщо ж цілі проєкту змінюються – то часто це тягне за собою зміну бюджету, строків, обсягу задач тощо. Це все теж потрібно зафіксувати. Може привести до зміни контракту. Якщо ж цілі проєкту не змінилися, тоді потрібно пояснити клієнту, чому саме його нові пріоритети не відповідають поточній цілі проєкту, як вони вплинуть на її досягнення тощо. Наприклад: «Нова пріоритетна задача створить ризик для релізу основного функціоналу застосунку, який ми заявляємо як мінімально необхідний для нашого бізнес-флоу, і його доведеться відкласти. У такому разі це призведе до…».Бажано всі ці залежності підготувати у вигляді конкретних цифр: зміни в строках, зміни в бюджетах, зміни в обсязі задач. У такому разі клієнту буде простіше побачити всю картинку цілком і прийняти зважене рішення.Добре ще одразу запропонувати кілька варіантів: беремо нову задачу й зсуваємо решту, відкладаємо задачу на потім, бо реально її пріоритет не такий високий, викидаємо щось менш пріоритетне взагалі й беремо цю задачу, переглядаємо цілі проєкту тощо.Головне тут бути з клієнтом максимально відкритим, а не просто бездумно погоджуватися на його пропозиції, бо ми маємо приносити клієнту користь, він розраховує на нашу експертизу, ми маємо забезпечити досягнення конкретних цілей у проєкті.Якщо ми будемо працювати саме в такій парадигмі, то клієнт буде задоволений і його бізнес зростатиме, а ми будемо зростати разом із ним.@Zatishna_Galera