Відрізнити дружину від кішки: з чого починався китайський ШІ

Китайська система нагляду — страшилка для ЗМІ, технологічна революція чи похмура антиутопія, яка чекає на весь світ? У цьому вирішив розібратися американський журналіст Джеффрі Кейн. Він вирушив прямо в Сіньцзян — регіон, з одного боку, сумнозвісний «санаторіями» для уйгурів, а з іншого — китайською столицею в галузі досліджень штучного інтелекту. За підсумками поїздки Кейн написав книгу ” Держава суворого режиму “. Публікуємо з незначними скороченнями розділ «Глибинна нейронна мережа».

Відрізнити дружину від кішки

У роботі з іноземними партнерами китайські корпорації, які підтримує держава, практикували те, що в бізнесі називається «примусовою передачею інтелектуальної власності». Щоб вийти на закритий ринок Китаю, іноземним компаніям доводилося зазвичай домовлятися з китайськими партнерами. Одна з неформальних вимог полягала у передачі китайським компаніям про чутливих технологій — напівпровідників, медичної апаратури та нафтогазового обладнання.

За правилами Світової організації торгівлі така вимога є незаконною, проте американські компанії хоч і неохоче, але все ж таки розкривали свої комерційні таємниці в надії отримати доступ до 1,4 млрд потенційних клієнтів у Китаї.

Коли Китай почав накопичувати дані про своїх громадян, збираючи інформацію про використання додатків і сервісів, подібних до WeChat, перспектива стати лідерами в розширюваній і прибутковій індустрії штучного інтелекту залучила багато місцевих високотехнологічних компаній, що зароджуються. Китайські дослідники в галузі ШІ, яких ставало дедалі більше, уважно стежили за відкриттями, що відбувалися у США, світовому лідері галузі. Китайські компанії сподівалися розкрити таємниці штучного інтелекту, розшукуючи талановитих розробників-китайців, які навчалися за кордоном і працювали в Microsoft і Amazon, і заманюючи їх на батьківщину високими зарплатами та закликами до патріотизму. До початку 2010-х років китайські програмісти наблизилися до створення глибинної нейронної мережі — святого Грааля наглядової держави; системи,

Протягом багатьох років дослідники в області ШІ покладалися на так звану “засновану на правилах” систему програмування. Вони закладали в комп’ютер програму для розпізнавання кішки, повідомляючи йому: «Шукай коло з двома трикутниками зверху». Такий підхід був виправданий, оскільки на більше комп’ютерів не вистачало обчислювальної потужності. Однак він також і обмежував можливості ШІ: не всі зображення кішок являють собою ідеальне коло з двома трикутниками зверху, і не всі кола з трикутниками зверху є кішками.

Більш сучасна технологія — глибинна нейронна мережа — мала цілу низку переваг. У операторів більше не було необхідності виконувати монотонну та трудомістку роботу з ручної категоризації зображень та даних, а потім писати правила для системи штучного інтелекту. Натомість програмне забезпечення навчилося самостійно поєднувати розрізнені дані, переглядаючи величезний обсяг інформації, а потім навчатися на основі цих даних. Згодом програма могла вдосконалювати алгоритм виконання завдання, на вирішення якої її й створювали. Чим менше операторів контролювало та обмежувало програмне забезпечення, тим більше варіантів застосування ШІ з’являлося у компаній. Глибинні нейронні мережі навчилися керувати безпілотними автомобілями, допомагати лікарям ставити діагнози, а також виявляти шахрайство із кредитними картками.

До 2012 року ідея про те, що глибинна нейронна мережа здатна вплинути на ринок, вважалася нісенітницею. Як би не намагалися програмісти з Microsoft Research Asia і нових компаній, що виникають, їх праці ні до чого не приводили. У 2012 році розробники в області ШІ в Китаї та Кремнієвій долині говорили мені, що створення нейронної мережі стане золотою житловою для Microsoft. У травні 2011 року Microsoft придбала Skype, популярну в усьому світі програму для дзвінків та відеоконференцій, здійснивши найбільшу на той момент угоду в галузі. Якби Skype або Microsoft Windows вміли розпізнавати голос і обличчя, це стало б проривом. Було б закладено основу функції перекладу у часі і систем кібербезпеки, що спираються на технологію розпізнавання осіб.

У 2011 році в Пекіні я познайомився з групою молодих китайських дослідників, які працюють до втрати пульсу і без вихідних у спробах вирішити цілий комплекс питань, що терзають їх. Головні з них звучали так: «Як комп’ютерна система може навчитися „бачити“ та „сприймати“ людину? Як вона може почути та дізнатися його голос? Чи може ШІ навчитися говорити?»

«Зараз слушний момент, — казав мені один із них за вечерею після роботи. — Інтернет та соціальні мережі можуть бути джерелами даних, з якими працюватиме ШІ. Ми можемо збирати інформацію про кліки в інтернеті, покупки та переваги людей».

За його словами, у 2005 році до інтернету було підключено менше 10% населення Китаю, але вони швидко стали найактивнішими користувачами соціальних мереж, мобільних додатків та мобільних платежів у світі. У 2011 році своїм власним інтернет-підключенням набуло майже 40% населення, або близько 513 млн осіб. Всі ці користувачі залишали інформацію про свої покупки та дії в інтернеті, яку можна було використовувати, щоб навчити нейронні мережі вирішувати безліч завдань, включаючи стеження за користувачами.

У тому ж 2011 році двоє молодших наукових співробітників, які працювали з відомим дослідником в галузі ШІ Джеффрі Хінтоном , професором інформатики Університету Торонто та співробітником Google, зробили важливе відкриття в галузі апаратного забезпечення. Дослідники зрозуміли, що можуть використовувати графічні процесори (GPU) – пристрої, що покращують графіку в комп’ютерних іграх, – щоб підвищити швидкість обробки даних глибинною нейронною мережею. Розробники в області ШІ могли використовувати характерні для GPU методи відображення форм та зображень на екрані та навчати нейронну мережу пошуку закономірностей.

Раніше створення нейронної мережі коштувало дуже дорого. Але вартість ключового обладнання, на якому працює програмне забезпечення, знизилася завдяки гіпотезі з графічними процесорами. Протягом багатьох років вони ставали дешевшими і дешевшими, навіть незважаючи на збільшення їх пам’яті та обчислювальної потужності.

З удосконаленням апаратного забезпечення та зростанням кількості масивів даних настав ідеальний час для створення глибинної нейронної мережі, яка обробляла б ці дані.

Методом спроб і помилок команда Microsoft під керівництвом доктора Сунь Цзяня знайшла рішення: збільшити кількість «шарів» у нейронній мережі, що дозволило б системі штучного інтелекту постійно оновлювати свої знання та навчатися на інформації, що проходить через неї. Шари нейронної мережі схожі на скупчення нейронів, які отримують дані, обробляють їх, а потім передають на наступні шари для подальшої обробки – так ШІ дізнається все більше про предмет, що аналізується.

Теоретично, що більше шарів, то краще мислить машина. Насправді все виявилося складніше. Одна з проблем полягала в тому, що після проходження кожного шару сигнали пропадали, що заважало дослідникам Microsoft навчати систему.

У 2012 році розпізнавати зображення вдалося навчити систему з вісьмома нейронними шарами. До 2014 року – з тридцятьма. Збільшивши кількість шарів, команда дослідників зробила прорив у тому, що стосується можливості комп’ютера розпізнавати об’єкти на відео та зображення. “Ми навіть не вірили, що ця одна-єдина ідея може виявитися настільки важливою”, – говорив доктор Сунь.

Китайська технологічна екосистема почала привертати увагу венчурних капіталістів, які стали менш зосереджені на традиційних фінансових та технологічних центрах у Кремнієвій долині та Нью-Йорку. Вони прагнули негайно розпочати роботу у двох галузях, де ховався величезний потенціал для наглядової екосистеми: у технологіях розпізнавання облич та розпізнавання мови.

Перша велика інвестиція прийшла у технологію розпізнавання осіб.

У 2013 році створена Кай-Фу Лі венчурна фірма Sinovation Ventures, що спеціалізується на ШІ, підтримала платформу розпізнавання осіб Megvii (Mega Vision), що розвивається. Сума інвестицій не розкривалася. Потім SenseTime (конкурент Megvii, заснований у Гонконгу в 2014 році) випустила перший алгоритм, здатний за певних умов ідентифікувати людей з точністю, що перевищує можливості людського ока, і заявила, що перевершила показники Facebook, — це стало віхою в індустрії ШІ.

За словами Ян Фаня, керівника відділу розробки SenseTime і колишнього співробітника Microsoft, додатки «громадської безпеки» виявилися прибутковим ринком.

“Існує високий, конкурентний попит, обумовлений системами “розумного” міста та відеоспостереження”, – говорив він в інтерв’ю Forbes Asia.

Але програмного забезпечення для розпізнавання осіб потрібні були найсучасніші напівпровідники. Звідки їм було взятися?

SenseTime та інші китайські компанії, що займаються питаннями штучного інтелекту, звернулися по напівпровідники до американських фірм. З’ясувалося, що їхніх колег із США цікавили китайські технології створення програмного забезпечення для мобільних додатків та правоохоронної системи. Американський телекомунікаційний оператор Qualcomm домовився з Megvii про співпрацю: в обмін на напівпровідники Qualcomm отримував право використовувати програмні засоби систем ШІ Megvii у своїх пристроях.

“У Китаї спостерігається вибуховий попит”, – зазначав Лі Сюй, співзасновник і генеральний директор SenseTime, на бізнес-конференції в червні 2016 року в ході спільного виступу з Джеффом Хербстом, віце-президентом з питань розвитку підрозділу венчурного інвестування Nvidia.

Через сім-вісім років після свого заснування у 1993 році компанія Nvidia стала провідним виробником графічних процесорів. Тепер вона готувалася знімати вершки з буму, що насувається, в індустрії штучного інтелекту.

