What I… (July 2015)

Welcome back to another crazy part of the “What I…” series ;) No dog this time.

… Did

The Jailhouse Dogs, Graz

Playing Piano for The Jailhouse Dogs
Because their regular pianist couldn’t make it, I had to jump in. We played the season’s opening for Clocktower, a Harley-Davidson dealer in Graz, Austria. I hadn’t played the piano since the last time I had to jump in for him, and that was in the summer of last year, so I was quite out of practice and I totally screwed up the intro of Status Quo’s “Rockin’ All Over The World”. No one noticed though, except the band of course, and we all had a good laugh about it. Laughing, we almost couldn’t play the song, but we pushed through. The rest went fine. I miss playing the piano regularly.

Yoink About Window

Working on an update for Yoink (click)
Besides a substantial update for ScreenFloat, I’ve been working on an update for Yoink, mostly bug fixing (for example, see this blog post about a curious bug that occurred with webarchives), performance and efficiency improvements (for example, Yoink will no longer try to create QuickLook previews for folders and apps, because those are just icons anyway. It’s not a big thing, but for a lot of dragging, it might make a small difference). Also, CPU usage shouldn’t rise to 100% anymore when accepting promised drags – another battery saver.
I’ve also included the new About window that I introduced in Glimpses and a new splash screen that’s similar to the one you can find in Glimpses as well.
I’m currently waiting for translations of the splash- and about window and then I’ll be able to release it, hopefully next week.

By the way, it’s been on the Mac App Store front page for a while, and it makes me very happy to see it there, in the “Get Stuff Done” category and is in great company – MindNode 2, OmniFocus and Evernote, to name a few.

Stationary Bike (click)
I’m not a sporty kind of guy, I’m not into sports of any kind – in short, I consider taking a brief walk working out. But it occurred to me that sitting in front of a computer all day and not doing anything to counter that could lead to a horrible, sudden death.
So I decided to use my girlfriend’s stationary bike and ride it for an hour every workday. It’s been going well so far (I started two weeks ago), cycling for 22km a session. It’s a good tempo for me right now and I feel better already.
Although they are quite pricey, I’d love to get a standing desk, as I hear good things about it. Perhaps one with a built-in walking thingy.

I don’t use any fitness trackers or anything like that, I just ride an hour and am done. If Apple sold its Apple Watch in Austria, perhaps I would have picked one up, but it’s the second time now Austria’s been dumped from their release list. Kind of annoying, in more than one way, considering I might want develop software for it.

… Downloaded

Alto's Adventure

Alto’s Adventure (click)
Admittedly, I downloaded this game for iOS not this month but about the time when it was first released, but it received a nice update recently and I’ve started playing it again. It’s a lot of fun and I can only recommend it.

… Read

The Reconstruction of Lara Croft – Rise Of The Tomb Raider (click)
A very interesting article about creating Lara Croft for her latest instalment of Tomb Raider.
At one point, they realized that Lara Croft was not Lara Croft anymore, but Camilla Luddington, the woman portraying her for motion capturing.

… Listened To

Welcome To Macintosh Podcast Episode 3: Trip to alphaSyntauri (click)
Guest starring Charlie Kellner, an Apple employee, mostly talking about the early days of computer audio.

… Watched

How To Get Your App Noticed By The Media (click)
A very good talk by Peter Cohen (Mac Managing Editor at imore, @flargh on twitter).

Broken Age Documentary (click)
Being a backer of the Double Fine Adventure (now known as Broken Age), I had access to all the videos when they were posted, but now they are also available publicly on their YouTube channel and I definitely recommend watching it if you’re at all interested in how a game is produced and comes to live.

… Ate

CurryChicken Curry with Rice, Roti bread and green salad

… Went to See

Us and Tom Cruise at the World Premiere in Vienna
Us and Simon Pegg at the World Premiere in Vienna

The World Premiere of Mission Impossible: Rogue Nation was at the Vienna Opera House and my girlfriend and I were lucky enough to win two tickets to the fan zone in front of it, and even luckier to get a spot in the first row, so we managed to take pictures with Tom Cruise and Simon Pegg and, of course, get their autographs. A very exciting day, something that definitely doesn’t happen every day, especially not in Vienna ;)

Security-Scoped NSURL bookmarks and Safari’s webarchive files

It was a bug I’ve been carrying along for quite some time in Yoink. But I finally found the culprit: I’m looking at you, OS X sandbox.

Webarchive opened after bug occurredA webarchive created with Safari, after a security-scoped NSURL bookmark was created for it.

The Bug and its Detection

As it happens (sadly), not I discovered the bug, but a customer and user of my app Yoink encountered it. The reason being, I rarely handle .webarchive files (if at all) – webarchive files are created when saving a website in Safari, for example – but one of Yoink’s users, Christoph, appears to have to deal with them regularly.

The bug itself is described fairly easily. You have a .webarchive file you’d like to move using Yoink. So you drag it onto the app and then move it from Yoink to the actual destination. Business as usual.
Only that now, instead of opening the webarchive in your standard browser when double-clicked, above’s warning is shown.

