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

Володимир Агафонкін — опенсорс-розробник, що підтримує понад 40 проєктів з відкритим кодом. Зокрема він автор бібліотеки Leaflet, яка стала стандартом у вебкартографії. Близько 10 років Володимир працює інженером у Mapbox, одному з провідних постачальників онлайн-мап. 2013 року айтівець уже давав інтерв’ю DOU, де розповів про початок своєї кар’єри та створення Leaflet. Ми вирішили записати нову розмову й дізнатися про подальшу долю бібліотеки, кар’єру в Mapbox та роботу над алгоритмічними рішеннями.

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

«У зрілішому віці ви не підете на ризик — прямо не послухати, що сказало керівництво». Про бібліотеку Leaflet

Я виріс у сім’ї інженерів, і любов до технічних наук мені передалася від батьків. Змалечку я відвідував комп’ютерний гурток, де для нас відкрили програмування в Delphi — це мене надзвичайно захопило. А одного дня мама розповіла, що чула про хлопця, який заробляє в США програмістом $10 000 на місяць — абсолютно неосяжну для дитячого розуму суму. Тоді я усвідомив: те, що в мене викликає захват і ентузіазм, може стати професією мрії.

Мене завжди приваблювало програмування чогось візуального. У старших класах я розробляв на C++ фізичний 2D-рушій. Кулі різних мас літали по екрану та зіштовхувались, як у більярді. Дуже цікаво, коли те, що створюєте в коді, потім можна побачити, а надто коли це ще й красиво. Тому коли пізніше, 2008-го у віці 22 років, отримав можливість працювати над мапами, це визначило мою подальшу кар’єру.

Тоді в компанію Cogniance, на яку я працював, прийшов новий клієнт — CloudMade. Ще до знайомства з ними я створив прототип бібліотеки для мап, бо тогочасна бібліотека OpenLayers жахала своєю складністю й повільністю. Тоді я ще нічого не знав про мапи і що має бути в картографічній бібліотеці. Думав, що мапи — це просто картинки, які завантажуєте у віконечко і рухаєте туди-сюди, а виявилось, що є «монстр» із сотнями складних функцій та форматів. Тому мені хотілося написати швидке й легке рішення.

Один з головних розробників OpenLayers сказав, що моя ідея ідіотська

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

Це був юнацький максималізм. У зрілішому віці не підете на такий ризик — прямо не послухати, що вам сказало керівництво. Коли я презентував продукт, клієнти дивувалися: чому бібліотека працює настільки швидко і як мені вдалося це зробити? Тоді я зізнався, що не послухав їх і підготував щось своє. Пам’ятаю, як сидів у мітинг-румі й, затинаючись, виправдовувався перед замовниками на той час ще не надто хорошою англійською. Та моє рішення розцінили як можливу конкурентну перевагу, до того ж відзначили ентузіазм — розробку схвалили. Пізніше CloudMade погодилася випустити бібліотеку в опенсорс. Так з’явилася Leaflet.

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

Зберігаючи свої сильні сторони, OpenLayers урешті-решт трансформувалася — і, зокрема, завдяки Leaflet, хоча спочатку була антагоністом. Ще раніше я поділився своєю ідеєю створити просту альтернативу для мап у якомусь чаті OpenStreetMap. Мені відповів один з головних розробників OpenLayers, що ідея ідіотська. Мовляв, навіщо розпилятись? Чому б не допомогти покращити вже готове рішення? А в підсумку OpenLayers сама трансформувалася завдяки цим новим ідеям. Конкуренція позитивно впливає на екосистему загалом.

Мені було дуже приємно, коли 2021 року NASA використало Leaflet для відображення шляху марсохода Perseverance на своєму сайті. Я дізнався про це з твіттеру, але не був надто здивований. Leaflet — проста бібліотека, яку лише використали на сайті. Однак дратувало, коли українські ЗМІ роздували подію ледь не до того, що українець сам відправив цей марсохід на Марс. З часом перестаєш сприймати визнання бібліотеки як свій здобуток, оскільки це все-таки суспільний проєкт. А останні шість-сім років він узагалі здебільшого розвивався силами спільноти практично без моєї участі. Те, що я колись дав проєкту поштовх, не означає, що я можу присвоювати його заслуги. Це здобуток спільноти.

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

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

