Author's Posts

Wwdc13

Image credit: developer.apple.com/wwdc

The Keynote presentation

If you haven’t seen yesterday’s (Monday, June 11th, 2013) WWDC keynote yet, you can watch it here on Apple’s website.

The keynote started with a very inspirational video. It’s a direct answer to recent ramblings about how Apple have lost their drive or stopped innovating and it somehow gave me the feeling it’s a direct successor to the famous “Here’s to the crazy ones“. A mantra Tim Cook doesn’t get tired of sharing any chance he gets – It’s all about the best product they can possibly make.
Watching this video literally made me think “This is going to be a WWDC keynote we’ll remember for quite a while”.

Tim Cook, CEO

seemed very energetic and enthusiastic about what he had to tell us. Frankly, I think it was the best performance from him yet. His voice was also not as ‘whispery’ as usual but a little louder and more profound. He seemed happy to be there and excited to be sharing new stuff (probably because he got tired of all those stupid “What’s Apple going to do next” questions – I’m looking at you, D11 – and finally had to show something new, silencing those questions)
And as a plus, he said “Only Apple could do this” just once which is a plus in my book. At past occasions, I think he overdid that phrase a little.

Craig Federighi, SVP Software Engineering

was, in a word, epic. Drew Wilson nailed it, in my opinion. He’s naturally funny and doesn’t ignore what’s going on around him, reacting to reactions from the audience, which, if not overdone, is a very good thing, loosening up everyone involved.
He’s a natural at giving presentations and he has fun doing what he does. A class act all around. I’d like to see him more often.

The way Craig talked about the textures in OS X (specifically, Calendar) and iOS (specifically, Game Center), I wonder if he played a key-role in Scott Forstall’s ousting.

Here a few quotes, when demoing OS X Mavericks:

“Absolutely no virtual cows were harmed in the making of this user interface.”
“It’s really amazing – even without the stitching, the window still sticks right there on the screen, it doesn’t fall off without the stitching.”

And later, when demoing iOS 7:

“We just completely ran out of green felt and wood – this has got to be good for the environment.”

No, I don’t think Federighi and Forstall were very fond of each other. But what do I know, perhaps he was making fun of himself 😉

Phil Schiller, SVP Worldwide Marketing

was solid and fun, as always. “‘Stopped innovating’ my ass” was, obviously, one of the best lines in the keynote. Seems to me he’s always the one to comment on certain publications in keynotes in a fun way, and that’s what I like about him. He doesn’t ignore those things but addresses them head-on.
Yes, he did mix up Firewire 2 with Thunderbolt 2 when introducing the Mac Pro, but who cares? It’s a new friggin’ Mac Pro!
Phil’s a very down to earth, straight up guy, very sympathetic.

I actually ‘met’ him during the WWDC 2004 Campus Bash – he was eating a taco (they had a make-it-yourself-taco-bar) and I was so stunned he stood in front of me all of a sudden, I just nodded at him and he nodded back. Yes, we’re the bestest buddies now!

He’s even cooler in person.

Roger Rosner, VP Productivity Applications

I frankly can’t remember the last time we saw him in a keynote (if ever), so I can’t really compare this one to previous appearances.
That aside, it was a decent performance, though I feel he lags behind the others – maybe because he hasn’t had too many chances to present at a keynote.
He did seem excited about iWork for iCloud, though, and I hope for his and his team’s sake it doesn’t share the same fate as iwork.com which was in beta for a while and then cancelled without much fanfare. 

Eddy Cue, SVP Internet Software and Services

Also a decent performance and I bet he’s got a new friend in US Senator John McCain.
I wish he had mentioned something about improving iCloud’s key-value storage, though. But I guess that’s something that will be probably handled less publicly at WWDC’s sessions and labs.
It’s nice they’re introducing new services (like iTunes Radio), but their existing services could use some love. Seriously.

The new stuff

Enough about the presenters, let’s talk about the announcements they made.

OS X Mavericks

Oh, that name.

First off, I keep calling it Maverick, as Maverick_s_ seems too “plural-y” to me.
It’s a name like MacBook. I can’t say how much I hated that name. But now, I love it. iBook and PowerBook seem odd to me now, and I think it will be the same with the new naming scheme of OS X.

But right now, I actually would have preferred Sea Lion. Change is hard.

iBooks, Maps on Mac

was just a matter of time. I don’t quite understand why it took so long – I think it might be a marketing thing, to have something exclusive for iPad/iPhone. Create momentum there and bring it back to the Mac to use that momentum some more.

