2024

Wow, I’m a published author! I submitted a micro-memoir to this project and it was accepted. It’s barely a paragraph long, but definitely a true story.

Ourselves: 100 Micro Memoirs book cover

Ourselves: 100 Micro Memoirs is a celebration of real life. One hundred authors give voice to the raw, chaotic and joyful spectrum of what it means to be human.

Each micro memoir is unique in its scope, but the collection resonates with threads of shared experience across cultures and generations.

In 750 words or fewer, these carefully crafted stories invite the reader into the histories we often edit—or don’t tell—about ourselves.

Published by Night Parrot Press, and made possible with funding from WA Department of Local Government, Sport and Culture.

2023

I first heard this quote on an episode of Ted Lasso (S03E06), when they’re in Holland. It was by Vincent van Gogh something about the season for sowing? I was intrigued and asked ChatGPT about it and got some van Gogh quotes about the seaesons. Searching for those quotes led me to one of his letters: Letter from Vincent van Gogh to Theo van Gogh, The Hague, 8 February 1883. And I found it and I find it really touching:

But one doesn’t expect out of life what one has already learned that it cannot give, but rather one begins to see more and more clearly that life is only a kind of sowing time, and the harvest is not here.

@jaanus, founder of @tact, has released Canopy!

There’s a little bit of my code in there from when I was working on the public beta. It encapsulates all the headaches we had to overcome to use CloudKit as a backend. From encapsulating the CloudKit API in a useful way, to how to make it testable.

@jaanus knows more than most about the intricacies of using CloudKit, and this library should save people a lot of time. Check it out.

I’ve recently had cause to work on our Ruby on Rails app at Hopscotch and it’s been many years since I messed around with Ruby or Rails. Having been deep in Swift for so long, writing Ruby feels odd. Moving from a statically-typed Swift to dynamic Ruby feels like moving from a Lego brick construction set, to a massive lump of putty.

I can understand why people are drawn to Ruby, even if I personally prefer Swift. I think it’s less algebra, more paint set.

2022

A product that I worked on for a year: Tact chat, has been released on the App Store. I was involved with the project up to the public beta release, and now the owners have managed to push it over the line. It’s a unique (highly opinionated) concept, and I think a cool product. If you ever wanted a chat app, minus the social network and surveillance capitalism – think family, friends, hobby groups – try Tact at justtact.com.

Missing Core Image Documentation

If you've ever gone searching for an up-to-date list of Core Image filters you'll know this pain. Search through search results, header files, Apple's documentation and you can't find it. The best link Apple refers you to is this page from their documentation archive that hasn't been updated since 2016. However, there is a small cache of Apple documentation available if you know the right link, and I think it's up-to-date.

2021

In regards to growth marketing, surveilance capitalism, algorithmic moral-panic-driven profiteering I think there’s kind-of Darwinian evolution of our kids’ immune systems. My (now adult) kids responses to all this nonsense really brightens my day.

The axiiio nano camera robotics system is back, baby!

Indiegogo > October 19, 2021 www.axiiio.com/view/laun…

We’re offering 4 kits this time, motor encoder has been redesigned, software has been improved. It’s better than ever.

Apple Maps shows a new message I’ve not seen before asking if I want to switch routes to save 2 minutes. When I don’t answer BECAUSE I’M DRIVING, it does it anyway. I realise late that it’s now taking me to the freeway, which I was trying to avoid. I Keep avoiding the freeway and now it takes me on a wild ride adding 15 minutes… well done.

Sometime mobile software UIs feel like they’re just activity indicators all the way down.

A few years back there was a backlash against job descriptions seeking rockstars, or ninjas. And that was a relief. Now, I think we’re entering a post-startup era; I keep seeing job descriptions emphasising low-ego engineering cultures. Low ego seems to be the new value statement describing the essential ingredient to good engineering, replacing the rockstar?

The tech culture attitude that you have to get on the train or else get left behind is horseshit. Never met a programmer who was unable to get up to speed about something new, when the need arose.

