Blog

Anatomy of Embedded Elixir

2024-10-07

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 there has been reasonable steps to take all the way from building the application layer in Elixir all the way back to fighting the bootloader. I'll try to detail how a Nerves system is built up in this post.

Putting code on a Nerves device

2024-09-16

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.

To Nerves from Elixir

2024-08-30

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.

Catching up with Elixir

2024-08-28

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've been diving into embedded Linux with Elixir.

Newsletter issue, adept adoption

2024-07-19

As we are doing NervesCloud we are thinking a lot about adoption for Nerves. Our market is tightly bound to the number of folks doing IoT/embedded projects and choosing Nerves. The business can only thrive if Nerves thrives. Nerves can only thrive if Elixir thrives.

The Future Stack

2024-05-28

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.

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

2024-05-23

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 to not just speak but keynote. The conference is put on by friends, Bruce and Maggie Tate, who've supported a lot of great stuff in the Elixir community for a long time. And Todd Resudek decided to do NervesConf in conjunction. A bit of a perfect storm for me to head over. So I did. I want to unpack it.

Unpacking Elixir - IoT & Embedded with Nerves

2024-04-26

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.

Fundamentals of Object Storage

2024-03-19

I did a livestream where I talked about Object Storage. The how and 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.

Challenges of local-first LLMs

2024-03-08

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.

Unpacking Elixir: Phoenix

2024-01-22

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. Erlang has to my understanding never landed fully on a canonical preferred web framework. Elixir has Phoenix and this post will be unpacking Phoenix. The Elixir web framework.

Unpacking Elixir: The Actor Model

2023-11-16

A lot has been said about The Actor Model when it comes to Erlang. The Actor Model is generally a model for concurrent computation. And Erlang was not built to implement Actors. I'm sure we could be debate about whether it does or not. I have not read Carl Hewitt and I'm not going to offer an opinion. It does something similar enough in terms of message passing and spawning. It might be the case that Erlang processes has shifted what people expect an Actor to be and rather than be a realization of the theory it has become an implementation that overrides the theory.

Unpacking Elixir: Observability

2023-10-02

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.

Unpacking Elixir: Resilience

2023-09-24

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 operator achieve your nines. Maybe just five of them. Up to you really.

Unpacking Elixir: Real-time & Latency

2023-09-08

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 and where a near-realtime experience is necessary.

Unpacking Elixir: Syntax

2023-09-01

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 Elixir was designed to provide strong interoperability with Erlang. Like Ruby and Erlang, Elixir is a high-level of abstraction and very dynamic language. Overall I would say the Elixir syntax is pretty approachable and reasonable to learn. Let's unpack it.

Unpacking Elixir: Concurrency

2023-08-25

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 another post trying to widely summarize what I think is beneficial about the language I want to try and go a bit deeper on one particular aspect I like. Not incredibly technically deep, but unpack the concepts more thoroughly. I hope this will be a series of stand-alone posts. We will see. This time we unpack Elixir concurrency (and parallelism).

The many states of Elixir

2023-06-13

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.

Scripting with Elixir

2023-06-12

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 you a lot of progress towards your result. I've scripted a fair bit in Python. Now I do it with Elixir.

Why do ML on the Erlang VM?

2023-06-09

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 bit. I don't consider ML a super exciting solution to all the problems or a harbinger of general artificial intelligence. There have been some impressive things done recently for sure. There have also been some honestly grotesque overreach with regards to rights and consent. I'm not your AI hype man.

ElixirConf EU 2023, Lisbon report

2023-04-27

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.

Physical knobs & userspace drivers in Elixir

2023-03-01

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 prosumer brand, or anyone, that'd have been something.

Video - Chat bots as UI at ElixirConf Africa

2022-11-04

My presentation from ElixirConf Africa.

Video - Does terminology matter?

2022-11-04

A short video on the importance of terminology in computing.

Video - Is it all queues?

2022-11-04

Are computers really all about queues?

Video - Reacting to the Phoenix Keynote 2022

2022-11-04

I share my reactions to the Phoenix keynote.

Video - Sonic Pi

2022-11-04

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 musical potential. If you know music, you might just learn programming. If you know neither it is a fantastically fun place to start.

Video - Why use a database?

2022-11-04

A short video on databases.

Complex Systems All The Way Down

2022-10-24

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 incredibly hard to transmit everything I think people need to get familiar with when they want to do development. Why?

Fear-driven development

2022-10-07