Незабаром Nvidia почала укладати гучні угоди з китайськими фірмами, які займаються технологією розпізнавання осіб. За допомогою чіпів, вироблених Nvidia та її основним конкурентом Intel, у Центрі хмарних обчислень в Урумчі, відкритому в 2016 році, були створені одні з найпотужніших у світі комп’ютерів, які використовуються для стеження. За день ці комп’ютери переглядають більше записів із камер відеоспостереження, ніж за рік.

«У Китаї я бачу камери на кожному ліхтарному стовпі, — говорив Гербст. — Здається, що проглядається просто все. Але проблема в тому, що відео надходить у диспетчерську, в якій сидить хлопець і чекає, коли щось станеться. Хіба це все не потрібно автоматизувати?

Лі Сюй визнавав інтерес китайського уряду до питань громадської безпеки, як і той факт, що «існуюча система спостереження була серйозно обмежена відсутністю інтелектуального механізму управління, особливо щодо обробки відео».

Він запропонував піти альтернативним шляхом.

Лі Сюй знав, що технологія чіпів Nvidia, запозичена зі подібних технологій обробки графіки, відігравала «фундаментальну» роль у його роботі і що для підтримки технології розпізнавання осіб Nvidia задіяно 14 тисяч таких чіпів у серверах по всій Азії.

“Відчуваю, нас з вами чекає довга співпраця”, – сказав йому Гербст з Nvidia під час бізнес-конференції. Можливо, Гербст цього й не хотів, але його слова пролунали зловісно. До 2015 року всі складові наглядової екосистеми стали на свої місця: програмне забезпечення навчилося розпізнавати особи, сканувати текстові повідомлення та електронні листи, а також виявляти закономірності у писемному мовленні та взаємодії людей.

Тепер інвестори почали вкладати свої гроші у наступний ключовий елемент: програмне забезпечення, здатне розуміти та обробляти людський голос.

Наприкінці 1990-х років молодий перспективний дослідник Лю Цінфен відмовився від стажування в Microsoft Research Asia і присвятив кар’єру своєму стартапу iFlyTek, поставивши за мету розробку передової технології розпізнавання голосу.

«Я сказав йому, що він талановитий молодий дослідник, але Китай дуже відстає від американських гігантів індустрії розпізнавання мови, таких як Nuance, а ще в Китаї буде менше споживачів цієї технології, — писав Кай-Фу Лі. — Треба віддати Лю належне: він проігнорував мою пораду і з головою поринув у роботу над iFlyTek».

У 2010 році iFlyTek створила в Сіньцзяні лабораторію, що розробила технологію розпізнавання мови для перекладу уйгурської мови на мандаринський діалект китайської. Незабаром цю технологію почнуть використовувати для стеження та нагляду за населенням Уйгура. До 2016 року iFlyTek постачала до Кашгару вже двадцять п’ять систем «голосових відбитків», які створювали унікальні голосові підписи, які допомагали ідентифікувати та відстежувати людей.

«Усі ці компанії приходили до Сіньцзяна на моїх очах, — згадуєІрфан. — Я бачив їхню апаратуру, їхнє програмне забезпечення». Десятки уйгурів, які втекли із Сіньцзяну після 2014 року, згадували, що помічали логотипи цих компаній на обладнанні. Присутність цих компаній у Сіньцзяні відображена в урядових тендерах, що збереглися в інтернеті, в офіційних корпоративних звітах, доповідях про положення з правами людини, американських санкційних документах, а також у повідомленнях китайських державних засобів масової інформації. «Але багато хто не бачив у цьому нічого небезпечного. Настрій був такий: “Ми просто боремося зі злочинністю”», – зауважує Ірфан.

У період з 2010 до 2015 року на синьцзянський ринок нарешті вийшла і компанія Huawei, національний технологічний символ Китаю, яка розробила сервіси хмарних обчислень у співпраці з місцевою поліцією. Huawei (грубий переклад:“Китай подає надії”) була заснована колишнім військовим інженером Жень Чженфеєм зі стартовим капіталом у три тисячі доларів. У 1980-х роках компанія почала розробляти телефонні комутатори – копіюючи іноземні зразки. Будучи одними з перших апологетів прискореного технологічного розвитку, що просувається урядом, Huawei стала відома в країні та за кордоном завдяки своїй апаратурі для відеоспостереження та мережевого обладнання, а також нарощувала свою присутність на ринку смартфонів.

Жень Чженфей, якого колишні співробітники описують не інакше як напівмістичну фігуру, що висловлюється притчами про струмки та гірські вершини, виношував грандіозні плани щодо глобальної експансії. Ці плани могли бути реалізовані лише в тому випадку, якби західні демократії вдалося переконати, що Huawei не пов’язана з Комуністичною партією Китаю (КПК) і не використовуватиме свої технології для шпигунства. Водночас керівники Huawei прагнули продавати мережеве обладнання владі Сіньцзяну, розглядаючи суспільну безпеку як прибутковий бізнес.

«У 2015 році ми були на заході з тимбілдингу, — розповідав мені Вільям Пламмер, колишній американський дипломат, який обійняв посаду віце-президента Huawei із зовнішніх зв’язків у Вашингтоні. — Хтось показав слайд із написом: „У чому суть Huawei?“ І перший пункт говорив: „Для внутрішньої аудиторії Huawei — китайська компанія, яка підтримує Комуністичну партію Китаю“. Потім йшов другий пункт: „Для зарубіжної аудиторії Huawei — незалежна компанія, яка дотримується міжнародно визнаної корпоративної практики“.

По суті, вони мали на увазі, що в Китаї потрібно дотримуватись правил Китаю, а в інших країнах — правил цих країн. Але помістити це у презентацію… Один лише цей слайд уже був компрометуючим».

До 2015 року виявився доступним завершальний елемент наглядової екосистеми: дешевша технологія для камер відеоспостереження. Досить дешева, щоб набути поширення у промислових масштабах. На ринок Сіньцзяну вийшла китайська компанія Hikvision, найбільший у світі виробник камер відеоспостереження. Вона надала мільйони камер, які дозволили владі встановити стеження за населенням. Камери були настільки просунутими, що могли ідентифікувати людей на відстані п’ятнадцяти кілометрів та використовували програмне забезпечення ШІ від iFlyTek, SenseTime та інших компаній для аналізу осіб та голосу.

«Скайнет», радикальна і всепроникна державна наглядова система, яка концептуально зародилася десятиліттям раніше, тепер могла втілитись у реальність.

Весь цей технологічний ривок і в певному сенсі зловісний синтез різних елементів, що призвели до державотворення на основі штучного інтелекту, не залишилися непоміченими. Вже 2010 року стривожилися Сполучені Штати, найбільший суперник Китаю на міжнародній арені.

Американські політики почали підозрювати, що Huawei та її партнери є прикриттям, що дозволяє Народно-визвольній армії Китаю (НОАК) користуватися бекдорами в обладнанні та програмному забезпеченні з метою кібершпигунства.

«З високим ступенем упевненості можемо заявити, що зростаюча роль міжнародних компаній та іноземних осіб у ланцюжках постачання інформаційних технологій та послуг США створить загрозу безперервній потайливій диверсійній діяльності», — говорили документи Агентства національної безпеки США (АНБ), відповідального за перехоплення комунікацій у світовому масштабі . 2010 року ці записи оприлюднив викривач Едвард Сноуден.

Крім того, злиті Сноуденом документи показали, що АНБ стежило за двадцятьма китайськими групами хакерів, які намагалися зламати державні мережеві структури США, а також мережі Google та інших компаній. До того ж АНБ сподівалася дістатися до Huawei підводних кабелів, що прокладаються, щоб відстежувати комунікації користувачів, яких воно вважало «високопріоритетними цілями», — на Кубі, в Ірані, Афганістані та Пакистані.

АНБ проникло в центральний офіс Huawei, відстежувало комунікації її топ-менеджерів, а також провело операцію під назвоюShotgiant, Націлену на виявлення зв’язку між Huawei та Народно-визвольною армією Китаю. Наступним кроком АНБ стала спроба використовувати технології Huawei, які компанія продавала в інші країни та організації: впровадитись у вироблені Huawei сервери та телефонні мережі та вести кібератаки на ці країни. Все це вдалося здійснити завдяки безмежним хакерським можливостям, а також бекдорам, створеним за співпраці з американськими телеком-компаніями, що дозволило подолати звичні технологічні бар’єри для здійснення масового шпигунства за іноземними громадянами.

Представники Сполучених Штатів та Китаю заговорили про холодну війну, незважаючи на торговельні та технологічні зв’язки між країнами. У 2012 році комісія Конгресу оприлюднила результати річного розслідування, заявивши про отримання від колишніх співробітників Huawei документів, що свідчать про те, що компанія надавала свої послуги підрозділам кібервійськ армії Китаю.

Влада США почала придивлятися до дочки генерального директора Женя, Мен Ваньчжоу, відомої під англізованим прізвисько «Кеті». Як світська левиця Huawei Кеті проводила ділові заходи, які включали сесії питань і відповідей зАланом Грінспеномта іншими гостями. ФБР та Міністерство внутрішньої безпеки закулісно стежили за діловою активністю «Кеті» та Huawei. Вони підозрювали, що «Кеті» займалася підставною компанією в Ірані під назвою Skycom, яка порушувала торгові санкції США, ведучи бізнес з іранськими телеком-компаніями.

«Ми представили уряду США інформацію про Huawei в Ірані, про Skycom і про те, що це була незалежна компанія, хоч вона [Мен Ваньчжоу] входила до ради директорів протягом двох років, — зізнався мені Пламмер. — Ми надали ці запевнення, бо нам так було сказано, і нам здавалося, що так буде краще. Але це було брехнею. Співробітники Skycom в Ірані розгулювали з візитними картками Huawei».

