What I… (November 2016 – January 2017)

In  “What I…”, a monthly column, I take a look back at what went down over the course of the passed month.

As you can tell by the title of this blog post, I missed the last two months – my apologies.
It’s partly that I’ve been busy and partly that I couldn’t really get into my blogging mood and -mindset.
But now I forced myself to finally get down to it, so here’s what I…

… Did

Touch Bar Support for Glimpses (website, mac app store)

On a hunch that Apple would show-case apps that adopted the new MacBook Pro’s Touch Bar on the Mac App Store, I set out to add support for it to my still motion video app, Glimpses.
The API is lovely, so I made progress fast – implementing and testing took about 2 days altogether.
Touch Bar in Glimpses allows you to import photos from flickr or Instagram, sort your photos and adjust your project’s settings and more – all without having to look up from the Touch Bar.

Glimpses Touch Bar Support - Import from Flickr

Sadly, it didn’t make the cut for Apple’s “Enhanced for Touch Bar” Mac App Store-feature – even begging didn’t help, like, at all…
I wish Apple would give some feedback to developers as to why an app was (or wasn’t) chosen – does the app just suck? Does it not sell enough? Is the rating too low? Does the Touch Bar implementation suck?
Nonetheless, now I know about the Touch Bar APIs and I can put that knowledge to good use in some of my other apps for sure.

Released Yoink v3.2.1 (website, mac app store)

A simple bugfix update, version 3.2.1 fixes a bug with “private” dragging pasteboards, reacts to memory pressure events and cleans up stuff it doesn’t need and fixes a nasty bug where the video in the preferences’ “Behavior” tab would play, even if the preferences window was closed.

Worked on Transloader 3 (website, mac app store, ios app store)

Right after implementing Touch Bar support in Glimpses, I took to Transloader to see how (and if) it would work there, and I think can make things more accessible, like when switching between different views (these GIFs are of a software that’s still in development, so things might change before release) :

Touch Bar support in Transloader 3

or when assigning a download to different Macs:

Touch Bar Support in Transloader 3

Other than that, I’ve been spending a lot of time on the “backend” (read: CloudKit) side of the app – the stuff that should just work and the user never gets to see. I’m finally happy with the approach I’m taking (which I wrote about here), so now I can polish it up.
I’m also working on the UI of course and am playing around with alternate progress bars instead of Apple’s standard progress bar UI:

Transloader Progress Bars

It’s very easy to see if a download has succeed, failed or was cancelled, or how far a running download has progressed without having to read the status below.
Transloader 3 is progressing slowly but nicely, and I hope to be able to make an announcement in the first half of 2017 (yes, that’s very vague, but I’m not good at keeping my own deadlines and I don’t want to commit to a date too early).

Worked on someone else’s code base

For someone else’s iOS app (which I can’t talk about), I had to work on a very complex code base I was completely unfamiliar with.
One part of the complexity comes from its very extensive sync API (basically anything you do in the app is synced back to the server) and knowing the current state of data in the app, the other part is that it uses Core Data, which I only ever read about but never actually used.
Naturally, I had to go through a pretty steep learning curve (including Core Data), and it didn’t help that the initial coding was outsourced to a seemingly unexperienced developer from India, as some parts of it are very, very confusing and sometimes implemented twice or more.
Incidentally, for Christmas, my brother gave me the book “Your Code as a Crime Scene”, which helped identifying parts that needed attention and belonged together – I can wholeheartedly recommend that book.
The app is a very compelling and interesting project and gets me to think about another app besides my own – a break can do wonders on how you view certain problems or issues.

… Thought About

Yoink Removed from the Mac App Store’s ‘Invaluable Utilities’ Feature

After having been featured in ‘New Year, New Habits’, a front-page feature of the Mac App Store all through January 2017, Yoink was (silently) removed by the Mac App Store’s Editorial team from its ‘Invaluable Utilities’ feature.
I noticed by chance, and this pretty much sums up how I reacted when I saw it:

The Simpsons, Ralph gets his Heart broken by Lisa

Of course I went on to iTunes Connect to see if everything was in order with the app – it was – so I decided to write Apple directly (I don’t have any contacts in their editorial team – does anybody besides the big guys? I just used iTunes Connect’s ‘Contact Us’ form).
Unsurprisingly, they couldn’t tell me anything. I thought perhaps they could tell me the app was not updated frequently enough (which I doubt, since other apps in that feature were last updated earlier than Yoink) or that it didn’t receive enough ratings, but I got the standard “the editorial team giveth, the editorial team taketh away” response. I really wish Apple were more transparent here – it would only do the developer economy good, knowing where you’d do well to improve.
Anyway, the feature has been removed from the Mac App Store entirely now, so perhaps a new Utility-promotion is coming our way on the Mac App Store soon?

