Swirl Card Table The first mobile app I ever created was Hearts Net (see below). It was written in Objective-C and C++, using Apple’s native UIKit frameworks. Swirl will be a very similar card game, this time written in Dart, using Google’s Flutter framework, for tablets and phones running iOS and Android.

I stopped maintaining Hearts Net quite some time ago. At the point when it was abandoned, it ran fine on iOS versions 6 through 10. When Apple released iOS 11, it finally stopped working. That’s when I learned that I still have some very devoted users. Several people wrote to me to say that they were so addicted to my card game that they were postponing the upgrade to iOS 11, or else keeping an older device around specifically to run Hearts Net. That made me think about bringing it back in some form. When I decided I wanted to learn Flutter, a port of my faithful old card game seemed like a great first project.

When I originally conceived of Hearts Net, I thought my “killer feature” would be realtime multi-player for up to four human opponents. Turns out I was wrong. Almost all my users played the game by themselves, against the robot opponents. So this time around I’m not going to bother with multi-player, and only support individual play.

geoFIT Organizer

geoFIT iPad Map gallery

Service order management system for small gas and electric utility companies. Runs on iPhone and iPad. Built using the ESRI ArcGIS mapping framework.

I wrote this app from scratch and maintained it for five years. During that time, it gained an almost unimaginable number of features: push notifications, asset inspections, programmable service order fields that can be customized for each client company, mapping tools, photo and audio attachments, helicopter-based pole inspections, form-filling and retrieval, real-time personnel tracking, offline mode, custom searches, asset filtering, support for multiple map tile providers, and a lot more.


formFIT iPhone gallery

An app for filling out new forms and searching for and viewing existing forms. Runs on iPad and iPhone. Allows a great deal of customization with respect to field types, pages, and grouping. Allows several types of field validation, including ranges and regexes. Supports computed fields: the forms designer can take the values of fields A, B, C, add them together, and put the result into field D, similar to a spreadsheet.

Hearts Net

iPhone Card View gallery

Card game for iPhone and iPad. This was my first iOS project, which I used to teach myself how to write apps for the platform. Up to four players can play against each other in realtime via WiFi, Bluetooth, or Game Center, or you can play by yourself against robots. Based on feedback from my users, I believe it had the best robot players of any card game in the iOS app store. It made up to 130 dollars a day in sales, and got as high as number 33 in the card game category in the U.S. store. I got a big boost by making the game available for iPad on the very first day the hardware was released, in April 2010. Like everybody else outside Apple, I had never touched a real live iPad until that day. I developed it using just the simulator. I had a Mac version mostly written, but I never got around to finishing it.


Slipknot Web View

Slipknot was a framework for creating “Digital Catalog” apps on iPhone and iPad. I wrote the iOS wrapper, the client supplied the HTML content for each app, which was updated dynamically every time the app was run. There are a lot of popular frameworks that do something like this today, but there wasn’t any such thing when I wrote this one.

I created an extensive javascript bridge that allows for two-way communication between the app and its embedded web content. Other features include remote (push) notifications, local notifications, CoreLocation updates (so users can be notified of deals nearby), Google Admob ads, and Google Analytics. I created a detailed preferences view so that beta testers can try out various parameter changes, such as enabling CoreLocation updates while running in the background.

The client wanted to make many apps of this type, all with different HTML content. To make that possible, I put 99 percent of the code for the app into a reusable static library. The code for each specific app is very small: a single source file and header.


DUB Home View gallery

Contact manager for iPhone. Syncs your phone’s contacts to and from a web service. Users could also access their contacts from a web site, and there were versions for Blackberry and Android, maintained by other developers.