Пламмер розповів, що у 2013 році йому надійшов дзвінок від розлюченого начальства з Huawei. Агенти Міністерства внутрішньої безпеки направили Мен на додатковий огляд, затримавши її перед посадкою на рейс у нью-йоркському аеропорту імені Джона Кеннеді, коли вона поверталася з одного зі своїх гламурних бізнес-заходів.

«Вони чотири години утримували її комп’ютер, планшет та обидва телефони, — розповідав Пламмер. — Влада США все скопіювала». Мен звільнили. Керівники Huawei приготувалися до майбутньої юридичної битви, закривши офіс Skycom у столиці Ірану Тегерані, та дистанціювалися від Skycom.

Але поки Сполучені Штати поливали брудом Huawei і Китай, звинувачуючи їх у передбачуваній установці бекдорів, що дозволяють здійснювати хакерську діяльність за підтримки держави, а також в управлінні підставною компанією, АНБ було спіймано на впровадженні власних бекдорів в американські мережеві продукти, що поставляються до Китаю.

Німецька газета Der Spiegel придбала п’ятдесятисторінковий каталог, створений підрозділом АНБ під назвою «Відділ просунутих мережевих технологій» (Advanced Network Technology Division), який займався перехопленням інформації в найбільш захищених мережах. АНБ отримало доступ до вантажів американської компанії мережевого обладнання Cisco, що прямували до Китаю, і потай встановило в них пристрої спостереження. Компанія Cisco пізніше заявляла, що не знала про зло, вчинений своїм же урядом.

Ще один мережевий продукт АНБ, HALLUXWATER, виявився “бекдор-імплантатом”. Він зламував фаєрволли Huawei, що дозволяло АНБ впроваджувати шкідливе програмне забезпечення та керувати пам’яттю пристроїв.

«У такій контролюючій поведінці Сполучених Штатів немає нічого несподіваного, – повідомив Жень Чженфей журналістам у Лондоні. — Але ж тепер це було доведено».

Незабаром на тлі геополітичного суперництва, що зароджується, Китай розкрив свої карти. У цій країні видобувається 93% світових запасів рідкісноземельних елементів, таких як літій та кобальт, що експортуються в інші країни та необхідні для вдосконалення батарей та дисплеїв в айфонах та телевізорах. У вересні 2010 року китайський рибальський траулер зіткнувся з двома японськими катерами берегової охорони неподалік спірних островів Сенкаку. Японія заарештувала капітана траулера за підозрою у порушенні її прав на вилов риби в регіоні, який вона контролює, і на який давно претендує Китай.

Китай завдав удару у відповідь. Він заблокував експорт рідкісноземельних елементів в Японію, поставивши під загрозу виробництво неймовірно популярної Toyota Prius, для двигуна якої потрібно близько кілограма рідкісноземельних елементів.

Трохи більше двох тижнів Японія звільнила членів екіпажу траулера, не пред’явивши звинувачень.

“Китай і Японія – значущі сусіди з важливими обов’язками в міжнародному співтоваристві”, – заспокійливо заявив прем’єр-міністр Наото Кан у Нью-Йорку на Генеральній асамблеї ООН.

Але в міру того як Друга холодна війна набирала оберту, розбіжність між американською та китайською технологічними стратегіями ставала очевидною.

Китай намагався викрасти американські технології, включаючи комерційні таємниці та інтелектуальну власність, щоб передати їх приватним китайським компаніям, які хотіли обставити Кремнієву долину.

Сполучені Штати, у свою чергу, хотіли впровадитись у Huawei та інші китайські компанії. Їхня мета полягала не в крадіжці китайських технологій, на той момент ще недосконалих, і передачі їх приватним компаніям на кшталт Amazon і Google, а скоріше у зборі інформації про можливі зв’язки цих організацій з військовими структурами, а також загрози національній безпеці США з боку Китаю та його компаній.

Під час журналістського відрядження у червні 2014 року, блукаючи вулицями Пекіна, Шанхаю та китайського технологічного центру Шеньчжень, я відчував зростання самопроголошеного, майже відчутного націоналізму — особливо серед китайської молоді.

Здавалося, розмови про нову холодну війну викликають у людей тривогу, яку посилювала державна пропаганда.

Керівник однієї місцевої технологічної компанії спробував пояснити мені новоявлену самовпевненість Китаю. “Ви ж знаєте, що Google пішов з Китаю”, – повідомив він мені з гордістю. Після чотирьох років роботи на китайському ринку Google закрив свій китайський пошуковий сайт у 2010 році, у розпал конфлікту з приводу злому ресурсів компанії та цензурування пошукових результатів. «Але це не має жодного значення, – пояснив він. — Ми маємо свою пошукову систему Baidu. Тепер ми маємо свої власні компанії. Світ змінюється, і я сподіваюся, що Кремнієва долина та АНБ не домінуватимуть вічно».

«Але не здається вам, що якщо Китай хоче досягти рівня Кремнієвої долини, йому доведеться відкрити інтернет, — запитав я, — щоб дослідники могли отримувати інформацію, необхідну для створення якісних технологій?» «Це теж не має значення, – відповів він. — У Китаї наші технології пов’язані із майбутнім нашої країни. Ми не маємо такого явного поділу влади, як у США. Наша єдина мета – зробити Китай великим. Ми хочемо бути з американцями на рівних, щоб ніхто більше не дивився на нас згори».

Джерело

Ідеальний програміст: тези

“Ідеальний програміст” Роберта Мартіна давно став керівництвом з професіоналізму у сфері IT та однією з основоположних праць у сучасній розробці, нарівні з “Чистим кодом”, “Чистою архітектурою” та “Чистим еджайлом”.

Про професіоналізм

Ідеальний програміст

Професіоналом ми називаємо того, хто працює швидко, але без поспіху, хто розумно оцінює ситуацію та виконує свої зобов’язання. Професіонал знає, коли треба говорити “ні”, але чесно намагається сказати “так”.

Непрофесіонали не несуть відповідальності за роботу, що виконується — вони залишають відповідальність своїм роботодавцям. Якщо непрофесіонал робить помилку, то сміття за ним прибирає роботодавець. Але якщо помилка відбувається професіоналом, то усувати наслідки доводиться йому самому .

Фахівці часто роблять героїчні справи, але не тому, що хочуть бути героями. Професіонали стають героями, коли вони добре виконують свою роботу, без порушення термінів та бюджету.

Професіоналізм передається від однієї людини до іншої. Старші навчають молодших. Колеги обмінюються між собою. Старші, спостерігаючи за молодшими, бачать його збоку та навчаються заново. Професіоналізм поширюється наче свого роду інтелектуальний вірус. Не можна переконати людей бути фахівцями. Прийняття професійного ставлення не так раціональним, скільки емоційним рішенням. Стати зразком для наслідування. Ви стаєте професіоналом самі та показуєте свій професіоналізм іншим. А потім нехай концепція сама зробить усю роботу.

Про тестування

тестування

Деякі фахівці використовують службу контролю якості для виявлення помилок. Вони розраховують на те, що контроль якості виявить помилки та поверне їх список розробникам. Передавати на контроль якості код, працездатність якого ви не можете гарантувати непрофесійно. Напишіть модульні тести, які можна виконати будь-якої миті, і запускайте їх якнайчастіше. Кожен написаний вами рядок коду має бути протестований. Крапка.

Група розробки повинна прагнути до того, щоб контроль якості не виявляв жодних дефектів. Щоразу, коли служба контролю якості щось виявляє, це має стати тривожним сигналом для розробників. Вони повинні запитати себе, як це сталося, і вжити заходів для запобігання таким інцидентам у майбутньому.

Про автоматизацію тестування

Час налагодження обходиться фірмі рівно таку ж суму, що час написання коду. Ви як фахівець повинні прагнути по можливості наблизити час налагодження до нуля.

Витрати на проведення автоматизованих тестів настільки малі в порівнянні з витратами на ручне тестування, що написання сценаріїв, що запускаються вручну, не має жодного економічного сенсу. Професійні розробники вважають за свій обов’язок простежити за тим, щоб приймальні тести проводилися в автоматизованому режимі. Не варто розглядати ці тести як зайву роботу – краще розглядайте їх як значну економію часу та грошей. Тести запобігають помилкам у реалізації системи та допоможуть дізнатися, коли ваша робота закінчена.

ПРО TDD

Три закони TDD:

  1. Новий робочий код пишеться тільки після написання модульного тесту, який не проходить.
  2. Ви пишете такий обсяг коду модульного тесту, який необхідний для того, щоб цей тест не проходив (якщо код тесту не компілюється, вважається, що він не проходить).
  3. Ви пишете такий обсяг робочого коду, який необхідний для проходження модульного тесту, який в даний момент не проходить.

TDD – вибір професіоналів. Ця методологія підвищує впевненість, надає сміливості розробникам, знижує кількість дефектів, формує документацію та покращує архітектуру.

TDD – не релігія і не панацея. Виконання трьох законів не гарантує жодної з перерахованих переваг. Поганий код можна написати навіть за попереднього написання тестів.

Про чистоту коду та архітектури

чистота коду та архітектури

Ніщо не має більш ґрунтовного та довгострокового негативного ефекту на продуктивність групи програмістів, ніж бруд у програмному коді. Рух вперед по багнюці (коли ви знаєте, що це бруд) є найгіршим з різновидів інверсії пріоритетів. Рухаючись вперед, ви обманюєте себе, обманюєте вашу групу, обманюєте свою компанію та замовників. Ви кажете їм, що все буде гаразд, хоча насправді ви ведете їх до загальної катастрофи. Професіонал не піддається спокусі влаштувати бруд у коді, щоб швидко рухатися вперед. Брудно – завжди означає повільно!

Чистий код простіше зрозуміти, простіше змінювати та простіше розширювати. Зі спрощенням коду ймовірність дефектів стає ще нижчою. Відбувається стабільне покращення кодової бази — замість «загнивання коду», такого звичного для нашої галузі.

Про чисту архітектуру

Щоразу під час роботи з модулем слід потроху удосконалювати його структуру. Кожне читання коду має призводити до доопрацювання структури.