… Downloaded

Oceanhorn IconOceanhorn (app store)

A great game I’m playing on my Apple TV – always reminds me of playing the Zelda games with my cousin. Good times.
At first I thought using the Apple TV Siri Remote to play it would be clumsy and a turn-off, but it works surprisingly well. I’m not quite done with the game yet, but I’m very close to the end. 

Stardew Valley IconStardew Valley (gog)

If you don’t have time to spare (which I don’t) or accidentally spend way too much time on that particular game you just can’t get enough of (which I do), do not – I repeat: do not – get this game.
It’s awesome and will make hours seem like minutes. Seriously.

Water Minder IconWaterMinder (app store)

I’m notoriously under-hydrated. I drink some coffee in the morning and maybe one, or two glasses of water over the course of a day. Now, that might be enough, as some say, and it might be way too little, as say others.
I’m giving it a try and so that I can keep track of things, I’m using WaterMinder – an app very well designed to take care of these water-intake-tracking-needs. 

… Read

The Andromeda StrainThe Andromeda Strain (ibooks store)

“Five prominent biophysicists have warned the United States government that sterilization procedures for returning space probes may be inadequate to guarantee uncontaminated re-entry to the atmosphere.”
Michael Crichton sure was a genius.

Ancient Aliens Book CoverAncient Aliens – The Official Companion Book (amazon)

I gave this book to my girlfriend Britta for Christmas and somehow wound up reading it before her – even though I’m quite skeptic about these things (aliens being the ones who created us thousands of years ago), I still enjoyed reading it a lot – it gives you a different perspective on things.
“Transporting readers around the globe, Ancient Aliens® explores the fascinating enigmas and mysterious artifacts our ancestors left behind, from incredible objects to amazingly accurate ancient maps; from the Great Pyramid of Giza and stone megaliths at Gobekli Tepe to the Nazca Plains and mysterious structures of Puma Punku.”

Your Code as a Crime Scene Book CoverYour Code as a Crime Scene (pragmatic programmer)

As I stated before, I received this book from my brother for Christmas and read it in about two evenings.
“In this book, you’ll learn forensic psychology techniques to successfully maintain your software. You’ll create a geographic profile from your commit data to find hotspots, and apply temporal coupling concepts to uncover hidden relationships between unrelated areas in your code.”

Designed for Use Book CoverDesigned for Use (pragmatic programmer)

“Expert developer and user interface designer Lukas Mathis gives you a deep dive into research, design, and implementation – the essential stages in designing usable interfaces for applications and websites.”
I’m still reading it, but already I feel like I know a lot more about how I should go about future projects – BEFORE writing code ;)

The Murder of Roger AckroydThe Murder of Roger Ackroyd (ibook store)

Having read “Death on the Nile” (after having seen the movie like a gazillion times), my mind is now set on reading all books featuring one Monsieur Hercule Poirot by Agatha Christie.
“Village rumor hints that Mrs. Ferrars poisoned her husband, but no one is sure. Then there’s another victim in a chain of death. Unfortunately for the killer, master sleuth Hercule Poirot takes over the investigation.”

… Ate

Nachos with self-made Salsa

Nachos with self-made Salsa

… Went to See

Mariazell, Austria

Mariazell, Austria

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most).
Thank you :)

What I.. (October 2016)

“What I…” is a monthly column where I talk about what’s been going on in my life as an indie Mac and iOS developer during the last month.

… Did

Released Yoink v3.2.5 (blogmac app store, website)

Yoink, an app that improves and simplifies drag and drop on your Mac, has received a maintenance update.
Most importantly (based on the mails I received), this update fixes an issue with Photos.app on macOS Sierra, where Yoink wouldn’t properly accept photos dragged to it.
Additionally, it improves the app’s energy footprint and CPU usage, and fixes a couple of bugs here and there.
The update also fixes my “inactive checkbox” dilemma (see below).

More work on Transloader 3 (mac app store, app store, website)

I started migrating the app’s download mechanism from NSURLDownload to NSURLSession.
It works well (even background transfers), but there are a few caveats with FTP URLs.
Background downloads do not work with FTP URLs, and re-starting them (after they failed, for example) is iffy.
It’s interesting, because if I start an FTP download, stop it, then re-start the download, it often doesn’t work.
But if I start the download, stop it, quit and restart the app and the download, it works instantly. It may be some kind of internal caching in the NSURLSession system for FTP URLs (as http(s) works fine).