There’s a thing I’m wary of with both companies and developers: when they seem to operate mostly on fear. In the case of companies, fear can lead to heavy screening during the hiring process, heavy-handed, detail-oriented project management or distrust towards employees. To my mind, these things either come from the basic mode of operation of some founding member or from cultural scars caused by a bad hire, a runaway project or very anxious management. Admittedly, there are projects where detailed specifications make sense. There are roles where screening is more important. There are entry-level garbage jobs where mutual distrust is possibly unavoidable at a certain level. However, I believe that, ultimately, all of these are detrimental practices.

Why can’t I find a CMS?

2022-09-26

I've been trying to address this particular topic and I find it challenging. It is a topic that's very easy to turn into a negative rant and that's not what I like to do. If you enjoy any of the stacks I dismiss in this post, please know that is not a jab at you or your work. I have worked in these stacks and I've mostly transitioned away from them where they aren't necessary. They absolutely work and can be used. I believe my reasons are good and sound, but they are specific to my values and experiences. If you have a different take-away, I'm fine with that. With that out of the way, let's talk about Content Management Systems, or more commonly CMS.

Video - Self-hosting: Mattermost

2022-09-16

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 center needs in the Nordics.

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

2022-09-12

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 in the software development world.

Video - My Tools, the current product stack

2022-08-26

In this very serious video I will tell you exactly how you must build your products.

Video - LiveView on Nerves

2022-08-26

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.

Video - Self-hosting: Plausible Analytics

2022-08-25

This video covers the steps to set up Plausible Analytics. Previously published on YouTube and part of me catching up on site publishing :)

Video - Reacting to React

2022-08-21

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.

Video - What Is: Phoenix LiveView

2022-08-20

A video explainer on what Phoenix LiveView is.

Video - Why Self-Host

2022-08-20

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.

What ID3v2 could have been

2022-06-07

Speculations and specifications. If you were a Winamp user back in the day, or curate an MP3 collection currently, you might recognize the humble ID3 tag. It is what the metadata in the MP3 file is made up of. First it was pretty limited in the version later dubbed ID3v1. Like any good 2.0 they added a ton more fields, features, removed character limits and it was suddenly ID3v2. The latest spec is ID3v2.4 while the most commonly adopted one seems to be ID3v2.3. I recently found myself having a reason to dig into this specification.

Code BEAM, Stockholm 2022

2022-05-29

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.

LiveView on Nerves

2022-05-26

I've played with Nerves for almost as long as I've been learning and using Elixir. Nerves is a fantastic way of working with hardware along with the BEAM virtual machine and it is great fun for hobbyist projects like Raspberry Pis. Phoenix LiveView is currently my favorite way of making full-stack web development cohesive and keeping the complexity as low as possible for it. I haven't run into any short compelling demos of getting these started together.

Fundamentals & Deployment

2022-03-21

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 from what I've heard him say in the past. In this episode he really spoke to me.

Is LiveView Overhyped?

2022-03-17

To alleviate any sense of clickbait. No, it is not overhyped as a technology, in my opinion. Let's get into the nuances. In a recent tweet a while back a member of the Elixir community expressed some frustration with how everything is all about LiveView. It led to some interesting and useful discussion and as someone who writes a fair bit about Elixir, Phoenix and such I have thoughts. Following on that discussions other people expressed further concern about the unreserved enthusiasm with which some of us have pushed LiveView and maybe even more, the PETAL stack. I doubt they were just thinking of me there but I'd be surprised if I wasn't considered a bit of a cheerleader for it. So taking some of that very reasonable criticism and skepticism, let's try to address that and also dig into some of the concerns about the LiveView hype.

Nerves Quickstart

2022-02-04

This is a labor of love where I just wanted the Nerves project to have a nice promo video. Frank and crew put a lot of work into making Nerves approachable while all their day-to-day use and needs is in the nitty-gritty industry side of it. So what does all that effort get them? Well, they've gotten it to the point where a complete step by step can be a one minute, 38 seconds long video. Showing the common steps for getting an RPi from inert to you controlling the system LEDs using Elixir from a web UI. Kudos to Livebook on the interactive web programming bit :)

Video - What Is: Elixir

2022-01-30

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.

Video - How Do: Server

2022-01-30

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.

Video - What Is: Server

2022-01-30

A brief explanation of servers.

My Elm Experience

2022-01-20