Maps’ ‘Send location to iOS’ is awesome. The interface seems very minimalistic (which isn’t a bad thing), however, after all the textures I was used to from OS X (Mountain) Lion, it looks naked. But it’s just a matter of getting used to it again.

Calendar.app is stripped down to its bare minimum, also – no textures. It looks very nice and will look even better once I’m used to it again.

Multiple Displays

Finally that fullscreen button in the windows’ top right corner is actually usable. With OS X Mavericks, fullscreen is finally the way it should have been from the beginning.
SecondBar got sherlocked as the menu bar is now shown on the second display and the Dock can be summoned there.

AirPlay Display is a very welcome addition, though I do not own an AppleTV. But any way to extend the desktop is very fine by me.

Finder Tabs, Tags

‘Finally’, is all I can say for the tabs. And they will make Yoink more useful as well.

Tags are Spotlight comments taken mainstream. Good move. And an important step in the no-filesystem-direction.

Advanced Technologies

The improvements made on the core of OS X amaze me. It really shows how smart the people working at Apple are.

Timer coalescing and memory compression are great new ways to improve CPU- and memory usage. And even things where you’d think that after 9 releases, there would be no way to improve upon them, were indeed improved upon, like video- and audio playback, which uses up to 35% less energy.

App Nap fits in well with the energy saving ideology introduced in previous OS releases with automatic and sudden termination.

Albeit, it’s not only about saving energy, it’s also about freeing up resources for applications in the foreground that really need them.

It’s great to see so much love for OS X and the Mac again. The advancements and improvements made show that Apple is still very much interested in the Mac and its future. At least for the next decade (both Craig Federighi and Phil Schiller said something about “the next ten years” – though I shouldn’t read too much into that).

On another note, I wonder why some of the icons – or the interface in general –  weren’t changed to be in the same vain as iOS 7’s. But then again, even the iPad (beta) version of iOS 7 isn’t finished yet and I imagine OS X would be an even bigger undertaking. Perhaps there’s another ‘Back to the Mac’ event coming. 

Mac Pro

Speaking of the Mac – Apple finally introduced a new Mac Pro (by the way – if you haven’t seen Apple’s website for the new Mac Pro yet, you really should – it’s very well done!).

And what a Mac Pro it is. It’s breathtaking.

I can’t help make the comparison to the (sadly ill-fated) G4 Cube (and, as pointed out to me by @F451 on twitter, the 20th Anniversary Mac). I think it’s the Cube done right, cylindrically – though I don’t know anything about the price, yet. I just hope it’s priced aggressively.

Phil Schiller said it’s unusual for Apple to show a sneak peek of a future product. But for the Mac Pro, it was the right time.
– Pro customers were getting restless (there was a lot of talk about Apple ignoring the needs of its Pro customers)
– They aren’t sold in Europe anymore
– The last (very minor) update was a year ago and
– I don’t think too many people were buying them anymore.
So the fear of cannibalisation by a future product was non-existent.
This was the right time.

iWork for iCloud

To be honest, I’m not too interested in web apps. I haven’t once used anything on icloud.com or the ill-fated iwork.com beta.
There’s probably a sophisticated strategy behind the web version of iWork, but I’d rather they put those efforts and resources into a new version for the Mac.

Alas, Rosner assured us there would in fact be a new version of iWork for the Mac and iOS coming later this year and I’m very excited about that. I just wish they’d presented that instead of the web apps.

iOS

Man, there’s  a rift going through the iOS community. People I follow on twitter are either ecstatically pleased about the new changes or devastatingly disappointed and appalled.

As far as I’m concerned, I like it – very much so.
I don’t like a couple of icons (most gradients look weird and the Safari icon doesn’t look good at all to me), but everything else I’ve seen so far is pretty neat (which isn’t much, I have an iPhone 3GS so I can’t even install the beta, I guess it’s finally time for me to upgrade… or get an iPod touch).

Control Center is a godsend and way overdue – and the one new feature I’m most excited about in iOS 7. How much time I wasted drilling into the settings to disable WiFi, the cellular network or Bluetooth, I don’t even want to think about it.

The End

As I said before, Tim Cook doesn’t get tired reiterating what Apple’s goal is:

“I’d like to close this morning with a reminder. That our goal at Apple is to make amazing products that our customers love. Really great products that enrich people’s lives. The words you saw at the beginning of the show are more than just words to us. They’re the values we live by. They drive us. You’ve seen them reflected in the products over the years and just as much in the products this morning. And you will continue to see these reflected in the products in the future. We created an ad to help us express just how deeply we feel about this.”

And another video is played. “This is it. This is what matters.”

I think this was one of the best keynotes. They all were on their top of their game, and the stuff they had to show was breathtaking. Makes me even more inspired to work on my own stuff.

I wish I was at WWDC this year. Sadly, 71 seconds is what it takes my ISP to connect to developer.apple.com/wwdc … 😉

 

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

Read more

Transloader Mac Icon

You might have heard about my new app, Transloader, for OS X and iOS.
I’d like to give you a little background info on the app because it’s been an interesting process creating it and getting it out to users.

What Is Transloader?

Transloader (né Lifeline – as in a line that keeps your connection to your Mac alive) lets you send URLs from your iOS device to your Mac for download.
Say you’re browsing on your iPad and come across a Mac demo app you’d like to try. On your iPad, you can’t download it and even if you can, there’s not much use in it since it’s a Mac app. This is where Transloader is useful.
Enter the URL to the demo into Transloader on your iPad and it gets synced to Transloader on your Mac where the URL will be downloaded to your Downloads folder, ready for you to use when you return to your Mac.
That’s it. Pretty simple, isn’t it?
Creating it, however, wasn’t 😉

Got To Get You Into My Life

The idea for Transloader, like for all my other apps, came out of a need I had myself, a little more than two years ago (and I’d been sitting on pins and needles ever since, thinking someone else might come up with a similar idea and beat me to it).

I browse the web a lot on my iPad. And it’s not unusual that I come across a zip or dmg file, or even a movie I’d like to download for later.
What I used to do was send myself an eMail containing the URL to the file – and I can’t tell you how much that bothered me.
It’s so much unnecessary work to do it, it’s so tedious:

  • Copy the URL
  • Open Mail
  • New Mail
  • Enter my eMail address (I have several, so I need to find the right one in the list)
  • Paste the URL into the mail’s body
  • Send
  • Confirm I don’t want a subject for the eMail
  • Sent

And when I’m back on my Mac:

  • Launch Mail (if I don’t forget I sent myself a link)
  • Find the mail
  • Copy the URL
  • Launch my browser
  • Paste the URL into the browser and wait for the download

I believe in writing apps for a single problem, even if it’s a very small one. I like to keep things clean. And to their purpose. I don’t like using eMails to remind myself of something. That’s what the Reminders.app is for or perhaps the Notes app (though I can’t tell you how many times I forgot I put something into Notes.app for later, and only months later found it by accident).

I wanted a much simpler way to do this. So I had the idea for Transloader. The workflow would be very simple:

  • Copy the URL
  • Launch Transloader
  • Add the URL

and on the Mac:

  • If Transloader’s not running either launch it
  • or if it is running – do nothing.

Let the app take care of everything else. The sync, the download – that also has the advantage that the user does not have to initiate the download. It starts downloading as soon as the URL is synced – and, ideally, the download is ready once you’re back at your Mac. That was the idea for Transloader.

We have all the time in the world

To reiterate, I had the idea for the app about 2 years ago – before Apple introduced iCloud.
So I had to find a way to make the iOS app talk to the Mac counterpart.
I basically copied the way Apple’s Remote.app on iOS handles the connection to iTunes on the Mac, asking for a PIN.
The setup needed to be done by the user. Start the server app on the Mac, launch the app on iOS, add the server by entering the IP and the port to connect on and then enter the random PIN displayed on the Mac.
Once the setup was done, the app worked pretty much the same as it does now. Add URLs on iOS and it would get transferred to the Mac directly.

There were quite a few things different, though.
Due to the direct connection to the Mac, more control was possible. For startes, you could have multiple Macs you could differentiate between and send URLs to. You could interrupt downloads, you could see how far along the download on your Mac was and how fast it was going and you could delete the downloaded file from your Mac once it was finished, remotely from your iOS device.
On the other hand, to add URLs, an internet connection was mandatory at the time of entry and the setup to get the app working was tedious. The Mac had to be running, so did the Mac app. Also, adding URLs over the internet was only experimental, only the Bonjour service (meaning you had to be in the same WiFi network for it to work) was really supported. (Although I must say I never had a problem with adding URLs over the internet, but it depends on your WiFi router, port forwarding, etc).

