A Slightly More Technical Resume

Note: I presume you’ve read my normal resume if you’re peeking at this. If you haven’t, please do first! :-)

Annodex Project, CSIRO

My first foray into the workplace was at CSIRO (Commonwealth Scientific and Industrial Research Organisation), one of the few government-sponsored research institutes left in the world. I was lucky enough to work with two incredibly talented people there—Conrad Parker and Silvia Pfeiffer—on something named the Annodex Project, a brilliant idea whose time still hasn’t come yet. It will, mark my words, be the way the Web is in five years: hyperlinked, searchable video makes it a first-class citizen on the Web alongside HTML, and you really have to see a demo of it to understand its potential. Silvia, Conrad and I all shared brainstorming the overall plan, its initial concept, first prototypes and development, and creating the non-profit annodex.org organisation to ensure its openness. I worked on:

  • Getting support for the Annodex file format into a couple of open-source media frameworks such as xine and VLC.
  • Wrote the Annodex Firefox extension (… dear God, please never force me to write Netscape plugins for Mac OS X again; thanks, André).
  • Acted as a go-between between a contractor and the rest of the team when it became apparent that the contractor was somewhat hard to work with. (Apparently I was the only person who said contractor felt he could speak to without flying off the handle.)
  • Had a lot of fun writing a mod_oggchef C++ Apache 2.0 module for Windows that used illiminable’s DirectShow filters to perform codec-neutral server-side remuxing of Ogg multimedia files (similar to the existing mod_annodex Apache module for Linux).
  • Being the de-facto systems administrator for all our internal development systems, such as running the Debian Linux-based annodex.net machine, maintaining Apache, Mailman, CVS and Subversion and Trac.

It was a great introduction into industry, although ultimately the no-pressure atmosphere (CSIRO being a government organisation) left me wanting more. I firmly believe that Annodex is a brilliant with a flawed implementation, and would dearly love to find the time and resources to work on it again some day. Having seekable, searchable, hyperlink-enabled video makes sites like YouTube look like 1996 compared to the Web of today.

cineSync, Rising Sun Research

After the Annodex project, I worked for Rising Sun Research, a small software development house aimed at creating tools for the visual effects industry. (“Visual effects” meaning all those special effects you see in Hollywood movies.) RSR were a sister company to Rising Sun Pictures, a company that actually did visual effects, so I got to meet a lot of very smart, overperforming people who were younger than me; quite a humbling experience. I worked on a great product there named cineSync, which was a very simple idea that filled a massive need in the visual effects industry.

cineSync is a collaborative movie player: fire the program up on a couple of computers connected via the Internet, load a movie, and as the movie plays, both computers are kept in sync. So, if John on computer A jumps to three minutes and twenty nine seconds, Mary’s cineSync on computer B will also jump to that exact same spot. cineSync also allows you to ‘draw’ on movies with the mouse or tablet, so that you can highlight certain areas in the movie. These simple features enables directors and visual effects coordinators to discuss movies over the Internet, and saves them incredible amounts of travel costs and stress. cineSync is a fantastic example of a technically simple idea, with an application that needed to be highly usable for it to be successful. Hollywood directors are not particularly known for their tolerance of computers and have rather short tempers, so cineSync had to be very easy-to-use and intuitive from the start. These days, cineSync is used on nearly every single major Hollywood production, from X-Men 3 to Return of The King. It’s very gratifying knowing that somehow, we made a small contribution to making those movies.

I was the lead coder for cineSync, although I was also deeply involved with the design process to build a 1.0 product. I joined the team with the role of lead coder when the first cineSync prototypes were built, but since RSR is a small company, I was also involved with many non-programming issues such as licensing models. Version 1.0 was built from the prototype’s code bases, with completely separate code bases for the Windows and Mac OS X versions. Immediately after 1.0 was released, we unified the two platform’s code bases into a cross-platform C++ code base that contained all the core logic, and made platform-native user interfaces (using C++ on Windows and Objective-C on Mac OS X). Thus, version 1.01 of the Mac OS X client was actually a complete rewrite from scratch; at around 30,000 lines, it wasn’t a large project, but it certainly wasn’t trivial either. I learnt a lot about C++ during this time from some very knowledgeable contract coders, and it was only after my experience at RSR that I was comfortable with the language.

