Here you can browse all of my posts about coding and web development, sorted by category.
01/31/2025
Using `with-let` to avoid inner functions and class components
11/05/2024
Getting the result of a function and it's opposite at one time
10/31/2024
TL;DR: Don't use multimethods if all of the defmethods are in the same file
10/30/2024
How a miguided approach caused an afternoon of re-engineering
10/24/2024
Dealing with asynchronous logic in ClojureScript
10/23/2024
Granting permission for other domains to access a information from a server
10/22/2024
Making sure functions aren't called until they are needed
10/17/2024
Leveraging Clojure's conditional threading macro to avoid empty key-value pairs
10/16/2024
Defining different behavior based on if the invoking function is Clojure or ClojureScript
10/13/2024
Funtions like `assoc` and `dissoc` are great for single-level maps, but what about nested data?
07/26/2024
Diving into Java source code to learn to understand associative data structures
07/19/2024
Diving into the lower-level detail of how array lists work.
07/23/2024
Learning how linked lists work and how they differ from arrays
06/05/2024
Two basic sorting algorithms all developers should know
07/04/2024
Getting minimax to not be unusably slow on a 3D board required a variety of tweaks
06/25/2024
Making Tic-Tac-Toe 4x4 slowed minimax to a crawl. Here's how I sped it up.
09/10/2024
Linked Lists may be slow to bubble sort, but that doesn't mean Array Lists are always better
08/15/2024
Like merge sort, but different.
06/11/2024
The Minimax algorithm is a handy way to calculate the best possible next move in a two player game, but it can be tricky to implement.
05/28/2024
You shouldn't feel like you need to crack a code to read your code.
08/27/2024
Java interop was hindered when an interface depended on a concrete class
06/08/2024
Professionals practice their craft. They don't rely on their paid work to keep them sharp.
08/03/2024
In order to avoid bugs, it's imperative to write tests for all combinations.
05/23/2024
TDD can be hard and feels like doubling your code, but the benefits far outweigh the extra work.
08/05/2024
A behavioral design pattern based on senders and receivers.
06/19/2024
The fifth and final part of SOLID Design Principles
06/12/2024
Understanding the "I" in SOLID using the switches in our homes
06/06/2024
Part three of SOLID Design Principles is surprisingly simple.
06/04/2024
When it comes to structuring our code, there's something to be learned from the outlets in our homes.
05/24/2024
Make your software easy to maintain and understand by separating different responsibilities.
09/17/2024
How to bring structure to finite state machines
09/04/2024
Organizing tests to keep them clean and readable
07/11/2024
TL;DR: wrap `defsketch` in a function. Once again, I overlooked the simplest solution.
09/06/2024
Setting up a pre-exsiting project to be able to TDD ClojureScript with Speclj
09/07/2024
Adding a local development server and tooling for CSS in Clojure
05/30/2024
Clojure's `cond` provides a cleaner, more readable method for handling multiple conditional statements without nesting `if` statements.
06/27/2024
Unlocking more possibilities than simply iterating through each item in a collection
09/11/2024
Care for a game of tic-tac-toe?
07/30/2024
Getting my tic-tac-toe set up with a real database this time
06/29/2024
My first time creating a GUI that doesn't use HTML and CSS
07/17/2024
Binding destructured values to variables inside function parameters is incredibly handy.
06/26/2024
Defmulti aren't just messengers; they are fully capable functions that can process what to dispatch, too!
06/15/2024
Solving the diamond kata led to some new discoveries
05/31/2024
Clojure's `partition` function is another powerful one-liner where other languages would depend on loops or recursion.
10/08/2024
Using Clojure's string/replace function to format Jira issue descriptions
08/31/2024
Dynamically-type doesn't mean we shouldn't have good type discipline
08/30/2024
Clojure's `deftype` macro allows for easy interop with Java interfaces
05/17/2024
Ever feel like you're crawling out of hole trying to make sense of deeply nested code? Clojure's threading macros can help.
Making `lein run gui` launch Quil while retaining the previous `lein run` command for the terminal UI
05/21/2024
Clojure lets us be lazy to help us be more productive.
09/28/2024
Using multimethods to create child components
05/14/2024
My first look into a fully functional language began with confusion and ended with excitement
06/18/2024
Using combinatorics and memoization to prove minimax never loses - without it taking all day
05/15/2024
Immutability means no JavaScript-style `for` loops, and so we must venture bravely into the coding world's "House of Stairs."
07/08/2024
This list comprehension is very handy for iterating through multiple values
10/05/2024
Making sure the amount of kanban bars is no more or less than what fills the screen
Multi-arity and multimethods are two unique ways Clojure let's us change what a function does based on its input.
07/16/2024
Fixing a Single Responsibility violation in my Quil screen functions for my tic-tac-toe app
07/09/2024
Dealing with overlapping screens and persistent mouse clicks
06/20/2024
Stubs can allow us to test when our function invokes other functions
06/07/2024
How to have automated tests when your application depends on user input and printing to the terminal
06/28/2024
The first kata I've done dealing with grid coordinates and a GUI.
05/25/2024
Clojure libs like `math` and `string` need to be imported to the REPL before they can be used.
Clojure's `identity` function is useful when we want to pass a single value but have to pass a function.
Using Clojure's version of JSON as a basic database for logging tic-tac-toe games
I was way overthinking how to integrate my tic-tac-toe AI into Quil
07/18/2024
This annotatition can help make tests DRY-er.
08/20/2024
Interfaces can have more than abstract methods; `default` and `private` allow method bodies.
Packaging my Java application to be able to use it as a dependency in other applications
07/24/2024
Ever feel like having to declare types is stopping your functions from being reusable? Read on.
Using the SimpleDateFormat classes to format date strings
07/12/2024
Setting up a TDD Java environment without Gradle or Maven
08/06/2024
A look at what happens under the hood when printing ArrayLists and LinkedLists to standard out
08/16/2024
How to compile and run Java applications in the command line
08/11/2024
Re-routing standard out from the console to a testable output stream.
08/17/2024
Processing collections without for loops
09/05/2024
Java threads allow for concurrent processing
08/02/2024
Interacting with SQL in the terminal can be cumbersome. InitelliJ provides a snazzy GUI to make things easier.
08/04/2024
Using SQL to sort and filter data is cleaner, increases performance, and minimizes the chance of bugs.
08/01/2024
Adding rows, changing column types, and more!
When the big picture feels too big, sometimes I don't know where to start
05/18/2024
A how-to on opening project directories directly from your terminal.
IntelliJ's File Template feature makes creating our own boilerplate files a breeze.
06/13/2024
The Cursive plug-in provides a lot of useful features to help type Clojure code faster and easier
Speed up development by editing files directly on the server
07/25/2024
One of the largest global cyber outages in history could have been easily avoided with proper testing
09/12/2024
Four months into being an apprentice, I get to work on real products!
08/29/2024
Using the Christopher Nolan classic "Memento" to explain internet cookies
06/21/2024
Implementing new features might not take very long, but what about making the code clean?
06/14/2024
Reflecting on my first month as a Clean Coders Apprentice
10/03/2024
Turning a complex nested data structure into a markdown string
06/22/2024
Adding an option for a 4x4 board proved easier than I thought - but requires optimizing mini-max
07/05/2024
Exploring the two types of memory allocation in programming
Tests shouldn't assume what's in a database. Each test should populate and delete the test data each time.
09/19/2024
Infrastructure and making buttons
09/18/2024
Setting the base configuration of an EC2 instance to create other server instances with
09/24/2024
Fixing the `read-transactor-location-failed` error
09/20/2024
Accessing servers securely without username and password
10/01/2024
Learning about event-triggered API interactions