Андрей Нагих

Андрей Нагих

Темы
Неделя
Sep 9, 2019 → Sep 16, 2019

Архив недели @andrnag

Понедельник


Всем привет! На этой неделе с вами Андрей Нагих @andrnag. Я из Новосибирска. Работаю в компании Plesk (@Plesk), ранее работал в компании Инетра (inetra.ru). Мы поговорим про: WebAssembly SmartTV Новосибирск IT сообщества Новосибирска

Начнём с WebAssembly и моего традиционного вопроса: каков ваш опыт с этой технологией?
🤔 87.9% Что-то слышал о ней.
🤔 10.5% Экспериментировал.
🤔 0.5% Внедряем в свой проект.
🤔 1.1% Используем в продакшене.

Те, кто уже использует, делитесь своим юзкейсом в реплаях. В Инетре мы вывели Wasm в продакшн для того, чтобы портировать наше большое сетевое C++ приложение в браузер (умный прокси). Я расскажу о нашем опыте подробнее позже.

Итак, WebAssembly. Как мы видим из опроса, очень мало людей используют его в продакшене. Это не удивительно, т.к. технология относительно новая (поддержка в браузерах появилась в 2017 году) и довольно специфичная.Меня радует, что есть люди, которые сейчас экспериментируют с Wasm.

Если посмотреть в корень, то Wasm это двоичный формат файла, в котором мы можем сохранить байткод для выполнения на виртуальной машине JavaScript в браузере.

Что это нам даёт? Мы можем генерировать этот байткод из языков системного программирования (С, C++, Rust). При запуске браузеру не нужно парсить тонну текста JS (как было с asm.js). Wasm это двоичный формат, и оптимизирован для быстрого запуска.

Два слова об asm.js. Это прародитель Wasm, эксперимент компании Mozilla, целью которого было получить возможность затащить C++ в браузер. В основном это нужно было для портирования игрушек.

Этот проект выстрелил, у него даже появилась неплохая поддержка в браузерах caniuse.com/#search=asm.js. Но стали очевидны проблемы производительности.

Организуя проект WebAssembly Mozilla изначально привлекла к написанию спецификации всех основных вендоров браузеров. И поставила целью сделать решение подходящее для промышленного использования (эффективное, быстрое, безопасное, открытое, отлаживаемое, интегрированное с web api).

Примечательно, что весь процесс написания спецификации шёл открыто на GitHub, и любой мог наблюдать за ним или поучаствовать. github.com/WebAssembly/de…

Сейчас работа продолжается так же на GitHub. В 2017 году в браузеры зарелизили MVP. Около года собиралась обратная связь. Сейчас идет активное развитие технологии. Процесс похож на JS: подаются proposals, идет обсуждение, принятие и реализация.

Браузеры очень быстро реализовали поддержку, а сейчас она просто великолепна: caniuse.com/#search=webass… Мы начали реализацию своего проекта осенью 2017 года, когда поддержка доехала в Safari и Edge. Chrome и FF уже имели её с весны.

🔥Тред (Андрей Нагих)
Что умеет WebAssembly? Во-первых, это цель компиляции. Нет смысла писать его руками (хотя такая возможность есть). 1⃣ Исторически, полнее всего поддержка C и C++. Осуществляется компилятором Emscripten авторства Alon Zakai @kripken.

Alon ключевая фигура в этой технологии, именно он был основной движущей силой проекта asm.js, приведшего к Wasm. И именно поэтому компилятор Emscripten хорошо проработан — он старше самой технологии Wasm.

Наш проект Bytefog b2b.peers.tv/bytefog написан как раз на C++, поэтому нашим основным инструментом был как раз Emscripten. Мы остановимся на его возможностях позже.

2⃣ Очень активно развивается поддержка в Rust. Это не удивительно, т.к. и язык, и технология авторства Mozilla. На сегодняшний день компилятор Rust сам умеет выдавать Wasm байткод.

Также, в экосистеме Rust пишутся файлы биндингов к Web API. Биндинги нужны, если мы хотим из контекста Wasm вызвать функцию контекста JS (встроенную, или пользовательскую). Очень классно, что теперь не нужно будет вручную делать это для встроенных.

Команда Rust использует для написания биндингов язык WebIDL (тот же, что и W3C для спецификаций браузерных API). Emscripten также поддерживает биндинги в этом формате, так что можно будет их адаптировать. Ещё у Emscripten есть своя технология для биндинга: Embind.

В своём проекте мы использовали именно Embind, и я расскажу о его возможностях подробнее позже.

3⃣ Начиная с версии 1.11 Go поддерживает Wasm. Эта поддержка до сих пор экспериментальна. И на выходе получаются большие бинарники, т.к туда попадает рантайм Go для горутин, сборки мусора и пр. Минимальный размер файла — около 2 Мб на пустое приложение, что довольно много.

Для сравнения, весь наш код Bytefog уложился в 2Mб. Очень классно, что .wasm файлы отлично жмутся gzip: на выходе получается 500 Кб. Т.е. в 4 раза это реально. Не забывайте настраивать сжатие для них.

4⃣ Симметрично, хотелось бы поддержки Kotlin. И некоторые подвижки в этом есть. Статья 2018 года superkotlin.com/kotlin-and-web… показывает как скомпилировать Kotlin/Native в Wasm. Но с тех пор новостей не было. Полагаю, поддержка экспериментальна, как и сам Kotlin/Native.

5⃣ Есть эксперименты с поддержкой Java. Но все они пока не достигли зрелости. Ключевые слова: TeaVM, JWebAssembly, Bytecoder

6⃣ Гораздо лучше дела у .Net, в репозитории Mono есть примеры как скомпилировать в WebAssembly. github.com/mono/mono/tree…

7⃣ Многие спрашивают: «Можно ли JavaScript скомпилировать в WebAssembly». Идея звучит странно, но есть команда, реализовавшая её для TypeScript. Проект называется AssemblyScript, движется очень хорошо и имеет популярность github.com/AssemblyScript… Это простой способ начать с Wasm

Есть ряд интерпретируемых языков (например Lua), которые тоже работают в Wasm. Но это достигли тем, что скомпилировали их интерпретаторы в Wasm. С помощью такого хака можно поддержать хоть PHP, хоть Brainfuck. Можно с этим поэкспериментировать, результат может быть забавным.

Реестр поддерживаемых языков ведётся на GitHub github.com/appcypher/awes… Там можно взять ссылки на те проекты, что я упоминал. И посмотреть остальные, совсем сырые варианты.

🔥Тред (Андрей Нагих)
@ruGreLI @jsunderhood Память по-умолчанию уравляется через гибрид ARC и GC (для циклических ссылок), т е автоматическая, но есть возможность и в ручную специальным флагом. Все это весит не много максимум 2 кб. Да есть окраничения, нету any, undefined. Более подробно в документации
Макс — один из мэнтейнеров AssemblyScript, и очень круто, что мы можем задать ему вопросы по-русски. Спасибо за дополнение к треду. twitter.com/MaxGraey/statu…

@jsunderhood В Kotlin сейчас идет работа по написанию собственного wasm бекенда, минуя LLVM (который и позволял компилировать в wasm используя Kotlin/Native)
Спасибо за отличное дополнение! Кстати, у Сергея есть чат по WebAssembly, где можно обсудить вопросы подробнее: t.me/WebAssembly_ru twitter.com/chicoxyzzy/sta…

