Workflows for Elixir Nerves

Introduction

Jason Johnson

+

Nerves #FTW

  • Improved developer experience and on-ramps
  • Better documentation than ever before
  • More target device support
  • Acceleration in open source contributions
  • Nerves Core Team is growing                                    

Now is the best time to get started with Nerves.

"What about the chip shortage? Why now?"

Reasons

 (congrats Masatoshi!     )

This Talk

Explore workflows for Nerves in various contexts.

Workflows include: connecting to, interfacing with, and loading firmware to Nerves targets.

Work flows:

  • SD Card
  • Serial Cable
  • HDMI Cable
  • USB Cable
  • WiFi

 

  • iEx
  • Hotswap
  • OTP
  • Livebook
  • NervesHub

What's in store?

SD Card

What/How?

Burning firmware to a microSD card is the most primitive workflow for Nerves and        necessary.

 

Use one of: mix burn, fwup, dd, or Etcher.

Use cases

  • Early development
  • Custom Nerves system
  • Unsupported development board/hardware
  • Device provisioning sequences

Drawbacks

  • Cumbersome
  • Wears out SD cards
  • Interrupts "flow"

Benefits

  • Ensures fresh firmware
  • Sometimes it's faster than WiFi

 

Serial Cable

What/How?

Allows you to open a direct console connection to the Nerves target through a terminal emulator like screen.

Use cases

  • Early development
  • Firmware debugging
  • Hardware debugging

Drawbacks

  • Wires
  • Confusing tx/rx
  • Impaired console
  • Not always available

Benefits

  • See console output immediately
  • No networking!

 

HDMI Cable

What/How?

Some Nerves targets include HDMI or HDMI mini ports that you can connect directly to an external display.

Use cases

  • Early development
  • Hardware debugging
  • Kiosks

Drawbacks

  • Wires
  • Not always available

Benefits

  • See console output early
  • No networking!

USB Cable

What/How?

This is the suggested path of least resistance for connecting to your Nerves target in the official Getting Started guide.

Use cases

  • Easy configuration
  • Early development
  • Other options unavailable

Drawbacks

  • Wires
  • Requires DATA cable, not just power
  • Local networking with mDNS sometimes tricky

Benefits

  • Fast, easy, convenient(?)
  • Supplies both power and data

WiFi

What/How?

There are a LOT of ways your Nerves target can be configured to use WiFi. Vintage Net provides support for all the common and some uncommon WiFi configurations.

Use cases

  • Hobby projects
  • Prototyping
  • Commercial use

Drawbacks

  • Even with Vintage Net, wireless networking may present confusing situations.

Benefits

iEx

What/How?

The  REPL experience is an essential aspect of working with Elixir. Nerves enables iEx sessions with the target over ssh.

Use cases

  • During active development on the host
  • While running tests
  • For remote shell connections to target(s)
  • Pretty much anytime!

Drawbacks

  • Possible to break things
  • May produce confusing code situations

Benefits

Hotswap

What/How?

This magical package enables fast and easy OTA updates to Nerves targets.

Use cases

  • Project development
  • Library development
  • Hardware hacking

Drawbacks

  • May present confusing situations
  • All modules replaced each time
  • Doesn't support changes to config
  • Doesn't support changes to dependencies

Benefits

  • No wires!
  • Tight feedback loop
  • Relatively easy to setup
  • Combine with OTP to quickly iterate on supervision trees

Fixed it!

Passes compiled modules to IEx.Helpers.nl/2, which leverages Erlang's rpc:call to load new BEAM code.

OTP

What/How?

A special blend of powerful abstractions rolled into a small set of battle-tested Erlang libraries. Including the classics like supervisors, processes, links, and GenServer.

Use cases

  • Concurrent process management
  • Tweaking startup sequences
  • Designing supervision trees
  • Debugging failure conditions

Drawbacks?

Benefits

  • Direct control over process restarts
  • Great DX with Hotswap or iEx
  • Process inspection and communication
  • Fine grained control

Livebook

What/How?

A library for managing live, interactive, and collaborative code notebooks. Get started by downloading a pre-built firmware release that includes Livebook and some demo notebooks.

Use cases

  • Experimenting with new hardware
  • Documentation and guides
  • Onboarding developers
  • Demos!

Drawbacks

Benefits

  • It's a live coding journal that runs on Nerves!
  • Collaborative
  • Reproducible
  • Tight feedback loop

NervesHub

What/How?

"An open-source firmware updates server"...

Also includes:

Use cases

  • Commercial
  • Consultancy
  • Community(?)

Drawbacks

  • Community hosted version no longer available
  • Hard to configure self-hosted Nerves Hub

Benefits

  • OTA updates
  • Products
  • Deployments
  • Tags

Install on AWS with nerves-hub/terraform repo.

Run as separate services on another platform.

Work flows:

  • SD Card
  • Serial Cable
  • HDMI Cable
  • USB Cable
  • WiFi

 

  • iEx
  • Hotswap
  • OTP
  • Livebook
  • NervesHub

Rewind Recap

Questions?

Workflows for Elixir Nerves (Nerves Meetup July '22)

By Jason Johnson

Workflows for Elixir Nerves (Nerves Meetup July '22)

  • 441