I've been using Elm since about one year back now. At the start of 2021 I began working with a client that had an existing Elm frontend code base and an early stage backend built in Elixir and Phoenix. This post will be about my experiences running face first into Elm. I'll be vague on some details as I can't share too much about the specific client and code base. I'll be much less vague about Elm itself.

Video: Fixing my LiveView app

2022-01-07

My note-taking web app build in LiveView needed some fixing. Also updated it to use the new heex templates.

Guest post: Cross-cutting Elixir in Teams

2021-12-21

Release day. Although the product team was used to a bit of a hustle to wrap up open features, perform final testing, and prepare for deployment, today presented some additional challenges.

Video: Building Out Indie Livestreaming with LiveView and Membrane

2021-12-21

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.

Video: Elixir and Computer Vision with evision

2021-12-21

From Twitter I stumbled on this neat, still early, but working project for using the OpenCV library from Elixir. So I decided to give it a whirl!

Video: Improving a GenServer, My IoT Lightswitch

2021-12-21

GenServer is the typical Actor abstraction in Erlang and Elixir. I've used one for talking to my Elgato Keylights in the lightswitch project. It is sort of dumb.

Video: Indie Livestreaming with Elixir & Membrane

2021-12-21

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 sharp edges.

Winners - Manning book giveaway

2021-12-20

Just a brief note announcing the three winners that take home a copy of Elixir in Action by Saša Jurić. Thanks to Manning for providing those copies.

Are you hiring Elixir developers?

2021-12-14

Is your company actively trying to hire Elixir developers? Or should you be?

Are Contexts a Thing?

2021-12-06

The discussion of Contexts in Phoenix, their arguable relevance to Domain-Driven Design and their general usefulness feels like a common point of controversy in Elixir. I've gathered that the discussions went high and low as it was becoming a thing. I don't really care for controversy but what I see is a topic which gets confusing to wrangle with and which I never know quite how to explain. So this will be an attempt to explain what Contexts as provided are, cover some common concerns around this and two rather opposing suggestions about how to deal with them.

Giveaway: Elixir in Action

2021-11-23

The book Elixir in Action by Saša Jurić is widely recognized as one of the best books on this language I favor. I've been meaning to run some giveaways and this book was always on the agenda. It shouldn't be the only one but I think it makes a very appropriate starting point. Especially as the book has been such a starting point for many Elixirists through the years.

Building a Startup on Elixir to a $50 mil round

2021-11-17

I became familiar with Marcin Kulik when I was brought in to work with a company called Vic.ai. A fintech startup. Marcin is the guy who started building their entire Elixir system and was the person to primarily onboard me to the work. When I was brought in they were a small team of 4 devs, looking to grow up to around 7 at the time.

Finally using your Raspberry Pi & Elixir

2021-10-30

How many Raspberry Pi do you have sitting in a drawer. I think I still have about 4? And at least 2 on a shelf. I may be over the average there but the story itself is common. Oh! This is neat, I can automate X with this and ...

Video: Attempting to Control Elgato Keylights from Nerves

2021-10-24

This livestream we tried to control my Elgato Keylights from a Nerves device. We really tried gang, come on. A good attempt.

Video: Automatically Clustering Nerves devices

2021-10-22

Sitting down to show some of the work I've done with Nerves and Erlang Distribution for clustering Raspberry Pis. This is what I do when I have a cold and am not streaming. Automatically, with mDNS.

Video: Making a Calendar Gadget with Nerves and LiveView

2021-10-15

Cleaning up previous work and making the eInk display look fabulous by iterating in our LiveView-based simulator. We get this thing ready for small office production :)

Video: Forming an Erlang cluster of Pi Zeros

2021-09-30

I sat down with the stream and gently coaxed a couple of Raspberry Pi Zeros to cluster up with each other using the Nerves project.

Video: Unbox a Pi400 and put Nerves on it

2021-09-20

I've been enjoying some Nerves recently which prompted me to finally order the Pi400 to play around with. In this stream I unpack it and get Nerves running on it without having tried it before or hearing that anyone had tried it. I just trusted the hard work of the Nerves team.

Video: Nerves, Livebook & small displays (eInk, OLED)

2021-09-16

The Inky eInk display was one of my first real things done with Elixir. And I'm apparently back on my bullshit. Because I just pulled that thing out and tried it with Nerves + Livebook. Had a really good time this stream and I think I want to do more things with hardware like this. Let me know how you like that.

Video: Phoenix 1.6 RC, Preview

2021-09-03

There are some very exciting updates in Phoenix 1.6 that just recently hit RC. We go through and try them out. It all seems to work great. I consider every bit of it an improvement.

