Yes, yes, yes and yes. /via John Gordon.
/via daringfireball
Nailed it! There is some truth in this… I guess everyone should go back to core animation (at least).
The other thing is: listen to your developer, because he will offer animations that wireframes cannot show. Assign some constants to the animation times and delays, so that you can tweak them easily. I remember doing 10 builds for a single flipping effect for a toddler game. Until it was perfect for the customer’s kids. That’s sweating the details.
This week, Oliver and I discuss that issue we all face all the time: what tools do we use? A great round-up of utilities for iOS developers, as they seem to come alive faster than I can test them. On the menu:
- crashlytics
- deploymate
- Apple Configurator
- Buildozer
- Slender
- and last but not least, Linguan.
Plus a great discussion on Github, SVN and hosting your own git. My recommendation: if you’re an iOS developer, these 75 minutes of nerd debate around our favorite dev environment should be useful to you.
We’re also welcoming questions, comments and suggestions… Are you using other tools we failed to mention?
Dynamic Elements and VoiceOver
One of the things that are worth mentioning about VoiceOver is that any control that you’re picking from various sources is likely to NOT have VoiceOver features enabled or dealt with properly. Here is a perfect example: the excellent SVProgressHud by Sam Vermette, that anyone and my grandmother seem to use in their projects, as soon as an operation needs a bit of time to complete. Check it out on Github, it is great.
Now, let’s put ourselves in the situation of a visually impaired user. If nothing is added to it, when you launch the action that requires the use of the hud, the user will not hear anything… and given the fact that he cannot see the hud, its usage amounts to zero, the UI is wholly inappropriate and the UX is broken. There is, however, a neat trick that you can use, it will only add a couple of lines to your code. Say you are searching a long list, for this example (probably retrieved asynchronously from a webservice). Your code should read:
[SVProgressHUD showWithStatus:@"Searching"];
if (UIAccessibilityIsVoiceOverRunning()) {
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,@"Searching");
}
Try it, your user with VoiceOver enabled will be told that the search is underway. Don’t forget to pair that with the end statement, say when your data has been retrieved:
[SVProgressHUD showSuccessWithStatus:@"Success"];
if (UIAccessibilityIsVoiceOverRunning()) {
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,@"Success. Results found");
}
And that’s all that was needed. This does not need to be paired with SVProgressHud by the way, but that’s a great example I think. This method can be applied everywhere in your code, you may want to use categories to extend the classes in order to support it. But that will be for another day.
VoiceOver Love
If you really want to know the difference between iOS and Android, look no further than VoiceOver1. This past week, I have re-opened one old project of mine, TipToe, which is a sleek search engine I optimized a few years ago for it to be usable by visually impaired people. It sort of has been abandonware for a year: I make $200 per year with it, and it’s never been my first priority to update… Yet I was reminded by one of my users that this matters to some people, and did update it. I have been extensively playing with VoiceOver as well, and am in awe2. If you are developing an app - and let’s face it, if you read me here there is a strong chance you do - you should definitely try it.
It does work extremely well everywhere, and particularly on the web. The only critic I would have is that the Settings menu sort of sucks when you are on Accessibility, as the static table is way too long, running over several screens (VO and Accessibility lets you swipe down a screen height with a swipe of 3 fingers). AS a dev, the only critic I would have is that the VoiceOver class is not directly accessible in iOS, whereas it is in OS X. Is this a bug? For some reason, during my tests, I found that VO is different on the Mac and in OS X. Particularly for pictures. One thing came out immediately: VO use on the Mac is sort of a pain, due to the more complex UIs and menus laying everywhere on the screen. The only way it makes sense on the Mac is when you are running an app in full screen. I haven’t tried the voice command, maybe it makes things easier.
Now, I want to share a particular feat with you. Here’s what you’re going to do: switch on your iPhone, get yourself to Settings > General > Accessibility and switch VoiceOver on. Now, give or take 3 minutes of furious swiping and double-tapping (it’s not so easy to pick when you’re starting with VoiceOver - rmemeber that visually impaired users just tap first to know what control they’re on, and double tap to activate that control), go open Safari and navigate to Steve Jobs’ Wikipedia entry. You will be greated by a picture of Steve holding an iPhone 4 at WWDC. What really kicked me out of my socks is this: tap the picture, and here’s what you will hear:

“Shoulder high portrait of smiling man in his fifties wearing a black turtleneck shirt with a day old beard holding a phone facing the viewer in his left hand.”
I have been shipping two apps this week. As we all know, this involves a lot of last minute tiny adjustments, swearing, wondering if we’ll get there eventually. I’ve also taken a strange habit to switch to VO, go to listen to that picture. For two reasons: 1) it reminds me what “great” and “excellence” mean, and that they are different words, and 2) VoiceOver would not be useful if it was only text-to-speech. At some point during the development of iOS, someone (I’d like to know who) realized that it must be object-to-speech. And Boy, did they deliver on that!
-
I can’t find the VoiceOver accessibility options for the Android system, maybe I haven’t searched the web hard enough. Can anyone confirm whether it even exists at the system level on Android? If not, this is sad… and reflects the fact that Google does not care about its users - sorry, products - as much as Apple cares for a minority. ↩
-
doesn’t happen often, I’m generally more hyper-critical and John Siracusa when it comes to engineering stuff. ↩
The update we were all waiting for, where Horace Dediu discusses the adoption of various platforms over a 10 years span. Excellent comments as well. Must read
Just a Word to Help Designers Work With Developers
Here’s a small compilation of the things that end up driving me completely nuts when I’m working with a designer on an app. I guess all those are pretty common. They’re not a deal breaker but I find it exhausting to have to go through it over and over again… And generally end up pissed off at some point. So here we go. My top recommendations for not driving your developer completely crazy:
- Know UIKit. Read Apple’s doc, use apps, read a dev book for beginners
- Read the fucking HIG
- Deliver vector graphics only (SVG is a great format, compatible everywhere… Wait Photoshop doesn’t export that? That’s because that bloated turd one calls a software is not doing vectors. Ditch it and work with real tools)
- Don’t use shitty fonts. Thin fonts should be banned forever in the HIG
- Designing an app and a web page are completely different tasks. Go back to points 1 & 2
- crop your pictures correctly
- use transparent backgrounds
- group and name your pictures correctly
- don’t send me fucking photoshop files. They’re unusable unless you do the exports and I’m not paid to do your job
- be flexible, or read the HIG
- listen to the dev when he points out the differences between the various screen sizes
- things you cannot storyboard or explain in plain English have little to no chance to look and feel like you imagined it would. Devs do not have access to your unconscious brain - thanks god for that
- things that cannot be skinned in UIKit are probably a bad idea and will cost you in dev time. I don’t care if it’s really simple to do it in photoshop, it might be a real shit task in objective-C
- when I’m doing contract work, I’ll make sure to make you or your customer pay for those 2 pixels that denature your “art”. Particularly if the solution is not obvious
- read a few posts on the icon dimensions. Don’t round the corners, iOS does it for you. Heck, download one of the [insert number here] templates off the web.
Jason Snell (@jsnell) just tweeted what’s surely going to be the best news of the week: a new evolution of the Mindstorms kit is coming out this year. Yeah!
So, it features a Bluetooth sensor and direct pairing with iOS (Android as well, but I couldn’t care less), which is frankly exciting. In the past, to get the iPhone to work as a remote with the NXT I had to resort to a horrible hack to get all on wifi, which sort of was ok after a good hour of sweating and swearing in front of the Mac and the damn brick. Try doing so when a 5 y.o. is breathing down your neck, jumping around you, and asking the killer question: “Dad, when is it ready, I want to play!…”
The only (small) deception is, from the pictures of PCMag’s article, there are still wires going to the sensors and actuators - those damn RJ45 like connectors are still here. But that will have to do: I can’t wait to see the excitation in my Son’s eyes when he sees the scorpion robot we’ll make together!
The Soloist Paradox
One of my all times favorite pieces is Ravel’s Piano Concerto in G Major. I’ve been melting over the second movement for as far as I can remember, and must own 15 or so different versions of it. That second movement is very particular (if you’ve never listened to it, please do and come back later… or not). From the most basic level, you can hear that it splits the piano from the rest of the orchestra, and then proceeds like arranging the piano with the orchestra and the orchestra with the piano, until all blends again perfectly. Beautiful piece, played perfectly by Helen Grimaud here (second movement), and by Leonard Bernstein here (the second movement discussed here starts around 9 minutes). I’m including two versions as Grimaud is considered by many the best alive player of that piece, and Bernstein remains my favorite interpret for this one. LB was a true genius and, if you have never seen him in concert, I would definitely encourage you to do so right now: he directs and plays at the same time, which is rare.1 Which probes the question: is it really a concerto for piano, or the piano for a concerto? In other words, which supplements the other? Is the soloist making the piece or the piece making the soloist2?
When I look at the state of iOS and the App Store, I am amused by the same kind of paradox. It appears that the most successful apps in non-gaming categories have been successful because of the UI innovation they brought to the table, often supplementing a service that was needed. It comes to one of the things I am trying to teach at the moment, namely that the tool does not make the result, the programmer makes the result. In all cases, one should always start by designing the UI on paper, and describe with a few simple words what each screen will do. In my experience, that’s the best way to streamline the programming after. Most beginners I know will essentially pick up components and try to mash them up into something coherent. It does not happen like this, the result is often completely incoherent. It is always preferable to start from the result, the vision, and then walk back to a solution to the problem. That’s how we do for most engineering problems I’ve ever solved, that’s how we do for project management, etc… So, there are two creative processes at play, that should not be split, but be kept independent in the early stages of development: 1- create the app, and 2- code the app within certain constraints. Think about the pull-to-refresh feature we all enjoy: how would you code it without devising it first? And this is how very successful apps, which provide a beautiful, simple and usable UI, achieve it.
Back to my piano analogy. In iOS, the system does a lot for us. It is really optimized for the device, animations are so smooth that they can be easily abused, particularly as they’ve become really easy to implement with the block syntax. I do believe, however, that iOS is just our orchestra, and the one thing that makes an app special is the piano. If you want to make your app better than anything else, what you should strive for is the same as that concerto for piano, where the piano and orchestra cannot be discerned anymore. In a sense, your app should blend into the system, naturally: what better way for the system to blend into your app?
A last interesting point, is to see where the analogy breaks. That one is quite easy: the concerto provides a unit of space and time. This is never the case for your app, as it will need to evolve with the system, and will be used everywhere and in situations you cannot imagine yet. Food for thoughts…
-
for completion, you may also want to check Rhapsody in Blue, though I can’t find a complete uncut version on Youtube - try this one↩
-
actually, the other reason I included the links to two pieces is so that you can compare their eyes and attitude in the second movement. I only discovered when watching these videos why I had always felt - from the recordings alone - that Bernstein’s piano and overall rendering was (and remains) more “organic”.↩
War of worlds
That’s sort of expanded into a long post, but it has sort of bothered me. Some parts of this story have rightfully, I think, pissed me off. So, it’s better to write it down and get to something more constructive. I’ve removed the names of all the people involved, of course. And, of course, I’m the sole responsible of my thoughts and writings. Background story: we’re going paper-free and will equip each student with a tablet. That’s 500 to 1000 pieces, a decent market for education devices.
I really thought I would never get into the fanboys - fandroid war, mainly because I didn’t care. Here’s the thing (disclaimer): I’ve been a happy Apple Dev for quite a while now, and I simply didn’t care about the Android ecosystem, and the ongoing wars with the Apple ecosystem. Just no need to, no time for. There are a few reasons, but let me outline just the main ones:
- the handling of the GPU by iOS has been a feat. The flexibility it has offered me goes a long way, and proves to be of major importance for the things we’re doing now and in the near future. Getting real engineering apps on tablets requires some frameworks that simply do not exist on other platforms.
- I don’t believe in stolen tech. For those of us that have been around for long enough, we’ve seen what happened with Apple/Microsoft in the 90s, and 20 years of crapware as a result (both hardware and software).
- I prefer to pay and keep my data private. I don’t trust anyone with my data, and particularly not google. After all, I had to remove all my data from gmail, which I used as a commodity for large email, after my account was hacked. I had a strong password, and it didn’t deter the Chinese hacker from brute forcing it. So, as a generic rule, when a service sucks I’m all out.
- I’m quite happy with the Apple ecosystem. It is not perfect, but allows me to get the content I want when I want, among other things. And it’s proven rock solid.
- as a scientist turned entrepreneur turned developer, I had to put food on the table. And 3rd party app development together with app sales has been good for that purpose
- I tend to laugh at bold statements like “don’t be evil”. Dudes, I don’t trust you with my data. Period. Even if you’re all well intentioned, which I doubt, what happens the day management changes and the shareholders and/or the board decides they want a bigger ROI? Need I remind you that you royally fucked-up all the social services you’ve ever acquired. And most services you developed. Google Reader, anyone?
- am I the only one, or is the monopoly on the “web”, gained as google became the primary portal to enter it, completely creepy? Serving me better ads? I’m independent, don’t try to tell me what I need (I don’t need you for that), where I should be (go there and fuck yourself first), or what I should think (actually, get to room 101 and fuck yourself there).
Now if you don’t have any problem with the above you’re probably the proud owner of a device powered by the charming android system (more on that later, I actually went and tried some Samsung knock-offs). And honestly, I don’t have any problem with it: that’s your choice, that’s your phone or tablet. Again, I’m not the one using it, couldn’t care less. Where I did have a problem, actually, was when I realized that this is not a matter of choice that can be discussed anymore, but has become a religion.
I’ve been a scientist for most of my adult life, and have owned a personal computer for the past 30 years. I have used all flavors of Unix, Microsoft and Apple systems. I do also have earned a PhD, am a full professor and now head of department… and have worked in public, semi-private and private environments. All of that combined leads me to be a pretty good and quick judge at people who are bullshitting me. And boy, did they try to pull this one on me last week. To the point it was absurd and I actually laughed. And also saw something I had never, ever, experienced in my professional life: pure, unabated, hatred in their eyes. That, I must confess, I didn’t expect (and that’s actually why I decided to write this post). For 3 hours in a row they gave me the Android evangelism, which could be summarized in one sentence: “I hate Apple (irrationally)”. Here are the traditional arguments [my answer in brackets]:
- Android is open [nope, not really, and beside I doubt any of our students will recompile the core, and certainly wish no one ever has to]
- Android is winning [seriously, have a look at Asymco.com]
- Apple doesn’t have all the apps a student needs [you must be kidding me, right. Not only it’s got everything, it’s got more, and they’re actually designed for the iPad, not blown up apps with unadapted graphics elements to cover the whole range of screen geometry of me-too devices]
- Apple is expensive [I’n definitely challenging you on that one, you moron]
- Why should we settle for a sub-par experience when Android is better [please define better]
- you can run Flash on an Android tablet [not really, and that’s a tech that is bound to disappear within a few months anyway]
- Apple sucks [I didn’t answer that one, it involved the Mum of the person speaking, and a kodiak bear]
Here are some less traditional - that’s the first time I heard of them - arguments:
- you can’t connect a keyboard to an iPad [you must be kidding me. Get to the web page of you least favorite company]
- when you connect a keyboard to an Android tablet, the batteries of the keyboard extend the battery life of the tablet [well, the iPad doesn’t need to have its battery extended. If you need to have a keyboard for that purpose, use a laptop]
- yeah but if we ask the student to carry a laptop on top of that, he will hate the tablet [do you hear yourself talking and make sense of it? Negation of negation in language is not equal to positive… Loosing your mind dude]
- you can run eclipse and compile apps on an Android tablet. You can’t compile on an iPad. So you need a computer. [here’s the thing: no one, repeat no one, would ever develop a full app on a tablet. I’ve used VIM successfully to modify some HTML, PHP and even some obj-C files, compiled remotely, but that’s not for the faint hearted… And definitely not for beginners. So, it is possible. Entirely possible, but difficult. Now, I doubt that you can write anything on a 7” tablet in eclipse. Do you own a tablet - No. For reference I purchased a 30” screen to use eclipse comfortably. I doubt that you can see more than 2 square inches of code in eclipse on a tablet, if it even exists. Besides the loading time on a craplet must be interesting. That said if you really want to go that way, I’m ready to do 2 weeks of paired programming with you on a tablet and I on my laptop, to see how much you’re enjoying it].
- yes but some students may want to develop [we’ll get them on workstations, that’s what they’re for]
- Accounting students won’t be able to use Excel [they’ll use Numbers]
- but they will have to buy their apps [Now that’s an interesting one. I’m going to teach students how to develop and sell apps, and earn an honest living. That’s what we’re here for after all. But you want me to teach them how to hack and steal first? Because you’re not going to procure official apps from an official market, right? How am I supposed to teach the value of software, hard work, to students if the first thing we teach them is that buying when you can hack is for suckers? Btw, we’re giving students tablets that are fully loaded, and deploying our 500 devices like so]
- it’s out of the question that our students learn objective-C. [seriously, listen to yourself. We’re dealing with the future of the students, not your personal vendetta. I do believe that students who come out with a Mobile Tech diploma, whatever it is, should be able to code in at least C (that’s the base requirement), objective-C and, yes, Java. This should cover 97% of heir front-end needs. Now for the ones seeking credits for the back-end, that’s another story. But we’re in the job of providing value to our students and to society… that means delivering students that can code when they’re supposed to, using languages they’re supposed to know in 2012.]
- but not everyone needs to know how to code. [leave aside that everyone who graduates now should, particularly your techno-preneurs. Now think about how enormous what you’re saying is: how would you like to hire an engineer that cannot perform any mathematical calculation? - that’s not the same. - yes it is, and FYI when I interview an engineer, if he can’t solve a simple integral within the first 3 minutes he’s out. That’s pretty much the same for developers. If they can’t write code they’re out]
- the stylus on Android tablets are better.[man, you should really at least _try_ to use a tablet. Just once].
- you haven’t tried a Samsung Galaxy [I have, it’s not a bad device, despite various UI inconsistencies. But that deal is off anyway, as their rep clearly told us that i- they didn’t want to enter any partnership with us, and ii- assorted this declaration with a few racist comments I do not want to repeat. Oh well… Let it be know that it was really shameful. For this reason alone I will never own _any_ Samsung product. Now let me be fucking clear: any human, whether he’s white, black, yellow, red, blue or green, will bleed the same. The same, of course, goes with gays & lesbians, believers in various religions, etc… All are entitled to education, and you’re just lucky not to have called my Students “primitives and not worth it” in front of me. I’d have sent you back to Korea in separate boxes. I seriously hope this guy was an exception, it is just a shame to think like this, let alone voice it].
All of this was concluded by the requirements of a project that should not exist (found commercial alternatives in less than 5 minutes) and has been outsourced to students doing it in Android for $15k. And within 2 minutes I found out that they lied to me on the tech requirements. Again, I’ve been doing his for a long time, that’s hard to pull one like this on me. Try a domain where I’m not knowledgeable at least.
That’s it. Not sure how it will turn out. I guess marketing may have the last word, as 90% of students required an iPad, 10% a Galaxy, and 2 (just 2, not %) a RIM tablet.