Released SiriMote v1.2.5 (website)

macOS Sierra caused SiriMote to misbehave – play/pause and volume up/down would not work properly.
The reason: macOS Sierra has rudimentary support for the Apple TV Siri Remote. You guessed it – exactly those three buttons.
So when you pressed play with SiriMote running, the system would receive the button press and start to play, then SiriMote would receive it and pause again.
SiriMote 1.2.5 disables those three buttons (temporarily while I look into other options) to make it play nice with Apple’s new operating system.

Guest Blog Post: The Story Behind Claquette – Animated Screenshots (blog)

A great post that goes into a lot of detail of what makes GIFs GIFs and creating the Mac app Claquette.
If you haven’t read it, I suggest you do – Thomas sure knows what he’s writing about here.

Blogged: How to badge an App’s Icon in the Dock (blog)

Inspired by a conversation with Jeff Johnson (of ClickToFlash fame), I wrote a quick tutorial on how to badge an app’s icon in the Dock while respecting System Preferences/Notifications’ settings.

Blogged: Follow-Up: Inactive Checkboxes Are Poor UX (blog)

After releasing Yoink v3.2.5, I finally was able to post my follow-up on my “inactive checkboxes” blog post.

Blogged: Yoink’s Revenue a Month After Localizing It (blog)

I saw a spike in Japan and China after translating Yoink into those languages.

… Thought About

Apple’s “hello again” Event

I couldn’t care less about the Apple TV TV app that won’t ever work outside the US anyway (*ahem* Apple News *ahem*), so let’s move on to what mattered (or didn’t).
So, the maximum amount of RAM in the new MBPs is 16 GB, because 32 GB would draw too much power, yet they decided to reduce the battery from a previous 99.5 watt-hour capacity to a 76 watt-hour capacity.
Yes, they couldn’t increase the battery due to in-flight laws, but did they have to reduce it, only to make it a little thinner, and then say 32 GB draws too much power? How’s that designing “for the experience” of a ‘pro’ laptop?
When the first thing they talk about during the introduction of new hardware is how much thinner it is, you know where Apple’s priorities are.
It’s not putting ‘pro’ hardware into a ‘pro’ laptop. It’s making it look good.
The CPU was not really mentioned in the keynote, so it’s likely not that big of an improvement over the previous generation.
And don’t get me started about the ports. I love Thunderbolt, but not being able to connect a brand new out-of-the-box iPhone to a brand new out-of-the-box MacBook Pro without extra dongles…
What happened to “it just works”? This is what Apple used to excel at!
I’m not saying these machines aren’t good. They probably are the best MacBook Pros (or MacBooks Pro? or MacBook Pro devices?).
But why not make them even better? Do professionals really care about thinner when they’re thin enough already?
I’m writing this on a rMBP from mid-2012 and I still marvel at the thinness of the thing. Why not keep it at that level and improve the performance in a way that blows every other laptop out there out of the water?
Where is the courage to say “it’s as thin as last year, but it’s so much more powerful”?
That being said, I do like some of the stuff they did with those new machines.
I like the Touch Bar and have already started working it into some of my apps (particularly, Transloader and Glimpses – it’s too bad background apps can not really put anything into the Touch Bar).
I like the bigger touchpad.
I like that you can charge it from either the left-hand- or right-hand-side ports.
And, after all, I do like the way it looks.
But why not make the MacBook the thinnest Apple can make, and the MacBook Pro the most powerful Apple can make?

… Downloaded

EasyRes App IconEasyRes (mac app store, website)

This app lets you quickly change your screens’ resolutions via a menu bar item (or the Notification Center).

Screenshot of EasyRes in Action

EasyRes in action (screenshot from the Mac App Store)

It shows more resolutions than System Preferences/Displays, that’s what makes this app very useful.

… Read

Does the Mac Still Matter? (cnet)

“We did spend a great deal of time looking at this a number of years ago and came to the conclusion that to make the best personal computer, you can’t try to turn MacOS into an iPhone.”

Is Metal a Game Changer? An Interview with Feral Interactive (macgamerhq)

“It’s not about making development easier exactly, but the new features in Metal certainly make more games feasible on Mac”

Why Apple’s MacBook Touch Bar was the Right Thing To Do (techcrunch)

