Planet Maclab

August 07, 2018


OSCON 2018 Recap

Photo by O'Reilly Media:

A few weeks ago I attended, and spoke at, my 10th OSCON conference. I regularly say that OSCON is my favourite big conference, and every time I attend I’m reminded why I love it, and how much I love it: OSCON is a fun, relaxed, and very approachable place where companies and people involved in open source as contributors, consumers, and users, interface, work with, and have fun with each other. It’s unique in perspective, content, and value. And it’s super engaging everywhere from the lunch hall to the hallway to the sessions and in between. You should go, if you get the opportunity (O’Reilly runs a wonderful diversity and inclusion program, which make me able to help you make it along!)

This year was OSCONs 20-year celebration event! 🎉 If you have a Safari subscription, you can check out the videos from the event here. There’s also a collection of keynotes and interviews from the event on the O’Reilly Media YouTube channel.

On the Monday, Tim, Jon, and I presented a 3 hour session on Open source game development with Godot. Godot is an amazingly polished, and entirely open source, game development engine; Godot is a project of the Software Freedom Conservancy, and is aggressively competitive against the big commercial engines, like Unity and Unreal. I largely led this tutorial, supported by Tim and Jon. We got great feedback from our attendees, and had a full house. I’ll post the material from the workshop in the coming week.

On Tuesday, Tim, Jon, and I presented a 3 hour session on Machine overlord and you: Building AI on iOS with open source tools. We covered everything from CoreML, to Vision, to Apple’s Turi Create Python libraries. Our attendees loved it, and gave us great feedback; it was a fun precursor to our new book, Practical AI with Swift (more on that soon!) You can find the material from this OSCON session right here.

On Tuesday night, I stepped way, way out of my comfort zone and presented a 5 minute Ignite talk on The realities of weightloss. This talk was based on a seed of an idea that Mars had, which I’d taken and run with in a slightly different direction (with her permission). It seemed to resonate with the audience, and I got a lot of thanks, and hugs, from people afterwards. ❤

The next day, Wednesday, saw us doing our traditional book signing (for the latest Learning Swift) in the O’Reilly Media booth of the expo. We had a huge line of people, and signed for about 45 minutes. It was great fun! The O’Reilly staff treat us like royalty, which always makes us feel very special.

On Thursday, in the second-last slot of OSCON 2018, Tim and I teamed up with Mars to deliver an entirely-live coded talk on Learning Swift with Playgrounds. Mars wrote all the examples, designed the flow, and really got thrown in the deep end—and she totally nailed it! Tim provided an excellent narration of proceedings, as Mars live-coded her way through the demos (with Xcode crashing, as is custom!) We got many fabulous reviews, with the talk getting a 4.9/5 ⭐ average. We were thrilled. You can find some notes here, and the fabulous Playground that Mars wrote here on GitHub.

Our friends, VM, Josh, and Paul, also delivered well-received, and awesome talks.

We really love working O’Reilly, particularly our amazing editor, Rachel Roumeliotis, who has risen the ranks of the company while we’ve been working with her (absolutely no connection to us working with her!) and is now a VP of Content Strategy.

We’re doing a bunch of great projects with O’Reilly over the coming year or two, including finishing up a new edition of our iOS Swift Game Development Cookbookas well as a new Unity Game Development Cookbook, a Head First Swift book, and a brand new title, Practical AI with Swift. More updates on all of these soon!

Our latest edition of Learning Swift is available, and getting a bunch of great reviews, and our Mobile Game Development with Unity remains a fabulous guide to building games with Unity. Check them out?

I’ll leave you with one of my favourite tweets of the event, which someone sent following our Learning Swift 3rd Edition book signing:I can’t wait for next year’s OSCON: July 15-18, again back in Portland!

August 07, 2018 11:08 AM

July 28, 2018



The conference that I help run, /dev/world/2018, is selling tickets!

We have amazing keynotes from the following people:

And we have workshops!

And sessions!

We’ll also have a dinner keynote, during our famous quiz, from Paul Fenwick! It’s going to be amazing! Grab a ticket?

July 28, 2018 07:22 AM

July 13, 2018


OSCON 2018

I’m super, super, super excited to be back at OSCON, my favourite conference, in Portland. This year you can find me at the following bits of OSCON:

You should also check out the following sessions, from my friends:

July 13, 2018 10:20 PM

May 15, 2018


/dev/world/2018 CFP extended!

By popular demand, we’ve extended the /dev/world/2018 call for presenters by one week, to 22 May 2018! Get your talks in! You will be amazing!

May 15, 2018 01:14 AM

April 20, 2018



The iOS, macOS, Swift, and general Apple development conference that I help run, /dev/world is looking for presenters! We’ve opened the CFP for our 11th event (we’ve been going for 11 years! That’s nuts!) and we’re very excited.

If you have a good idea for a talk, please send it our way! I might wear my space suit again.

April 20, 2018 01:23 AM

March 28, 2018


Latest Swift book: Learning Swift

Learning Swift (3rd edition), my latest book on Swift, covering Swift 4 and beyond, is available now. Check it out on Safari, or from your favourite retailer of books.

March 28, 2018 07:23 AM

March 22, 2018


Award! 😮

I’m utterly stunned to report that Night in the Woods, a game which we work on in a variety of capacities, has been awarded two incredibly prestigious IGF (Independent Game Festival) awards for 2018:

This is a truly stunning result for a really cool little game.

Oh, we’re also nominated for some BAFTA awards. No big deal.

March 22, 2018 07:39 AM

February 14, 2018


Tasmanian Leaders Program

From Thursday to Sunday I was lucky enough to be up on the relatively remote West Coast of Tasmania, in the Tasmanian-style resort town of Strahan, attending the first residential of the year-long Tasmanian Leaders Program (TLP).

TLP is a annual program (I’m part of TLP12, the twelfth intake for the program) that takes participants on residential retreats and linking sessions around Tasmania, exploring personal and professional development issues and activities. I’m told that it’s quite a competitive/exclusive/prestigious program, and I really wasn’t expecting to be offered a place.

I met 30 interesting and passionate Tasmanians, and had a great weekend doing all sorts of activities. I’ll post more about what we’re up to as the program progresses!

February 14, 2018 01:11 AM

January 16, 2018


Blockchain-to-Ponzi Safari Extension

I have made a Safari (macOS) extension that helpfully replaces some words in webpages. Download it here: ponzi scheme-to-ponzi-scheme v1.safariextz.

Please enjoy. Source release available on GitHub. Based on classic “Cloud to Butt” technology.

I take no responsibility for anything that may happen to your system from using this. It doesn’t phone home (other than whatever Apple might do with signed Safari extensions), and doesn’t do anything but some JS find-and-replace.

January 16, 2018 04:37 AM

January 09, 2018


Learn Unity game development

We’re excited to be teaching Unity game development live online next week, through O’Reilly Media’s Safari platform! It’s free for Safari members. Learn to build video games with one of the most popular engines around. January 17 and 18, 6PM to 9PM, AEDT.
We’re also running the same workshop again, at the end of February, if that date suits you better! Check it out.

January 09, 2018 12:38 AM

June 22, 2017


Hire me!

tl;dr: I’ve recently moved to the San Francisco Bay Area, received my US Work Authorization, so now I’m looking for somewhere  to work. I have a résumé and an e-mail address!

I’ve worked a lot in Free and Open Source Software communities over the last five years, both in Australia and overseas. While much of my focus has been on the Python community, I’ve also worked more broadly in the Open Source world. I’ve been doing this community work entirely as a volunteer, most of the time working in full-time software engineering jobs which haven’t related to my work in the Open Source world.

It’s pretty clear that I want to move into a job where I can use the skills I’ve been volunteering for the last few years, and put them to good use both for my company, and for the communities I serve.

What I’m interested in doing fits best into a developer advocacy or community management sort of role. Working full-time on helping people in tech be better at what they do would be just wonderful. That said, my background is in code, and working in software engineering with a like-minded company would also be pretty exciting (better still if I get to write a lot of Python).

Why would I be good at this? I’ve been working on building and interacting with communities of developers, especially in the Free and Open Source Software world, for the last five years.

You can find a complete list of what I’ve done in my résumé, but here’s a selection of what I think’s notable:

So, if you know of anything going at the moment, I’d love to hear about it. I’m reachable by e-mail ( but you can also find me on Twitter (@chrisjrn), or if you really need to, LinkedIn.

June 22, 2017 07:42 PM

February 15, 2017


Two Weeks’ Notice

Last week, a rather heavy document envelope showed up in the mail.

Inside I found a heavy buff-coloured envelope, along with my passport — now containing a sticker featuring an impressive collection of words, numbers, and imagery of landmarks from the United States of America. I’m reliably informed that sticker is the valid US visa that I’ve spent the last few months applying for.

Having that visa issued has unblocked a fairly important step in my path to moving in with Josh (as well as eventually getting married, but that’s another story). I’m very very excited about making the move, though very sad to be leaving the city I’ve grown up in and come to love, for the time being.

Unrelatedly, I happened to have a trip planned to Montréal to attend ConFoo in March. Since I’ll already be in the area, I’m using that trip as my opportunity to move.

My last day in Hobart will be Thursday 2 March. Following that, I’ll be spending a day in Abu Dhabi (yes, there is a good reason for this), followed by a week in Montréal for ConFoo.

After that, I’ll be moving in with Josh in Petaluma, California on Saturday 11 March.

But until then, I definitely want to enjoy what remaining time I have in Hobart, and catch up with many many people.

Over the next two weeks I’ll be:

If you want to find some time to catch up over the next couple of weeks, before I disappear for quite some time, do let me know.

February 15, 2017 08:33 PM

January 01, 2017


My 2016 Highlights

2016 was, undeniably, a length of time containing 366 days and a leap second.

For me, there were a bunch of highlights that it would be amiss to let pass without recording on this blog, so here goes:

So those are some of the highlights of my year. It’s been entirely not bad, in the grand scheme of things. Hooray!

January 01, 2017 07:52 AM

July 06, 2016

Chris 2017 wants your talks!


You might have noticed earlier this week that 2017, which is happening in Hobart, Tasmania (and indeed, which I’m running!) has opened its call for proposals.

Hobart’s a wonderful place to visit in January – within a couple of hours drive, there’s wonderful undisturbed wilderness to go bushwalking in, historic sites from Tasmania’s colonial past, and countless wineries, distilleries, and other producers. Not to mention, the MONA Festival of Music and Arts will probably be taking place around the time of the conference. Coupled with temperate weather, and longer daylight hours than anywhere else in Australia, so there’s plenty of time to make the most of your visit. is – despite the name – one of the world’s best generalist Free and Open Source Software conferences. It’s been running annually since 1999, and this year, we’re inviting people to talk abut the Future of Open Source.

That’s a really big topic area, so here’s how our CFP announcement breaks it down:

THE FUTURE OF YOUR PROJECT is well-known for deeply technical talks, and lca2017 will be no exception. Our attendees want to be the first to know about new and upcoming developments in the tools they already use every day, and they want to know about new open source technology that they’ll be using daily in two years time.

Many of the techniques that have made Open Source so successful in the software and hardware world are now being applied to fields as disparate as science, data, government, and the law. We want to know how Open Thinking will help to shape your field in the future, and more importantly, we want to know how the rest of the world can help shape the future of Open Source.

It’s easy to think that Open Source has won, but for every success we achieve, a new challenge pops up. Are we missing opportunities in desktop and mobile computing? Why is the world suddenly running away from open and federated communications? Why don’t the new generation of developers care about licensing? Let’s talk about how Software Freedom and Open Source can better meet the needs of our users and developers for years to come.

It’s hard for us to predict the future, but we know that you should be a part of it. If you think you have something to say about Free and Open Source Software, then we want to hear from you, even if it doesn’t fit any of the categories above.

My friend, and former director, Donna Benjamin blogged about the CFP on medium and tweeted the following yesterday:

At @linuxconfau in Hobart, I’d like to hear how people are USING free & open source software, and what they do to help tend the commons.

Our CFP closes on Friday 5 August – and we’re not planning on extending that deadline – so put your thinking caps on. If you have an idea for the conference, feel free to e-mail me for advice, or you can always ask for help on IRC – we’re in on freenode – or you can find us on Facebook or Twitter.

What does the future of Open Source look like? Tell us by submitting a talk, tutorial, or miniconf proposal now! We can’t wait to hear what you have to say.

July 06, 2016 01:21 AM

May 12, 2016


The big bike trip – Day 18

Once again we are on the run, today was a brilliant ride up the coast. Nice speed limit and winding roads with good (dry) weather. After picking up some food in a local town we pulled up short of our desired campsite due to running out of daylight. This was the first time we have […]

May 12, 2016 11:12 PM

The big bike trip – Day 17

After been kicked off the boat at what the heck time is this o’clock we sat down at a cafe to fill our stomachs before venturing into the heart of Melbourne for camping supplies. Got what we were after and promptly high taled it out of Melbourne central before anything could halm us. For most […]

May 12, 2016 10:52 PM

The big bike trip – Day 16

Today we left the warmth of Longford and headed out to Beaconsfield. Here we checked out the mining museum, there are plenty to see if your into history. The museum is filled with history of the mining site but also has lots of interactive displays with industrial equipment and other information about life in the […]

May 12, 2016 10:32 PM

The big bike trip – Day 15

Today we packed up our gear from the rocky hard but very flat campground that the parks allowed us to camp on. I really wanted to go for a walk up to the lookout over wineglass bay, so we did! We wanted to get closer to Devonport but not stay in Launceston. After searching for […]

May 12, 2016 01:21 AM

May 09, 2016


The big bike trip – Day 14

Greeted the morning and setup my GoPro for a time lapse of the sunrise over the Bay, here are some teaser photos I took from my phone until I proccess the images (no computer with me). After packing up camp we headed over to freycinet with the intent on camping the night here. Camping in […]

May 09, 2016 11:09 PM

April 26, 2016


Introducing Registrasion!

Time for me to fill you all in on some work I’ve been doing in preparation for 2017. I’ve been looking into how we can better run the conference website, and reduce the workload of our volunteers into the leadup to the conference. has, for the last 10 conferences, used a home-grown conference management system called Zookeepr. I got administration experience in Zookeepr after being involved in running PyCon Australia for a couple of years, and continued to help manage registrations for the years following. While Zookeepr is a venerable piece of software, my 4 years of experience with it has helped me become familiar with a bunch of its shortcomings. Most of these shortcomings are in the area of registration handling.

A problem with conference management software is that the people who come to develop on it are often highly transient — they’re conference organisers. They show up, they make their modifications, and then they get as far away from developing it as possible. Zookeepr’s been affected by this, and it’s meant that difficulties with workarounds are usually overlooked when fixing things.

So I decided to look elsewhere.

Back in 2012, the Python Software Foundation funded a conference management suite called Symposion.

Symposion solves a bunch of problems that Zookeepr solves, and more importantly, it doesn’t suffer from the lack of continuous contributions that Zookeepr has: It’s an actively-maintained app, built on Django, and it has a community of developers supporting it in the form of the Pinax project. In the Python world, it’s used for a very large number of conferences, from PyCon US (a big conference, getting some 1000 talk submissions yearly), down to local regional conferences like PyOhio. It’s well known, and improvements to the system aren’t contingent on conference organisers maintaining interest in the system after they stop running conferences.

Unfortunately, for various reasons, Symposion doesn’t handle conference registration.

So after OSDC2015 in Hobart successfully ran their conference website with Symposion, I decided to plug the gap. In January this year, I jotted down all of the things that I thought was good about Zookeepr’s registration system, and thought about how I could go about objectively improving upon it.

I threw together a data model, and wrote a test suite, and liked what I saw. I asked the Python Software Foundation for a grant to let me do some concerted work on the project for a month or so, and they accepted.

The result is Registrasion (that’s Registration for Symposion (sorry)). I’ve just put out a 0.1 release, which I believe is suitable for running a conference if you’re happy to pull data out of the system with SQL queries, and take payments with bank transfers.

Registrasion was designed with a few key goals in mind, all of which came from observing how Zookeepr struggled around some frequent edge cases that, incidentally, come up late in the process of running a conference. Those late-occurring edge cases are invariably the ones that don’t get fixed, because volunteer conference staff all need to go and run their conference.

In particular, I focused on:

Many of these goals solidified after talking to past conference organisers, who’d all used Zookeepr.

I’m quite proud of a few things in Registrasion. The first is that Registrasion makes it really easy for attendees to add extra things to their registration as they decide they need to. We also take care of automatically giving out freebies that attendees forgot to select during initial registration. In PyCon AU’s case, that’s a lot of manual work we can avert.

Another is a really flexible way in managing what parts of the inventory are available to our users, and at what time. We can show and hide items based on voucher codes, or based on whether they have other products selected. This averts a whole pile of manual work that a past reported, and I’m glad that our year won’t have to

Finally, I’ve made sure that Registrasion has a lot of documentation. It was a key goal to make sure that new conference organisers can understand vaguely how the system fits together. Python’s tools, and Read The Docs, has made this very very easy.

There’s a pile more work to be done, but there’s also plenty of time before lca2017 opens its registration (in October, probably?). But so far, it’s been super-fun to dive back into Django development, given it’s something I haven’t played with in a few years, and to solve a problem that I’ve been dwelling on for a couple of years now.

Hopefully, in Registrasion, we’ve got a piece of software that can serve the community well, will find use outside of LCA, but will still serve LCA’s needs well for years to come.

If you’re interested, please come along and contribute! I’d love to have you on board!

April 26, 2016 11:41 PM

March 01, 2016


Python in the Caribbean? More of this!

I don’t often make a point of blogging about the conferences I end up at, but sometimes there are exceptions to be made.

A couple of weekends ago, a happy set of coincidences meant that I was able to attend the first PyCaribbean, in Santo Domingo, capital city of the Dominican Republic. I was lucky enough to give a couple of talks there, too.

This was a superbly well-organised conference. Leonardo and Vivian were truly excellent hosts, and it showed that they were passionate about welcoming the world to their city. They made sure breakfast and lunch at the venue were well catered. We weren’t left wanting in the evenings either, thanks to organised outings to some great local bars and restaurants over each of the evenings.

Better still, the organisers were properly attentive to issues that came up: when the westerners (including me) went up to Leo asking where the coffee was at breakfast (“we don’t drink much of that here”), the situation was resolved within hours. This attitude of resolving mismatches in the expectations of locals vs visitors was truly exceptional, and regional conference organisers can learn a lot from it.

The programme was, in my opinion, better than by rights any first-run conference should be. Most of the speakers were from countries further afield than the Caribbean (though I don’t believe anyone travelled further than me), and the keynotes were all of a standard that I’d expect from much more established conferences. Given that the audience was mostly from the DR – or Central America, at a stretch – the organisers showed that they truly understood the importance of bringing the world’s Python community to their local community. This is a value that it took us at PyCon Australia several years to grok, and PyCaribbean was doing it during their first year.

A wonderful side-effect of this focus on quality is, the programme was also of a standard high enough that someone could visit from nearby parts of the US and still enjoy a programme of a standard matching some of the best US regional Python conferences.

A bit about the city and venue: Even though the DR has a reputation as a touristy island, Santo Domingo is by no means a tourist town. It’s a working city in a developing nation: the harbour laps up very close to the waterfront roads (no beaches here), the traffic patterns help make crossing the road an extreme sport (skilled jaywalking ftw), and toilet paper and soap at the venue was mostly a BYO affair (sigh). Through learning and planning ahead, most of this culture shock subsided beyond my first day at the event, but it’s very clear that PyCaribbean was no beachside junket.

In Santo Domingo, the language barrier was a lot more confronting than I’d expected, too. Whilst I lucked out on getting a cabbie at the airport who could speak a tiny bit of English, and a receptionist with fluent English at the hotel, that was about the extent of being able to communicate. Especially funny was showing up at the venue, and not being allowed in, until I realised that the problem was not being allowed to wear shorts inside government buildings (it took a while to realise that was what the pointing at my legs meant).

You need at least some Spanish to function in Santo Domingo, and whilst I wasn’t the only speaker who was caught out by this, I’m still extremely grateful for the organisers for helping bridge the language barrier when we were all out and about during the evening events. This made the conference all the more enjoyable.

Will I be back for another PyCaribbean? Absolutely. This was one of the best regional Python conferences I’ve ever been to. The organisers had a solid vision for the event, far earlier than most conferences I’ve been to; the local community was grateful, eager to learn, and were rewarded by talks of a very high standard for a regional conferences; finally, everyone who flew into Santo Domingo got what felt like a truly authentic introduction to Dominican Culture, thanks to the solid efforts of the organisers.

Should you go to the next PyCaribbean? Yes. Should your company sponsor it? Yes. It’s a truly legitimate Python conference that in a couple of years time will be amongst the best in the world.

In PyCaribbean, the Python community’s gained a wonderful conference, and the Caribbean has gained a link with the global Python community, and one that it can be truly proud of at that. If you’re anywhere near the area, PyCaribbean is worthy of serious consideration.

March 01, 2016 07:50 PM

February 12, 2016


Talks from 2016

I spoke at 2016 in Geelong! Once during the main conference, and once during the conference close.

Welcoming Everyone

My main conference talk, Welcoming Everyone: Five Years of Outreach and Inclusion Programmes at PyCon Australia, a five-year retrospective of how we’ve done outreach and financial assistance at PyCon Australia. It’s important that we share knowledge about how we run programmes that increase the diversity of our communities, and PyCon AU’s example shows how to build and grow such a program.

lca2017 handover talk

During the conference close, I gave our handover talk for 2017, sharing what we think Hobart has to offer for the conference, and our vision for the conference. If you want to find out, in 6 minutes, what we’re planning on doing next year, this video is a good way to do just that.

February 12, 2016 10:26 AM

February 06, 2016

Chris 2017 is coming to Hobart

Yesterday at 2016 in Geelong, I had the privilege of being able to introduce our plans for 2017, which my team and I are bringing to Hobart next year. We’ll be sharing more with you over the coming weeks and months, but until then, here’s some stuff you might like to know:

The Dates

16–20 January 2017.

The Venue

We’re hosting at the Wrest Point Convention Centre. I was involved in the organisation of PyCon Australia 2012 and 2013, which used Wrest Point, and I’m very confident that they deeply understand the needs of our community. Working out of a Convention Centre will reduce the amount of work we need to do as a team to organise the main part of the conference, and will let us focus on delivering an even better social programme for you.

We’ll have preferred rates at the adjoining hotels, which we’ll make available to attendees closer to the conference. We will also have the University of Tasmania apartments available, if you’d rather stay at somewhere more affordable. The apartments are modern, have great common spaces, and were super-popular back when lca2009 was in Hobart.

The Theme

Our theme for 2017 is The Future of Open Source. LCA has a long history as a place where people come to learn from people who actually build the world of Free and Open Source Software. We want to encourage presenters to share with us where we think their projects are heading over the coming years. These thoughts could be deeply technical: presenting emerging Open Source technology, or features of existing projects that are about to become part of every sysadmin’s toolbox.

Thinking about the future, though, also means thinking about where our community is going. Open Source has become massively successful in much of the world, but is this success making us become complacent in other areas? Are we working to meet the needs of end-users? How can we make sure we don’t completely miss the boat on Mobile platforms? LCA gets the best minds in Free Software to gather every year. Next year, we’ll be using that opportunity to help see where our world is heading.


So, that’s where our team has got so far. Hopefully you’re as excited to attend our conference as we are to put it on. We’ll be telling you more about it real soon now. In the meantime, why not visit and find out more about the city, or sign up to the announcements list, so that you can find out more about the conference as we announce it!

lca2017 handver.001

February 06, 2016 03:45 AM

January 08, 2016


Three weeks until LCA2016

In February, I’m presenting my first-ever solo presentation at, my favourite Free and Open Source Software Conference. This year, the conference is in Geelong (just out of Melbourne). I’ve been attending since 2008 in Melbourne, and am running the conference next year in Hobart.

I’m presenting Welcoming Everyone: Five Years of Outreach and Inclusion Programmes at PyCon Australia, a five-year retrospective on how we’ve handled running financial assistance and related programmes at PyCon Australia.

Doling out financial assistance money to people often looks like it should be an easy thing to do right, but targetting and assessing grants so that the right people are interested, want to attend, and receive assistance is quite a difficult task. This talk shares our successes, our mistakes, and what we’ve learned along the way.

Registration for 2016 is still open, so if you’re not yet planning on attending, there’s still time to get a ticket!

January 08, 2016 10:10 AM

January 06, 2016


I’m looking for a job!

tl;dr: I’m looking for somewhere new to work. I have a résumé and an e-mail address!

UPDATE: Right now, I’m based in the San Francisco Bay area, so I’ve re-posted this article and updated it to be current.

I haven’t scared you off yet? Great! Let’s try being a bit more specific.

I’ve worked a lot in Free and Open Source Software communities over the last five years, both in Australia and overseas. While much of my focus has been on the Python community, I’ve also worked more broadly in the Open Source world. I’ve been doing this community work entirely as a volunteer, most of the time working in full-time software engineering jobs which haven’t related to my work in the Open Source world.

I’ve spent the last few years swapping context between building and working with communities I love, and working in a field where these strong ties weren’t useful. This hasn’t been sustainable, so late last year I resigned my job to refresh myself, and considered what my future might look like.

It’s pretty clear that I want to move into a job where I can use the skills I’ve been volunteering for the last few years, and put them to good use both for my company, and for the communities I serve.

What I’m interested in doing fits best into a developer advocacy or community management sort of role. Working full-time on helping people in tech be better at what they do would be just wonderful. That said, my background is in code, and working in software engineering with a like-minded company would also be pretty exciting.

Why would I be good at this? I’ve been working on building and interacting with communities of developers, especially in the Free and Open Source Software world, for the last five years.

You can find a complete list of what I’ve done in my résumé, but here’s a selection of what I think’s notable:

So, if you know of anything going at the moment, I’d love to hear about it. I’m reachable by e-mail ( but you can also find me on Twitter (@chrisjrn), or if you really need to, LinkedIn.

January 06, 2016 11:03 PM

October 16, 2015


On burnout, resigning, and coming back to life

Fun story: I quit my job last week.

Somewhat ironically, the first time I’m really writing on this blog about what has been my day job for the last 3-ish years is writing about leaving it.

I don’t have too much to say about my reasons for leaving, but identifying that I’d been suffering severe burnout for a few months was the tipping point for it. Over the last few months my output in most everything I’ve done has visibly dropped – not just in work, or my volunteer efforts (for which numerous other people depend on me), but also in the things I enjoy doing in my spare time.

My last upload to Flickr, prior to this week, was in June last year. Beyond things necessary to get talks done, I haven’t written a line of code in my spare time all year. The last useful thing I wrote on this blog was in January 2014. Those things should have been pretty good indicators, but I missed them.

When deadlines started approaching, I put less pressing things off to the side. I thought at the time that I was merely re-prioritising things in favour or more pressing ones, rather than completely dropping the ball on them. I mean,  that’s basically how it’s always worked in the past.

More on that: I’ve long used conference trips as a way to pace myself through my work; timing trips more-or-less equally throughout the year, so that just as I was starting to get bored and demotivated, I’d have a chance to recover for a bit. This worked pretty well for a few years.

(Indeed, getting away as often as I have over the last few years has let me forge lasting friendships far across the world, and to get really useful things done locally, particularly for PyCon AU. I’m grateful to have had the opportunity to do that.)

So the pattern of feeling down just before a trip was there, just as it always was, for my trip to OSCON and PyCon AU in July this year.

The difference: for whatever reason, I came back feeling not much better than when I left I didn’t pick up the tasks I’d put aside, so they slipped even more.

Something had to give. I chose work. There’s not much more to say for the moment, other than that the time was more-or-less of my own choosing, and I left my job on amicable terms.

Now, what next?

First and foremost, I’m getting myself into a position where I’m mentally ready to run LCA2017 next year. This is probably the biggest undertaking of my life, and I need to be ready for it. I’m making steps to getting the organisation of that back on track.

I have roles with PyCon Australia again next year. Happily, my main role – raising sponsorship money – is now a team role, and I’ll be far less hands-on this time around.

If you’ve been depending on me to get something done over the last few months, and it hasn’t happened, I’m sorry. I’ve been terrible for letting things slip, even worse, I haven’t been open enough about my reasons for it. I really hope to improve this in the future. My backlog is slowly, but surely, getting cleared out.

Beyond that, I’m taking a couple of months off to sort myself out, and to make a concerted effort in figuring out what’s next.

I’m travelling for fun! Right now, I’m sitting somewhere in Far North Queensland, visiting my parents who are here for some reason (I’ve not seen Mum since February).

Over the next few weeks, I’ve got a few conferences I have committed to speaking at (OSDC in Hobart in two weeks’ time; PyCon Canada and Fossetcon in Florida in November), and so will be spending time travelling to attend those, but also taking a bunch of time off around them to relax.

One of the projects I’ve been putting aside for motivational reasons is a book I’m co-authoring on Android development, which I’m sure will show up (a bit more finished) in the future.

As for what I’ll be spending most of my time doing? I’m really not sure. What I’d like to be doing is the subject of another post. I’ll probably write it next week. If you want to cold-call me with opportunities in the hope that they’re relevant, linkedin is as good a place as any for now (lol), but I’m also around on twitter or e-mail.

October 16, 2015 06:20 AM

August 10, 2015


PyCon Australia 2015!

I was at PyCon Australia 2015 in Brisbane last week, and I presented a couple of talks!

This was the second year of PyCon Australia in Brisbane, it was pretty excellent. I’m looking forward to next year’s, which will be in Melbourne!

August 10, 2015 10:19 AM

April 23, 2015


Nines of nines

In the operations business we like to talk about nines of things, especially regarding service levels.


then generally,


This works for any whole number n: e.g. 5 nines is 1 - 10^{-5} = 1 - 0.00001 = 0.99999.

There's a problem with this simple generalisation, and that is, when people say "three and a half nines" the number they actually mean doesn't fit the pattern. "Three and a half nines" means 0.9995, but

We could resolve this difficulty by saying "3.3ish nines" when we mean 0.9995, or by meaning ~0.9996838 when we say "three and a half nines." But there's at least one function that fits the half-nines points as well!

Let's start with the function above: f(n) = 1 - 10^{-n}. For every odd integer, it just has to be lower by a small, correspondingly decreasing amount. We can do this by increasing the exponent of 10 by k = 0.5 + \log_{10}(0.5) \approx 0.19897.

One function for introducing a perturbation for halfodd integers is p(n) = \sin^2(\pi n). When n is a whole integer, p(n) = 0, and when n is half an odd integer, p(n) = 1.  Multiply this function by some constant and you're in business.

Thus, define a new function g(n) for all n:

 g(n) := 1 - 10^{-n + k p(n)} = 1 - 10^{-n + (0.5 + \log_{10}(0.5))\sin^2(\pi n)}

which, when plotted, looks like this:

Screen Shot 2015-04-23 at 5.21.45 PM

a negative exponential curve with a negative exponential wiggle.  And it has the desired property that at every integer and half-integer it has a value with the traditional number of nines and trailing five (or not).

April 23, 2015 07:43 AM

January 16, 2015


To the Future

That is all.

January 16, 2015 07:17 PM

November 23, 2014


French brioche toast

Makes 3 slices.


  1. Mix the eggs, milk, salt, sugar,  and vanilla together in a bowl until the sugar is dissolved.
  2. Put the frypan on lowish heat, melt a curl or two of butter.
  3. Dip a brioche slice into the egg mix. Don't worry about soaking it through but be careful that the slice doesn't fall apart. Brioche is weaker than regular bread.
  4. Fry until brown on both sides and puffed up.
  5. Repeat with more slices until the mixture is used up.

Enjoy on their own (they're pretty rich) or with fresh sliced strawberries, blueberries, or fried banana and lightly dusted with icing sugar or drizzled with maple syrup.

November 23, 2014 01:59 AM

November 13, 2014


Electric bike!

Last week, Bob's old mountain bike (which he gave me when he stopped riding, and which I didn't ride all that much in Hobart but made my regular commute after moving to Sydney) had died. I say "died," but in fairness, it's just a bit wonky and in need of repair.

Having fallen in lesbians with some of the loaner electric bikes at work (BH E-motion, very fun premium electric bikes), I figured it was time to get something similar. On the weekend I walked over to Sydney Electric Bikes and test-rode a few, before finally choosing the model I wanted. Having parted with a chunk of money via bank transfer on Monday, it arrived and was ready on Tuesday afternoon. I excitedly hurried  to the store to get my paws on it because it's awesome.

The model I got is the SmartMotion e20 folding electric bike. It's made by a New Zealand company (going to visit the country soon!) who devised the electric system they use on the postie bicycles there. This bike is fun. It has five levels of pedal assist, throttle, integrated lights, clicky-shifter derailleur sprockets, and a freaking USB port on the 12Ah battery for charging my other devices. It's all mine and I'm going to ride it all over the place—the electric system is apparently good for 40-60km on a charge.

The folding part is interesting. I've not owned a folding bike before. Benefit, the first: I can take it travelling far more easily. It also has 20-inch diameter wheels. These are ostensibly to take up less space, but mechanically the bike has better torque than standard size bikes, which is good for hill-climbing. (Sydney's no Hobart, but it's no Melbourne either.) The only downside seems to be the increased bumpiness, but I'd be a whinger to complain about that seriously.

Oh, and it's red. 😀


November 13, 2014 08:56 AM

June 02, 2014


Josh's Foolproof Guide to Picking Up Chicks

Want to learn how to pick up? Sick and tired of failing at a task that seems so easy to some people? Well, here's one weird tip, nay, one weird whole bleeding foolproof guide that will make you an instant chick pick-up master!

Step 1: First, obtain permission to lift the box of baby chickens from the farmer.

Ask the farmer

Step 2: Bend at the knees. Do not bend at the back. Bending at the back increases the risk of a back or spine injury.

Bend at the back

Step 3: Firmly grasp the box on both sides, or the handles if the box has handles. Ensure you have a good grip before lifting. Chicks are living creatures, and dropping a box of them will land you in hot water with the RSPCA and your mother.

Grasp both sides firmly

Step 4: Calmly lift! Ensure that the weight is being lifted by your leg muscles. If your back muscles are taking the strain, you're doing it wrong.


With this technique you can pick up several hundred chicks per hour, much greater than any famous "Pick-Up Artist" can currently claim!
For even greater efficiency at hauling chicks, consider installing a chick elevator.

June 02, 2014 12:03 PM

PAX Aus, and Make Stuff

Funny story. I only decided to go to the first ever PAX Australia, with full passes sold out ages ago, late on Friday morning. (Yeah, after it had started.)

Last week I was in Canberra for the Australian Mathematical Sciences Student Conference (AMSSC) at the ANU, and flew home on Thursday via Melbourne. That night it was a bit rainy and windy, enough so that the planes were a little delayed. On top of the exhaustion from the conference and from waiting in the crowded Virgin Lounge with loads of suits and then not having the flight called there so having to rush to the gate (why yes, I did specifically ask them to call the flight), we waited on the tarmac about half an hour before taking off for Hobart. What a drag. #problemsyouwanttohave

In retrospect I guess it would have been smart to decide to stay in Melbourne for PAX while I was waiting for the flight. But oh diddums. I was keen to get home and enjoy the company of my bed and my plush toys and my NBN.

So Friday rolls around. I put on a load of washing. I'd gotten into a good pattern of waking up around 6:30 am to give myself enough time to check Twitter before exiting the bed, and so I had my pyjamas on the clothes line by about 8:30. Time to head into Uni. While walking in I'm reminded via Twitter again that my friend Ducky still had a spare 3-day pass to PAX Aus going at cost price. Damn, I thought, I could have stayed in Melbourne for that. I know that's what I thought, because on a whim, I started checking the price of flights. Besides, I had nothing better to do, because the fire alarm in the Maths & Physics building had gone off and nobody was allowed in. After a brief intermission (Mum rang, you know how mothers have the knack of ringing at the right time? It was like that.) I called Ducky to secure the ticket. No answer.

By 10:20, as I was entering the office, a solid plan had formed (getting to Melbourne as quickly as possible without any guarantees of success, and damning all consequences). I was in the office chatting to Mel. Adapted from the actual conversation:

"Hey, I'm thinking of going to this awesome expo in Melbourne that my friends are at and it's happening right now and even though all the tickets sold out ages ago there's this vague possibility I can get one anyway, do you think it's worth hopping on the next plane?"
"Oh totally! Here let me check the price of flights for you."
"Sweet! Okay, booked the 12:30. Gotta zip!"

10:30: Hiking back home with gusto and vim. To grab clothes and dump all the knives out of my bag.
10:33: Should I get a taxi or see if I can swing the airport shuttle bus?
10:49: Nope, no time. Checking the Hobart airport website... $48 estimated parking? Sure, why not.
11:15: Let's hit the road.
11:16: Aughhh! I really need to fix that bearing in the front left wheel before the car explodes.
11:35: Every other airport lets you put the laptop through in the sleeve, but noooooooo, TSA approval just isn't good enough in Hobart.
12:20: Mother of balls, there's no available hotels in Melbourne less than $300 per night. Okay fuck it, let's just book the Hilton.
12:22: Close laptop. Board plane.

It was an exhilarating, expensive, and amazing trip. There were epic queues. There were epic cosplays (Iron Link?!). There were epic cocktails at 1806. There was the epically swank hotel room I stayed in (admittedly, this came at a premium). There were epic expo stalls—LoL should have just had their own entire expo hall; WoT and Nintendo each perhaps their own pavilion. There was epic schwag. There were random meetups with random Tasmanians. There were the epic moments Gabe and Tycho tried Vegemite for the first time ever, on stage, in front of most of the attendees. Finally there were the most epic games of Jenga I've ever had the pleasure to be near.

So anyway, Internet, because PAX is over and I'm once again home alone in my pyjamas and collared shirt, I'm sad.

Therefore, on to part two of this post.

Make stuff.

Do it. Just do it. Make. Things. And. Stuff.
This cannot go understated.
Don't just make stuff, do stuff too.
Doing makes you right. Not doing something means you are wrong.

(I'm speaking poetically here. Don't go and do destructive, violent, illegal, or stupid things. They don't count.)

What I realised moments before starting to write this blog post is that I get an honest-to-Googleness kick out of doing something creative—almost anything creative. Blogging, drawing, singing, playing music, exercising, thesis writing, programming, laughing like an evil genius.

Doing stuff is the way out of loneliness when your friends are far away, or some other excuse for not using the Internet or the telephone. (It is difficult interacting with people.)

June 02, 2014 12:03 PM

Dear Sorbent


Hi, Sorbent.

How are you?

This morning I was in my bathroom and couldn't help but read the advertising spiel on the back of the plastic wrapping on the rolls of toilet paper. For reference, here's what it says:

"Always soft, always strong.
What makes Sorbent so soft, yet still so strong?
It's a very clever combination of two different types
of paper. The top layer is air-dried for softness and
thickness, the bottom layer (no pun intended!) is
thick creped paper, for added strength. And Sorbent Long Roll
means 50% more sheets on every roll.
Which means you only need to change it half as often!"

Let's talk about the last two sentences there. If a Sorbent Long Roll has 50% more sheets on every roll, then you need to change it two-thirds as often, not half as often.

I know you are a toilet paper company, and not the Australian Bureau of Statistics. But I feel that this sort of dishonest marketing may have just been an honest mistake, so I'll explain it for you.

Let's suppose a regular roll has 100 sheets, and I use on average 5 sheets per day. This means you would expect me to replace the roll after 20 days (20 days = 100 sheets / 5 sheets per day).

If a Long Roll has 50% more, then it has 100 sheets + 50% of 100 sheets = 150 sheets total. Cool! But I'm still using 5 sheets per day. Therefore I will change the roll after 150 sheets / 5 sheets per day = 30 days.

In 60 days time, I will have used three regular rolls of 100 sheets, or two Long Rolls of 150 sheets. That means I'm replacing the Long Rolls two-thirds as often as the regular ones.

To replace the rolls half as often, each roll would need to be twice as long, i.e. have 100% more sheets, not 50% more sheets.

Note that you can swap out the size of a regular roll and the rate of use, and the maths still works out (as long as you're consistent)---a Long Roll, if it has 50% more sheets than a regular roll, will be replaced two-thirds as often.

Other than to have even bigger rolls, the only way I can see to get long rolls replaced half as often as regular rolls would be to have reusable toilet paper, and nobody wants that.

In reality, we don't use toilet sheets at a fixed rate, so your mileage may vary (no pun intended). But I would contend hypothetically that the availability of more toilet paper would encourage people to use it more quickly. This means in practice that Long Rolls get replaced even more often than two-thirds as often as regular rolls.

I realise that this highly advanced analysis using basic arithmetic may be confusing to you, but fortunately you should be able to confirm my working by asking the average third year primary school student. However, please note that to maintain accuracy, you may wish to ask them before the Abbott government brings in yet more national curriculum changes.



PS: The plus symbol + is a valid character in the email field, but your form rejected it. Please refer to internet RFC 822 (issued in 1982) as the relevant standard.

June 02, 2014 12:02 PM

The Paper Tiger

Those of you I have talked to recently will know I have been ditching nearly all of my paper.

I've been a terrible, terrible hoarder of loose paper over the years. Uni notes, bank statements, school reports, bills, receipts, meeting minutes, society reports, business cards, conference guides, concert programs, newspapers, medical reports, programming competition practice problem sets... you name it, if it was paper based and I was given a copy, there was a really good chance I had kept it and put it in a pile or binder folder somewhere. Eventually the pile was put in a box, and moved to my next place of residence, and a new pile came to life.

Why would I throw out paper, when I might just possibly maybe want to keep the information for future reference, and it's easier to put it in a pile than anything else? And some paper you have to keep, so it's not like it'd be fair to the rest of the paper if I only kept that, right? Paper is an Object, and Objects Have Souls. I can't just go around killing harmless, innocent paper! It's simply not done. Somebody printed the paper and the paper and ink cost money. The paper was produced from trees, lovingly grown just for your perverse paper pleasures. Paper chemists treated the paper with their magic bleach to make it nice and bright. You can even write notes on the paper after it's been printed, adding to its value. You can just give paper to another person, exactly as it exists, and it's practically guaranteed to be compatible with them.

And let's not forget, it's convenient to have a lot of paper around in case you need to save the world with your 紙使う人 super-abilities.

Plus I'd like to see you fold an iPad into a "paper" crane.

So what changed?

The changes have been gradual, but like a tipping point or titration or emergent criticality, it was only in the last month I got jack of the piles of paper I was storing.

The story probably started with my mother's mother.

Joyce Purtscher is a family historian. She was the first in our family (those of us in Tasmania, anyway) to get a personal computer and a laptop (well, it was more of a reinforced-steel-bench-top, but still). She has produced a number of indexes. An index, for those unfamiliar, is a summary of information designed to get you to the original information quicker. It's not just books and database tables that are useful with indexes, however. Wouldn't it be nice to have an index into all the copies of The Mercury, that tell you on what page the Calvin & Hobbes is on, what the other comics were, and perhaps the punchline? (Other people might have different ideas as to what the useful information is.) Joyce has produced indexes of things like the public records of Tasmanian orphans through the 19th century. The beautiful thing with these indexes is that for all the basic details of the record, you don't have to go to the source, because basic details are there in the index. Indexes help you get to the right paper faster, and frequently you don't care about the paper. And the good genealogical indexes all come on CD.

Hanging around my grandmother first taught me that there's a lot of paper, and a lot of information on it, in the world. Much of it seemed to be located within the State Archives and the State Library. Archives and libraries, of course, take great care of their historic documents, ensuring that oxygen, moisture, arsonists, and sunlight are kept away, to prevent degradation. Systems exist for safely storing truly enormous quantities of paper. I didn't connect the paper in the Archives with the paper at home. Paper at home was stuff that was useful to us, the paper in the archives had no daily relevance. And sure, paper is fragile. Lazily dumping it in a box under the house is going to ruin it eventually. But modern paper is lighter, and treated with chemicals so that it doesn't rot or get eaten by mould in the same way as Ye Olde Paper.

But I noticed one other thing. The 500 megabyte hard drive out of her 486, when I had the joy of migrating her to a newer computer, hadn't lost a single bit of information. In fact, through the years, the one piece of computer I've had fail on me the least, in spite of all the moving parts, has been the humble hard drive.

Fast forward out of my childhood.

In the very early 2000s, my family bought a flatbed scanner. It was a bulky USB device with a slightly dodgy driver that had to do every scan twice. Scans would come out on an angle, a bit pixelated, and with crappy colouring. On our clunky old beige computer with a "whopping" 4GB hard drive, scans took a long time to perform and a significant amount of space to store in any decent quality—and there were better things to put on the computer, like games and music. We used the scanner for emailing photos and that was about it.

In 2005, I got my Gmail invite. Email available anywhere I had an internet connection! Okay, that part wasn't so relatively awesome as existing email solutions. But the space! Who was ever going to fill a whole gigabyte with their email? Even with huge attachments? Never delete email again!

Never delete paper either...because if email was good enough to keep forever, so was paper. 2005 was the year my paper storage really took off, and not just because of Gmail. I had just got a credit card, with monthly paper statements. I had a job for a few months, which had weekly payslips. There were things like bills and receipts. I'd have to file a tax return, and I'd never know when the bank was going to cock up and I'd need a statement. But there was still relatively little paper, so there was no problem in my mind hauling it around. I'd even got my core muscles in carting school notes for so many years, a little extra paper was not a problem.

The problem with core muscles is, though, they need exercise. In 2007 I got my current job, and in 2008 and 2009 the amount of time I spent sitting down had grown even more due to the time required for Uni. So instead of taking a lined pad with me to lectures, at some point in 2008 I started taking electronic notes, right into LaTeX on my MacBook. This seriously paid off, because

There are other small benefits that come with electronic notes, such as searchability. The notes were mine and I had the source file so annotating was hardly an issue. Okay, so drawing diagrams quickly into a computer can be a pain, and a problem I had no decent solution for for a while. The paper wasn't going anywhere just yet.

A few years ago I went and purchased my first ever 1 terabyte hard disk. A whole terabyte! What the dickens can anybody do with that quantity of space!? Well, it's not hard to imagine what, when you are a terrible, terrible data hoarder such as myself. Movies, music, games, disc images, audio libraries, virtual machines. Never delete data again!

And then Apple released Mac OS X 10.5 Leopard, which came with Time Machine. Backups became, not just easy, sexy. It wasn't a question of the possibility of backing everything up. All of a sudden I desired to back everything up. Of course I had a system of CD burning backups going on before that (oh, did I mention I'm getting rid of optical media too?) but to back up everything? Differentially? To commodity, portable, external hard drives? In a matter of minutes per day? Never fear data loss again!

When Apple released Mac OS X 10.7 Lion, I heard about one really cool new feature that still doesn't seem to have been picked up widely. As you probably know, Preview is quite a capable PDF form completion and annotation tool. I was using it for those pesky AUC subsidy claim forms. But in order to properly sign a PDF with a signature, you had to print it, sign it, and then scan it back in. Preview app now includes signature annotations. You sign some paper, hold the paper up to the computer camera, and it captures your signature, which you can then insert as an annotation onto any PDF. Super handy.

In March this year, early one morning I queued at the Apple Store in Sydney. There was only one product being launched, their next "resolutionary" product: the new iPad. The one with the "retina" display, which is admittedly an utter joy to read, compared to every previous computer screen I've had the honour of using. Never print something merely in order to read it, ever again!

Just to be clear though: I still prefer reading paper books over eBooks. I haven't engaged in a War on Books yet. Books are lovely.

Finally, I got home from Sydney last month and that's when the final straw broke the camel into tiny giblets. I took one look at the horrid mess of the room all my stuff was in and thought something had to be done. I started a War on Stuff, and thought critically about a lot of my possessions. I realised that the majority of the loose paper I had stored was for archival purposes: entirely for posterity, keeping people honest, or future tax assessments. Exceedingly little of the paper that was filling up so much of my personal environment had daily relevance.

So here's what I thought next. What would Steve do?

So I bought this. It's the Fujitsu ScanSnap S1500. It can scan A4 documents at 20 pages per minute, both sides at 300 dpi. It folds away quite compactly. The driver doesn't suck.

I have now scanned thousands of pieces of paper. I have shredded hundreds, and the shreddings are now in the compost. The other paper has gone back to recycling. My Year 7 school reports are but a few clicks away.

June 02, 2014 12:02 PM


  1. How to Do What You Love, by Paul Graham. Simply full of gold. Favourite quote:

    Prestige is especially dangerous to the ambitious. If you want to make ambitious people waste their time on errands, the way to do it is to bait the hook with prestige. That's the recipe for getting people to give talks, write forewords, serve on committees, be department heads, and so on. It might be a good rule simply to avoid any prestigious task. If it didn't suck, they wouldn't have had to make it prestigious.

  2. Narcissists Suck, the blog. The collected observations of somebody who has dealt extensively with a narcissist. Choice quotes:

    It is terribly annoying to me when someone pretends to know my mind better than I do.

    You want to shake up the world of the narcissist? Live outside his control; live outside his false reality.

    Emotionally healthy people are realists. They are people who want to see reality, accept reality and live in reality.

  3. Tricky People, a book by Australian psychologist Andrew Fuller. In it he describes many varieties of tricky behaviour (the Controllers, the Bullies and Tyrants, the Poor Communicators, etc), the impacts of these behaviours on you, and ways to deal. Contains loads of great advice, includes a chapter for if the tricky person is yourself, and is even worth reading cover-to-cover.

    Back-stabbers and White-anters live by several rules:

    • Rule 1: look good.
    • Rule 2: avoid looking bad.
    • Rule 3: if you can look good and have others look bad, even better.
  4. How To Stay Sane, from the School of Life series, by Philippa Perry. Short, and describes four key ideas. It's received some interesting and critical reviews, but that was after I bought it. One thing though, this is the book that convinced me to start writing a private diary.
  5. Day One, the app I'm using as my diary. It has iOS and Mac versions that sync with one another. Much better than a plain text file, you can attach images, links, geotag, hashtags, do all the usual text formatting (with Markdown syntax :) ). It's really well made and that's probably why it got awarded App Store Best of 2012.

June 02, 2014 12:01 PM

Number shuffler addition

My current diversion of late has been Threes. You may have heard of the rip-off that spawned a thousand similar rip-offs, 2048. I will call this kind of game "number shufflers" even though the tiles don't have to be numbers.

In both the original, and superior, game Threes, and the many derivations, you have a board of fixed size and a number of tiles. A tile is added after each move, and the game ends when no space remains, therefore it is in the player's interest to eliminate tiles. The only way to do so is to combine "twins"---tiles with the same number/type. (Threes has the wrinkle that there are special "1" and "2" tiles that can only be combined as 1+2.) Combining two twins gives you a tile of the next type. With numbers, the resulting tile usuallly has the value of the sum of the previous two tiles. Thus as you create higher and higher tiles, you have fewer chances to combine them, and the tile values increase exponentially.

I got thinking about the large numbers possible in these games. It is known that presenting a gamer with huge numbers leads to reduced ability to compare them quickly. Who is going to sit down and compare all the digits for their three gajillion fantillion power level character against some other bazillionty level character, especially in the middle of an action-fight sequence? This is a problem avoided with Threes (et al) simply because the higher tiles are much rarer, and it is a puzzle game where you can take as much time as you like.

You could represent the tiles with simpler numbers---1, 2, 3, 4, etc, instead of the exponentially increasing 3, 6, 12, 24, and so on. But then the "addition" breaks. "Adding" two tiles of the same kind just gives you the next tile, not the sum of the two. For example, instead of 1+1=2, 2+2=4, 4+4=8, one has 1\oplus1 = 2, 2\oplus2 = 3, 3\oplus3 = 4. With a little thought it turns out it's very easy to implement \oplus with a kind of twisted addition defined as follows:

   a \oplus b := \log_2( 2^a + 2^b ) \quad\text{ for all } a, b.

For example,

  2 \oplus 2 = \log_2( 2^2 + 2^2 ) = \log_2(4+4) = \log_2 8 = 3.

It is easy to see that \oplus is commutative (swap inside the logarithm) and even associative:

  (a \oplus b) \oplus c = \log_2\left(2^{a\oplus b} + 2^c \right) = \log_2\left( 2^{\log_2(2^b + 2^c)} + 2^c \right) = \log_2(2^a + 2^b + 2^c)

(similarly for the other arrangement). Most pleasingly, however, regular addition distributes over \oplus:

  a + (b\oplus c) = a + \log_2(2^b + 2^c) = \log_2 2^a + \log_2(2^b + 2^c) = \log_2 2^a(2^b + 2^c) = \log_2 (2^{a+b} + 2^{a+c}) = (a+b)\oplus (a+c).

You get "fun" results if you add two different numbers, and it seems that there's no identity element unless you include -\infty and assert that 2^{-\infty} = 0 (alternatively, \log 0 = -\infty). Thus

  x \oplus (-\infty) = \log_2(2^x + 2^{-\infty}) = \log_2 (2^x + 0) = x.

Furthermore there are no inverse elements unless you escape the extended real line entirely. For example, \log_2(-1) = \frac{i\pi}{\ln 2}, and therefore

 0 \oplus \frac{i\pi}{\ln 2} = \log_2\left( 2^0 + e^{i\pi} \right) = \log_2(1 - 1) = -\infty.

I should be doing work.

June 02, 2014 12:00 PM

Drawing a pixel-art cube

Pixel art is fun, and isometric pixel art looks great when done properly. My friend Rex informs me that, unlike "real" isometric art which uses an angle of 30^\circ (\pi/6), pixel isometric art uses a ratio of two-pixels-along-per-pixel-up, which is a slightly lower angle. Rex then wanted to know how high (in pixels) he should draw the edge of a cube if he's already drawn it some number of pixels wide. Here is the answer.

→ Drawing a pixel-art cube

(tl;dr: Multiply by 0.8944.)

June 02, 2014 12:00 PM

Resignation letter

Resignation letter

June 02, 2014 12:00 PM

Ultrafilters and ultralimits

These are some notes on ultrafilters and ultralimits that are currently in the draft introduction of my thesis. Feel free to follow along.

Even in seemingly benign situations, ordinary sequential limits can fail to exist. One solution is the ultralimit. To define ultralimits, one needs ultrafilters, and hence filters.

Definition 1 A filter F on a set X is a collection of subsets of X satisfying the following properties:
(F1) \emptyset \notin F (this mostly serves to exclude the "improper" filter \mathcal{P}(X));
(F2) If A\in F then every superset B is also in F (it is upwards-closed);
(F3) If A and B are in F, then A\cap B\in F.

Note that a filter F cannot contain any pair of disjoint sets; by (F3) their intersection would be in F, but by (F1), this is a contradiction.

If a set A\notin F then every subset is also not in F. To see this, suppose some subset B\subseteq A is in F: by (F2), this implies that A\in F, contradicting A\notin F.

Definition 2 An ultrafilter U on X satisfies the further property that for any A\subseteq X, either A or X\backslash A is in U.

Since A and X\backslash A are disjoint, by the above, for any ultrafilter U on X, precisely one of them is in U. It is not possible to include more sets in an ultrafilter without it failing to be a filter, so there is no filter finer than an ultrafilter.

Lemma 1 There are two disjoint kinds of ultrafilters on a set X: the principal ultrafilters, containing some singleton set \{x\} where x\in X, and the non-principal or free ultrafilters, which contain no finite sets at all.
Proof If an ultrafilter U on X contains any finite set F, we may see that it necessarily contains a singleton set, and is therfore principal, as follows. Assume that \{x\}\notin U for all $x\in X$. In particular \{f\}\notin U for each f\in F. Thus X\backslash\{f\}\in U for all f\in F, and by property (F3) we thus have F\cap (X\backslash\{f\}) = F\backslash\{f\} \in U for all f\in F. Inductively each element of F can be removed, one at a time, until none remain, at which point it contradicts (F1). \square

While it is easy to exhibit a principal ultrafilter on many infinite sets, one must rely on some additional axiom to provide the existence of free ultrafilters. The Ultrafilter Lemma (UL) does this nearly directly: UL asserts that every filter is contained within an ultrafilter, and some filters (such as the Fréchet filter described below) can only be contained within a free ultrafilter. The Ultrafilter Lemma is also a consequence of the Axiom of Choice. However, the Axiom of Choice does not follow from the Ultrafilter Lemma, so UL is a weakening of AC. One useful consequence of the Ultrafilter Lemma is the Hahn-Banach theorem.

Since free ultrafilters do not contain any finite sets, by definition they must contain all cofinite sets. The filter consisting of cofinite sets (this is the Fréchet filter) is therefore contained in any free ultrafilter; conversely, any ultrafilter containing the Fréchet filter is a free ultrafilter. The Fréchet filter itself is not usually an ultrafilter: consider two infinite sets which are complements of each other, and so neither is cofinite.

Definition 3 Given any sequence of real or complex numbers \{x_n\}_{n=0}^\infty and a free ultrafilter U over \mathbb{N}, if for some value x and each \epsilon>0, we have

 \{n: |x_n - x| \le\epsilon\}\in U,

then x is the (unique) ultralimit of the sequence with respect to U, written

 x = \lim_U x_n \quad\text{or}\quad x = U\text{-}\lim x_n.

This generalises to sequences in any metric space (X,d) by

 x = \lim_U x_n \quad\iff\quad \{n: d(x_n, x) \le\epsilon\}\in U.

Note that if we try to do the same thing with a principal ultrafilter, then we allow the ultralimit to take the value of the sequence at a single point. For the ultralimit and ordinary limits to coincide, one must require a free ultrafilter.

Some authors sometimes require, for ultralimits, that the ultrafilter U over \mathbb{N} used, instead of explicitly being required to be "free", is required to contain every interval [n,\infty) for each n\in\mathbb{N}.

Lemma 2 An ultrafilter U on \mathbb{N} is free if, and only if, it contains every interval of the form [n,\infty) for each n\in\mathbb{N}.

Proof A free ultrafilter contains all cofinite sets, including as examples the intervals of the form [n,\infty).
To show the converse, suppose a ultrafilter U contains every interval [n,\infty) for n\in\mathbb{N}, and assume that U is not free (i.e. principal). U, being principal, contains a singleton set, \{k\} say, and therefore does not contain \mathbb{N}\backslash\{k\} = [1,k) \cup [k+1, \infty). Since subsets of sets not in a filter are also not in the filter, this implies [k+1,\infty) is not in U. This contradicts the requirement that every [n,\infty) \in U. \square

Ultralimits provide a resolution to the problem of defining a unique limit for a sequence that fails to converge due to having multiple limit points, effectively by choosing one of the limit points. Intuitively, a free ultrafilter will contain a set of indexes corresponding to one of the convergent subsequences, but none of the others, as they will necessarily be indexed by sets in the complement of the index set of the chosen subsequence. If a sequence is bounded, then by the Bolzano-Weierstrass theorem there is at least one convergent subsequence, so an ultralimit is always defined on bounded sequences.

Sources: mostly Wikipedia.

June 02, 2014 12:00 PM

Letter to the Editor

Last night I had the distinct pleasure of trying to fix my grandmother’s broadband internet connection. Her previous internet services provider helpfully informed her that they were no longer offering services in the “rural” 7000 postcode area, and therefore she has switched to a different ISP. After great difficulty securing a new port at the overcrowded telephone exchange, she was cut over to the new service yesterday. Something went awry and I spent several hours between the computer and the call centre support trying to fix it. Due to further technical difficulties the new service still doesn’t work.

If only there were some kind of optic-fibre replacement for the degraded nightmare copper phone network that was never designed for this mess, that she could use instead.

His royal highness King Tony decrees otherwise.

Josh Deprez
South Hobart

June 02, 2014 11:59 AM

February 04, 2014


We couldn’t resist buying this, son played the song endlessly..


February 04, 2014 06:24 AM

New Lego Acquisitions



February 04, 2014 06:15 AM

January 29, 2014




January 29, 2014 09:45 PM

January 27, 2014


Hottest 100 Spoiling results

Well, the Hottest 100 happened yesterday, so now it’s time to evaluate how my spoilers list went:

Why wasn’t it more accurate, or as successful as last year?

I’ve got every confidence that this method will be viable for next year, especially since the results were a much less spectacular spoiler than 2012’s Warmest 100. Let’s see if we can make a better model for next year.

January 27, 2014 03:43 AM

January 24, 2014


Booting out the Warmest 100

(Beware – this article includes a link to some probable spoilers for tomorrow’s Hottest 100 count. You can read this article without reading those spoilers.)

You’re probably familiar with Triple J’s Hottest 100. It’s the world’s largest write-in music poll. Last year, Triple J made an easy, shareable link for people to post their votes out on Twitter and Facebook. Alas, these links were easy scraped from the web, and the Warmest 100 (link to 2012 count) was born. The top 10 (but not its order) was revealed, and the top three was guessed perfectly.

This year, voters weren’t given a shareable link, but a few thousand people took photos of their confirmation e-mails and posted them to Instagram. With a tiny bit of OCR work, the Warmest 100 guys posted their predictions for this year. They found about half the number of votes that they did last year through the scraping method, which is no mean feat, given the lack of indexing.

So the question is — how useful are these votes in predicting the Hottest 100? What songs can we be sure will be in the Hottest 100? How certain is that top 10?

Both years, Justin Warren independently replicated their countdown (spoilers), and has written up his methodology for collecting the votes this year. I asked him for his data to do some analysis, happily, he obliged.

He’s since updated his method, and his counts, and written those up, too (spoilers).

Update: he’s updated his method *again* based on some feedback I offered, and has also written that up (spoilers). This is the data my final visualisation runs off.

So, what have I done with the data?

Bootstrap Analysis

When you have a sample — a small number of votes — from the entire count, you can’t really be certain where each song will actually appear in the count.

In this case, Justin’s data collected 17,000 votes from an estimated 1.5 million votes. That’s a sample of 0.1% of the total estimated vote. It’s a sample, but we have no idea how that compares to the actual count.

If we think that the votes that we have is a representative sample of all of the votes, then what we’d like to know is what would happen if we scale this sample up to the entire count. Where will songs end up if there’s a slight inaccuracy in our sample?

The good news is that computers give us a way to figure that out!

Bootstrap analysis (due to Effron) is a statistical technique that looks at a sample of votes from the whole set of votes, and randomly generates a new set of votes, with about as many votes as the original sample. The trick is that you weight each song by the amount of votes it received in the sample. This means that songs are picked in roughly the same proportion as they appear in the sample. The random sampling based on this weighted data adds noise.

You can think of this sample as a “noisy” version of the original sample. That is, it will be a version of the original sample, but with slight variation.

If you repeat this sampling process several thousand times, and rank the songs each time, you can get a feel for where each song could appear in the rankings.

How do you do that? Well, you can look at all of the rankings a given song gets for each randomised set. Sort this list, and pick the middle 98% of them. Based on that middle 98% of rankings, you can be 98% certain that the song will be at one of those positions. In statistics, this middle 98% is called the 98% confidence interval by bootstrap.

You can repeat this for different confidence levels, by picking a different amount of rankings around the middle.

I’ve used Google Spreadsheets to visualise these confidence intervals. The lightest blues are the 99% confidence intervals. The darkest blue intervals are the 70% confidence interval. The darkest single cell is the median — i.e. the middle of all of the rankings that we collected for that song in the bootstrap process.

The visualisation is up on Google Docs. (spoilers, etc).

I’ve run the same visualisation on Justin’s 2012 data, it’s less of a spoiler than the 2013 version if you care about that. It can inform the rest of the article for you.


First up, a bit on my methodology: Justin’s data didn’t separate votes into their original ballots. So, I had to pick songs individually. To improve accuracy, I selected songs in blocks of 10, where each song in the block of 10 is different — this vaguely resembles the actual voting process.

In my experiments, I ran the sampling and ranking process 10,000 times.

You’ll notice some interesting trends in this visualisation. The first one is that the higher the song is in the countdown, the narrower its blue interval is. Why is this so?

Well, as songs get more popular, the distance between each song in the number of votes received grows. In Justin’s sample of the votes, #100 and #73 were separated by 15 votes. So if one or two votes changed between #73 and #100, that ordering could change spectacularly. Given Justin’s sample is of 17,000 votes, 15 votes represents an 0.1% change in the vote.

So at those low rankings, a tiny change in votes can make for a massive difference in ranking.

At the other end of the count, #1 and #2 are separated by 16 votes. #3 and #4 are separated by 22 votes. #4 and #5 are separated by 51 votes. Down the bottom of the list, where 16 votes could move a song 33 places in our count, you’d need 16 votes to change just to swap positions 1 and 2.

What this means from a statistical perspective is that the closer to the top you are, the more work you need to do to change your position in the count.

You’ll also see this phenomenon in the right-hand side of the intervals. The interval of a given colour on the right-hand side of the interval will generally be longer than the same colour on the left. Once again, this is because lower ranks swap around more easily than higher ranks.

Update: Since writing this article, I ran one more test – how many of the songs in the top 100 of Justin’s raw  sample of votes will make it into the actual Hottest 100? Well, bootstrapping helps us here too. For each bootstrap trial, I take the top 100 songs, and see how many of those are in the raw top 100. I reckon, with 98% confidence, that we’ll get 91 songs in the actual Hottest 100. Thanks to David Quach for the suggestion.

In summary: the Warmest 100 approach is statistically a very good indicator of the top 4 songs. The top 4 is almost certainly correct (except that 1&2 and 3&4 might swap around between themselves). Everything up to #7 will probably be in the top 10.

The sampling approach is less accurate at the bottom, but I’m pretty confident everything in the top 70 will be in the actual top 100.

I’m also pretty confident that 91 of the songs in the raw top 100 will appear in the actual top 100.


I’ll be making some notes on how these confidence intervals got borne out in the actual count on Monday. I’m very interested to see how this analysis gives us a better idea of how accurate the Warmest 100 actually is.

January 24, 2014 11:07 PM

December 13, 2013


Talk: Making Mobile Web Services That Don’t Suck

The second of my DroidCon India talks introduces developers of mobile apps with the difficulties of designing for mobile networks. It also contains a series of design ideas that developers can take back to their back-end development team, so that the APIs that they produce for accessing their services are less difficult to use in a mobile context.

December 13, 2013 11:53 PM

Talk: Portable Logic/Native UI

My first talk from DroidCon India 2013 (November, Bangalore). It’s an exploration into the approach that we’ve taken at AsdeqDocs in producing a properly cross-platform mobile app. We take the approach of separating our core application logic into a C++ codebase, and apply platform-specific user interfaces over that codebase.

This talk covers the software engineering principles that make that work; as well as the benefits, difficulties, and insights that we’ve learned over a few years of doing this. It’s probably the favourite of my mobile dev talks.

December 13, 2013 11:46 PM

Announcing the LCA2014 Open Programming Miniconf

Very pleased to say that I’ll, once again, be running an Open Programming Miniconf at in January. This time around, the conference will be at the University of Western Australia in Perth.

I’m especially pleased, because after initially being rejected by the conference team, with limited time to assemble a line-up, I’ve put together what I think is the best Programming miniconf lineup in the five years I’ve been running it.

One of the goals of the Open Programming Miniconf is to be a forum for developers to share their craft: ideas for improving the way people code, and topics that are of benefit to people who develop using many open source programming languages. This year, for the first time, I think we’ve filled that remit.

This year’s talks cover everything from low-level mobile programming and driver development, to deployment of web applications, as well as talks about packaging, deployment, and development tools.

We also don’t have a single state-of-the-language talk. Everything’s about topics that can be transferred to any number of languages.

I’m excited! If you’re interested in the miniconf, check out our schedule and all of our abstracts at the conference wiki. See you in Perth!

December 13, 2013 09:32 AM

November 25, 2013


Where to, this time?

… Once again, I’ve completely failed to document my travels this year. I need to do better. Here’s my first attempt.

I’m off to Bangalore, India tomorrow to join in with DroidCon India 2013! I’m presenting two talks, and being a panelist on a panel:

I’ll post back here with slides and videos as they become available.

I’ll be in Bangalore until late on Saturday, then coming home via Singapore for a few days. Should be fun!

November 25, 2013 11:42 AM