retrospective

Welcome to the first anniversary edition of “What I…”. I can’t believe it’s been a year already, it feels so much shorter.

Another busy month comes to a close.

The bulk of this month obviously went into Yoink 3.2, but with a release also comes all of this other work you need to do – update the Mac App Store page, perhaps add new screenshots, think about keywords, update the website, write a blog post about it or create a newsletter mail… Release-days are busy. Long story short, after the work is done, there is so much more work to do…
Aside from all of that, though, I’ve also been trying to learn and get into Auto-Layout, which I’ve been neglecting far too long only to now realize it’s the most beautiful thing in the world, when it comes to localizing and internationalizing your app. It’s a godsend.

I also had to tip my toes into PHP again. I’ve had to do that every now and then (way back when I was still selling flickery outside the Mac App Store and had to communicate with PayPal somehow), so it’s nice to get back to it and work in a language other than Objective-C for a change. (ahem. Swift. ahem. I’ll have to get to that as well. Any day now.)

Let’s get into what I…

… Did

Finished up and released Yoink v3.2 (website, Mac App Store)
After a long time working on it (I checked, I last updated Yoink early in September 2015), I was finally able to give the green light for the latest update to Yoink.
If you follow this blog, you know what I’ve been through with this release 😉
I blogged about what’s new here.
As far as I can tell, it’s been very well received (I might do a short blog post about some coverage of it later).
Here’s a very nice review of the new version on the Mac App Store:

Review of Yoink 3.2 on the Mac App StoreA recent review of Yoink on the Mac App Store (powered by launchkit.io)

I changed a couple of things regarding Yoink’s Mac App Store page.
I read about ASO (App Store Optimization) and realized I was wasting a perfect opportunity for additional keywords: The app’s display name (the name that appears on the Mac App Store). Up until now, it was just “Yoink” – so I changed it to “Yoink – Simplify and Improve Drag and Drop”. That gives me the keywords “drag” and “drop” for free, so there’s more place now in the actual keywords field.

Furthermore, I gave Yoink much-needed new App Store Screenshots.
This is what screenshots looked like before…

Old Mac App Store Screenshot of Yoink

… and this is what they look like now:

New Mac App Store Screenshot of Yoink

There were a couple of things important to me:

  1. Readability. I don’t know what I was thinking with the old screenshots there
  2. Yoink being displayed running on a Mac.
  3. Improved wording
  4. Kind of a vanity thing, but I wanted to have ESSPurple (my “company color”) in the shots.
I’m pretty happy with how they turned out, especially that they’re cleaner and less busy. I’m not sure what I thought when I created the old screenshots. Those mountains sure draw a lot of attention.

Fun fact: Because so much changed between Yoink 3.1 and 3.2, I actually exceeded the limit of 4,000 characters in iTunes Connect’s “What’s New” section – by 2,000 characters. That was the entire “Bug fixes” section, so it had to go, and got replaced with “Numerous Bugfixes”. There were about twenty, which I’d have loved to list, just to give a complete account of what changed.

Apple’s review process was surprisingly painless (as in, no rejections) and quick (as in, two days. Two!)
I submitted the update early (on April 13th), to make sure that, if anything cataclysmic happened, I’d have enough time to sort it out. Thankfully, that extra time wasn’t needed.
What made me a little concerned was that I introduced two XPC services in this release (one that looks for any Force Touch capable devices and another one that handles newsletter subscriptions).
I thought especially the Force Touch XPC service might give me some trouble.
So I painstakingly explained which sandbox entitlements I used and how, which I think helped a great deal in getting this update reviewed as quickly as it was (plus, lower review times seem to be a trend recently – currently around two days), with no rejections.

Regarding press releases, I’ve made it a habit to send them out a week early with an “embargo”, to give members of the press time to first of all get to the email in time (as they surely receive tons of mails every day) and to prepare something if they liked it. I updated the press kit (nothing major, just added the new screenshots and a .webloc to the Usage Tips page).

Come release-day, I first released the app on iTunes Connect (it always takes a little time for the App Store to “realize” that the update was released). In the meantime I posted the blog entry I had prepared earlier for the update and when I thought the update was populated on the Mac App Store, sent out the newsletter to my subscribers (if you’d like to, you can subscribe here) and started talking about it on twitter and in my Facebook group.

All in all, I’m very happy with how the release went. It can always be better, but I can not complain.

Updated Yoink’s Website and Usage Tips Page (website, usage tips)
Along with the app, I wanted to update the website as well. Mainly because I wanted to mention Force Touch, and partly because the more you scrolled down on the website, the more of a mess it became.
Starting at the top of the website, I decided to move the customer and press reviews down a little. While I think they’re very important, as they show what real people using the app think about it, they’re not as important as an intro to what the app does.
Before (again coming down from the top), you had Yoink’s icon with a short blurb, the download and purchase buttons and right below that, selected reviews.
On the new site, what you see below the buttons is a nice “photo” of Yoink running on a MacBook Pro (with a background image that’s one of the complementary colors of purple to draw attention to it). Then come the reviews.
So now you have an intro to the app and below that, how nice people think the app is. I believe that works much better.
Furthermore, I tried to condense the site a little, it kind of felt like an endless scrolling website before, without real structure, almost like “what else can I quickly paste randomly on this website I think might be important”?
So I introduced “boxes”, like this one, in an attempt to give a little structure to the site:

Yoink Website Box

