Unpacking Elixir - IoT & Embedded with Nerves

In this part of the series we dive into one of the frameworks and toolsets that really got me going with both Elixir as a hobby and the community as a space full of helpful people. This will be all about The Nerves Project, oh, and touch on some related stuff. Before we dig in I … | Continue reading


@underjord.io | 9 days ago

Fundamentals of Object Storage

I did a livestream where I talked about Object Storage. The how and the why. The Bad Old Days. And also the neat and interesting stuff just beyond the basics. I figured I’d cover that in text as well. You can watch the stream here. Transparency notice: The livestream and this blo … | Continue reading


@underjord.io | 1 month ago

Challenges of local-first LLMs

TLDR: the tricky part is “Large”. “Language” and “Model” seems manageable. But largeness has all sorts of trouble associated with it for mobile devices. Not insurmountable, but challenging. Also makes for finicky development. To start off, I am not an AI expert. I am not an ML en … | Continue reading


@underjord.io | 1 month ago

Unpacking Elixir: Phoenix

In this series I’ve been unpacking various facets of Elixir. Mostly this has meant trying to explain Erlang and the BEAM through the lens of Elixir. Now we are moving into the domain of the web framework. This is where I dare say that Elixir has much more to say than Erlang. Erla … | Continue reading


@underjord.io | 3 months ago

Unpacking Elixir: The Actor Model

This series covers a lot of fundamentals about the underlying BEAM VM and Erlang as consequence of covering Elixir fundamentals. A lot has been said about The Actor Model when it comes to Erlang. That’s kind of funny. Because the only thing that as a matter of terminology should … | Continue reading


@underjord.io | 5 months ago

Unpacking Elixir: Observability

Elixir supports the usual supects of observability. Open Telemetry (OTel), log handlers, capturing metrics. And it does it well. This post will mostly focus on the observability you have on the BEAM that is either incredibly rare to see elsewhere or possibly entirely unique. The … | Continue reading


@underjord.io | 7 months ago

Unpacking Elixir: Resilience

The nine nines. 99.9999999% of uptime. Whether the AXD301 actually deserves to be held up as a system of nine nines seems debatable. I am not particularly interested in that debate. Erlang has a strong record for reliability and a design intended to help you as a developer and op … | Continue reading


@underjord.io | 7 months ago

Unpacking Elixir: Real-time & Latency

Elixir was built on Erlang. Erlang was built to provide “consistently low latency” and a few other audacious goals. Note, this is not a hard realtime constraint. It is soft, squishy and yet, important and real. It makes Erlang unusually suitable to systems where latency matters a … | Continue reading


@underjord.io | 8 months ago

Unpacking Elixir: Syntax

Elixir is a language with syntactical roots in Ruby. It also carries the Erlang legacy. Legacy used here as in “a great legacy” and not as in “system you don’t like anymore”. Ruby is an object-oriented language. Elixir is functional language. The Erlang part has an impact as Elix … | Continue reading


@underjord.io | 8 months ago

Unpacking Elixir: Concurrency

Elixir is the thing I do most of my public writing and speaking about. It is my default programming language for the last 5-6 years. It suits my brain. Performs well for the kind of work I typically do. And using it I have experienced very few drawbacks. Rather than writing yet a … | Continue reading


@underjord.io | 8 months ago

The many states of Elixir

We of the blessed church of Functional Programming pride ourselves on our immutability, purity and lack of noxious side-effects. We do not mutate the state. We only produce new and better state. Deterministic state. Correct state. The best state. Except that I work in Elixir. Eli … | Continue reading


@underjord.io | 10 months ago

Scripting with Elixir

I was a Python developer for some time and one great joy of Python is that you have an expressive language that you can use for your serious apps as well as for your hacky little one-off script or bespoke pieces of automation. By expressive I mean that typing very little can give … | Continue reading


@underjord.io | 10 months ago

Why do ML on the Erlang VM?

Another question might be; why do machine learning at all? I’m not big into ML/AI though I’ve been poking it more recently as the open models, such as Stable Diffusion and the more practical Whisper, caught my curiosity. I have a very decent GPU (3090 Ti) and I’ve poked around a … | Continue reading


@underjord.io | 11 months ago

ElixirConf EU 2023, Lisbon report

