Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

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

  • Be the first to comment

  • Be the first to like this

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

  1. 1. https://www.google.com/url? sa=i&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWebAssembly&psig=AOvVaw01ph2uPKCm79kmbF AW&ust=1594860562007000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCOCK- dyEzuoCFQAAAAAdAAAAABAD WebAssembly além da Web Casos de uso em IoT Alvaro Viebrantz Google Developer Expert for IoT and Product Engineer at Leverege aviebrantz.com @alvaroviebrantz
  2. 2. MOTIVAÇÃO DESSA TALK
  3. 3. “CONSIGO RODAR _INSIRA_SUA_LINGUAGEM_FAVORITA_ EM UM ARDUINO ?”
  4. 4. ATWOOD’S LAW
  5. 5. ATWOOD’S LAW “ANY APPLICATION THAT CAN BE WRITTEN IN JAVASCRIPT, WILL EVENTUALLY BE WRITTEN IN JAVASCRIPT.”
  6. 6. ATENÇÃO MUITAS COISAS EXPERIMENTAIS A FRENTE
  7. 7. O que vamos ver hoje ? O que é o WebAssembly ? Porque faz sentido em IoT Demos
  8. 8. WebAssembly
  9. 9. 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
  10. 10. 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
  11. 11. Suporte ao WebAssembly Os browsers abraçaram a especificação - 91.18% em Jul/2020 https://caniuse.com/#feat=wasm
  12. 12. Demo #1 WebAssembly Studio
  13. 13. 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
  14. 14. 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
  15. 15. Não só na Web!(que é o ponto dessa talk 😅)
  16. 16. 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
  17. 17. 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/
  18. 18. e como chegamos em IoT ?
  19. 19. primeiro, o que é IoT ?
  20. 20. 20 Por que está na moda hoje ? Sensores, internet e processamento mais baratos
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. 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++
  25. 25. 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
  26. 26. mas infelizmente não são production ready
  27. 27. Mas aqui temos o link entre IoT e WebAssembly
  28. 28. WebAssembly + IoT Compartilham muitos principios • Código otimizado • Menor uso de memoria • Rapidez e Performance • Sandbox e segurança
  29. 29. E se pudemos usar qualquer linguagem e ainda ter boa performance ?
  30. 30. 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
  31. 31. 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
  32. 32. Demo #2 Rodando Wasm como linguagem principal
  33. 33. 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
  34. 34. 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
  35. 35. Rust
  36. 36. AssemblyScript
  37. 37. TinyGo
  38. 38. Foi apresentado na WebAssembly Summit 2020 https://webassembly-summit.org/speakers/6/
  39. 39. Demo #3 Usando Wasm como um motor de regras
  40. 40. 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
  41. 41. 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
  42. 42. Regra de negocio em AssemblyScript Um exemplo de como poderia ser customizado
  43. 43. REFERENCIAS
  44. 44. 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
  45. 45. Obrigado! aviebrantz.com youtube.com/alvaroviebrantz twitch.tv/alvaroviebrantz Alvaro Viebrantz Google Developer Expert for IoT and Product Engineer at Leverege aviebrantz.com @alvaroviebrantz

×