Додавання функціональності на шкоду структурі – остання справа. Структура коду забезпечує його гнучкість. Порушуючи структуру, ви руйнуєте майбутнє коду. Усі програмні проекти базуються на фундаментальному припущенні про простоту змін. Якщо ви порушуєте це припущення, створюючи негнучкі структури, то ви тим самим підриваєте економічну модель, закладену в основу всієї галузі.

Про довіру до своїх робочих методів

Щоб зрозуміти, у що ви по-справжньому вірите, спостерігайте за собою у кризовій ситуації. Якщо під час кризи ви не відхиляєтеся від своїх робочих методів, ви дійсно переконані в їх ефективності. Якщо ваш код залишається чистим у звичайний час, а в кризу ви розводите в ньому бруд, значить ви не вірите, що бруд уповільнює вашу роботу.

Виберіть методи, з якими ви комфортно відчуваєте себе в кризовій ситуації. А потім використовуйте їх постійно. Не змінюйте свою поведінку у напруженій ситуації. Якщо ваші методи дійсно оптимальні, то вони повинні дотримуватися навіть у найважчі часи. Якщо ви потрапили у скрутну ситуацію, довіряйте своїм методам.

Про саморозвиток

саморозвиток

За свою кар’єру ви відповідаєте самі. Ваш роботодавець не повинен піклуватися про вашу популярність на ринку праці. Він не повинен навчати вас, відправляти вас на конференції або купувати книги. Всім цим повинні займатися ви самі .

Читайте книги, статті, блоги, твіти. Відвідуйте конференції та збори власних груп. Беріть участь у дослідницьких групах. Вивчайте те, що лежить за межами звичної зони. Якщо ви програміст .NET – вивчайте Java. Якщо ви програмуєте на Java, вивчайте Ruby. Якщо ви програмуєте на C – вивчайте Lisp. А якщо вам захочеться серйозно попрацювати мізками, вивчайте Prolog та Forth!

Якщо ви не подбаєте про розширення власного кругозору, це може призвести до небажаного звуження резюме та менталітету.

Виконуйте громадсько-корисну роботу, беручи участь у проекті з відкритим кодом. Професійні програмісти тренуються особисто. Ваш роботодавець не зобов’язаний піклуватися про підтримку вашої кваліфікації або розширення вашого резюме.

Про передачу досвіду

Професійні розробники навмисно намагаються разом програмувати, разом тренуватись, разом проектувати та планувати. Найкращий спосіб чогось навчитися — вивчати інших. Факти запам’ятовуються найшвидше тоді, коли ви повинні їх повідомити іншим людям, за яких ви відповідаєте. Таким чином, основну користь від викладання отримує передусім викладач.

Відповідальність за навчання менш кваліфікованих програмістів покладається на їхніх досвідчених колег. Навчальних курсів недостатньо. Книг недостатньо. Ніщо не приведе молодого розробника до високої продуктивності швидше, ніж його власне бажання у поєднанні з ефективним навчанням старших товаришів.

Про відповідальність

відповідальність

Перший обов’язок професійного програміста – дбати про інтереси своїх роботодавців. Це означає, що ви повинні спілкуватися з вашими начальниками, бізнес-аналітиками, тестерами та іншими учасниками групи, щоб глибоко розуміти комерційні цілі проекту. Професійний програміст повинен виділити час вивчення комерційної боку справи.

Професіонал завжди допомагає бізнесу знайти спосіб досягнення його цілей, але він не завжди приймає він зобов’язання, прийняті за нього.

Професіонали не беруть на себе зобов’язань, якщо вони не впевнені в можливості їх виконання. Зобов’язанням властива визначеність. Інші люди приймають ваші зобов’язання та використовують їх як основу для побудови власних планів. Порушення зобов’язань обернеться величезним збитком для вашої репутації; це прояв непорядності, лише трохи кращий за відкриту брехню.

Професіонали проводять чітку різницю між оцінками та зобов’язаннями. Вони не беруть на себе зобов’язань, доки не будуть твердо впевнені в успіху. Також вони стежать за уникненням неявних зобов’язань. Вони наскільки можна чітко обумовлюють ймовірнісний розподіл своїх оцінок, щоб керівники могли будувати відповідні плани.

Професіонал зобов’язаний допомогти своїй групі створити програму настільки якісну, наскільки це можливо. А це означає, що всі повинні приділяти увагу можливим помилкам та промахам колег та спільно працювати над їх виправленням.

Кожен професіонал повинен розуміти предметну область програмованих ним рішень. Бути експертом не обов’язково, але до вивчення теми необхідно ставитись відповідально. Найгірший різновид непрофесіоналізму — просто програмувати за специфікацією, не розуміючи, чому ця специфікація підходить для вирішення свого завдання. Ви повинні мати достатні знання в предметній області для того, щоб розпізнати та виправити можливі помилки у специфікації.

Про обіцянки

Ретельно вибирайте формулювання, які ви використовуєте у своїх обіцянках, тому що, за словами, часто можна судити про подальший перебіг подій. Якщо вам не вдається підібрати потрібні слова, швидше за все, ви недостатньо відповідально ставитеся до сказаного або не вірите у його здійсненність.

Обіцяйте тільки те, що знаходиться під повним контролем. Якщо кінцева мета залежить від когось іншого, обіцяйте лише конкретні дії, які сприяють досягненню кінцевої мети. Якщо ви не можете виконати свою обіцянку, дуже важливо якнайшвидше повідомити про це того, кому ви обіцяли.

Коли говорити “так” і “ні”

Професіонали говорять правду наділеним владою. У них достатньо сміливості, щоби сказати «ні» своїм начальникам.

Як сказати «ні» начальнику? Це ж ваш начальник! Хіба ви не повинні робити те, що каже начальник? Ні! Говоріть “ні”, якщо ви професіонал. Рабам забороняється говорити “ні”. Наймані працівники неохоче кажуть «ні». Але професіоналу належить говорити «ні». Більше того, добрим керівникам дуже потрібні люди, у яких вистачає сміливості сказати «ні». Тільки так можна справді чогось досягти.

Професіонал не повинен відповідати «так» на все, що від нього вимагають. Проте він має докласти максимум зусиль до того, щоб це так стало можливим. Коли професіонали говорять так, вони використовують такі формулювання, щоб у співрозмовника не виникало сумнівів у надійності їхніх обіцянок.

Про виконання своєї роботи

виконання своєї роботи

Професійні розробники мають лише одне визначення: виконано — значить виконано. Зроблено — це означає, що весь код написаний, всі тести пройдені, служба контролю якості та ключові учасники прийняли результат. Зроблено.

Найгірший із усіх видів непрофесіоналізму з боку програміста — це спроба видати недоробку за готовий продукт. Іноді це просто відкрита брехня, що досить погано. Але набагато небезпечніша інша ситуація — спроби підвести раціональну основу під нове визначення «готовності».

Ця хвороба заразна. Якщо одному програмісту така поведінка сходить з рук, інші бачать і наслідують його приклад. Один з них розширює визначення «готовності» ще далі, і всі інші наслідують його приклад. Коли група потрапляє до цієї пастки, начальство чує, що все йде нормально. Усі звіти про хід робіт показують, що роботу буде завершено до терміну. Ситуація нагадує пікнік сліпих на залізничних рейках: ніхто не бачить вантажний склад незавершеної роботи, що наближається, поки не буде занадто пізно.

Проблема хибної готовності вирішується створенням незалежного визначення готовності. Для цього слід доручити бізнес-аналітикам та фахівцям із тестування створити автоматизовані приймальні тести, без проходження яких продукт не може вважатися готовим. Тести мають бути зрозумілими для бізнесменів та ключових учасників проекту, не пов’язаних з технічною стороною.

Про аврали

Поспіх безглуздий. Ви не змусите програмувати себе швидше. Ви не змусите швидше вирішувати завдання. А якщо спробуєте — ви тільки уповільните роботу та влаштуєте хаос, який уповільнить роботу інших.

Щоб звести до мінімуму проблеми, пов’язані з відставанням, пам’ятайте про два найважливіші аспекти: раннє виявлення та прозорість. Найгірше, коли ви до останнього моменту запевняєте оточуючих, що роботу буде завершено вчасно, а потім підводьте всіх. Не робіть цього. Регулярно перевіряйте хід проекту по відношенню до кінцевої мети та уявіть три обґрунтовані кінцеві дати: найкращу, номінальну та гіршу.

На понаднормову роботу можна погоджуватися лише за виконання деяких умов: 1 — особисто ви можете її собі дозволити; 2 – аврал триватиме недовго, не більше двох тижнів, і 3 – у керівництва є резервний план на випадок, якщо ваші зусилля завершаться невдачею.

Про концентрацію

концентраця

Професійні розробники навчаються керувати своїм часом так, щоб повною мірою використати свою ману концентрації. Ми пишемо код, коли резерв мани високий, а коли її залишається мало – займаємось іншими, менш творчими справами. Якщо ви витратите всю ману концентрації на зустрічі, то у вас залишиться менше ресурсів для програмування.

Професійні розробники управляють своїм графіком сну те щоб резерв мани концентрації досягав максимуму на той час, що вони вранці приходять працювати.

Після того, як мана піде, зберігати концентрацію силою волі неможливо. Ви можете писати код, але вам майже напевно доведеться переписувати його наступного дня.

Фізична концентрація допомагає відновити розумову, причому це більше, ніж проста перезарядка. Регулярні фізичні вправи підвищують потенціал інтелектуальної концентрації.

Якщо ви не можете достатньо зосередитися на своїй роботі, у вас вийде поганий код. У ньому буде багато помилок. Він матиме неправильну структуру. Він вийде заплутаним та непрозорим. Він не буде відповідати справжнім потребам замовника. Якщо ви втомилися або не можете зосередитися, не пишіть код.

Обов’язково стежте за сном, здоров’ям і способом життя, щоб ви могли щодня присвятити роботі вісім хороших годин.