Last week I attended ElixirConf in Portugal and had a lovely time. I’ll try to capture my experience of the conference here in this post. For me and for you. The last ElixirConf I visited was Prague in 2019. Pre-pandemic. I had just gotten into Elixir and kind of decided that I s … | Continue reading


@underjord.io | 1 year ago

Underjord | The Underjord Newsletter

Not every thought needs to be a blog post. Some ideas are more fun in a more personal setting. I write quite a bit and some of it goes to the blog here. But I also write every week for my newsletter. So if you enjoy my writing and the sentiments I share here I would recommend try … | Continue reading


@underjord.io | 1 year ago

Physical knobs & userspace drivers in Elixir

I like production gear. Audio, video and .. miscellaneous. I like things that seem like they’ll make me oh-so-very productive. I’m a sucker prosumer as a hobby. Let’s talk about Elgato, Elixir and why I never actually get anything done. This is unfortunately not sponsored by a pr … | Continue reading


@underjord.io | 1 year ago

Video - Chat bots as UI at ElixirConf Africa

TODO intro function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source"); video.pause(); sources.setAttribute("src", src); video.load(); video.play(); return false; } … | Continue reading


@underjord.io | 1 year ago

Video - Does terminology matter?

A short video on the importance of terminology in computing. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source"); video.pause(); sources.setAttribute("src", … | Continue reading


@underjord.io | 1 year ago

Video - Sonic Pi

Code has always been about creative pursuit for me. This video showcases Sonic Pi. It is an open source project that I really appreciate. Sonic Pi enables live coding of music. If you are already a programmer it can turn your hard-earned, often dry, programming capabilities into … | Continue reading


@underjord.io | 1 year ago

Video - Why use a database?

A short video on databases. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source"); video.pause(); sources.setAttribute("src", src); video.load(); video.play(); … | Continue reading


@underjord.io | 1 year ago

Video - Is it all queues?

Are computers really all about queues? At some level. Probably. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source"); video.pause(); sources.setAttribute("src … | Continue reading


@underjord.io | 1 year ago

Video - Reacting to the Phoenix Keynote 2022

I share my reactions to the Phoenix keynote at ElixirConf 2022. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source"); video.pause(); sources.setAttribute("src … | Continue reading


@underjord.io | 1 year ago

Complex Systems All The Way Down

As part of running Underjord I’ve done both mentorship and some teaching. Both in the form of a working relationship where I have seniority and am responsible for supporting their learning as well as mentoring entirely external people of varying experience levels. I find it incre … | Continue reading


@underjord.io | 1 year ago

Fear-Driven Development

Continue reading


@underjord.io | 1 year ago

Why can't I find a CMS?

Continue reading


@underjord.io | 1 year ago

Video - Self-hosting: Mattermost

Slack, Teams, teamchat. We all use them in our jobs. It is unclear whether that’s even legal. I wanted to present one of the more well-known open source options and how to get started with it. This video is a collaboration with GleSYS. Keep them in mind for your cloud and data ce … | Continue reading


@underjord.io | 1 year ago

Tradition and Ritual in Software, or The Unwritten Code of Code

I’ve been thinking about shared experiences: culture and tradition. As the seed of this was written close to the holidays, it might be that they are to blame. But this post isn’t about Christmas or the new year; it’s about my reflections on these human matters and how they apply … | Continue reading


@underjord.io | 1 year ago

Video - My Tools, the current product stack

In this very serious video I will tell you exactly how you must build your products. Actually, I’m just outlining the tools I’d typically look at and consider right now. I hope you enjoy. I rather like the intro personally. Also on YouTube. function switch_video(element) { var sr … | Continue reading


@underjord.io | 1 year ago

Video - LiveView on Nerves

A video on doing LiveView with Nerves and having fun with input devices. Published as I finish up my backlog of publishing all my videos to my site. It should calm down now. This was also more thoroughly covered in text in this post. function switch_video(element) { var src = ele … | Continue reading


@underjord.io | 1 year ago

Video - Self-hosting: Plausible Analytics

This video covers the steps to set up Plausible Analytics. Previously published on YouTube and part of me catching up on site publishing :) function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sourc … | Continue reading


@underjord.io | 1 year ago

Video - Reacting to React

Out of freak fortune I haven’t significantly used React. This was an experiment in just diving in and trying to use it. Be warned, if you know React it might hurt. Let me know you like it. This video has been on the YouTube channel for some time but I’m catching up on the transco … | Continue reading


@underjord.io | 1 year ago

Video - What Is: Phoenix LiveView

A video explainer on what Phoenix LiveView is. Published late to this site, has been up on YouTube for some time. I’m catching up :) function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = vi … | Continue reading


