Adding an iOS Container View in Xcode

If you are new to iOS programming, you may not know of a very useful feature in iOS called container views. A container view allows you to create a reusable component that all of your view controllers can share. The containers are easily edited with the storyboard editor of Xcode.  Plus the reusable component is also backed by the power of a separate child view controller.

Read more on Adding an iOS Container View in Xcode…

Using Vagrant to Deploy to a Remote Hyper-V Host

As a general rule, I try to minimize the number of programs installed and configured on the host OS of my laptop. I use the host mostly for email, office, and web browsing. It’s much faster to create isolated development environments inside of virtual machines. If a project requires some third-party applications or modifying system-wide settings, I don’t need to worry about it corrupting my host OS or affecting other projects.

Read more on Using Vagrant to Deploy to a Remote Hyper-V Host…

CodeRunner: A Generalist’s Swiss Army Knife


Working as a maker at Atomic Object means being a generalist. Generalists must be able to quickly move between projects, languages, and tech stacks. We are expected to quickly pick up new languages and technologies–drawing from our expertise in the technologies that we already know well.

One tool I’ve found useful in picking up new technologies (or just trying things out) is CodeRunner. CodeRunner bills itself as a “code editor for Mac.” It’s an editor that’s preconfigured to build/run code in a variety of languages. In this blog post I will describe some of its features and cover how I’ve used it in my work. Read more on CodeRunner: A Generalist’s Swiss Army Knife…

Google Sheets’ Query Language

Many of us at Atomic Object leverage spreadsheets for various purposes (estimates, hours tracking, finances, etc.), and since we have strong technical backgrounds, we tend to leverage a lot the functions that spreadsheets provide (avg, max, min, ceiling, sum, etc.). We also tend to push the boundaries of spreadsheets by leveraging multiple functions in one cell and doing some complex filtering. Read more on Google Sheets’ Query Language…

Creating Man Pages in Markdown with Ronn

As brewdo (my tool for sandboxing package management tool Homebrew) expanded and gained more and more options, it became more important for me to document it in an easy-to-use way. Since it’s a command line tool, that meant a man page.

But while the tools for making classic man pages are powerful, they’re also, how shall I say it… historical? And definitely not things I use every day. Thankfully, there’s a modern option that gets me from zero to man page without having to think about skills I left in the dust long ago. Read more on Creating Man Pages in Markdown with Ronn…

Working with Text at the Command Line – Tools for Searching & Editing

I spend more time working with text than anything else. The multi-monitor, high-resolution graphics revolution hasn’t brought me graphics, just dozens of windows full of text. If you’re a software developer, chances are you are swimming in text too. Source code, documentation, configuration files, templates, logs–they are all searchable text. For special purpose tasks, like searching Java classes, I rely on my IDE, but for many things I run a command in a terminal. Read more on Working with Text at the Command Line – Tools for Searching & Editing…

Specifying the Destination of an Unwind Segue Programmatically

I once wrote an iPad app to help people take self-guided tours through a museum. One of the interesting parts of this application was that many of the views were implemented by the same view controller. The functionality of each screen remained the same with slightly different assets in each view. This would be a problem if I needed to Unwind to certain screens in my application.

Read more on Specifying the Destination of an Unwind Segue Programmatically…

autoclave: A Pressure Cooker for Programs

I’ve been working on a multi-threaded, distributed system, and there have been some bugs that only manifested when things lined up exactly right. While the project’s deterministic elements have lots of unit and system tests, every once in a while mysterious failures have appeared.

On top of the other tests, the code is full of asserts for numerous boundary conditions, and stress tests intentionally overload the system in several ways trying to see if they trigger. While the system is generally stable, every once in a while something has still happened due to unusual thread interleaving or network timing, and these issues can be extraordinarily difficult to reproduce. Read more on autoclave: A Pressure Cooker for Programs…