🔥

Тред (@chicoxyzzy-2)


Следующий этап карьеры и коммьюнити-движух для меня стал определяющим, поэтому даже начну новый тред 🙂 Во время поиска работы я пересмотрел огромное количество вакансий, но почти все они казались какими-то совсем неинтересными. Но одна меня очень сильно заинтересовала.

Там было очень расплывчато, но очень интересно написано, что нужно будет заниматься написанием некоего SDK для потокового стриминга видео. На собеседовании мой будущий руководитель скажет, что это как бы и не фронт, и не бэк, что немного озадачило меня, но стало ещё интереснее.

Тогда только начал набирать популярность React, но уже тогда было понятно, что сфера применения подхода гораздо шире. Уже в 2013 существовали кастомны разные рендереры для реакта, например в canvas (и вроде даже pinterest его использовал некоторое время?).

Нашим продуктом была платформа для видео стриминга и приложений поверх него. Разные команды делали SDK для разных языков программирования, моя — для JavaScript. Но JavaScrip этот запускался не в браузере или Node.js, а в отдельном JS движке, который был приделан к рендереру.

Так как нет ничего кроме JS-движка, то выходит, что HTML и CSS тоже нет. Как же тогда сделать разработку приложений на таком SDK близкой и понятной фронтенд-разработчику? У нас были только биндинги из JS в рендер-движок, чтобы рисовать примитивы — фигуры, медиа контент и текст

Императивно писать это все, конечно, жутко неудобно. Но вспоминаем про кастомные рендереры Реакта. JSX — это почти HTML и описывать интерфейсы в нём довольно удобно. Отлично. Но как перевести JSX в пиксели в нашем рендер-движке? Нужны системы лейаута.

Очевидно, что хотелось бы иметь системы, максимально похожие на то, что мы имеем в CSS. Так было решено сделать реализацию лейаут системы прямо на JS внутри нашего SDK.

Если Вы заметили сходство с React Native, то да, так и есть, очень похоже :) Кстати, отмечу, что это 2013 год, а публичный релиз React Native состоится только в 2015. И даже Flux еще не был анонсирован, и каждый по-своему реализовывал работу с состоянием реакт приложений.

Итак, про CSS. На самом деле это забавно, но я не умею верстать. Иногда приходится, но делаю я это крайне отвратительно и гуглю каждый раз когда надо отцентрировать div. Но ирония в том, что я частично реализовал спецификации CSS, чтобы другие могли на этом верстать.

Да, мы взяли не сам реакт, т.к. там было бы много лишнего, а у нас сильные ограничения по объему и памяти, а также из-за мутной лицензии, которая была тогда у реакта (а точнее мутный файлик PATENT, который годы спустя будет удалён из репозитория и лицензия станет более свободной)

В общем, это был такой скорее Preact. Получилось очень здорово, и разработка приложений с таким SDK практически не отличалась от разработки в настоящем браузере, даже хот-релод можно реализовать! Но можно сделать ещё лучше.

Мы можем при разработке открыть видео поток в браузере, но это ведь не настоящий DOM, и инструменты разработки браузера никак не помогают, а консоль не связана со средой исполнения. Но ведь их можно связать! У хромиумов ведь есть DevTools протокол!

В качестве JS-движка изначально использовался SpiderMonkey, у которого, на мой взгляд, биндинги к хосту реализованы проще, чем у всех остальных, да и документированы лучше всех. Но V8 тогда сильно выигрывал в производительности, а также нам хочется девтулс протокол

Миграция со SpiderMonkey в V8 была непростой, но и делалась, к счастью не мной 😄. Надо сказать, что у V8 биндинги могут просто ломаться в каждой версии, и потом не факт что можно будет просто взять и обновить.

Так как жить хочется интересно, то забацали свой сервер для связи консоли и хоста по CDP на эрланге, а заодно что-то там зафигачили на Go и Rust. Добавим к этому готовый тулинг, кодогенерацию, готовые различные компоненты на разные случаи жизни и получаем офигенную платформу.

