Week #745
Wrangling tvOS is a pain. Given the user input it not touch it has some strange default behaviors. They are nothing that can’t be fixed, but it’s good to try and develop in tandem with iOS so you can fix both as you go along and built it ‘right’ from the start. on tvOS buttons and lists all require special love and care to get the default interactions and focus.
This week we went down a big rabbit hole over Apple Game Center achievements. We setup a way to reward achievements using the App Store Connect API outside of the app. There are two main reasons for this: We’ve added some new achievements which are unreachable if you’re an older player. Our new script is a way to backfill some of that data. The other reasons revolve around achievements that are not tied to the game. We have some ideas around interesting things we can do, but we’ll wait and see if it is worth the effort (or even allowed).
On Thursday we published an article about our new iPhone camera app: Ornithoto. This is a bit of a deeper explanation of the app, it’s inspiration, some technical aspects and more. Ornithoto is available on the Apple App Store.
Backups
You don’t have a back-up until you restore!
A wise man who works in operations once told us: You don’t have a back-up until you restore. It made sense at the time, but who ever really restores from a backup as a test? On a personal machine, you need to get work done and its expense to have a second machine just to test your backups, so no one does. Our backup regime is pretty good. We have an air-gapped external hard drive we backup too monthly, we have daily Time Machine backups and those are copied offsite. This week, something happened to the local TimeMachine hard drive. Some bits got crossed and the local backups needed to be purged. Nothing to worry about, we still have the data in 3 place (on the device, the slightly out-of-date air-gap external drive, and the remote backup). As a test, we decided to copy the remote backups locally again and continue from there. After a few days of waiting to rsync the data back, the .sparsebundle backups didn’t work. 😬
This was good to find out. We needed to figure out if the remote backup files corrupt or were they borked when trying copy them locally again? How can we prevent this from happening? Either way, we started fresh now and got the local backups going again and sync them remotely.
After doing some homework, it turns out that we were using the --ignore-existing
flag with rsync. We (wrongly) assumed that if the file already existed (and was the same) it would skip it. What that parameter actually does is ignore all checks if the file already is there, in any shape or form, and it skips it. That meant our updated files and incremental backups were never updating!
As annoying as this is, we’re not stressed (yet), because this only affected the remote backups. It’s best to find these things under happy times rather than in a stressful situation!
It’s true that you never have a backup until you restore it!
Week #746
This was a short week. Monday was a public holiday in the USA. Thursday was a public holiday in Iceland and then lots of places were closed on Friday to make a long weekend.
This week we continued working on some WebRTC stuff. Getting it to work on tvOS is going to prove a bit trickier. The library I found does not natively work on tvOS, but some people have managed to make some changes and get it to work, so we’re positive. Out tests with demo apps we’ve built from source code do work, now it’s getting that into our prototypes.
On another web project, we’ve been contemplating giving things a fresh look. That will require us to revisit our CSS workflow. Right now we have a small script that runs when we commit our code into the repo. It builds the SASS files into CSS and combines and compresses our Javascript and CSS files as needed. It’s a very old workflow that is over-engineered for our needs. This summer we’ll revisit all of this, but for now, we’re making a plan. This will simplify the CSS, get us a dark mode, modernize the code with variables and in general get rid of a bunch of cruft.
For our tablet/VR project, we’re now getting to the part that’s less about the customer facing product and more about the user permissions for the client’s team. We’ve been building a permission system for the editors who will log into the Web Admin tool to manage assets. Now we’re changing to the permission system of those who can log into the actual customer app. Those permissions are completely different. They are read-only on a page-by-page level. Then we need to think of parent and children pages as well and what permissions are inherited.
In preparation for meetings in June, we’re putting together some prototype updates and a slide deck for a smaller side project. It won’t be the focus of the meeting, but certainly an extra at the end, or if the main project gets zero traction in the meeting, we have a plan B.
Finally, on Sunday night (which is Monday morning in Australia) we have a call for another project kick-off. This one is with an existing client who’s looking to expand their business into new product which means and update to their web app job and inventory tracking system we built.