Total of 274 posts

Herein you’ll find articles on a very wide variety of topics about technology in the consumer space (mostly) and items of personal interest to me.

If you’d like to read my professional engineering articles and whitepapers, they can be found at Control System Space

I have also participated in and created several podcsts most notably Pragmatic and Causality and all of my podcasts can be found at The Engineered Network.

Jony Ive Leaving Apple

Apple announced recently that Jony Ive is leaving Apple. He’s worked there for 3 decades and is 52 years old. Having now read and listened to quite a lot of commentary on the subject, I find it odd how much is credited to Jony. Industrial design alone can not create a successful product. Industrial design often takes a back seat to engineering tradeoffs like cost, manufacturability, repairability and so on, however Apple since their comeback in the early 2000s were happy to put a higher priority on their industrial design than during the boring beige box era of the 1990s. This approach played a part their comeback and influenced the design of other products in the same and similar markets for years that followed.

Jony was the leader of a team of industrial designers and many times the ideas they championed, that would have been shot down at other companies, were upheld and supported at Apple. If you were to take the industrial designers at Apple and put them at Dell, there is no doubt in my mind many of their designs never would have seen the light of day. If you were to take the industrial designers at Dell and put them at Apple, there is no doubt in my mind that their designs would have been supported too, and the resulting products would have been perhaps, almost as successful. But not quite.

Jonys influence elevated several of Apples products and Apple could and did support his team in that endeavour. Industrial design and engineering is a symbiotic relationship and at Apple, Jony was in a position where his name carried some of the success of what was and will always be a team effort. His leaving changes little of the design ethics, principles and focus on industrial design at Apple. It’s an opportunity for other great designers at Apple to step up and out of Jonys shadow.

It seems unlikely that in future roles Jony will enjoy the same success in terms of his designed products sold or product revenue or have the backing of what became a unique relationship he had at Apple. That’s okay - he doesn’t need to. Jony has earned the chance to make whatever he wants - to pick and choose and enjoy design for products more on his own terms than he could had he stayed at Apple. It’s an opportunity that few get.

I wish him all the best.

Thanks Jony.

And for those concerned about Apple…don’t be…Apple will be just fine.

Auto Things Shortcut

I actually automate a bunch of things in my many workflows, but mostly they’re so specific I tend to think most people wouldn’t be interested. This is an exception.

Workflow don’t call it Workflow now it’s Shortcuts is something I’ve at best dabbled with in the past few years. I’ve found in the past few months as I’ve added multiple steps to post-production of my podcasts, that I was occasionally forgetting a few steps from time to time. I started looking for apps that created convenient templated checklists and came up with no really viable out of the box options that appealed.

I’ve been using Things to plan my life and tasks for many years now and having that on all of my devices (iPhone, Apple Watch, iPad and Macbook Pro) is extremely handy to have so rather than change that, I started digging into automating input into Things. I’d read that Things supported a URL Scheme so dove in.

First I built a test JSON Text string that was static, to prove that it would work:

{"type":"to-do","attributes":{"title":"Episode","when":"today","tags":["Podcasting"],"checklist-items":[{"type":"checklist-item","attributes":{"title":"Publish Notes"}},{"type":"checklist-item","attributes":{"title":"Publish Ad-Free"}},{"type":"checklist-item","attributes":{"title":"Test Item 1"}},{"type":"checklist-item","attributes":{"title":"Test Item 2"}},{"type":"checklist-item","attributes":{"title":"Test Item 3"}},{"type":"checklist-item","attributes":{"title":"Test Item 4"}},{"type":"checklist-item","attributes":{"title": "Test Item 5"}}]}}

The shortcut was really simple: The above JSON in a Text field, wrapped with “things:///json?data=[ JSON ]“, feeding into a URL object, then feeding into Open X-Callback URL, no custom callback or success URL and it worked perfectly.

A few experiments and the order of the keys in the JSON weren’t important, so long as the levels conformed with the URL Scheme it worked like a charm.