Также, подписывайтесь на его канал t.me/juliarderity с новостями стандартизации JS, Wasm и Web API. Сергей всегда в курсе всех пропозалов и новостей.

Итак, наш исходный код мы компилируем в байткод WebAssembly. Этот байткод портативный, т.е. не зависит от архитектуры компьютера на котором выполняется. Также он не зависит от конкретной машины JS в браузере. 🚀Это огромный плюс, особенно в мире модулей Node.js

Перед запуском браузер снова компилирует его в другой байткод — своей виртуальной машины JS. 🚀 Важно сделать это как можно быстрее. Поэтому есть два компилятора: быстрый (baseline), но производящий неоптимальный код — он работает первым.

И медленный, выдающий оптимизированный код. Он работает уже после старта приложения, и нагорячую подменяет байткод. v8.dev/blog/liftoff

Кстати в FireFox такая архитектура появилась раньше, чем в Chrome. Lin Clark отлично написала почему это важно hacks.mozilla.org/2018/01/making…

Lin Clark @linclark это ещё один человек в мире Wasm за которым обязательно нужно следить. Она пишет великолепно иллюстрированные статьи о внутреннем устройстве Wasm в блоге Mozilla Haks. hacks.mozilla.org/category/webas…

🚀 Ещё одна фишка для ускорения старта — это потоковая компиляция. Супер полезная вещь: представьте, ваш код начинает компилироваться даже пока ещё целиком не скачался.

🚀 И это ещё не всё. В браузерном API разделены стадии компиляции модуля и его инстанцирования. Это значит, что вы можете закешировать результат компиляции у пользователя. Это сделает повторные запуски приложения молниеносными.

🔥Тред (Андрей Нагих)
Мы поговорили о том, что может Wasm и какой он классный. Но, как и у любой технологии, у него есть ограничения.

🛑Как я уже говорил, в Wasm нет сборщика мусора, поэтому либо вы используете язык с ручным управлением памяти, либо пишете рантайм со своим сборщиком мусора. Есть пропозал о подключении Wasm к GC браузера сейчас он на 1 стадии github.com/webassembly/gc…

Но работы по нему ведутся поэтапно. И пропозал ReferenceTypes, который нужен для реализации GC, уже на 3 стадии. Это значит, что уже идёт реализация в браузерах.

🛑Другая особенность: только 32 битный доступ к памяти. Это оставляет нас с жалкими 4Гб памяти возможной для использования.😀 Есть планы по wasm64, но они где-то впереди. Есть более насущные вопросы.

🛑 Ещё одна проблема, это треды. Изначально их поддержка была реализована в Emscripten, но она использует SharedArrayBuffer, которые браузеры отключили в 2018 году для борьбы с уязвимостями Spectre и Meltdown chromium.org/Home/chromium-…

На сегодняшний день поддержка вернулась только в Chrome. Ожидается поддержка в Edge. FF пока осторожничает.

🛑Пожалуй, главная неприятность, которая нас ждёт, это то, что Wasm исполняется внутри песочницы браузера. Поэтому как и у JS, у нас нет доступа к платформе: нет файлов, нет сети, нет генератора случайных чисел, и пр.

Все эти возможности нам придётся реализовать теми средствами, которые уже есть у браузеров. Далеко не всегда удаётся подобрать полноценную замену.
notion image

Например, до tcp или udp сокета не добраться никак. Мы можем посылать HTTP запросы. Или работать по WebSocket. Или использовать WebRTC. На этом с сетью точка.

Наш p2p прокси-сервер Bytefog, как вы понимаете, основательно полагается на сеть. И нам пришлось полностью переделать сетевую часть. Мы используем все три возможности. На сервере мы написали tcp2http прокси, чтобы адаптировать протокол. Для этого использовали Node.js

При портировании приложения больше половины времени (8 мес.) у нас ушло на рефакторинг C++ кода. Мы выделяли интерфейсы в тех местах, где подставили JS реализацию. Таким образом, мы оставили старые реализации для нативных платформ, и JS для браузера.
notion image
notion image

🛑Очень важный и для многих неожиданный недостаток — Wasm не ускорит ваш код. Есть популярное мнение, что если взять алгоритм на JS, переписать его на плюсы, скомпилировать в Wasm, то он станет гораздо быстрее. Короткий ответ: Это не так.

Мы провели небольшой эксперимент: реализовали несколько фильтров обработки изображения на JS и C++. При компиляции C++ с оптимизацией мы получили паритет. Исходники теста выложили, можете попробовать сами. github.com/andrnag/wasm_c… График нормирован к JS.
notion image

Я тут по ходу публикую слайды из своего доклада о нашем опыте внедрения WebAssembly. Для нетерпеливых сразу опубликую ссылки. Текстовая версия на Хабре: habr.com/ru/company/jug… И видео с HolyJS: youtube.com/watch?v=uqG9Di…

Продолжая о производительности. В доклад не попало, но мы сделали ещё один замер, С++ код в нативе (без Wasm, и без браузера). Мы ожидали увидеть ускорение по сравнению с Wasm, но и здесь его не было.

Из всего этого я делаю такой вывод. Современные виртуальные машины JS настолько оптимизированы, что простой арифметический код почти сразу оптимизируется JIT-ом до машинного. Поэтому работает с той скоростью, что позволяет ваш процессор.

В случае Wasm браузеру проще это сделать, т.к. код уже разложен по полочкам, использует строгие типы и сам управляет памятью. Вы получаете ожидаемую, ровную производительность. Без сюрпризов деоптимизации, которые может подкинуть JS.

. @jsunderhood а есть какая-то стоимость у interop между wasm-js? Есть ми порог, после которого лучше выкинуть что-то в wasm, а не писать на жс?
С чем на самом деле возникают сложности, это с вызовами между контекстами JS и Wasm. Сёва задал очень правильный вопрос. twitter.com/jabher/status/…

Любой такой вызов имеет накладные расходы вызванные устройством браузера. Также Emscripten добавляет к ним при пробросе объектов туда-обратно. В итоге, в реальных приложениях производительность сильно зависит от того, что конкретно вы делаете.

Именно поэтому сложно сделать объективный benchmark. Также, браузеры постоянно работают над снижением накладных расходов. Значительный успех был в конце 2018 года: ускорили вызов функций. Подробнее — у Lin Clark. hacks.mozilla.org/2018/10/calls-…🎉

В нашем случае, вычислительного кода было совсем мало, и выполнялся он почти мгновенно. Ограничителем производительности является сеть. Мы тестировали передачу больших блобов из JS в Wasm и обратно. Передача 12 Мб данных занимает около 100 ms. 12 Мб это 5 секунд FullHD видео.

🔥Тред (Андрей Нагих)

Вторник


Вчера мы поговорили о том что такое WebAssembly, а сегодня я хочу рассказать о том, какие задачи с помощью него можно решать. 🛠 Я уже упоминал наш опыт по портированию имеющейся C++ кодовой базы в браузер. Но это не единственный способ применения.

🛠 Wasm широко применяется в игровых движках. Unreal, Unity и Unigene все имеют возможность скомпилировать игру под браузер. Как мы помним, история asm.js началась именно с портирования игр.

В Emscripten отдельный упор сделан на поддержку 3D-графики. Вы пишете привычный код на C++ и он превращается в необходимые Web API (Canvas, WebGL)

🛠 Можно обрабатывать данные пользователя прямо в браузере, не посылая на сервер. Например: изображения звук видео загруженные файлы