Video: Elixir & Ecto, generating queries

2021-08-27

As part of some foundational work on a CMS concept I've been building out this fairly dynamic Ecto-based way of dealing with content types and content (we call it entity types and entities) in a database.

Video Companion - Teaching Elixir - Strings

2021-08-23

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, strings.

Video: Elixir CMS Thoughts, and code

2021-08-23

I've had a lot of thoughts and a few failed runs at creating a CMS in Elixir. This isn't because Elixir is particular hard to do it in. Rather the opposite. The reason I've abandoned those efforts have to do with what exactly I want solved with a CMS.

Video Companion - Teaching Elixir - Comprehensions

2021-08-16

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, comprehensions.

Video: Attempting Operational Transformation .. again

2021-08-16

Getting deeper and farther into trying to do Operational Transformation with Erlang wxStyledTextCtrl, aka. Scintilla and TextDelta.

Video Companion - Teaching Elixir - Sigils

2021-08-13

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, sigils, the most arcane.

Video: Attempting Operational Transformation

2021-08-13

In an act of hubris I try to tackle with wxStyledTextCtrl and Operational Transformation in an unholy alliance of native UI and offline-friendly collaboration. I get partway there but nothing actually works.

Video Companion - Teaching Elixir - Modules

2021-08-05

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, modules.

It is not about Elixir

2021-07-30

That's right. It never has been.

Video: Building with PETAL 4 - Authentication

2021-07-29

In this stream of the PETAL Photo project we work on authentication.

Video: Building with PETAL 1 - Getting Started

2021-07-16

It begins. For my vacation work-days, a concept to explain soon, I wanted to try to scratch an itch that I feel have product potential. So I decided to do parts of the work on the stream. This is the first part.

Video: Building with PETAL 2 - Mostly Tailwind

2021-07-16

It continues. After some off-stream work fixing the upload issues from last stream we are now mostly heading into making this visually sensible. We are using the PETAL stack and that means a lot of Tailwind CSS.

Video: Building with PETAL 3 - Thumbnails and Transcoding

2021-07-16

Getting a bit technical in this one we get into thumbnails and video transcoding in the middle of a heatwave. Watch me sweat .. the details with FFMPEG.

Trust in Software, an All Time Low

2021-07-09

I don't think I've ever had more distrust and as a consequence distate for software than in recent years. I don't think its just me as a tech-nerd with artisanal tech-carpentry aspirations. I want people to build well, treat their users right and generally exercise some actual restraint. I see it very clearly and I react more viscerally than anyone non-technical in my surroundings. However, I see the frustrations and the consequences everywhere.

Deploying with k3s and ArgoCD

2021-07-01

I'm pretty skeptical of Kubernetes as a choice for small teams, small projects and any less complicated operation. Gerhard Lazu is quite enthusiastic about it on the other hand. After having me on his show Ship It!, a Changelog.com production, I expressed some curiosity about k3s, a lightweight variant of k8s. He offered to come on the livestream and show me how good life can be. Hope you enjoy the video.

Systems Design & Architecture livestream

2021-07-01

For this livestream I sat down with pen and (i)Pad and tried to hash out some of my design thinking for a product idea I've been turning over in my head.

Video Companion - Teaching Elixir - Pipe Operator

2021-07-01

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, the pipe operator |>.

Onboarding to Elixir

2021-06-22

I've worked with a number of clients on Elixir projects and I've onboarded myself, I've been onboarded and I've onboarded others. And compared to my experiences with PHP/Python/Javascript and my limited experience with C#/.Net I have experienced quite a difference.

Video companion - Teaching Elixir - Functions

2021-06-15

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, functions.

Video - Setting up Prometheus and Grafana with Elixir

2021-06-07

Alex Koutmos, creator of the PromEx library and buddy from the radio show gave us some of his time to help set up Grafana and Prometheus metrics for our application Noted. This was an extremely tight path to a lot of observability. PromEx is very kind to you as a developer. Leveraging the common telemetry API to make something really compelling. And then Alex has spent the effort so you get a whole bunch of useful default dashboards rather than needing to decide up front what you want. I thought this was quite the well-packed hour. Hope you enjoy.

Video companion - Teaching Elixir - Control Structures

2021-06-07

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, control structures

Video - Improving the crawler

2021-06-04

Made the webcrawler better, more polite. Plan to continue with this in coming livestreams, so watch this to get up to speed on what we are doing.

