Dear Reader,
After some routine blood tests a few months ago, it transpires that I’m at the upper range of prediabetes and very likely beyond that into a formal diagnosis of Type 2 diabetes. This wasn’t exactly a surprise given the amount of sugar, alcohol, and carbohydrates I was consuming (or the kilogram bag of Pick & Mix I was given on a recent trip to Sweden 😬). However, I was starting to experience some of the symptoms that typically don’t appear until it’s been ongoing for some time so decided I needed to make some fairly drastic changes.
For the past few weeks I’ve been drinking more water, eating less food (along with a better diet), and exercising properly which has led to losing nearly a stone and making some notable improvements to my heart. To do this, I’ve been using a number of apps including some private ones I created just for me which I’ll be showcasing in this issue.
Until Apple manage to crack non-invasive blood glucose monitoring, the best thing you can do if you suspect you may have prediabetes is to get a blood test either from your GP or from one of the many at-home test kits that are available (I personally use Numan). It is reversible so don’t put it off!
In other news, I haven’t been focussed on a single app this month but have instead been doing small bits and pieces on a number of different projects; ironically a bit of a Pick & Mix. I’ll be going through those along with a brief review of some new HomeKit equipment I set up over the Easter break.
The temporary monthly cadence for this newsletter has been working well so I’m going to stick to that as I’m being pulled in multiple directions by client work, my own projects, and my new fitness regime. There are over 700 subscribers now so a big thank you to all of you; as always, you can comment on this issue or email me directly if you have any questions or feedback.
— Ben
Contents
My Health Apps
Lists in Game Track
Music Library Tracker v2.0.2
Receipt Printing from macOS
Waking Up Shortcut
HomeKit Secure Video
Substack Notes
Recommendations
Roadmap
My Health Apps
As those of you that have been reading for a while will know, I’m a big fan of logging and tracking data over time. This is especially important with health and is something that became a lot easier when Apple introduced the Health app and HealthKit framework back in iOS 8. As you might expect, I use a number of apps to load data into Health but I also have a few bespoke apps that I’ve created for my own use:
Scales
Weight is generally regarded as one of the most important markers of health due to the way that most negative health conditions are greatly exacerbated by or have their chance increased by being overweight. I have over a decades worth of weight logs since I purchased a set of FitBit Aria scales back in 2012 and I have synced these into the Health app as well as to my own database. The scales eventually broke in 2019 so I replaced them with a non-smart set and manually added my weight into the Health app.
However, one of the things that irritates me most about Health is the way it measures weight being either in kilograms, pounds, or stones. You’d think the “stones” option would be the typical stones and pounds (i.e. 14st 10lbs) but instead it’s a decimalised option (i.e. 14.71st). I don’t know why anybody would choose to measure weight that way 😂
To remedy this, I decided to build myself a small app that would show me a graph of my weight and allow me to input new weights in the *correct* format. The whole thing would be synced via HealthKit but would also work with my own database so I could potentially use that data in other places.
The result was Scales, one of my first forays into SwiftUI back in 2020 and a masterclass in why you shouldn’t build your own graphing system1.
The graph view opens on the latest piece of data but can scroll horizontally back to 2012:
Whilst I have data throughout that period, it didn’t necessarily all fall on the same day and sometimes I might not weigh myself for a couple of months. To account for that, I wrote a smoothing algorithm to basically format the data as if I’d weighed myself once a week; this works by looking at the difference in weight between two dates and then effectively faking the data at set intervals based on the average increase or decrease (i.e. if I’d weighed myself 28 days after my last weigh and had gained 4lbs, then the data would show I gained 1lb per week).
The horizontal lines show half-stone intervals. Those highlighted in green are instead goals; short-term (14st 7lbs), mid-term (13st 7lbs), and long-term (12st 10lbs). Each of these goals can be changed on the server side and will then adjust as necessary within the app. Similarly, if I suddenly put on an extra stone, the graph would expand upwards to account for the new min/max of the data.
Originally I had a touch interaction so you could drag the red circle back through the data to see the exact weight at a given time. The performance on this way very poor due to my complete naaivity around how SwiftUI rendered its layout so I removed this feature. If I was building this today, I’d use Swift Charts with an overlay.
The plus button in the top right hand corner invokes the “New Weight” sheet which is in desperate need of a redesign. When I created this app back in 2020, I didn’t want to use keyboard input so instead made the input selection based on context menus. Now I think I would use a stepper control as the amount is very unlikely to differ by more than four steps from the current value and I already have to do four taps with the menu interface. I’d also change this to use a half-height sheet rather than the full-height one shown here.
For the app icon I used Plus Sized Arial by @Neoqlassical and then took the colours from Arial’s hair, outfit, and scales2 (red, purple, and green) to use within the app.
Chaise Longue to 5k
As somebody who is desperately unfit, I appreciate that I can’t just suddenly go from doing nothing to running a marathon3. That's where the Couch to 5k program comes in. Originally invented by Josh Clark, the idea is that you do a mixture of walking and running over 9 weeks with the aim being to comfortably run continuously for 30 minutes by the end. The program is now endorsed by the NHS who provide their own app which I used when I first tried started running in 2019.
Whilst the NHS app and the many others available on the App Store all work well, they usually run on your iPhone or Apple Watch and communicate whether you should walk or run via haptics or audio prompts. This is great if you’re doing this outside but I run on a treadmill in my garage with an Apple TV in front of me so I wondered if I could make something a bit different.
The result was Chaise Longue to 5K:
The killer feature is that the run can be shrunk down to a Picture in Picture window so I can watch YouTube or Plex whilst on my run but still clearly see how long I have left in each section:
Whilst it was originally designed for Apple TV, I also ported it to iPhone, iPad, and macOS with the same PiP functionality. Buy it once, and it becomes available on all those platforms with syncing of your data through iCloud. No analytics, no privacy invasion, just a simple app to let you do a Couch to 5K run with a Picture in Picture window!
* I’ve put the app on a 25% discount for the next week. The Dodo Developer Diabetes Discount ends on the 20th April!
Om-nom-nomivore
Exercise is all very well and good but it’s food that is typically my downfall and that needs to be monitored a lot more closely now. Much as I love tracking, I’m not a fan of apps like MyFitnessPal that you use to log everything you’ve consumed. The databases they use aren’t always accurate and they can be a pain if you are cooking your own meals from scratch or eating in restaurants, etc. I also find they make you think about food a lot more.
Instead, I decided to create myself a basic app for meal planning. I’ll typically have a weekly shop delivered by Ocado and then use the app to divide everything into my meals based on the expiration dates:
The upcoming week is shown in a list with a section for each day broken down into breakfast, lunch, and dinner. Tapping on a meal time will bring up a list of relevant meals which I can add via the ••• button.
As regular readers will know, I’m a big fan of using side projects to learn new technologies so one feature I added with this release was the ability to drag and drop meals between days allowing for quick rearranging; this allowed me to get to grips with the way the newer drag and drop APIs work in UIKit.
One of the slightly odd features of this app is that the data is not stored in a local cache or database, but instead within the iOS calendar! The reason for this will become apparent when we delve into the Stoutness app shortly but it was also a fun exercise in using EventKit.
Whilst the main list is stored within the Calendar app, the meals themselves are all stored in NSUbiquitousKeyValueStore based on their meal time so I get seamless syncing between devices thanks to iCloud. These three lists are all stored using an LRU algorithm so the meal I used last is always at the top (I’m a fussy eater that really only eats about 10 different meals so the last meal I ate is likely the next meal I’m going to eat).
This app is a good example of another philosophical idea I like to bang on about; building things for oneself. I’d never release an app like this as it’s fulfilling a very particular need for me but that’s OK. It’s nice to be able to build little tools that work just for you and they can be a good way to develop your skills and learn new technologies.
The final thing to mention on this one is that the app name is based on a T-shirt I got from Threadless years ago. I extracted the artwork to use for the app icon and then used the navy background and the pink of the dinosaur for the theme colours.
Stoutness
Continuing with “weird apps built just for me”, Stoutness is a tvOS app I created in 2021 to help me remember to do my chiropractic stretches. It’s essentially a collection of 12 data views with a video explaining a particular stretch bolted to the side.
Each page showcases a different piece of data which is pulled in via the coding equivalent of duct tape.
Newspapers: A custom PHP scraper that fetches the front pages from tomorrowspapers.co.uk
Tasks: An AppleScript runs on my Mac Studio every morning to export the tasks from within Things and put them in a plist file that the app downloads
Schedule: My morning Shortcut exports the day’s events from the iOS calendar and then breaks them down into sections of the day (those
[food:breakfast]
tags I mentioned within Om-nom-nomivore should make more sense now!)Sleep: I track my sleep with AutoSleep which is opened automatically when I wake up (more on that later) and synced to my database via a Shortcut
Alcohol: I created a custom Shortcut that allows me to choose alcohol type (wine or beer4), ABV, and drink size (ml). It then calculates the UK units and stores that in my database. I typically invoke it from a widget to the left of my homescreen
Steps: Extracted from HealthKit using a custom app I wrote5 and then synced up to my database with my morning Shortcut
Exercise: As above, but with exercise minutes instead
YouTube: The app downloads a list of videos from my public “To Watch” playlist and then picks a random selection for me
Pocket: Similar to YouTube, this connects to my Pocket account and picks a random selection of articles
Coding: The time spent on my personal projects is populated from the Toggl API (filtered to a specific “client”) but my database will randomly pick one of my active projects for me to work on
Reading: This one is populated via the Bookmark app I showcased back in Issue #3. Again, my server picks a random book that I should read today
Games: Another custom app, this is populated via Game Track which I mentioned in Issue #4 and later in this issue!
I love this app as it helps me do my basic stretches but also gets me set up for the day by showing me the day’s news, an overview of my key health metrics, and randomly choosing what I should watch, read, play, and work on. In case you’re wondering about that last bit, I’ve long subscribed to the philosophy of “idea sex”, the process of consuming or working on multiple things at once in a bid to have creativity spark more frequently due to holding multiple concepts in your mind at once. As I have several books on the go at once, it’s helpful to be told “this is the one to read today” as it stops me from just sticking with whatever I’m enjoying the most.
When I finished working on Stoutness back in 2021, I said:
As of the time of writing, I’ve spent 24.4 hours working on the Stoutness app from its origins as a printed daily report to the Apple TV app it is now complete with its suite of data providers from AppleScript apps to Shortcut workflows. Since using it daily from the start of the year I’ve had huge improvements in nearly all of the metrics I track; I’m sleeping longer, drinking less, exercising more, and reading more. I’ve also noticed big improvements in my health with my daily stretching leading to more flexibility and less aches and my average resting heart rate falling from ~70bpm to ~50bpm. Finally, I’ve lost over 22lbs since using the app which is just over 10% of my starting weight; that isn’t all attributable to this app but it has definitely helped by encouraging me to keep working on the various rings that I see every morning.
You can see the huge drop (and the resulting climb back up after my 2nd child was born 😂) this caused in the weight graph from Scales that I showcased earlier. I’m hoping this app will work for me again!
Browser Note
Whilst not necessarily an app related to health, I initially created Browser Note to help me order less when I ordered a takeaway:
It’s an app that does one thing incredibly well; it adds fullscreen notes to webpages. It does this by making use of an iOS 15 Safari Extension that you can activate within Safari to add your note and later update or delete it. When a note is displayed on a page, an optional “View Website” button is available to let you continue into the site; when tapped, the note is snoozed for a period of time at which point it will appear again on any subsequent reloads (the snooze period is 15 minutes but you can change this within the app).
After using this solution for a week or two, I quickly found myself wanting to use it in on other sites such as BBC News and Twitter to prevent me from habitually visiting them. I developed the extension further so I could add notes directly within Safari and instantly saw my phone usage drop by several hours a week. It turns out that adding a short “are you sure” dialogue before visiting a website is a great way to break the habit!
The app is available on iOS, iPadOS, and macOS; one purchase unlocks it on all those platforms and your data is synced securely and privately through iCloud. No analytics, no data sent to my server or anyone else, just a secure way to give you positive behavioural nudges within Safari.
* I’ve put the app on a 50% discount for the next week. The Dodo Developer Diabetes Discount ends on the 20th April!
So those are my health apps! As I mentioned earlier, I’m already seeing noticeable benefits having lost nearly a stone already but I’m also seeing interesting metric developments within the Health app. For example, I got a notification last week telling me my resting heart rate had a new trend in that it had dropped by 20% (and is still dropping):
This is something that I would never notice day-to-day and is only made possible by all the additional tracking that is done mostly silently by the Apple Watch. It also showcases that whilst it’s important to log as many key metrics as you can, it’s absolutely crucial that you review that data in order to see what effects any changes you are making are having.
Lists in Game Track
I’m a big fan of the downtime organiser app Sofa. I primarily use it as a way of storing my backlogs of games, books, and tv shows with the idea being that they’ll be deleted from Sofa and moved to one of my own tracking apps when I actually start engaging with the media. For example, I might have a list of books I want to read within Sofa but once I start reading something it goes into my own Bookmark app. This in turn is then output into my Stoutness app when picking what book I should read today.
You may remember my Game Track app from Issue #4. As a brief reminder, it’s an app that my friend John and I use to log the time we spend playing video games. Up until now, I’ve been storing games I want to play or want to buy in separate lists in Sofa (based on platform) until such a time as I start playing them. Whilst Game Track has a way to log gaming sessions, they aren’t the same as books in Bookmark as a game doesn’t have a defined finish; it isn’t possible to look at the current playtime and see that you are 40% through6. This means that I do not have a way to clearly see what games I have on my plate right now, only games I've recently played.
For the past few years I've manually added games to a database table so they'll show up within Stoutness but I often forget to update it and I don't have a clear view of what's in there as it's all based on numeric identifiers. Whilst I could use the new Shortcuts feature within Sofa to pull out games from a “currently playing” list, it would be much nicer to be able to do this within my own app hence a new lists feature I’ve been working on.
The initial feature set is fairly basic. You can create a list, and you can add games to it. Simple!
I particularly liked using a new feature in iOS 16 to make it so the title of the list can be edited inline7 along with filtering the list below by platform:
In Sofa I used to organise my lists via platform so I’d have "Games To Buy > Switch”, “Games To Buy > PC”, etc. That led to lots of lists but also an issue whereby a game might appear on multiple platforms and thus end up in multiple lists; more than once I ended up getting a game I already owned elsewhere 😬
Instead of having multiple lists per platform, I decided to choose which platforms I was interested in for a game and then use filters within the list to restrict the view. That way I can easily see which games I want to buy on Switch but then if I end up removing it from the list I won’t see the same game as being listed to buy on Xbox. To do this, I refactored the platform selection view (which is used when choosing a game to log time against) and enabled multiple selection of platforms. As the platforms are fetched from IGDB and aren’t necessarily up to date, I also added an “Additional Platforms” button to let me choose from my own list of platforms including things like the Steam Deck which IGDB would lump in with “PC”:
Now that I had a list of games I was currently playing, the next step was to update my Stoutness app to use it. Previously the app was picking a random game from a manually edited database of games I was playing and one from games I had in my backlog. The reason for this is that I’m dreadful for starting multiple games and then just playing the new shiny thing rather than finishing anything; with this system, I would always play at least 30 minutes of the game that was selected ensuring I was always gradually finishing them. One issue with this was that occasionally games would be picked that I wouldn’t be able to play for one reason or another; for example, it might pick a game on my Xbox but my wife may have been using the TV during our downtime preventing me from playing that game. To remedy that, I’ve broken down each platform into three categories – TV (Xbox), Desktop (PC, Mac), and Handheld (Steam Deck, Switch, iOS) – and the app will randomly pick a game from each one of those platforms:
With this system in place, I now get three random games from my currently playing list spread across the various platforms I can play on.
The final issue I had with lists in Sofa was related to games I wanted to buy. I rarely buy games on the Xbox or Switch; the former has Game Pass and the latter is only good for first party Nintendo titles which tend to bypass “to buy” straight to “currently playing” on release. That means the vast majority of my “to buy” list are PC games of which 99.9% will be bought through Steam. This leads to a problem of maintaining two lists as I’d typically add a game to both Sofa and my Steam wishlist making it very easy to go out of sync.
To solve that, I’ve written a PHP script which will check my Steam wishlist every day and then amend my “to buy” list accordingly be that adding a game or removing it. I’ve made it smart enough so if I’ve added a game on multiple platforms it will only remove the Steam-relevant ones (PC, Mac, Steam Deck) but I’ve also added a push notification to let me know if a Steam game appears on Game Pass. Unfortunately there is not a public write API for the Steam Wishlist so I can’t automatically remove games if they are deleted from Game Track. To deal with that, I throw an alert when I try to delete a game reminding me that I’ll need to do it via Steam’s app.
Whilst I still have a few features I’d like to add, I’m very pleased with how this has turned out. I’ve completely removed all of my games from Sofa (which I still use for all my other media backlogs) and now have an automatically updating wishlist, a clear overview of what I’m playing, a filterable list of games I want to buy, and a random selection of three games I should play each day 🎮
Music Library Tracker v2.0.2
A very brief note to say that I’ve released a bug fix update to Music Library Tracker that resolves an issue which was causing Spatial Audio tracks to flip-flop between “downgraded” and “upgraded”. The scanning logic was all working correctly but as I was using a Set rather than an Array it was possible for tracks to be scanned in different orders; if this happened over multiple background processes (i.e. if you had a very large music library) then the app would think a track had been removed from Spatial Audio when in fact it hadn’t.
Apologies to all those affected and my sincere thanks to Steve Martin for helping test multiple builds!
On a related note, I saw a nice mention of the app this week over at Tom’s Guide:
Music Library Tracker is a third-party app for iPhone and iPad that has been developed to integrate with the Apple Music library to track spatial audio content changes. As an Apple Music subscriber, it will automatically find out which of the tracks and albums in your music library are also available in spatial audio without having to carry out lengthy searches of your favorite artist's back catalog. It costs $3.99 / £3.99 via the iOS app store — but if you don't want to pay, you can follow the developer's Twitter account to keep track of new spatial audio releases.
🥰
Receipt Printing from macOS
I mentioned in the last issue that I’d recently bought a receipt printer and was looking to set up a Mac app to send it ZPL commands for custom printing. The printer in question is the Zebra ZQ220 Plus and it turns out it does not use ZPL but the older CPCL programming language instead 🤦🏻♂
In any case, I was able to knock up a quick native SwiftUI macOS app to send commands to the printer. I haven’t done much with it yet but the basics are:
Use a
CBCentralManager
instance to scan for Bluetooth peripherals and display them in a list (I automatically remove anything not matching the name format for a Zebra printer so I don’t have lists of all the devices in my house)Connect to the peripheral and request it’s services based on a specific UUID for these types of printers ("
38EB4A80-C570-11E3-9507-0002A5D5C51B
")Check it’s services to see if there is a corresponding write characteristic based on a specific UUID ("
38EB4A82-C570-11E3-9507-0002A5D5C51B
")Send a string of CPCL data to the peripheral from step 1 via the write characteristic from step 3
The printer prints!
And that’s about it for now. I’ve still not decided fully what I’m actually going to do with this printer yet, I’ve just always wanted one for some reason 😂 It might be that I’ll set the app up with some kind of notification trigger so I can issue print commands, perhaps in the morning to create a list of tasks. I also need to get to grips with the CPCL Programming Manual which weighs in at 497 pages!
For now, I’ve put the code8 for the macOS app up on GitHub and will endeavour to come back to this once I’ve got a clearer idea of what to do with it.
Waking Up Shortcut
In the last issue I demonstrated how I had created a custom “Bedtime” focus mode in order to get around some restrictions in using the built-in Sleep focus mode with Shortcuts (specifically that there was no way of detecting when the mode was disabled as the “When Waking Up” command only triggers if you’re using the full bedtime functionality).
To solve the first problem, I removed the Sleep focus mode entirely and created a new one named “Bedtime”. I set it up so that when this is activated my iPhone wallpaper is turned to black and Cinema Mode is enabled on my Apple Watch. I then reverse this when Bedtime is deactivated and rather than having my shortcut run at that point I instead set the automation to open the AutoSleep app; I then have an automation for when AutoSleep is closed which runs my shortcut.
This works great as now when I wake up I turn off the Bedtime focus mode which immediately opens AutoSleep, I refresh the app so the data is all up to date, and then I swipe back to the home screen at which point my shortcut runs in the Dynamic Island and sends everything to my server. Perfect!
This has all been working fine but I noticed a few days ago whilst digging through the Health app that my Apple Watch Ultra was no longer monitoring my Wrist Temperature. This is because your temperature is only recorded whilst you’re asleep and have the Sleep focus mode enabled 🤦🏻♂
I obviously want to record this information so I needed to go back to using the Sleep focus mode and come up with a new way to run shortcuts when I wake up9. Whilst browsing through the available triggers, it occurred to me that my phone is always on a MagSafe charger at night so I can run a shortcut when the phone is no longer charging:
As my phone can be used on chargers throughout the day (most often in my car), I check the current focus after the phone is disconnected from power and then only open the AutoSleep app if the Sleep focus mode is currently set. I then turn off the Sleep focus mode. As per the last issue, a number of shortcuts then run once I have left the AutoSleep app.
This is now a much more “magical” experience as previously I was turning off a focus mode in order to get my day started which meant faffing around in Control Center. With this shortcut, I just take my phone off the MagSafe charger and everything runs automagically. Perfect!
HomeKit Secure Video
I’ve been a Ring user since 2017 with the Ring Pro doorbell, Floodlight Cam, and Spotlight Cam. Whilst Ring have promised to add HomeKit support multiple times over the years, it has never materialised. For much of this time, I’ve been using Homebridge on my Mac Studio with the homebridge-ring plugin to get a basic integration which will trigger my HomePods and provide a video feed on the Apple TV when the doorbell is pressed (along with video feeds for the external cameras). The problem is that this is a poor solution that frequently breaks and is prone to very long delays. My floodlight cam also developed an annoying issue of sounding its siren for no particular reason…
Due to this, I’ve never really been pleased with my Ring setup (especially as I had to pay a subscription fee for each camera) but there wasn’t anything better out there until HomeKit Secure Video came along in 2019. This allowed video to be streamed directly to your iCloud account ensuring better security but also some fancy new features such as face and parcel detection. Whilst there have been a few supported doorbells over the years, none of them (such as the Wemo Smart Video Doorbell) are available in the UK making them an expensive and risky choice if you’re shipping them over from the US.
That was until the surprise announcement of the Aqara Video Doorbell G4 last month. It’s nearly half the price of the other HomeKit Secure Video doorbells but also came with additional features such as being able to work purely on 6 x AA batteries. As it was available direct from Amazon, I bought it immediately knowing I could return it easily if there were any problems. I chose to wire it in as it was a straight swap with the Ring Pro; even the drilled holes aligned! So far, I am incredibly impressed. The camera feed is sharp and connects almost instantly whilst the Apple features such as face detection work exactly as advertised. I’ve seen some people online having connection issues but this seems to be if they’re running on batteries. Another common complaint is that this is a 1080p landscape camera so parcel detection likely will not work as it probably won’t see the floor; I wasn’t too concerned about this as the delivery companies in my area always leave parcels around the back (which I’ve got covered in a second). One thing to note is that it comes with an indoor chime which I initially didn’t plug in as I didn’t have a use for it; this is actually mandatory as it’s a repeater unit that can house an SD card for local storage. Fortunately you can disable the chime within either the Home or Aqara apps.
With my doorbell switched over, I started researching if I could get any exterior cameras with the same HomeKit Secure Video support. Previously I’d only been looking for doorbells so it had completely passed me by that there were a ton of external cameras available. I ended up going for the eufyCam 2C (£190 on Amazon UK but there is a £30 off voucher currently reducing it to £160) which came as a pack of two battery powered cameras along with a central hub (Homebase 2) that they connect to. The setup is straightforward with the hub being networked via ethernet and then added to the Home app; you then press a button on the hub and one on the camera to link them together10. The cameras themselves are threaded onto a basic external fixture which means they're easy to take down to charge them (every 6 months allegedly) but also does mean they'd be easy to steal... I mounted mine high up so somebody would at least need a ladder 😂 I was a bit worried about how the quality would be bearing in mind they're battery powered and do not come with an external light but they have completely surpassed my expectations. The video quality is massively superior to the external Ring cameras, especially the nightvision, and notifications and time to connect are fast. Again, HomeKit Secure Video shines with easy detection of people, vehicles, pets, and parcels along with an easy interface for scrolling back through recorded events.
Overall, I am very pleased with the switch away from Ring and would definitely recommend trying out the Aqara G4 and the eufyCam 2C if you’re in the market for this kind of equipment.
Substack Notes
Yesterday, Substack launched their new “Notes” feature which is something of a mixture between traditional social media and a forum:
It’s a place where you can share links, short posts, quotes, photos, etc. I’m probably going to use it to post a few sneak peeks of things I’m working on and to answer any questions you may have.
To join the conversation you can go to substack.com/notes or find the new “Notes’ tab within the Substack app (make sure you’ve installed the latest update). As a newsletter subscriber, you’ll automatically see my notes. Feel free11 to like, reply, or share them!
Recommendations
Video Games
Anno 1800 - I started playing this on PC in 2021 and absolutely loved it. Last year, I bought all the DLC during the Black Friday period and now I’m finally back to playing it a bit too much (the game literally told me “you’ve been playing for a while - why not go and get a coffee?” 😂). It’s a city building affair with the twist that you need to balance a number of production lines to fulfil your citizens basic needs. Kind of a cross between Factorio and SimCity with a bit of naval combat thrown in if you want it. I love this game.
Wo Long: Fallen Dynasty - A Souls-like game which takes elements of Dark Souls and Sekiro to create an interesting set of fighting mechanics. The spirit meter takes some getting used to but works really well as a way to balance blocking, parrying, stamina, and magic usage. I also really like the system of banners to ensure you keep exploring. A difficult but rewarding game. Available on Game Pass.
The Murder of Sonic the Hedgehog - This was an April Fool’s joke that ended up being real. An Ace Attorney style murder mystery in which Sonic is dead and you’ve got to find out whodunit. I got through it in around 90 minutes and really enjoyed it. It’s free on Steam, works great on Steam Deck, and is powered by Ink!
Board Games
I spent a few days visiting my good friend John in Stockholm in which we played 8 different board games. I’ll briefly go through each of them:
Eclipse: Second Dawn for the Galaxy - If you took the video game Stellaris and made a lighter version of it as a board game you’d end up with something like this. I love this game so much, especially how it comes with neat little trays to store all the components for a very quick setup process. Easily one of my top 3 board games of all time.
Dinosaur Island: Rawr ‘n Write - As the name suggests, this is a roll and write spin-off of Dinosaur Island that I really enjoyed. John’s take was that it was a bit too complicated for a roll and write but not complex enough to be a full board game; I liked the added complexity myself and am definitely going to be playing a few solo games of this soon.
Marvel Dice Throne - A 1v1 card game with a predesigned deck based around a Marvel character. I chose Dr Strange and had a great time as it felt very much like playing a blue deck in Magic: The Gathering (my particular wheelhouse). The 8 characters in the game weren’t the ones I’d pick from the Marvel universe but it was a fun game for an hour.
Tainted Grail: The Fall of Avalon - This was the largest game we played and one we’ll likely continue playing online. This is the first of the big narrative games that came with a Choose-your-own-Adventure style book to guide your interactions. It has a really interesting battle mechanic in which you build up chains of cards to determine the outcome with a similar system for diplomacy (I love the idea of diplomacy being a literal battle of words). There was a particularly memorable moment in the game in which I tried unsuccessfully to sway a mob, then failed again, then failed to fight them, then failed at some exploration, before running back in the nick of time with a literal holy grail that finally swayed their opinion of me.
Cartographers - Another roll and write, this time about drawing maps. I’ve wanted to play this for quite a while and was not disappointed. There is an iPad version of the game but it’s a little rough in the design department for my taste. I’ll definitely pick up the physical copy and play it again.
HEXplore It: The Domain of Mirza Noctis - We purchased this game during the weekend and got it all set up but the rules were a little more complex than we’d bargained for. We played for an hour or so and enjoyed it but we’d got some of the rules wrong which meant every combat encounter was basically unwinnable. There’s definitely some good potential here though and I really want to give it another play if we can find a way to transfer it online.
Darkest Dungeon - You may remember me going through an app I’d built for this in the last issue. I was still working on it right up until the last minute (literally the morning we were due to play) but I’m happy to say that it worked really well. I’d added some music and narration from the video game which added the right ambiance (“Back to the pit!”) and made the gameplay much faster. Our second quest left a sour taste as the randomness of the exploration meant we ended up taking a lot more damage than we probably should have. I’m going to play some more of this solo now that I’ve written the app, but I’ll probably take a break for a couple of months as I’m sick of the sight of that rulebook 😂
Zombicide: Gear Up - Our final roll and write of the weekend, this one is based around fighting an oncoming wave of zombies so you’re drawing damage rather than drawing maps. I’m not a zombie guy so the theming did nothing for me but I like the gameplay concept.
Music
So Much (For) Stardust by Fall Out Boy - I’ve been a big Fall Out Boy fan for nearly 20 years at this point but I wasn’t so keen on their last album, 2018’s Mania. Fortunately their new album is on a par with Save Rock and Roll or (my personal favourite) Folie à deux. There are lots of great tracks on here; Hold Me Like a Grudge, Love From The Other Side, and the pandemic referencing What a Time To Be Alive being particularly notable. I could have done without the Ethan Hawke bit from Reality Bites but I can’t fault the rest of it. Available in Spatial Audio!
Books
Tress of the Emerald Sea by Brandon Sanderson - I picked this up as part of the Surprise! Four Secret Novels Kickstarter of which this was the first book released on the 1st January. I can’t remember the last time I noted so many quotes in my Readwise account for a single book12! It’s funny, touching, and has, as all Brandon Sanderson novels do, an interesting and unique magic system. Highly recommended.
Roadmap
The roadmap is my way of committing to what I’m going to do before the next issue:
16th March - 12th April
Complete the Darkest Dungeon app ✅
Work on the Board Game Lists app ✅
Have Music Library Tracker v2.1 ready for submission to the App Store ❌
Build a Mac Catalyst app for sending commands to my receipt printer ✅
I didn’t do a great deal on the Board Game Lists app but just barely enough for it to qualify for a green tick 😅 - details on that coming next issue. Music Library Tracker v2.1 is not ready but I did get a v2.0.2 bug fix release out so that counts for something!
13th April - 10th May (Issue #9)
Complete v2.1 of Music Library Tracker
Finish the main list feature of Board Game Lists
That wraps it up for this issue. I hope you found something of interest and that you’ll be able to recommend the newsletter to your friends, family, and colleagues. You can always comment on this issue or email me directly via ben@bendodson.com
To be fair, this was developed when SwiftUI was quite young and there weren’t any 3rd party graph frameworks, let alone the new Swift Charts framework from Apple.
Scales! Get it?
That and I really don’t want to run a marathon.
🎶 I don't care for sherry, one cannot drink stout, And port is a wine I can well do without, It's simply a case of chacun à son goût 🎶
The Shortcuts app does not de-duplicate steps so if you use that you’ll get an inflated step count from the combination of both your iPhone and Apple Watch; my app de-duplicates the data before exposing it to Shortcuts.
You can get a rough approximation from websites like howlongtobeat.com and some games do show your percentage completion within their save screens but those aren’t nearly as accurate as “I’m on page 228 of 349” nor can they account for non-linear games that don’t have a fixed ending or games that may require multiple playthroughs.
Unfortunately there is a bug in that the pencil icon disappears from the rename button when you add additional buttons to the list. If anybody knows how to fix this, let me know!
The code “works” in the sense that if all the stars align it’ll do what it’s supposed to. There is no error handling though so you’re on your own if nothing happens 🤣
I go into this in more depth in the last issue but I’m running a specific shortcut in the morning to sync up all the data from my iPhone to my database in order to power the Stoutness app.
Additional cameras are available for £80 each (currently £70 on Amazon UK with a £10 discount voucher)
I always hate the expression “feel free”. “Hey, feel free to do this thing that benefits me” - it’s weird, but people do it so I should use it more 😂
“The girl wondered why men so often used food to describe women’s features. There was a hunger to such men that was best avoided.”