A couple years ago, I did a semi-deep-dive on Kotlin Inline Classes and how they were implemented. Kotlin 1.5 was just released, and with it came the evolution of inline classes into the start of value classes. Meanwhile, Kotlin 1.5 also now supports JVM Records, which at first read might sound like a very similar concept. Finally, with JEP-401 Java is going to bring “primitive classes” which also sounds like a very similar concept. This can sound all very confusing, so let’s take a look![Read More]
Jeep JK Wrangler Code P0571: Brake Switch Fix
At the start of the year, my Jeep began reporting a failure in the traction control system, as well as eventually starting to throw a
P0571 check-engine ODB-II code. This post describes what I discovered as the root cause, and what could easily be your issue if you have had similar symptoms.
Why Aren't You Using Fish and Oh-My-Fish?
About three years ago, I asked the question Using OSX? Why Aren’t You Using iTerm, ZSH, and Prezto?. In that article I highly suggested a combination of tools to help with development workflows on OSX (though, most of this is equally relevant that those of us that use Linux as well). Today I’m revising this article with a look towards Fish shell instead. Let’s take a look.[Read More]
Snap Applications Missing in Linux with ZSH
I’m a regular ZSH user, and overall it works just fine as a replacement of BASH. However, recently I kept having trouble with my personal workstation losing track of my SNAP-installeed applications (in particular the Atom Editor) while running KDE Neon. Thankfully, I’m not the only one that had this problem, and there is a straightforward (and in hindsight obvious) fix.[Read More]
Distroless and Jib: Lightweight Java Container Images
The server world has moved to containers. And rightfully so: they isolate application concerns, they unify deployment, they are easy to host, and they make big complex systems like Kubernetes possible. Unfortunately, Java has been slow to adapt to the container world. Thankfully, tools are starting to become prevalent that make Java in containers easy and effective. Distroless and Jib are two of those tools.[Read More]
Trivial Static Site Hosting with Hugo and GCS
I recently transitioned my site from my own hosting to Google Cloud Storage site hosting, and removed a variety of self-managed steps (and some cost) out of the process of running it. I’ll share my experience here and hopefully provide a roadmap to my particular combination of pieces and parts that is useful to others.[Read More]
Paperless Adulting on Linux with Evernote and NoteSlurp
Adulting is hard. Bills come and go, taxes have to be prepared, escrows have shortages, kids have activites, FSAs need proof of medical expenses, cars need to be registered.
The list of things an adult has to do seems to only grow larger over time, and one of the fundamental things that all adults seem to have to do is to track and file paperwork. I’ve gone “paperless” in my personal life (which I seem to have interpreted it to mean: “keep digital copies of everything, even if it was paper originally”).
When it comes to adulting, barriers to doing the right thing (like actually getting stuff filed paperlessly) are bad, as you won’t do them. So, recently I decided to make that just a little bit easier on myself with a new tool. Let me walk through the research I’ve done, what my process for paperless filing is, and where I’ve historically had problems, and how this new tool has helped me out.[Read More]
Unsigned Integers with Java and Kotlin 1.3
Something that has always been a bit of a limitation in the Java numeric type system is the lack of support for unsigned integers. It is not particularly common to have to work with unsigned types, but when it does happen, it’s usually unpleasant in some way. Libraries like Guava have provided utilities to make it cleaner, and recent updates to Java 8 also included some unsigned helper methods.
Kotlin 1.3 has an experimental feature to make unsigned types a full citizen of the type system, while still having all of the performance of primitive integer types. Let’s take a look![Read More]
A Semi-Deep Dive into Kotlin Inline Classes
With Kotlin 1.3, a new experimental feature called “Inline Classes” is now available. This post is a somewhat deep dive into the nature of the implementation, how it works, where the edges are, and what limitations currently exist. Let’s take a look![Read More]
TypeScript for Java Developers: The 'unknown' Type
TypeScript 3.0 introduced the
unknown type, which is described as being: “Like