Про взаємодію всередині команди

взаємодія всередині команди

Про зустрічі

Зустрічі коштують приблизно $200 на годину на кожного учасника. Тут враховуються зарплати, премії, витрати використання приміщення тощо.

Професіонали знають, що зустрічі коштують дорого. Ви не повинні відвідувати кожну зустріч, на яку вас запрошують. Більше того, відвідувати дуже багато зустрічей непрофесійно. Отримавши запрошення, не приймайте його, якщо ваша участь не пояснюється негайною і значною необхідністю для поточної роботи.

Один із найважливіших обов’язків вашого керівника — утримувати вас від участі в зайвих зустрічах. Хороший керівник більш ніж охоче захистить вашу відмову від участі, тому що ваш час представляє для нього таку ж цінність, як і для вас.

Ви повинні ефективно управляти своїм часом. Якщо ви застрягли на зустрічі, яка лише марно витрачає ваш час, знайдіть спосіб ввічливо покинути цю зустріч. Якщо вас просять прийти на зустріч, переконайтеся, що ви знаєте, які теми будуть обговорюватися, скільки часу на них виділено і яка мета має бути досягнута. Якщо вам не вдається отримати чітких відповідей на ці запитання, ввічливо відмовтеся від участі.

Зустріч має відбуватися досить швидко: коротке обговорення щодо кожного елементу списку реалізації, після чого елемент або вибирається, або відхиляється. На жодний елемент не повинно йти більше 5 або 10 хвилин. Якщо буде потрібне докладніше обговорення, заплануйте його на інший час з частиною групи.

Остерігайтеся зустрічей, які проводяться лише для придушення розбіжностей та підтримки однієї зі сторін. Також уникайте зустрічей, на яких присутня лише одна зі сторін, що сперечаються.

Про роботу у групах

Одна з найгірших ознак неправильно функціонуючої команди — коли кожен програміст зводить стіну навколо свого коду і забороняє іншим програмістам торкатися його. Професійні розробники не забороняють колегам працювати зі своїм кодом. Працюючи з інших частин системи, вони вчаться друг в друга.

Професіонали поєднуються в пари, тому що це найкращий спосіб рецензування коду. Найефективніший і найдієвіший спосіб рецензування коду — участь у його написанні. Фахівці працюють разом.

Професіонали також поєднуються в пари, тому що це найкращий спосіб обміну знаннями. Професіонали не створюють «банки знань» — натомість вони вивчають різні аспекти системи та бізнесу, поєднуючись у пари.

Про “притерті” групи

Групи формуються не відразу. Між учасниками поступово налагоджуються стосунки. Вони вчаться працювати один з одним, дізнаються дивацтва, сильні та слабкі сторони своїх колег. Згодом учасники «притираються» один до одного.

У «притертій» групі є щось чарівне: вона здатна творити чудеса. Учасники розуміють один одного, підтримують та вимагають максимальної віддачі. Завдяки їхній взаємодії досягаються результати.

«Притерта» група разом планує, разом вирішує завдання, разом розбирається з проблемами та досягає результатів. Професійні фірми-розробники доручають проекти існуючим «притертим» групам, а чи не формують групи конкретного проекту.

“Притерта” група зазвичай містить близько дюжини учасників. До групи повинні входити програмісти, тестери та аналітики. І в неї має бути керівник проекту. Добре «притерта» група з 12 осіб може складатися із семи програмістів, двох тестерів, двох аналітиків та керівника проекту.

Створити добру групу складніше, ніж створити проект. Відповідно, краще формувати групи з постійним складом, які переходять від одного проекту до іншого і можуть займатися кількома проектами одночасно.

Дослідження: ШІ-боти справляються з CAPTCHA краще за людей

ШІ-боти

Штучний інтелект на 15% успішніше справляються із проходженням CAPTCHA, ніж живі люди. Такого висновку дійшли автори дослідження , на яке звернув увагу Quartz .

Експеримент був проведений групою фахівців із Microsoft, Швейцарської вищої технічної школи Цюріха, Каліфорнійського університету в Ірвайні та Ліверморської національної лабораторії.

У дослідженні взяли участь 1400 осіб, яким було запропоновано пройти тести на захист від роботів, які використовуються на 120 популярних ресурсах. Результати фахівці порівняли з показниками, які продемонстрували різноманітні роботи.

«Точність роботів коливається в межах 85-100%, причому у більшості вона перевищує 96%. Це істотно краще за показник, що спостерігається у людини (50–85%)», — йдеться у статті, опублікованій за підсумками експерименту.

Живі люди, за даними дослідників, можуть конкурувати з ШІ лише за проходження reCAPTCHA. Середньостатистичний користувач справляється із цим завданням за 18 секунд. У роботів на це йде 17,5 секунди.

В інтерв’ю для New Scientist результати дослідження прокоментував один із його авторів Джин Цудік. На його думку, вони свідчать, що технологія захисту від роботів перестала справлятися зі своїми завданнями і тепер приносить лише незручності.

“Всі ми знаємо, що ніхто не любить подібні тести. Для цього не потрібно проводити дослідження. Але не всі знають, чи варті зусилля, які ми прикладаємо для проходження CAPTCHA щодня, місяць, рік», — нарік учений.

Нагадаємо, в липні аналітики Стенфорда та Каліфорнійського університету опублікували дослідження, в якому стверджується, що новітні моделі чат-бота ChatGPT стали працювати гірше після спілкування з живими користувачам. Зокрема ще в березні цього року остання версія штучного інтелекту ідентифікувала прості числа з точністю 97,6%. До червня цей показник упав до 2,4%.

Джерело

5 новинок CSS в адаптивній верстці, які можна використовувати вже зараз.

Можливо, ви вже чули про де які технології CSS, але не використовували їх, бо думали, що вони не підтримуються браузерами. Тепер можете сміливо брати їх у всеозброєння та застосовувати у своїх проектах!

Я вирішив в одному місці зібрати інформацію про кілька нових фічів, якими почав користуватися сам і вам раджу.

5 новинок CSS в адаптивній верстці, які можна використовувати вже зараз

Інструменти, що надаються CSS, постійно розвиваються, з’являється багато нових фіч, але головною проблемою використання новинок залишається підтримка браузерами. Іноді доводиться чекати по кілька років, перш ніж те чи інше оновлення отримає достатню підтримку, і його можна буде використовувати.

Нові одиниці вимірювання svh, lvh, dvh

Найпоширеніша проблема на мобільних пристроях при використанні vh – при розрахунку висоти не враховується висота навігаційної панелі, яка динамічно з’являється і зникає. Одиниці виміру svh, lvh, dvh вирішують цю проблему, дозволяючи позбутися непотрібного скролла.

Почнемо зі Svh (Small viewport height). Ця одиниця виміру задає найменший розмір viewport, коли відображається панель навігації.

css svh

Lvh (large viewport height) задає розміри найбільшого розміру viewport, коли панель навігації прихована.

css lvh

І нарешті Dvh (Dynamic viewport height) динамічно змінює значення висоти щодо того, чи відкрита панель з навігацією чи ні.

css dvh

Ці одиниці виміру можна використовувати прямо зараз, згідно сайту “Сan I use” , вони підтримуються у всіх сучасних браузерах.

can I use svh, lvh, dvh

Контейнерні запити

Про них знає дуже багато, оскільки контейнерні запити з’явилися кілька років тому. Нині їхня підтримка стала достатньою, щоб використати в реальних проектах.

Контейнерні запити дозволяють змінювати стилі, спираючись розмір блоку, а чи не всього екрану на відміну від min-width, max-width.

Розглянемо найочевидніший приклад. У нас є список із 4 карток, у рядку міститься лише 3. Остання картка повинна розтягуватися на всю ширину, але при такому великому розмірі картинка та текст мають бути на одному рядку.

Контейнерні запити

Щоб цього домогтися контейнера картки (.card) потрібно визначити властивість container-type у значенні inline-size. Тепер можна ставити стилі безпосередньо для дочірніх елементів. Поки картка більше 400px, до неї додаватимуться властивість display flex.

.card {
    container-type: inline-size;
}

@container (min-width: 400px) {
    .card__container {
        display: flex;
        align-items: center;
    }
}

Ось що вийшло.

Контейнерні запити

Це лише невеликий приклад варіацій застосування контейнерних запитів безліч. Нині вони отримали широку підтримку, і їх можна використовувати.

Can I use @container

Новий синтаксис медіазапитів Media Queries Range

Це невелика, але приємна зміна, що дозволяє використовувати більш зрозумілий синтаксис у медіазапитах. Звичайний синтаксис медіазапитів виглядав так:

@media (max-width: 1000px) {
    /* ... */
}

@media (min-width: 1000px) and (max-width: 1400px) {
    /* ... */
}

З новим можна зробити цей запис коротшим і зрозумілішим для розуміння.

@media (width <= 1000px) {
    /* ... */
}

@media (1000px <= width <= 1400px) {
    /* ... */
}

Крім цього доступні такі оператори порівняння:

  • < порівнює чи менше одне значення іншого;
  • > порівнює чи більше одне значення іншого;
  • = порівнює чи одне значення іншому;
  • <= порівнює менше чи одно одне значення іншому;
  • >= порівнює більше чи одно одне значення іншому.

Can I use Media Queries Range

Функції clamp, min, max

Ці функції дозволяють розраховувати розміри елементів. Усередині них можна проводити обчислення так само, як і в calc.

Функція min приймає значення, вибираючи найменше. Передавати можна безліч значень. Наприклад, якщо задати 50vw і 500, при розмірі viewport 1400px, застосовується 500px, тому що 1400/2 = 700, 500 < 700. Але коли розмір viewport стане менше 1000px, буде використано значення 50vw.

Також у даних функціях можна порівнювати між собою та відносні значення. Функція max працює так само, як min, тільки повертає максимальне значення.

.element {
    width: min(50vw, 500px);
}

.element {
    width: min(10em, 30%, 30px);
}

