• Моделируем алгоритм MUSIC для задач определения направления прихода электромагнитной волны
    –1
    Hack me! Dude, you're awesome! You are freaking awesome!

    Andrey Nagikh (Engineer 2009 РПиРПУ РЭФ НЭТИ Новосибирск Сибирь)

  • Даешь больше HighLoad++: с понедельника в Питере
    +1

    Олег. Моё почтение за вашу миссию.

  • Разработка под WebAssembly: реальные грабли и примеры
    0
    тесты производительности с C++ без хотя бы опции "-O3"

    Мы мерили с -O2, из тех соображений, что при -O3 компилятор уже жертвует размером файла ради скорости (если я ничего не путаю). -O2 ближе к тому, что будет в реальном проекте.

    Более подробно «методика» тестирвоания описана в репозитории проекта github.com/andrnag/wasm_cpp_bench Мы не выкладывали ещё нативную реализацию (забежал вперед, как я уже сказал), но вычислительное ядро там то же самое, что и для wasm. Добавлена просто CLI обёртка и работа с файлами, за рамками измеряемого кода.

    И правильно что удивило — там точно что-то не так. )

    Очень даже может быть :-) Буду рад вашим замечаниям к коду проекта.

    Если у вас там видео воспроизводится, то можно посмотреть различные латентности, особенно в 4K и со сложными кодеками. )

    Да, если бы мы воспроизводили видео, то это был бы хороший стресс-тест. Но непосредственным воспроизведением видео занимается браузер с помощью HTML-элемента <video> и нативных кодеков.

    Наша разработка только поставляет данные для браузерного плеера. Поэтому больше всего времени мы занимаемся пересылкой по сети.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Спасибо за предложение. Добавил. Как-то пропустил создание этого хаба.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Спасибо за развёрнутый комментарий и классную дискуссию.

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

    1. Исполняется тот же код, что в бенчмарке с графическими фильтрами.
    2. Никаких особых оптимизаций в C++ мы не делали. Мы согласны с тем, что если покрутить правильные ручки у компилятора, то можно выжать совсем другие цифры.
    3. Одна из этих ручек, например, SIMD, который мы не использовали. А для обработки изображений он значит многое. Хотя, на мой взгляд, это уже будет не совсем верное сравнение технологий. Другая весовая категория.
    4. Мы очень бегло потестировали код, не проверили все кейсы. Именно поэтому я не стал включать результаты в доклад.

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

    Что касается нашего продукта, то все замеры производительности значат мало что, т.к. на сетевых задержках мы потеряем гораздо больше времени. Мы честно пытались найти хоть какой-то мало-мальски вычислительный код в продукте. Взяли например обработчик плейлистов. Но на реальных данных код выполняется микросекунды, поэтому бенчмаркать там нечего. К тому же, это совсем не критический участок кода.
  • Ceedling + Eclipse или unit-тесты для микроконтроллеров
    +1
    Немного не так. Вы пишете программу, которая должна выдавать требуемый результат, при правильных входных данных. А также, должна коректно обрабатывать ошибочные входные данные.

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

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

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

    Как приблизиться к идеальному результату? Изучать тестирование. Практиковаться в написании тестов. Ну и писать новые тесты на те баги, которые у вас нашлись в продакшене.

    Главная ценность модульных тестов в том, что вы автоматизируете регрессионное тестирование, а это значит, что вы сможете быстрее выкатывать релизы, и не бояться менять существующий код, например для рефакторинга.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Спасибо! Теперь я разобрался. Значит глупость сморозил публично :-)
    Тем не менее, заслуг Беллара это ни сколько не умаляет.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    В WebAssembly принципиально нет и никогда не будет доступа к системе. Доступ есть только к хосту, в случае веба это браузер. Поэтому нужно смотреть в сторону WebCrypto API и на основе него уже можно что-то соорудить.

    Вы C# компилировали в Wasm? Расскажите об этом подробнее. Что вы использовали? Какие остались впечатления?
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    А, вас смущают Mangled имена? Emscripten поддерживает опцию компиляции -s DEMANGLE_SUPPORT, при включении которой в стектрейсах появляются уже размотанные имена.

    Так они и попадают в Sentry, от Debug-сборок. Выглядит это вот так.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Спасибо! Рад, что удалось изменить ваше представление.
  • Разработка под WebAssembly: реальные грабли и примеры
    0

    Спасибо за замечание. Возможно я неправильно понимаю сложные взаимоотношения KVM и QEMU. Я ориентировался на данные Википедии.


    Программное обеспечение KVM состоит из загружаемого модуля ядра (kvm.ko), процессорно-специфического загружаемого модуля kvm-amd.ko либо kvm-intel.ko, и компонентов пользовательского режима (модифицированного QEMU).

    Насколько я понимаю, KVM использует QEMU для паравиртуализации. Как-то так?


    Вот ещё красивая картинка с английской вики.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Да, выглядит отлично! У нас есть похожая штука, заточенная под C++, называется Ceburasko. Может быть когда-то расскажем о ней подробнее, если кому-то это будет интересно.

    Кстати, необязательно брать Sentry целиком. Можно взять только их клиент Raven.js, а приёмную сторону написать самостоятельно.

    Месяц назад ребята из ВК на митапе в Новосибирске рассказывали о том, как они провернули такое у себя. Даже на их гигантских масштабах это сработало.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    не может делать напрямую вызовы браузерного API

    Это действительно так. То о чем вы говорите называется Host bindings и сейчас над ними ведётся активная работа. Когда их реализуют любой бэкенд компилирующийся в wasm сможет с низкими накладными расходами обращаться к функциональности хоста (это не обязательно будет браузер).

    Но. В практическом смысле, подобное уже можно делать прямо сейчас. (Что мы и сделали в нашем проекте Bytefog. Оценить работу технологии можно, например, на сайте peers.tv). Технически, действительно, происходит проброс через JS. Но всю эту работу берет на себя Emscripten. На вход мы ему даём указания что именно мы хотим пробросить. Сделать это можно аж тремя разными способами. Мы выбрали Embind, и я подробно разбираю как его использовать в своём докладе.
  • Разработка под WebAssembly: реальные грабли и примеры
    +3
    Ещё отличная демо, которую не успел добавить в доклад: Netscape Navigator ранних версий в среде Windows 3.11 с поддержкой TCP/IP сети внутри WebAssembly внутри WebGL сцены с видом от первого лица с поддержкой многопользовательности.

    assets.metacade.com/emulators/win311vr.html
    Рекомендуется смотреть в FireFox.

    А также, классный пример синтеза WebAssembly и Electron: Windows 95, аккуратно упакованная в Electron приложение, и доступная для запуска где угодно. (Можно рассматривать как альтернативу DOSBox).

    github.com/felixrieseberg/windows95
    Про неё кстати уже была статья здесь, на Хабре.
  • Разработка под WebAssembly: реальные грабли и примеры
    0
    Спасибо!
    FFMpeg в браузере уже реализовали, да не один раз. Думаю, вам будут полезны вот эти ссылки:
    github.com/bgrins/videoconverter.js
    github.com/sopel39/audioconverter.js
    github.com/Kagami/ffmpeg.js

    Буду благодарен вам, если расскажете о результатах своих экспериментов с ними.
  • Разработка под WebAssembly: реальные грабли и примеры
    0

    Вы имеете в виду, что-то похожее на Sentry, но своё и заточенное под конкретный проект?

  • WebAssembly в продакшне и «минное поле» Smart TV: интервью с Андреем Нагих
    +1
    Спасибо, что поделились своим опытом, сегодня подобные доклады и статьи на вес золота.

    Цитата из вашей статьи:
    Отлаживать wasm в браузере очень сложно, если у вас нет версии под desktop. Это может очень сильно затруднить разработку. Некоторые обновления тулчейна вносят изменения, ломающие приложение.


    Это совпадает с нашими выводами. И об этом я и говорил в интервью. Инструменты слабые, отлаживать сложно, хорошо помогает нативная версия, чтобы использовать привычные инструменты.

    И ещё раз проясню позицию по шаблонам C++: я неправильно сказал, что мы их не используем. Используем, и ещё как. Из библиотек. Но вот своих шаблонов у нас немного.
    Нет смысла доказывать что шаблоны это плохо, и использовать их нельзя, здесь я просто неудачно пошутил. Остальное лежит в области соглашений по стилю кода.
  • WebAssembly в продакшне и «минное поле» Smart TV: интервью с Андреем Нагих
    +2
    При должном желании спиратить можно всё, что угодно.

    Тем не менее, WebAssembly это скомпилированный двоичный файл, и ваш софт распространяется именно в скомпилированном виде. Также, при компиляции может хорошо поработать оптимизатор (всё, как и в обычном C++). Поэтому несмотря на то, что ассемблерный листинг видно прямо в DevTools браузера, разобраться в таком коде гораздо сложнее, чем, например, в минифицированном JS.

    Фактически, это такая же задача реверсинга, как и при изучении вирусов, или других нативных программ.

    Пожалуй, осложняет её сейчас только то, что для WebAssembly нет (пока?) средств подобных IDA.
  • WebAssembly в продакшне и «минное поле» Smart TV: интервью с Андреем Нагих
    0
    Несомненно, с шаблоными всё в порядке. Использовать их, или не использовать в своём коде — дело соглашений в конкретном проекте. У нас мы решили не использовать. Конечно, в интервью в своей категоричности я палку перегнул.

    Вот, что говорит наш архитектор по этому поводу:
    Шаблоны — вещь нужная и полезная, когда их, готовые и отлаженные, разумно используешь. Когда же эти конструкции самописные, да еще и просто для того «чтобы были», горя с ними хапнешь.

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

    Расскажите, вы говорите о нативной разработке, или используете шаблоны в Wasm?
  • Итерации цикла: как прошла конференция HolyJS, и что насчёт следующей
    +3

    А мне понравилась конференция! Спасибо большое организаторам: я видел изнутри насколько это тяжёлая работа — организовать и провести конференцию. А особенно, две конференции подряд!


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

  • Почему мне посреди ночи позвонили из АНБ и попросили исходники
    +3
    телефонный tor?
  • Java 11 / JDK 11: General Availability
    +3
    Видимо, GraalVM
  • (А|а)рхитектура: почему это нестандартный митап для разработчиков высоконагруженных систем
    –1
    Скажите, будет ли у вас трансляция или записи выступлений?
  • JS Developer Day, разные города и сообщества — один праздник
    +1

    Поразительно! Статья об учреждении JS Day, и без даты!

  • Большой портальный фрезерный станок с ЧПУ своими руками
    0
    параллельно с кнопкой экстренного останова?
  • Тайна Keyboard Level 3 или как напечатать длинное тире
    +1
    Я использую Type It Easy. github.com/MyasNick/TiE К сожалению, автор перестал заниматься проектом, но благородно выложил на гитхаб. Правда код на Delphi.

    Удобнейшая утилита, но слегка конфликтует с Windows 10 (решается установкой раскладки no_rub_sign без знака рубля).

    Может быть кому-нибудь она тоже понравится, и он возьмется её сопровождать.
  • Be my rubber duck
    +2
    Резиновый утенок это вариант «для бедных». Если можно поговорить с кем-то в теме, то вообще отлично. (Не обязательно, чтобы он понял ваш рассказ, но очень хорошо, если задаст какой-нибудь глупый вопрос).

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

    И вообще, блоки аналоговой электроники, возможно, полировались десятилетиями, и один блок может содержать в себе несколько изобретений разных авторов. А может и работу целых НИИ.
  • Переезд из СНГ в Чехию, собственный опыт
    0
    Я думаю секрет в том, какая технология первой начала внедряться массово.
  • Переезд из СНГ в Чехию, собственный опыт
    +1
    Я предположил, что niksite путает BNC, который старье, с DOCSIS, который, в принципе, не так уж плох.
  • Переезд из СНГ в Чехию, собственный опыт
    0
    Я думаю, что в Кремниевой Долине по домам разводка все же через DOCSIS. Старый BNC для этого мало подходит.
  • Переезд из СНГ в Чехию, собственный опыт
    0
    Это разный коаксиал. Вы помните, наверное, Ethernet с BNC разъемами 10 Мбит/с. А у них, видимо DOCSIS, это больше похоже на GPON, только по другой среде.
  • Составляем карту всего Интернета при помощи кривых Гильберта
    +3

    Так вот что, оказывается, Малевич нарисовал!

  • Знакомство с WebAssembly
    +1
    Это, конечно хорошо для библиотек. Тут я с вами абсолютно согласен.

    Но, когда вы пишете свое приложение, то свой сервер вы обычно знаете, и платформа у вас выбрана одна.
  • Знакомство с WebAssembly
    +1
    Постойте, постойте! Ведь Node.js давно поддерживает нативные модули. nodejs.org/dist/latest-v8.x/docs/api/addons.html
  • Альманах пакетных менеджеров Linux
    0
    Как вы думаете, можно ли считать brew пакетным менеджером в macOS? (Хотя бы в том смысле, в котором автор называет emerge пакетным менеджером?)
  • Портрет явления: ностальгический порыв — кассеты и магнитофоны
    +2
    Как будто вы не записывали сами на кассеты ничего с микрофона на пару с одноклассниками!
  • Создаем самодостаточный Docker-кластер
    +1
    (юмор) Самодостаточной системе разработчик не нужен. И пользователь тоже. :-)
  • Собеседование для фронтенд-разработчика на JavaScript: самые лучшие вопросы
    0
    Я для этих целей использую htmlbook.ru или его продолжение webref.ru.
    Там и материал полнее и актуальнее.
  • Собеседование для фронтенд-разработчика на JavaScript: самые лучшие вопросы
    +3
    w3school — это ловкие люди, паразитирующие на аббревиатуре w3c.
    Не надо к ним ходить, и тем более, что-то покупать у них.
    Пользуйтесь MDN, caniuse и другими свободными источниками.