Video companion - Teaching Elixir - Pattern Matching

2021-05-31

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, pattern matching.

Video - Building a web crawler

2021-05-21

Had some great fun building on this webcrawler on the stream. Plan to continue with this in coming livestreams, so watch this to get up to speed on what we are doing.

Video companion - Teaching Elixir - Enums

2021-05-17

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, Enum as in enumerables. We map, we reduce, we love and we laugh.

Video - Native UI with Elixir and wxWidgets

2021-05-14

This livestream turned out well. We got the Erlang wx module to work as intended in Elixir. We built a window, we made some controls, we made them interact. Good fun.

Video - PETAL Stack Setup

2021-05-11

Last weeks livestream was spent mostly on setting up the PETAL stack basics for a project. Then we spent some time with setting up Exqlite and finally started looking at setting up SiteEncrypt. Everything you'd need for an indie SaaS ;)

Video companion - Teaching Elixir - Collections

2021-05-10

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook. This time, collections. So lists and maps, etc.

Video companion - Teaching Elixir - Basics

2021-05-03

Me and an experienced programmer friend sit down and try to teach him Elixir using the Elixir School curriculum and materials. We are doing it in Livebook.

Video - Stream Overlay with LiveView

2021-04-30

A livestream where I created some parts of an overlay for my stream. In this case it shows some indication of what we do during a coding stream by showing lines-of-code stats as we go. This is the view-at-your-leisure archival footage of that. This time in 1080.

Membrane Media Processing & LiveView

2021-04-26

Membrane Framework allows processing media streams in a very high-level compelling way with Elixir. I've been wanting to work with it for a while and finally did a small thing with it around my most recent livestream. When we did the live stream we didn't get it all the way to where I wanted. This resolves that.

Video - Membrane Framework, trying it out

2021-04-23

Another live stream. I've been very curious to try Membrane and I finally got to screw around with it some. Thanks to Marcel Fahle for being a patient and helpful guest.

Video - Livebook, trying it out

2021-04-19

Last friday I did my second live stream. A lot of nice people stopped by and I spent the time showing and getting more familiar with the newly released Livebook.

Lumen - Statically compiled Erlang for x86

2021-04-08

The Lumen Project is an ambitious compiler development effort to create a complimentary set of compilers and tools that allow developers to get the power of the Erlang VM, The BEAM, in places it does not traditionally fit. Such as the browser. Currently the project is at an early released stage as covered in Luke's ElixirConf talk. It does not yet implement all of Erlang OTP and as such won't handle most Erlang/Elixir you could throw at it. I want to show something that it does do. And while the project is a complicated compiler project you do not need to know that stuff to try it out. This should be achievable for most developers and to ensure that I wasn't talking out of my rear I had my assistant developer follow the instructions without my input and it worked out well.

A Telegram Bot in Elixir feat. LiveView

2021-02-24

I asked my network about noting ideas quickly and got a lot of good responses. One mentioned saving them in Telegram. I don't think I want to do specifically that but I do want a minimum friction way of noting ideas for later review and refinement. And sending them to a Telegram chat would be quite nice. So I started on the path of something like a note-taking system using Telegram for ingesting quick notes. And I want to share the satisfaction I felt with seeing the near real-time way that it works.

Small update, full content RSS

2021-02-22

This is a small update to let you know that the RSS feed contains full content.

Post-mortem: 10 years in the vertical - Part 3

2021-02-12

Before I did the independent thing I was a developer at a few different companies. I worked on multiple things but one of the main things I worked on was a series of products in the preschool education segment here in Sweden, that's the titular vertical. The products have since been shut down. This series of posts will cover my trajectory as a professional web developer as well as the evolution of these systems. The series has three parts (they are already written) and will likely receive an addendum. This is part 3.

Post-mortem: 10 years in the vertical - Part 2

2021-01-29

Before I did the independent thing I was a developer at a few different companies. I worked on multiple things but one of the main things I worked on was a series of products in the preschool education segment here in Sweden, that's the titular vertical. The products have since been shut down. This series of posts will cover my trajectory as a professional web developer as well as the evolution of these systems. The series has three parts (they are already written) and will likely receive an addendum. This is part 2.

Getting started with PETAL

2021-01-18

I recently wrote about the PETAL stack on Changelog.com and as I haven't really had a chance to really get my hands dirty with it I decided that my next lab project should use it. So I set it up as a public repo and added the missing components manually by following some guides. You can see the commits or follow along.

Post-mortem: 10 years in the vertical - Part 1

