# Понедельник 58 твитов
Всем привет! На этой неделе с вами Андрей Нагих @andrnag.
Я из Новосибирска. Работаю в компании Plesk (@Plesk), ра… twitter.com/i/web/status/1…
5:27Начнём с WebAssembly и моего традиционного вопроса: каков ваш опыт с этой технологией?
5:35Те, кто уже использует, делитесь своим юзкейсом в реплаях.
В Инетре мы вывели Wasm в продакшн для того, чтобы порт… twitter.com/i/web/status/1…
5:41Итак, WebAssembly. Как мы видим из опроса, очень мало людей используют его в продакшене. Это не удивительно, т.к. т… twitter.com/i/web/status/1…
7:59Если посмотреть в корень, то Wasm это двоичный формат файла, в котором мы можем сохранить байткод для выполнения на… twitter.com/i/web/status/1…
7:59Что это нам даёт?
- Мы можем генерировать этот байткод из языков системного программирования (С, C++, Rust).
2.… twitter.com/i/web/status/1…
7:59Два слова об asm.js. Это прародитель Wasm, эксперимент компании Mozilla, целью которого было получить возможность з… twitter.com/i/web/status/1…
7:59Этот проект выстрелил, у него даже появилась неплохая поддержка в браузерах caniuse.com/#search=asm.js. Но стали очеви… twitter.com/i/web/status/1…
7:59Организуя проект WebAssembly Mozilla изначально привлекла к написанию спецификации всех основных вендоров браузеров… twitter.com/i/web/status/1…
7:59Примечательно, что весь процесс написания спецификации шёл открыто на GitHub, и любой мог наблюдать за ним или поуч… twitter.com/i/web/status/1…
7:59Сейчас работа продолжается так же на GitHub. В 2017 году в браузеры зарелизили MVP. Около года собиралась обратная… twitter.com/i/web/status/1…
7:59Браузеры очень быстро реализовали поддержку, а сейчас она просто великолепна: caniuse.com/#search=webass…
Мы начали ре… twitter.com/i/web/status/1…
7:59Что умеет WebAssembly?
Во-первых, это цель компиляции. Нет смысла писать его руками (хотя такая возможность есть).… twitter.com/i/web/status/1…
8:33Alon ключевая фигура в этой технологии, именно он был основной движущей силой проекта asm.js, приведшего к Wasm. И… twitter.com/i/web/status/1…
8:33Наш проект Bytefog b2b.peers.tv/bytefog написан как раз на C++, поэтому нашим основным инструментом был как раз… twitter.com/i/web/status/1…
8:332⃣ Очень активно развивается поддержка в Rust. Это не удивительно, т.к. и язык, и технология авторства Mozilla. На… twitter.com/i/web/status/1…
8:33Также, в экосистеме Rust пишутся файлы биндингов к Web API. Биндинги нужны, если мы хотим из контекста Wasm вызвать… twitter.com/i/web/status/1…
8:33Команда Rust использует для написания биндингов язык WebIDL (тот же, что и W3C для спецификаций браузерных API).
E… twitter.com/i/web/status/1…
8:33В своём проекте мы использовали именно Embind, и я расскажу о его возможностях подробнее позже.
8:333⃣ Начиная с версии 1.11 Go поддерживает Wasm.
Эта поддержка до сих пор экспериментальна. И на выходе получаются… twitter.com/i/web/status/1…
8:33Для сравнения, весь наш код Bytefog уложился в 2Mб.
Очень классно, что .wasm файлы отлично жмутся gzip: на выходе… twitter.com/i/web/status/1…
8:334⃣ Симметрично, хотелось бы поддержки Kotlin. И некоторые подвижки в этом есть. Статья 2018 года… twitter.com/i/web/status/1…
8:595⃣ Есть эксперименты с поддержкой Java. Но все они пока не достигли зрелости. Ключевые слова: TeaVM, JWebAssembly, Bytecoder
8:596⃣ Гораздо лучше дела у .Net, в репозитории Mono есть примеры как скомпилировать в WebAssembly. github.com/mono/mono/tree…
8:597⃣ Многие спрашивают: «Можно ли JavaScript скомпилировать в WebAssembly». Идея звучит странно, но есть команда, реа… twitter.com/i/web/status/1…
9:02Есть ряд интерпретируемых языков (например Lua), которые тоже работают в Wasm. Но это достигли тем, что скомпилиров… twitter.com/i/web/status/1…
9:08Реестр поддерживаемых языков ведётся на GitHub github.com/appcypher/awes… Там можно взять ссылки на те проекты, что я… twitter.com/i/web/status/1…
9:08@ruGreLI @jsunderhood Память по-умолчанию уравляется через гибрид ARC и GC (для циклических ссылок), т е автоматиче… twitter.com/i/web/status/1…
Макс — один из мэнтейнеров AssemblyScript, и очень круто, что мы можем задать ему вопросы по-русски. Спасибо за доп… twitter.com/i/web/status/1…
@ruGreLI @jsunderhood Память по-умолчанию уравляется через гибрид ARC и GC (для циклических ссылок), т е автоматиче… twitter.com/i/web/status/1…
9:24
@jsunderhood В Kotlin сейчас идет работа по написанию собственного wasm бекенда, минуя LLVM (который и позволял ком… twitter.com/i/web/status/1…
Спасибо за отличное дополнение! Кстати, у Сергея есть чат по WebAssembly, где можно обсудить вопросы подробнее:… twitter.com/i/web/status/1…
@jsunderhood В Kotlin сейчас идет работа по написанию собственного wasm бекенда, минуя LLVM (который и позволял ком… twitter.com/i/web/status/1…
12:34
Также, подписывайтесь на его канал t.me/juliarderity с новостями стандартизации JS, Wasm и Web API. Сергей вс… twitter.com/i/web/status/1…
12:34Итак, наш исходный код мы компилируем в байткод WebAssembly.
Этот байткод портативный, т.е. не зависит от архитект… twitter.com/i/web/status/1…
14:20Перед запуском браузер снова компилирует его в другой байткод — своей виртуальной машины JS.
🚀 Важно сделать это к… twitter.com/i/web/status/1…
14:20И медленный, выдающий оптимизированный код. Он работает уже после старта приложения, и нагорячую подменяет байткод. v8.dev/blog/liftoff
14:20Кстати в FireFox такая архитектура появилась раньше, чем в Chrome. Lin Clark отлично написала почему это важно hacks.mozilla.org/2018/01/making…
14:20Lin Clark @linclark это ещё один человек в мире Wasm за которым обязательно нужно следить. Она пишет великолепно ил… twitter.com/i/web/status/1…
14:20🚀 Ещё одна фишка для ускорения старта — это потоковая компиляция. Супер полезная вещь: представьте, ваш код начинае… twitter.com/i/web/status/1…
14:20🚀 И это ещё не всё. В браузерном API разделены стадии компиляции модуля и его инстанцирования. Это значит, что вы м… twitter.com/i/web/status/1…
14:20Мы поговорили о том, что может Wasm и какой он классный. Но, как и у любой технологии, у него есть ограничения.
14:47🛑Как я уже говорил, в Wasm нет сборщика мусора, поэтому либо вы используете язык с ручным управлением памяти, либо… twitter.com/i/web/status/1…
14:47Но работы по нему ведутся поэтапно. И пропозал ReferenceTypes, который нужен для реализации GC, уже на 3 стадии. Эт… twitter.com/i/web/status/1…
14:47🛑Другая особенность: только 32 битный доступ к памяти. Это оставляет нас с жалкими 4Гб памяти возможной для использ… twitter.com/i/web/status/1…
14:47🛑 Ещё одна проблема, это треды. Изначально их поддержка была реализована в Emscripten, но она использует SharedArra… twitter.com/i/web/status/1…
14:47На сегодняшний день поддержка вернулась только в Chrome. Ожидается поддержка в Edge. FF пока осторожничает.
14:47🛑Пожалуй, главная неприятность, которая нас ждёт, это то, что Wasm исполняется внутри песочницы браузера. Поэтому к… twitter.com/i/web/status/1…
15:19Все эти возможности нам придётся реализовать теми средствами, которые уже есть у браузеров. Далеко не всегда удаётс… twitter.com/i/web/status/1…
15:19Например, до tcp или udp сокета не добраться никак.
Мы можем посылать HTTP запросы.
Или работать по WebSocket.
Или… twitter.com/i/web/status/1…
Наш p2p прокси-сервер Bytefog, как вы понимаете, основательно полагается на сеть. И нам пришлось полностью передела… twitter.com/i/web/status/1…
15:19При портировании приложения больше половины времени (8 мес.) у нас ушло на рефакторинг C++ кода. Мы выделяли интерф… twitter.com/i/web/status/1…
15:19🛑Очень важный и для многих неожиданный недостаток — Wasm не ускорит ваш код.
Есть популярное мнение, что если взят… twitter.com/i/web/status/1…
15:34Мы провели небольшой эксперимент: реализовали несколько фильтров обработки изображения на JS и C++. При компиляции… twitter.com/i/web/status/1…
15:34Я тут по ходу публикую слайды из своего доклада о нашем опыте внедрения WebAssembly.
Для нетерпеливых сразу опубли… twitter.com/i/web/status/1…
15:36Продолжая о производительности.
В доклад не попало, но мы сделали ещё один замер, С++ код в нативе (без Wasm, и бе… twitter.com/i/web/status/1…
15:56Из всего этого я делаю такой вывод. Современные виртуальные машины JS настолько оптимизированы, что простой арифмет… twitter.com/i/web/status/1…
15:56В случае Wasm браузеру проще это сделать, т.к. код уже разложен по полочкам, использует строгие типы и сам управляе… twitter.com/i/web/status/1…
15:56. @jsunderhood а есть какая-то стоимость у interop между wasm-js? Есть ми порог, после которого лучше выкинуть что-… twitter.com/i/web/status/1…
С чем на самом деле возникают сложности, это с вызовами между контекстами JS и Wasm.
Сёва задал очень правильный в… twitter.com/i/web/status/1…
. @jsunderhood а есть какая-то стоимость у interop между wasm-js? Есть ми порог, после которого лучше выкинуть что-… twitter.com/i/web/status/1…
15:56
Любой такой вызов имеет накладные расходы вызванные устройством браузера.
Также Emscripten добавляет к ним при про… twitter.com/i/web/status/1…
15:56Именно поэтому сложно сделать объективный benchmark.
Также, браузеры постоянно работают над снижением накладных ра… twitter.com/i/web/status/1…
15:56В нашем случае, вычислительного кода было совсем мало, и выполнялся он почти мгновенно.
Ограничителем производител… twitter.com/i/web/status/1…
15:56# Вторник 57 твитов
Вчера мы поговорили о том что такое WebAssembly, а сегодня я хочу рассказать о том, какие задачи с помощью него мож… twitter.com/i/web/status/1…
10:54🛠 Wasm широко применяется в игровых движках. Unreal, Unity и Unigene все имеют возможность скомпилировать игру под… twitter.com/i/web/status/1…
10:54В Emscripten отдельный упор сделан на поддержку 3D-графики. Вы пишете привычный код на C++ и он превращается в необ… twitter.com/i/web/status/1…
10:54🛠 Можно обрабатывать данные пользователя прямо в браузере, не посылая на сервер. Например:
* изображения
* звук
* видео
* загруженные файлы
🛠 Можно запускать обученные нейронные сети на стороне пользователя. Это позволит работать с данными с низкой задерж… twitter.com/i/web/status/1…
10:54🛠 Кусочек Chrome, распознающий язык текста доступен как Wasm-библиотека. И её можно приспособить для своих задач. П… twitter.com/i/web/status/1…
10:54🛠 Можно проверять орфографию с помощью HunSpell. npmjs.com/package/hunspe…
🛠 Или распознавать речь на PocketSphinx github.com/syl22-00/pocke…
10:54🛠 Первое правило криптографии: «Не пиши свою криптографию». Если не хватает встроенных возможностей Web Crypto API,… twitter.com/i/web/status/1…
11:18🛠 Очень классный юзкейс подсказал Андрей Карпушин @reven86. Его сервис wotinspector.com/en/replays/ позволяет анализиров… twitter.com/i/web/status/1…
11:43Таким образом, тяжёлые вычисления выполняются на компьютерах пользователей. Каждый пользователь обрабатывает только… twitter.com/i/web/status/1…
11:43🛠 В мире существует куча библиотек, написаных за многолетнюю историю C и C++. Можно попробовать компилировать их в… twitter.com/i/web/status/1…
11:43Уже сейчас доступны в виде модулей Wasm:
* видео-конвертер FFmpeg
* аудио-кодек Opus
* компьютерное зрение OpenCV… twitter.com/i/web/status/1…
🛠 Всё это позволяет унести к пользовтателю ту работу с данными, которая обычно делалась на сервере.
Что в итоге:… twitter.com/i/web/status/1…
11:43🛠 Модули Wasm можно использовать и для Node.js
Здесь очень круто играет портативность Wasm.
Сейчас нативный модул… twitter.com/i/web/status/1…
11:43Это список платформ, которые поддерживается в node-sass — библиотеке для компиляции SASS.
Для каждого релиза нужно… twitter.com/i/web/status/1…
11:43Если тот же модуль скомпилировать под Wasm, то на каждый релиз будет достаточно одного бинарника.
Вот тут уже проб… twitter.com/i/web/status/1…
11:43🛠 Для приложений, написанных на asm.js Wasm может предложить значительное ускорение запуска.
Популярный онлайн-ред… twitter.com/i/web/status/1…
11:43🛠 Всеми любимая VSCode, хоть и работает на Electron, использует нативные модули для критичных к производительности… twitter.com/i/web/status/1…
11:43🥳 Настало время крутых демок! 🎉
AutoCAD портировал свою 30-летнюю кодовую базу в браузер с помощью WebAssembly.
Т… twitter.com/i/web/status/1…
11:51Почитать и посмотреть об опыте Autodesk
through-the-interface.typepad.com/through_the_in…
Кстати, свой релиз они представляли на Google I/O… twitter.com/i/web/status/1…
11:51⌨️Как на счёт командной строки с настоящим Linux прямо в браузере?
Fabrice Bellard, автор QEMU, запустил его в бра… twitter.com/i/web/status/1…
11:59🖥️🖱️Но Fabrice этого показалось мало, и он запустил X Window.
Там даже можно открыть браузер и... сходить на local… twitter.com/i/web/status/1…
12:04🤯Что может быть ещё более сумасшедшее?
🥁 Windows 2000, собственной персоной, на виртуальном компьютере, внутри бра… twitter.com/i/web/status/1…
12:08🎥Видео-редактор на WebAssembly.
Можно наложить разные фильтры в реальном времени. Можно сравнить реализацию на Was… twitter.com/i/web/status/1…
12:13🚀 Windows 95 как приложение Electron.
Потому что мы можем.
github.com/felixrieseberg… pic.twitter.com/XytxNOdN11
12:15😱 We need to go deeper!
Трёхмерный гараж, с виртуальным компьютером, на котором работает реальная Windows 3.11, в… twitter.com/i/web/status/1…
12:19⚽️Список, собираемый мэнтейнерами Emscripten.
Игрушки:
* Doom
* Quake 3
* Doom 3
* Dune II
* и куча других.
Графи… twitter.com/i/web/status/1…
12:26В общем, можете дальше сами фантазировать над применением WebAssembly.
Думаю, демки хорошо иллюстрируют его возмож… twitter.com/i/web/status/1…
12:31❓ Спрашивают, почему Wasm c нами надолго?
Было много попыток построить второй рантайм в браузере:
* ActiveX
* Jav… twitter.com/i/web/status/1…
WebAssembly основывается на той изоляции, которая работает уже много лет в браузере.
Да, из-за этого есть проблемы… twitter.com/i/web/status/1…
12:57❓Именно поэтому WebAssembly не пришёл, чтобы заменить JS. Это также частый вопрос.
Для запуска .wasm файла как мин… twitter.com/i/web/status/1…
12:57Нужен «клеевой код» на JS, который пробрасывает в Wasm встроенные API браузера и ваши объекты и функции.
При компи… twitter.com/i/web/status/1…
12:57Вообще, Emscripten работает как «Browserify для C++», т.к. по максимуму старается полифилить нативные API:
* STDIN… twitter.com/i/web/status/1…
12:57Также большая часть Emscripten, это тот самый биндинг сущностей из двух миров.
Есть три способа это делать:
* ccall/cwrap
* WebIDL
* Embind
ccall/cwrap не умеет в объекты, это только для простых C-функций. Чаще всего встречается в tutorials для начинающих.
12:57WebIDL это язык описания интерфейсов. Умеет много чего, и похоже, что сейчас это самый перспективный вариант. Я уже… twitter.com/i/web/status/1…
12:57Мы взяли Embind, т.к. он лучше лёг на нашу кодовую базу. С помощью жёсткой магии шаблонов C++ он предоставляет впол… twitter.com/i/web/status/1…
12:57Можно пробрасывать:
* функции
* классы
* интерфейсы
* статические методы
* value objects
* сырые указатели
* умные… twitter.com/i/web/status/1…
А также довольно логично биндит встроенные типы данных C++ в типы данных JS.
12:57Честно говоря, писать биндинги поначалу это очень больно.
* Синтаксис непривычен ни плюсовикам, ни фронтендерам, л… twitter.com/i/web/status/1…
Но задачу свою он решает, и потренировавшись на кошках, можно им пользоваться.
Документация есть, но не самая полн… twitter.com/i/web/status/1…
12:57Поэтому лучше всего — смотреть в тесты Embind. Там есть такие выкрутасы, которые даже не сразу придумаешь.
Один сл… twitter.com/i/web/status/1…
12:57Сегодня хочу закончить с темой WebAssembly.
Если есть вопросы, задавайте.
Расскажу кратко про разработку.
13:19Конечно, надо как-то отлаживать. Для этого придумано текстовое представление WebAssembly .wat
Браузеры показывают… twitter.com/i/web/status/1…
13:19Можно ставить точки останова. Но не более того. Переменные теряют свои названия и типы, поэтому посмотреть можно то… twitter.com/i/web/status/1…
13:19Есть возможность сгенерировать SourceMap. Делается это с притопами, работает не всегда, надеюсь со временем ситуаци… twitter.com/i/web/status/1…
13:19В браузере выглядит завораживающе.
Плюсы внутри DevTools. Теперь мы видели всё! pic.twitter.com/ngwccE3Mwv
13:19Переменные рассматривать бесполезно, формат SourceMap их не позволяет биндить. Возможно, нас ждёт его обновление. Очень бы хотелось!
13:19Также, работает профайлер. В FF он даже разматывает имена функций. Chrome показывает показывает «мангленные». pic.twitter.com/PfEVgNkmg8
13:19Совсем недавно в LLVM появилась возможность отладки WebAssembly по-взрослому. Но это не для браузера. Подробности в… twitter.com/i/web/status/1…
13:19Я всё время говорил про использование Wasm в контексте браузера.
Немного затронул тему работы в Node.js.
Но так в… twitter.com/i/web/status/1…
13:36Это проекты:
Wasmtime wasmtime.dev
Wasmer wasmer.io
Lucet github.com/fastly/lucet/
И неко… twitter.com/i/web/status/1…
13:36Дошло до того, что WebAssembly стали называть «Новым Docker». Это жарко обсудили в одном из @radio_t
Конечно же, н… twitter.com/i/web/status/1…
13:36В результате, группа по стандартизации WebAssembly принялась за стандартизацию системного интерфейса, пока реализац… twitter.com/i/web/status/1…
13:36Тут шутки кончились. Предлагаю почитать опять же статью Lin Clark о том, почему это важно.
hacks.mozilla.org/2019/03/standa…
13:36Когда мы говорим про бразуер, то он является Host-платформой для Wasm модуля.
Когда мы говорим про системные ранта… twitter.com/i/web/status/1…
13:36Для этого ведётся работа над Interface Types proposal.
В результате этих двух вещей может появиться штука, от кото… twitter.com/i/web/status/1…
13:36# Среда 2 твита
Эти психи написали windows 95 на Javascript! И это меньше, чем спустя год после того, как мы увидели Winamp в виде… twitter.com/i/web/status/1…13:56🚀 Windows 95 как приложение Electron.
Потому что мы можем.
В дополнение к теме WebAssembly ссылка на доклад Сергея Рубанова @chicoxyzzy о внутреннем устройстве Wasm с конферн… twitter.com/i/web/status/1…
14:15# Четверг 93 твита
Кстати, сегодня у меня день рождения. 🥳3:58
📺Переходим к теме разработки для SmartTV, которой я посвятил несколько лет.
Все телевизоры сейчас, кроме самого ни… twitter.com/i/web/status/1…
15:31Если кто не знает, она позволяет запускать сторонние приложения прямо на телевизоре, без всяких приставок.
Это мог… twitter.com/i/web/status/1…
15:31Один из основных продуктов Инетры это сервис онлайн-тедевидения Peers.TV. Естественно, для нас важн… twitter.com/i/web/status/1…
15:31У нас есть сайт, приложения для мобильных телефонов и планшетов, приставки, и SmartTV мы, конечно, не собирались упускать.
15:31Сразу оговорюсь, что есть смарты на основе Android и AndroidTV. Они появились совсем недавно. В основном это бренды… twitter.com/i/web/status/1…
15:31Все SmartTV что не Android — используют web платформу.
Как бы это не было удивительно, но да, для разработки под н… twitter.com/i/web/status/1…
15:31Основные прлизводители таких ТВ это Samsung, LG, Panasonic. Есть и другие, но их доля на рынке мала.
Samsung это,… twitter.com/i/web/status/1…
15:31Исторически, Samsung первый сделал SmartTV, и их магазин приложений самый проработанный и хорошо наполнен. У меня д… twitter.com/i/web/status/1…
15:31Возможности web платформы всем нам хорошо знакомы, и управления телевизором там нет. В чём же секрет?
16:07А секрета никакого нет: также как браузеры расширяют возможности JS своими дополнительными API (такими как DOM, His… twitter.com/i/web/status/1…
16:07В любой ТВ ОС вы встретите похожий набор API:
📺 управление плеером
📺 получение данных о ТВ
📺 обработка кнопок пульт… twitter.com/i/web/status/1…
Разумеется, каждый призводитель добавляет своих уникальных возможностей в свои ТВ.
И, как водится, каждый производ… twitter.com/i/web/status/1…
16:07Вы скажете: «Им бы договориться о едином стандарте». И будете правы, и такой стандарт даже есть! Но и он не уберёг… twitter.com/i/web/status/1…
16:07📛 И это большая проблема для разработчиков!
В начале нашего пути у нас было 3 отдельных приложения: для Samsung, L… twitter.com/i/web/status/1…
16:07И в этот момент (где то в конце 2014 года) вендоры не сговариваясь объявляют о переходе на новую ОС.
Тут бы им объ… twitter.com/i/web/status/1…
16:07Итак, что мы имели на тот момент по ОС:
📺Samsung Orsay
📺LG NetCast
📺Panasonic VIERA Connect
А теперь следите за ру… twitter.com/i/web/status/1…
16:07Это было фиаско.
Количество платформ в одночасье удвоилось (бейте астрологов).
И хотя Firefox OS загнулась до тог… twitter.com/i/web/status/1…
16:07Также, у нас были планы по портированию на малопопулярные телевизоры и приставки (там тоже есть web приложения), т.… twitter.com/i/web/status/1…
16:07Думали мы не долго, идея лежит на поверхности: сделать общие интерфейсы для платформозависимых модулей и подставлят… twitter.com/i/web/status/1…
16:07На тот момент было несколько готовых реализаций такого подхода. Как правило, это были проекты таких же как мы компа… twitter.com/i/web/status/1…
16:07💎Но нашёлся среди этого настоящий алмаз. Это фреймворк BBC TAL.
Они не только реализовали такую абстракцию, но и н… twitter.com/i/web/status/1…
16:07Правда основан он на уже тогда устаревших технологиях. И я принял решение переписать наши приложеня с нуля с ES2015… twitter.com/i/web/status/1…
16:07❗️Важный урок, который я тогда вынес — революционный путь ведёт к проигрышу. Только небольшие эволюционные изменения приводят к успеху.
16:07☝️Взять всё и переписать не срабатывает почти никогда.
Позже я неоднократно слышал о похожем опыте коллег с теми же выводами.
16:07В итоге, мы смержили наши приложения, как и планировали, реализовав абстракцию платформы минимальными средствами.
16:07На что похожа разработка под SmartTV?
🔥Это просто, как ездить на велосипеде. Который горит, и ты горишь, и все гор… twitter.com/i/web/status/1…
17:06🔥 Я уже говорил, что в каждой ОС одни и те же вещи делаются по разному. А ОСей — 5 штук.
🔥 Во-вторых, документация… twitter.com/i/web/status/1…
17:06🔥 В-третьих: баги. С багами может помочь только вендор. Для этого идем на форум или в техподдержку, которые тоже ра… twitter.com/i/web/status/1…
17:06🔥 Производитель как правило предоставляет эмулятор на котором можно отлаживаться.
Не попадайте в эту ловушку! То ч… twitter.com/i/web/status/1…
17:06🔥 Там бы быстро пришли к пониманию, что отлаживать надо только на реальных устройствах. И первая проблема с ними: их нужно купить.
17:06Да, разработка под SmartTV это не дешёвое удовольствие.
Иногда везёт и производитель присылает телек, только чтобы… twitter.com/i/web/status/1…
17:06🔥 Следующая проблема с устройствами возникает не сразу: их некуда ставить. С гонкой за диагоналями, телеков меньше… twitter.com/i/web/status/1…
17:06🔥 Идея красиво развесить коллекцию телеков на стене также провалилась.
Сегодя эта конкретная модель нужна одному р… twitter.com/i/web/status/1…
17:06Самая тяжелая, кстати, была та халявная 42" плазма от Панасоника.
Современные 32" LCD — как пушинки, боишься, что его со стола сдует.
17:06🔥 Как вы поняли, телевизоров нужно много. Почему? Потому что в индустрии бытовой электроники принято обновлять моде… twitter.com/i/web/status/1…
17:06🔥 Причём старые устройства с поддержки не снимешь. ТВ это не смартфон, который меняют раз в год. Человек покупает т… twitter.com/i/web/status/1…
17:06🔥 Итак, надежды на обновление пользовательских устройств — нет. Да, приходят какие-то апдейты, но принципиально вст… twitter.com/i/web/status/1…
17:06🔥 Однажды, я попытался выяснить, что за браузер стоит на телевизоре 2014 года. Очевидно, что это разновидность WebK… twitter.com/i/web/status/1…
17:06🔥 Но даже зная это, нельзя сказать точно, какие фичи в нём будет работат, а какие нет.
Производитель вполне мог чт… twitter.com/i/web/status/1…
17:06🔥🔥🔥 И пожалуй самая-самая боль — это средства разработки.
Про те 3 старые платформы справедливо сказать, что средс… twitter.com/i/web/status/1…
17:51Мы писали утилиту, которая распечатывает объекты поверх интерфейса приложения.
JSON кстати там тоже не было, притащили полифил.
17:51Потом мы нашли чудесную штуку: WeInRe. Странное название расшифровывается как WebInspector Remote.
people.apache.org/~pmuellr/weinr…
Приблуда состоит из двух частей: js агента для приложения и серверной части с каким то древним форком WebKit DevToo… twitter.com/i/web/status/1…
17:51Несмотря на всю неказистость и глючность, она стала настоящим спасением.
Появилась консоль! Стало можно выполнить… twitter.com/i/web/status/1…
17:51🔥 Отдельное удовольствие это процесс запуска девелоперской сборки на телевизоре.
17:51Я не шучу и не преувеличиваю.
Именно так LG предлагала разрабатывать под NetCast в 2014 году.
Хотел приложить скр… twitter.com/i/web/status/1…
17:51Временами складывалось впечатление, что вендоры всей душой ненавидят разработчиков приложений.
Это сквозило из док… twitter.com/i/web/status/1…
17:51Мы конечно быстро написали служебное приложение которое строило список ссылок на все наши приложения в разработке и… twitter.com/i/web/status/1…
17:51На машине разработчика поднимался вебсервер, который раздавал текущий рабочий каталог.
Программулина позволяла отк… twitter.com/i/web/status/1…
17:51В само приложение встроили секретные комбинации клавиш для location.reload() и штук посложнее, вроде сброса настрое… twitter.com/i/web/status/1…
17:51Справедливости ради, с выходом Tizen и WebOS Developer Experience кардинально изменился.
Появилась Node.js CLI ути… twitter.com/i/web/status/1…
17:51Для UI дебаггера использовались уже современные Chrome DevTools. И общались они с телеком по одноимённому протоколу… twitter.com/i/web/status/1…
17:51Но совсем они не ушли. У нас до сих пор половина пользователей пользуется этими устаревшими платформами. А значит,… twitter.com/i/web/status/1…
17:51💽Я обещал рассказать про выкладывание в сторы. pic.twitter.com/ZYySs5PsqE
18:29О, иногда это напоминало цирк абсурда!
Казалось бы, вот рядом целая индустрия мобильных приложений выросшая с нуля… twitter.com/i/web/status/1…
18:29💩Но нет. Во-первых, у каждого производителя стор свой. Ну это даже не удивляет.
18:29💩Во-вторых, не все сторы одинаково полезны. Самые молодцы это Samsung, там всё как-то ещё отлажено было и автоматиз… twitter.com/i/web/status/1…
18:29💩 В-третьих, первый раз встать в стор некоторые вендоры превращали в испытание похлеще Форт Боярд.
Боже, как мы намучились с LG!
18:29Процесс добавления приложения в их стор занял у нас 6 месяцев! Я не шучу.
Не знаю как сейчас, но в 2014 году это был просто цирк с конями.
18:29Самый абсурдный баг, с которым нам завернули деплой был «Ваше приложение не открывается».
После непродолжительной… twitter.com/i/web/status/1…
18:29Локальный мем: Разработчик SmartTV должен уметь разговаривать с Корейцами.
Мы даже в вакансиях это писали.
Сейчас… twitter.com/i/web/status/1…
18:29💩Очень частый баг на ревью связан с сетевыми проблемами. Видеоконтент на серверах в России. Тестировщик с телевизор… twitter.com/i/web/status/1…
18:29💩 Ещё классный казус: приложение показывает рекламу, это указано в карточке в сторе. Но т.к. рекламодателей в Корее… twitter.com/i/web/status/1…
18:29В итоге, на подсети вендора настроено и своё вещание, и фейковая реклама.
18:29Ревью могут завернуть из-за бага, который в прошлый раз не посчитали критичным.🤷♂️
Опять похвалю Samsung — у них… twitter.com/i/web/status/1…
18:29💩Взрывает мозг отчёт о багах от LG (кажется до сих пор так), приходит письмо со вложенным Excel, в котором огромная… twitter.com/i/web/status/1…
18:29В общем, на процесс деплоя в стор надо закладывать месяц-два.
Я не разрабатывал под мобилки, но вроде там быстрее… twitter.com/i/web/status/1…
18:29Есть чит (как и в мобильных сторах), задеплоить приложение-пустышку, которая будет редиректить на сервер разработчи… twitter.com/i/web/status/1…
18:29Вендоры страсть как хотят держать руку на пульсе и контролировать качество приложений.
Даже Panasonic, у которого… twitter.com/i/web/status/1…
18:29Вот так и живём, зато весело.
Не дай бог зарелизить критичный для сервиса баг, который пройдет приемку вендора.
18:29Думаю, теперь вы понимаете, почему для SmartTV так мало приложений. Писать сложно, деплоить долго, сплошной геморрой.
18:29👨💻Написание приложений.
Когда приспособился отлаживать, когда пролез в стор, остаётся заниматься разработкой.
И… twitter.com/i/web/status/1…
19:03Чем принципиально телевизор отличается от всех остальных платформ?
Мы управляем телевизором при помощи пульта.
Та… twitter.com/i/web/status/1…
19:03Это драматически меняет UX, и UI вместе с ним.
Во-первых, пользователь не может просто кликнуть по элементу.
Он д… twitter.com/i/web/status/1…
19:03Писать это приходится руками, т.к. web платформа такого не предлагает.
Мы пытались скрестить фокус с tabindex, но… twitter.com/i/web/status/1…
19:03Ещё одна проблема c рамкой фокуса: как выбрать следующий элемент, когда мы нажимаем кнопку курсора.
Элементы вообщ… twitter.com/i/web/status/1…
19:03Кстати именно поэтому на телевизоре невозможно пользоваться ванильным Android. Да, экран переходит в альбомную орие… twitter.com/i/web/status/1…
19:03Даже в приложениях Гугла есть места где фокус становится невидимым, или скачет как угорелый по экрану, перемещаясь… twitter.com/i/web/status/1…
19:03Дальше. Для ввода текста нужна экранная клавиатура. Писать её тоже придётся самим. Есть платформы, где можно позват… twitter.com/i/web/status/1…
19:03Ввод текста в SmartTV это просто боль.
⌨️Кнопки пульта нажимаются вязко.
⌨️ИК сигнал может улететь не туда.
⌨️При… twitter.com/i/web/status/1…
Поэтому мой лайфхак при разработке: подключать к телевизору или приставке USB-клавиатуру и мышь.
Не знаю почему, н… twitter.com/i/web/status/1…
19:03На железках под капотом Linux, и переферия там нормально поддерживается.
Важно понимать, что это ваш личный чит-ко… twitter.com/i/web/status/1…
19:03Кстати это работает и в другую сторону. Желательно, чтобы периферия у вас всё таки работала, если кто-то её всё так… twitter.com/i/web/status/1…
19:03Радует, что проблема не только на смартах, но и в Android приставках, а значит её решает больше компаний.
И индуст… twitter.com/i/web/status/1…
19:03В приставках Электронного города, которые тоже делает Инетра, пульт помимо ИК цепляется по Bluetooth. И микрофон вс… twitter.com/i/web/status/1…
19:03Но я отношусь к голосовому вводу скептически. Он требует отдельного UX и добротной ML под капотом. Нельзя просто от… twitter.com/i/web/status/1…
19:03Мне больше нравится идея спаривания STB с приложением на смартфоне.
Например, у приставок Eltex есть такое.
Коман… twitter.com/i/web/status/1…
19:03Или более высокоуровневое приложение-компаньон в котором не элементы управления, а, например, дубль каталога фильмо… twitter.com/i/web/status/1…
19:03Мне бы эту информацию 2 года назад – никогда бы не пошёл писать под телек19:05💽Я обещал рассказать про выкладывание в сторы. pic.twitter.com/ZYySs5PsqE
@jsunderhood Самое невыносимое — когда у новых телевизоров появляются особенности, которые не описывают в документа… twitter.com/i/web/status/1…
Прекрасная статья. Коллеги познали эту боль. 🤗
@jsunderhood Самое невыносимое — когда у новых телевизоров появляются особенности, которые не описывают в документа… twitter.com/i/web/status/1…
19:09
# Пятница 1 твит
🥳Поздравляю всех программистов, с днём программиста (13 сентября), всех тестировщиков, с днём тестировщика (9 сентя… twitter.com/i/web/status/1…
15:18# Воскресенье 103 твита
@jsunderhood Два месяца заняло выпустить к ним приложухе в этом году, чтобы поддержать ТВ начиная с 2016 года. Самы… twitter.com/i/web/status/1…
Про стор LG.
@jsunderhood Два месяца заняло выпустить к ним приложухе в этом году, чтобы поддержать ТВ начиная с 2016 года. Самы… twitter.com/i/web/status/1…
6:06
@jsunderhood Самый ад был для Haier и TCL, ре лизились туда через посредника, все общение было через Facebook Messa… twitter.com/i/web/status/1…6:06
@jsunderhood Просишь логи, версию телека, ОС которая там стоит, браузер и получаешь это только на 5-6 раз.6:06
Завершить неделю хочу рассказом о Новосибирске.
🏡Достопримечательности
💻IT сфера
🙋♂️Сообщества
Как следует из названия, Новосибирск находится в Сибири. (Не путать с Новороссийском 😃)
🌲🐻❄️Город носит неофициаль… twitter.com/i/web/status/1…
12:04Несмотря на свою удалённость от столиц, Новосибирск это 3-й город России по населению. Здесь живёт более 1.6 млн. людей.
12:04Во время войны сюда эвакуировали много производств из европейской части России, что привлекло в город специалистов… twitter.com/i/web/status/1…
12:04🎭В городе 9 театров, филармония, проходят различные фестивали. Культурная жизнь идет.
🏦В сфере образования тоже ес… twitter.com/i/web/status/1…
12:04Программистов готовят в НГУ, НГТУ (АВТФ и ФПМИ), СибГУТИ, СГУПС. Есть близкие специальности в НГУЭУ и НГПУ.
Для ме… twitter.com/i/web/status/1…
12:04👩🔬 Академ
В конце 50-х годов на удалении от города был построен легендарный теперь Академгородк. Там собрано огро… twitter.com/i/web/status/1…
12:04В Академгородке работал легендарный академик Андрей Ершов — один из первых программистов СССР. Он внёс неоценимый в… twitter.com/i/web/status/1…
12:04Одно из направлений деятельности Ершова была организация обучения школьников информатике. Возможно, именно это зало… twitter.com/i/web/status/1…
12:04Кстати Ершов дружил с Джоном Маккарти (LISP) и Дональдом Кнутом (TAOCP). Они даже посещали СССР по его приглашению.
12:04В 2010-х в Академгородке построили Технопарк. Центр развития инноваций. И его здание в виде «Гусей» стало неофициал… twitter.com/i/web/status/1…
12:04Всё это делает Новосибирск уникальным местом для IT.
Ещё с конца 90-х годов стало открываться много фирм в Академг… twitter.com/i/web/status/1…
12:04В городе мест для айтишников, также предостаточно. Есть и крупные фирмы, есть и небольшие, есть известные и местные.
12:04Из крупных или тех, что на слуху у нас: 2ГИС, Яндекс, ЦФТ, Plesk, JetBrains, Movavi, СКБ Контур, НГС, СберТех, Ново… twitter.com/i/web/status/1…
12:04Каждый год, вот уже 10 лет весной проходит конференция CodeFest. Рассказывать о нем бессмысленно, это прекрасный пр… twitter.com/i/web/status/1…
12:04Года три назад к нему добавился DevFest от GDG Novosibirsk. Эта конференция больше ориентирована на студентов и дер… twitter.com/i/web/status/1…
12:04Второй раз проходил Highload++ Siberia. Конференции Бунина идут в регионы. highload.ru/siberia/2019
12:04Проходят также конференции по маркетингу (Груша)
2019.grushaconf.ru
Есть продуктовая конференция ProductCamp.
productcamp.ru/novosibirsk
🙋♂️Сообщества
Меня очень радует то, как у нас развились сообщества связанные с IT за последние несколько лет.
12:52Моя личная боль в том, что когда я начинал изучать программирование (1999) информацию было сложно достать, единомыш… twitter.com/i/web/status/1…
12:52Первый CodeFest состоялся только осенью 2010.
Его прототип, DevPoint — весной 2010.
И это было событие! Организато… twitter.com/i/web/status/1…
12:52Чуть не забыл «Сибирские Интернет Недели». В 2018 году прошли 12 раз. А это значит, что они должны были быть до Dev… twitter.com/i/web/status/1…
12:52Это всё организованные конференции, проходящие раз в год.
А вот с сообществами, проводящими регулярные встречи было туго года до 2014.
12:52Именно тогда я первый раз пришел на DevDay — инициативу от 2ГИС. Встречи проходили на разные темы, но довольно редк… twitter.com/i/web/status/1…
12:52В 2015 сотрудник 2ГИС Денис Речкунов организовал JSib, сообщество по JS, за что ему огромный респект.
Денис начал… twitter.com/i/web/status/1…
12:52Подхватил знамя Леонид Кальнеус — организовал Google Developer Group Novosibirsk.
Они проводили встречи на широкий… twitter.com/i/web/status/1…
12:52Как это бывает, Леонид тоже уехал, но GDG продолжили проводить Ден и Кир под его чутким руководством.
12:52В тот момент из GDG выделилось сообщество DEV NSK, движимое силами прекрасной Саши Кукиной и Олега Федосеева.
Идея… twitter.com/i/web/status/1…
12:52В результате этих событий жизнь сообществ в Новосибирске забурлила!
Порой бывало что на одни выходные приходилось… twitter.com/i/web/status/1…
12:52К 2018 году сообщества посыпались как из рога изобилия — многие компании захотели сделать своё, чтобы обозначить се… twitter.com/i/web/status/1…
12:52В 2015 году главная проблема организатора сообществ была не поиск докладчика, а поиск площадки для проведения.
Ден… twitter.com/i/web/status/1…
12:52GDG до раскола, и DEV NSK после традиционно проходили в НГС.
GDG перехал в академ в около-технопарковскую тусовку.
12:52Но главным катализатором этого движения стало открытие в 2018 году Лектория-бара ПОТОК.
Говорю об этом с большой г… twitter.com/i/web/status/1…
12:52Про ПОТОК.
Это лекторий-бар с трибуной на 250 человек. Здесь можно одновременно провести лекцию и выпить крафтовог… twitter.com/i/web/status/1…
13:13Фишка ПОТОКа в том, что если вы делаете открытое мероприятие в часы работы бара, то вы, как организатор, ничего не… twitter.com/i/web/status/1…
13:13На площадке ПОТОКа сейчас проходят не только IT мероприятия, но и эксперименты с театральным форматом, просмотр кон… twitter.com/i/web/status/1…
13:13Чтобы два раза не вставать, расскажу про второй офф-лайн проект Инетры — коворкинг ПРОСТОР.
На базе него можно про… twitter.com/i/web/status/1…
13:13Ну и коворкинг есть коворкинг, само собой. Можно приходить, работать, есть кухня, терасса, норы, телефонные будки,… twitter.com/i/web/status/1…
13:23А сейчас я попробую смертельный номер🦁🔥 — перечислю сообщества, которые у нас есть.
Сначала независимые:
13:49GDG NSK
Чат: t.me/GDGNsk
meetup.com/ru-RU/GDGNsk/
* WebDev
* QA
* Blockchain
* Android
* Go
* Google I/O
Agile NSK
Чат: t.me/AgileNSK
meetup.com/ru-RU/AgileNSK
Docker NSK
Чат: t.me/dockernsk
meetup.com/ru-RU/Docker-N…
JUG NSK
Чат: t.me/jugnsk
meetup.com/ru-RU/JUGNsk/
NskDotNet
meetup.com/ru-RU/NskDotNe…
Сообщество Техписателей 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…
React NSK
meetup.com/ru-RU/ReactNSK/
Functional Programming Specialty
meetup.com/ru-RU/Function…
LambdaNSK
vk.com/lambdansk
Hyperledger Novosibirsk
meetup.com/ru-RU/Hyperled…
Группа ПОТОКа для IT мероприятий
meetup.com/ru-RU/Лекторий…
* PhotoHack NSK
* Event meetup
* Soft Skills meetup
* Web… twitter.com/i/web/status/1…
Много митапов сделали компании. И это классно, больше движухи!
13:49Plesk 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…
* Я.Субботник по разработке интерф… twitter.com/i/web/status/1…
13:50ЦФТ проводит кучу мероприятий и мини-конференции.
team.cft.ru/events
meetup.com/ru-RU/itevents…
* Master Suppor… twitter.com/i/web/status/1…
13:50MobiFest
ЦФТ
Конференция о мобильной разработке.
Следующая 21 сентября, вход бесплатный.
Чат:… twitter.com/i/web/status/1…
14:12DataFest Siberia
ЦФТ
Конференция о Machine Learning
Следующая 28 сентября, вход бесплатный.
Пройдет в ПОТОКе!… twitter.com/i/web/status/1…
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/
NodeSchool Novosibirsk
Проводил мой коллега Женя Карагодин @ekaragodin
PyNSK
Сообщество по Python, регулярно проходило, пока Саша не уехал. 😅
vk.com/pynsk… twitter.com/i/web/status/1…
14:12Необычный пока для НСК формат: завтраки от Open Data Science проходят раз в неделю попеременно в академе и городе.… twitter.com/i/web/status/1…
14:12Скромно пристрою в конец этого списка два своих чатика. Они пока маленькие, но мы растём.
14:12За рынком Digital-разработки НСК пристально следит коллективный аккаунт «What is IT?» и комментирует с непременной… twitter.com/i/web/status/1…
14:18😱Чуть не забыл самое необычное IT-сообщество Новосибирска!
Borsh NSK
Ребята собираются вместе и... варят Борщ!… twitter.com/i/web/status/1…
14:20Submeet в Электронном городе
* Frontend
* Backend
* Enterprise
Сообщество от коллег из Новотелекома. Новотелеком… twitter.com/i/web/status/1…
14:25Второй раз в этом году ЦФТ будет проводить Mobifest — бесплатную ❗️ конференцию по мобильной разработке.
На отлично… twitter.com/i/web/status/1…
Ещё одна конференция ЦФТ в партнёрстве с Open Data Science — DataFest.
Конференция по Data Science и Machine Learn… twitter.com/i/web/status/1…
14:31Если вы собираетесь в Новосибирск, у нас есть что посмотреть.
В городе множество достопримечательностей: улочек с… twitter.com/i/web/status/1…
15:03Мне очень нравится ул. Богдана Хмельницкого, особенно осенью в листопад.
Мне повезло жить неподалёку. pic.twitter.com/AHZjuhn1QO
15:03Новосибирский зоопарк это гордость города. Там ведут уникальную работу по разведению редких животных.
15:03Театр оперы и балета, в самом центре города, это самый большой оперный театр России. pic.twitter.com/muhBGbg1CP
15:03А в этой чёрной высотке, на фоне находится офис Инетры, лекторий-бар ПОТОК и коворкинг ПРОСТОР.
Гуляя по городу за… twitter.com/i/web/status/1…
15:03Наш метромост тоже достопримечательность, его длинна 2145 метров — он самый длинный в мире! pic.twitter.com/ATcC9MCrYM
15:03А ещё есть памятник светофору 🚦 и памятник лабораторной мыши 🐁
15:03А буквально на этой неделе, в центральном парке запустили новый цвето-музыкальный фонтан без чаши.
Очень красиво,… twitter.com/i/web/status/1…
15:03@jsunderhood Т.е. нельзя просто встроить на страницу обычный HTML5-плеер?15:05
А ещё, у нас бывают морозы до -45 °C ❄️
Если всегда хотели это испытать, то приезжайте в январе-феврале. ⛄️
15:09Кстати зимой очень солнечно. Чем холоднее, тем солнечнее. 🌞
Вообще в году очень много солнечных дней. Это вам не СПБ и не Москва. 😃
15:11Моё дежурство заканчивается.
С вами был Андрей Нагих @andrnag.
Спасибо вам, что читали. Подписывайтесь, буду про… twitter.com/i/web/status/1…
17:03Если хотите устроить что-то в ПОТОКе пишите сразу Варе Косман, она «хозяйка медной горы». Варя хорошая. :-) t.me/Fresera
17:07# Ссылки
github.com
- https://github.com/mono/mono/tree/master/sdks/wasm
- https://github.com/appcypher/awesome-wasm-langs
- https://github.com/aspnet/AspNetCore/tree/master/src/Components
- https://github.com/syl22-00/pocketsphinx.js
- https://github.com/felixrieseberg/windows95
- https://github.com/fastly/lucet/
t.me
- https://t.me/juliarderity
- https://t.me/GDGNsk
- https://t.me/DEVNSK
- https://t.me/AgileNSK
- https://t.me/dockernsk
- https://t.me/jugnsk
- https://t.me/productcampnsk
- https://t.me/qa_siberia
- https://t.me/NSKITevents
- https://t.me/jsparty_nsk
- https://t.me/k8smeetup
- https://t.me/rnd_community
- https://t.me/angularNSK
- https://t.me/awsNSK
- https://t.me/Fresera
www.meetup.com
- https://www.meetup.com/ru-RU/GDGNsk/
- https://www.meetup.com/ru-RU/DEVNSK/
- https://www.meetup.com/ru-RU/AgileNSK
- https://www.meetup.com/ru-RU/Docker-Novosibirsk/
- https://www.meetup.com/ru-RU/JUGNsk/
- https://www.meetup.com/ru-RU/NskDotNet/
- https://www.meetup.com/ru-RU/Write-the-Docs-Siberia/
- https://www.meetup.com/ru-RU/Kubernetes-Novosibirsk/
- https://www.meetup.com/ru-RU/ReactNSK/
- https://www.meetup.com/ru-RU/Functional-Programming
- https://www.meetup.com/ru-RU/Hyperledger-Novosibirsk/
- https://www.meetup.com/ru-RU/Лекторий-бар-ПОТОК/
- https://www.meetup.com/ru-RU/plesk-events/
- https://www.meetup.com/ru-RU/itevents_cft/
- https://www.meetup.com/ru-RU/Paymentwall-Novosibirsk/
- https://www.meetup.com/ru-RU/md-community/
- https://www.meetup.com/ru-RU/oneinc/
- https://www.meetup.com/ru-RU/sibito/
- https://www.meetup.com/ru-RU/GolangNSK/
- https://www.meetup.com/ru-RU/nodeschool_nsk/
- https://www.meetup.com/ru-RU/find/?allMeetups=true&radius=31&userFreeform=Novosibirsk%2C+%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F&mcId=z1036269&mcName=%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D0%B8%D0%B1%D0%B8%D1%80%D1%81%D0%BA%2C+RU&sort=recommended&eventFilter=mysugg
vk.com
- https://vk.com/konveerum
- https://vk.com/techtalksnsu
- https://vk.com/lambdansk
- https://vk.com/pynsk
- https://vk.com/jsibnsk
other
- https://caniuse.com/#search=asm.js
- https://caniuse.com/#search=webassembly
- http://b2b.peers.tv/bytefog
- https://v8.dev/blog/liftoff
- https://hacks.mozilla.org/2018/01/making-webassembly-even-faster-firefoxs-new-streaming-and-tiering-compiler/
- https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
- https://www.npmjs.com/package/hunspell-asm
- https://wotinspector.com/en/replays/
- https://through-the-interface.typepad.com/through_the_interface/2018/03/the-future-of-autocad.html
- http://vps2.etotheipiplusone.com:30176/redmine/projects/emscripten-qt/wiki/Demos/
- https://wasmtime.dev/
- https://wasmer.io/
- http://peers.tv/
- https://people.apache.org/~pmuellr/weinre/docs/latest/Home.html
- https://www.highload.ru/siberia/2019
- https://2019.grushaconf.ru/
- http://productcamp.ru/novosibirsk
- http://www.gks.ru/free_doc/doc_2019/bul_dr/mun_obr2019.rar
- https://konveerum.ru/
- https://devday.ru/
- https://events.yandex.ru/?q=%7B%22selectedFilters%22%3A%5B%7B%22type%22%3A%22city%22%2C%22id%22%3A%22%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D0%B8%D0%B1%D0%B8%D1%80%D1%81%D0%BA%22%2C%22label%22%3A%22%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D0%B8%D0%B1%D0%B8%D1%80%D1%81%D0%BA%22%7D%5D%7D
- https://team.cft.ru/events
- https://eventskbkontur.timepad.ru/events/
- http://pushwoosh.ru/k8s
- http://md-team.ru/rday
- http://zoonovosib.ru/
- https://tonkosti.ru/Достопримечательности_Новосибирска