Previously, the features listed here were in a long list with a couple of screenshots and gifs, not at all attractive. I’m not a hundred percent happy with this either, but if you ask me, it’s way better than before.
I’ve applied the same “boxed” approach to the tips page, in order to condense it a little (it was also a long list) and give it a fresher look, in line with the app’s main page.
Lastly, I’ve added a newsletter signup form to the bottom of the page (and to the top right “Quick Links” list), because #GrowthHacking.

Learning Auto Layout, with SiriMote (website)
As I said in the intro to this post, I’ve been pushing off getting to know Auto Layout for far too long – though, in my defence, my apps have all been running with NSView’s auto resizing and I didn’t really have the time or need to switch.
Anyway, now that I have started using Auto Layout (in SiriMote, just because it’s my smallest project and it doesn’t have anything too complex, UI wise), I don’t want to go back.
There’s so much magic happening behind the scenes here:

SiriMote AutoLayout Test (Short string)SiriMote AutoLayout Test (long string)

Now I only have one xib (because I also switched to base-localization instead of having one xib for each language) and when I change a string in a language, I don’t have to go through every UI element in the xib and move things around to make it fit – Auto Layout does it for me. Ah, the future. It’s so nice.

I’ve also gone a step further and tried animating the window solely by changing the constraints, not manipulating the window’s frame directly.
So far, it works and – after some work, as I came to understand constraints better – now looks just like before.

Featured in LaunchKit’s Launch Therapy Issue #8 (issue #8)
My post on getting featured on the Mac App Store in the “Get Productive” promotion made its way into launchkit’s excellent newsletter, Launch Therapy.
Having that kind of a reaction to something I wrote is very encouraging, and I hope I can improve my writing in a way that it gets featured even more 😛

BeautifulPixels ScreenFloat Sponorship (beautifulpixels)
After having sponsored BeautifulPixels for a week with Yoink, I ran another campaign, this time featuring ScreenFloat.
Yoink performed slightly better, but I attribute that to my inability to clearly communicate what ScreenFloat actually does. I’m trying to improve, but I struggle with it a fair bit.
“Floating screenshots” just doesn’t make clear how convenient it actually is, or doesn’t imply what can be done with it.
I must find a nicer way to describe the app.

Scripting in PHP
As you may know by now, I’ve started a newsletter. People interested in it can subscribe through the website, or through my apps’ about windows.
What I didn’t think of beforehand, though: what if I need to change the newsletter service I’m using, for whatever reason? Or what if the API changes? I’d need to put out an update just to make the app use the API of the new service.
That’s kind of inconvenient. So I decided to write a small php script that talks to the service’s API, put it on my own server and make my apps communicate with that php script instead of with the service’s API directly.
Now I have the freedom to switch the API behind the scenes, or update the API calls, should they change.
Still, some of the damage is done already, since I didn’t think of this before releasing Yoink 3.2, for example, or SiriMote. I’ll still have to update those apps once to make them use my php script, but from then on, it should be smooth sailings.

Adding more Character and Branding to my Applications
After adding some color and character to my website and about windows (see here), I decided to use ESSPurple a little more.
For all my apps (besides Transloader), I’m offering demos. When the trial period is over, an alert panel is shown. But that’s just lazy, and potentially not nice to look at.
That got me thinking: Perhaps it would benefit from some color. This is what I came up with:

New Trial Over notice in my applicationsYoink 3.2’s Demo Over Notice

And, as I wrote above, the Mac App Store Screenshots also received an update.

… Didn’t Do

Register for WWDC (apple)
I’ve been thinking a lot about whether or not I should apply for a ticket to Apple’s World Wide Developer Conference this year. After all, it is the best place to meet people in the industry and community. It’s also very valuable to be able to talk to Apple’s developers directly.
Even if I didn’t get a ticket, there’s usually a lot of other conferences and get-togethers around during the time of the conference.
But the flight alone would cost upwards of €1,000, and the hotels in San Francisco are insanely expensive. There’s no way I could justify that expense, to be honest.
I think Apple should announce WWDC earlier, not a ~month before the event. The beginning of the year would be good – flight tickets would cost less and it might even help with hotel prices.
Who knows, maybe next year.
Alternatively, I’m now thinking of attending one of Apple’s Tech Talks, either in London or somewhere in Germany (because they don’t have them here in Austria). My first choice would be London, just because I love it there. But I’ll make it dependent on who goes where. If more people go to Germany, then that’s where I’ll be going as well.

… Blogged About

Developer Tip: How to Install the Ink System Preferences Pane Without a Graphics Tablet (blog post)
In some cases, you need to test your apps with OS X’s built in handwriting recognition (called Ink) enabled.
This post shows you how to enable it, even if you don’t have a graphics tablet handy.

Under-the-Hood Improvements in Yoink 3.2 (blog post)
A technical blog post about what changed under the hood in Yoink 3.2, showing how I was able to improve the app’s performance and memory usage.

… Downloaded

Safari Technology PreviewSafari Technology Preview (apple)
A good alternative to the webkit’s nightly builds, as it also includes upcoming browser features, not just the latest version of the browser’s foundation, WebKit.
It’s amazingly fast.

TelegramTelegram (mac app store)
I was invited to partake in a survey, but it had to be over Telegram, so I downloaded it. Alas, for registration, they wanted my phone number, so in the Trash it went. Sorry, Telegram, nice try. That’s why I don’t use What’sApp, either.