🛠 Можно запускать обученные нейронные сети на стороне пользователя. Это позволит работать с данными с низкой задержкой. Например реализовать управление жестами (мышью или руками с камеры), распознавание голоса или распознавание лиц.
notion image

🛠 Кусочек Chrome, распознающий язык текста доступен как Wasm-библиотека. И её можно приспособить для своих задач. Подключается как обычный npm-модуль и всё — вы используете Wasm. npmjs.com/package/cld3-a…
notion image

🛠 Можно проверять орфографию с помощью HunSpell. npmjs.com/package/hunspe… 🛠 Или распознавать речь на PocketSphinx github.com/syl22-00/pocke…

🛠 Первое правило криптографии: «Не пиши свою криптографию». Если не хватает встроенных возможностей Web Crypto API, то можно притащить целый настоящий OpenSSL в браузер. stackoverflow.com/questions/5232…

🛠 Очень классный юзкейс подсказал Андрей Карпушин @reven86. Его сервис wotinspector.com/en/replays/ позволяет анализировать записи матчей World of Tanks. Проблема в том, что код для этого очень ресурсоёмкий. Т.к. код на C++, Андрей скомпилировал его в Wasm и вынес в браузер.

Таким образом, тяжёлые вычисления выполняются на компьютерах пользователей. Каждый пользователь обрабатывает только свои данные, в которых сам заинтересован. Сервис получает результат обработки и добавляет его в общую статистику. Отличная альтернатива прямой монетизации!

🛠 В мире существует куча библиотек, написаных за многолетнюю историю C и C++. Можно попробовать компилировать их в Wasm и смотреть что получается.

Уже сейчас доступны в виде модулей Wasm: видео-конвертер FFmpeg аудио-кодек Opus компьютерное зрение OpenCV файлова база SQLite библиотеки для работы с PDF тысячи их!
notion image

🛠 Всё это позволяет унести к пользовтателю ту работу с данными, которая обычно делалась на сервере. Что в итоге: сокращает latency уменьшает количество передаваемых данных даёт большую функциональность на клиенте

🛠 Модули Wasm можно использовать и для Node.js Здесь очень круто играет портативность Wasm. Сейчас нативный модуль Node.js должен компилироваться под каждую комбинацию ОС, архитектуры и версии Node.js

Это список платформ, которые поддерживается в node-sass — библиотеке для компиляции SASS. Для каждого релиза нужно скомпилировать проект в каждой из этих комбинаций. Во-первых, это время. Во-вторых, каждая сборка это 5-10 Мб бинарников.
notion image

Если тот же модуль скомпилировать под Wasm, то на каждый релиз будет достаточно одного бинарника. Вот тут уже пробуют провернуть этот фокус github.com/kwonoj/libsass…

🛠 Для приложений, написанных на asm.js Wasm может предложить значительное ускорение запуска. Популярный онлайн-редактор графики Figma получил ускорение запуска в 3 раза после перехода. Подробнее в их блоге: blog.figma.com/webassembly-cu…
notion image

🛠 Всеми любимая VSCode, хоть и работает на Electron, использует нативные модули для критичных к производительности вещей. А значит, у них есть такая же проблема с поддержкой кучи платформ. Есть простор для оптимизаци.

🔥Тред (Андрей Нагих)
🥳 Настало время крутых демок! 🎉 AutoCAD портировал свою 30-летнюю кодовую базу в браузер с помощью WebAssembly. Только представьте, сколько ресурсов понадобилось бы, чтобы переписать это на JS! И сколько различий в поведении было бы с оригиналом. web.autocad.com/login
notion image

Почитать и посмотреть об опыте Autodesk through-the-interface.typepad.com/through_the_in… Кстати, свой релиз они представляли на Google I/O 2018 blogs.autodesk.com/autocad/autoca…

⌨️Как на счёт командной строки с настоящим Linux прямо в браузере? Fabrice Bellard, автор QEMU, запустил его в браузере (конечно же с помощью WebAssembly 😀) bellard.org/jslinux/vm.htm…
notion image

🖥️🖱️Но Fabrice этого показалось мало, и он запустил X Window. Там даже можно открыть браузер и... сходить на localhost, т.к. сети нет. 😀 Или написать что-нибудь в QEmacs bellard.org/jslinux/vm.htm…
notion image

🤯Что может быть ещё более сумасшедшее? 🥁 Windows 2000, собственной персоной, на виртуальном компьютере, внутри браузера! Там внутри даже есть FireFox! bellard.org/jslinux/vm.htm…
notion image

🎥Видео-редактор на WebAssembly. Можно наложить разные фильтры в реальном времени. Можно сравнить реализацию на Wasm и JS. Можн обработать видео с вашей веб-камеры. d2jta7o2zej4pf.cloudfront.net
notion image

🚀 Windows 95 как приложение Electron. Потому что мы можем. github.com/felixrieseberg…
notion image

😱 We need to go deeper! Трёхмерный гараж, с виртуальным компьютером, на котором работает реальная Windows 3.11, в которой можно запустить Netscape 2.0 🎵 Звук подключающегося модема в подарок! assets.metacade.com/emulators/win3…
notion image

⚽️Список, собираемый мэнтейнерами Emscripten. Игрушки: Doom Quake 3 Doom 3 Dune II и куча других. Графика. Эмуляторы: Classic MacOS Apollo Guidance Computer DOSBOX Языки и фреймворки: Qt Lua Perl Python Ruby Куча библиотек github.com/emscripten-cor…

В общем, можете дальше сами фантазировать над применением WebAssembly. Думаю, демки хорошо иллюстрируют его возможности. Отличная идея на хакатон или research-день: взять какую-нибудь библиотеку на C или C++ и попробовать её скомпилировать в WebAssembly.

❓ Спрашивают, почему Wasm c нами надолго? Было много попыток построить второй рантайм в браузере: ActiveX Java Applets Flash Silverlight NaCl Все они провалились по одной и той же причине: слишком большой доступ к системе.

WebAssembly основывается на той изоляции, которая работает уже много лет в браузере. Да, из-за этого есть проблемы с реализацией некоторых фич, таких как доступ к диску или сети. Но с развитием Web API, белых пятен на этой карте будет всё меньше.

❓Именно поэтому WebAssembly не пришёл, чтобы заменить JS. Это также частый вопрос. Для запуска .wasm файла как минимум необходимо сделать несколько вызовов JS.

Нужен «клеевой код» на JS, который пробрасывает в Wasm встроенные API браузера и ваши объекты и функции. При компиляции через Emscripten такой код генерируется автоматически. Т.е. деплоим мы 2 файла: .wasm и .js с клеевым кодом.

Вообще, Emscripten работает как «Browserify для C++», т.к. по максимуму старается полифилить нативные API: STDIN/STDOUT системные вызовы файловую систему 3D графику сокеты конвертирует в WebSockets треды и многое другое

Также большая часть Emscripten, это тот самый биндинг сущностей из двух миров. Есть три способа это делать: ccall/cwrap WebIDL Embind

ccall/cwrap не умеет в объекты, это только для простых C-функций. Чаще всего встречается в tutorials для начинающих.

WebIDL это язык описания интерфейсов. Умеет много чего, и похоже, что сейчас это самый перспективный вариант. Я уже говорил, что Rust его активно использует.

Мы взяли Embind, т.к. он лучше лёг на нашу кодовую базу. С помощью жёсткой магии шаблонов C++ он предоставляет вполне читаемый DSL для описания связей объектов. Умеет, кажется, ещё больше, чем WebIDL.