Part of why it took so long to release the app was that I wasn’t completely sure if the “experimental” internet connection would go over well with users. The purpose of the app was to be able to add URLs while on the road, somewhere in a café for example, not at home where you’re at your Mac anyway.

Lifline on MacLifeline, the first iteration of Transloader, on the Mac.

Lifeline on iPhoneLifeline, the first iteration of Transloader, on the iPhone. Server Selection.

Photo 3Lifeline, the first iteration of Transloader, on the iPhone. Showing progress and speed of the download.

Stuck inside a Cloud

Some time went by where I didn’t do any work on the app. Only using it myself and showing it off to people to get feedback.
Maybe half a year passed. Perhaps a little more.
Then what happened was that Apple announced iCloud. At first I didn’t make the connection, but I soon came to realize that it would be the perfect fit for my app.
I always hated the fact that a server/client configuration was necessary for the app to work. I didn’t want to put the user through any of that.
Also, with iCloud, at the time of entering a new URL, a connection to the internet is not necessary and the Mac app doesn’t have to be running. It gets synced as soon as there is an internet connection again. Big plus.

I realized I wouldn’t be able to give the user the control they would have had with my own implementation (mainly getting feedback on the progress of the download and its speed) and that I would make myself rely on a service that might not be available at times, but knowing that using the app would get much simpler, especially first setup (of which there is basically none now), was enough to make me go for it. And I haven’t regretted the choice since.

Changing from my own system to iCloud was a complete re-write of the app. Obviously.
However, it took way less time than the first implementation since I didn’t have to deal with any server/client implementation or communication between the two. All of that is handled by iCloud.

It took maybe two weeks to get the app working and basically finished (no polish, of course). In comparison, the first version took me a few months.

She feels good, she knows she’s looking fine

Once I got the app working and finished from a coding standpoint, it was time to get the UI done.
Everything you see is the creation of the brilliant Alexander Käßner who, I think, couldn’t have done a better job with the app.
And customers seem to agree, they do like the graphical elements very much.
After maybe two days I had a mockup and a few days later, the graphical elements were done and put into the app. It was a quick and painless process.

Do what the rest all do, or face the fact that the Apple Store Review Team may have no other choice than to reject you (in short – DAMN, Transloader was rejected)

I usually submit new apps to the App Store well knowing the first submission will likely result in a rejection.
Transloader was no exception. Not because of the usual reasons (Sandbox, for example, or a stupid unnecessary bug I overlooked in final testing), but because I was using iCloud in a different, unexpected way. And I kind of felt it was going to cause problems.

And I wasn’t wrong. It didn’t take too long until I got a call from a very sweet, patient and understanding representative of the Review Team, telling me Transloader got rejected for using iCloud as a transport mechanism and an iCloud account being necessary for the app to work.

I tried making the point that at no point is any file stored on iCloud and that the sync was used as a sync, not as a transport mechanism – it syncs the URLs to all devices. What the Mac does with that link is a different story, but of no concern to iCloud, because the actual download has nothing to do with iCloud or the sync.
I also tried arguing that if the reason for rejection was that an iCloud account was necessary, there shouldn’t be any twitter, Facebook, flickr or instagram apps allowed on the App Store either because they all needed accounts for their respective services as well (a cheap shot, I know, but I was frustrated).

Anyway, my points didn’t go over well. The rejection was done.

Reconsider, Baby

At this point, I was kind of desperate. I was so close to finally releasing the app but couldn’t have been farther away at the same time.
I resubmitted the app to Apple with a video explaining how the two apps worked together and a lengthy review note providing even more details.
Yet again, no dice. I got another call from the representative, asking me not to submit the app again without significant changes to how it worked.

So I considered going back to my original implementation. Users would just have to endure the horrible server/client setup.
I just wanted the app out at this point. I got lots of positive feedback from friends, family and colleagues about the app so I was confident it would do ok.

I started to work on re-implementing the first implementation when about two weeks later, I got another call. They were sorry it took so long to review, it was a complicated, different way of using iCloud and they had to make sure it all was in order. It would be live on the App Store in a few hours. I just sat there in amazement, mumbling out a “Wow, thank you” and hung up.

I seem to have a guardian angel and I couldn’t be more grateful.

Don’t ask me what I want it for if you don’t want to pay some more

You might have noticed that the iOS app is free and the Mac app is $4.99.
I had to find a way to make sure Windows-PC users wouldn’t pay for an app on iOS they couldn’t use.
Transloader for iOS depends on the Mac app, and the Mac app depends on the iOS app. One without the other is completely, entirely, utterly useless through and through.