“Having a discrete bar that can update with context (…) makes total sense. Far more sense than bolting a touch screen onto a non-touch-optimized OS and forcing you to poke at tiny buttons meant for a mouse.”

Experimenting with App Store Search Ads (glimsoft)

“I’ve been thinking about it some more, and it seems like participating in Search Ads will almost be mandatory, if you want any source of traffic from App Store Search.”

iPhone 7 Plus Depth Effect is Legit (prolost)

“Sometimes that makes the photo prettier. Often, it can make the photo.”

… Watched

Blair Witch Movie PosterBlair Witch (itunes)

Only recently I found out a new movie in the Blair Witch franchise would be released (as it was kept under wraps during production).
I loved the first one and despised the second one, so this movie could have gone both ways. And it did.
I liked it in general, but some elements were just a blatant copy of the original, which is kind of sad. But it was scary, and that was what I was looking for. So the movie delivered, but I still felt a bit disappointed.

… Ate

Krautstrudel

Krautstrudel

… Went to See

Me lying in a coffin

“The Long Night of Museums” – My girlfriend and I went to the cemetery, where you could try lying in a coffin. It’s eerily comfortable.

My girlfriend Britta and I at the Austrian Bundeskanzleramt

We also went to the Austrian Bundeskanzleramt. The chancellor was nowhere to be seen, his office closed. Big let-down. But we got a nice picture out of it.

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most).
Thank you :)

What I… (September 2016)

… Did

Released ScreenFloat 1.5.13 (mac app store, website, blog post)
Just in time for macOS Sierra I was able to release a compatibility update for my picture-in-picture productivity-app ScreenFloat.
As I previously mentioned, macOS Sierra introduces a new sandbox entitlement which prevented ScreenFloat from working correctly, because it prohibited launching an interactive screencapture section using NSTask.
Version 1.5.13 adds that entitlement and fixes a couple of minor bugs along the way, as a good bugfix- and compatibility update should :)

Blogged about Re-Implementing macOS’ screencapture CLI (blog post)
When I first learned macOS Sierra broke ScreenFloat, I immediately switched into my worst-case-scenario-mode and started working on my own implementation of macOS’ screencapture utility – at that point, there was no way to be sure Apple would make that sandbox entitlement public and let developers use it.
The in-depth blog post details what I found poking around in macOS’ screencapture command line utility and how I went about implementing my own solution making it look and work almost exactly like Apple’s solution.

Worked on Transloader 3.0 (mac app store, app store, website)
One of my goals for Transloader 3.0 is to support a multi-Mac environment.
In order to do that, I had to transfer the app’s inner workings from iCloud Key-Value Storage to CloudKit.
The reason is pretty straight forward: Up until now, Transloader sent a URL the user entered for download on a Mac to iCloud, associated with a unique key, something like ‘14225b23-fafb-41cd-be35-461acc583084’.
I would prefix that key with the current state of the download, as to be able to show it in the iOS Transloader UI:

  • no prefix – the download has not yet been received on the Mac
  • dwnld – the URL has been received on the Mac and is downloading
  • dlfin – the download has finished on the Mac
  • faild – the download failed on the Mac
  • –del– – the download was deleted on the iOS device and is to be cancelled and deleted on the Mac