We used all the modern development practices on cineSync: revision control systems (Subversion), a bug tracker (FogBugz), continuous test builds with automated build scripts (BuildBot). To this date, cineSync is, by far, the most maintainable code base I have seen on any project exceeding 40,000 lines. We set aside explicit time in the bugtracker to do refactoring to make sure the code never slipped below reasonable standards. We also embraced a lot of languages to get the job done: the cineSync server is written in Erlang, the client is written in Objective-C and C++, internal build scripts and tools are written in both Perl and Python, and the Web site was developed with Ruby on Rails. All the coders on the team were encouraged to work on new areas they hadn’t touched before in new languages, and some days were set aside for ‘mentoring’, where the expert in one area of code would spend time getting other coders up to speed. There was no concept of ‘code ownership’; any coders were encouraged to fix up bad code if they came across it. We also used an agile-like methodology that enabled us to see exactly how on-track we were with keeping to the release date. At any time, the product manager could see exactly near or far behind schedule we were and pull out or add in extra features, appropriately. To this date, I don’t believe RSR have slipped on a cineSync release date by more than a week, and we never slipped by more than one day while I was there. I am still doing active development for cineSync on a contract basis partially because it’s such a pleasure to work with.

I was also (once again!) the de-facto systems administrator for Rising Sun Research, and was responsible for migrating core business services such as email and Websites from an old server to a shiny new Xen box that provided services both internally and externally: Subversion, Trac, NFS, SMB, Apache, ftp, Mailman, etc.

RapidWeaver, Realmac Software

Right now, I’m contracting to Realmac Software as a developer on RapidWeaver, a fantastic shareware program for Mac OS X that lets you build websites easily. I was initially just a RapidWeaver user, but wrote a plugin for it that enabled you to use John Gruber’s Markdown text markup language to build HTML pages. The Realmac Software guys were impressed and decided to hire me to work on RapidWeaver itself.

The development practices at Realmac Software left a lot to be desired when I first joined: no revision control was used even though they were already contracting two other external developers, and their bug-tracker was more-or-less a simple text-based to do list. The first thing I did was to install Subversion and Trac, which assisted the development process greatly. Since joining, I’ve more-or-less become the de-facto main coder, and have been largely responsible for the programming involved in the RapidWeaver 3.5 and 3.5.1 releases. With the upcoming release of RapidWeaver 3.6, I’m handling support from both regular users and beta testers, which is quite a challenge given that RapidWeaver has thousands of users. This is also the first time I’ve worked remotely; Realmac Software are located in the United Kingdom, while I’m living in Sydney. It’s extremely satisfying working on a product that used by thousands of users; even though cineSync has made an enormous impact on its target market (we personally had the visual effects supervisor for Harry Potter IV thank us for the program), it’s a great feeling being able to write “insanely great” applications for the regular person to use.

My Background

I think that—for anything—one must study its history to understand what, why, and how something evolved. C++ makes a lot more sense when you give it some context. Perhaps a brief summary of my early life with computers will help you to understand my present attitudes and beliefs.

Early Years and BBSs

As with a lot of other teenage computing geeks, my introduction to computers was playing games. However, my game-playing was pretty much limited to PCs and Macs: our family didn’t have any of the more ‘fun’ computers, apart from our beloved Atari 2600 that’s no doubt still somewhere in storage. So, for me, it was just IBM PCs and their inferior display and sound capabilities. No C64; no Amiga. I spent hundreds of hours on the golden age of Sierra and LucasArts games: Police Quest, King’s Quest, Hero’s Quest, Monkey Island, Day of the Tentacle, and other classics such as Starflight, Star Control II, Ultima Underworld, System Shock, and Dune 2. Good times!

During this time, I discovered modems and BBSs, and that was when the real exploration started. Instead of doing my homework after school, I spent all afternoon and night chatting to other Sysops on their bulletin boards, downloading files, participating in OS/2 vs Windows flamewars on Echomail, and keeping up with my new virtual friends on the popular Sydney chat boards. I was lucky enough to have a school friend’s father be the Zone 3 regional coordinator for Fidonet, and that started my interest in figuring out how all this stuff worked. I studied everything from the original Opus CBCS software to RemoteAccess to FrontDoor and BinkleyTerm, and gradually figured out how everything fit together.

The Demoscene

At about fifteen, I stumbled upon MODs: Amiga ProTracker modules, and the scene surrounding it that would dominate my life over the next few years. Intertwined with the underground music scene was of course the demoscene, the amazing ANSI scene and, of course, warez, every gaming kid’s dream come true. I started my own BBS with my brother—named Mindflux—and we became one of Australia’s few demo-related BBSs, and a hub of activity. Thanks to my parents’ generous funding, we had three dedicated phone lines just for modems: two incoming lines and one outgoing, with US-imported USRobotics modems and NetComm TrailBlazers, for those folks who argued that PEP was a far superior transmission protocol than V.Fast and VFC. We set up our own Echomail network named BloodNet (whose nodelist I still keep on my hard drive), and became the main hub for the prestigious European demoscene network DGInet.

