
AI vs LLMs: The Misnomer That's Costing Us
I think one of the biggest mistakes we have made as an industry is conflating the words "AI" and "LLMs." The irony is right there on the surface. Naming is one of the hardest things to do in software,
Search for a command to run...

I think one of the biggest mistakes we have made as an industry is conflating the words "AI" and "LLMs." The irony is right there on the surface. Naming is one of the hardest things to do in software,

Before getting into Elixir/BEAM, I did a lot of JavaScript, Java, and Python in my day job. They all have similar patterns for dealing with errors, typically using try/catch. There are some nuances across different platforms and languages, but in ess...

A few days ago, I wrote about Elixir and discussed how it's built for concurrency. Phoenix, the most popular web framework for Elixir, leverages these features to provide a great way to build web applications. For the uninitiated, Phoenix is a full-f...

Easy but Complex Building software in languages like C or JavaScript presents challenges due to their fundamental design. Key Issues: Simple Syntax, Hidden Complexity: Basic operations seem easy, but as code grows, managing it becomes complex and cu...

When I started building software professionally we defaulted to: Everything being mutable everything being nullable everything being imperative We ended up with trivial problems but complex software - more often than not. Add in a bunch of peopl...

Introduction For those experienced in application development, MVC frameworks like Rails, Django, and Laravel are well-known. I'll refer to these as CRUD frameworks for this article. They remain the go-to frameworks for many developers. We are now se...

As React devs we deal with async stuff every day. We know firsthand how awkward and complicated async logic can get. Now add components into the mix it only gets more complicated. Suspense was the solution that React came up with to solve for that. A...

The modern best practice for DevOps is to build the application once. Then deploy the same application with different configurations to different environments. The typical way to do that is to pass Environment Variables from the host system to the ap...

I wrote a blog post in Typescript on leveraging Union types to remove impossible states. Since then I have moved into Kotlin development. Kotlin too has a great type system and a lot more language features to model data in creative ways. So here goes...