Another angle, obviously, is that Mac users might not have an iOS device but pay for the Mac app. I had to decide for one way or another, though, and I figured the chance of a Windows user having an iPhone is higher than a Mac user not having one.
Plus, I added a disclaimer in the apps’ descriptions that both a Mac and iOS device are necessary. So far it hasn’t failed me.
There have been enquiries to develop Transloader for Windows, though 🙂

Now you’re expecting me to live without you…

Transloader is the first app I don’t provide a demo for. It’s not because I don’t want to, it’s because I can’t.
iCloud needs a provisioning profile in the app bundle that is only available to apps downloaded through the Mac/iOS App Store which makes a demo impossible.

It’s been quite a journey and I’m so very happy I was finally able to release the app. I’ve got a few things planned for it and I’m looking forward to putting out updates and implementing some of your amazing suggestions. Keep them coming 🙂

Thank you for your time 🙂
Take care,
Matt

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

Read more

Open-Source: NSBegin*AlertSheet(…) with ^Blocks

There’s NSBeginAlertSheet, NSBeginInformationalAlertSheet and NSBeginCriticalAlertSheet, so the * is a wild-card for all those functions.

Apple Opensource Icon

picture credit: Apple, Inc.

What is this?

I’ve been growing more and more tired of always having to set up a callback-method (in the worst case, two, for didDismiss and didEnd) for NSBegin*AlertSheet(…) calls, like

– (void)alertSheet:(NSPanel *)panel endedWithCode:(NSInteger)returnCode contextInfo:(void *)info
{
 …code here…

Especially, since we have such a great thing like blocks where you can pass blocks of code as arguments to methods and functions, just like an Objective-C object.

So instead of having to set up callback methods for NSBegin*AlertSheet(…), I created ESSBegin*AlertSheet(…). Instead of callback @selectors, it takes blocks for didEnd and didDismiss callbacks.

I find it also makes for cleaner code having the callbacks right in the ESSBegin*AlertSheet(…) calls as you don’t lose the context of what’s happening before the call in my code.

Available for OS X Snow Leopard and up

Blocks were introduced with OS X Snow Leopard, so I assume (yes, I assume since I’ve only tested this on OS X Mountain Lion) it should run on Snow Leopard as well.

Download and Usage

NSApplication+ESSApplicationCategory Github Repository (refer to the read me for how to implement it in your projects)
Eternal Storms Software Open Source Projects

 

 

 

Enjoy! And let me know what you think 🙂

Take care,
Matthias

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

Read more

useless error message

“Positive” Error Messages

For me, “positive” error messages are alerts that tell you something “failed” because the user has already done it before and so there’s no use in doing it again.

Like in the example screenshot above. The user added, at some point in history, a photo to their favorites. Now they stumble upon this photo again in some user’s photo stream and add it to their favorites again. And this error pops up, telling them they’re an idiot for not remembering it’s in their favorites already.

Necessity of Feedback

Giving the user feedback on what they do is very important, no argument there. But you have to be careful not to cross the line from giving helpful feedback to just being outright obnoxious or worse, unnecessarily interrupt the user’s workflow.

Alert panels are a good way of telling the user something went wrong when it needs their (immediate) attention. But halting the application to tell the user something has already been successfully done – what’s the use in that?

Example: flickery

flickery is the app where I run into this most often. “Photo already in favorites”. “Already in Group”. “Already in Set”. “Already in Gallery”. “Already member of the group”. etc.

Early versions of flickery did have these alerts in them. Actually, I hadn’t given it much thought at the time. But using the app a lot myself it quickly became clear to me that it’s just plain annoying.

flickery does have a “flying” animation when adding photos to favorites, sets, groups and galleries. Isn’t that all the feedback necessary in that case?
The user is informed something happened and that’s what counts. And if it’s already in there – who cares? Putting it in there was the point all along.

I do the same thing in ScreenFloat. When you add a shot to a category and it’s already in there, you won’t see an error panel telling the user it’s already in there. That was what they wanted anyway.

So, what’s the point?

Short and simple: avoid alerts, if you can.

They disrupt the flow of the app and take the user away from what they’re currently doing. There are many better ways to let the user know something happened – especially if it’s positive feedback.

[twitter-follow screen_name=’eternalstorms’ show_count=’yes’]

Read more