Shade App IconShade (mac app store)
Quickly hide files on your desktop. Useful when you need to create screenshots or videos of your Mac.

Miitomo App IconMiitomo (app store)
A fun little “game” by Nintendo where you answer questions about yourself and friends.

Disney Crossy Road App IconDisney Crossy Road (app store)
You know Crossy Road. You know Disney. A perfect fit. Fun game.

… Read

Apple Developer Insights Webpage (apple)
Success stories of successful developers.

The iOS App Marketing Strategy Guide (apptamin)
“Everything we know about launching and marketing an iPad or iPhone app.”

5,000 Developers Talk About Their Salaries (freecodecamp)
Interesting insights. “The more you work, the more you get paid.”

How to Write App Descriptions That Sell (yalantis)
“There are three components of an app’s ‘definition’: its Name, its Description in the marketplace and Screenshots.”

Like It Is: Bob Dylan Explains What Really Killed Rock’n’Roll (cuepoint)
“… the genre was being commercially segregated, on the sly, into white (British Invasion) and black (soul) music by the (WASPy) establishment.”

Developers Switch to Subscription Prices to Move From a Consumer Audience to a Business One (macworld)
More and more apps seem to be switching to subscription-based business models. I wonder if it’s more sustainable than the “classic” approach of selling software, considering the backlash it caused for TextExpander’s developer Smile Software, for example.

Humanity's Extraterrestrial Origins Book CoverHumanity’s Extraterrestrial Origins (amazon)
An interesting, maybe amusing look at life from the other side of science. I wouldn’t take this at face value, but it makes you think for sure.

… Listened To

Core Intuition Podcast (website, itunes)
Lately, I’ve been enjoying the CoreInt podcast.

Leo Laporte Interviews Bill Atkinson (youtube)
About the early days of the Macintosh. A wonderful interview.

… Watched

FAN Movie PosterFAN (imdb)
Shah Rukh Khan’s latest movie. One of his finest roles, acting-wise, in our opinion. What’s unusual about this bollywood-movie is the absence of dance-numbers and songs. It’s all about the story this time 😉

The Jungle Book Movie PosterThe Jungle Book (itunes)
The live-action adaption of the Disney animated classic.
My girlfriend and I enjoyed it a lot, though we both thought the songs felt out-of-place and didn’t fit with the movie. They should not have included them to make this a film in its own right. And even then – nothing beats the classic!

… Ate

Vegetable Enchiladas with self-made Potatoe ChipsVegetable Enchiladas with self-made Potato Chips

… Went to See

Sadly, I didn’t have a lot of time this month to go out and see places (though my girlfriend and I did go to see my Alma Mater, the University of Vienna, to see what’s new 😉 ), so please accept these cute photos of my girlfriend’s mom’s adorable dog, Lucky, instead.

Dog YawningDog staring

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 🙂

Read more

Another busy month over. Time flies recently, doesn’t it? I feel like as soon as I’ve published the most recent “What I…” post, I have to sit down again and write another one, though an entire month has passed. Weird. And with the recent daylight savings time change here in Austria, I’ve become a little more messed up with my time. It always takes me a little while to acclimate to the “lost” hour. But damn, is it light out now at 7 p.m. I love that.

Enough talk. Here’s March 2016’s edition of What I…

… Did

Interviews for Contract Work
I had two interviews for contract work recently (none of which I’m allowed to talk about), but that was a first for me.
I’ve never done any work for people other than friends (I did some work for green&slimy) and family (I coded Reach ZEN, an iOS game my cousin came up with), so this was a first for me, going to meet people who determined if I was fit for a development job.
The first time, I was a little nervous and ultimately declined the offer, the second one I was more confident and I’ll be helping bring an awesome app to live soon.
Obviously, my own apps won’t come short because of it, that’s something I’ve considered very carefully.

Achievement Unlocked: 9to5mac Reviews Yoink (+ Video) (9to5mac)
I’ve never had an app of mine reviewed on 9to5mac before, so this is an important milestone for me. It’s a very favorable review, and the video that accompanies it is just great.
Thank you, Jeff (@jeffbenjam on twitter).

Optimizing Yoink (website)
I did a lot of optimizing and improved resource management in Yoink. I’ll go into detail in an upcoming blog post.
Suffice to say, I fixed an issue I’ve been battling a long time, where Yoink couldn’t hold more than a couple thousand files simultaneously and denied accepting more after that (in earlier versions, they didn’t even have to be in there simultaneously – it accumulated over time).

Mac Developer Tip: Simulate Memory Pressure (blog)
A short blog post about how to trigger a memory pressure event so you can test your apps under memory sensitive circumstances.

Sponsorship of Beautiful Pixels, The Platter and Digital Dojos (beautifulpixels, theplatter, digitaldojos)
I decided to sponsor a couple of sites again, get the word out about my apps (mostly about Yoink, see the Beautiful Pixels sponsored post and The Platter’s ad).
I usually wait for a good deal, and those sites currently had very nice ones.
It was all pretty spontaneous, except for Digital Dojos, that’s been in the making for a while (my fault, not theirs). Speaking of Digital Dojos, I’ve never sponsored them before, but they seem very enthusiastic about what they do and having me as a sponsor, so I’m very happy with them, too.
I’m very much looking forward to the result of these campaigns 😉

… Downloaded

Duck Tales