Mind you, this was before I had CloudKit and I had to get the most out of what I was handed. And it worked pretty well, if I may say so. But it was already pretty complex. And when it comes to a multi-Mac environment, it’s not very extensible.
Sure, I could add yet another prefix to specify the Mac, but that’s got head-ache written all over it. Plus, if I’d like to extend the system even further, I’d be in trouble.
Having two prefixes, one to specify the Mac, one for the download state, isn’t something you can easily wrap your mind around, and it’s a nightmare to debug (believe me, I had an internal build of this working). Along with other pitfalls, it just wasn’t worth proceeding with this method.
The beauty of iCloud’s Key-Value Storage is that it syncs “transparently”. You use it like NSUserDefaults (where you might store users’ preference settings) and the OS would sync it in the background, whenever it would see fit. If sync failed, the system would try again at a later point. Beautiful.
With CloudKit, you have to take care of all the syncing (and errors) yourself. But you have so much more possibilities when it comes to your data model.
I now have two record types: ‘Mac’ and ‘Download’. A download record references a Mac record, which lets Transloader know which Mac(s) a download belongs to, and the Mac would take according actions (i.e., start the download).
Furthermore, the download record contains the current download state and additional metadata used internally in Transloader. It’s clean and understandable.
However, what had to happen, happened. In a frenzy of keeping everything in sync, I forgot to put the user first.
The beauty of Transloader is that you could add a URL if you had an internet connection or not and it would sync as soon as an internet connection would be available.
In my first version of CloudKit-based Transloader, I made the user wait for a successful sync: You’d add a URL and instead of adding it to your downloads-list right away, the app would wait to hear back from iCloud’s servers to see if it worked.
That might be (it’s not) OK if you always had a good, working internet connection. But what if you didn’t? Then you couldn’t add the URL, because CloudKit would return an error and tell the user to try again later.
That’s unacceptable. So I refactored the system in an important way:
I separated the sync from the data model. That was my error in thinking.
I thought – sync right away and you won’t run into any trouble, you’ll always be in sync.
But the proper way to handle it is this: Know that the data the user enters is always “right” and worry about the sync in the background. That definitely takes the pressure off.
Syncing should happen instantly, of course, but if it doesn’t because of an error, I don’t make the user wait and the user doesn’t lose the URL. Sync is just retried at a later time.
I also had trouble debugging push notifications. Not because of my code, but because Xcode 7 and/or macOS El Capitan couldn’t cope with maintaining code signing in regards to the Apple Push Service over restarts / logouts of the Mac, so push notifications would arrive at the Mac, but they wouldn’t be forwarded to my app. I even had a system of getting it to work again, after hours of experimentation – Reset to “Don’t Code Sign”, clean and build, Set to “Code Sign Automatically”, clean and build. Tada, it worked again (until the next restart or logout).
In macOS Sierra and Xcode 8, this is a thing of the past and everything is working perfectly. I can finally restart whenever I feel like it.

… Downloaded

Instead of doing my usual round-up of multiple apps I’ve downloaded over the month, I decided to do away with that for good and talk about just one app I’ve tried during the month.
I’m starting with the excellent time-tracking Mac app Timing, by Daniel Alm (@daniel_a_a on twitter).

Timing Mac App IconTiming (mac app store, website)
I’m not doing much time tracking. Maybe because I haven’t done much work for other people I could bill my hours to. Maybe because I like working for a flat-rate.
Or maybe it’s because I haven’t found the right tool for the job. To be frank, I haven’t looked around much, but having found Timing, I doubt there’s any need to look much further.
Timing automatically tracks almost anything you do on your Mac.

Timing in Action

Timing in Action, with color-coded activities and hopefully many billable hours. (Screenshot taken from the app’s website)

When you have the app running, it will unobtrusively track the apps (and its windows and documents) you use as well as the time you spend there – something that can come in handy even if you don’t have the need to bill hours to someone, as it gives you insights into what documents and projects you work on the longest (and where you might be able to optimize your time).
Apps (and their windows or documents) can be assigned to projects or activities so you have a nice group of apps that belong together.
If you’re a software developer, I suggest you check out this page, which will list some of the advantages you get out of tracking your time with Timing – something I plan on doing in the future for sure, even if only to see where I can improve my productivity or fix some (extremely rare) procrastination.
A free trial of Timing is available here, and it’s available for purchase on the Mac App Store.

… Read

Austria: The up-and-coming early-stage investment capital of Europe (techcrunch)
“With Germany to the north and the high-tech Netherlands beyond that, few have paid attention to the rapid changes taking place on the other side of the Alps.”

Providing the Best Possible App Store Experience (omni)
“All of these limitations stem from a single underlying problem: they’re all due to the fixed cost of the original download of the app.”

… Listened To

Steve Jobs at NeXT Introduction Press Conference (youtube)

… Watched

The Adventures of Indiana Jones by Patrick Schoenmaker (youtube)
A beautifully animated short film of my favorite archaeologist.

Mohenjo Daro Movie Mp3 Songs Pk Free DownloadMohenjo Daro (imdb)
An entertaining and thrilling story about Mohenjo Daro’s rise and fall.

Beatles eight days a weekThe Beatles: Eight Days A Week – The Touring Years (itunes)
The movie of the year for me. Granted, I’m a huge The Beatles fan, but even if you aren’t, I think this is a more than worthwhile picture.

Lights out movie poster 2016 by johnyisthedevil da5g865Lights Out (itunes)
A good horror flick with a new concept (“lights out”).

… Ate

Köttbullar

Köttbullar. No, not at IKEA. In Stockholm, at “Restaurang Tradition“. Very good food. Very pricey, too.

… Went to See

Me at Drottningholm, Sweden

Drottningholm Palace, Sweden

Stockholm from Stadshuset Tower

Stockholm, as seen from Stadshuset Tower

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most).
Thank you :)