Elixir Wizards is an interview-format podcast, focused on engineers who use the Elixir programming language. Initially launched in early 2019, each season focuses on a specific topic or topics, with each interview focusing on the guest's experience and opinions on the topic. Elixir Wizards is hosted by Sundi Myint, Owen Bickford, and Bilal Hankins of SmartLogic, a dev shop that’s been building custom software since 2005 and running Elixir applications in production since 2015. Learn more about how SmartLogic uses Phoenix and Elixir. (https://smartlogic.io/phoenix-and-elixir?utm_source=podcast)
Creating VintageCell: Nerves, PCBs, and GenStateMachine with Bryan Green
Today on Elixir Wizards, Bryan Green shares how he transformed a vintage 1930s rotary phone into a fully functional cell phone using Elixir, Nerves, and a mix of hardware components.
Bryan shares the highs and lows of his project, from decoding rotary dial clicks to troubleshooting hardware issues with LED outputs. He explains why Nerves was the perfect fit for this project, offering SSH access, over-the-air updates, and remote debugging. You’ll also hear how Elixir’s concurrency model helped him manage hardware inputs and outputs efficiently using GenStateMachine and Genservers.
Elixir and Nerves really shine when modeling real-world systems. Bryan dives into how he used a finite state machine to track the phone’s states and handled inputs from the rotary dial and hook switch via GPIO.
For hardware enthusiasts, Bryan’s advice is to embrace this “golden age” of DIY electronics. Whether you're experienced with embedded systems or just curious on where to start, Bryan's VintageCell can inspire you to tinker with a hardware engineering project.
Key topics discussed in this episode:
Advantages of functional programming and immutability in Elixir
Building hardware projects using Adafruit components
Why Nerves was the best choice for the VintageCell project
Interpreting rotary dial clicks using GPIO and circuits.gpio
Troubleshooting hardware issues with LED diagnostics
Challenges in optimizing wiring and PCB design
Benefits of Nerves: SSH access, OTA updates, and remote debugging
Modeling real-world systems with Elixir and Nerves
Implementing a finite state machine with GenStateMachine
Managing input with Genservers for rotary dial and hook switch
Leveraging community resources like Discord, Elixir Slack, and forums
Practical advice for keeping hardware projects on track
Potential applications from SMS servers to home automation
Links mentioned:
Vintage Cellphone: Bridging the Past and Future with Elixir (https://www.youtube.com/watch?v=U4hetzVpjmo)
Seven Languages in Seven Weeks https://pragprog.com/titles/btlang/seven-languages-in-seven-weeks/
Seven More Languages https://pragprog.com/titles/7lang/seven-more-languages-in-seven-weeks/
Node.js https://github.com/nodejs
https://nerves-project.org/
https://www.arduino.cc/
Adafruit Circuit Playground https://www.adafruit.com/category/965
Adafruit 3D Printed Star Trek Communicator https://learn.adafruit.com/3d-printed-star-trek-communicator
Adafruit FONA 3G Cellular + GPS Breakout https://learn.adafruit.com/adafruit-fona-3g-cellular-gps-breakout/overview
https://github.com/elixir-circuits/circuitsgpio
Nerves SSH https://hex.pm/packages/nervesssh
OTA (over-the-air) Updates with NervesHub https://www.nerves-hub.org/
https://github.com/kicad
Waveshare 4G Hat for Raspberry Pi https://www.waveshare.com/sim7600e-h-4g-hat.htm
https://hexdocs.pm/genstatemachine/GenStateMachine.html
https://hexdocs.pm/elixir/GenServer.html
https://www.sparkfun.com/
https://www.digikey.com/
USB-C Gadget Mode with Nerves https://github.com/nerves-project/nervessystemrpi4/issues/18
https://livebook.dev/
https://codestorm.me/
https://github.com/codestorm1/vintage_cell/ Special Guest: Bryan Green.
10/24/2024 • 28 minutes, 58 seconds
Creating the Igniter Code Generation Framework with Zach Daniel
To kick off Elixir Wizards Season 13, The Creator's Lab, we're joined by Zach Daniel, the creator of Igniter and the Ash framework. Zach joins hosts Owen Bickford and Charles Suggs to discuss the mechanics and aspirations of his latest brainchild, Igniter—a code generation and project patching framework designed to revolutionize the Elixir development experience.
Igniter isn’t just about generating code; it’s about generating smarter code. By leveraging tools like Sourcerer and Rewrite, Igniter allows developers to modify source code and batch updates by directly interacting with Elixir's AST instead of regex patching. This approach streamlines new project setup and package installations and enhances overall workflow.
They also discuss the strategic implications of Igniter for the broader Elixir community. Zach hopes Igniter will foster a more interconnected and efficient ecosystem that attracts new developers to Elixir and caters to the evolving needs of seasoned Elixir engineers.
Topics discussed in this episode:
Advanced package installation and code generation improve the developer experience
Scripting and staging techniques streamline project updates
Innovative methods for smoother installation processes in Elixir packages
High-level tools apply direct patches to source code
Progressive feature additions simplify the mix phx.new experience
Chaining installers and composing tasks for more efficient project setup
Continuous improvement in developer experiences to boost Elixir adoption
Encourage listeners to collaborate by sharing code generation patterns
Introduction of a new mix task aimed at removing the "unless" keyword in preparation for Elixir 1.18
You can learn more in the upcoming book "Building Web Applications with Ash Framework" by Zach and Rebecca
Links mentioned:
https://smartlogic.io/
https://alembic.com.au/blog/igniter-rethinking-code-generation-with-project-patching
https://hexdocs.pm/igniter/readme.html
https://github.com/ash-project/igniter
https://www.zachdaniel.dev/p/serialization-is-the-secret
https://www.zachdaniel.dev/p/welcome-to-my-substack
https://ash-hq.org/
https://hexdocs.pm/sourceror/readme.html
https://smartlogic.io/podcast/elixir-wizards/s10-e09-hugo-lucas-future-of-elixir-community/
https://github.com/hrzndhrn/rewrite
https://github.com/zachdaniel
https://github.com/liveshowy/webauthn_components
https://hexdocs.pm/elixir/Regex.html
https://github.com/msaraiva/vscode-surface
https://github.com/swoosh/swoosh
https://github.com/erlef/oidcc
https://alembic.com.au/
https://www.zachdaniel.dev/
Special Guest: Zach Daniel.