Duck Tales on the Apple TV (App Store)
I got it for the iPad some time ago, now they released it on the Apple TV as well (and it’s free for those who bought it already on the App Store).
I love it on the big screen, but the controls (via Siri Remote) are a little clunky and needs getting used to.

Tayasui Sketches+ Icon

Tayasui Sketches+ (App Store)
I guess this will really shine on one of those iPads Pro, but it was on sale, so I gave it a shot, because I’d heard good things. It’s really very nice.

The Executive Icon

The Executive (App Store)
I’m not really into fighting games, but it’s nice if you need to blow off some steam 😛

… Read

Disney Infinity 3.0 Not Getting Updates on Apple TV (toucharcade)
<sarcasm>They said the future of TV was apps, not games</sarcasm>
All joking aside, this is disconcerting. Seems like Apple TV app sales aren’t doing so well.

Mac Ransomware KeRanger Distributed Through Transmission (click)
Larger market share sadly means more creeps are interested in the platform…

Craig Federighi: The FBI Wants to Roll Back Security to 2013 (washingtonpost)
I’m a big fan of Federighi’s and this strengthens my opinion of him.

The Simple Rules That Could Transform How You Launch Your Product (launchkit)
Some interesting and potentially helpful tidbits.

How a $2.99 Recipe App Became a Top 2 Paid App in the App Store (medium)
“Launch into an existing community, or piggyback one”

Distributing Apps Outside of the Mac App Store (devmate)
If I were to sell my apps outside of the Mac App Store, I’d probably use DevMate.

The Most Important Apple Executive You’ve Never Heard Of (bloomberg)
A visit with Apple’s chief chipmaker, Johny Srouji.

An Indie’s Guide to the Press (curtisherbert)
“Getting the attention of the tech press can feel hard as an indie”

How the iPad Pro Changed My Illustrating Career (medium)
An open letter to Tim Cook by a 15 year old girl, Zoe, about how the iPad Pro made her a better illustrator and even landed her an illustrating job of a children’s book.

Apple Needs A Preferred Developer Program (medium)
Some good points are made here, but I don’t think creating a two-class-society on the App Store is a good solution to the problems the App Stores are facing.

Inside Apple CEO Tim Cook’s Fight With the FBI (time)
“There’s financial information. There’s your conversations, there’s business secrets. There’s probably more information about you on [your smartphone] than exists in your home.”
You can read the full transcript of the interview here.

… Listened To

Encryption Tightrope Apple / FBI Hearing (youtube)
The (lengthy) hearing of the two parties involved. Very insightful, so if you have some time, be sure to watch it.
I listened to it like a podcast, which you can do as well, it doesn’t need to be watched, imho 😉

… Watched

Columbo DVD Box

Columbo (itunes)
My girlfriend gave me the entire Columbo series for my birthday and we couldn’t stop watching. One of the greatest detectives – ahem, lieutenants, of course – of all time.

Last Week Tonight with John Oliver on Encryption (youtube)
A fun take on the whole Apple / FBI thing.

… Ate

Spicy Bombay PotatoesSpicy “Bombay Potatoes”

… Went to See

Innsbruck, AustriaInnsbruck, Austria

The For a quick weekend getaway, my girlfriend and I took a spontaneous short-trip to Innsbruck.
In the three days we were there, we walked about 30 kilometers.

Read more

It was a very busy month, so let’s get right to what I…

… Did

Newsletter App-Integration (subscribe)
Last month, I told you about my newsletter. I’ve been working on it some more and now have found what I think is a neat way to integrate subscribing into my apps – via the About window:

Eternal Storms Software About Window Newsletter Subscription

If an Acknowledgments button is shown (dependent on whether or not there’s an according PDF in the bundle), subscription can be accessed through the ellipsis button (which you can see in the GIF).
On the other hand, if the Acknowledgements button isn’t shown, the subscription field is shown right away when the About window is opened.

Akin to OS X’s login window, the email-field shakes if email-validation fails or if any other error occurs, while showing a thank you-message if subscribing was successful.
The communication with the MailChimp API is done inside an XPC service, so it can play nice in OS X’s sandbox without having to give internet access to the entire application if it’s not needed.

During the first couple of builds, I launched the XPC service when the user clicked Subscribe. Since launching an XPC service takes a moment, feedback was delayed and resulted in a undesirable user experience (the thank you message or the “something-failed-shake-animation” would be delayed, leaving the user in the dark for a little while whether something was still going on or not).
I decided to launch the XPC service as soon as the menu item is selected. Since the user has to enter an email before being able to click the Subscribe button, it gives the XPC service enough time to launch and give feedback right away.
I’ve been battling a similar issue with Yoink 3.2 – but more on that later.

SiriMote: Drawing the Apple TV Siri Remote in Code (website)
Apple TV Siri Remote Drawn in Code

For an upcoming update of SiriMote (which will let you put your Mac or its display to sleep), I needed a way to display a hi-res schematic image of the Apple TV Siri Remote.
For the drawn Siri Remote to resize correctly and always display the buttons in the right ratios to one another, I took “extremely precise” measurements (as I called them on twitter – of course, they aren’t, but they’re good enough) of the remote so I could reproduce it in code. So this happened:

Measuring the Apple TV Siri Remote

The GIF you see above is the result of a day’s worth of measuring and putting the measurements in code. (You can also bare witness to a slight mis-alignment of the button title MENU during resizing. It’s been fixed.) I’ll open source the code once I’ve re-written it in Swift. It’s currently Objective-C (as that is still my go-to language, considering all my apps are coded in it).