Та нарешті clamp. Функція приймає 3 параметри і задає значення між верхнім та нижнім кордоном.

.element {
  width: clamp(250px, 100% / 3, 900px);
}

Доки елемент не буде менше 250px і не більше 900px, його ширина буде розраховуватися за формулою 100% / 3.

Can I use min max clamp

Властивість text-wrap: balance

Остання новинка CSS, що розглядається, є найспірнішою серед усіх описаних вище, тому що не підтримується в Safari і Mozilla. Але навіть якщо text-wrap: balance не застосовується, властивість нічого не зламає, тому можна використовувати. З цією властивістю браузер намагається збалансувати кількість символів у рядку, щоб вони були приблизно рівні за шириною.

Важливо: text-wrap: balance у своїй поточній реалізації дозволяє балансувати текст до 4 рядків. Якщо текст більше, воно не працюватиме.

Can I use text-wrap: balance

Ми розглянули 5 нових фіч CSS, які допоможуть в адаптивній верстці. Якщо вам було корисно, підписуйтесь, я ділитися нововведеннями в CSS, доступних для застосування вже сьогодні.

Джерело

createAsyncThunk.withTypes() корисна можливість @reduxjs/toolkit

У цій статті розберемо ще одну маловідому, але не менш корисну можливість@reduxjs/toolkit

Для початку розберемо варіанти та можливості типізаціїcreateAsyncThunk

Санки можна типізувати як за допомогою дженериків,

createAsyncThunk<Returned, ThunkArg, ThunkApiConfig>()

так і за допомогою безпосередньо аргументів

createAsyncThunk(
  'asyncThunkTypePrefix',
  (arg: ThunkArg, apiConfig: ThunkApiConfig) => {}
)

де:

– Returned– тип значення, що повертається санком значення

– ThunkArg– тип аргументу санка

– ThunkApiConfig– тип конфіга, його розберемо нижче

Я віддаю перевагу і раджу використовувати другий метод, оскільки немає необхідності вручну описувати тип значення, що повертається, особливо, коли ваш санк може повернути кілька видів помилок крім даних. Набагато простіше надати це Typescript‘у, він чудово аналізує всі виходи з санка і показує, наприклад, що повернутися може Data | Error | AxiosError, і ви не потопатимете у величезних повідомленнях про помилки типізації через те, що типізація в дженериках відрізняється від тієї, що бачитьTypescript

Тепер подивимося докладніше ThunkApiConfig:

Звернемося до документації thunkApi в@reduxjs/toolkit

toolkit

Тут описані всі можливі поля та пояснення до них. Однак на практиці в основному використовується лише половина з них:

type Store = typeof store
type RootState = ReturnType<Store['getState']>
type AppDispatch = Store['dispatch']

type ThunkApiConfig = {
  state: RootState
  dispatch: AppDispatch
  rejectValue: AnyErrorType
  extra: AnyExtraArgumentType
}

де:

– stateRootState– Тип вашого кореневого стейту. Значення такого типу повернеgetState

– rejectValueAnyErrorType– Тип значення, яке ви будете використовувати вrejectWithValue

– extraAnyExtraArgumentType– Тип будь-якого екстра аргументу, який ви опціонально використовуватимете у ваших санчатах

Оскільки нікому не хочеться щоразу описувати цей тип для кожного нового санка, часто використовуються функції-обгортки, що допомагають лише один раз описати тип ThunkApiConfig

export const createAppnAsyncThunk = <Returned, ThunkArg>(
  type: string,
  thunkPayloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg>,
): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> =>
 createAsyncThunk<Returned, ThunkArg, ThunkApiConfig>(type, thunkPayloadCreator)

А тепер заглянемо в глибини документації, куди дістаються небагато людей і подивимося на спосіб, який нам пропонує бібліотека з коробки. createAsyncThunk.withTypes()

const createAppAsyncThunk = createAsyncThunk.withTypes<ThunkApiConfig>()

Як бачимо перший метод у порівнянні з другим вимагає написання більшої кількості і, що важливо, зрозуміти і розібратися з типами, що надаються @reduxjs/toolkit для типізації санків, що для новачків Typescriptможе бути зовсім не просто.

Джерело

Що таке Network State (мережева держава)?

Network State

  • Мережева держава (Network State) — концепція соціально-політичної організації, запропонована колишнім CTO криптобіржі Coinbase Баладжі Срінівасаном і заснована на використанні блокчейну та суміжних технологій.
  • Створення подібних утворень передбачає присутність у віртуальному, а й у фізичному вимірі.
  • Останнє досягається за рахунок придбання ділянок землі по всьому світу, які потім поєднуються в мережевий архіпелаг.
  • За наявності амбіцій стати мережевою державою теоретично може будь-яка спільнота однодумців.

Навіщо створювати нові держави?

Ідея Network State викладена в однойменній книзі підприємця, інвестора та колишнього CTO криптовалютної біржі Coinbase Баладжі Срінівасана. У цій роботі бізнесмен пропонує алгоритм створення мережевих держав — альтернативних політичних утворень, що ґрунтуються на блокчейн-технологіях та інших інноваціях.

Згідно з Срінівасаном, соціальні та політичні зміни відбуваються повільніше, ніж технологічні. Це, на його думку, пов’язане із глобальним домінуванням національних держав. У такій ситуації реформи та експерименти з новими засобами громадської організації обмежені: політична кар’єра недоступна більшості і пов’язана з необхідністю інтеграції до існуючих інститутів влади.

На відміну від чиновників, підприємці не зобов’язані вбудовуватись у корпорації, щоб організувати свою справу; ринкова конкуренція збільшує різноманітність та якість товарів, генеруючи загальне благо та рухаючи прогрес. За формулюванням Срінівасана, «потрапити до списку Forbes значно простіше, ніж до списку президентів США».

Проект Network State пропонує використовувати динамізм ринку для прискорення соціального прогресу — будь-який бажаючий, використовуючи сучасні засоби комунікації та криптовалюти, може заснувати своє стартап-суспільство, подібно до того, як фаундер відкриває новий бізнес.

Засновник не скований спадщиною минулого і може вільно експериментувати з параметрами ком’юніті, яке згодом може стати мережевою державою.

У чому фундаментальні засади мережевої держави?

За визначенням Срінівасана, Network State — це «соціальна мережа, що пропонує моральну інновацію, має почуття колективної самосвідомості, яка має визнаний засновник, здатність до колективної дії, певний рівень коректності в міжособистісній взаємодії, інтегрована криптовалюта, уряд, заснований на консенсусі смарт-контрактами, що має у розпорядженні архіпелаг фізичних територій, віртуальний капітал, що проводить ончейн-перепис населення, який показує, що мережева держава має достатню кількість людей, землі та достатку, щоб досягти певного дипломатичного визнання».

Під ключовими пунктами цього визначення автор має на увазі наступне:

  • моральна інновація – етична ідея, яку поділяють усі громадяни (netizens) мережевої держави. Вона має бути коротко виражена за допомогою «Однієї заповіді» – формули, яку поділяють усі учасники;
  • засновник пропонує бачення мережевої держави та має ексклюзивне право приймати рішення щодо розвитку проекту;
  • криптовалюта забезпечує економічне функціонування, дозволяє вести облік та ідентифікацію мешканців, проводити голосування та брати участь у краудфандингових кампаніях;
  • земля – ​​власність мережевої держави у фізичному світі, яка перебуває у користуванні її членів. Вона може бути розподілена по всьому світу;
  • дипломатичне визнання відрізняє мережеву державу з інших можливих видів організації співтовариств.

Також Срінівасан розрізняє поняття «стартап-суспільства», «мережевого союзу», «мережевого архіпелагу» та «мережевої держави».

  • стартап-суспільство — це суспільство, засноване фаундером і об’єднане однією ідеєю, що існує в мережі та робить колективні дії на основі своїх цінностей;
  • мережевий союз – це стартап-суспільство, що вже досягло зрілості, що володіє внутрішньою економікою, заснованої на блокчейні, з великою кількістю членів. Мережеві спілки здатні відстоювати свої інтереси перед традиційними державами та великими корпораціями;
  • мережевий архіпелаг – мережевий союз, що володіє фізичними активами: землею, власністю тощо;
  • мережна держава — це мережевий союз, який досяг певного дипломатичного визнання та політичного суверенітету.

Стартап-суспільству не обов’язково еволюціонувати у повноцінну мережеву державу, подібно до того, як новий бізнес може не мати амбіцій перетворитися на глобальну корпорацію.

У чому полягає «Одна заповідь»?

Моральна інновація — базовий пункт, навколо якого будуються всі перелічені об’єднання. Вона згуртовує членів спільноти, дає їм загальну ідентичність та мету для колективних дій. «Одна заповідь» може стосуватися бажаного способу життя, наприклад: «Віганство — найбільш корисна та етично прийнятна дієта для людини», або ціннісних положень: «Культура скасування шкодить суспільству».

Члени ком’юніті скоординовано діють як онлайн, так і офлайн, виходячи з «Однієї заповіді». Наприклад, учасники веганського стартап-товариства можуть розповсюджувати матеріали про користь відмови від продуктів тваринного походження або відкрити свій ресторан, а члени товариства проти культури відміни — шукати роботу людям, звільненим внаслідок травлення.

Навіщо мережевій державі земля?

Cloud first, land next (but not land never) — принцип, згідно з яким стартап-товариства, перш ніж купувати землю та інші нецифрові активи, повинні організуватися онлайн. З мережевих комунікацій та колективної практики вони зможуть виробити етичні правила та самосвідомість приналежності до спільноти, а також розробити блокчейн-архітектуру для самоврядування та прийняття рішень.

Придбання землі потрібне для спільного проживання та відкриття бізнесів. На першому етапі Срінівасан рекомендує купувати ділянки поза великими містами у місцях, якими не зацікавлені корпорації та держави.

Придбані стартап-товариством території об’єднуються в архіпелаг за допомогою мережі.