There’s two baffling things about this warning:

  1. It looks like you’re trying to launch an application instead of just a file (“from an unidentified developer”)
  2. The creator of the file seems to have changed. Instead of Safari, it now says “BugReport-WebArchivesAndNSURLBookmarks” (the app I submitted to Apple to demonstrate this issue)

Highly concerning, to say the least. To some people, it might even look like something fishy is going on.

Hunting Down the Bug

Seeing as .webarchive files are binary property lists (thank you, Michael Tsai (@mjtsai on twitter) for the correction), I tried other property list files (for example, .plist files), but none exhibited the same behavior.

Reproducing it was fairly easy. There’s one pre-requisite for it to appear: that in System Preferences -> Security & Privacy -> Allow apps downloaded from, either ‘Mac App Store’ or ‘Mac App Store and identified developers’ be selected.
Otherwise, Gatekeeper isn’t active and doesn’t react to the issue.

System Preferences - Security and Privacy Settings

At first I thought it happened when moving the file out of Yoink, since that’s where Yoink actually does something to a file – it moves it from one location to another – who knows what goes on behind the scenes there.

Going through the move-code line by line, commenting out stuff I thought could cause this, made no difference what so ever. Create a new webarchive, move it using Yoink, and get the warning again. Rinse and repeat.
With stuff like this, I get annoyed easily, so my patience usually goes out the window after a couple of alterations to the code.

It was only after the billionth time that I considered it might happen when a file was added to Yoink, not moved from Yoink.

Going through the same process as before, I went through the code line by line, trying different things.

With a recent update to Yoink, the app knows when a file is renamed or deleted in Finder, using GCD (Grand Central Dispatch) and its dispatch sources.
I believed the issue lay there, but after commenting out all of that code as well, it became clear it wasn’t the culprit.

In a fit of anger and a severe feeling of incompetence, I randomly picked at the code (I know, highly professional. But I’m using version control – all is well, right?).

To my surprise, when I removed the code responsible for saving Yoinks files over relaunches of the app, the issue went away.

Security-Scoped NSURL Bookmarks

For a sandbox’ed app to keep a reference to a file added by the user beyond relaunches, it has to use what is called a security-scoped NSURL bookmark.

Sandbox entitlements necessary for security-scoped bookmarks

They can be used if the corresponding entitlement (see above) is added to the app’s sandbox entitlements file.

There are two ways a security-scoped bookmark can be created – either with read and write access, or read-access only (NSURLBookmarkCreationWithSecurityScope or it plus NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess).

I don’t know why this causes the issue, but changing the bookmark creation options from read and write access to read-access only fixed the issue (and moving the file is still possible with Yoink). It definitely looks like a sandbox bug to me.

Why should an app-internal bookmark (mind you, it’s only a reference to a file, not the file itself, created from an NSURL object) write to and change the webarchive’s file so that it a) can’t be opened anymore and b) shows the bookmark-creating-app as its creator?

Bug Reporting to Apple

I reported this bug to Apple (rdar://21765077) with an example project you can download here, if you’d like to see for yourself. Feel free to dupe the bug with Apple’s Bug Reporter Tool – I’d appreciate it :)

Now all that’s left to say is thank you for your patience, Christoph. You reported this issue at the beginning of March 2015 and had to wait until now for it to be fixed (and still a little longer because I have to submit the update to Apple for release on the Mac App Store as well). I really appreciate your continued feedback on the app!

Correction

Thanks to Michael Tsai for pointing out on his blog that .webarchive files aren’t bundles, as I falsely stated, but binary property lists.

What I… (June 2015)

Welcome to the 3rd instalment of “What I…” for June 2015 – again a little late this time. I blame having to dog-sit my girlfriend’s mom’s dog “Lucky” ;)

… Did

Dog Lucky

Dogsitting.
Lucky is with us every now and then, but having him here day and night for an entire week is a completely different experience.
For example, getting up at 5.45 sharp to take him out for a walk is something else compared to my typical routine.

ScreenFloat Update (click)
After successfully (and finally) releasing Glimpses, I’m able to move on to the next app that needs updating – ScreenFloat.
I have a couple of nice things planned. That will take some time, though, as I need to restructure some parts of the app, for example the storage of screenshots.
I don’t have an ETA yet and haven’t even started coding yet, I’m very much still in the planning stages and code-reviewing.

New App for Mac (and possibly iOS)
Another reason I haven’t started coding on the ScreenFloat update yet is that I’ve started working on a completely new app this month.
I like working on side-projects, it tends to restore my energies. Sometimes, working on an app that you’ve been working on for quite some time can become unexciting. At times, you want to do something else.
So projects I work on on the side are a good way to get my head out of what I should be working on and ‘reboot’ so I can return to, in this case, ScreenFloat with fully recharged batteries and a fresh eye at things.
Regarding the new app itself, it’s too soon to share anything about it, other than that progress is going quite well. I’ve been working on a custom UI for it and it has been taking a lot of time. It still is ;)

… Didn’t Do That I Had Planned