SiriMote: Getting Touch Events from the Apple TV Siri Remote (website)
More work went into SiriMote, trying to receive touch events. Up until recently, I had been unable to do so. I had given up on it until I came to think of private frameworks (which I dislike using) – I knew in the back of my mind that there was something that was designed to talk to multi-touch devices.
MultitouchSupport.framework it’s called, and it’s incredibly easy to use (despite not having a documentation for it. But as in most of these cases, Google is your friend). It wasn’t long until I was able to recognize two fingers moving on the Siri Remote – yet another instance where my newly created Siri Remote drawing code came in handy to visualize it:

Apple TV Siri Remote Multi Touch Recognition

Seems like the Apple TV Siri Remote is able to detect two fingers at most (on the Mac using the MultitouchSupport.framework).
I’m not entirely sure what I’ll do with this yet (or if I’ll release it at all, considering it’s using a private framework), but allowing for simple gestures might not be too far off.

Finishing up Yoink v3.2 (website, Mac App Store)
Another month passed and I still haven’t submitted Yoink 3.2 to the Mac App Store. I know, it’s embarrassing. But there have been some issues that I’ve been wanting to resolve before releasing it to the public.

  • NSURL/Bookmarks: When dragging a file to Yoink, it receives an NSURL to that file, while also gaining permission to access that file within the sandbox.
    In previous builds, Yoink kept that URL around until it was quit, only then creating a bookmark to be able to access it upon relaunch.
    Although it works, there were two issues: 1) The resource was kept alive even though the file was sitting idly inside Yoink and 2) if the file was moved outside of Yoink to a different destination, Yoink didn’t know about it and though the file could still be accessed (and moved), a sandbox exception was raised.
    In the upcoming update, Yoink creates a bookmark of the URL right away and only starts accessing the resource if it’s needed (loading the icon, showing the QuickLook preview, moving/copying/aliasing the file from within Yoink, etc).
    Refactoring this was more work than I had anticipated, since everything was laid out to work with an NSURL instead of an NSData object (which is what a NSURL bookmark is).
    Moving to bookmarks also helped in finding and fixing a bug when a file that resided in Yoink was edited and saved in another application (which often is just a delete of the original file and a creation of a new file).
  • QuickLook: A minor thing, but it’s always been bugging me that I calculated the QuickLook panel’s size by rendering the QuickLook thumbnail image off screen and getting its dimensions. It just seems so inefficient and ugly.
    After digging around, I finally found QLThumbnailGetContentRect, which, I know, has been there for ages, but Mr. Four-Eyes here has been unable to find it.
    Anyway, it does exactly what I needed and after some very rudimentary measurements, it’s a couple of milliseconds faster than my previous approach and gives me the satisfaction that I could remove a couple of very ugly lines from my code.
    Another interesting tidbit about QuickLook – even if you create the icon preview on another thread than the main one, trying to create too many at once will still stall your app. I found that creating two at once (using an NSOperationQueue, for example) works very well, but if you have upwards of 250 files, it can start stalling (probably depending on the hardware, too). I decided on creating one item after another, it’s fast and doesn’t stall the app, even with upwards of 1000 files.
  • Force Touch: The cool, new, flashy feature in Yoink 3.2 will be Force Touch integration. It’s been a wild ride so far. I liked the implementation I did, but I wasn’t really satisfied with it either.
    Force Touch generally has two pressed states: State 1, which is basically an ordinary mouse click and stage 2, which represents a force click.
    I wanted Force-Touch-Select-All to work like this: Press all the way to stage 2 on a file in Yoink to select all files, let go one stage to stage 1 and drag all the files out at once. This allows you to drag out all files at once without having to let go of the mouse button entirely (although that is still a way to do it, too – I just found it to be nicer not having to click twice).
    The main problem was that under some circumstances, when the Magic Trackpad was released, a –mouseDown and –mouseUp was called, which is basically another click, so the selection was undone and just one file ended up being selected.
    The problem got worse when thinking about another Force Touch option – revealing files in Finder, where, if more than one file is selected, a contextual menu is shown. With the problem in mind, during a Force Touch, the contextual menu was shown, but as soon as the button was released, the menu was closed, because of the issue I just described.
    Long story short, I had to refactor the Force Touch recognition that prohibited a –mouseDown/Up when the Force Touch was released all the way.
    Another issue was mouse movement – I have to allow for a little dragging without starting a file drag because force touching can trigger a small mouse movement, and a file drag would interrupt the Force Touch event. So I allow the mouse to be moved for about 4 pixels until a drag occurs, giving the user a little wiggle-room when force touching.
    I also want some Force Touch actions to happen as soon as Force Touch happens (i.e., select all) and some only after Force Touch happened and the mouse button was released all the way (reveal files). I found a nice solution and will open source it after Yoink 3.2 is available.
  • Force Touch Preferences: Something else I’ve been going back and forth on – whether to show the Force Touch settings icon in Yoink’s preferences even though a Force Touch Trackpad was not available. At first, I thought it best to not show it in such a case (less clutter). Now, I think it’d be better if the user knew the feature is there even though they can not use it currently. So I’ve settled on showing the Force Touch settings icon at all times, but it’s disabled if a device of such capabilities is currently not available on the Mac.
    Another option would have been to enable it at all times and show explanatory text that Force Touch was not available right now. But that’s just one more click and a lot of words to describe what a disabled settings icon does at one look.
  • Force Touch Device Recognition: To find out if the Mac Yoink is running on has a Force Touch capable device, I have to use IOKit and give two sandbox permissions: one for USB devices and one for Bluetooth (Bluetooth, obviously for the Magic Trackpad 2 and USB for when the Magic Trackpad is charging as well as for the internal one in Apple’s newest MacBooks).
    In the build I was ready to submit to Apple (before I was invited to participate in the Mac App Store’s Get Productive Promotion), I had Force Touch device recognition built right into Yoink. It occurred to me that that might not be the best way to go and perhaps might have even resulted in a rejection. I hadn’t done anything with XPC services up to that point, but it was too perfect an opportunity to pass up, so I extracted the code and put it into an XPC service.
    An XPC service has one major advantage in a sandbox environment, besides easier recovery from crashes: privilege separation. Only the XPC service has sandbox permission to access USB and Bluetooth devices. At first, I had the XPC service running at all times, but the thing is, I don’t need it running at all times. There’s only one time I continuously need to know if a Force Touch device is available – when the Preferences window is opened and while it is open. As soon as it’s closed, I can discard of the XPC service and clean up all the resources it’s using.
    To access Yoink’s preferences, there’s only one way – through the menu either from Yoink’s optional menu bar icon or through the Advanced button at the lower left of Yoink’s window.
    To be able to let the Preferences window know before showing if a Force Touch device is available, I’m launching the XPC service as soon as the menu is opened (quitting it again if the menu is closed). If the Preferences window is subsequently opened, the XPC service stays alive and continuously informs the Preferences window about the availability of any Force Touch capable devices.
    The Preferences window can then enable or disable the Force Touch settings icon accordingly. As soon as the Preferences window is closed, the XPC service is invalidated and not used anymore (and ultimately terminated by the OS).
  • Control-Click for Right-Click: Something I discovered only recently was that control-clicking onto a file icon in Yoink didn’t trigger the contextual menu (though a real right-click worked).
    Apparently NSViews as subviews of an NSTableCellView don’t send the event to the appropriate place so the menu is shown. For some reason, I had one big NSView in there (that did absolutely nothing) which was the culprit. Now control-click works again. I guess I will have to file a rdar on that.
  • Reduce Motion: When moving Yoink to a different place on your screen, it fluently floats from its location to the new destination. I now offer a setting to reduce motion for these animations. It’ll also take care of the adding/removing animation when adding files to/moving files out of Yoink.
  • File Icon / Button Animation: With version 3.1 of Yoink, buttons to Remove, QuickLook or Pin a file were hidden until mousing over the item, resulting in an animation where the file icon moved off to the left and the buttons moved in from the right. I was happy about it at the time, but I came to realize that this is bad UI design. Although a file can be moved out of Yoink by clicking and dragging anywhere in the tableView’s row (the filename, the file icon or the background), most users believe that they have to click and drag the file icon or perhaps the filename (rightly so, because the Finder does it that way). So when you moused over the file icon, it moved away. How frustrating is that?Previous File Icon and Button AnimationVersion 3.2 will fix this and just fade in the buttons, leaving the file icon in place and only fading in the buttons at the side, not moving in.
  • File Deletion: Some users believe Yoink keeps copies of the files you move to it. That is not the case, Yoink only references the files you drop on it. I’m vary of this and don’t want people to lose any files because of it. So I decided, since I’m watching the files dropped to Yoink anyway to watch for filename changes and move events, to also watch for if a file is moved to the Trash. If this happens, a popover is shown informing users of the fact that Yoink doesn’t keep copies of files around:Yoink Warning when moving files to the Trash