«Компанія дотримувалася політики „все — в опенсорс“». Про кар’єру в Mapbox

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

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

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

Якщо треба візуалізувати мільйон точок чи сотні тисяч полігонів, з простими технологіями це складно зробити. А от з векторними даними, які малюють на стороні браузера з WebGL, можливості незрівнянно більші. Можна міняти будь-який елемент мапи в реальному часі, наприклад, підсвітити дорогу чи будівлю. Можна змінювати кольори залежно від контексту. Додавати будь-які дані між будь-якими шарами мапи — під та поверх. І відмальовувати великі масиви даних.

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

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

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

Але в якийсь момент вона стала занадто успішною і на неї почали звертати увагу технологічні гіганти, як-от Microsoft і Amazon. Вони подивились і вирішили: «А чому б нам не взяти весь цей опенсорс-стек, який створила Mapbox, розгорнути його в себе, але продавати набагато дешевше?» Ресурси гігантів практично необмежені, тому вони можуть собі це дозволити. Так працює бізнес. Якщо ви можете взяти щось безплатно й на цьому заробити, то ви це робите, інакше хтось інший зробить це за вас.

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

Опенсорс — це чудово, але складно побудувати бізнес суто на технологіях з відкритим кодом. Зараз це болюча тема для багатьох опенсорс-розробників. Є немало аналогічних історій. Наприклад, з Elasticsearch або Redis усе починалося так само ідеалістично, а потім приходили техгіганти й казали: «А тепер ми будемо продавати те саме, а ви втрачаєте роботу». Деяким компаніям вдається знайти збалансовану проміжну модель, де щось є опенсорсним, а те, за що платять люди, не можна взяти й просто так відтворити.

Урешті-решт Mapbox ухвалила рішення закривати основні продукти. Зокрема, бібліотека Mapbox GL JS, яка є основним продуктом векторного рендерингу мап, після виходу другої версії 2020 року стала закритою. Тепер практично вся розробка переведена в закритий режим, хоча безліч допоміжних проєктів залишаються опенсорсними. Це стосується і алгоритмічних бібліотек, які я створював для Mapbox GL JS, але які можуть бути самодостатньо використані в інших проєктах.

За 10 років, що я працюю в Mapbox, компанія повністю змінилась. Сьогодні весь колектив налічує близько 500 людей. Панує традиційніший лад. Є ієрархія, менеджери, менеджери менеджерів, бюрократія. Але з усіма цими трансформаціями компанія все одно працює над надзвичайно цікавими технологіями. Мапи — це така сфера, де можна нескінченно знаходити собі нові завдання. Тут не вирішено ще багато питань, а значить, можна видумувати інновації.

«Мене переслідують трикутники». Про улюблену бібліотеку

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

Дуже люблю працювати над алгоритмами. Люблю, коли завдання можна ізолювати й обмежити в масштабі. Коли є конкретні вхідні й вихідні дані й зосереджуєшся на маленькому компоненті, щоб зробити його найкращим — найшвидшим і найбільш елегантно написаним. Я отримую задоволення, коли беру маленьке завдання і стараюся виконати краще за інших. Такі бібліотеки я досі розвиваю. І хоча вони всі написані на JavaScript, хороші інженерні підходи однаково добре працюють незалежно від мови програмування, тому багато з цих проєктів спільнота портує на інші мови: C++, Rust, Go, Dart, Swift, C#, Python.

Наприклад, я випустив не один проєкт так званих просторових індексів. Це структура даних для геометричних чи географічних об’єктів. Ви можете запхати мільйон точок чи ліній в одну структуру даних і потім дуже швидко щось шукати. Знайти найближчі 10 обʼєктів чи всі об’єкти в певному регіоні. Серед таких проєктів, наприклад, rbush, flatbush, kdbush.

З другої спроби вдалося написати бібліотеку earcut