Яку роль тут відведено блокчейну?

Блокчейн – основна інфраструктура мережевої держави, що дозволяє учасникам засвідчувати особистість, володіти та обмінюватися цифровими активами, приймати управлінські рішення, реєструвати право власності, вступати у правові відносини з іншими громадянами, укладати шлюби тощо.

Усі взаємодії netizens, записані в блокчейн, дозволять завжди мати актуальні статистичні дані про стан держави. Роль законів у Network State гратимуть консенсуально прийняті смарт-контракти.

Срінівасан допускає появу інституту множинного громадянства: використовуючи Web3 -логін, людина зможе брати участь у житті відразу кількох мережевих держав.

Одна з найважливіших ідей Network State — ончейн-запис усіх значних верифікованих подій (the ledger of record — реєстр запису), історія, що «доводиться», яка дозволить уникнути маніпуляції минулим, а також бачити траєкторію розвитку держави.

Чим Network State відрізняється від попередніх утопій?

За словами соціолога Павла Степанцова, гіпотетичний проект Баладжі Срінівасана можна поставити в низку сучасних техноутопій — способу проблематизації суспільних відносин, що виникає з уваги до нових технологій організації, спостереження та роблення видимими членами спільноти.

На відміну від великих проектів XX століття — анархізму та комунізму, в яких технології відіграють роль інструмента для досягнення політичної мети, у цих утопіях техніка розуміється як «форма життя». Соціальні відносини для них похідні від інновацій. Техніка формує нові форми суспільних взаємодій.

«Часто Срінівасана вважають послідовником лібертаріанства, але це не зовсім так. Лібертаріанство засноване на філософії утилітаризму: якщо ми досягнемо оптимального економічного стану, то соціальна складова піде за нею. Проект Срінівасана підкреслює важливість норм комунікації та морального підґрунтя людських спільностей. Він більш соціологічний і нагадує теоретизування соціолога Норберта Еліаса, який припускав, що надіндивідуальні структури утворюються із взаємодії людей і відтворюють себе за рахунок створення моральних і цінностей», — пояснює експерт.

За що критикують Network State?

Співзасновник Ethereum Віталік Бутерін у статті «Що я думаю про мережеву державу» виділив кілька пунктів, «з якими має проблеми»:

  • керівна роль засновника. Централізація та одноосібне ухвалення рішень добре підходять для невеликих стартапів, але при масштабуванні може виникнути проблема асиметрії влади, і рішення засновника можуть сковувати розвиток цифрових держав;
  • недоступність людям без великого достатку. Ця концепція добре підходить для громадян розвинених країн, які можуть вибрати собі юрисдикцію для життя, але більшість громадян третього світу не зможуть повноцінно брати участь у мережній державі — вони обмежені у свободі вибору юрисдикцій і не можуть переміщатися між анклавами;
  • недостатність «стратегії виходу» на вирішення глобальних політичних проблем. «Вихід» — неучасть у політичному житті, у тому числі через еміграцію. Вільні держави дозволять своїм громадянам залишати їхні юрисдикції, тоді як авторитарні закриватимуть кордони та перешкоджатимуть утворенню паралельних громад усередині своїх кордонів;
  • Проблема негативних екстерналій. “Гіпотеза вразливого світу” передбачає, що науковий прогрес збільшує доступ до руйнівних технологій для всіх. Тому для запобігання загрозам необхідні заходи авторитарного характеру. Дерегульований світ мережевих держав збільшує шанси настання техногенної катастрофи.

Джерело

bindActionCreators – маленька утиліта, що вирішує проблеми.

redux Бібліотеки reduxабо@reduxjs/toolkit надають велику кількість корисних утиліт, у цій статті я розповім про одну з них – bindActionCreators

Одна з проблем, що переслідує майже всіх, хто використовує вищезгадані бібліотеки – неможливість використання action(), попередньо не обернувши його в dispatch(). Це породжує велику кількість безглуздого коду:

const dispatch = useDispatch()

const handleReset = (id: number) => dispatch(actionReset(id))

Як використовувати bindActionCreators?

Спочатку розберемося з аргументами:bindActionCreators(actionCreators, dispatch)

  • actionCreators– об’єкт виду{ actionName: ActionDefinition }
  • dispatch– відповідно dispatchз useDispatch()абоstore

Далі розберемо два способи використання за вищезгаданими методами одержанняdispatch

Хук useDispatchedActions і useDispatch

const useDispatchedActions = (actionCreators) => {
  const dispatch = useDispatch()
  return bindActionCreators(actionCreators, dispatch)
}

Або в один рядок:

const useDispatchedActions = (actionCreators) => bindActionCreators(actionsCreators, useDispatch())

Також приклад цього хук на TypeScript з прикладом типів

type Store = typeof store
type AppDispatch = typeof Store['dispatch']

type BoundAsyncThunk<Actionы extends ActionCreator<any>> = (
  ...args: Parameters<Action>
) => ReturnType<ReturnType<Action>>

type BoundActions<Actions extends ActionCreatorsMapObject> = {
  [key in keyof Actions]: Actions[key] extends AsyncThunk<any, any, any>
    ? BoundAsyncThunk<Actions[key]>
    : Actions[key]
}

const useDispatchedActions = <Actions extends ActionCreatorsMapObject = ActionCreatorsMapObject> (
  actions: Actions,
): BoundActions<Actions> => {
  const dispatch = useDispatch<AppDispatch>()

  return bindActionCreators(actions, dispatch), [actions, dispatch]
}

Власна утиліта та store.dispatch

const getDispatchedActions = (actionsCreators) => bindActionCreators(actionsCreators, store.dispatch)

Результат же – той самий об’єкт, який ми передавали в аргумент з однією відзнакою – ці екшени ми можемо використовувати без необхідності обертати їх викликdispatch()

Я б рекомендував вам використовувати другий метод використання bindActionCreatorsз двох причин:

  • Метод універсальніший, не змушує вас використовувати його тільки в інших хуках чи компонентах
  • Якщо ви будете використовувати хук useDispatchedActions, вам необхідно враховувати, що екшени, які ви отримуватимете з хука і використовуватимете в компонентах, eslintвимагатиме додати їх залежно від інших Reactхуків. А це може призвести до несподіваних помилок (наприклад, до нескінченних викликів useEffect).

Джерело

Що таке абстракція облікового запису?

абстракція облікового запису

  • Aбстракція облікового запису (АОЗ) — технологія, здатна розширити можливості криптогаманців, підвищити їхню безпеку, покращити користувальницький досвід.
  • Концепцію АОЗ реалізує стандарт ERC-4337, активований у березні. Він дозволяє перетворювати гаманці користувачів на облікові записи смарт-контрактів.
  • Багато розробників переконані, що повсюдне впровадження нової технології прискорить перехід від Web 2.0 до Web3 і залучить “мільярди” користувачів Ethereum.

Що таке абстракція облікового запису?

Абстракція облікового запису – це метод налаштування блокчейн-мережі, при якому активи користувачів зберігаються виключно у смарт-контрактах, а не у зовнішніх облікових записах (External Owned Accounts, EOA). При використанні цього підходу криптогаманець перетворюється на унікальний смарт-контракт, який можна програмувати для різних цілей.

У березні 2023 року розробники Ethereum через смарт-контракт під назвою EntryPoint активували стандарт ERC-4337, який реалізує концепцію абстракції облікового запису та сумісний з усіма EVM-мережами на кшталт Polygon, Optimism, Arbitrum, BNB Smart Chain, Avalanche та Gnosis Chain. Рішення пройшло аудит Open Zeppelin.

ERC-4337 дозволяє перетворювати гаманці користувачів на облікові записи смарт-контрактів, щоб зробити адреси Ethereum зручнішими і запобігти втраті ключів.

Цей стандарт працює над наявною системою, для його повноцінного використання не потрібні суттєві зміни блокчейн-інфраструктури.

У криптоспільноті переконані, що система EOA обмежує можливості взаємодії користувачів із Ethereum. Зокрема, зовнішні облікові записи ускладнюють батчинг транзакцій. Також учасникам екосистеми необхідно зберігати на гаманці деяку кількість ETH для покриття витрат на газ при здійсненні транзакцій.

АОЗ – шлях до вирішення цих та багатьох інших проблем. Даний метод підвищує безпеку облікових записів користувачів, покращує користувальницький досвід і відкриває багато нових опцій для розробників.

Як працює АОЗ?

Згідно з документацією до ERC-4337, ключовими елементами АОЗ є:

  • UserOperation;
  • Пакувальник (Bundler);
  • Відправник (Sender);
  • EntryPoint;
  • Скарбник (Paymaster);
  • Агрегатор (Aggregator).

Всі ці елементи взаємодіють між собою, відкриваючи можливість Web3-розробникам створювати гаманці на основі смарт-контрактів та сумісні з новою системою dapps.

UserOperation – структура, яка характеризує операцію, що здійснюється користувачем. Так само, як і звичайна транзакція, вона містить параметри: sender, to, calldata, maxFeePerGas, maxPriorityFee, signature, nonce. Але є й додаткові елементи на зразок EntryPoint, Bundler та Aggregator.

Крім того, UserOperations відправляються в окремий мемпул. Там пакувальники можуть «загортати» їх у транзакції перед наступним включенням до блоку.

Ще одна “фішка” UserOperations – програмована автентифікація транзакцій.

Пакувальник моніторить альтернативний мемпул, спеціально створений для UserOperations. Він об’єднує кілька операцій користувача в одну транзакцію і відправляє її в контракт EntryPoint. Bundlers отримують винагороду за це, стягуючи частину плати за газ.

Пакувальники є критично важливим елементом інфраструктури в контексті ERC-4337. У заснованій на АОЗ екосистемі вони єдині учасники, яким необхідні зовнішні облікові записи.

EntryPoint — спеціальний контракт для верифікації та подальшої обробки UserOperations, що одержуються від пакувальників.