Thinking about What I… (blog)
I’m a lazy (and lousy) writer, so I like having to force myself to write at least once a month for this blog so I can hopefully improve my writing, get better at expressing myself and be more transparent about what I do. Also, it’s a nice journal of the progress on my work and what I have done at any given month – a nice look back.
How I go about it, however, is highly unprofessional and inefficient. For example, when I get to the “What I Read” section of this post, I usually panic, because I didn’t keep a log at all and have to retrace my steps, go through my browser’s history, read through my twitter favorites, messages, slack, etc. I’ll change that this month, with links I read going right into Safari’s Reading List (which currently holds mostly programming articles for future reference, those will have to go into a bookmarks folder) and clearing it once the post is done.
Another thing I don’t keep track of is “What I Downloaded”. Panic again. Basically any part of this post is a reason for me to panic, because I don’t keep logs of what I do (which is the purpose of this blog post category, ironically). For things I worked on, I basically go through my commit messages – highly tedious.
So yes, this is something that needs to change for me to be able to do this blog post in a non-absurd amount of time – this blog post, I’ve been working on for more than 5 hours now, with most of the time being spent on retracing my steps).

… Downloaded

Firewatch Game App Icon

Firewatch (website / steam)
A very nice game, a little on the short side, though, but nonetheless the $19.99. That scenery alone is pretty enough to make you want to buy and play it.

Lost Journey Icon

Lost Journey (iOS App Store)
A puzzle game that for no apparent reason reminds me of Monument Valley for some reason.

Bridge Constructor Icon

Bridge Constructor (iOS App Store)
Another nice puzzle game.

GIF Brewery 3 Icon