2021-01-15

Before I did the independent thing I was a developer at a few different companies. I worked on multiple things but one of the main things I worked on was a series of products in the preschool education segment here in Sweden, that's the titular vertical. The products have since been shut down. This series of posts will cover my trajectory as a professional web developer as well as the evolution of these systems. The series has three parts (they are already written) and will likely receive an addendum.

Podcasts that supported my independence

2021-01-11

I want to shine a light on some podcasts that I really appreciated as I made my bid for independence and went out to contract, consult and strap boots. Because in some aspects running your own business can be lonely. It suits me well but I also immensely appreciate having some voices that share my concerns, contribute to my thinking and sometimes just keep me company.

Elixir businesses doing well

2020-12-09

I generally don't track startup news and financing rounds closely but it filters in because I enjoy tech. And these two Elixir-based companies made a blip on my radar recently with their successful rounds. So why not. Let's be a little bit business.

Wisps, a touch of whimsy

2020-12-03

This has been the most fun I've had with JavaScript in some time. A spiritual successor to the [stupid solution](/live-server-push-without-js.html) which allowed both me and my visitors to see the number of concurrent readers. It is also a piece of whimsy I've wanted to do for a while to add more magic and life to the site. The animations default to off to preserve CPU but do turn on the magic switch if you can and want to see the visuals. This is arguably less stupid.

Asking a tech recruiter

2020-11-25

While working I mostly found the attention of recruiters slightly reassuring but often annoying. I think that annoyance is fairly common, usually built up from countless LinkedIn drive-by attempts from unreading keyword-hunting recruiters. I thought that now, out on my own, maybe this legion of recruiters can be my sales department.

The Mac is losing me

2020-11-18

I've been mostly happy using a Mac since I got myself my first computer earned with programmer money. I believe it was a mid 2009 15" MacBook Pro. That was a computer I used at least until 2016 which I consider very decent usable life. At that point I had replaced the hard-drive with an SSD, upgraded the RAM and switched a battery that was worn out. I stopped using it when it just straight died some time in 2016.

The BEAM marches forward

2020-10-26

The BEAM is the virtual machine that Erlang and Elixir runs on. It is widely cited as a battle-tested piece of software though I don't know in which wars it has seen action. It has definitely paid its dues in the telecom space as well as globally scaled projects such as Whatsapp and Discord. It is well suited to tackle soft-realtime distributed systems with heavy concurrency. It has been a good platform chugging along. And with a small team at Ericsson responsible for much of its continuing development it has been managed in a deeply pragmatic way. Erlang has always been a bit of a secret and silent success. Almost no-one uses it if you look at market shares. But among the ones that use it there seems to be a very positive consensus. And then Elixir came and caused a bit of a boom. I think the BEAM has benefited from Elixir and Elixir wouldn't exist without the BEAM. With that bit of background I'd like to shine a light on some cool developments that I think makes the BEAM more interesting or even uniquely interesting in the future.

Supervision trees, an example in Elixir

2020-10-21

So any time recently that I've gone looking for a good overview of supervision trees in Elixir I haven't found what I want.

Stupid solutions: Live server push without JS

2020-09-25

So in my post Is this evil? I covered a way of tracking users with CSS. While thinking about those weird ways of using the web I also started thinking about pushing live data to clients without JS. Or at least maintaining a connection. So WebSockets requires JS. WebRTC requires JS. Even HLS (video streaming), which would otherwise be super cool, with captions for accessibility. But no. Or rather, maybe on Apple platforms. Eh. Not good enough.

Vlog - 2020-09-22 - Helping Junior Developers

2020-09-22

Pondering one of the things I want to make an impact in: helping inexperienced developers get the traction they need to find their way into the industry.

Vlog - 2020-09-17

2020-09-17

A brief weekly run-down of what I've been doing.

Is this evil?

2020-09-15

I try to be a friendly citizen of the web. I try to keep my site in good shape. It should load quickly, track nothing beyond your basic server logs, not hassle you about cookies, GDPR or my newsletter. I do have a newsletter but it won't pop up in your face here. I try to stay firmly on the side of friendly and a good experience in how I run this site.

Vlog - 2020-09-07

2020-09-08

A brief weekly run-down of what I've been doing and what I'm planning on doing.

Vlog - 2020-09-07

2020-09-08

A brief weekly run-down of what I've been doing and what I'm planning on doing.

Nerves-keyboard - Running a mechanical keyboard with Elixir