Було і таке завдання: певний полігон, тобто ламану замкнуту лінію, треба розділити на трикутники. Звучить просто, а алгоритмічно виявилося дуже складно. Я провів не одну безсонну ніч, думаючи над рішенням. З другої спроби вдалося написати бібліотеку earcut. Її перевагою є швидкодія, і вона є одним з тих елементів, які роблять Mapbox GL JS настільки швидкою. Mapbox GL JS містить багато алгоритмічних компонентів, потрібних для малювання великих векторних даних у браузері. У кожен з цих компонентів було вкладено максимум зусиль, щоб зробити його швидким. Це стосується і тріангуляції, як у випадку earcut, і обробки просторових даних для оптимізації під різні масштаби (бібліотека geojson-vt), і кластеризації, тобто об’єднання в групи, об’єктів (бібліотека supercluster).

Коли ми активно розробляли для Mapbox GL JS відображення 3D-ландшафтів, народилася бібліотека MARTINI. Оскільки інформацію про рельєф браузер отримує у вигляді растрових даних, постало питання, як це перетворити на 3D-рельєф і спроєктувати на нього всі інші мальовані дані: дороги, будівлі тощо. Це було складне технічне завдання. Цей код урешті не потрапив у продукт — ми розв’язали питання в інший спосіб, але на основі цього експерименту вийшла хороша інтерактивна стаття.

Такі експерименти, навіть якщо їх потім не використовують, допомагають розвивати мислення, вміння програмувати та пояснювати іншим, як працює складна система. Якщо ж говорити про назву MARTINI, вона легко пояснюється. Рішення базувалося на науковій статті про RTIN (Right-Triangulated Irregular Network) — так називається трикутна модель ландшафту, яку генерує ця бібліотека. Отож я намагався знайти співзвучне слово. Зрештою цей алгоритм ми застосували, але в неочевидному місці — для трансформації растрових даних у динамічних картографічних проєкціях.

Мене переслідують трикутники. Одна з улюблених бібліотек називається delaunator і призначена для тріангуляції Делоне, тобто об’єднання масиву точок у мережу трикутників. Це одна з базових задач обчислювальної геометрії, яку застосовують у багатьох алгоритмах для мап. Мені вдалося створити бібліотеку, яка надзвичайно швидко робить цю тріангуляцію. Я вивчав різні статті, де науковці винаходять алгоритми для подібних задач. Але одна річ винайти алгоритм, а інша — обережно й красиво його реалізувати, щоб це було дійсно швидко. Бібліотеку delaunator зараз використовують у D3, найвідомішому проєкті з візуалізації даних. Цією бібліотекою можу справді пишатися.

Так виглядає тріангуляція Делоне. Джерело ілюстрації

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

«Буває важко, коли робота мрії поглинається сірою рутиною та корпоративною бюрократією». Про досвід вигоряння і власний гурт «Обійми Дощу»

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

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

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

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

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

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

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

Окрім цього, за всякої нагоди допомагаю військовим з картографічними завданнями. У цифрових системах, якими різні підрозділи ЗСУ послуговуються для планування операцій, розвідки, збору й аналізу даних, інтерактивна мапа часто є ключовим елементом. Й у цих системах активно використовуються і Leaflet, і Mapbox GL JS або його опенсорс-форк Maplibre, тому до мене нерідко звертаються військові по консультації. Дуже тішить, коли вдається допомогти із завданням, пов’язаним з мапами, або вказати правильний напрям рішення. Поки ти не служиш, психологічно важливо відчувати себе корисним хоча б у чомусь.

Похожие статьи:
Що писати, як структурувати думку і кому надсилати листа? Якщо ви коли-небудь ставили собі ці питання перед тим, як взятися...
Image via Shutterstock.Создание эффективных Use Cases (далее используется термины «варианты использования», «сценарии», «юзкейсы») — must...
З 14 вересня чоловікам-студентам іноземних вишів не можна виїжджати на навчання за кордон. DOU зібрав основні факти,...
До вашої уваги дайджест навчальних програм для тих, хто починає свою кар’єру в ІТ. У цьому номері зібрані...
232-й выпуск подкаста «Откровенно про IT карьеризм». В подкасте пойдет речь о Data Science, карьере, Львове...
Яндекс.Метрика