2022-01-13 | 18min
You Don't Know Gif - An analysis of a gif file and some weird gif features —

Yes I am referring to the mainstay common gif you’ll find all over the web at
large sites like Google’s owned Tenor or Facebook’s owned
giphy. Everyone’s favorite file format for sharing short
animated snippets.
The gif as most people know it#
As most people know gif, gif is an animated file format. You might have looked
at gif files and thought wow these files are pretty large. Perhaps you looked at
them and thought: wow, these pictures are low definition. But at the end of the
day, when you think of gif, you probably think of it as the short animated file
format.
2021-11-21 | 7min
Learn by doing, rather than do by learning —
During my time as a professional software engineer, I have had countless debates
over the merits of one design pattern, library, or concept over the other. Some
are even publicly
documented!
At this point in my career I have spent a number of years educating folks.
This includes students in elementary school, to students in college, to hundreds
of professional software engineers at previous workplaces.
Across these landscapes there has been one constant, you can tell people
whatever you want, but often they won’t “get it” until they believe it.
2021-11-12 | 4min
Twolander a Moonlander Update —
Since making my Moonlander post I’ve had a lot of
folks from work and otherwise checkout my blog. I don’t keep website statistics
here (I like to honor folks’ privacy on this site) but I can see my nginx logs
are popping!
However the information in the previous post is a little out of date. I’ve
changed up some layouts a little and found one more comfortable! Let’s jump in.
How it’s going so far#
I started a new job recently and have been using the Moonlander for work every
day. In terms of typing, I am nearly as fast as I was before on my staggered
not so split layout. I remain pain free while typing and am certainly quite
comfortable as well.
2021-09-07 | 8min
Landing on the Moon - A trip to ergonomic keyboards —
Note: I have an update to this post! If you’re interested in learning more of my
later experiences with a split keyboard, check it out
here.

Since I sit at a desk for so long each day I want the experience to be
as comfortable as possible. Keyboards are the primary way I interact with
computers, and I’ve had a number of them over the years. Some big, some small.
Some mechanical, and some not.
2021-04-27 | 7min
Writing a calculator parser/evaluator (without knowing anything about them!) —
A few weeks ago I got an urge to build a calculator parser and evaluator.
Something that can take a simple 5 + 6 + 7 expression and evaluate it to a
number: 18.
I had never worked with calculator parsers before and had also never heard of
the shunting-yard algorithm when I wrote this. I wanted to go in blind just for
the fun of it and to see what I could come up with.
2021-03-27 | 7min
Self Hosting Is Cool —
After many years of my main site and my
blog (you’re here right now) being hosted on infra I
don’t own, I have migrated everything to infra I do own.
My main site was hosted on GitHub pages, and my dev blog on a Google Cloud Micro
instance (the free tier one). I didn’t intentionally scatter them about, it kind
of just happened over the years. I had a little extra time on my hands and was
tired of the messy configuration, so I decided to unify them.
2021-01-27 | 14min
Error handling in Java is error prone —
There have been a number of debates over the years about the merits of checked
versus unchecked exceptions. Kotlin’s approach when doing interop with Java is
to ignore checked exceptions altogether, effectively turning every exception
into unchecked exceptions. You may have your opinions about whether you prefer
checked or unchecked exceptions, but I’m here to tell you both are problematic.
If you look deeply enough into this, you may come to the conclusion I think all
exceptions are problematic. You would be right. However I work in Java every
day, so this post will be from the Java perspective. With that said you can make
the same conclusions for any other languages that use exceptions over other
error handling methods.
2020-10-27 | 14min
So you want to write object oriented Rust —
Whether you wanted to find out about object oriented Rust yourself, or you
wanted to see why in the world I’m talking about object oriented rust, you are
here. And so let us talk about object oriented Rust.
Object oriented Rust is not so outlandish. Many folks think of Rust as a
functional language, and while there are plenty of functional paradigms in Rust,
many of those paradigms are also available to other languages in one way or
another.
2020-09-27 | 8min
Flicker free fireworks (or how I accidentally rediscovered the regen buffer) —
In my last post I talked about
how I made a enjoyable little display of
fireworks for the terminal. It was
fun to make and it’s fun to watch when meetings get boring (always).
Fireworks can be found here.
However after running my fireworks for a while, I started noticing some funky
details. The fireworks could be a little flickery at times. And not in a good
way.
Well we couldn’t have that! So it was time to investigate.
2020-08-27 | 12min
Fireworks for your terminal —

Recently I embarked on a fun little side project. There have been just too many
rampant fireworks going on outside and I was feeling a little left out, so I
decided to make some of my own.
Given I have no experience with anything like OpenGL at all, and was feeling
like learning termion since I
consistently use tui with a termion backend and
only sort of understand how it works, I decided terminal fireworks would be the
way to go.