I’ve written a couple of blog posts this year on the rewrite of asdf in Go. My previous posts have covered some of the technical details of …| stratus3d.com
asdf was rewritten from scratch in Go and released on January 29th. No special attention was given to performance during the rewrite. The goal was feature parity in a more maintainable language. In this post I’m going to share some benchmarks I ran across many versions of asdf and show how the Go rewrite improved performance.| Stratus3D
Over the last year I’ve rewritten asdf in Go. I’m excited to announce that the rewrite was released last Wednesday as asdf version 0.16.0! asdf 0.16.0 is now a single binary rather than a collection of Bash scripts. All operations are faster than they were in the previous versions. With improvements ranging from 2x-7x faster than asdf version 0.15.0! Numerous long-standing bugs were also fixed during the rewrite. The codebase is also much more approachable for new contributors, and we can...| Stratus3D
In August I bought a Kinesis Freestyle Edge keyboard off of eBay. I’ve been using it for about four months now, and I’m typing this review on it. I’d been wanting to try out a split keyboard for a long time but didn’t want to spend a lot of money on one. Good quality split programmable keyboards start at around $200. The Freestyle Edge I found on eBay was new and cost only $80.| Stratus3D
Telemetry is an Erlang library for dynamically dispatching events to event handlers. Many popular Erlang and Elixir packages use the Telemetry library to emit events. Telemetry event data typically ends up in logs or metric databases like Prometheus. Events are identified by name. You can register a function as an event handler and get invoked when events with a specific name occur. A name or list of names must be specified when registering a handler using the telemetry:attach/4 and telemetry...| Stratus3D
It’s been 8 years since I learned Elixir and since then I have not tried to learn another programming language. I have now decided to learn a systems programming language, and it seems like a good time to be learning about them. New languages like Vale and Rust combine the memory safety of a high-level language with the performance of C. Rust is very popular today but there are many other new systems languages with similar characteristics. Zig, Vlang, Nim are a few that come to mind.| Stratus3D
Recently I got to thinking about the electronic devices I use regularly and love. I realized that many of the devices I enjoy using are by many people’s standards pretty old for electronics. I’ve always been thrifty and don’t like replacing electronics with new ones until they break. In this blog post I’m going to highlight three old devices that I enjoy using for one reason or another.| Stratus3D
Today I was building some retry logic for some code that forwarded data to a third-party service and wanted to visualize the backoff function I had written. I wanted to see how many retries would be made in the 10-15 minute window after the initial retry. Gnuplot was the obvious choice for visualizing this as I had recently used it for some data exploration work and knew it had built-in support for plotting mathematical functions. The final result looks like this:| Stratus3D
I recently had to fix an Elixir service that was slow to start. I was able to pinpoint the issue with only a few commands and I want to share a couple of the things I learned.| Stratus3D
I’ve been a maintainer of asdf for about 6 years now. Most of my work these last several years has been fixing bugs, writing automated tests to catch regressions, and ensuring overall correctness across various operating systems. Maintaining a tool written in Bash isn’t easy. For most things there are far more edge cases and compatibility issues than happy paths. Certain commands need to be banned from the codebase to ensure compatibility across operating systems. Bash strict mode also he...| Stratus3D
One of the big benefits of static websites is simplicity. Static websites are simple so there is much less to worry about. There are no login credentials to be compromised. There is no dynamic content that must be stored and displayed. There is no danger of a bug in the code allowing SQL injections. But there are still things that should be done to secure a static website. In this blog post I will list some of the important things that still need to be done to provide a secure static website.| Stratus3D
The Best Kept Secrets of Code Review by SmartBear software has influenced how I create pull requests and perform code reviews more than any other book I have read. I read it back in 2015 and a lot of the findings from the studies in the book have stuck with me.| Stratus3D
Summary: Return values from different expressions in a with block can only be distinguished by the shape of the data returned. This creates ambiguity in with 's else clauses that make code harder to understand and more challenging to modify correctly. with has existed in Elixir since version 1.2 and is widely used. But there are downsides to this construct. In this blog post I’ll explore the problems caused by use of with in a codebase. I’ll assume you know how with works and have read th...| Stratus3D
Over the last couple years I’ve experienced some symptoms of eye strain after a long day at the computer. I spend most of my day in front of the computer and I want my setup to be as healthy for my eyes as possible. I began reading what I could find on the topic. I wrote this post to document the things I learned and the changes I made as a result.| Stratus3D
Variable syntax is one of the big differences between Erlang and Elixir that I encountered when learning Elixir. Instead of having to start each variable name with an uppercase letter, a lowercase letter must be used. This change in syntax seems like an improvement - after all most mainstream programming languages require variables to start with a lowercase letter, and lowercase is generally easier to type. However, a deeper look at this syntax choice reveals some significant downsides that I...| Stratus3D
Back in 2014 I wrote a blog post on inserting code samples into PowerPoint slides with syntax highlighting. It’s been about 8 years and things have changed. Using GitHub Gist no longer works for me. I’ve found a better way to apply syntax highlighting to code for PowerPoint that also works for LibreOffice Impress with no differences. Both applications expect code in Rich Text Format. The only downside to this approach is you’ll need to have Python and a Python package installed for this...| Stratus3D
I recently published an article on the Code for RentPath blog about a new tool I created during SpawnFest this year. SpawnFest is an annual 48 hour online contest where teams try to build the best BEAM-based application, as determined by the judges based on certain criteria. In this blog post I am going to introduce the new tool I created during SpawnFest. eFlambé is a tool for rapidly profiling Erlang and Elixir code. It is intended to be one of the first tools you reach for when debugging ...| Stratus3D
I’ve spent a lot of time debugging Elixir and Erlang applications over the last 5 years and decided to share what I’ve learned here. I started writing this blog post in April of 2017 and wasn’t inspired to finish it until watching Jeffery Utter’s Debugging Live Systems on the BEAM talk about a month ago. If you’d prefer a more concise presentation of Erlang tracing I suggest you watch that talk instead of reading this. The first thing to understand when debugging Erlang applications...| Stratus3D
If you’ve ever used the dbg module in Erlang you’ve seen the esoteric names of the functions it exports. I recently watched Jeffery Utter’s excellent ElixirConf talk on Debugging Live Systems on the BEAM. In the talk when he covers the dbg:tpl/3 function he guesses that it might stand for "tuple". This reminded me that I didn’t know what most of the functions names in the dbg module stood for, even though I learned how to use dbg years ago. This got me searching for the meanings behin...| Stratus3D
I’ve posted several off-topic blog posts this year and this is another one. Perhaps it is more relevant than the others as I list the issues with KaiOS software and the software limitations of my feature phone. I’ve been using an Alcatel Go Flip 2 as my only phone for about a year and a half now. I feel like leaving my smartphone behind was the right choice and feel like my life is better as a result. I’ve published two previous articles on my move from a high end smartphone to a cheap ...| Stratus3D