Pffft Bill & Melinda Gates are such noobs, bailing out at 27. Kris and I are coming up to our 28th!

Don’t know about you but “Get started with Trello Workspaces: add your Personal boards to a Workspace now, or it’ll happen automatically starting April 24th.” seems vaguely threatening?!

Making the example app for my next article about using a Redux-style architecture in SwiftUI. Can you guess what the app is called?

Discoverred this morning that there are no posts on the axiiio Facebook page (https://www.facebook.com/axiiio) and we can’t post new ones. That’s because Facebook has classified us as a “news” site and currently blocked in Australia! WTH?

2020

A Haiku to social media:

Instagram accounts cross paths, following, liking algorithmically

I am loosing my mind…

Was woken up last night by an argument I was having in my dream: you can’t apply the practice of software metrics to a marriage! You’re only measuring one dimension, growth, and you don’t know where that’ll come from! Truth bombs?

RIP Hamish 2005 - 2020

Hamish was a white Terrier puppy that we gave to our Son aged 11 as an encouragement reward for doing well at school. Our son was born with cerebral palsy, and during his school years he faced more challenges than most. But Matthew and Hamish were alike in their determination and tenacity.

Spend yesterday afternoon making a sunset timelapse with Adam and @axiiio at Elizabeth Quay in Perth. Beautiful and sunny, but it got quite chilly in the evening. Perth is the capital of sunsets!

My son sent me this, showing the Australian LNP holding fast to this moronic line about the sun and the wind…

We're on the road to Kickstarter!

axiiio has been my professional life for the last 18 months, learnt a hell of a lot along the way. I’m pretty chuffed with how responsive the app is and how accurate and seemless the scale animations feel. CoreAnimation, for all it’s hassle, just plain rocks.

I was really happy with this paragraph:

” A well-designed haptic experience also takes time. You need to test many subtle variations, but it’s a hoot to be able to say to friends that you just spent the afternoon designing the perfect haptic experience for a crocodile eating a pineapple.” www.raywenderlich.com/10608020-…

The Apple Combine framework is like taking the red pill; the more I use it the more I want to see how deep the rabbit hole goes. So far it hasn’t effected build times, app performance or memory usage in any way, and I feel like I can solve so many problems with it. In fact there have been cases where it’s improved app performance once I removed home rolled async solutions - especially when removing OperationQueues and custom Operation subclasses, surprisingly!

UILayoutGuide where have you been all my life. If you’re making a complicated layout where you want the some parts of the view to display under the safe areas to the edge of the screen, but other parts to sit within the safe area, UILayoutGuide is a good friend to have.

2019

Suddenly concerned for how many Swift files I have included an erroneous import Foundation statement!

SwiftUI stole the spotlight at WWDC 2019, but Combine, diffable data sources, and collection view compositional layouts, fix a huge amount of annoying things in UIKit. Really enjoying getting to know them all.

Watching a timelapse being taken is almost as good as watching paint dry, but here’s a cool pic

Haven’t had one of these in a while. Trying to use @Published from Combine with a tuple property causes a segmentation fault: 11 in the compiler. Eg. @Published var value: (Int,Int) = (0,0) will cause a segfault in a method where you update that value: value = (intVal, intVal)

Ryan Singer is spot on in this thread about product ownership twitter.com/rjs/statu… “playing time Tetris” is my new favourite analogy!

My tip for SwiftUI: if you find your list of @State variables is growing long, admit it: you’re actually building a view controller. Stop that! Start breaking it up into smaller View components.

First impressions of using SwiftUI for real

My first impressions of SwiftUI were it was a bit of a slog to get up to speed; the changes from the beta to the release version weren’t helping; sudden unfamiliarity after years of UIKit was uncomfortable; live previews were failing more often than they were working.

Damn, just noticed in tomorrow’s forecast, Shifty Jelly announce the Pocket Weather servers are finally shutting down Dec 31st 2019

My new favourite Google search query argument: -site:medium.com. What a breath of fresh air.

If you’re going to use UIDocumentPickerViewController, and also support opening files from the Files app, and now the home screen on iOS 13, it’s best to just use a UIDocument subclass. Even if it’s simple data. UIDocument handles the security-scoped URLs and file coordination, saving you some potential frustration.

Hoorah! In Swift 5.1 omitting return from single line functions also applies to computed properties. It’s the little things…

Trying to track down my Grandfather’s WWII service medals and record of service book.

Here’s a mystery! I was searching for details about my Grandfathers WWII service in Tobruk today; he was Private Stanley Herbert Seiver, serial number: WX9870. I stumbled on some photos of his medals and service record on a Flickr photo stream:

www.flickr.com/photos/ka…

This was uploaded to Flickr in 2015, with a comment saying “Found on eBay”.

Turns out they’ve been missing since 2001, and no one has seen them since. I assume sometime in 2015 they were sold on eBay.

Not sure what to do next…

For years I’ve been wondering where the track “When the tigers broke free” came from, that’s heard at the start of the Alan Parker, Pink Floyd: The Wall movie. Because it’s not on the Pink Floyd album.

Just found it on The Final Cut album! In all those years a simple search would have probably found it for me :P

Good read from Dropbox about the cost of sharing code between Android and iOS: blogs.dropbox.com/tech/2019…

I’ve never fully bought into the notion that building native apps on Android and iOS is a waste of engineering capacity because you’re building the same thing twice. I’ve no experience to back that up, just a feeling that native development is the most straight forward way to get a product made. Straight forward to maintain, support, hire developers for. You’re not swimming against the current of the platform improvements that are constantly delivered by Apple and Google.

Rework (23 July) is a great episode for people struggling with building complex software products in teams overcast.fm esp. if you’re over the way agile is done in a lot of places.

Working in 2 week sprints was supposed to provide a realistic perspective on development capacity, to enable better product prioritisation decisions. In my experience all it did was allow pressure to be exerted downwards to the developers; always the question why sprint targets were missed.

Even with all the battering rams and canon balls in my arsenal, I could not storm the gates of Sleep Castle.

despite my many invitations, attempts, offers of support; my love of sleep remained unrequited

Sleep eluded me last night; paraded it’s witnesses and suspects through my head; by the morning it was still at large.

I feel like I’ve finally got a handle on how Auto Layout works with UIStackViews, how stackviews get their intrinsic content size depending on the set alignment and distribution properties. Luckily, just in time to be able to toss it all away for SwiftUI :D

My Son’s dog, a little white terrier, was leaving my office. He stopped in the doorway, turned to look back at me, farted noisily, then continued down the hall. Now I’m racking my brain for what I might have done for him to take offence. An acrid cloud of tension lingers in the air between us…

Considering SwiftUI, now I see how much wasted time was spent on intense discussions about things like, should you pass your model object to your UITableCell subclass to set its properties?

No one warned me that being a contract software developer, also means schlepping equipment up a mountain…

Even more Axiiio field testing; this time in the old convict settlement ruins near Port Gregory, Western Australia

mp-photo-alt[]=mp-photo-alt[]=

Some Axiiio field testing while in a camping trip. Getting a motion time lapse of the sunset.

Garnet grains on a beach near Kalbarri, Western Australia. Looked like a dusting of pink sugar across the beach.

Jumping on the immutable state bandwagon (with a nod to Redux) in an iOS app, suddenly opens up a bunch of opportunities for testing. I can save and load an app’s state to/from a file, which is super handy.

Well this is annoying. Same Swift code literal is correctly CGFloat outside of an array, but within the array it’s an Int… !? Also the 1.0 on the next line becomes a Double, :slaps_forhead:.

It’s only when you’re sharing code between platforms that you discover things like on iOS char is signed, but on 32bit ARM systems like Teensy 3.x char is unsigned. My brain is exploding trying to understand the consequences.

Working out of Axiiio labs this week. Working with embedded devices is a whole new world from working on a big software stack. Lots of fun though.

The new Xcode lldb v command seems a lot faster, but at first try I don’t think it can see type extensions. po sees the method in my class extension but v doesn’t?

Whoa… if you know Objective-C, you’ll appreciate this method name I just found in UIFoundation:

-[NSCoreTypesetter _NSFastDrawString:length:attributes:paragraphStyle:typesetterBehavior:lineBreakMode:rect:padding:cgContext:baselineRendering:usesFontLeading:usesScreenFont:scrollable:syncAlignment:mirrored:boundingRectPointer:baselineOffsetPointer:wantsTextLineFragments:applicationFrameworkContext:]

Xcode upgrade, Swift 5 migration went surprisingly well. All I had to do was upgrade carthage and build the project, no changes required. Lovely when that happens.

This is Apple admitting their previous CoreData examples were rubbish:

“Previously in iOS, the Core Data stack was typically initialized within the application delegate. However, doing so causes a significant amount of code to get muddled in with application life cycle events.”

My son said to me the other day he wonders why when there are so many companies selling content why business models are only ever ads or subscriptions… good point!

Cleaning out old cupboards and drawers is like suburban archeology. For example, in a drawer filled with junk I found 5 hole punches. I think I can draw a pretty accurate conclusion that we’ve had the need to punch holes in paper approximately 5 times in the last 10 years.

#SurryHills

Dim Gaggle of UberbEats riders outside Chur burger all bikes, backpacks, and impatience

Muted terraces signaling to huddled pedestrians outrunning the rain finding sporadic shelter under the Sober trees

Love in the time of unit testing

Here’s the text of a lightning-talk I gave at the beginning of 2016 at one of SafetyCulture’s Townsville company gatherings. I really liked it and thought I should share it here for posterity.

So many evil cats! Played Root for the first time. Really good fun. Each player has different rules, but somehow it all works magically.

Nothing says you love your dog more than waking up to find you still have a dog. Despite being up at 5:30am mopping dog shit that had been walked from one end of the house to the other.

I’m disappointed that the non-meat hamburger companies haven’t used, what I think is, the obvious slogan: “I can’t believe it’s not murder!”, or, if you prefer, “I can’t believe it’s not slaughter!”

Uppercase UUIDs on iOS

If you work in a cross-platform company, you realise iOS is the only one to output upper-case UUIDs. Which is odd. Apple purport to respect RFC 4122, and while that states uppercase characters are within the valid set, it also states “The hexadecimal values “a” through “f” are output as lower case characters and are case insensitive on input.”

So I’m thinking Apple’s implementation is wrong.

Opening the Mac OS Books app to check the spelling of Hugh Howey’s name, I clicked on the book and got this insane error dialog. “Reinstall iTunes” .. seriously?! Reopening Books fixed it.

Haven’t read a book in a while and I finished 3 books over Xmas: The Wool Trilogy by Hugh Howey. Cracking good post-apocalyptic tale.

2018

So my dog just walked into the office and belched… and that’s how I knew she’d been in the kitchen bin again. What a morning I’m having.

In Swift what is the nature of an optional Void ? If it’s .some then it’s nothing, but if it’s .none then, is it everything?

One of my eldest sons said to me this morning “I think one of the best parts of parenting must be trolling your kids”. I can’t begin to describe the feeling of satisfaction, and yes, pure joy, that I experienced hearing those words; like I did something right as a parent.

I’m building a document-based app, and having to setup a seperate Xcode framework target for the document model code, so it can be used in the app and the app extensions. Turned out to be a really nice way to segregate an Xcode project.

Dining Room Table Project - Part 4

First board filled, sanded and oiled. I’m in love with Marri.

Dining Room Table Project - Part 3

Working out the best way to fill the holes, cracks and gnarly bits with clear expoxy resin

Dining Room Table Project - Part 1

Selecting the wood: some lovely Western Australian Marri boards