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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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