Можно пробрасывать: функции классы интерфейсы статические методы value objects сырые указатели умные указатели абстрактные методы виртуальные методы перегрузка функций enum константы класс val для работы с браузерным API векторы

А также довольно логично биндит встроенные типы данных C++ в типы данных JS.

Честно говоря, писать биндинги поначалу это очень больно. Синтаксис непривычен ни плюсовикам, ни фронтендерам, легко опечататься. Есть тонкие нюансы. Кое-где ошибки стреляют не сразу

Но задачу свою он решает, и потренировавшись на кошках, можно им пользоваться. Документация есть, но не самая полная, и точная. Я делал PR с правкой фактических ошибок. emscripten.org/docs/porting/c…

Поэтому лучше всего — смотреть в тесты Embind. Там есть такие выкрутасы, которые даже не сразу придумаешь. Один сложный случай биндинга мы решили только благодаря тестам. Файл на 3000 строк! github.com/emscripten-cor…

🔥Тред (Андрей Нагих)
Сегодня хочу закончить с темой WebAssembly. Если есть вопросы, задавайте. Расскажу кратко про разработку.

Конечно, надо как-то отлаживать. Для этого придумано текстовое представление WebAssembly .wat Браузеры показывают его для юнитов программы прямо в девтулзах
notion image

Можно ставить точки останова. Но не более того. Переменные теряют свои названия и типы, поэтому посмотреть можно только сырые биты в виде int

Есть возможность сгенерировать SourceMap. Делается это с притопами, работает не всегда, надеюсь со временем ситуация улучшится. Компилятор Rust генерит их гораздо лучше, чем Emscripten.

В браузере выглядит завораживающе. Плюсы внутри DevTools. Теперь мы видели всё!
notion image

Переменные рассматривать бесполезно, формат SourceMap их не позволяет биндить. Возможно, нас ждёт его обновление. Очень бы хотелось!

Также, работает профайлер. В FF он даже разматывает имена функций. Chrome показывает показывает «мангленные».
notion image

Совсем недавно в LLVM появилась возможность отладки WebAssembly по-взрослому. Но это не для браузера. Подробности в статье. hacks.mozilla.org/2019/09/debugg…

🔥Тред (Андрей Нагих)
Я всё время говорил про использование Wasm в контексте браузера. Немного затронул тему работы в Node.js. Но так вышло, что Wasm выплёскивается из экосистемы JS. Стали появляться рантаймы, запускающие .wasm поверх операционной системы.

Это проекты: Wasmtime wasmtime.dev Wasmer wasmer.io Lucet github.com/fastly/lucet/ И некоторые ранние эксперименты описаны в статье от Wasmer: medium.com/@syrusakbary/r…

Дошло до того, что WebAssembly стали называть «Новым Docker». Это жарко обсудили в одном из @radio_t Конечно же, никто не задумывал Wasm как замену Docker, начиналось всё с браузеров. Просто так получилось, эксперимент зашёл далеко. ☺️

В результате, группа по стандартизации WebAssembly принялась за стандартизацию системного интерфейса, пока реализации не разошлись слишком сильно. Называется это WASI wasi.dev

Тут шутки кончились. Предлагаю почитать опять же статью Lin Clark о том, почему это важно. hacks.mozilla.org/2019/03/standa…

Когда мы говорим про бразуер, то он является Host-платформой для Wasm модуля. Когда мы говорим про системные рантаймы, Host-платформой становится сама система. В обоих случях мы хотим красиво пробрасывать объекты.

Для этого ведётся работа над Interface Types proposal. В результате этих двух вещей может появиться штука, от которой просто дух захватывает! Прикладываю картинку из статьи, для привлечения внимания. hacks.mozilla.org/2019/08/webass…
notion image

🔥Тред (Андрей Нагих)

Среда


В дополнение к теме WebAssembly ссылка на доклад Сергея Рубанова @chicoxyzzy о внутреннем устройстве Wasm с конфернции @CodeFestRu youtube.com/watch?v=Q96VSA…

Четверг


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

Если кто не знает, она позволяет запускать сторонние приложения прямо на телевизоре, без всяких приставок. Это могут быть игры, информационные сервисы, но самое главное, конечно, онлайн ТВ и онлайн кинотеатры.

Один из основных продуктов Инетры это сервис онлайн-тедевидения Peers.TV. Естественно, для нас важно охватить как можно больше платформ, чтобы максимально расширить аудиторию.

У нас есть сайт, приложения для мобильных телефонов и планшетов, приставки, и SmartTV мы, конечно, не собирались упускать.

Сразу оговорюсь, что есть смарты на основе Android и AndroidTV. Они появились совсем недавно. В основном это бренды Sony, Phillips, Xiaomi. На них подходят приложения для Android приставок, и в этом треде я их расматривать не буду.

Все SmartTV что не Android — используют web платформу. Как бы это не было удивительно, но да, для разработки под них достаточно стандартных знаний HTML, CSS и, разумеется, JS.

Основные прлизводители таких ТВ это Samsung, LG, Panasonic. Есть и другие, но их доля на рынке мала. Samsung это, пожалуй, лидер рынка. LG тоже имеет значительную долю. У Panasonic пользователей совсем не много.

Исторически, Samsung первый сделал SmartTV, и их магазин приложений самый проработанный и хорошо наполнен. У меня дома именно телевизор Samsung.

🔥Тред (Андрей Нагих)
Возможности web платформы всем нам хорошо знакомы, и управления телевизором там нет. В чём же секрет?

А секрета никакого нет: также как браузеры расширяют возможности JS своими дополнительными API (такими как DOM, History, XHR и пр.) телевизионный браузер добавляет свои глобальные объекты, позволяющие управлять возможностями ТВ.

В любой ТВ ОС вы встретите похожий набор API: 📺 управление плеером 📺 получение данных о ТВ 📺 обработка кнопок пульта 📺 доступ к файловой системе ТВ 📺 управление жизненным циклом приложения

Разумеется, каждый призводитель добавляет своих уникальных возможностей в свои ТВ. И, как водится, каждый производитель придумал свои особые API для всех этих вещей.

Вы скажете: «Им бы договориться о едином стандарте». И будете правы, и такой стандарт даже есть! Но и он не уберёг от классической ситуации из xkcd.com/927/ Называется он SmartTV Alliance Specification, выдержал 5 ревизий, но его реализовали только минорные вендоры.

📛 И это большая проблема для разработчиков! В начале нашего пути у нас было 3 отдельных приложения: для Samsung, LG, и Panasonic. Уже этого набора было достаточно, чтобы серьёзно затормозить темп разработки.

И в этот момент (где то в конце 2014 года) вендоры не сговариваясь объявляют о переходе на новую ОС. Тут бы им объединиться и выбрать какую-то одну ОС. Но так бывает только в мире фей и бабочек.🦄

Итак, что мы имели на тот момент по ОС: 📺Samsung Orsay 📺LG NetCast 📺Panasonic VIERA Connect А теперь следите за руками: 📺Samsung перешёл на Tizen 📺LG на WebOS 📺А Panasonic (внезапно!) на взлетающую Firefox OS.

Это было фиаско. Количество платформ в одночасье удвоилось (бейте астрологов). И хотя Firefox OS загнулась до того, как телеки Panasonic доехали до прилавков, их всё равно было 5!

Также, у нас были планы по портированию на малопопулярные телевизоры и приставки (там тоже есть web приложения), т.е. было понятно, что платформ будет прибывать.

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

