Network Error Messages That A User Can Actually Understand

I was helping a client with developing an iOS app that uses almost all of the time their API, hence requires a working network connection. Unfortunately, mobile devices do not always have that. So we needed to deal with situations where the connection would be down. A lot has to do with smart software, for instance retry after x seconds without bothering the user, or detect when network is available again and then try again. And of course not an app should never crash or show inconsistent results! However there will always be cases when you need to tell the user something is wrong, hence error messages.

Our goals were:

  1. Be understandable for a nontechnical user
  2. If possible, explain how to fix the problem
  3. Be humble. It is not the user’s fault
  4. Be aware of the user’s state of mind

Bear in mind, a difference with a web site is that a user has very little control over what URL is called (no browser bar for user caused 404′s or DNS lookup errors). Another difference is that we control the client, so as a browser can detect connection problems.

HTTP status 404 (object not found)
Technical explanation: no resource found at url, very probably because of a programming error
Error title: Oops!
Error message: Sorry, we made a mistake and couldn’t find <object> for you

HTTP 401 Unauthorized or HTTP 403 Forbidden
App is trying to access a secured resource that require some kind of authentication. User entered incorrect credentials
Error title: Login failed
Error message: Check your username and password and try again.

HTTP status 500 (server error)
Technical explanation: server error, caused by a server programming error or network/hardware failure
Error title: Oops, sorry!
Error message: Unfortunately our server had a problem. Please try again later when we probably have fixed this.

HTTP timeout
Technical explanation: very probably the connection is that slow that the request timed out. Small chance it was actually the server that was slow
Error title: Connection is too slowww
Error message: Unfortunately the communication broke down. Please try again when you have a better connection.