GIF Brewery 3 (Mac App Store)
From time to time, I have to create a GIF directly from my screen to be posted on twitter. I personally use an “in-house tool” for it (that maybe some day will see the light of day outside of these narrow halls at the Eternal Storms Software headquarters), but I thought I’d take a look at how other apps solved this. GIF Brewery came highly recommended. It looks nice, but trying to create my first GIF, it just didn’t create it. Perhaps it was my fault somehow – I haven’t tried it yet again because I haven’t had to create another GIF. Still, It’s worth checking out, it seems to be fully-featured to satisfy all your GIF-creation needs.

… Read

The Apple vs. FBI discussion has dominated my reading this month, starting with

Tim Cook’s Open Letter to Apple’s Customers (and the world, really) Regarding the FBI’s Request to Backdoor One iPhone 5c (apple)
Tim Cook’s letter seems genuine and heart-felt to me. To get a good overview about what’s going on, I read

Apple, The FBI and Security (stratechery)
A very good summary of the entire issue. If you’re trying to get caught up, read this and you’re all set. If you’re into science-fiction, the following article will spark your interest:

How the FBI Could Use Acid And Lasers to Access Data Stored on Seized iPhone (arstechnica)
A very tricky and unsafe method of retrieving data from the iPhone in question. An interesting read, but probably not feasible or worth the trouble, seeing as it would most probably destroy the phone and not yield any results.
Seeing as this is technically possible, it’s also possible for Apple to do what the FBI asked for:

Apple Can Comply With the FBI Court Order (trailofbits)
A blog post detailing why and how it’s technically possible for Apple to comply with the FBI’s court order.

Why Tim Cook Is So Furious (medium)
Showing why, although they claim it not to be, what the FBI is asking for is in fact a backdoor.

Other than this topic, I read about Blizzard’s Sound Design:
Blizzard Sound Design – Heroes Of The Storm (polygon)

In my opinion, Blizzard’s games have always had the best sounds and music pieces, starting at their very beginnings.
This article shows what lengths they go to and what it takes to create these amazing sounds.

An Intro PR Guide for Startups (craigkerstiens)
Always looking for ways to improve my press releases and basically anything that has to do with marketing and public relations, I click through a lot of these kinds of articles. It doesn’t tell me too much I haven’t heard already, but reiteration doesn’t hurt, either.

I also started reading a new book I got from my girlfriend on my birthday:

Death on the Nile by Agatha Christie (amazon.com / amazon.de)
I love the movie, and the book is everything I hoped it would be.

… Listened To

While working on so much this month, I tried listening to a couple of podcasts (usually, spoken words distracts me too much to be able to work efficiently, but since everybody’s listening to podcasts these days and I have no idea at what other time I would be able to, I thought I’d give it a shot).

The Talk Show – Episode 146 (podcast)
Apple obviously is trying to be more open and is doing the rounds, releasing its top managers into the wild, wild world that is the internet.
Recently, Craig Federighi (Apple’s SVP of Software Engineering) and Eddy Cue (Apple’s SVP of Internet Software and Services) joined John Gruber’s (of daringfireball-fame) The Talk Show.

Thimbleweed Park Podcast – Episode 41 (podcast)
I’m a fan of Ron Gilbert’s work, so listening to the podcast about the development of his newest game, Thimbleweed Park, is a given.

… Watched

The Boy Movie Poster

The Boy (imdb / iTunes)
A good horror flick with a twist.

Sinister 2 Movie Poster

Sinister 2 (imdb / iTunes)
My girlfriend and I totally forgot to watch the sequel to what was a shock-filled first part, until we kind of stumbled upon it again. Loved it, though it is, indeed, very sinister.

The X-Files Reboot Poster

The X-Files Season 10 / Reboot (iTunes)
Watched it in German. I hate they changed Fox Mulder’s voice. Why? Why do that?
It wasn’t the best season of the X-Files, but it also wasn’t the worst. I’m glad another movie and another season are being thought about / discussed by the powers that be.

… Ate

Cashew-Cream MealCashew-Cream chicken with pistachios and rice.

… Went to See

On February 10th, I turned 30 (time certainly flies). For the weekend, I thought it would be nice to celebrate with friends and family, so I invited them to join me in going to Puchberg am Schneeberg, which is a very nice, quiet place here in Austria. We spent our days hiking, swimming, playing board games and generally biding our time.

Puchberg, 30th BirthdayView from Schneeberg

Puchberg, 30th BirthdayThe group – a very cool bunch.
From the left: My brother, my cousin’s girlfriend, my cousin, my girlfriend, me, my cousin, my cousin and my cousin’s wife
(those are two different cousins, of course – otherwise that would have been an uncomfortable weekend 😉 )
It turned out to be so cold up there that my iPhone ‘died’ shortly after taking this picture. Once it warmed up, I got it working again.
Those were some worrisome hours for me, let me tell you 😛

Puchberg, 30th BirthdayAnother nice view, combined with a little Austrian patriotism.

Read more

After skipping the December issue of What I… (because the “season of bliss” is always a very busy time for me), it’s now back at full force, with a combined issue for December 2015 and January 2016 😉

… Did