I studied tracker music intensely during this period. I joined several art groups (Queensland-based Heretics, Melbourne-based DiE) to publish the ANSI screens and music I’d written, and even managed to produce one CD album and some music for demos. The advent of the Internet led me to IRC where I met other like-minded people on the famous demo channels #coders and #trax. The highlight of my demoscene experiences came when I eventually travelled overseas after high school (with people I met from the music scene) and attended Assembly 97 in Finland, one of the biggest demoparties in the world. I was thrilled to place second in the music competition there and meet so many of my idols, many of whom are now some of the most accomplished game developers in the world. (Many of these folks also now work at Google and other high-tech companies, such as Apple.) I still hadn’t learnt much about coding, but I gained a wealth of contacts and experiences that I would never forget.

University and Linux

After coming back from overseas, I studied Computing Science at the University of New South Wales, which threw off all my “knowledge” about coding. Democoding was all about speed and optimisation and pushing the hardware to the limit, and here were my University lecturers stating that performance is the last thing to worry about! I was also unmotivated to study at Uni, and my grades showed this: in the first few years there, I failed nearly everything apart from Computing, which I received distinctions and high distinctions in.

However, at the same time, I also discovered Linux, and was lucky enough to join the UNSW Computing Society (COMPSOC) and the Sydney Linux Users’ Group (SLUG) during the years when its members would have an enormous impact on the Australian Linux scene. Many of those people (e.g. Conrad Parker, Simon Horman, John Ferlito) would be presenters and authorities on many aspects of Linux over the next few years, and I still feel privileged to know many of them. Linux was something new and fun to play with, so I dove into the whole Linux, Open Source and Free Software culture; I had 1,000+ emails coming in a day from just technical mailing lists for dozens of projects, participated in Linux kernel flamewars, and even submitted a kernel patch when I found out a new computer I’d bought had a slightly dodgy graphics chipset.

My zeal for Linux was, however, tempered by a job that I took during University to get some income, where my role was IT support for a very small Sydney business that set up and maintained networks for small businesses. I learnt a ton about Microsoft Exchange (version 5.5, ouch), and despite my enthusiasm for Linux, I rarely evangelised it in my IT job. Compared to the Exchange behemoth, I just didn’t see anything in the Linux world that could compare to the highly integrated, easy-to-use combination of Exchange and Outlook, even if administrating Exchange was an exercise in pain.

I think it was at this point when I first truly realised that I was lucky enough to have looked at a lot of different technologies and approaches (Linux vs Windows, demoscene vs production coding) and consciously swore to never be religious about any technology. You can learn something from every discipline, and being exposed to opposing schools of thought enables you to think critically about shortcomings in technologies that you currently use.

Programming Languages and Mac OS X

Thankfully I became motivated again to study and receive my degree at University, and my academic transcript reflects a pretty incredible contrast between my average mark in my first few years and my last. (I believe my average was well under 50 for the first three years, and jumped up to around 70 after that!) My last year at UNSW would turn out to be my most enriching and most enjoyable, since it was then that I met my to-be supervisor, Manuel Chakravarty, and decided to do a year of honours study for my Bachelor of Science degree. My most rewarding University subjects were Advanced Functional Programming, Distributed Systems and Operating Systems, and the first two of those were done in my honours year.

My thesis topic was building a language bridge between the Haskell programming language and the Objective-C programming language. Haskell is a beautiful functional language that trounces almost everything else I’ve seen for code conciseness and expressiveness, while Objective-C is a highly dynamic object-oriented language that has its roots in Smalltalk. Learning the power of dynamic code from Objective-C, I wrote the first dynamic loader for the Glasgow Haskell Compiler, and worked with Don Stewart on hs-plugins, a plugin framework for Haskell that’s been one of the great advances for it in the past few years. I was also fortunate enough to understand the importance of formal semantics and had a crash course in mathematics to enable me to understand the mathematical underpinnings behind programming languages: lambda calculus and type theory. (I’m still not particularly skilled in either lambda calculus or type theory, but I know enough now to understand most concepts in both areas.) Again, I feel fortunate that I’ve been exposed to so many viewpoints and learned the advantages of disadvantages of all of them: formally defined programming langauges (Haskell) vs ad-hoc scripting languages (Perl), static typing (Haskell) vs dynamic typing (Objective-C). I am often amused at the bigotry shown in programming language communities, and will often advocate the opposite of whatever is the norm in the community with the intent of attempting to show that there also advantages in using different techniques. This is often received sceptically and with criticism, but the one time out of twenty that it works, I’m glad to be of service :).

I received a 93 out of 100 for my honours thesis, which I’m reasonably happy about. It was at this stage that I also bought a PowerBook G4, and go back to my childhood roots as a Mac user. It was at this point in time when I started work at CSIRO, for which you’ll have to scroll to the top of the page to find out more about!

Outro

I hope this serves as a little bit more information on what roles I’ve played in projects I’ve worked with, what my history is, and how and why I have the present attitudes I have today. Please feel free to check out the rest of my Web site for more information. Thanks for reading!