2020-09-01

Chris Dosé was interviewed by us on Elixir Mix. When he spoke about his work on a Nerves-powered keyboard I knew this was a project I wanted to try out. So I dropped into their dev channel, acquired the hardware (thanks for the help) and have done some playing around with it.

Simple Solutions: UI choices without JS

2020-08-26

I've been looking at creating some progressively enhanced UI which shouldn't require JS for any basic operations. The idea being that I can accelerate and simplify any operation with interactivity provided by Javascript but I won't implement things in a way that requires JS.

Beam Bloggers Webring

2020-08-19

This is a brief announcement. If you are interested in following bloggers in the BEAM, Elixir, Erlang, etc. ecosystem or you blog yourself. Please check out beambloggers.com to get in on the old-school webring action. Bloggers can join it. It might lead to some traffic. Mostly it is a small nod to a stranger old time on the web when sites organized in rings for discoverability. I think the need for discoverability remains and some webrings have been showing up again. You can find the shuffler for the webring at the bottom of my site as well and just let it carry you to a new site.

The Strong Technologies

2020-08-14

I feel like a curmudgeonly sort recently. I'm honestly a pretty optimistic and positive person. But I'm becoming increasingly technically curmudgeonly. I don't think it is age turning me conservative. But I feel like I'm moving back to what I find tried and true in many ways. I feel resentful in a lot of cases where I can't really reasonably go back. So what am I talking about here?

The best parts of Visual Studio Code are proprietary

2020-08-03

I've been very surprised and delighted over a number of years now by Microsoft's strong efforts in open source. I understand the skeptics, I was on Slashdot when they tried to sue Linux out of existence and I think only time will tell. I figure MS contributing is better than them hunting Linux distributions for sport. So I was mostly onboard for Microsofts efforts and I've especially found Visual Studio Code useful.

Five Buck Fatigue

2020-07-23

This is about a reaction I noticed with myself in response to membership programs, patreons and individual sponsorship as I've run into significantly more of these following Corona. The advertising-supported model has confirmed many of the concerns about its sustainability and creators are looking for more reliable options. I think this feeling I have might be something other people experience and something for creators to be prepared for.

"More than one thing at a time"

2020-06-17

On a recent Elixir Outlaws episode Chris Keathley told us all a nice story of the advantages of Elixir as opposed to Ruby. His frustration with Ruby and appreciation of how Elixir works resonate at the frequency of my own frustrations and joys. I believe my titular quote is accurate, that's one of the primary things he noted. How nice it is to use a runtime that can do more than one thing at a time.

WordPress & the gross inefficiencies

2020-05-22

My recent work with WordPress revived a frustration I built up while working with software from that era of the 2000's. Drupal, WordPress, Joomla and friends. Whenever you visit a page, the system will generate it from scratch.

The WordPress merging problem

2020-05-18

WordPress is approximately the most popular CMS out there. I've worked with it plenty over the years, off and on, as clients, employers and others have needed websites.

A wall too tall - Nerves & k3s

2020-05-06

Short update on the general state of things. Pandemic quarantine in full swing. Me and mine are doing fine. Thankfully. We are staying at home awaiting a baby. I'm likely to be fairly sporadic for a few months. But I do intend to keep writing. Most of my blog posts are written to be useful in the longer term. If you want more in-the-moment writing, the newsletter is more temporally anchored publication (signup further down, no pop-up).

Self-evaluation improvements

2020-04-21

A little while back I released a tool for self-evaluating as a web developer. I have just now updated it to include some explanation and guidance for things topics where the learner indicates a need for it.

Check yourself - Web developer self-evaluation

2020-04-08

I've been thinking a lot about inexperienced (junior, if you must) web developers and just how much there is to learn about programming in general but the web in particular. You often hear people say that you don't need to know everything but you should have a solid foundation. Well, how do you establish a solid foundation and how do you know if you have one? How do you get introduced to all the relevant terminology and how do you find out what you haven't learned yet?

I always want to do it all

2020-03-09

My brain has very little chill on a day-to-day basis. There are moments where I can find a very peaceful state of mind. Doing something menial in the garden for an extended time, cooling off outside after a while in a sauna, winding down after heavy exercise. At most other times my mind is usually working on something or I'm itching with the need to do things.

Lumen - Elixir & Erlang in the browser

2020-01-23

The Lumen Project is an alternative implementation of the Erlang VM, more known as the BEAM. It is designed to work in WebAssembly with the specific goal of bringing Elixir and Erlang to the browser.

