RSSAmplifier

Blog

Stratus3D

stratus3d.comRSS feed ↗20 posts

Latest posts

Understanding Vim Insert Completion

I’ve been using Vim for years but Vim’s built-in insert mode content completion is something I only recently took the time to learn. In this blog post I’m going to share how I’ve configured insert mode completion using only features built into Vim 9.

Why I Chose Go

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 the rewrite. I thought I spent quite a bit of time weighing the merits of several different languages before I settled on Go. I’d take some time to share my reasons for choosing Go.

Asdf Performance Improvements

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.

Asdf Has Been Re-Written in Golang

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…

Review of the Kinesis Freestyle Edge Keyboard

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.

Show All Telemetry Events in Erlang and Elixir

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…

What I Learned Building a CLI App in Rust

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…

Old Hardware I Love

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.

Visualizing Backoff Functions With Gnuplot

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…

Debugging a Slow Starting Elixir Application

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.

Asdf Performance

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…

Securing Static Websites

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…

The Best Book on Code Reviews

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.

The Problem With Elixir&#8217;s <code>with</code>

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…

Reducing Eye Strain

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.

Function/Variable Ambiguity in Elixir

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…

Syntax Highlighting in PowerPoint

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…

Introducing eFlambé

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…

Guide to Tracing in Erlang

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…

The Meaning of Dbg Function Names

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