В ході процесу верифікації EntryPoint перевіряє, чи достатньо гаманця коштів для оплати газу. У процесі виконання операції контракт звертається до облікового запису через дані calldata, які визначені за допомогою UserOperation. Також EntryPoint стягує кошти з облікового запису на базі смарт-контрактів, щоб виділити Пакувальнику коректну кількість ETH для оплати газу.

Скарбник – смарт-контракт на основі ERC-4337, який реалізує різні підходи до використання газу. Він надає гнучкість використанню ресурсів, усуваючи необхідність зберігання нативних токенів на оплату транзакційних комісій.

Наприклад, учасники екосистеми можуть покривати витрати на газ не за допомогою ETH, а стейблкоінами на кшталт USDC або USDT. Крім того, з’являється можливість спонсорування оплати трансакційних комісій користувачів.

Агрегатор – Допоміжний контракт, призначений для валідації агрегованих підписів. Оптимізована обробка безлічі «пакетованих» UserOperations допомагає заощадити ресурси при взаємодії з даними calldata.

ERC-4337 створено на основі попередніх EIP – 2938 і 3074 . У першому сформульовано ідею про те, щоб смарт-контракти функціонували як «аккаунт вищого рівня, який оплачує комісії та ініціює виконання транзакції». Один із авторів EIP-2938 – співзасновник Ethereum Віталік Бутерін.

У EIP-3074 представлено ідею «делегування контролю над EOA смарт-контракту».

EIP-4337 поєднує основні тези попередніх EIP, але з додаванням альтернативного мемпулу. Використання нового стандарту не потребує внесення змін до рівня консенсусу.

Які можливості відкриває АОЗ?

Віталік Бутерін бачить в абстракції облікового запису каталізатор, який може залучити мільярд користувачів до мережі Ethereum.

За його словами, інтеграція технології дасть змогу оплачувати комісії не лише за допомогою ETH, а й іншими монетами, які перекладає користувач. Крім того, розширення дозволить децентралізованим програмам «спонсувати» транзакції для своїх клієнтів.

Завдяки технології «абстракції сигнатур» розробники роліпів зможуть компілювати підписи, що значно зменшить витрати на газ.

Інші переваги:

  • нові можливості забезпечення безпеки;
  • опції відновлення облікового запису у разі втрати ключів;
  • об’єднання транзакцій (наприклад, схвалення та виконання обмінної операції в один клік);
  • широкі можливості щодо покращення користувальницького досвіду для розробників гаманців та додатків;
  • заплановані та пакетні транзакцій;
  • оплата газу стейблкоінами;
  • альтернативні схеми підписів;
  • автоматизація операцій: ребалансування портфелів, реалізація стратегії усереднення доларової вартості.

Однак є деякі труднощі на шляху реалізації АОЗ. Так, після перетворення всіх облікових записів користувачів на смарт-контракти функція повинна справно працювати в мережах другого рівня. Бутерин також допустив виникнення проблем при інтеграції з біометричними технологіями та гаманцями.

Як АОЗ підвищує безпеку гаманців?

В даний час збереження коштів залежить від надійності зберігання приватних ключів і тісно пов’язаних з ними сид-фраз. Будь-хто, хто отримує доступ до цих цінних даних, по суті стає власником криптоактивів.

Це означає, що у разі втрати приватного ключа назавжди втрачається контроль над цифровими активами — вони або переходять до іншого, або заморожуються назавжди. Не дивно, що в мережі поширений фішинг, націлений на чужі сід-фрази.

Абстракція облікового запису вирішує цю проблему за допомогою використання смарт-контрактів для зберігання активів та авторизації транзакцій, також покращуючи користувальницький досвід.

Наприклад, з’являється можливість створення резервних ключів у разі втрати основних. Крім того, зберігання даних гаманця можна делегувати довіреним особам. При такому підході потенційному зловмиснику набагато складніше отримати повний контроль над засобами користувача.

Завдяки АОЗ можна зробити і так, щоб невеликі транзакції верифікувалися одним підписом, а великі — кількома.

Також смарт-гаманці надають можливості:

  • створення «білого списку» довірених адрес-отримувачів криптовалюти (це також може убезпечити кошти при крадіжці приватного ключа);
  • заморожування облікового запису з іншого авторизованого девайса у разі втрати основного пристрою для зберігання цифрових активів;
  • додавання попередньо затверджених облікових записів, які можуть авторизувати нові пристрої при втраті девайса або пароля («соціальне відновлення»);
  • запровадження добових, тижневих чи місячних лімітів на обсяг переказів з облікового запису.

Як АОЗ покращує користувальницький досвід?

Абстракція облікового запису передбачає підтримку гаманців на основі смарт-контрактів на рівні протоколу. Це відкриває розробникам простір для експериментів з досвідом користувача (UX).

Одне з найбільш очевидних покращень UX – групування транзакцій для підвищення швидкості та ефективності операцій. Завдяки цьому обмін токенів на DEX можна буде робити в один клік разом зі схваленням витрачання активів.

Користувачам не потрібно турбуватися про достатню кількість ETH для оплати газу. При потребі сам смарт-контракт обміняє токени на ефір, використовуючи останній для оплати транзакційних комісій.

АОЗ також відкриває можливість довірених сесій. Це може стати в нагоді в ігрових додатках, де доцільно схвалення великої кількості дрібних транзакцій на короткий час.

Абстракція облікового запису може оптимізувати процес купівлі різних товарів, зробивши його подібною до взаємодії з традиційними маркетплейсами. Користувач зможе заповнити «кошик» потрібними предметами та придбати все одразу в один клік — проміжні транзакції та схвалення опрацює смарт-контракт.

На якому етапі зараз використання АОЗ?

В даний час активно розробляються гаманці на базі смарт-контрактів. У нових рішеннях зроблено акцент на безпеці та поліпшенні користувальницького досвіду.

На початку березня розробники платформи для управління цифровими активами Safe (раніше Gnosis Safe) представили SDK, яка вже доступна для використання в різних мережах.

Розробка під назвою Safe{Core} дозволяє використовувати АОЗ як альтернативу традиційним криптогаманцям із закритим та відкритим ключами.

Інструмент створений у співпраці з платіжним гігантом Stripe, а також провайдерами Web3-інфраструктури Gelato та Web3Auth.

«Абстракція облікового запису є ключем до залучення мільйонів нових користувачів. Вона покликана зробити використання Web3 таким самим зручним, як і Web 2.0», — заявив співзасновник Safe Річард Мейснер.

У липні проект інтегрував ERC-4337 у стек абстракції облікових записів для розробників Safe{Core} версії 1.4.1.

«ERC-4337 пропонує більш простий інтерфейс користувача, включаючи такі можливості, як вхід до системи без заповнення, соціальне відновлення, пакетні транзакції, налаштування гібридного зберігання та багато іншого», — зазначили представники Safe.

Джерело

TypeScript 5.2: Нове ключове слово: ‘using’

TypeScript using

У TypeScript 5.2 з’явиться нове ключове слово ‘using’, яке можна буде використовувати для утилізації чогось за допомогою функції Symbol.dispose, коли воно залишає область видимості.

{
  const getResource = () => {
    return {
      [Symbol.dispose]: () => {
        console.log('Hooray!')
      }
    }
  }
  using resource = getResource();
} // 'Hooray!

Він заснований на пропозиції TC39, яка нещодавно досягла третьої стадії (з чотирьох) у своєму просуванні до JavaScript. Це означає, що воно готове для тестування ранніми користувачами.

usingбуде надзвичайно корисним для управління такими ресурсами, як обробник файлів, з’єднання з базами даних і т.д.

Symbol.dispose

Symbol.dispose – це новий глобальний символ JavaScript. Все, що має функцію, призначену Symbol.dispose, буде вважатися “ресурсом” – ” об’єктом з певним часом життя ” – і може бути використане з ключовим словом using.

const resource = {
  [Symbol.dispose]: () => {
    console.log("Hooray!");
  },
};

await using

Для роботи з ресурсами, які необхідно утилізувати асинхронно, також можна використовувати Symbol.asyncDisposeі await.

const getResource = () => ({
  [Symbol.asyncDispose]: async () => {
    await someAsyncFunc();
  },
});
{
  await using resource = getResource();
}

В результаті перед продовженням програми очікується функція Symbol.asyncDispose.

Це буде корисним для таких ресурсів, як з’єднання з базами даних, коли необхідно переконатися, що з’єднання закрито до продовження роботи програми.

Приклади використання

Керування файлами

Доступ до файлової системи через файлові обробники в node може бути значно простіше using.

Без using:

import { open } from "node:fs/promises";
let filehandle;
try {
  filehandle = await open("thefile.txt", "r");
} finally {
  await filehandle?.close();
}

З використанням using:

import { open } from "node:fs/promises";
const getFileHandle = async (path: string) => {
  const filehandle = await open(path, "r");
  return {
    filehandle,
    [Symbol.asyncDispose]: async () => {
      await filehandle.close();
    },
  };
};
{
  await using file = await getFileHandle("thefile.txt");
  // щось робим з file.filehandle
} // автоматично утілізован!

З’єднання з базою даних

Управління з’єднаннями з базами даних – один із найпоширеніших варіантів використання в C#.

Без using:

const connection = await getDb();
try {
  // щось робим з connections
} finally {
  await connection.close();
}

З використанням using:

const getConnection = async () => {
  const connection = await getDb();
  return {
    connection,
    [Symbol.asyncDispose]: async () => {
      await connection.close();
    },
  };
};
{
  await using db = await getConnection();
  // щось робим з db.connection
} // автоматично закрито!

Переклад статті TypeScript 5.2’s New Keyword: ‘using’

Догляд за моїм BMW X5 e53

Вирішив зробити невеличке прибирання в салоні мого малого (BMW X5 e53) 🙂

А також виправити невеличкі косяки на ляді.  Попиловисив, повитирав шкіру серветками.

Потім ще поїхав на мийку самообслуговування.

Дуже цікаво провів час зі своєю улюбленою машинкою.