Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebAssembly além da Web - Casos de Uso em IoT

WebAssembly além da Web - Casos de Uso em IoT

Um pouco sobre WebAssembly, como está sendo usado hoje, fazendo um paralelo com o mundo de Internet das Coisas, mostrando que problemas resolvidos por WebAssembly nos navegadores tem coisas em comum com IoT.

Video da talk - https://www.youtube.com/watch?v=bl1bHudVsAM

Demo #1 - Overview com Webassembly.studio

Demo #2 - Rodando TinyGo/AssemblyScript/Rust em ambiente embarcado
https://github.com/alvarowolfx/wasm-ble-edge-filter

Demo #3 - Usando WebAssembly como motor de regras em IoT
https://github.com/alvarowolfx/wasm-arduino-wifi

Avatar for Alvaro Viebrantz

Alvaro Viebrantz

July 16, 2020
Tweet

Other Decks in Technology

Transcript

  1. ATWOOD’S LAW “ANY APPLICATION THAT CAN BE WRITTEN IN JAVASCRIPT,

    WILL EVENTUALLY BE WRITTEN IN JAVASCRIPT.”
  2. O que vamos ver hoje ? O que é o

    WebAssembly ? Porque faz sentido em IoT Demos
  3. O que é WebAssembly Não, o Javascript não vai morrer

    • Formato binário de código • .wasm • Existe um formato em texto .wat • Código proximo ao Assembly • Podemos comparar com Bytecodes de outras VMs como a JVM • Baixo nível • Portável • Rápido • Menor uso de memória
  4. Performance na Web Muito tempo é usado no parse +

    compile • WebAssembly • Otimizado antes da execução • Ao contrário de Javascript que otimiza a medida que é executado Imagem do artigo - https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124
  5. WebAssembly por ai Rode código feito em outras linguagens no

    Browser • WASM por si não é uma linguagem • É um target para outras linguagens • Algumas linguagens que compilam para Wasm • C/C++ ⭐ - Emscriptem • Rust ⭐ • Assemblyscript ⭐ - Flavor de Typescript • TinyGo - Flavor de Go • Golang começou suporte também • Pyodide - Python + Numpy stack
  6. Coisas malucas feitas com WebAssembly Tem uso em produção •

    Figma • Engine de manipulação de imagens • www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/ • Autocad Web • Engine de CAD portada de C++ • Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA • Blazor - Framework Web .Net • Vugu - Framework Frontend em Go • Valerie - Framework Frontend em Rust github.com/mbasso/awesome-wasm
  7. WebAssembly everywhere Outros casos de uso e também tem uso

    em produção • Edge Impulse ⭐ • Roda modelos de ML em dispositivos IoT • Fastly e Cloudflare • Rodar código de forma segura em CDNs • Blockchain/SmartContracts • Projetos OSS • Wasmer - Runtime WASM - Pode ser embutido em Go/Python/PHP/Ruby • Wasmtime - Outro Runtime WASM Standalone • Krustlet - WASM on Kubernetes • Postgres-ext-wasm - github.com/wasmerio/postgres-ext-wasm
  8. WebAssembly está crescendo Muita coisa ainda em pesquisa • WASI

    - WebAssembly System Interface • Como trazer acesso a recursos como arquivos, rede, chamadas de sistema em geral ? • Como fazer isso mantendo a portabilidade e segurança ? hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
  9. Dispositivos IoT Bastante limitados em memoria, cpu e uso de

    bateria • Apesar de contar, na maioria das vezes não estamos falando disso • Celulares • Roteadores/Gateways • Raspberry Pi’s e afins
  10. Dispositivos IoT Bastante limitados em memoria, cpu e uso de

    bateria • Dispositivos bem menores e mais baratos • Lampadas, Sensores de porta, Fechaduras Smart, Termostatos • Rastreadores em geral - GPS, rede celular, LoRa, etc • Assistentes pessoais - Alexa/Google Assistant • Na maioria das vezes, não tem sistema operacional nenhum
  11. Dispositivos IoT Bastante limitados em memoria, cpu e uso de

    bateria CPU Memory Flash Connectivi ty GPIO Arch Power Consumption Price ATMega 328p 16 Mhz 2 Kb 32 Kb None 24 AVR RISC 8 bit 40mA $1.7 STM32 “Blue Pill” 72 Mhz 20 Kb 64 kb None 32 ARM 32 bit 8mA $2.3 ESP 32 160 Mhz
 Dual Core 512 Kb Up to 16MiB Wifi/Ble 36 XTensa 32 bit 200mA $3
  12. Dispositivos IoT Bastante limitados em memoria, cpu e uso de

    bateria • Tem que se levar muito a serio questões de performance • Uso de memoria e CPU • Também influência em uso de bateria • Segurança - o “S” de IoT • Ainda assim conseguir evoluir o projeto • Over the Air updates - OTA • Maior parte do desenvolvimento embarcado é em C/C++
  13. 25 Mas peraí, não é só em C/C++ né ?

    Existem varias outras formas por ai • MicroPython • TinyGo • Lua • Várias Engine Javascript • Duktape • Jerryscript • MongooseOS • Mais usados em prototipos
  14. WebAssembly + IoT Compartilham muitos principios • Código otimizado •

    Menor uso de memoria • Rapidez e Performance • Sandbox e segurança
  15. Esforços para trazer WebAssembly a devices embarcados Em 2017 isso

    começou, mas era bem ruim • Em 2017 o WebAssembly estava já sendo bem suportado na web • Hoje temos vários runtimes Wasm para embarcados • Wasm3 - Blynk • Wasm Micro Runtime - Intel/Redhat/Fastly/Mozilla - Bytecode Alliance • Zephyr RTOS - Linux Foundation • Mas ainda não resolve 100% a questão da portabilidade • Talvez alguma variante do WASI venha a resolver isso
  16. WASI for IoT ? WASI define coisas como acesso a

    arquivos, rede e syscalls • WASI é o bastante para o mundo embarcado ? • Requisitos mais específicos • Acesso a pinos • Interação com sensores • “Network” - Bluetooth/WiFi/Zigbee/LoRa • Isso é um grande desafio, mesmo usando a mesma stack, pode ser completamente diferente dependendo do hardware
  17. Rodando Wasm como linguagem principal Programar em qualquer linguagem para

    ambiente embarcado • Aplicação embarcado funciona quase que como um SO primitivo • Inicia o código em Wasm • Provê os “drivers” para acesso a rede e outros recursos • Provê interface para OTA do código em Wasm
  18. Rodando Wasm como linguagem principal Programar em qualquer linguagem para

    ambiente embarcado • O que foi feita na demo • ESP32 como dispositivo embarcado • TinyGo/Rust/AssemblyScript compilado para Wasm • Código Wasm fazem acesso ao hardware e rede • Conecta na rede Wifi • Pisca Led • https://github.com/alvarowolfx/wasm-arduino-wifi
  19. Usando Wasm como um motor de regras Reaproveitar código base

    do embarcado • Embarcado ainda é programado nativamente • Provê uma interface que permite customização do seu funcionamento • Consegue criar regras mais complexas do que apenas mudar parâmetros ou passar novas configurações • Imagine um usuário mais avançado podem descrever algumas regras em código para atualizar o device, sem quebrar o código principal • O mesmo código pode rodar no servidor usando runtimes Wasm para server side
  20. Usando Wasm como um motor de regras Reaproveitar código base

    do embarcado • O que foi feita na demo • ESP32 escaneia dispositivos bluetooth • A regra para filtrar os devices é definida via Wasm • Embarcado busca nova versão do Wasm a cada boot para se atualizar e pegar regras atuais • https://github.com/alvarowolfx/wasm-ble-edge-filter
  21. Referencias Mais material de estudo • https://github.com/AssemblyScript/assemblyscript • https://github.com/wasmerio/postgres-ext-wasm •

    https://github.com/wasmerio/vscode-wasm • https://medium.com/trainingcenter/webassembly-a-jornada-o-que-%C3%A9-wasm-75e3f0f03124 • https://dev.to/emmanuelantony2000/valerie-rethinking-web-apps-in-rust-4cl3 • https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts • https://lastminuteengineers.com/esp32-sleep-modes-power-consumption/ • Autocad WASM - Demo no Google I/O 2018 - www.youtube.com/watch?v=D4fNcX0Q9gA