Why am I still excited about Elixir?

2020-01-20

A good ol' while back I wrote about why I'm interested in Elixir. I think that deserves some follow-up.

Ecto & Multi-tenancy - Prefixes - Part 3

2020-01-10

This should be the final piece of this saga. Previous parts can be found here:

A Slight Delight - Compile-time checking things

2020-01-06

This was a short-but-sweet thing that struck me while working with a client code-base. It was trivial but both useful and delightful and it is a type of thing I haven't been able to do in Python, PHP and Javascript in quite the same way.

Elixir - Signing for Cloudfront resources

2019-12-20

This covers how to create Signed URL Custom Policies with Cloudfront in Elixir.

Happy little screens (with Elixir)

2019-12-16

So me and Emilio Nyaray made Inky. We built on top of what was there from Nerves and Scenic and in the end we had theInky series of eInk displays for Raspberry Pi devices working with Nerves through Elixir. Cool. That was a fun tripI've covered previously:

Consider signing up for the Elixir Radar

2019-11-08

If you have an interest in the Elixir ecosystem I think the Elixir Radar newsletter is useful resource. I followed it even before I had any real opportunity to work with Elixir or Phoenix but it helped in keeping me up with conference talks, interesting blog posts and assorted other stuff. I recommend it.

Ecto & Multi-tenancy - Dynamic Repos - Part 2

2019-11-01

In the first part I covered the basics of getting started with Dynamic repositories with Ecto. Using that post we can create one or more repos at runtime, create the necessary database, run migrations to get it ready and then direct queries to it. That's a good start. Building blocks for something better. I'll try to get into the better bits here.

I was on a podcast

2019-10-23

You can listen to it here.

Ecto & Multi-tenancy - Dynamic Repos - Part 1 - Getting started

2019-10-14

Ecto is the database library we know and love from the Elixir ecosystem. It is used by default in Phoenix, thehigh-profileweb framework. Ecto has a bunch of cool features and ideas. But this post is about a corner full of nuts, bolts andvery little of the shiny or hot stuff. It just covers some rather specific needs. Ecto docs for these features arethis guide and this API. But that is usually not thewhole picture. I'll try to cover some of the practicalities.

What I’m up to - Mostly Elixir things

2019-10-03

While I'm writing something a bit more involved and substantial I figured I could give an update on what I've been doing. Mostly around Elixir. But I'll cover a few different things.

Why a newsletter?

2019-09-12

So I'm launching a newsletter. The sign-up is at the bottom of the page, it won't pop up here, so read on inpeace.

Case Study: Inky - An elixir library

2019-08-09

This is a post covering the creation and refinement of an open source project within the Elixir ecosystem. More words than code. Be warned.

Artisanal software - Beyond pragmatism

2019-07-15

Whenever we design and create software we need to pay attention to the trade-offs we are making.

An eInk display with Nerves & Elixir - Getting started with Inky

2019-07-07

So I've been curious about what kinds of displays you can connect to the Pi-series single board computers for a while. I happened to accidentally order a few. Among others an eInk display. I ordered the PaPiRus ePaper. It ended up being dead on arrival and then out of stock so I received an Inky to replace it. Fair enough.

Inky library released!

2019-07-04

Me and nyaray finally finished up our work on the Inky eInk display library to a level where we are happy to release it. So Inky 1.0.0 is now out on Hex! Docs are on there too.

Revitalizing valuable legacy systems

2019-06-24

Do you have a system that is vital to your business that your development team seems to have given up on? Do they consider it old, slow, complicated or impossible to work with? Are they pushing heavily for a rewrite?

Why am I interested in Elixir?

2019-06-11

I’ve had Elixir on the brain recently. And by recently I probably mean 2 years. In my defense I think it is fair to say it is blooming right now. I haven’t had much need of it, or opportunity for it, in my day-to-day of maintaining a Python legacy system, renewing another legacy or optimizing Elasticsearch. So I’ve tried it with a few hobby projects I’ve spent time on and that was fun. But mostly I really just watched the community and what they did with a feeling of “Shiiiit, I want in on some of that!”. I'll primarily touch on BEAM, OTP, Phoenix Presence, Phoenix LiveView, Nerves, Scenic and Rustler.

Scenic - Getting started from scratch

2019-05-20

This post covers setting up a Scenic project in the Elixir programming language. It briefly covers the default method but largely dives into adding Scenic to an existing project, which covers the different parts that Scenic requires to run.