На тот момент было несколько готовых реализаций такого подхода. Как правило, это были проекты таких же как мы компаний с поддержкой небольшого числа устройств.

💎Но нашёлся среди этого настоящий алмаз. Это фреймворк BBC TAL. Они не только реализовали такую абстракцию, но и написали десятки модулей поддержки устройств. Также у них своя библиотека UI элементов.

Правда основан он на уже тогда устаревших технологиях. И я принял решение переписать наши приложеня с нуля с ES2015, компонентами и серверным рендерингом. Если в двух словах, то затея моя провалилась.

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

☝️Взять всё и переписать не срабатывает почти никогда. Позже я неоднократно слышал о похожем опыте коллег с теми же выводами.

В итоге, мы смержили наши приложения, как и планировали, реализовав абстракцию платформы минимальными средствами.

🔥Тред (Андрей Нагих)
На что похожа разработка под SmartTV? 🔥Это просто, как ездить на велосипеде. Который горит, и ты горишь, и все горит, и ты в аду.
notion image

🔥 Я уже говорил, что в каждой ОС одни и те же вещи делаются по разному. А ОСей — 5 штук. 🔥 Во-вторых, документация, даже если есть, то разбросана по странным заброшенным сайтам для разработчиков. И как правило она автогенерённая. Никаких тебе объяснений и туториалов.

🔥 В-третьих: баги. С багами может помочь только вендор. Для этого идем на форум или в техподдержку, которые тоже разбросаны по странным устаревшим сайтам. И ответ обычно долгий.

🔥 Производитель как правило предоставляет эмулятор на котором можно отлаживаться. Не попадайте в эту ловушку! То что работает в эмуляторе может сломаться на реальном устройстве. А тот баг, на который вы потратили неделю, может оказаться только в эмуляторе!

🔥 Там бы быстро пришли к пониманию, что отлаживать надо только на реальных устройствах. И первая проблема с ними: их нужно купить.

Да, разработка под SmartTV это не дешёвое удовольствие. Иногда везёт и производитель присылает телек, только чтобы вы написали на него приложение. У нас так вышло с Panasonic. Что это было, до сих пор не могу понять :-)

🔥 Следующая проблема с устройствами возникает не сразу: их некуда ставить. С гонкой за диагоналями, телеков меньше 32-40 дюймов просто не делают. Иногда я мечтал о специальных девелоперских ТВ с начинкой большого телека, но матрицей 15" :-D
notion image

🔥 Идея красиво развесить коллекцию телеков на стене также провалилась. Сегодя эта конкретная модель нужна одному разработчику, завтра другому, через неделю она нужна тестировщику. Так мы и таскали их из кабинета в кабинет.

💪 Для разработки под SmartTV подходят только сильные программисты. (локальный мем).

Самая тяжелая, кстати, была та халявная 42" плазма от Панасоника. Современные 32" LCD — как пушинки, боишься, что его со стола сдует.

🔥 Как вы поняли, телевизоров нужно много. Почему? Потому что в индустрии бытовой электроники принято обновлять модельные линейки раз в год. Т.е. мало нам количества ОС, так надо ещё и устройства разных лет.

🔥 Причём старые устройства с поддержки не снимешь. ТВ это не смартфон, который меняют раз в год. Человек покупает телек и вешает его на стенку лет на 5. Иногда производитель раньше снимает с поддержки модель, чем она выходит из оборота. (Но о деплое позже)

🔥 Итак, надежды на обновление пользовательских устройств — нет. Да, приходят какие-то апдейты, но принципиально встроенный браузер они не меняют. Разработка под SmartTV это как будто эпоха IE 6.0 никуда не уходила.

🔥 Однажды, я попытался выяснить, что за браузер стоит на телевизоре 2014 года. Очевидно, что это разновидность WebKit, но какая? Короче, он представлялся как Chrome 5. 🤦‍♂️

🔥 Но даже зная это, нельзя сказать точно, какие фичи в нём будет работат, а какие нет. Производитель вполне мог что-нибудь и портировать. В общем, катастрофически не хватало аналога caniuse, но для SmartTV (💡идея для стартапа).

🔥Тред (Андрей Нагих)
🔥🔥🔥 И пожалуй самая-самая боль — это средства разработки. Про те 3 старые платформы справедливо сказать, что средств разработки НЕТ. Серьёзно, никаких вам DevTools, никакой консоли. alert(1); наше всё.

Мы писали утилиту, которая распечатывает объекты поверх интерфейса приложения. JSON кстати там тоже не было, притащили полифил.

Потом мы нашли чудесную штуку: WeInRe. Странное название расшифровывается как WebInspector Remote. people.apache.org/~pmuellr/weinr…

Приблуда состоит из двух частей: js агента для приложения и серверной части с каким то древним форком WebKit DevTools. Общаются они по вебсокетам (а может где-то и лонг-пуллиногом, не разбирался).

Несмотря на всю неказистость и глючность, она стала настоящим спасением. Появилась консоль! Стало можно выполнить команду в контексте приложения. Стало видно вёрстку и стили. Но вот JS дебаггер таким средствами не сделаешь, поэтому приходилось выкручиваться без него.

🔥 Отдельное удовольствие это процесс запуска девелоперской сборки на телевизоре. Собрать код в пакет через IDE (переименованный зип) Зайти на девелоперский сайт, залогинитсья. Закачать пакет на сайт, чтобы подписать электронной подписью. Заполнить большую форму ...

Скачать пакет обратно. Положить его на флешку. Вытащить флешку из компьютера. Вставить флешку в телевизор. С помощью пульта пройтись по нескольким меню и установить приложение. Можно проверять изменения! PROFIT.

Я не шучу и не преувеличиваю. Именно так LG предлагала разрабатывать под NetCast в 2014 году. Хотел приложить скриншот этой формы, но на сайте для разработчиков ссылка на неё протухла.