Post about ESSAudioWaveView
In my Mac app Glimpses, that turns your photos and music into stunning still motion videos, I use a piece of custom UI called ESSAudioWaveView, and it allows the user to select a portion of a song to be selected and used for the video.
I had planned to post about it this month but time wasn’t on my side.
It’s on my list, and perhaps I can do it in July. It will be a multi-part series.

Start coding work on ScreenFloat
Having gotten distracted with the new app I wrote about above, I didn’t get as much work done on ScreenFloat as I had hoped and wanted.
On the other hand, having updated Yoink to version 3, Transloader for iOS with a Today Widget and Action Extension, and Glimpses 2.0 in the last couple of months, I just needed some time to get away from my existing apps and do something else for a while.
A new app is always good therapy ;) 

… Downloaded

Gestimer Icon

Gestimer (click)
Developed by fellow Austrian Martin Nguyen, this Mac app sits in your menu bar and lets you quickly create short-time reminders (for example, take the dog for a walk in 30 minutes).
It has a great UI and I suggest you go check it out :)

LEGO Jurassic World Icon

LEGO Jurassic World (click)
As soon as it was announced, I knew I had to get it. And I wasn’t disappointed.
I played LEGO Star Wars, LEGO Indiana Jones and they were just plain fun and entertainment, with a unique style of humor.
The only thing that, “uhm, urr, staggers me” (inside joke here) is their use of in-movie-audio for dialogs. I often have a hard time understanding what is being said – perhaps they should have play-tested this a little longer and adjust the audio levels here.
Anyway, I’m at the beginning of the second movie now, ‘The Lost World’, and can’t wait to play again.

… Read

Link: The Process Behind Putting Firewatch On Stage At E3 (click)
Written by the Campo Santo team who are responsible for the game Firewatch which will be released some time in the future (in case you don’t know, the well-known Mac software company Panic, Inc. acts like a sort-of-publisher for the game), this blog post gives a look at what goes into a E3 demo. A very interesting read.

Link: An Oral History Of Deus Ex (click)
Fifteen years ago, Deus Ex was released. The girls and guys of Gamasutra sat down with the project director, lead programmer, composer and lead writer of the game, trying to “shed some light on how this seminal game was developed”.

Link: Postmortem: Blizzard’s Diablo II (click)
Also fifteen years ago, Diablo II was released – one of my (if not the) all-time favorite games I ever played. This is a post-mortem of Diablo II, written a couple of months after Diablo II was released, back in the year 2000.

We Don't Need Roads Book Cover

Book: We Don’t Need Roads – The Making of the Back To The Future Trilogy (click)
As the title says, a book about the making of the Back To The Future movie trilogy. Based on interviews with the people who made the movies, Robert Zemeckis, Bob Gale, Christopher Lloyd and countless others.
The cover looks great. I guess the way they figured, if you’re going to make a book cover, you better do it with some style!

… Listened To

Der Übercast Episode 32 (click)
A german podcast (alternatively with video). In this episode, the guest is Thorsten Lemke, the legendary developer responsible for Graphic Converter.

… Watched

WWDC Sessions (click)
Of course, as always with WWDC, there’s plenty of new stuff and with Apple posting the sessions as videos online, it’s very easy to get caught up with everything that’s coming.
My favorite sessions are:
– Session 102; Platforms Sate of the Union
– Session 506; Editing Movies in AVFoundation
– Sessions 603 and 607, 604, 606, 608; (What’s New in Metal, SpriteKit, SceneKit, GameplayKit) – Even though I don’t work on games right now, these sessions are always some of the first I watch
– Session 225; What’s New in NSCollectionView
– Sessions 704 and 715; What’s New in CloudKit and CloudKit Tips and Tricks

Images

Jurassic World (click)
What Jurassic Park sequels have taught me is to go into these movies with very, very, very low expectations. So I did. And what happened? I actually found it enjoyable.
Please do not read on if you haven’t seen the movie yet but plan to, there might be spoilers from here on.
Spoilers to come…
Still to come…
One more for good measure…

Here we go:
Forget the ‘love story’ – it’s totally inconsequential and unnecessary.
Forget the ‘brother story’ – it’s completely tacked-on.
Forget the characters – they’re totally underdeveloped.
Forget the ‘dinosaurs as weapons for the army story’ – sucks.
Forget the ’training Velociraptors like dogs’ thing – sucks big time.

With all that, I still found it to be enjoyable and entertaining. I can’t exactly put my fingers on it, but it’s got some good action, suspense and dinosaurs.
Perhaps it’s enjoyable to me because it’s the first ‘Jurassic’ movie I’ve seen in the cinema.

Dil Dhadakne Do Movie Cover

Dil Dhadakne Do (click)
A very funny comedy about a dysfunctional Punjabi family on a cruise trip.
My girlfriend wanted to see it and she was not disappointed – and neither was I. She loved the songs and dance numbers.

… Ate

Lemon Curd Berry TrifleLemon Curd Berry Trifle

… Went to See

IMG 9986Carnuntum, an archaeological site near Vienna, Austria