Creating a more sophisticated Shortcut was a bit more annoying. I’ve attached the Shortcut image and file but to walk through each section and why:

  • List: Some of the shows I edit
  • Choose from List: Prompt the user to pick one from the list, only one though
  • Set Variable (Podcast): As a programmer, I don’t like Magic Variables since they hide their source when you’re visually reading the Shortcut. This variable is the selected podcast from that List
  • Ask for Input (Episode Number): Ask for what episode we’re working on as a user input
  • Text: Here we combine the “Podcast” variable with the text ‘Episode’ followed by the result from the line above (the episode number)
  • Set variable (To Do Main Title): Save the full main title of the To Do List item for later.
  • Text (list of Carriage Return separated items): Building a checklist underneath a To-Do requires a list of items. This will be the template for every checklist. Add/modify as needed in the Shortcut.
  • Set Variable (Checklist Items): Save that checklist
  • Get Variable (Checklist Items): Use that in the next line.
  • Split Text: Using the new line separator (aka a Carriage Return) we split the text ready to run a repeat for each entry in the checklist
  • Repeat with Each: Cycle through each checklist item from the text field
  • Dictionary (repeat until done): Build the JSON dictionary with type “checklist-item”, and “attributes” with a single text item with the Key “title” and the value “Repeat Item” from the repeat loop (aka the actual line of text for this checklist item)
  • End Repeat: What it says on the tin
  • Set Variable (Checklist Items Dictionary): This is now a complete dictionary of all of our checklist items we’ll embed later into the final JSON dictionary.
  • Dictionary: This is our second-level down of the JSON, where we define the To-Do’s Title (saved from earlier), we set the due date to today, then we set an array for what tags we want applied to it. I use an imaginatively named tag in Things called “Podcasting” which is added as a Text entry in the array. You could add more entries for multiple tags if you like.
  • Set Dictionary Value: Adds the Checklist Items Dictionary we created earlier against the key “checklist-items”
  • Set Variable (Attributes Dictionary): Save this to our Attribute level of the Things JSON
  • Dictionary: This is the top-level of our JSON dictionary, where we simply create the item of “type” “to-do”
  • Set Dictionary Value: Adding in our second-level JSON Dictionary we prepared earlier, the Attributed Dictionary under the key “attributes”
  • Set Variable (JSON Output): The final Dictionary now saved as a Variable
  • Text: Build the final text string and wrap the JSON around the URL Scheme
  • URL: Interpret the above Text as a URL
  • Open X-Callback URL: Call the URL, but I didn’t want any custom callbacks or success URLs, because I just didn’t.

And we’re done. Yes I could tidy up some bits and yes you can use Magic Variables and yes I could embed Variables directly rather than Get Variable every now and then, but never mind that. The code is hopefully more readable than most other examples I came across, tried to follow, then just created it from the ground up to make sense.

Finished To-Do List

Hopefully that’s useful for some one (other than just me) at some point in the future that wants to make checklists from a standard template as a repeatable task in Things.

BrusFri Limitations iOS

For several years I’ve been editing all of my podcasts on iOS using the wonderful Ferrite app. For a brief time I trialled Adobe Auditions noise remover and whilst it was excellent the switch to a subscription put it out of reach for me. Switching to Audacity for a time it wasn’t as good however it was passable. Moving to a full iOS workflow at that time was unfortunately not practical so I went without for quite a while.

Then listening to another podcast by Tim Chaten he mentioned the Klevgrand BrusFri audio plugin that was both an independent app for noise reduction in audio, but also an Audio Unit Extension meaning it would work perfectly within Ferrite.

I began using it and have been using it happily for just under a year now, although recently I found some inexplicable audio artefacts when it was used in Ferrite as a plugin. The noise blip lasted about 12 a second, and it was random. I did some research and found that I wasn’t alone - it appeared to be related to the bit depth, sample rate and also potentially the size of the raw audio file Ferrite was using. If you removed the plugin the audio was output correctly, hence it wasn’t a Ferrite problem, but appears to be an Audio Unit Extension integration bug in iOS12 which seems to have been present from that release.

No problem, BrusFri is also an independent app that can be used to import, reduce noise and export the result. Adding this step to the workflow solved the problem and also significantly reduced the Ferrite processing time when exporting the final audio. The noise reducer for 1 hour of raw audio takes about 8 minutes to process in Klevgrand on an iPad Pro 2nd Gen 12.9”.

So far so good, however earlier this year I started to record some longer episodes of Pragmatic. When importing the audio into BrusFri it would spontaneously crash and once it did, attempting to reopen the program would result in an instant crash. The only way to recover from this was to completely delete BrusFri from the device, download and reinstall it again. At this point I began to investigate the app itself and found many others had exactly the same problem.

Not wishing to give up on my amazing noise reducer I iteratively changed every parameter I could think of when pre-converting the raw audio in an attempt to empirically determine the cause of the crash. The aforementioned reinstallation process became somewhat tiring after the 25th time or so.

Turns out the problem stemmed from the length of the audio, not the format. The longest raw audio file I am currently able to import to v1.1.0 of BrusFri is 1hr 40mins. I’ve been working predominantly in WAV but I tried a few other formats and they all appear to work fine provided they’re less than that duration. So for any podcasts that I record, if I want to use non-glitchy noise reduction on the iPad then I need to split the audio into pieces not greater than 1hr 40mins.

Ordinarily I’d throw my hands up in the air and start using my Macbook Pro for noise reduction via Audacity, but it’s not as good as BrusFri and I’ve already paid for BrusFri and it does an amazing job! I’ve contacted the developer however have yet to hear back. Given that the last update to the Noise Reducer was over 1 year ago, I do not hold out much hope for a quick response. I’ll keep you posted.

Optimal Interface Part 3: Devices

To be released shortly