Voice Activity Detection in Elixir and Membrane

I hacked on something quite useful in the last few weeks, off and on. Voice Activity Detection in Elixir with Silero VAD through ONNX. I’ll show what I did and try to give an idea of what it is and why it is useful. It boiled down to this gist as a proof of concept. Should work o … | Continue reading


@underjord.io | 7 hours ago

Bodging GenServers Together

What feels like forever ago but what was probably a year and a half I gave a talk about Lively LiveView with Membrane. Video is available for the curious. It was a stunt talk but also a talk about creativity and how Elixir let’s me plug things together and try things that feel ma … | Continue reading


@underjord.io | 5 days ago

How I use Erlang Hot Code Updates

One of the Erlang ecosystem’s spiciest nerd snipes are hot code updates. Because it can do it. In ways that almost no other runtime can. I use Elixir which builds on Erlang and has the same capabilities. The standard way of doing Elixir releases via mix release does not support E … | Continue reading


@underjord.io | 8 days ago

Anatomy of Embedded Elixir

Working on the Nerves project, the Embedded framework for Elixir, has given me an increased appreciation for how Frank Hunleth and his collaborators through the years have structured things. And while I’ve found crossing into the Linux-heavy part of it difficult and frustrating t … | Continue reading


@underjord.io | 1 month ago

Putting code on a Nerves device

The Nerves project is a way of building embedded Linux devices where the BEAM virtual machine takes care of running things. This does not constrain what you can run in any significant way. The easiest way to think of it is as a replacement for systemd. Though it is not only that. … | Continue reading


@underjord.io | 2 months ago

To Nerves from Elixir

I adore Nerves. I recently joined the core team. And I’ll be doing my best to help people get along with this lovely way to co-mingle hardware and massively concurrent reliable software. Getting started Assuming you have a comfortable Elixir & Erlang installed, preferrably the mo … | Continue reading


@underjord.io | 2 months ago

Catching up with Elixir

I’ve kept very busy recently and as I look at what I published last it has clearly kept me from blogging. I don’t love that. I like having a blog and I like tending to it. I’ve not missed a beat on the newsletter’s weekly cadence but that might not be your jam. Let’s catch up. I’ … | Continue reading


@underjord.io | 3 months ago

Newsletter issue, adept adoption

My newsletter-provider Campaign Monitor (not a recommendation, they are .. fine I guess) are having an outage. And I’ve been on an unbroken publishing streak for the newsletter for a significant number of years. Probably 4, I could check but can’t log into Campaign Monitor. So th … | Continue reading


@underjord.io | 4 months ago

The Future Stack

Fly.io is a highly visible cloud provider in the Elixir ecosystem and they put forward an interesting promise. They don’t deliver on that promise currently but I think it would be very compelling if they get there. Especially for Elixir. Let’s dig in. This work is sponsored and s … | Continue reading


@underjord.io | 6 months ago

Chatting, Sharing (& Shots) in Chattanooga - GigCity 2024 report

I went to Chattanooga in Tennessee from Sweden to hang out with the Elixir community. I’ve been part of Elixir in various ways for 6-7 years now and this is the first time things have lined up and I could go to the US for a conference: I had a sponsor for the trip. I was offered … | Continue reading


@underjord.io | 6 months ago

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 | 7 months 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 | 8 months 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 | 8 months 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 | 10 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 | 1 year 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 - 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years ago

Fear-Driven Development

Continue reading


@underjord.io | 2 years ago

Why can't I find a CMS?

Continue reading


@underjord.io | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years 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 | 2 years ago

What ID3v2 could have been

Continue reading


@underjord.io | 2 years 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 | 2 years ago

Phoenix LiveView on Nerves IoT

Continue reading


@underjord.io | 2 years 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