Up Your Logging Game with Improved Log Management Tools

Are you still using plain text files to collect logs for your application? I was too until recently, but no more. While plain text logging is simple, it has a number of limitations. The good news is there are a number of superior logging alternatives available, including two that I have used personally—Loggly and Graylog. Read more on Up Your Logging Game with Improved Log Management Tools…

Learning from Game Dev: Entity, Component, Systems

All the game developers that I’ve spoken with (hobby or pro) tell me, “Making games is entirely different from making generic software.” While I agree with that statement, there are definitely nuggets to mine from the world of game development.

The pattern of using Entity Component Systems (ECS) is one such nugget. ECS is a method of processing game state in a flexible and extensible way. It has a heavy focus on Data-Oriented Design, composition over inheritance, and separation of data from logic. Read more on Learning from Game Dev: Entity, Component, Systems…

Everyday Vim – A Basic Vim Commands Cheat Sheet

Vim is a pretty great text editor, but learning to use it effectively can be a challenge. Even if you keep a quick-reference card or cheatsheet around, it can be difficult to figure out which commands are the most useful. But the truth is, Vim can still be super helpful if all you know is a few commands. So I’ve compiled a few of the Vim commands that I use every day. Read more on Everyday Vim – A Basic Vim Commands Cheat Sheet…

Rigging up Sublime Text for Clojure Development

I recently started working on a project using Clojure. Since it’s my first experience with the language, I decided to invest a bit a of time setting up Sublime Text so that my editor would be tuned to conquer the oh-so-many parens and the build-and-test workflow provided via Leinengen. I wanted to capture and share this setup to help others get off the ground more quickly, since it took a bit of hunting for plugins and fiddling with Sublime. Read more on Rigging up Sublime Text for Clojure Development…

How I Learned to Love TDD

I remember one of my CS professors at Calvin starting class one day by talking about TDD (Test Driven Development). “Write your tests first, then write the code to make the tests pass,” he said.

At that point in my programming career, TDD and unit testing in general just seemed like extra boilerplate code required to make my professor happy. If my assignment didn’t have tests (or good enough tests), I got a bad grade. However, I rarely, if ever, actually followed TDD principles when I was on my own—it just didn’t make sense to me. Write the code, test it manually, and then solidify it with some automated tests—that sounded like a better use of my time. Read more on How I Learned to Love TDD…

How to Pass Data to an iOS Container View

After writing my previous post on adding an iOS container view, I received a couple of questions about how to pass data to the container view. This is a great question because the answer is not obvious to a person just learning iOS. In this post, I will show you how to keep a reference to your container view’s view controller to pass data or call functions on it.
Read more on How to Pass Data to an iOS Container View…

Reduce Cognitive Overhead by Automating with GNU Make

Every project carries a certain amount of mental burden around with it. If you’re working with an IDE, you have to remember where the menu options live, a handful of keyboard shortcuts, and the elusive position of that one row of pixels you have to hit with your mouse to resize the debug panel.

If you’re lucky enough to be working in text mode, you have to remember which build tool to use, a handful of its commands, the version control system and its extensive collection of commands, and a myriad of Vim keybindings. None of these are essential components of the complicated thing that you’re building, and all of them impose some degree of background mental load on each member of the team. Read more on Reduce Cognitive Overhead by Automating with GNU Make…

Configuring rc Flags on OpenBSD via Ansible

A recent project of mine involved configuring an OpenBSD system via Ansible. On OpenBSD, some software must be configured using command line flags set in rc.conf.local. Every time I ran the Ansible playbook, the flags would be reset to their defaults (more precisely, erased entirely from rc.conf.local). What gives?
Read more on Configuring rc Flags on OpenBSD via Ansible…

Git – It Makes Sense Once You Understand It

Learning Git can be overwhelming, especially if you have not had any previous experience with a version control system. Many Git tutorials begin with a few basic commands, and you can probably get by on those for most day-to-day tasks. But eventually, you’ll run into a situation that the tutorial didn’t cover (like, “Oops, I just committed to the wrong branch”).

Fortunately, a quick Google search will reveal a Stack Overflow post with a cryptic command to get the job done. And given the number of upvotes, it will probably work. But unless you understand why it worked, you’ll likely be right back there again the next time you run into a similar problem. Read more on Git – It Makes Sense Once You Understand It…