@underjord.io | 1 year ago

Video - Why Self-Host

A video on why you should consider hosting your own services and data. Especially in the current EU legal landscape. Created in collaboration with GleSYS, a swedish data centre and cloud provider. This video lays the explanatory groundwork for a series of guides for setting up so … | Continue reading


@underjord.io | 1 year ago

What ID3v2 could have been

Continue reading


@underjord.io | 1 year ago

Code BEAM, Stockholm 2022

I started writing this on the train home from Code BEAM. It’s an Erlang, Elixir (and BEAM in general) conference put on by Code Sync which is part of Erlang Solutions. It was a hybrid conference, I was there entirely in person. It was a very good time. “Isn’t Underjord Just You?” … | Continue reading


@underjord.io | 1 year ago

Phoenix LiveView on Nerves IoT

Continue reading


@underjord.io | 1 year ago

Fundamentals & Deployment

I’ve had Gerhard Lazu on my livestream once where he showed me a way of doing CI/CD with k3s and ArgoCD. The podcast Ship It! that he hosts on Changelog recently had Kelsey Hightower on. Kelsey is to many this guru of the cloud native and Kubernetes space. I’ve had good value fro … | Continue reading


@underjord.io | 2 years ago

Is Phoenix LiveView Overhyped?

Continue reading


@underjord.io | 2 years ago

Nerves Quickstart, a video for the Elixir IoT framework

Continue reading


@underjord.io | 2 years ago

Video - What Is: Elixir

Trying to put words to the technology that has been most important to me for the last 4-5 years. Elixir. A language I picked up and now work almost exclusively with and specialize in. It is not the mainstream and I think that has serious advantages. function switch_video(element) … | Continue reading


@underjord.io | 2 years ago

Video - How Do: Server

This one has been a while at the back of my mind. A lot of my readers have mentioned wanting to learn Linux and servers. This is an attempt at just unleashing you on the very first steps of your journey to do server work. It covers setting up a server with Linode (taken as an exa … | Continue reading


@underjord.io | 2 years ago

Video - What Is: Server

A brief explanation of servers, the concept. Next step should be to show you good folks some stuff about how I set one up. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.queryS … | Continue reading


@underjord.io | 2 years ago

My Elm Experience

Continue reading


@underjord.io | 2 years ago

Video: Fixing my LiveView app

My note-taking web app build in LiveView needed some fixing. Also updated it to use the new heex templates. function switch_video(element) { var src = element.getAttribute("href"); var video = element.parentElement.querySelector("video"); var sources = video.querySelector("source … | Continue reading


@underjord.io | 2 years ago

Cross-Cutting Elixir in Teams

Continue reading


@underjord.io | 2 years ago

Video: Improving a GenServer, My IoT Lightswitch

GenServer is the typical Actor abstraction in Erlang and Elixir. I’ve used one for talking to my Elgato Keylights in the lightswitch project. I made it sort of dumb. It was a quick job so I want to improve it in a few ways. Make it not need to pull the new state from lights befor … | Continue reading


@underjord.io | 2 years ago

Video: Indie Livestreaming with Elixir & Membrane

So Software Mansion, the makers of Membrane Framework, have kindly conspired with me to get RTMP ready for Membrane. RTMP is the protcol used when streaming from popular open source tool OBS. The RTMP module is currently at a technical preview level so be warned, might have some … | Continue reading


@underjord.io | 2 years ago

Video: Building Out Indie Livestreaming with LiveView and Membrane

On a previous stream we tested out the library for RTMP in Membrane to achieve streaming on our own in Elixir. This time we make it more convenient, flexible and work our way towards using it. Being able to prepare and start livestreams, setting them up with LiveView, giving mean … | Continue reading


@underjord.io | 2 years ago