Celebrating 10 Years!

profile picture


Split Keyboards

September 06, 2023 - 283 words - 2 mins
If you do work on a computer for a living (which is a ton of us, even if we're not programmers). It could be fun to consider adopting an ergonomic/split keyboard. Traditional keyboards encourage a sideways angle of the wrist, and tension in the shoulders and full-size keyboards also encourage moving… read more

Fancy Math In Swift

May 23, 2022 - 687 words - 4 mins
Fancy Math In Swift Like Objective-C before it, Swift has access to the Accelerate framework. This is a framework made to use a computer's video card for what it does best: doing math with a bunch of floating point numbers. Commonly this is used to do all the math necessary for 3D graphics and such,… read more

Removing Publicist

May 05, 2021 - 409 words - 3 mins
Publicist first arrived in the app store on April 14, 2019. Now, a little more than two years later, I'm removing it. Publicist started as a free app with a subscription model to support it. The idea was that this would allow for users to have a free trial to see if the app worked for their workflow… read more

Testing Subscriptions

March 23, 2021 - 465 words - 3 mins
If you are working on subscriptions through Apple's in-app-purchase system, here are some tips that might help you: 1. Making New Sandbox Users While Apple officially recommends using the trick where inserting the plus sign and any addition before the name part of your email (aka subaddressing) to m… read more

New Publicist

March 15, 2021 - 322 words - 2 mins
A new version of Publicist is now live in the app store! This version includes a few big changes I wanted to tell you about. 1. Removing Subscriptions Since the Mac App Store does not allow for upgrade pricing, I thought subscriptions might be the best fit for the app. This way I could provide a fre… read more

2021 Formatter Update

February 01, 2021 - 76 words - 1 mins
This weekend I published a new version of Formatter. A recent version of Xcode caused the extension to stop working, but it's ok now. If you're using Xcode 12.2 or higher, you'll want to download this update to continue enjoying having a handy JSON-format button while you're working on your iOS and … read more

Progress Expectations

January 21, 2021 - 249 words - 2 mins
Expectations are pretty common when you're writing unit tests. Generally an expectation represents an event you want to wait for in your test. You can tell the test to wait until that expectation is fulfilled. func testSomethingWorks() { let itHappened = expectation(description: "The event sh… read more

New Feature Coming

January 14, 2021 - 146 words - 1 mins
Hello Friends! You might be wondering about Publicist as there hasn't been an update for some time. I want you all to know that Publicist is not dead. This last year has been rough with lockdowns and reduced business, but I am working an an update. This new version will have improved insides, a nice… read more

A Dream Client

October 22, 2020 - 363 words - 2 mins
I'm happy with the clients I've worked with in the last years. Most projects have been interesting and filled with nice people. I'd like to take it a step further if possible and share more of what it's like to be a consulting software engineer. Most of us have to sign NDA's and such to work with a … read more

Obscure APIs

October 21, 2020 - 636 words - 4 mins
Here are 5 APIs provided by Apple that you may not know about: 1. SearchKit SearchKit is a C-level API that provides quick full-text search for your Mac apps. I've seen many questions about how to enable the full-text search extension in SQLite to use in CoreData or how to install and setup some thi… read more

Buttons Over Views

October 20, 2020 - 259 words - 2 mins
One enemy of accessible apps is the use of views instead of buttons. A button, UIButton or NSButton, handles taps and clicks from users. For users who have trouble doing that, iOS and MacOS have accessibility support to enable those users to get their work done. Many developers (me included before) … read more

RTL Considerations

October 19, 2020 - 670 words - 4 mins
Here are some things to keep in mind so that you app can handle right-to-left languages like Arabic and Hebrew. Guidelines While Apple provides information about supporting RTL (right to left), I generally refer to Mozilla's RTL Guidelines and Google's for information about what should flip for RTL … read more

Swift Package Testing

June 23, 2020 - 269 words - 2 mins
Swift 5.3 brings new improvements to the package manager so it finally supports including resources in your packages. You can read the proposal on Swift Evolution here if you're into that. This has been the only reason I haven't moved libraries I maintain, such as MobiledocKit, to Swift Package Mana… read more

New Podcast

May 20, 2020 - 107 words - 1 mins
I started a podcast to tell the story of Roundwall Software and my efforts to become an independent developer. Episodes will come weekly on Thursdays and I'm keeping them fairly short, never more than 15 minutes each. This is not a sugar-coated fluff piece and I'll be talking about nearly going bank… read more

Release Day With Migration

March 21, 2020 - 128 words - 1 mins
Publicist version 1.4 is now live! You can find it in the App Store. As usual, it is free to use with a yearly subscription to unlock posting to Ghost and Wordpress. This version adds two major features: Migration Publicist can now move all your blog posts over to a new blog. This way you can avoid … read more

Core Data Errors

March 09, 2020 - 355 words - 2 mins
If you're trying to use Core Data in your project, especially if you're testing, you might find some obscure errors. Here are a few and how to fix them: Multiple Entity Descriptions: +[BlogEngine.Account entity] Failed to find a unique match for an NSEntityDescription to a managed object subclass[er… read more

Publicist 1.3.0

December 19, 2019 - 121 words - 1 mins
Publicist 1.3.0 is live finally! There was quite some delay due to my fall holiday, traveling to visit clients, and a mysterious crashing bug, but that's all worked out now. Thank you for your patience. This new version mostly fixes bugs like issues saving certain kinds of blog posts, incorrectly di… read more

Peer Lab Closing

August 20, 2019 - 292 words - 2 mins
The first Peer Lab meeting was on July 20th, 2013. Just over 6 years ago. Peer Lab in Amsterdam is finished. It was originaly created as a non-alchoholic developer gathering where we could do more than just talk and argue about tabs vs spaces. I wanted an event where we actually worked on things and… read more


July 13, 2019 - 66 words - 1 mins
Publicist currently supports posting, including images, to: WordPress GhostIt's available now! read more

Publicist 1.2

July 03, 2019 - 0 words - 0 mins

Markdown Support In WordPress

June 15, 2019 - 208 words - 2 mins
If you are using a self-hosted installation of WordPress, you may notice your blog doesn't seem to understand markdown. Unless you really enjoy only using plain text or writing HTML yourself, here are ways I have found to remedy the situation: Option 1: Install Jetpack Jetpack is the WordPress compa… read more

The Roundwall Guide To Client Work

June 12, 2019 - 1262 words - 7 mins
Things to consider if you want to do client work. So you want to consult or you are consulting (I say consult because "freelance" has such a casual and kind of negative/lazy connotation in some places). Traveling down this path means you've decided to trade a more "permanent" pos… read more

Sharing Test

May 27, 2019 - 49 words - 1 mins
This is a test of the new sharing extension. If you're seeing this, it means that it appears to be working just fine. You can expect to be able to use it yourself soon in Publicist which you can find here. read more

Publicist Update

May 05, 2019 - 200 words - 1 mins
Publicist version 1.1.0 is now live in the App Store. This version corrects the rather embarassing problem where Publicist did not work with newer versions of Ghost. Development on Publicist started over a year ago and most of my work to support Ghost was tested against my own blog. Ghost before ver… read more

Terms Of Use

April 23, 2019 - 0 words - 0 mins

You Should Write

April 17, 2019 - 576 words - 3 mins
If you are a developer, even if you are just getting started learning to program, you should be writing. I didn't take this advice myself for the first years of my career and I regret it. When I did finally start writing, I was embarassed by how bad it was. If I had started sooner, I'd be even bette… read more

Release Day!

April 14, 2019 - 12 words - 1 mins

Mobiledoc Sample file

December 22, 2018 - 875 words - 5 mins
Hello!!Hello.Hello.Hello....— Ash Lindquist (@A_Lindquist) October 27, 2018 View this post on Instagram Conehead (I think) mantis nymph. Looks like it was invented for a big-budget sci-fi flick. A post shared by Tikitu de Jager (@tikitudej) on Oct 27, 2018 at 12:53am PDT read more

Formatter 1.3

December 21, 2018 - 213 words - 2 mins
A new version of Formatter is available on the App Store now. It includes a few improvements I hope you'll enjoy. You can find it on the App Store now! Front-matter Ignoring It can be common for files that have JSON to include some other information above it. Formatter previously would fail to handl… read more

Privacy Policy

December 20, 2018 - 0 words - 0 mins

With An Image

December 18, 2018 - 30 words - 1 mins
If you are reading this, Publisher (the upcoming blog publishing app) has successfully posted its first image. That means we're making progress towards the initial release! read more

Introducing Publisher

November 24, 2018 - 748 words - 4 mins
Way back nearly a year ago, December 16th I started work on a blog publishing app. There are several approaches to this on the Mac, but I felt the need to build another. Competition Apps like MarsEdit 4 and Blogo offer the complete package. You can write, edit, publish, and then manage the articles… read more

JSON Handling

November 08, 2018 - 759 words - 4 mins
The Problem Let's say you have a handful of items in your code where the items seem quite similar, but are slightly different. For example, bus tickets: You might have paper tickets, monthly passes, and senior discount cards. struct Paper { let validUntil: Date let currency: String let pr… read more

More Types

October 22, 2018 - 722 words - 4 mins
Sometimes the answer to your programming problem is "use more types". I spoke at Mobilization 8 this past weekend and I discussed a particular programming issue with someone. Here is a version of that problem (with the details changed to protect the innocent). The Setup Let's say you have … read more

Strong Self in Swift

September 18, 2018 - 298 words - 2 mins
Swift 4.2 has arrived which gives us the ability to replace code bits in your weak-reference blocks like guard let strongSelf = self else { return } or guard let 'self' = self else { return } with new-fangled, more direct things like guard let self = self else { return }. This is generally nicer, ea… read more


July 14, 2018 - 623 words - 4 mins
We in the Apple-platform space suffer from a lack of diversity in our conferences. I’ve seen this vastly improve in the US, but over here in Europe it still seems fairly bad. Every month I hear about a new conference which promotes their all-white and often all-male speaker lineup. They often brag a… read more

Making a Date Server With SwiftNIO

March 15, 2018 - 1274 words - 7 mins
Apple just released SwiftNIO. A framework for low-level asynchronous IO in Swift. It was based on a familiar called Netty (which fun fact is written by one of the devs now working on SwiftNIO at Apple). When I heard the presentation to announce the library at try!Swift Tokyo this year, it sounded su… read more

The 30 Day Music Challenge you're going to do

February 22, 2018 - 1101 words - 6 mins
Why Sometimes a cheesy random challenge helps can help you get out of your rut and start something new. I propose we do exactly that. All of you who play/sing music: record yourself playing every day for 30 days. Put the videos on Instagram. The time limit Instagram imposes (max 1 minute) will help … read more

Wacky JSON

January 23, 2018 - 524 words - 3 mins
In Swift, turning JSON content from a file or a server into structs or classes in code is much friendlier now that we have the Encodable and Decodable protocols. For simple cases you need to write almost no code and can quickly get on to something else. For example, if you see this: { "posts&… read more

Hiring And Retaining

January 18, 2018 - 605 words - 4 mins
I've heard from a great many companies here in the Netherlands (and elsewhere) that hiring and retaining engineers is super difficult. Here are some things to consider to make things easier for your company: Is your company involved in the right communities? If you're looking for, let's say, Ruby de… read more

Core Data Performance

January 09, 2018 - 41 words - 1 mins
Last year I spoke at PragmaConf in Italy and the video of my talk is now available: read more

How I Approach Rat-Nest CoreData Projects

November 05, 2017 - 474 words - 3 mins
Part of my job involves working with existing projects, some with overly complicated Core Data implementations. Usually clients request that I help fix performance problems in the project or at least clean them up. Here is how I approach each project: #####1: Clear out the cobwebs First thing I do i… read more

Ghost's API

October 24, 2017 - 404 words - 3 mins
Ghost is a blogging platform written in Node JS that was released a few years ago after a successful Kickstarter campaign. They promised a blogging platform without all the complications of Wordpress and even partnered with companies like Digital Ocean to make it easy for users to try and use. One o… read more


October 20, 2017 - 90 words - 1 mins
Upcoming I'm available to speak at future conferences. Let me know! Previous 360iDev 2019: No Progress Like Slow Progress Mobilization 2018: Testing the Tricky Stuff trySwift! Tokyo 2018: Getting to Know The Responder Chain Pragma Conf 2017: Core Data Performance Techfest Cluj: Core Data Perform… read more

The Case of the Broken Buttons

September 23, 2017 - 720 words - 4 mins
On a client project the other day, I spent most of the day tracking down a rather serious bug. All UIBarButtonItems were nearly un-tappable on iOS 11. These were not especially crafty buttons, most of them were using either an icon of reasonable size or a title. Some were even using the system stand… read more

How To Write IRC: Part 6

August 26, 2017 - 616 words - 4 mins
This is a continuation of the article published yesterday: How To Write IRC: Part 5 Framework-ification After all this work, it was time to make the actual framework. I started by making a new project with the Cocoa Framework template and copying over the important files from my demo project. Next,… read more

How To Write IRC: Part 5

August 25, 2017 - 946 words - 5 mins
This is a continuation of the article published yesterday: How To Write IRC: Part 4 More Tests! Next larger feature I wanted to test was joining a channel. As I planned before, joining a channel should create a new object to give developers a way to interact. For this I modified the first test I wro… read more

How to Write IRC: Part 4

August 24, 2017 - 1251 words - 7 mins
This is a continuation of the article published yesterday: How To Write IRC: Part 3 Async Integration Testing Some of you might be reading along and think to yourself, "This guy hasn't tested anything! He doesn't assert anything. What kind of lies is he trying to sell?". To that I say, &qu… read more

How To Write IRC: Part 3

August 23, 2017 - 557 words - 3 mins
This is a continuation of the article published yesterday: How To Write IRC: Part 2 Defining the API Before you run off and make a framework, it can be helpful to do a bit of brainstorming and plotting or scheming first. For this part I pulled out a sweet notebook and my fancy pencil. After some doo… read more

How To Write IRC: Part 2

August 21, 2017 - 1817 words - 10 mins
This is a continuation of the article published yesterday: How To Write IRC: Part 1 Spike! When I write a framework, I don't start by making a framework. First I mess around and build what you might call a "spike" to get an vague idea how things work. I was fairly familiar with the IRC pro… read more

How To Write IRC: Part 1

August 20, 2017 - 540 words - 3 mins
IRC is a fairly old protocol for chatting with people on the internet. It's not super popular these days because even more technical people have migrated to things like Slack or Hipchat which may or may not be more friendly to use. Still, I decided to try to write a library for interacting with IRC … read more

Making SwiftKilo Part 2: Raw mode

May 13, 2017 - 718 words - 4 mins
In the next chapter of the tutorial, I went through the steps to enable raw mode. In a typical command line app, you print some things on the screen and maybe wait for input for the user on the next line. The terminal is setup by default to send your program this input one line at a time which means… read more

Core Data unique constraints

May 05, 2017 - 314 words - 2 mins
There's a bug with Core Data such that if you have two entities, A and B, with a one-to-one relationship between them, that relationship will not be setup properly. This bug doesn't care wether you do your work in Objective-C or Swift or both. The steps to reproduce are as follows: Create two entit… read more

Making SwiftKilo Part 1: Setup

April 29, 2017 - 525 words - 3 mins
Some time ago, I read about AntiRez writing a text editor in C. This dude is pretty hardcore in C and does things like maintain Redis, an in-memory database nearly every startup you ever heard of is using or will soon use. It was super cool to flip through and read about the editor. I was especially… read more

You Belong Here

April 08, 2017 - 603 words - 4 mins
Everyone around you right now, all those people who intimidate you or make you feel like you're a fraud have been where you are now. Nobody leaped from a test-tube as a fully-formed senior developer. They all had to start with no clue and find out how to move forward. Many of those people remember w… read more


January 06, 2017 - 392 words - 2 mins
If you work with JSON files in your job on a regular basis, you will likely benefit from my new app, Formatter. It provides a drop window to reformat JSON files quickly, an Xcode extension to do it from inside Xcode (to which you can assign a keyboard shortcut), and a Quick Look plugin to see format… read more

Turning 30

September 27, 2016 - 579 words - 3 mins
The people I looked up to when I learned to program are now getting to about 50 and I've seen many of them suffer from stress and endless sitting. I've seen some try to do something about it and several succeed even. This has motivated me to make sure I take care of myself. In high school I was forc… read more

Adventures in Vimscript

September 19, 2016 - 898 words - 5 mins
Last week Vim 8.0 came out. I was pretty excited because, among other things, Vim now supports asynchronously running code in plugins. Until now, if your plugin code took time (like compiling your project or some auto-completion code) it would cause Vim to freeze until it was finished. No typing, no… read more

Modifier Keys

September 10, 2016 - 1009 words - 6 mins
A keyboard big enough to have all the possible letters and symbols you would need to type when coding or even writing an email would need to be huge. You'd need a key for every letter, lower case and upper case, including the letters less common in English like é or æ, every symbol like , and ; and … read more


July 09, 2016 - 393 words - 2 mins
One of the signs of an expert programmer is a thing I call transference. I learned about it while reading a book about learning to play music and it applies to programmers as well. A novice musician is hard at work studying exactly what to do with their fingers and exactly the patterns necessary to … read more

Building the KC60

May 24, 2016 - 1294 words - 7 mins
Recently I have been super pumped on mechanical keyboards. I found one small enough to easily use when I'm on the couch or in a café which made it easier to spend most of my time using one and get used to it. At this point it feels weird and uncomfortable when I use my regular laptop keyboard! Keybo… read more

Fun With Typing

February 23, 2016 - 546 words - 3 mins
As a developer, I spend quite a bit of time typing. Typing code, typing email responses to clients and recruiters, typing jokes in Slack. As a child, I was fortunate enough to have access to a computer at home and the internet. Our computer was not fancy enough though to play any of the games the ot… read more

The difference between classes and structs in Swift

February 23, 2016 - 575 words - 3 mins
Today I assigned my students (I teach a bootcamp now) to write 400-500 words about one of the topics we have covered in class, so I thought I would do the same. Here goes! Classes and structs are similar. Both can have properties, both can have methods. This can make it a bit confusing for developer… read more

Swift Enums for Error Reporting

January 09, 2016 - 739 words - 4 mins
In Apple's block-based API's, you'll often see a pattern like this: func dataTaskWithRequest(request: NSURLRequest, completionHandler: (NSData?, NSURLResponse?, NSError?) -> Void) -> NSURLSessionDataTask The function expects you to provide an NSURLRequest and a block and promises to execute y… read more

Semitones 1.0.1 Released

November 20, 2015 - 596 words - 3 mins
Up to the day I am writing this, Semitones has earned me 122$ in proceeds. That's after Apple's 30% cut from sales through the App Store. That's not much, but it is already more than my last app made in it's entire lifetime. Semitones has a simple business model: an up-front price of 4$. No in-app p… read more

Introducing Semitones

November 09, 2015 - 378 words - 2 mins
In the last few years, I've started taking my bass playing more seriously. I've found a teacher, joined in on jam sessions, and sat in for bands like Airplane Mode. In my search for ways to help me improve, I found inspiration for my next app. Becoming a better musician includes some level of music … read more

What I'm Working On

September 24, 2015 - 675 words - 4 mins
Some of you have been asking what I'm working on lately, so here's your answer. 1. Practicing music. In middle school and high school, I played bass for the school orchestra. I played cello for that first year, but I like to pretend that didn't happen. I stopped playing music after that. Partly beca… read more

Handling iOS image uploads with Paperclip

June 17, 2015 - 327 words - 2 mins
If any of you happen to do some backend work and iOS work at the same time or work on a team that does, this might be a helpful tip for you: Let's say you have a Rails app that uses the Paperclip gem by Thoughtbot to handle file uploads. Then let's say you have an iOS app that wants to upload photos… read more

Gateway View Controller: A Pattern for handling app login

June 14, 2015 - 774 words - 4 mins
As Apple recommends in their Interface Guidelines, apps should try provide functionality without requiring a login. Ideally, an app would only ask for your login information when you get to features in the app that does need it. Unfortunately, there are a great many apps that simply lock you out of … read more

Resources for Getting Started

April 09, 2015 - 270 words - 2 mins
First, let's start with some helpful resources: iOS Design Apple's Human Interface Guidelines WWDC 2015 Videos Designing For Future Hardware (This is more about prototyping and incredibly informative) WWDC 2014 Videos Creating Custom iOS User Interfaces Designing Intuitive User Experiences Maki… read more

One Platform At A Time

April 07, 2015 - 439 words - 3 mins
We work and talk with many startups and a question that often comes up is, “Does it make sense to build our product for iOS and also for Android for our initial launch?” Our answer to this question is a resounding, “No.” This is not because we want our clients to only consider iOS and therefor only … read more

Roundwall Software's Open Source

April 06, 2015 - 252 words - 2 mins
At Úll this year, Arik Devens challenged us to share more open source code with each other. Here at Roundwall Software, we benefit greatly from open source projects, both large and small ones, all the time, so it seems only right to give back. Now Roundwall Software's apps haven't been absurdly popu… read more

Custom Segues for Fun and Profit

March 16, 2015 - 820 words - 5 mins
With new devices like the iPhone 6+, even naysayers are considering using Storyboards. Adopting Storyboards, even for a portion of your app, means easy access to plenty of handy features such as Size Classes, Auto-Layout, and my new friend: custom animations in view controller transitions. Now you c… read more


February 15, 2015 - 220 words - 2 mins
One important part of success in any field is answering the question “Why?” As a musician, you might play a solo that everyone is impressed with, but unless you know why that solo worked, you’ll rely on luck to do it again the next time. In software this is just as important. Why is your app crashin… read more

App Video v2

January 30, 2015 - 33 words - 1 mins
My previous demo video was confusing to many people, so here is attempt #2. It's getting better! read more

Operation Morale-Boost: Ghosty Progress

January 22, 2015 - 65 words - 1 mins
While this project hasn't quite turned out like I originally intended, it has resulted in a fairly useful app I'm happy with. It has some rough edges that need some love and attention still, so here is a little video preview while you're waiting to play with the real thing. read more


January 10, 2015 - 40 words - 1 mins
Project: Untitled something Total: $0.00 Made with Chainguard.app itms://itunes.com/apps/chainguard (Everything above is my first published post from my app-in-progress Ghosty. It's not much, but this means it's working!) read more

Operation Morale-Boost: Meet Ghosty

January 08, 2015 - 205 words - 2 mins
The first week of my morale-boosting project is nearly complete and I would like to show you what I've been working on. The app is (for now) called Ghosty. It is an iOS app for connecting to blogs using the hip platform, Ghost. Like Wordpress, they provide an option to host it yourself or to pay for… read more

2014: The Year Business Worked

January 07, 2015 - 176 words - 1 mins
I didn't want to write a long retrospective, but I thought I should mention something about the last year. 2013 was stressful and terrifying. I almost had to borrow money from my family to leave Amsterdam and move back to Oklahoma where I would need to live with my mom while I recovered. I didn't ju… read more

Operation Morale-Boost

January 05, 2015 - 171 words - 1 mins
It's the start of a new year and that seems like a good excuse to try something different. I'd like to work on a project for funsies. For this project, I don't want to care about market, profits, making a client happy, or any of the junk that fills my RSS feeds with doom and gloom. I'd like to pick… read more

Say Hello To Chainguard!

August 09, 2014 - 716 words - 4 mins
As I wrote in a previous article, my last attempt at making an app had problems. I'm pleased to announce today that I've finally launched something much better. Parts was an app to keep up with items you needed to buy for projects. It could remember where you were when you found an item, what the it… read more

Magical Growing UITextViews inside UITableViewCells

July 10, 2014 - 538 words - 3 mins
I've seen quite a few attempts at solving this problem and all of them seem to be more complicated than necessary. Many solutions I see involve using a method like this in your tableview's datasource: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NS… read more


February 24, 2014 - 534 words - 3 mins
App Development Zenly Zenly is a live map of your friends and family. It’s the most fun way to meet up — or just see what’s up! — so you can feel together, even when you're apart. Samuel was responsible for fixing up the app's support for right-to-left languages like Arabic. This meant fixes across … read more

What's Wrong With My App

January 31, 2014 - 838 words - 5 mins
Last year I launched my first app that wasn’t funded by a client or employer. It’s called Parts. I never expected it to make millions of dollars, but I had hoped it might at least make enough to pay the rent or some such. In total, it made $44 according to AppViz (a great tool by the way). After so… read more

Cargo Culting

January 15, 2014 - 670 words - 4 mins
A cargo cult is any of various native religious cults of a millenarian and messianic character located in the southwestern Pacific islands, holding that spirits will bring large cargoes of modern goods for distribution among its adherents. [1] After the arrival of the computer and the practice softw… read more

Coding Exercises for Prospective Hires Are Stupid

January 03, 2014 - 423 words - 3 mins
Earlier on App.net/Facebook I posted this: "Also, asking potential hires to build apps as part of the hiring process is stupid." Perhaps short-text social media is not enough to properly elaborate my thought. Here’s a better version: If you want to see professional work from a developer, p… read more

2014: The Year I Wrote Better

January 02, 2014 - 461 words - 3 mins
Getting Better Those of you who already read my blog know that I’m not the best writer. You’re likely either reading this because you’re either related to me or the technical information has helped you. Thank you for reading! This year is going to be better. More content, better writing, you’re in f… read more


December 18, 2013 - 420 words - 3 mins
Words like “intelligent” and “stupid” and “smart” and “genius” get thrown around quite a lot these days. I think they’re all mostly bullshit and distract from the real issues. In software, we often run into people who lack the depth of knowledge and experience in the various fields necessary to make… read more


December 13, 2013 - 120 words - 1 mins
When to use #define: When you’re declaring macros like in Apple’s: #define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone) I’m actually not even sure why this was… read more

Duck Types and Objective-C

November 25, 2013 - 472 words - 3 mins
I just finished the book, Practical Object Oriented Design in Ruby. I haven’t been paid to write Ruby code in years and I still found the book incredibly useful. Sandy Metz writes excellent explanations for many things I have felt about code I have seen while working on projects. In the last chapter… read more


October 31, 2013 - 570 words - 3 mins
I try to be extra careful to consider my capacity before agreeing to do something for or with someone (or even for myself). Mis-judging capacity seems to often be the cause of frustration and failure. I think now I finally have the capacity to do something cool that isn’t for a client. I think about… read more

How to get started with remote pairing quickly

October 22, 2013 - 957 words - 5 mins
Remote Pair Programming is a thing now that people do. Basically, it enables you to learn from and work with anyone anywhere, ever. You can do that thing we love to do (write code) with a diverse range of people. So let’s say you’ve decided you like this idea of getting out of the bubble of programm… read more

Thank You

September 13, 2013 - 205 words - 2 mins
The annual 360iDev conference just happened. I got to go, I enjoyed it very much. This time I wasn’t just an attendee, I joined the ranks of the great 360 speakers before me and attempted to do them proud. Soon my talk will be online and any of you who missed it can watch it. People I didn’t know to… read more

Make Git Friendlier: status

August 05, 2013 - 207 words - 2 mins
Since I couldn’t sleep tonight, I watched a presentation by this guy Zach Holman who works for GitHub. One tip he shares makes the output from git status much friendlier and I thought I’d share it so you don’t have to watch an hour of talking to find out about it. Instead of: git status try typing:… read more


June 13, 2013 - 226 words - 2 mins
Being a part of Appsterdam and trying again to run my own business has made me think differently about community. We grew up as nerds in school and learned to expect people would think we’re lame for the things we loved. We kept the things we loved to ourselves and looked for the few people on Earth… read more

Manually set location on an item?

May 25, 2013 - 9 words - 1 mins
Manually set location on an item? read more

Think of the Children

March 21, 2013 - 357 words - 2 mins
When I was in college for electrical engineering, I learned to program objective-C for the Mac and that has now become my full-time job instead of engineering. The primary reason for pursuing a life of software development instead of engineering was the community. The developers I read about like Mi… read more


February 20, 2013 - 629 words - 4 mins
It is becoming popular, especially in American tech culture, to encourage failure as a natural part of learning and a key to success. Humans fail in many casual ways to learn basically anything, even basic skills like walking. Failure in software is often expected on a very minor level. Maybe I’ll r… read more

Web Developer Admits: Objective-C > HTML5

December 27, 2012 - 83 words - 1 mins
Web Developer Admits: Objective-C > HTML5 "It felt like hammering nails into in a wonky floorboard. We fixed one problem and another would pop up. We probably spent over 80% of our time fixing weird side-effect glitches and making our code work within PhoneGap correctly. But eventually we fe… read more

Down with NSLog

December 06, 2012 - 485 words - 3 mins
NSLog is a fun debug tool, but it has no place living in your version control history. Those of you who came from other languages and platforms might be used to a world where NSLog’s cousins, console.log, print, puts, and the sort were all you had to try to figure out what was wrong with your code. … read more

No Comments Left Behind

December 01, 2012 - 357 words - 2 mins
I would like to explain my hatred for commented-out code. Some might call this hatred extreme. They’re probably right. When I look at code interspersed with commented-out lines, I think of my own home which is often covered in dog hair. Now my dog is adorable, but he does in fact shed quite a bit. … read more

Switches Get Stitches

November 19, 2012 - 819 words - 5 mins
We have a new rule here at Roundwall Software: switches get stitches. Switches and if statements can easily pile up in a method and make it difficult for someone to understand what a method does. They also makes testing harder because tests that cover a method need to cover every possible branch pat… read more

Code Examples

November 15, 2012 - 301 words - 2 mins
The point of sample code is to show you just enough code to communicate a concept. Sometimes code for a given demonstration (such as showing how to use parts CoreData or CoreText) requires a bit of boilerplate in order to show the concept. For example, let’s consider a sample project to demonstrate … read more

External Storage with Core Data

November 11, 2012 - 212 words - 2 mins
New since iOS 5.0, we have a new weapon at our disposal for Core Data. External Storage lets you tell Core Data that you’re going to jam large data blocks (mp3s, pngs, whatever) into a property on your Managed Object. Normally you might say “Oh no! Why would you do that? Everyone knows you shouldn’t… read more

Quote: Growing Object Oriented Software

November 05, 2012 - 79 words - 1 mins
None We cannot emphasize strongly enough that first-cut code is not finished. Its good enough to sort out our ideas and make sure we have everything in place, but its unlikely to express its intentions cleanly. That will make it a drag on productivity as its read repeatedly over the lifetime of the … read more

A Massive Speed Difference In iPhone CoreData

October 19, 2012 - 397 words - 2 mins
It was brought to my attention last night by my good friend, Collin Donnel, that using a fetch request to grab objects based on their objectID’s was much slower than simply using a for loop and the NSManagedObjectContext method -existingObjectWithID:error: to grab each object one by one. My initial … read more

My Apology

August 19, 2012 - 345 words - 2 mins
I take back everything I said about RubyMotion. While spending some time hanging out with some old musicians (guys in their 60s) I came to realize just how terrible I sound by saying pretty much anything negative about efforts in software-land like RubyMotion. Largely my motivations for disliking th… read more

Buzz Andersen: Getting Final Cut

June 14, 2012 - 19 words - 1 mins
Buzz Andersen: Getting Final Cut I love this post. Buzz is awesome. read more

Your Best

June 06, 2012 - 615 words - 4 mins
At work, everyone expects you to do your best. Wether you are a freelancer, a completely-independent developer, or a company person, everyone expects you to do your best. But what does that really mean? Your best? The best work you’ve ever done? This phrase keeps me up at night. This phrase makes me… read more

I have decided

May 23, 2012 - 161 words - 1 mins
I will make myself proud of myself. I will no longer use my current situation as an excuse for my lack of action or progress. I will not be distracted by tools or toys, but press on to the solution and that which gets me there. This is the year I become who I want to be instead of simply planning i… read more

The Amsterdam Plan

March 23, 2012 - 783 words - 4 mins
Now that I am moving to Amsterdam, I need a new plan. I have learned so very much since the last time I wrote out a plan and I am both excited and terrified. Previously I was very much against freelance/agency type work due to my frustrating experiences in this field. In the last year I have learned… read more

Trying this "mechanical keys" thing.

March 21, 2012 - 8 words - 1 mins
Trying this “mechanical keys” thing. read more

Why I'm leaving

March 20, 2012 - 426 words - 3 mins
adventure You’re lying to yourself and everyone around you if you ever say you don’t want to go somewhere new. It’s ok, I lie to myself about all kinds of things. Exploration is a critical part of the human condition. A biological imperative to continue the species. Amsterdam is a very new place. A … read more

No more SOLID

March 13, 2012 - 152 words - 1 mins
The more I research these SOLID principles, the more I see how they don’t necessarily apply to modern programming and even less so to Objective-C. It’s easy to want to over-engineer, over-architect, or over-work anything you do as a programmer. Who wants to miss an opportunity to flex their muscles … read more

My first talk, "Refactoring and stuff" given at NYC Cocoaheads

March 09, 2012 - 18 words - 1 mins
My first talk, "Refactoring and stuff" given at NYC Cocoaheads read more

SOLID Part 2

March 06, 2012 - 436 words - 3 mins
Open/Closed Principle Ivar Jacobson once said All systems change during their life cycles. This must be borne in mind when developing systems expected to last longer than the first version. This is why we want to try to architect our projects in such a way that the future doesn’t become ever so pa… read more

SOLID Part 1

March 02, 2012 - 504 words - 3 mins
The Single Responsibiliy Principle Robert C. Martin wrote about the principle in his article back in 2002. The principle states: "There should never be more than one reason for a class to change." — Robert C. Martin As requirements for your project change, your code will need to change … read more

Object graph dependency analysis

February 26, 2012 - 867 words - 5 mins
How to generate the graph Generating and reviewing a graph of the object decencies in your app is a super handy way to be aware of your app layout, spot problems in your architecture, and make better decisions when adding new code in the future. With very simple applications, you could certainly … read more

Quote: You Are Not Ruthless Enough

February 19, 2012 - 73 words - 1 mins
"Even on a tight schedule, last-minute block-ship bugs appear and what should have been a simple, straightforward bug fix will turn into some Giger-esque state-driven nightmare causing everyone associated with the project to invent new profanities because the ones they have don't seem emphatic… read more

Quote: Super Quiet Non-Understanding

February 09, 2012 - 28 words - 1 mins
If I had to quit a job over this, I would. http://inessential.com/2012/02/09/super-quiet_non-understanding read more

Quote: A Design Primer For Engineers

February 06, 2012 - 48 words - 1 mins
Software had been around and making piles of money long before Netscape, but it became a worldwide phenomenal when anyone, anywhere could mail anyone else a picture of their cat. http://www.randsinrepose.com/archives/2012/01/16/a_design_primer_for_engineers.html read more

Quote: 10 Tips For Agile Leaders

February 01, 2012 - 68 words - 1 mins
"Failing I can deal with. I fail all the time. I write blog posts that dont resonate. I write software no one cares about. I regret how I handle certain situations and conversations. But I try. And as long as I know I did my best, Im good. Thats what lets me sleep at night.” —- Jonathan Rasmu… read more

File watching for fun and profit.

January 29, 2012 - 394 words - 2 mins
Let’s say you want to write some javascript. You’re a good programmer, but you’re not so cocky that you feel infallible. Good news! Just because you are writing in an interpreted language, doesn’t mean you have to cross your fingers when you go to execute your script. JSHint is here to the rescue. C… read more


January 14, 2012 - 430 words - 3 mins
When I talk to people who are serious about their computer-related tools (which happens frequently since I write software), I often end up in discussions about how X tool is better than Y tool. These discussions are silly and overdone arguments such as Android is better than iPhone, OSX is better th… read more

Alternative editors?

December 12, 2011 - 203 words - 2 mins
I’m especially curious how anyone is able to use something other than Xcode for developing things with Objective-C. This is specifically an issue for Objective-C projects as opposed to Rails/Node.js/whatever-else-is-cool projects because those can be done in pretty much any editor. Current Xcode doe… read more

RSS Syncing and my attempt at a solution.

November 01, 2011 - 543 words - 3 mins
Some time ago, I read this article by Brent Simmons about an alternative to the Google Reader syncing system pretty much everybody uses to sync RSS Readers together across your laptops, desktops, iPhones, iPads, whatever. Google Reader is nifty and all, but the problems Brent outlines are actually p… read more


October 06, 2011 - 0 words - 0 mins

New wider Venture 5.8

October 01, 2011 - 249 words - 2 mins
Shortly after DLX acquired Venture, Venture announced that they would be releasing new, wider trucks. Previously, Venture only made trucks that were 8 inches and 7.75 inches wide. This is all fine and dandy for all skaters who enjoy riding boards that are 7.5-8.0 inches wide or so, but those of us w… read more

Special place for my team. (Taken with instagram)

August 03, 2011 - 13 words - 1 mins
Special place for my team. (Taken with instagram) read more

XPC and how it might affect Mac App Architecture

July 29, 2011 - 350 words - 2 mins
Just finished watching the developer video about XPC from Apple. This is actually pretty cool. For those of you who aren’t hip to the goods, XPC is an attempt at a simper-simple way for separate applications to talk to each other. This feature works well with Lion’s new Sandboxing ability which more… read more

My San Francisco Side Trip

June 09, 2011 - 187 words - 1 mins
For those of you who don’t know, this week is WWDC here in San Francisco. I have been super lucky the last few months and just happen to work with a company cool enough to send me out here to enjoy the fun. WWDC is pretty epic. I love every minute of it. While I’m here in SF, I had the awesome oppor… read more

Everything You Wanted To Know About Mud Client/Server Interaction But Were Afraid To Ask

June 02, 2011 - 19 words - 1 mins
Everything You Wanted To Know About Mud Client/Server Interaction But Were Afraid To Ask read more

Telnet Server Commands For Dummies

June 01, 2011 - 552 words - 3 mins
The telnet protocol is an entirely ascii-based method of transmitting data that was developed way back before I was born. Telnet lives in what they call the “application layer” of the internet protocol suite. It’s like SSH only without the S (the one for secure). To communicate in telnet land, serve… read more

Things have changed

May 28, 2011 - 313 words - 2 mins
The two people reading this have probably been wondering to themselves, why self, I do wonder why that splendid chap, Samuel, has neglected to write anything in quite so long? Well two people, your prayers have been answered. For those of you who just tuned in, heres what you missed: My name is Sam… read more

This is my dog

May 28, 2011 - 7 words - 1 mins
This is my dog read more