Временами складывалось впечатление, что вендоры всей душой ненавидят разработчиков приложений. Это сквозило из документации. Из «средств разработки». И из процесса ревью в сторы. (Отдельная песня :-( )

Мы конечно быстро написали служебное приложение которое строило список ссылок на все наши приложения в разработке и позволяло по ним перейти. Если приложение это вебстраница, то можно делать редиректы!

На машине разработчика поднимался вебсервер, который раздавал текущий рабочий каталог. Программулина позволяла открыть нужную версию с нужной машины. Ставить на телек её надо было один раз и на всегда.

В само приложение встроили секретные комбинации клавиш для location.reload() и штук посложнее, вроде сброса настроек. Возможно эти чит-коды до сих пор там.

Справедливости ради, с выходом Tizen и WebOS Developer Experience кардинально изменился. Появилась Node.js CLI утилита с помощью которой можно было управлять процессом разработки. ✔️собирать пакет ✔️закачивать его на нужное устройство (по сети!) ✔️и о чудо! настоящий дебагер!

Для UI дебаггера использовались уже современные Chrome DevTools. И общались они с телеком по одноимённому протоколу. В общем, сейчас прошлые ужасы немного отступили.

Но совсем они не ушли. У нас до сих пор половина пользователей пользуется этими устаревшими платформами. А значит, мы всё ещё деплоим на них. Помним, купленный телевизор будет висеть на стене лет 5. А может и все 10.

🔥Тред (Андрей Нагих)
💽Я обещал рассказать про выкладывание в сторы.
notion image

О, иногда это напоминало цирк абсурда! Казалось бы, вот рядом целая индустрия мобильных приложений выросшая с нуля за те же самые ~пять лет. В чём их успех? Придут разработчики — будут программы. Будут программы — придут пользователи. Придут пользователи — купят смартфоны.

💩Но нет. Во-первых, у каждого производителя стор свой. Ну это даже не удивляет.

💩Во-вторых, не все сторы одинаково полезны. Самые молодцы это Samsung, там всё как-то ещё отлажено было и автоматизировано. У Panasonic стор это коллекция ссылок на сервера разработчиков, и деплой туда шёл через форум. Потом форум закрыли вместе с российским представительством

💩 В-третьих, первый раз встать в стор некоторые вендоры превращали в испытание похлеще Форт Боярд. Боже, как мы намучились с LG!

Процесс добавления приложения в их стор занял у нас 6 месяцев! Я не шучу. Не знаю как сейчас, но в 2014 году это был просто цирк с конями.

Самый абсурдный баг, с которым нам завернули деплой был «Ваше приложение не открывается». После непродолжительной переписки с RTT=24 часа выяснилось, что они взяли ссылку на M3U плейлист и пытались установить её на телевизор.
notion image

Локальный мем: Разработчик SmartTV должен уметь разговаривать с Корейцами. Мы даже в вакансиях это писали. Сейчас, наверное, неполиткорректно звучит, мда.

💩Очень частый баг на ревью связан с сетевыми проблемами. Видеоконтент на серверах в России. Тестировщик с телевизоров в Корее. Картинка рассыпается. 🤯 Серьёзно, это до сих пор происходит, и что делать с этим — непонятно. Хоть CDN поднимай в Корее.

💩 Ещё классный казус: приложение показывает рекламу, это указано в карточке в сторе. Но т.к. рекламодателей в Корее у нас нет, то на тестировании реклама не показывается. А-та-та, почините, у вас реклама сломалась.

В итоге, на подсети вендора настроено и своё вещание, и фейковая реклама.

Ревью могут завернуть из-за бага, который в прошлый раз не посчитали критичным.🤷‍♂️ Опять похвалю Samsung — у них всё чётко структурировано, каждому багу задаётся приоритет, и он не меняется. Минорные баги править не обязательно, релиз пройдёт с ними. Работа чере web-интерфейс.

💩Взрывает мозг отчёт о багах от LG (кажется до сих пор так), приходит письмо со вложенным Excel, в котором огромная плохо скролящаяся таблица с очень мелким текстом, в которую встроенны видео с воспроизведением багов.
notion image

В общем, на процесс деплоя в стор надо закладывать месяц-два. Я не разрабатывал под мобилки, но вроде там быстрее этот процесс. Расскажите, кто в курсе.

Есть чит (как и в мобильных сторах), задеплоить приложение-пустышку, которая будет редиректить на сервер разработчика с актуальной версией приложения. Но за такое могут и забанить.

Вендоры страсть как хотят держать руку на пульсе и контролировать качество приложений. Даже Panasonic, у которого стор де факто и устроен как коллекция ссылок на наш сервер, хочет тестировать свежие версии предварительно.

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

Думаю, теперь вы понимаете, почему для SmartTV так мало приложений. Писать сложно, деплоить долго, сплошной геморрой.

🔥Тред (Андрей Нагих)
👨‍💻Написание приложений. Когда приспособился отлаживать, когда пролез в стор, остаётся заниматься разработкой. И тут есть свои сложности, но уже более дельные.

Чем принципиально телевизор отличается от всех остальных платформ? Мы управляем телевизором при помощи пульта. Такое управление называют D-Pad: это кнопки курсора, и в придачу ok и return. (STB кстати сюда же относятся)

Это драматически меняет UX, и UI вместе с ним. Во-первых, пользователь не может просто кликнуть по элементу. Он должен сначала подвести к нему фокус. А для этого, фокус надо визуализировать.

Писать это приходится руками, т.к. web платформа такого не предлагает. Мы пытались скрестить фокус с tabindex, но эксперимент провалился, это разные вещи.

Ещё одна проблема c рамкой фокуса: как выбрать следующий элемент, когда мы нажимаем кнопку курсора. Элементы вообще говоря могут быть расположены так, что выбор будет неочевиден.

Кстати именно поэтому на телевизоре невозможно пользоваться ванильным Android. Да, экран переходит в альбомную ориентацию, приложения перерисовываются, он это умеет со времён планшетов. Но никто не тестирует приложения на управляемость с D-pad.

Даже в приложениях Гугла есть места где фокус становится невидимым, или скачет как угорелый по экрану, перемещаясь крайне нелогично. Говорят, в AndroidTV с этим лучше. Я на это надеюсь. Иначе, стоило огород городить.

Дальше. Для ввода текста нужна экранная клавиатура. Писать её тоже придётся самим. Есть платформы, где можно позвать системную, и это было бы неплохо (стандартные контролы всегда лучше). Но для других всё равно придётся рисовать.

Ввод текста в SmartTV это просто боль. ⌨️Кнопки пульта нажимаются вязко. ⌨️ИК сигнал может улететь не туда. ⌨️При вводе есть задержка. Всё это приводит к пропускам букв, и одновременно повторам. А до backspace надо ещё докликать! 🤯

Поэтому мой лайфхак при разработке: подключать к телевизору или приставке USB-клавиатуру и мышь. Не знаю почему, но не все до этого додумываются.

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

Кстати это работает и в другую сторону. Желательно, чтобы периферия у вас всё таки работала, если кто-то её всё таки подключит. Например, поначалу у нас поля ввода принимали только цифры. Была плохо написана обработка клавиш, т.к. на пульте нет букв.

Радует, что проблема не только на смартах, но и в Android приставках, а значит её решает больше компаний. И индустрия идёт в сторону голосового ввода.

В приставках Электронного города, которые тоже делает Инетра, пульт помимо ИК цепляется по Bluetooth. И микрофон встроен прямо в пульт. На приставке работает распознавание голоса в команды. В сумме получается неплохо.

Но я отношусь к голосовому вводу скептически. Он требует отдельного UX и добротной ML под капотом. Нельзя просто отправить аудио гуглу, надо ещё найти команду и аргументы в тексте, который он вернёт.

Мне больше нравится идея спаривания STB с приложением на смартфоне. Например, у приставок Eltex есть такое. Команды передаются по сети, т.е. с гарантией доставки. Клавиатура — ваша привычная с телефона. Но на SmartTV я такого ещё не видел.

Или более высокоуровневое приложение-компаньон в котором не элементы управления, а, например, дубль каталога фильмов. При выборе фильма, просмотр запускается на ТВ. Например так умеет Youtube.

🔥Тред (Андрей Нагих)
@jsunderhood Самое невыносимое — когда у новых телевизоров появляются особенности, которые не описывают в документации. И просьбу рассказать подробнее они тоже могут проигнорировать. — А где это в документации? — Ну, нету. vc.ru/rt/80095-tv-ap…
Прекрасная статья. Коллеги познали эту боль. 🤗 twitter.com/burnmthfck/sta…

Пятница


🥳Поздравляю всех программистов, с днём программиста (13 сентября), всех тестировщиков, с днём тестировщика (9 сентября), а дизайнеров — с днём дизайнеров (тоже 9 сентября)!🍾

Воскресенье


@jsunderhood Два месяца заняло выпустить к ним приложухе в этом году, чтобы поддержать ТВ начиная с 2016 года. Самый ад с эмуляторами, старые версии не найти. Использовали Browser Stack, но и это иногда не помогало.
Про стор LG. twitter.com/dipiash/status…

Завершить неделю хочу рассказом о Новосибирске. 🏡Достопримечательности 💻IT сфера 🙋‍♂️Сообщества

Как следует из названия, Новосибирск находится в Сибири. (Не путать с Новороссийском 😃) 🌲🐻❄️Город носит неофициальный статус столицы Сибири и официальный статус центра Сибирского федерального округа.

Несмотря на свою удалённость от столиц, Новосибирск это 3-й город России по населению. Здесь живёт более 1.6 млн. людей.

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

🎭В городе 9 театров, филармония, проходят различные фестивали. Культурная жизнь идет. 🏦В сфере образования тоже есть что выбрать: 13 университетов, 5 академий, 13 институтов. 🏅Есть хоккейная команда, футбольная, и чего только нет у нас в спорте. Карелин, Поздняков, все наши.

Программистов готовят в НГУ, НГТУ (АВТФ и ФПМИ), СибГУТИ, СГУПС. Есть близкие специальности в НГУЭУ и НГПУ. Для меня загадка, куда они деваются. Каждый год выпускается больше сотни программистов, но работать всё равно некому.

👩‍🔬 Академ В конце 50-х годов на удалении от города был построен легендарный теперь Академгородк. Там собрано огромное количество научных институтов, Новосибирский Государственный Университет, а теперь и куча IT фирм.

В Академгородке работал легендарный академик Андрей Ершов — один из первых программистов СССР. Он внёс неоценимый вклад в развитие информатики в СССР в целом, и в Новосибирске в частности.

Одно из направлений деятельности Ершова была организация обучения школьников информатике. Возможно, именно это заложило твёрдый фундамент IT в Новосибирске.

Кстати Ершов дружил с Джоном Маккарти (LISP) и Дональдом Кнутом (TAOCP). Они даже посещали СССР по его приглашению.

В 2010-х в Академгородке построили Технопарк. Центр развития инноваций. И его здание в виде «Гусей» стало неофициальным символом Академа.
notion image

Всё это делает Новосибирск уникальным местом для IT. Ещё с конца 90-х годов стало открываться много фирм в Академгородке, и сейчас там очень высокая их плотность. Из-за удалённости академгородка (20 км), крупные компании открывают по 2 офиса: один в городе, один в академе.

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

Из крупных или тех, что на слуху у нас: 2ГИС, Яндекс, ЦФТ, Plesk, JetBrains, Movavi, СКБ Контур, НГС, СберТех, Новотелеком, S7 IT, Тензор, True Engineering, Pooshwoosh, Drom... Всех не упомнишь — компаний действительно много.

Каждый год, вот уже 10 лет весной проходит конференция CodeFest. Рассказывать о нем бессмысленно, это прекрасный праздник для всех ITшников. Приезжает куча народа со всеей Сибири и других мест. codefest.ru

Года три назад к нему добавился DevFest от GDG Novosibirsk. Эта конференция больше ориентирована на студентов и держит более низкие цены. gdg-siberia.com/ru/

Второй раз проходил Highload++ Siberia. Конференции Бунина идут в регионы. highload.ru/siberia/2019

Проходят также конференции по маркетингу (Груша) 2019.grushaconf.ru Есть продуктовая конференция ProductCamp. productcamp.ru/novosibirsk

🙋‍♂️Сообщества Меня очень радует то, как у нас развились сообщества связанные с IT за последние несколько лет.

Моя личная боль в том, что когда я начинал изучать программирование (1999) информацию было сложно достать, единомышленников было сложно найти. И если с информацией дела наладились примерно к 2005-2006 (слава безлимитному интернету). То с общением было туго.

Первый CodeFest состоялся только осенью 2010. Его прототип, DevPoint — весной 2010. И это было событие! Организаторы планировали тихий междусобойчик на 30 человек. А за 4 дня зарегистрировалось 400! Можете представить себе запрос назревший к тому времени!

Чуть не забыл «Сибирские Интернет Недели». В 2018 году прошли 12 раз. А это значит, что они должны были быть до DevPoint. К сожалению, на сайте нет информации с какого года они проходят. sibinetweek.ru

Это всё организованные конференции, проходящие раз в год. А вот с сообществами, проводящими регулярные встречи было туго года до 2014.

Именно тогда я первый раз пришел на DevDay — инициативу от 2ГИС. Встречи проходили на разные темы, но довольно редко.
notion image

В 2015 сотрудник 2ГИС Денис Речкунов организовал JSib, сообщество по JS, за что ему огромный респект. Денис начал толкать паравоз независимых сообществ, но уехал, и начинание начало глохнуть. vk.com/jsibnsk
notion image

Подхватил знамя Леонид Кальнеус — организовал Google Developer Group Novosibirsk. Они проводили встречи на широкий спектр тем, и регулярнее, чем DevDay.
notion image

Как это бывает, Леонид тоже уехал, но GDG продолжили проводить Ден и Кир под его чутким руководством.

В тот момент из GDG выделилось сообщество DEV NSK, движимое силами прекрасной Саши Кукиной и Олега Федосеева. Идея состояла в том, чтобы уйти от бренда Google и проводить встречи на ещё больше тем.
notion image

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

К 2018 году сообщества посыпались как из рога изобилия — многие компании захотели сделать своё, чтобы обозначить себя на рынке. Я не считаю это плохим. Больше сообществ, больше докладов, больше докладчиков. Это развитие софт-скиллов и возможности для нетворкинга.

В 2015 году главная проблема организатора сообществ была не поиск докладчика, а поиск площадки для проведения. Денису помогал в этом 2ГИС, но всех они вместить не могли.

GDG до раскола, и DEV NSK после традиционно проходили в НГС. GDG перехал в академ в около-технопарковскую тусовку.

Но главным катализатором этого движения стало открытие в 2018 году Лектория-бара ПОТОК. Говорю об этом с большой гордостью, т.к. его открыла Инетра, компания, где я работал. Подробнее в новом треде.
notion image

🔥Тред (Андрей Нагих)
Про ПОТОК. Это лекторий-бар с трибуной на 250 человек. Здесь можно одновременно провести лекцию и выпить крафтового. Митап переходит в афтепати автоматически.🍻 potok.city

Фишка ПОТОКа в том, что если вы делаете открытое мероприятие в часы работы бара, то вы, как организатор, ничего не платите. Т.е. любой может прийти и сделать свой митап. Если конечно найдётся свободная дата — всё расписано на 2 мес. вперед! vk.com/potok_citycent…

На площадке ПОТОКа сейчас проходят не только IT мероприятия, но и эксперименты с театральным форматом, просмотр концертов, гуманитарные лекции, научный юмор, музыкальные фестивали. Посмотрите афишу и фотографии в ВК.

Чтобы два раза не вставать, расскажу про второй офф-лайн проект Инетры — коворкинг ПРОСТОР. На базе него можно провести небольшой платный семинар, т.к. за аренду уже надо будет заплатить. Там классный ремонт, и хорошее оборудование. prostor.work
notion image

Ну и коворкинг есть коворкинг, само собой. Можно приходить, работать, есть кухня, терасса, норы, телефонные будки, душевая, курилка, принтеры... UX лаборатория даже и VR комната.

А сейчас я попробую смертельный номер🦁🔥 — перечислю сообщества, которые у нас есть. Сначала независимые:

GDG NSK Чат: t.me/GDGNsk meetup.com/ru-RU/GDGNsk/ WebDev QA Blockchain Android Go Google I/O

DEV NSK Чат: t.me/DEVNSK meetup.com/ru-RU/DEVNSK/ Frontend Backend QA HR





Сообщество Техписателей Write the Docs Siberia meetup.com/ru-RU/Write-th…

Сообщество инженеров Конвеерум konveerum.ru vk.com/konveerum

TechTalks @NSU vk.com/techtalksnsu

Чат продуктологов Product Camp t.me/productcampnsk

Чат тестировщиков QA Сибирь t.me/qa_siberia

Kubernetes Novosibirsk meetup.com/ru-RU/Kubernet…


Functional Programming Specialty meetup.com/ru-RU/Function…


Hyperledger Novosibirsk meetup.com/ru-RU/Hyperled…

Группа ПОТОКа для IT мероприятий meetup.com/ru-RU/Лекторий… PhotoHack NSK Event meetup Soft Skills meetup Webdev митап в ПОТОКЕ Lean design Сообщество аналитиков Новосибирска UX-митап

Много митапов сделали компании. И это классно, больше движухи!

DevDay 2ГИС devday.ru

Plesk meetups Чат: t.me/NSKITevents meetup.com/ru-RU/plesk-ev… трансляции конференций QA meetup Kubernetes Node School

JS Party NSK Яндекс Чат: t.me/jsparty_nsk

Яндекс периодически делает разные тематические митпаы: events.yandex.ru/?q=%7B%22selec… Я.Субботник по разработке интерфейсов Python Party JavaScript Party C++ Party Droid Party ClickHouse Meetup

ЦФТ проводит кучу мероприятий и мини-конференции. team.cft.ru/events meetup.com/ru-RU/itevents… Master Support Database Meetup Atlassian User Group TestTrend

MobiFest ЦФТ Конференция о мобильной разработке. Следующая 21 сентября, вход бесплатный. Чат: t.me/mobifestchat mobifest.cft.ru

DataFest Siberia ЦФТ Конференция о Machine Learning Следующая 28 сентября, вход бесплатный. Пройдет в ПОТОКе! datafest.ru/siberia/ team.cft.ru/events/125

Nsk Tech Talks СКБ Контур eventskbkontur.timepad.ru/events/

K8s meetup PooshWoosh Чат: t.me/k8smeetup pushwoosh.ru/k8s

Paymentwall Novosibirsk meetup.com/ru-RU/Paymentw…

MD-community Roowix/MindDesign md-team.ru/rday Чат: t.me/rnd_community meetup.com/ru-RU/md-commu…

One Inc. Developers Group meetup.com/ru-RU/oneinc/

Sibito! Magora Systems Сообщество в сфере заказной разработки meetup.com/ru-RU/sibito/

Фух! Вроде всё. Несколько сообществ ранее собирались регулярно, но давно молчат.

Golang NSK meetup.com/ru-RU/GolangNS… К сожалению, не было встреч с 2018 года.

NodeSchool Novosibirsk Проводил мой коллега Женя Карагодин @ekaragodin meetup.com/ru-RU/nodescho…

PyNSK Сообщество по Python, регулярно проходило, пока Саша не уехал. 😅 vk.com/pynsk pynsk.ru meetup.com/ru-RU/ru_pynsk

Ну и как не упомянуть JSib Дениса Речкунова @pragmader vk.com/jsibnsk

Необычный пока для НСК формат: завтраки от Open Data Science проходят раз в неделю попеременно в академе и городе. Подробнее в их Slack. ods.ai

Скромно пристрою в конец этого списка два своих чатика. Они пока маленькие, но мы растём.

AngularNSK t.me/angularNSK

AWS@NSK t.me/awsNSK

За появлением новых сообществ можно следить на Meetup meetup.com/ru-RU/find/?al…

А также в чате NSK IT events Его ведут мои коллеги из Plesk. t.me/NSKITevents

За рынком Digital-разработки НСК пристально следит коллективный аккаунт «What is IT?» и комментирует с непременной «перчинкой» 🌶️/💩 t.me/whatis_it

😱Чуть не забыл самое необычное IT-сообщество Новосибирска! Borsh NSK Ребята собираются вместе и... варят Борщ! t.me/borshnsk
notion image

Submeet в Электронном городе Frontend Backend Enterprise Сообщество от коллег из Новотелекома. Новотелеком — давний партнёр Инетры. meetup.com/ru-RU/Submeet_…

🔥Тред (Андрей Нагих)
Второй раз в этом году ЦФТ будет проводить Mobifest — бесплатную ❗️ конференцию по мобильной разработке. На отличной площадке — Лектории-баре ПОТОК. mobifest.cft.ru

Ещё одна конференция ЦФТ в партнёрстве с Open Data Science — DataFest. Конференция по Data Science и Machine Learning. Я был в прошлом году — качество докладов запредельное. Хочется всё это изучать, изучать... datafest.ru/siberia/

🔥Тред (Андрей Нагих)
Если вы собираетесь в Новосибирск, у нас есть что посмотреть. В городе множество достопримечательностей: улочек с интересными историями, необычных домов, театров, храмов, монументов, музеев.

Мне очень нравится ул. Богдана Хмельницкого, особенно осенью в листопад. Мне повезло жить неподалёку.
notion image

Новосибирский зоопарк это гордость города. Там ведут уникальную работу по разведению редких животных. zoonovosib.ru

Театр оперы и балета, в самом центре города, это самый большой оперный театр России.
notion image

А в этой чёрной высотке, на фоне находится офис Инетры, лекторий-бар ПОТОК и коворкинг ПРОСТОР. Гуляя по городу забегайте к нам посмотреть.
notion image
notion image
notion image

Наш метромост тоже достопримечательность, его длинна 2145 метров — он самый длинный в мире!
notion image

А ещё есть памятник светофору 🚦 и памятник лабораторной мыши 🐁

А буквально на этой неделе, в центральном парке запустили новый цвето-музыкальный фонтан без чаши. Очень красиво, нам с семьёй очень понравился. Кто-то уже успел снять видео youtube.com/watch?v=H8p_Tl…

О других достопримечательностях можно почитать например здесь. tonkosti.ru/Достопримечате…

А ещё, у нас бывают морозы до -45 °C ❄️ Если всегда хотели это испытать, то приезжайте в январе-феврале. ⛄️

Кстати зимой очень солнечно. Чем холоднее, тем солнечнее. 🌞 Вообще в году очень много солнечных дней. Это вам не СПБ и не Москва. 😃

🔥Тред (Андрей Нагих)
Моё дежурство заканчивается. С вами был Андрей Нагих @andrnag. Спасибо вам, что читали. Подписывайтесь, буду продолжать рассказывать интересности у себя. Если что, пишите в телеграм: t.me/andrnag 🙏

Если хотите устроить что-то в ПОТОКе пишите сразу Варе Косман, она «хозяйка медной горы». Варя хорошая. :-) t.me/Fresera

🔥Тред (Андрей Нагих)

Понедельник


Привет! Сегодня с вами @davert. Я разработчик из Киева, с опытом PHP/Ruby/JS. Последние 8 лет пишу свои фреймворки для тестирования @codeception и @codeceptjs. С них и живу. Потому будем говорить о тестировании в JS, об опенсорсе, конфах и т.п.

Как я дошел до такой жизни? Когда занимаешься опен-сорсом в какой-то момент чувствуешь, что смысл твоей работы именно в нем. Я сделал выбор и решил заняться полностью своими проектами. Это дало мне новый опыт - я стал консультантом и тренером. Пиздец challenge для интроверта 😃

Ссылки