Alex headshot

AlBlue’s Blog

Macs, Modularity and More

NSConference 2012 Day 3

2012 Nsconf Conference

The final day of NSConf 2012 started off with an inspiring talk by Fraser Speirs (@fraserspeirs) on the deployment of iPads throughout Cedars School of Excellence in Greenock near Glasgow. In 200, they gave every child in the school an iPad, since they are teaching the future citizens of the 22nd century whose lives are going to be even more integrated with technology by the time they graduate from university.

EduPic11 Video from Fraser Speirs on Vimeo.

The example applications which he referred to in the presentation (Math Bingo, Brushes, Toon Tastic, iThoughtsHD) were good examples of applications which involve the children being creative (and not just learning for the sake of it). However, he made a few suggestions, such as Slice It! which he berated for getting too difficult too quickly.

The general advice applies to any app, not just ones geared towards children, included:

  • Don’ts
    • Assume that the internet works correctly
    • Assume the internet is fast
    • Offer in-app purchases (which may be disabled by parental controls; test)
    • Assume that the child can read (for early pre-schoolers)
    • Assume that fine motor control is perfect
    • Get difficult too soon
    • Lock into a single cloud (e.g. only provide export of video via site)
    • Offer too many export options (PDF export to WebDav/Email sufficient)
    • Use notifications as advertising channels
    • Assume everyone speaks with an American accent
    • Encourage shaking of the device for a required operation
    • Make sure adverts are age appropriate
    • Be creepy with user data (including location)
    • Crash – you get one (maybe two) chances
  • Dos
    • Be fun
    • Talk to teachers (especially with the recent changes)
    • Test with children (your own, or ones you know!)
    • Remember that there are different curricula (even within the UK)
    • Be power efficient
    • Prioritise stability over features
    • Provide a guide for teachers/parents
    • Support the ‘photos’ app as a shared filesystem
    • Penalise random presses (to avoid guessing)
    • Be ‘tamper evident’ (e.g. when the child quits without finishing)
    • Provide structure and add headroom for creativity
    • Record and play back user activity, especially via video if possible
    • Consider localisation even if it is country specific
    • Support projectors and AirPlay – an AppleTV is a cheap remote display

The last point – enabling a teacher to present from anywhere and show the display on the screen, or allowing a student to present their work on the shared screen, is going to really be powerful in the future.

The education market is ripe for a revolution of electronic applications (those that aren’t just PDFs in a single-purpose app – if you show a barcode, you’ve failed).

Fraser has websites at both Speirs.org and FraserSpeirs.com.

Calabash

Niklas Saers (@niklassaers) Calabash is available from GitHub, and provides a testing framework for iOS and Android. It uses a cucumber test harness to run tests, and simulates user interaction gestures and can test the state of the user interface.

Since the test framework needs to use private APIs, the setup script generates another target which includes the test framework (but shouldn’t be used for submission to the app store).

