Still amazingly relevant today: Clarke and Dawe - The Energy Market Explained. I guess that means nothing has changed in 5 years, and the Aus Liberal Party is still a party with very little public policy.
2022
A recent article I wrote was published: SwiftUI and Structured Concurrency
2021
A succinct blog post about the Tact Public Beta from its founder: https://jaanus.com/tact-public-beta/
A project I’ve been involved with since March has just launched their public beta! Check it out at www.justtact.com
If you’ve ever wondered what SwiftUI view preferences were look no further! Take a trip through the daisies with Buzzy: www.raywenderlich.com/26733845-…
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.
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?
My newest article is up on raywenderlich.com: Getting a Redux Vibe Into SwiftUI www.raywenderlich.com/22096649-…
The bit I’m most proud of: “Usually, state management code feels like soggy bread held together with duct tape.”
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
Hey I wrote a CoreData tutorial: www.raywenderlich.com/14958063-…
This whole tutorial is the result of satisfying a strange compulsion I had: starting a tutorial with the one word sentence “Fireballs!”
Facebook Management UI is like some Crazy, Hostile Text Adventure Game You Can Never Win
Recently I’ve spent some time managing the axiiio social media accounts, and I can’t believe how much of a train wreck Facebook management UI is. Is this the peak of split testing/optimisation/growth hacking ? If so, I’m out!
I’ve found 3-4 different UIs for the same management features, each one with it’s own bugs, differences in displayed information, performance issues, functionality limits, and how to navigate there. It feels so hostile for me to use and try to navigate; as if I’m a lab rat in a maze.
For the axiiio page, I go to Manage Page, to find two ways to see Notifications, one on either side of the screen. Marking all as read on one list fails to mark them as read on the other. Every other manament UI also has a notifications list, it seems they all manage their unread notifications individually.
I open Publishing Tools, and select Published Posts and it shows me an advertorial for Business Suite, but I can still create a post from there. I can also still see my draft posts, and create a new draft. If I select Video Library, it takes me to Creator Studio in a new tab. There I see a list of Facebook posts and a seperate list of Instagram posts. If I go to Business Suite and select Posts I see a list of all Facebook and Instagram posts together.
Amusingly, in the original Publishing Tools screen, once you select Video Library and the new tab opens, back on the original tab you can see an advertorial for Creator Studio. “We’re moving to Creator Studio!” it announces with enthusiasm. “Post and videos are moving to Creator Studio. The transition will begin from between late September and early October.” This is the only place I’ve seen this notice.
For ads I can visit Ad Center, or Ads in Business Suite (which shows me Ad Center embedded). At the bottom of the list in Ad Center you see a link: “Show more details in Ads Manager”. Ads Manager is entirely different to anything else, a crazy tri-pane hellscape of tables and tabs. Ads Manager causes a Safari lockup sometimes, forcing me to close the tab. Want to know how well an ad is doing? Good luck!
Back at Manage Page, select Insights and you’ll see a summary of page and post statistics. You can do the same in Business Suite to see a different Insights UI. Try this in Creator Studio and you’ll find a 3rd take on it.
There’s a link in Creator Studio Insights labelled Overview. Select that one! Like some crazy puzzle adventure game, it’s a secret portal and you’re transported to an even older UI called FB Pages!
This looks to be the same as the Manage Page Insights page but with a different design. However, FB Pages still has a navigation bar. To what you should ask? It’s another Ad Center! There’s another Notifications list (unread marks still glowing for all the notification I’ve marked as read on previous screens!). There’s also another UI for Publishing Tools!
Visit Publishing Tools and you can enter the recursion tunnel by selecting Video Library to open Creator Studio, or selecting Posts and clicking the Try Business Suite button.
There seems to be no end to this recursive madness, I’m holding onto the thought that when the time comes, I can just leave and never return.
Great article by Independent Australia :independentaustralia.net/politics/… Julia Gillard gets far less credit that she deserves.
Deep breath, crossing fingers… holy shit… this thing that’s been my life for nearly 2 years is on Kickstarter!
axiiio nano – Flexible, Reconfigurable Camera Motion Control www.kickstarter.com/projects/…
Check it out!
Checkout ProMoCo! This is the app I’ve been working on that drives the axiiio nano Camera Motion Control System. www.axiiio.com/view/arti…
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.
In a way, Hamish was a therapy dog for our Son. A constant, loyal companion, Matthew could look after and train, and who would return his affection faithfully. Matthew is now a working Archeologist, a tribute to his doggedness to overcome his challenges and achieve a role where he thought he could make a contribution to human knowledge and society.
Hamish deserves a memorial for his contribution to our son’s life and our family, and this brief blog post is mine.
Hamish’s favourite activity was going for walks around the neighbourhood where he could pee on every tree, bush, lamp post and street sign. He did this with practiced precision, often spending minutes walking back and forth, lining up the perfect shot. This would continue for the whole walk, long after the tank was empty.
His favourite walks were along the beach, where he could target particularly nasty smells, such as the rotting remains of sea creatures, to roll in and bring home with him.
He’d make a bone last days; gnawing on it for hours, then burying it until it was ripe several days later, reviving it from the earth and spending a few more hours at it He was a true fetid gourmet.
He was fond of all company, accepted pats and belly rubs from anyone willing.
He particularly enjoyed wrestling with our children, playing tug of war with chew toys. He’d end up on his back, short arms splayed wide, grinning like a fluffy white ewok.
When I worked from home, making early starts, he’d come and sleep under my desk after breakfast keeping me company. I put a dog bed in my office so he’d have somewhere comfortable to lay down.
In more recent years, as he got older, he lost his hearing and gained a host of medical problems that made life uncomfortable for him. He slept most of the day and we bought him dog beds for his favourite resting spots; usually in places where we’d hang out in the house as a family.
During the day he’d visit the backyard repeatedly to lay on the grass in the full sun. I think the sun warming his old bones gave him relief.
Now we have a stack of smelly, unused dog beds in the corner. A strange void that we can’t shake; a bark from the other end of the house; a flash of white crossing the threshold to the backyard; the click clack on the timber floor as he comes looking for us in the house.
I’m sure we’ll find more fetid treasures he left for us buried in the yard somewhere.
Petition EN1938 - Royal Commission to ensure a strong, diverse Australian news media
Just signed K-Rudd’s Murdoch News petition: www.aph.gov.au/petition_…
Murdoch media is a blight on the world, divisive and repugnant; causing misery and destruction purely for political and financial gain. And I’m pretty sure we can blame Murdoch for the NBN fiasco.
newsroyalcommission.com
#MurdochRoyalCommission
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!
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.
axiiio is a system of 3 core components that allow you to add programmable motion control to any camera rig, that you control over WiFi via the app. You can control up to 4 motors per receiver with the app, in real time, using preset cues, or through a motion program.
There’s a great short intro video on the axiiio Youtube channel.
The app can setup each motor for different roles; tilt, pan, roll, linear motion or lens control. There’s also a set of fine adjustments you can make to ramping, velocity responsiveness and so on. You can then setup your preferred on screen controls to suit your rig; a joystick control for tilt/pan, a slider-style control for controlling velocity (linear axes, rotational axes or zoom control for example), or a positional control for controlling motor position in real time (e.g. for focus control)
The scale for each screen control can display measurements, “wax” marks, cue marks and program marks that are highly accurate to the real position of the axis. Check out the test reel footage of this in action on the Youtube channel.
You can also create 3 types motion programs in the app: video motion, timelapse, and stop motion. Programs and configurations are all exportable and sharable as simple files.
Checkout the Kickstarter launch page for more info.
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-…
My latest raywenderlich.com article is up! “Getting Started With Core Haptics” www.raywenderlich.com/10608020-…
Highly recommend the email newsletter Big by Matt Stoller. The latest is good for understanding the roots of what’s going on in the US right now: Corporate Power, Protests and the Breakdown of a Social Contract… and probably in Australian politics too.
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!
My 2nd article for RW is up: www.raywenderlich.com/7738344-m… an update to an older MapKit intro.
The axiiio homepage has been updated with some sweet new examples of rigs and camera work: www.axiiio.com
The Axiiio Kickstarter launch is getting closer! www.axiiio.com/view/kick…
Checkout this funky Axiiio video https://www.youtube.com/watch?v=6AFKa-2GGYo
2019
It’s finally out: the vid explaining exactly what the Axiiio motion control system can do for filmmakers youtu.be/55h0l3ZVd… This is what I’ve been building an app for this year!
Finally started using GYB (https://github.com/apple/swift/blob/master/utils/gyb.py) for code generation. Wish I had started earlier!
My first tutorial on raywenderlich.com is out! It’s all about accessibility and custom controls. www.raywenderlich.com/4720178-i…
Axiiio sneak peak, showing the footage captured is up here: youtu.be/2bDDGwFwh…
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.
But after a couple of weeks it dawned on me: you’re mad to try and build a SwiftUI app like a UIKit app; which of course was what I was doing.
UIKit requires you to have a working app, to even start to see anything running. With SwiftUI you can start from a single screen that you’ve been imagining and see its preview as you build. No need to think about the app’s model, the launch behaviours, the navigation, or any of the plumbing.
Gotta break those UIKit habits; just start playing with a single view. It was much more rewarding and each proof of concept was easier to reach. Kind of like building from the inside out. You get to build the most important concepts first.
Some very cool footage should appear here soon… www.youtube.com/channel/U…
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.
If you’re using the Network Extension framework and are getting a crash building on Xcode 11 running on iOS versions pre-13: dyld: Symbol not found: _NEHotspotConfigurationErrorDomain
there’s a messy workaround described here: forums.developer.apple.com/thread/12…
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:
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.
Wow, checkout What’s New in Swift developer.apple.com/videos/pl… from #WWDC2019. Feels like Swift suddenly got super powers with Swift 5.1. Also shows how SwiftUI is a direct product of these new features.
Kurzgesagt is one of my favourite things on Youtube. “The Side Effects of Vaccines - How High is the Risk?” youtu.be/zBkVCpbNn…
Top Tier CoreAnimation Tip in this WWDC2014 preso developer.apple.com/videos/pl… and ronnqvi.st/multiple-… Commit a change to a layer property, and also animate from the difference to 0 with additive = true
. Smooth. (New to me anyway :))
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:]
Woo! published my first CocoaPod: Shawshank. A small but nifty Swift unit test framework for stubbing network calls. github.com/atetlaw/s…
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.
My talk today is on Unit Testing, kind of a boring topic I realise.
In the world of iOS unit testing doesn’t come naturally, It’s uncommon to find an iOS engineer with lots of unit testing experience. And yet every iOS developer here who has given it a go, has been amazed and how much it helps them. when writing new code.
There’s a gap
So i’m wondering about that gap between the unit testing the chore and the epiphany of how helpful unit testing is. And this is my crack at bridging the gap.
Too much focus on what and how
I notice that when I talk about unit testing generally I always focus on the what and the how. What to test, what shouldn’t be in a unit test, how to test classes that have dependancies, how to mock objects and things like HTTP requests.
Much complaining
And mostly complaining about how the unit tests are always failing, needing maintenance, are out of date, or test very little.
Unit testing is a chore
How they take too long to write, or how, once automated testing is running, no one can merge a PR until all tests pass. Because I think that’s what happens when you focus on the what and the how. Unit tests become a chore.
You didn’t estimate enough time
It’s not a part of the programming you’re doing, it’s the bit you tack onto the end, that you didn’t estimate enough time for. Unit tests are a hassle, a pain in the arse, a velocity-sapping, slog.
Why even unit test
The what and how tend to get entangled in procedure. it gets in the way of working out why your even doing it. Other than I have to write some and they have to pass to get my PR merged.
I think if you truely understand why you’re writing unit tests, all the rest follows. All the things you want to put in a test, all the ways you want to test it all become easier through the lens of knowing why.
It’s not all about you
And sure unit testing is helpful while you’re writing new code. Writing or refactoring code in a complex app can be terrifying. Adding tests along the way helps you make sure you’re on the right track, spot edge cases and so on sure.
But it’s not all about you!
Do it for love
Most defects are introduced during coding, but the least number of defects are found during coding. There’s only one reason to write unit tests, the only reason that matters.
You have to do it for love.
Don’t worry, I got your back
Unit tests are a declaration of love for your fellow engineers. They say I care about you, man, and the work you’re about to do. Don’t worry I got your back.
Unit tests are a declaration of love for the product. Unit tests are a declaration of love for SafetyCulture. What happens when you have love in your unit tests?
See it from the other engineers’ perspective
You start to think differently about your code , you start to see it from the other engineers’ perspective. You think about how to make it more testable, you think about all the possible states your code can get into.
You think about how someone else might approach using your API. You write your tests in a way that demonstrate how it should work, how it can fail, what can go wrong when it does.
Tripping balls
You can demonstrate how your code will behave in a positive state, a negative state, and a tripping-balls-what-hell-is-going-on state.
You haven’t broken anything
When you go to work on a codebase with love in its unit tests you know you can rely on them to show you how it’s all supposed to work and reassure you that you haven’t broken anything.
Your team is behind you
You can bravely take on those big refactoring jobs, knowing your team is behind you all the way. Once you know why your writing those unit tests, it guides you on the implementation.
The next engineer
You worry about the time it takes to run: you want to make sure the next engineer can run them as often as they need to feel secure.
Avoid fragile tests
You avoid writing fragile tests that rely on timing, on application state, or UI state – anything that could randomly fail if conditions aren’t right – because that creates confusion, and uncertainty.
And you care that the engineer running your tests is not left confounded, wondering why the tests are failing 10% of the time.
Mock or stub only when necessary
You use mocking or stubbing only for what’s necessary, because overuse ties the unit tests too much to the implementation details of mocked classes. You don’t want to make your mate rewrite all your tests because some unrelated implementation detail has changed.
Avoid persistent state changes
You avoid making persistent state changes you don’t want your unit tests leaving behind a mess someone else has to clean up.
Be descriptive
You make sure to be as descriptive as you can about what’s going on in your tests and why the expected output is legit.
Test something useful
You make sure your tests actually test something useful.
Write tests for humans not robots
Your avoid torturing your code (by breaking it into smaller and smaller parts until it’s perfectly testable, all dependancies are explicit, code coverage is very high, but understandability is very low) because you know you’re writing tests for you fellow human engineers, not writing tests for robots to run.
Even though we might automate them.
Write tests with love
You write tests with love, because you’re not writing them for yourself, You’re writing them for the next engineer, because you care that they succeed.
Inevitably, 6 months down the track, that next engineer turns out to be you. And you can say, thanks past me, you’re weren’t such a jerk after all.
Here it is: boardgamegeek.com/boardgame…
Currently experimenting with CoreLocation and extending types to provide Measurement
values: gist.github.com/atetlaw/0…
Love this Apple documentation for magnitude: developer.apple.com/documenta… TL;DR: “use abs(_:), magnitude blows”
Hey I might be a bit biased, but… www.inc.com/brian-de-…
Hooray! New Buke & Gase album www.bukeandgase.com
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.