SiriMote IconReleased SiriMote 1.0 (website, blog)
SiriMote lets you control your Mac with your Apple TV Siri Remote and is compatible with any app that supports your Mac’s keyboard’s media keys (play/pause, next, previous, volume up, volume down).
The response has been overwhelming, with coverage from MacStoriesAppleInsider, iDownloadBlog, LifeHacker, a feature on MacUpdate and many more, resulting in 20 downloads per hour in the first week.
I would have liked to have SiriMote run in the sandbox (and thus be available on the Mac App Store), but due to the API it uses for sending the keyboard events (CGEventPost), I wasn’t able to. Perhaps I’ll find another way to go about it in a future update and release it on the Mac App Store. I’ve definitely filed an enhancement request through Apple’s bug reporter.

Got a call from a member of the press
As a first time for me, I got a call from Nicolas (from ifun.de) regarding the release of SiriMote, who was interested in whether or not SiriMote would support the Remote’s touchpad at some point.
It’s very nice to connect to members from the press this way – I usually only ever get in contact via email or twitter.

Pomodoro Method
As you’ll see below, I started using the Pomodoro Method and I’m convinced it’s got me more productive.
Basically, you set yourself a timer for a fixed duration (let’s say, 25 minutes), after which you’ll take a short break (5 minutes), and repeat three times, at which point you take a longer break and then start over. You can change the intervals of course, but I found 25 minutes work well for me. 

Released SiriMote 1.1 (website)
In January, I released an update for SiriMote to support Microsoft PowerPoint presentations (start/stop a presentation, go to the next/previous slide).
It uses AppleScript (I would have liked to use the Scripting Bridge instead, but I don’t own Microsoft PowerPoint so I couldn’t create the necessary Scripting Bridge header files).

Drawing the Apple TV Siri Remote in Code (twitter)
In the current version of SiriMote, I use a schematic image of the Siri Remote I found in Apple’s online documentation.
Since I prefer to have it resolution independent, I decided to draw it in code using NSBezierPath. It turned out pretty well and taught me a little bit more about NSBezierPaths, especially how to draw half a circle for the curved line that’s part of the Siri-button icon.

Mac App Store Promotion: Get Productive (blog)
From January 21st to 28th, Apple had a promotion of selected Mac and iOS Apps.
I was lucky enough to have Yoink selected for the promotion. It went very well – click the link above to read the blog post all about the details 🙂

Newsletter (subscribe)
I’ve started a newsletter for all things Eternal Storms Software, letting you know (at a low frequency – once a month at most) what’s going on behind and in front of the scenes here at Eternal Storms Software. Perhaps you’d like to join the Eternal Storms Software Newsletter 🙂 Thank you.

… Downloaded

Focus App IconFocus (Mac App Store)
A Pomodoro-Method app with a tiny todo-list-manager.

Twitter App IconTwitter for Mac 4.0 (Mac App Store)
“Don’t call it a comeback”? OK, I’ll call it a catastrophe.
The 4.0 release was simply that – a catastrophe. However, they remedied most of the issues I experienced with 4.0.2, so all is good again.

Veertu App IconVeertu (Mac App Store)
A virtualization software without a lot of crud and stuff nobody needs. It’s bare bones, but works very nicely.

DuckTales: Remastered App IconDuckTales: Remastered (iOS App Store)
I loved the GameBoy game, although it was too difficult for me to ever finish it.
This time, I’m doing my best to finish it – it’s just as hard to beat as I remember.

Rails App IconRails (iOS App Store)
Remember Flight Control? Rails is like that, only with trains and, it seems, a little bit more complex.

… Read

How to Work 40 Hours in 16 (click)
In December, I began using the Pomodoro method. This blog post made me try it, and I must say, I love it.
I often procrastinate, and this method helps me procrastinate more productively 😛

Sketch Leaving the Mac App Store (click)
Something has to be done about it. It’s not the first high-profile app to take this step, Panic’s Coda and Bare Bones Software’s BBEdit preceded it (along with others).
Phil Schiller taking over the App Store makes me wonder if there’s a change on the horizon, perhaps at this year’s WWDC – Schiller has always been very fond of the Mac after all.
We need to be able to do demos, upgrades, analytics and video previews on the Mac App Store.

Apple’s Q4 Financial Results (click)
Macs still on the rise (compared to the overall market) – something I love to hear!

Fix your Posture (click)
3 exercises to fix your posture at the workplace.

Ways To Improve Productivity When Working From Home (click)
“Keep your family from disturbing you” is the hardest part, but something you have to follow through on if you do work from home.

… Watched

The Babadook Movie PosterThe Babadook (iTunes)
Terrifying and gripping. To my girlfriend and me, it’s one of the best horror flicks of late.

Bajirao Mastani Movie Poster, with my GirlfriendBajirao Mastani (Wikipedia)
An epic, historical Bollywood movie. Good music.

Dilwale Movie PosterDilwale (Wikipedia)
Whenever a new movie with Shah Rukh Khan comes out, we have to go see it. But when it includes Kajol as well, there’s no holding back for my girlfriend 😉
A love story with lots and lots of twists and turns.

Star Wars: The Force Awakens Movie PosterStar Wars: The Force Awakens (iTunes)
Hands down the best movie in the franchise. BB-8 is the absolute star of the film.

… Ate

Spicy Lemon RiceSpicy Lemon Rice with Tamarind Date Chutney and Chapati

… Went to See

Star Wars: IdentitiesStar Wars: Identities. My girlfriend (on the left, “Ma’ka”) and I (on the right, “Brzl”) went to see this exhibit on December 31st and were simply blown away.
So many cool things to see, actual movie props, so much background information – very much worth a visit.

Read more