Короче, не работа, а мечта — трогаешь всякие низкоуровневые штуки, чтобы сделать высокоуровневые штуки, которые потом будут использоваться другими разработчиками. А благодарности от них за улучшения в новых релизах — это просто кайф. Тулинг, спеки — все самое любимое.

На этой работе требовалось много смотреть вокруг, анализировать, рисёчить, а с этим у меня как-то всегда получалось. Я читаю огромное количество всяких источников и зачитываю до дыр гитхаб, поэтому могу узнать что-то важное быстро.

Ну и я постоянно рассказывал коллегам все новости. Потом оказалось, что некоторые темы интересны и людям вне нашей команды и меня отправили прочитать доклад на внутреннем мероприятии. А потом меня отправили читать доклады на другие митапы и конференции.

В общем, как так и завертелось с публичными выступлениями (которые, я, кстати, вообще-то не люблю) и всякими там подкастами. У меня тут есть список, если Вам вдруг интересно github.com/chicoxyzzy/pub…

Ну и можно сказать, что t.me/webnya также потом зародилась для того, чтобы не каждому коллеге отдельно в курилке что-то рассказывать, а всем желающим сразу.

В 2014 случился геополитический конфликт, который, привел к оттоку иностранных инвестров, и компания постепенно загнулась. Было грустненько. До сих пор считаю самой своей интересной работой на данный момент. Но верю, что впереди будет что-то еще интереснее!

Я потом долго листал вакансии и дичайше унывал, потому что все они были ну просто ацтой. Ничего интересного. Совсем. Моя бывшая коллега по той работе Аня настойчиво просила меня пообщаться с ребятами из Exante по поводу вакансии, но мне абсолютно не нравилось ее описание.

После очередных Аниных уговоров, я подумал, что ничего же и не потеряю, и согласился. После это общения я поменял свое мнение о вакансии и в итоге устроился туда.Так я попал в финтех, высокие нагрузки на фронте, блокчейны и всякое такое.

Было очень круто, и я проработал там почти 5 лет. Кстати, там же до сих пор работает Оля Алексашенко из @webstandards_ru

За это же время я объездил невероятное количество конференций в разных странах (об этом поговорим в субботу), немного выступал сам, стал организовывать BeerJS (об этом в четверг), наконтрибьютил куда попало, получил приглашение в команду Babel, стал приглашенным экспертом TC39

Всё это произошло так быстро и неожиданное, что я как-будто даже не заметил. Раз — и куча каких-то активностей и дел вне работы. Меня часто спрашивают как это все случилось, но я не знаю как отвечать, поэтому всегда отвечаю по-разному. В этот раз отвечу так — повлияла одержимость

То есть я действительно одержим тем, что делаю, и получаю огромное удовольствие от того, что трачу огромную часть своего свободного времени на исследования того, что мне нравится — открытые стандарты, веб, браузеры, JS-движки, WebAssembly. И всё это не приносит денег. Вообще :)

О стандартах и всём таком поговорим в среду. А пока закончу рассказ о себе. Сейчас я работаю с замечательными @icelabaratory и @IAmTrySound (а еще там немного поработала не менее замечательная @zmoki). Надеюсь вы об этих ребятах слышали и подписаны на них.

My 2021 personal goals: - contribute to browser engines - learn more system programming - be more involved in standards bodies - practice English - find a dream job (work from anywhere, browsers, standards, privacy, open web) - get back to music production - more community work
Я очень надеюсь, что моя следующая работа будет больше про тулинг, d2d, внутренности браузеров или что-то такое интересное. Даже поставил себе такую цель на 2021. twitter.com/chicoxyzzy/sta… Пока еще многому нужно учиться, но думаю, что какие-то (низкие) шансы выполнить эту цель есть

Как-то так. Не знаю было ли Вам интересно, как-то все молчат :) Если что-то интересно, то спрашивайте! А вот мой черновик с темами на неделю: пн -интро вт - опенсорс ср - стандарты чт - коммьюнити пт - пиво сб - путешествия и конференции вс - О чем бы поговорить в воскресенье?

Ой, а еще забыл отметить @rpominov! 🤦‍♂️ На него тоже подпишитесь!!