I love creating software and I’ve been programming since the age of 14 — that’s when I got my first computer, a Pentium II 300MHz with a 15’’ CRT display. At the time, my cousin introduced me to Delphi and the first program I wrote was a password-protected clone of Notepad.
After switching to macOS in 2006, I created several macOS and iOS apps, including Monodraw, Clear for iPhone, Cloud Calendar, EventBox and CalendarBar.
I’m a proponent of interoperability through standards-based data formats and protocols.
Spark AR Studio v2 for macOS & Windows
- Announced (Alpha): December 2018
- Released: April 2019 at F8 2019
- Platforms: macOS v10.13+, Windows 10
Spark AR Studio v2, publicly announced at F8 2019, is a cross-platform rewrite of the original macOS app. The new software is written entirely in C++ and uses Qt for the UI. The software is used to create all AR effects across the suite of mobile applications created by Facebook, including Instagram, Facebook and Messenger.
As the tech lead for the Spark AR Tooling team, I was responsible for the technical execution of the rewrite.
Spark AR Studio v2 Walkthrough →
Spark AR Studio for macOS
- Announced: 18 April 2017
- Released (Open Beta): 20 December 2017
- Platform: macOS v10.12+
AR Studio is an AR (Augmented Reality) authoring tool announced at F8 2017. The app is used to create effects which can be submitted to the Camera Effects Platform, so they appear in the camera in Facebook for iOS and Android.
I was a founding engineer on the project and later on served as a tech lead. The app itself is written in Swift while the 3D rendering is performed by a custom, cross-platform C++ engine.
Spark AR Studio Walkthrough →
- Announced: 9 Oct 2014
- Released: 14 May 2015
- Platform: macOS v10.9+
- Monodraw Website
- Hacker News Discussions
- Monodraw on Product Hunt
I decided to create Monodraw after stumbling upon some very nice ASCII diagrams on StackOverflow while researching data structures for a text editor. I realised that there were no Mac apps that would allow me to easily visualise algorithms and data structures, so I decided to make one.
As part of the development process, I created my own custom text engine based on
CoreText. This provided full control over the layout process (utilised by the text tool). The line sweep direction and movement can be independently adjusted, as can the text position and alignment within the enclosing container.
Monodraw also marks the first document-based app that I made, which is something I had on my todo list for a while. The canvas itself is Core Animation-based (via layer-backed views) which significantly improves performance and makes certain geometry-related operations trivial.
The shape inspector is implemented using a custom list view which I created for two reasons: firstly, I wanted each list element to be visualised by a
NSViewController, rather than follow
NSTableView’s approach of using plain
NSViews. This design decision allowed me to decouple a lot of controller logic, so that it sits at the controller level of each element assistant, rather than having to reside in the views. Secondly, I wanted to have full control over the animations (which are display link-based).
I wrote the first line of code in December 2013 when I started to prototype the custom text view used in the app.
- Released: 17 Sept 2013
- Platform: iOS v7 (Universal app)
- Clear+ Website
- Reviews: MacWorld, 9to5 Mac, iMore, AppAdvice
After Clear for iPhone and Clear for Mac were released, it was time to bring Clear to the iPad. While in development, we spent a significant amount of time experimenting with various interaction ideas while finally settling on the design that shipped.
One particular aspect that slightly delayed the public release was the refactoring required to be able to share more than 95% of the code between the iPhone and iPad apps. While it required some upfront time investment, it is the better option in the long term.
I was the sole engineer of the app from its inception up until July 2014, produced in collaboration with Realmac Software.
Clear+ Walkthrough →
Clear for Mac
- Released: 6 Nov 2012
- Platform: macOS v10.8+
- Launch Video
- Clear for Mac Website
After the initial of success of Clear for iPhone, we embarked on the journey of creating Clear for Mac. Chris Emery joined me on the technical side.
The development cycle was unusually prolonged due to several setbacks — the need to create a custom sync-framework on top of iCloud (iCloud CoreData was severely broken at the time of development, so it was not an option) and the creation of an advanced animation system on OS X to provide the fluidity that we required (while running at 60fps at all times).
The app was solely engineered by Chris Emery and me (under the Helftone brand) and produced in collaboration with Realmac Software and Impending Inc. I was mainly responsible for the backend portion of the app where I worked on creating a custom OT-based sync framework on top of iCloud. Our active involvement with the development of the app ended in July 2014.
Clear for Mac Walkthrough →
Clear for iPhone
- Released: 13 Feb 2012
- Platform: iOS v5
- Launch Video
- Clear for iPhone Website
- Reviews: The Verge, Business Insider, The New York Times, TUAW, MacStories, Shawn Blanc, Brooks Review, MacWorld
Clear for iPhone started off as joint project with Realmac Software, with Impending Inc joining shortly afterwards. From the very beginning, our focus was to provide a clean and gesture-driven interface. Initially, the idea was to design an app to help you manage repeating duties but was changed later to a task manager. Before settling on the name, it was internally known as “Goals” and later on as “Frictionless”.
I’m the app’s co-creator and was the sole engineer from its inception up until July 2014.
Clear for iPhone Walkthrough →
- Released: 2 March 2011; Discontinued: 31st October 2012
- Platform: macOS v10.6 Snow Leopard
- Reviews: AppStorm, TUAW, The Chronicle
At the time of conception, no apps existed which allowed you to quickly access your upcoming calendar events using a single mouse-click or keyboard press. Chris and I decided to utilise my Objective-C Google Calendar SDK which I wrote for Cloud Calendar, in addition to including support for Facebook and pulling events & tasks from iCal.
The app was co-developed with Chris Emery and graphics were designed by Christopher Downer.
CalendarBar Walkthrough →
- Released: 6 Nov 2010; Discontinued: 31st October 2012
- Platform: iOS v4
- Reviews: MacStories, iSource, TCGeeks, AppAdvice
In the summer of 2010, I started using Google Calendar but there were no good iPad clients. So I went ahead and created Cloud Calendar. One of the more time-consuming aspects was the creation of my own Google Calendar Objective-C SDK.
In addition, working on a calendar exposed me to the complexities of handling time correctly. Programmers that have never dealt with time in some depth tend to make several invalid assumptions (including myself until I stumbled upon some edge cases). For example, a calendar day is not always 24hrs — it can also be 23 or 25 hrs (on DST switchover days).
I am the sole developer of the app and the graphics were designed by Christopher Downer.
Cloud Calendar Walkthrough →
- Released: 9 Nov 2008; Acquired: 6 Oct 2009; Discontinued: 10 Sep 2013
- Platform: macOS v10.5 Leopard
- Reviews: SmokingApples, TwiTip, TUAW, Rachel Murphy, Ryan Boswell
EventBox was the first social network aggregator for the Mac. The idea came about after talking to Chris about how much of a chore it was to keep refreshing so many Safari tabs and if there was a way to automate it.
As we kept refining the idea, we decided to create a standalone app to aggregate information that we could pull from various Web APIs and present it in a nice interface. As we had just finished our first year at university, we started working on it in May 2008 with the first public beta available in November 2008.
The app was co-developed with Chris Emery and graphics were designed by Na Wong. In October 2009, it was acquired by Realmac Software. I also wrote about the lessons we learned from the experience.
EventBox Walkthrough →