```sh Setup script for calabash $ sudo gem install calabash-cucumber $ calabash-ios setup $ calabash-ios gen $ DEVICE=iphone OS=ios5 cucumber


The test framework was built by
<a href="https://www.lesspainful.com/">LessPainful</a>,
who have a way of testing the same application across multiple devices
(including a robotic rotation device), and can run tests over those devices
and report back screenshots where necessary. There's an informative
<a href="http://blog.lesspainful.com/2012/03/07/Calabash-iOS/">blog post</a>
discussing the calabash-ios framework. There's also a number of
<a href="https://github.com/calabash/calabash-ios/wiki/00-Calabash-iOS-documentation">wiki pages</a>
on the GitHub site.

Niklas has written a <a href="http://blog.saers.com/archives/2012/03/21/automatic-ui-testing-with-calabash-from-nsconf/">blog post</a>
which links to an
<a href="http://blog.saers.com/wp-content/uploads/HelloWorldNSConf2012.tgz">example project tgz</a> file and a
<a href="http://blog.saers.com/wp-content/uploads/NSConference_2012_-_UI_Testing.pdf">PDF of the presentation</a>.

## Broad Decisions and Narrow Promises ##

Guy English (<a href="http://twitter.com/gte">@gte</a>) spoke about a game
called "Poodle Pump" (though I can't find any reference to a game by that on
the app store). Other than a series of pump-related jokes the general gist
of the presentation was that as an application evolves, it is necessary to
determine the backward-compatible nature of the data used by the application.

The theme of the talk was that any promise to the user (whether it be an
explicit one as part of the game's documented feature set, or if it is
an undocumented feature which becomes known) then this is something which
ends up being a feature which needs to be supported. Guy suggested that
this is why Apple keep APIs private for so long, so they're explicitly
documented as unpromised features. (HFS+ was used as an almost obsolete
filesystem technology that Apple keep having to support because it is their
main system.)

## App Localisation ##

Robert LoBue (<a href="http://twitter.com/roblobue">@roblobue</a>) of
<a href="http://applingua.com">AppLingua</a> gave some very useful advice
about app localisation. There are several reasons people choose to localise
applications (increased downloads/sales or SEO purposes).

However, simply localising an app doesn't necessarily guarantee any of those.
Typically, any PR releases such as announcements and news items are needed
in the main language, and the same is also true of any other languages.
Generally, apps recommended on the 'featured picked' are translated into
the loacl language.

There's a lot of useful information on
<a href="http://kb.applingua.com/">AppLingua's knowledge base</a>, including
some links to
<a href="http://applingua.com/usefulapps.html">useful applications</a>
used for translation and editing purposes. The suggestions are to translate
the keywords, app description, in-app images and other user interface
widgets. However, the "what's new" or website are rarely things which need
translation.

Some command line tools (such as `genstrings` and `ibtool`) can be used to
extract and convert strings into `NSLocalizedString(@"SHARE_BUTTON",@"Share")`
statements in the code.

Finally, Rob cautioned against using Google translate, or any other automated
service, for performing translation. Even Apple isn't immune, having recently
released images of iPhone 4S with iPhoto and having replaced 'crop' as a
less palatable word on their display materials.

## Core Data and iCloud ##

Daniel Pasco (<a href="http://twitter.com/dlpasco">@dlpasco</a>) of
<a href="http://blackpixel.com/">Black Pixel</a> talked about the problems
with Core Data and iCloud. A
<a href="https://github.com/blackpixel/NSConferenceiPhoneCoreDataRecipes">sample project</a>
containing some of the concepts discussed is available on GitHub.

Sadly the presentation went about three times as fast as it needed to get
the information across, but every third page was a facepalm with the
statement "you can't" -- a recurring theme of the presentation.

One point of note was the cloudstorm that can occur when changing a
transient Core Data property when two or more devices share the data.
Since the changes don't actually have any effect, the data is effectively
unchanged, but it does trigger an update (which then has the same zero-effect
update and causes a subsequent update). Avoiding transient properties should
fix that problem, as will launching with
`-com.apple.coredata.ubiquity.logLevel 3` to get a spamfest in the message
log saying what Core Data and iCloud are doing. Allegedly implementing
the `+contextShouldIgnoreChangesFor<Key>` allows you to determine if
the key should be ignored. This doesn't appear to be documented anywhere,
although a brief use is mentioned in `NSManagedObject.h`:

```objc NSManagedObject.h
/*  Distinguish between changes that should and should not dirty the object for
any key unknown to Core Data.  10.5 & earlier default to NO.  10.6 and later default to YES. */
/*    Similarly, transient attributes may be individually flagged as not dirtying the object by adding +(BOOL)contextShouldIgnoreChangesFor<key> where <key> is the property name. */
+ (BOOL)contextShouldIgnoreUnmodeledPropertyChanges NS_AVAILABLE(10_6,3_0);

The conclusion from this talk appears to be that using Core Data and iCloud are really not ready for each other at this stage.

Magical Record

Saul Mora (@casademora) talked about Magical Record, a Rails-like device for managed object contexts using dynamic methods using the Objective-C runtime. There’s a GitHub project available which has more details.

Real World UX

The final presentation was given in a dry Scottish accent, courtesy of Matt Legend Gemmell (@mattgemmell).

One of his many examples of bad UX was of London Underground’s adverts with a miniature QR code the far side of the platform past the live rails, leading to one of the conference’s most memorable quotes:

Anything that can incinerate my privates is bad UX

(Image from WTFQRCodes.com)

and of course, the ‘In case of fire, exit before tweeting about it’ sign; this image from ethannonsequitur.com:

There were many such images which caused significant laughter in the audience (including a couple which reduced me to tears), such as All You Can Eat Buffet Not Mean All Day Buffet, 15 is this many (there’s a Best Buy icon in the background, by the way Matt), and of course, the no smoking in Arabic tanker.

I won’t say what the Audi Wifi on the Move logo reminded everyone of …

Summary and Wrap-up

NSConference always delivers, and this year was no different. The main difference between NSConf and other conferences is the community; and the socialisation is an excellent part of the conference (including the casino night and dinner on the first day). It’s a great chance to meet fellow NSConf attendees from both past years, and to meet new people at the same time.

With the popularity of NSConf increasing and the same restricted size in the out-of-the-way location, expect the ticket sales to be even more brisk next year than they were this year.

Finally, a big thanks to Scotty and crew for organising NSConference, and for raising so much money towards Charity: Water.