No network connection
Technical explanation: user could have no cellphone reception, be on a bad wifi network, or turned on Airplane mode
Error title: No connection :(
Error message: We couldn’t reach our server. Are you in airplane mode? Try again when you have cell phone reception or wifi again.

No DNS entry for host
Technical explanation: probably hardcoded server name could not be resolved, might be due to a down or unreachable DNS server, very probably a network problem
Error title: Oops! Could not find server
Error message: We couldn’t find our server, probably because of a bad connection. Try again when you have a better connection.

Also read this excellent post about error messages. What do you think? Do you like really funny messages like Mailchimp uses?

hosting iOSDevCampAMS was a blast!

What a fun it was. As veteran participant I was given the opportunity to host a hackathon myself. iOSDevCamp is the biggest iOS hackathon in the USA, and also has satellite events. I happened to be in Amsterdam so I seized the opportunity when I was asked to run the iOSDevCamp Amsterdam event. A full weekend it was, starting with pitches on Friday night, hacking on Saturday and Sunday and final presentations on Sunday with a jury, in which I also participated.

iOSDevCamp USA had this year with over 500 developers. We in Amsterdam had in total 4 teams, with over 25 iOS developers.

Civ Orbis won, with their history Foursquare app. They also won the iOSDevCamp Satellite competition, woohoo! Here is a video of the whole weekend:

 

Read a full recap on Appsterdam blog.. Appsterdam is an awesome organisation for app makers in Amsterdam and the whole of the Netherlands. They organise a ton of events each week, if you live in the Netherlands check out their site and the Appsterdam Meetup page.

Retweetiquette- when to use the new or old retweet, or use multiple accounts

Not so long ago Twitter launched their retweet functionality. They did so after users had started passing interesting tweets on to their own followers, most of them using the RT format. OK, so not everybody was completely thrilled with the Twitter implementation, mainly because it doesn’t allow you to add your own comment to a tweet. It does however allow Twitter to filter out multiple retweets by the ones that follow you. And also, Twitter can track the number of retweets, thereby revealing what tweets are popular.

What happens if you use the RT format: you get all the messages as Twitter cannot filter out the doubles. For instance, I follow a lot of people that work for Layar.com: Raimo, Maarten , Claire and Dirk (G). They are know people in the Dutch internet scene, and are avid Twitter users. So whenever they won a new prize or have a new job opening, they retweet each other. Unfortunately a lot by using the RT format, and so I get those messages with exactly the same content, 4 times.

Now, lately I have become aware of a new trend among power users, in particular journalists/bloggers that have a personal account and also maintain business twitter accounts. Take for instance Mike Butcher, one of the guys behind Techcrunch Europe. Using powertools like Tweetdeck or Hootsuite it is possible to publish one update using multiple accounts, and thereby 2 tweets from 2 different are accounts are sent out. So when you follow both Mike and TCEurope, again you get 2 tweets with exactly the same content. Aha, not adding any value no. So how bad is this? Well that depends on the overlap of followers. Mike has personally around 15,000 followers, TCEurope 10,000. Overlap? I estimate 7-8.000 followers. So all of these get the same tweet twice.

So how should we retweet, what should the retweetiquette be? My proposal:

  1. use the official retweet functionality as offered on twitter.com
  2. only, and only if you have interesting content to add, use the RT format
  3. do not use multiple accounts to send the same message. Instead, use one account to send the original and use the other to retweet the official way

This way users do not get tweets too many times, and Twitter can calculate all kinds of interesting stats. What do you think?

Dear Apple, a little love for developers please

Yesterday Apple announced the new version of the iPhone OS, OS 4. Ever since OS 2.0 and the ability of third party parties developing apps for the iPhone platform, the OS has been a huge success. Although OS 4 has added some nice features like multitasking, life of developers has not become easier on the whole.

So let’s have a little overview of this that interested me:

  • Multi-tasking. Finally. Yes battery life and performance is important for end users, so not offering multitasking was defensible. However, 7 services ? That a lot of work for developers to implement. I’ve been looking at it for a day now, and I am still not sure how to use some of them. And can I do everything I want with these services?
  • iAd advertisement platform. Great for developers, what about 3rd party ads platform?
  • You have to use Objective-C, C or C++ to create iPhone apps

So…

Some features were really lacking compared to Android. The multitasking is nice but difficult. Android’s services are great and simple. But the biggest news is the 3rd party software makers that Apple is running off its turf, most notably Adobe with Flash. There are other frameworks in peril, like Unity 3D. What is not clear yet is what 3rd party ad platforms like AdMob and Mads. In general Apple has been clear: they want full control of their platform.

The question is whether this is smart. One, to create a vertile platform you need to be reliable and stay out of the way of companies building on your platform. Second, for developers the Objective-C/C/C++ is not that great to work on.

To make a statement: Objective-C is 15 years old, a hybrid language invented at NeXT when Steve Jobs was heading this company before he returned to Apple.  Well, Steve is a brilliant CEO, but not a great language inventor. So killing other languages hinders developers to create new tools to have a better experience creating apps. And if it prohibits other frameworks from displaying ads on the iPhone platform, well that shows a total disinterest towards the developer ecosystem around the iPhone platform. Any willingness to contribute to the platform is completely cut off by now.

The question whether it is smart. All major inventions now have to come from Apple itself. Besides that,  the question is how much developer inventiveness is pushed towards other mobile platforms like Android. Right now it is ok, but in 2 years it is forecasted that Android overtakes Apple. There will be alternatives to the iPhone platform. The question is where developers will be in 2 years time. These strange moves show that maybe Android is much nicer to devs.

So Apple, please a little love for your developers please.

Bye bye Sun, what about Java?

Well, if you now to to www.sun.com, you are redirected to www.oracle.com. After the OK of the European Committee by Neelie Kroes, Oracle is free to take over Sun completely. So it did. A lot of sadness to the people working there and supporting there. A technology company is merged into another and disappears off the radar.

So what does this mean? A commercially very successful company bought a very inventive (yet not commercially successful) company.  Just look at the list of acquired companies. So Oracle bought a company with 3 key products: Sun hardware & OS, Java and MySQL. The hardware business was suffering from the biggest losses. Premium hardware with excellent software and support, but expensive and outran by cheap X86 hardware + Linux. Still, if you need one machine to serve your big and battered database, a Sun Solaris box running Oracle (!) is your best bet. MySQL caused the biggest concern for the EC to deeply investigate the merger. Their fear was that Oracle would be come a too big player on the database market. I don’t know how, but somehow the EC now thinks this is not a major concern so that their approved of the merger. I am still concerned, especially after the original creator of the open source database wrote that the world should object. However, MySQL is still open source and has been for some while, so buying the company that bought the company that offers support (and yes does a lot of development) should not hinder the further development from MySQL too much.
Continue reading

Combining multiple UITextFields and a UITableView in a nice way for an iPhone app: part 2

My last blog post was about creating a form for an iPhone application by combining multiple UITextFields in a UITableView. I outlined the problems with this kind of screens. The first problem is the destruction of data already entered when scrolling the field off screen and secondly, app crashes when the field with focus is scrolled off screen and you touch inside another textfield. The solution I proposed was to nest the UITableView inside a UIScrollview. After receiving feedback I came up with a second solution:

  1. extend a UITableViewController instead of implementing UITableviewDataSource and UITableViewDelegate yourself
  2. disable reuse of cells by using a unique cell identifier:
  3. NSString *CellIdentifier = [NSString stringWithFormat: @"Cell%i", indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    ..

    }

The UITableViewController handles scrolling into view when the keyboard is shown quite nicely. Using the unique identifier will prevent a cell and it’s content to be reused. And I had to agree to some of the feedback: using a UIScrollView to nest a tableView is kind of a hack.

There is a down side to this: UITableViewControllers don’t like to be combined with other view controllers, so you have to use a NavigationController or TabBarController to offer further interaction possibilities. I tried to, but never managed nicely to have for instance a UIToolBar over the UITableView.

Try it out and let me know what you think!

Download XCode project TestTableViewWithKeyboard2 with demo using UITableView to create a form.

Combining multiple UITextFields and a UITableView in a nice way for an iPhone app

Update: also read Part 2 explaining a different way of solving this problem.

So a decent number of iPhone apps will not only show things like data, but also offer you the possibility to edit data. Many controls like UISlider, UISwitch and UITextfield are provided by Apple to create some type of edit screen, almost like a web form on a HTML page. Creating a simple form that only covers the top half of your screen is simple: you create your elements like UITextField at the top, and when you touch inside the field the onscreen keyboard will show up. You hit a Done Button or a non-UITextField control and the keyboard disappears again.

Now, when you have more data to add/edit than will fit in half a screen, things get more daunting:

  1. the keyboard should only be visible when editing a UITextField
  2. when touching a UITextField so that the keyboard becomes visible, it should not cover the field you are editing
  3. with the keyboard visible you should still be able to scroll to all elements of your editing form, and not have parts be covered indefinitely by the keyboard

Well, the most natural kind of view to use to display all controls is a UITableView. Apple uses it herself, look at the editing screen for your Mail.app settings. But when you just throw in a UITableView, you run into problems:

  1. when scrolling off screen, table cells are reused and therefore also its subviews like UITextFields, which causes your newly entered data to be destroyed
  2. when having a UITextField being firstResponder (cursor in it),  you scroll it off screen and the touch inside another UITextField that then becomes firstResponder, your app will crash. This is problably because the first UITextField is destroyed before it can resignFirstResponder

So how do we do this then? Apple does use a UITableView in some way, but the above problems are show stoppers. Well the answer is: use a UITableView, but don’t let it scroll.

Continue reading

Iphone 3Gs announcement review – ups and downs

So last week Apple announced their new model Iphone, called the iPhone 3Gs. This phone will of course be running iPhone OS 3.0. I already covered the announcements of iPhone OS 3.0 back in march, let’s now review the whole package of the new hardware and software. iPhone 3G or even iPhone 1.0 users can upgrade their phone starting jun 17th, but will miss out on some of the features of the 3Gs that involve different hardware.

Hottest newest features of 3Gs:

  1. better camera
  2. faster CPU and more memory
  3. better battery life (both by improved hardware and software)
  4. video recording and editing
  5. voice control

The coolets thing about iPhone OS3.0:

  1. Cut-copy-paste
  2. MMS (but who uses this anymore?)
  3. Push notification (no background processes though, but workable other solution)
  4. Spotlight search on your Iphone
  5. Thethering (using your phone as a modem for your computer)

So what about disappointments with the new iPhone 3Gs:

  1. Evolution not revolution: faster? better camera? video? No brainers I’d say. BTW camera is only 3 MP, in contrast the 2 year old N95 already had a 5 MP camera.
  2. In majority of countries the iPhone 3Gs  is only sold together with a rate plan from the local telco (AT&T in USA, T-mobile in the Netherlands). So you have to agree to a 2 year contract to get your hands on an 3Gs, even if you already have an iPhone. Guess I will be going down to Belgium, where by law this practice is forbidden and phones have to be available also for sale without a contract. Expect to pay 600-700 Euro for a phone. Yes, a lot of money.
  3. Tethering works on the phone, but the telco may not allow it. Why? Because they are not ready yet, network wise. And of course they sell separate 3G receivers for computers with a big fat contract.
  4. Standard apps are the same. Yes landschape keyboard message typing, but no major upgrades
  5. No development phones :( . So 1. you have to get a contract to get a phone, and 2. no special phones with you can play around with, like restoring an OS image any moment you want to. In contrast, for Android there is a special Dev phone, no lock and completely customizable. You can restore specific OS images, or even toy with the OS and it’s system’s libraries if you want to. Fear of misuse of development phones has been cited to be the reason for Apple not to put out developer phones. I’d say make them as ugly as the Android dev g1, and you don’t have a problem. And sell only a limited number to registered developers (only 50.000 world wide in March)
  6. Still missing: Flash!

Overall verdict: better than the previous model, but no big surprises. Let’s see what cool Android devices will show up, so that real competition arises.

More reading:

Google showing energy efficient data center design

A little dirty secret in the computer industry is that while computers and particularly CPU’s have gotten more powerful, likewise their power consumption has gone up dramatically. Also, for the server business heat release ergo cooling systems have become much more expensive, taking up as much as 40-50 % of all energy uses inside data centers. Combine this with web 2.0 business models, that often assume millions of users with a low ARPU (average revenue per user), and it becomes clear that business wise you have to make sure your power consumption is kept as low as possible. And of course, with global warming and green energy being a major issue these days you have another reason to become aware of your power consumption.

Google has been very secretive of their server and data center design. They own dozens of data centers around the world, trying to get as close as possible to the end user while reducing reliance on a limited set of data center and network backbones. Last week more details were released about their home grown server design. Keywords: completely Google custom, standard cheap components, all power is 12 Volt, on board battery instead of shared UPS usage. Also they showed their design of data centers, which is very interesting. Keywords: shipping containers as standard unit filled with servers within the data center, highly optimised air conditioning and efficient water usage.

Further reading: 

Iphone OS 3.0 announced

Yesterday Apple held meeting to announce the new upcoming version of their Iphone OS, version 3 (we’re now at 2.2.1), to be released somewhere this summer. Already days ahead was a buzz going on, with lot’s of people making lists of new features they thought/wished were added to the already popular platform.

Major awaited features were cut/copy-paste, Flash, background processes, MMS, tethering (using your phone as a modem to your laptop), wireless keyboards, better app organisation

Majority of new features are indeed implemented. Cut/copy-past is there in a nice fashion as is MMS and tethering. Flash is still at large, Adobe and Apple are trying their best to solve the technical issues. Background processes are not there, but instead Apple opted for Push notifications. This will allow a service to push a short message (alert, text, audio) to an application without the application being running. Wireless keyboards and better app organisation is still missing.

What is also interesting is the new payment models. Now, you could only charge per download. Added to this will be 3 new models: subscription to apps, purchase of additional content (great for media companies) and purchase of additional levels (great for gaming apps). This means you can also purchase new things from within the apps.

What is most interesting to me?  The push notification! I am working together with partners to create a messaging solution with a big focus on mobile. As third party apps, as opposed to the standard Mail.app on the Iphone, cannot run in the background with 2.0 it’s quite difficult to go head to head with Mail.app. Push notification will change that. As this services goes through Apple services, I am quite curious what they will charge though.

Other new features that were not so much anticipated are Search (through Spotlight), landscape keyboard, Google Maps libraries for third party apps.

I downloaded the beta SDK already, but unfortunately Apple doesn’t allow any disclosure of information or screenshots:( I honoustly hope they don’t make the mistake that they made with 2.0 again, to lift this NDA so late that no publisher dares to invest in publishing an Iphone 3.0 development book. Go over to Crunchgear to see some screenshots (while it lasts).

OS 3.0 will be available this summer, and downloadable for current Iphone and Ipod touch users (Ipod users have to pay 10 USD). So you don’t have to get a new phone to be able to run 3.0, which is great. Big question: at what speed will users upgrade their OS, and will any (major) problems arise. 

You can watch the full presentation here at the Apple site.

More reading about Iphone OS 3.0: