Iniciar sesión Registro
Anuncios
Tu espacio publicitario
Reserva este slot exclusivo para el periodo elegido.
Comprar publicidad →
Logotipo de la comunidad de telegram - Затишна Галера
Añadido 06 ene. 2025

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

@Zatishna_Galera
Número de suscriptores: 2 703
Fotos: 1,360
Videos: 432
Enlaces: 1,830
Descripción:
Голова Одеського центру розробки DataArt та Delivery Director, капітан Затишної Галери, ділитимуся: завданнями із співбесід (QA/Delivery/Management), статтями, вакансіями, новинами зі світу IT. Контакт: [email protected] ; Patreon: patreon.com/CozyGalley

👥 Número de suscriptores

2 703
Promedio/Día:: -1
Promedio/Tiempo:: -2
Promedio/Mes:: -11

👁️ Vistas promedio por mensaje

615
Promedio/Día:: 614
Promedio/Tiempo:: 579
ERR: 22.75%

📊 Mensajes por Día

2.6
Último día: 0
Promedio semanal: 1.9
Promedio por día: 2.6

Historial de cambios de estado

Oficialmente no confirmado 2025-01-06

Muro

Estadísticas de telegram canal

👁 736 26-01-21 13:27
#iOSКомпас 🧭1️⃣3️⃣8️⃣ Завдання 138Що відбувається з класом під час компіляції?З вами знову той самий автор каналу @badlinkschannel. Сподіваюсь вам ще не набридла ця ідея капітана галери про iOS розробника.Під час компіляції у Swift клас проходить кілька стадій обробки: Аналіз синтаксису та семантики - компілятор перевіряє код на помилки. Генерація проміжного представлення (IR) - створюється код на рівні LLVM IR. Оптимізація - Swift застосовує різні оптимізації, наприклад inlining, dead code elimination та інші. Генерація машинного коду - фінальний код перетворюється на виконуваний машинний код, специфічний для платформи.🔣 Що конкретно відбувається з класом?На відміну від структур, класи у Swift є посилальними типами. У більшості випадків їх екземпляри розміщуються у купі (heap), хоча за агресивних оптимізацій компілятор може виконувати stack promotion. Це означає, що: Під час створення обʼєкта, як правило, виділяється памʼять у купі. Swift автоматично використовує ARC (Automatic Reference Counting) для керування життєвим циклом обʼєктів. Методи класу можуть викликатися через віртуальну таблицю (vtable), якщо застосовується динамічна диспетчеризація.🔣 Важливі моменти final клас дозволяє компілятору прибрати динамічну диспетчеризацію та викликати методи напряму. Наслідування ускладнює оптимізації, оскільки фактична реалізація методу визначається під час виконання. На відміну від структур, під час передачі класів у функції не відбувається копіювання - передається посилання на той самий обʼєкт.class Animal { var name: String init(name: String) { self.name = name } func speak() { print("Some sound") }}final class Dog: Animal { override func speak() { print("Woof!") }}let myDog = Dog(name: "Buddy")myDog.speak() @Zatishna_Galera
👁 718 26-01-19 09:55
#ЧарівнийКомпас 🧭2️⃣2️⃣4️⃣ Завдання 224Що таке паралельне тестування і коли його використовувати?Паралельне тестування - це підхід, за якого кілька тестів виконуються одночасно, а не послідовно.Особливо популярне в автоматизованому тестуванні, але трапляється і в ручному теж. Головна мета такого тестування - скоротити загальний час на прогін тестів, щоб швидше отримати результати і подивитися, як система буде себе поводити за такого підходу.Найчастіше застосування, як ми вже сказали - автоматичне тестування. У такому разі тести розбиваються на групи, які запускаються паралельно. Часто таким чином одразу покривають кілька браузерів, наприклад.Звісно, розбиття і запуск таких тестів має бути зроблено з розумом. Не можна запускати тести, коли вони ділять одні дані між собою і можуть змінювати їх паралельно, тоді буде конфлікт, а також якщо тести мають залежність один від одного.Тому для паралельного тестування обовʼязково потрібно перевірити ізоляцію даних для кожної конкретної групи тестів, незалежність цих груп одна від одної, можливість тестового оточення витримати таке навантаження.Паралельне тестування - хороший інструмент, який може заощадити час, але водночас потребує правильного підходу, інакше призведе до хибних результатів тестування.@Zatishna_Galera
👁 731 26-01-16 16:24
#ЗатишнийDigest👍 П'ятничний digest новин зі світу IT:1️⃣ META СКОРОЧУЄ 10% REALITY LABSЦе близько 1500 людей. Метавсесвіт не злетів, тепер фокусуються на ШІ. Я все ще думаю, що метавсесвіти - це круто, просто зарано.2️⃣ THINKING MACHINES ПОКИДАЮТЬ КОФАУНДЕРИКомпанію Міри Мурати залишають двоє співзасновників. Кажуть, розставання відбувається неполюбовно. Обидва повертаються в OpenAI. Були засланими шпигунами?3️⃣ GOOGLE ВИКАТУЄ PERSONAL INTELLIGENCEGemini підключає сервіси компанії як джерела даних - Gmail, YouTube, Photos та інші. Тепер з Gemini можна буде спілкуватися на будь-яку тему, що стосується даних із цих сервісів. Поки що тільки в США і для платних підписників.4️⃣ OPENAI УКЛАДАЄ УГОДУ З CEREBRAS SYSTEMSЙдеться про купівлю обчислювальних потужностей. Сума угоди оцінюється приблизно до $10 млрд. Компанія заявляє про суттєве прискорення генерації відповідей.5️⃣ OPENAI ВИПУСТИЛИ СВІЙ ПЕРЕКЛАДАЧСхожий інтерфейс з Google Translate, але з вбудованими промтами для тонкого налаштування перекладу. Підтримує понад 50 мов.6️⃣ ANTHROPIC ВИПУСТИЛИ COWORKЦе чат в агентному режимі: Claude може працювати з файлами в папці, читати їх, редагувати, створювати і планувати завдання. По суті, Claude Code для тих, хто працює з файлами, а не з кодом.7️⃣ APPLE ПІДТВЕРДИЛИ ВИБІР GEMINI ДЛЯ SIRIApple підтвердила використання моделей Gemini від Google для обробки складних запитів Siri без повної заміни внутрішньої логіки.@Zatishna_Galera
👁 712 26-01-14 11:50
#iOSКомпас 🧭1️⃣3️⃣7️⃣ Завдання 137Які основні lazy контейнери у Swift ви знаєете?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel.1️⃣ lazy var - ліниві властивості (Swift)Властивість не створюється під час ініціалізації об’єкта, а лише при першому зверненні.class Example { lazy var expensiveObject: Data = { print("Об’єкт створено") return Data() }()}let example = Example()print("Ще не створено")_ = example.expensiveObject 2️⃣ LazySequence та LazyCollection (Swift)Дозволяють уникати зайвих обчислень.let numbers = (1...1000).lazy.map { $0 * 2 }print(numbers.first!) 3️⃣ SwiftUI ліниві контейнериСтворюють дочірні в’ю лише тоді, коли вони з’являються в зоні видимості.🔣 LazyVStack та LazyHStack:ScrollView { LazyVStack { ForEach(0..<1000) { index in Text("Рядок \(index)") } }} 🔣 LazyVGrid та LazyHGrid:let columns = [GridItem(.flexible()), GridItem(.flexible())]ScrollView { LazyVGrid(columns: columns) { ForEach(0..<100) { index in Text("Елемент \(index)") } }} 4️⃣ UIKit - перевикористовувані таблиці та колекціїЕлементи створюються лише тоді, коли вони потрібні для відображення.🔣 UITableView:func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell( withIdentifier: "Cell", for: indexPath ) cell.textLabel?.text = "Рядок \(indexPath.row)" return cell} 🔣 UICollectionView:func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell( withReuseIdentifier: "Cell", for: indexPath ) return cell} 5️⃣ UIScrollView плюс reusable viewsПоширений патерн, коли в’ю створюються динамічно під час прокрутки.for i in 0..<100 { let label = UILabel() label.text = "Елемент \(i)" stackView.addArrangedSubview(label)} 6️⃣ UITableViewDiffableDataSource та UICollectionViewDiffableDataSourceОновлення даних застосовуються ефективно та без зайвих перезавантажень.var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()snapshot.appendSections([.main])snapshot.appendItems(items)dataSource.apply(snapshot, animatingDifferences: true) 7️⃣ Swift Concurrency та AsyncLazy патерниЛіниве асинхронне завантаження даних.lazy var imageTask = Task { try await loadImage()} #️⃣ У підсумку, ліниві механізми в iOS охоплюють як мову Swift, так і SwiftUI та UIKit, і є ключовим інструментом для оптимізації продуктивності та пам’яті.@Zatishna_Galera
👁 773 26-01-09 15:49
#ЗатишнийDigest👍 П'ятничний digest новин зі світу IT:1️⃣ GOOGLE ПЕРЕВОДИТЬ GMAIL В ЕРУ GEMINIНа цю тему буде окремий пост, але по суті Google імплементує серйозні зміни в поштовий клієнт, прив’язуючи скрізь свій Gemini. Став запитання по листах, готуй чернетки, змінюй стиль і обсяг і так далі. Круто, що тут сказати, і логічно.2️⃣ HIGGSFIELD AI ВИПУСТИЛА ІНСТРУМЕНТ RELIGHTПрикольний інструмент, який дозволяє повністю змінювати і керувати освітленням на вже знятому або готовому медіа. Наприклад, вам подобається кадр, який ви зробили, але світло вийшло так собі - не проблема, тепер це можна змінити. На базі ШІ, звісно ж.3️⃣ xAI ПІДНЯЛИ $20 МЛРДНовий раунд інвестування закрила компанія Маска. Серед інвесторів Fidelity, Qatar Investment Authority, MGX та Nvidia й Cisco. При цьому Grok досяг 600 млн користувачів, але це зрозуміло, це загальна аудиторія X.4️⃣ RUNWAYML ПОКАЗАЛИ ГЕНЕРАЦІЮ ВІДЕО НА NVIDIA RUBINRunway Gen 4.5 запущена на новій картці Nvidia. Все як завжди - краще, швидше і так далі.5️⃣ NETFLIX КУПУЄ READY PLAYER MEСервіс призначений для створення аватарів для ігор. Покупка розумна, з урахуванням того, що Netflix пробує в ігри на ТВ.6️⃣ OPENAI ЗАПУСКАЄ CHATGPT HEALTHЦе нова функція для роботи з даними про здоров’я. Дозволяє аналізувати ваші дані про здоров’я, підключати дані з медичних записів та wellness-додатків (наприклад Apple Health, MyFitnessPal та інші). Передбачені персоналізовані поради, допомога з розумінням аналізів та рекомендації.7️⃣ LOGITECH ПРИСТРОЇ ПЕРЕСТАЛИ ПРАЦЮВАТИВесь логітек на macOS зламався, бо хтось забув оновити сертифікати. Дивно, звісно, таке чути від компанії, яка робить так багато девайсів та софта для них.8️⃣ ЕКОСИСТЕМА APPLE ДАЄ НОВУ ТРІЩИНУЦього разу антимонопольний регулятор Бразилії, разом із уже запровадженими в ЄС та Південній Кореї змінами, схвалив рішення про те, що Apple зобов’язується дозволити альтернативні магазини додатків і зовнішні способи оплати, минаючи App Store.9️⃣ RIVIAN ПОКАЗАЛИ UNIVERSAL HANDS-FREERivian R1 отримають нову функцію водіння, завдяки якій водії зможуть прибирати руки з керма і насолоджуватись видами за вікном. Поки анонсовано для ринку США і Канади і лише на певних ділянках доріг.@Zatishna_Galera
👁 772 26-01-08 13:38
13 ПОРАД, ЯК РЕАЛЬНО ПРАЦЮВАТИ З AI ДЛЯ КОДУ (З ТРЕДА BCHERNY, КОТРИЙ СТВОРИВ CLAUDE CODE)1️⃣ Паралельність - must5 сесій у терміналі + нотифікації. Поки один агент думає, інший уже щось робить.2️⃣ Ще 5-10 сесій у вебіРозділяй контексти: код окремо, ресерч/тексти окремо. Менше плутанини, більше швидкості.3️⃣ Одна «важка» модель для всьогоКраще повільніше, але стабільно, ніж постійно перемикатись і ловити фейли в tool-use.4️⃣ Один спільний CLAUDE.md для командиУсі правила, обмеження і «чого не робити» зберігаються там. Помилки → правила → менше повторів.5️⃣ Фіксити помилки прямо в code reviewТегай агента в PR і одразу додавай правила в CLAUDE.md. Це накопичуваний ефект.6️⃣ Завжди починати з Plan modeСпочатку нормальний план, потім auto-accept правок. Менше переробок.7️⃣ Slash-команди для рутиниУсе повторюване - в .claude/commands. Це макроси для inner loop, економія часу і токенів.8️⃣ Субагенти під роліОкремо - написати код, окремо - спростити, окремо - перевірити. Якість стабільніша.9️⃣ PostToolUse hook для форматуванняФорматування має робити автоматика, а не модель і не ти.1️⃣0️⃣ Не використовуй dangerously-skip-permissionsКраще allowlist через /permissions і спільний settings.json. Безпечніше і контрольованіше.1️⃣1️⃣ Дай агенту доступ до реальних інструментівSlack, логи, CLI, аналітика. Тоді це не чат, а робочий інструмент.1️⃣2️⃣ Для довгих задач - контроль завершенняФонові агенти, stop hooks, sandbox без постійних підтверджень. Інакше все зависає.1️⃣3️⃣ Головне - feedback loopПоки агент сам не перевіряє результат (тести, UI, e2e), якості не буде. Верифікація дає +2-3x до результату.#️⃣ паралельність + стандарти + автоматична перевірка = AI, який реально працює, а не «пише код».@Zatishna_Galera
👁 666 26-01-07 09:41
#iOSКомпас 🧭1️⃣3️⃣6️⃣ Завдання 136Що повинні реалізовувати змінні, що містяться в протоколі?З вами знову той самий автор каналу @badlinkschannel. Не забувайте підписатися. А ми продовжуємо наші яблучні історіі.У Swift змінні (властивості), оголошені в протоколі, повинні вказувати:🔣 Тільки для читання (get)Якщо властивість оголошена як { get }, клас або структура, що реалізує протокол, повинна надати щонайменше геттерprotocol Animal { var name: String { get } // Тільки читання}struct Dog: Animal { let name = "Барсик" // Реалізуємо тільки get}let dog = Dog()print(dog.name) // "Барсик" 🔣 Також можна використовувати обчислювану властивість:struct Cat: Animal { var name: String { return "Мурзик" }} 🔣 Для читання і запису (get set)Якщо властивість { get set }, клас або структура обов’язково повинні надати і get, і set.protocol Vehicle { var speed: Int { get set } // Читання і запис}class Car: Vehicle { var speed: Int = 100 // Реалізуємо і get, і set}let car = Car()car.speed = 120 // Можна змінити значенняprint(car.speed) // 120 🔣 Обчислювана властивість також підійде, якщо вона має get і set:class Bike: Vehicle { private var internalSpeed = 50 var speed: Int { get { return internalSpeed } set { internalSpeed = newValue } }} 🔣 Статичні властивості (static)Якщо властивість повинна бути спільною для всіх екземплярів (не індивідуальною), то вона оголошується static.protocol Config { static var appVersion: String { get }}struct AppSettings: Config { static let appVersion = "1.0.0"}print(AppSettings.appVersion) // "1.0.0" 🔣 Клас може використовувати class var, якщо властивість можна перевизначати в підкласах:class AppInfo: Config { class var appVersion: String { return "2.0.0" }} @Zatishna_Galera
👁 787 25-12-29 12:06
#ЧарівнийКомпас 🧭2️⃣2️⃣1️⃣ Завдання 221Що таке soft assertion і hard assertion у тестуванні?Якщо пасажири переживали, куди команда пропала на кілька днів, то у звʼязку зі святами і кінцем року часу у команди дуже мало, а роботи дуже багато. Але сьогодні ми знайшли час на те, щоб почати нову пʼятірку запитань з теорії тестування.🤔 Hard assertion і soft assertion - два підходи до перевірок у тестах. Основна відмінність - яка наша дія при отриманні першої помилки в ході тесту: або ми зупиняємо тест, або продовжуємо.🔣 Hard assertion (він же жорстка перевірка) - якщо умова перевірки не виконується, то ми вважаємо тест впашим і припиняємо подальший його прогін.Це корисна практика, коли кожна перевірка є критичною для тесту, а саме продовження тесту не має сенсу.🤓 Для наочності приклад: для виконання тесту і подальших перевірок у його ході нам необхідно залогінитися під існуючим користувачем, але ми цього зробити не можемо. У більшості випадків продовження такого тесту після неможливості залогінитися сенсу мати не буде.🔣 Soft assertion (він же це мʼяка перевірка) - якщо умова перевірки не виконується, то ми фіксуємо цей баг, але продовжуємо прогонку тесту.Ця практика буде корисною, коли ми можемо перевірити одразу кілька речей у ході нашого тесту і вони можуть бути незалежними одна від одної.🤔 Хоч найкращі практики тестування і радять не обʼєднувати такі речі в один тест, але, по суті, це не завжди можливо зробити. Наприклад, у нас може бути один тест на безліч UI-перевірок: текстів, заголовків, різних кнопок і так далі. Ці перевірки обʼєднують в один тест для зручності, щоб не плодити десятки тестів.#️⃣ У підсумку можна сказати, що hard assertion - використовується для критичних кроків у тестах, а soft assert - для комплексних перевірок.@Zatishna_Galera
👁 789 25-12-24 12:45
#iOSКомпас 🧭1️⃣3️⃣4️⃣ Завдання 134Чим небезпечна утечка пам’яті?Доброго здровля мої любі друзі. З вами ваш незмінний ios розробник Сергій з @badlinkschannel. 🤔 Утечка пам’яті (memory leak) - це ситуація, коли пам’ять залишається виділеною, але програма вже не може отримати до неї доступ і не звільняє її. Такі утечки поступово збільшують споживання пам’яті, що може призвести до деградації продуктивності або краху застосунку.class Person { var pet: Pet? deinit { print("Person видалений") }}class Pet { var owner: Person? deinit { print("Pet видалений") }}var person: Person? = Person()var pet: Pet? = Pet()person?.pet = petpet?.owner = personperson = nilpet = nil 🔣 Як уникнути утечок пам’яті?🔣 Використовувати weak або unowned посиланняweak та unowned не утримують об’єкт, тому не створюють циклу посилань.class Person { var pet: Pet? deinit { print("Person видалений") }}class Pet { weak var owner: Person? deinit { print("Pet видалений") }} 🔣 unowned використовують тоді, коли об’єкт гарантовано існуватиме протягом усього часу життя того, хто на нього посилається.class Owner { var car: Car? deinit { print("Owner видалений") }}class Car { unowned var owner: Owner init(owner: Owner) { self.owner = owner } deinit { print("Car видалений") }} 🔣 Розривати цикли в замиканнях ([weak self])Замикання можуть утримувати self, якщо їх зберігає сам клас.class ViewController { var closure: (() -> Void)? func setup() { closure = { [weak self] in print(self as Any) } } deinit { print("ViewController видалений") }} 🔣 Як знайти утечки пам’яті? Використовувати Instruments Leaks Перевіряти виклик deinit Досліджувати Memory Graph у Xcode з Malloc Stack Logging#️⃣ Такий підхід дозволяє виявляти цикли посилань і контролювати життєвий цикл об’єктів у Swift.@Zatishna_Galera
👁 758 25-12-22 15:26
#ЧарівнийКомпас 🧭2️⃣2️⃣0️⃣ Завдання 220Чим traceroute відрізняється від ping і що за вихідними даними можна зрозуміти про проблему в мережі?Ping і traceroute вирішують різні завдання.🔣 Ping перевіряє: чи досяжний хост взагалі, роблячи це за допомогою надсилання ICMP Echo Request і отримання відповіді. При цьому ми отримуємо мінімум інформації: чи є зв’язок чи ні, затримку, втрати.Грубо кажучи, ми просто дізнаємося, чи живий сервер і чи можемо ми до нього достукатися.🔣 Traceroute ж показує: маршрут пакета до сервера, які вузли ми чіпляємо. При цьому використовується TTL (Time To Live), яке поступово збільшується, і ICMP-повідомлення повертаються з тих вузлів, на яких TTL обнуляється. Завдяки цьому ми бачимо маршрут, затримку на кожній ділянці і де саме пакет може застрягти, якщо таке сталося.По суті, ми бачимо шлях пакета від нас до цільового сервера і можемо віддебажити проблему у разі її виникнення.Це важливо, тому що ми можемо зрозуміти, де саме обривається маршрут, це дає нам розуміння - проблема на сервері чи по дорозі до нього. Ми можемо побачити точки з високою затримкою, можливо, там є якісь проблеми з маршрутизацією або перевантаженням. Крім цього можна зрозуміти, чи є якісь фаєрволи або додаткова фільтрація по дорозі: якщо ми замість ICMP відповіді отримуємо (* * *), це означає, що вузол не відповідає на traceroute, що може бути пов’язано з фільтрацією або обмеженням ICMP, але трафік при цьому може йти далі.#️⃣ Якщо коротко, то ping показує, чи доступний хост у принципі, а traceroute показує шлях до нього і допомагає зрозуміти, на якій ділянці мережі виникає проблема.@Zatishna_Galera