App-celerating!

Appcelerator TitaniumI first tried out Appcelerator Titanium Mobile at Launch 48, with the help of some of the guys from PayPal, who had recently teamed up with Appcelerator to work on the platform.

My initial impressions were very positive, it was reasonably easy to install and the Kitchen Sink example app had some pretty slick looking stuff. I’ve played quite a bit with PhoneGap and JQTouch which is also an impressive platform, but tricky at times to create a UI that looked and behaved as smoothly as the native apps. Since Titanium compiles the JavaScript down to native code, the app looks exactly the same as a native one – and there is much less styling work needed, in fact, I was really surprised by how little code was required to get a simple app up and running.

Kitchen Sink Screenshots

Screenshot of Base UI Options in Kitchen Sink

Screenshot of Pickers in Kitchen Sink

Screenshot of Sliders in Kitchen Sink

Screenshot of Twitter in Kitchen Sink


On the downside: I’ve heard anecdotally that many people have issues installing Titanium and getting it running. It does have it’s bugs: I ran into one at Launch48 with swiping on a view within a table row inexplicably crashing the app, but I didn’t have time to figure out the root cause.

One thing it is definitely well suited for is rapid prototyping – so far I’ve been able to create a simple cover flow with about 20 lines of JavaScript code. With a better knowledge of the platform, I think I could produce a prototype more quickly than an Omnigraffle wireframe sketch – just imagine the possibilities!

There are lots of tutorials and resources on the web, so here are a few good links for getting started – and some of the ‘gotchas’ that I ran into so far.

SDKs

The website says that Titanium requires either the iPhone or Android (1.5) SDKs to compile an app, but for me the New Project button was disabled until I installed both. It usually detects when they are installed, but you can also point it to the directory.

Android installation instructions

Download iOS from the Apple iOS Developer centre– you’ll need an account but it’s free (unless you want to deploy to a real device, in which case it’s $100 :().

Install Titanium

Download Titanium from the Appcelerator site download page

This includes the Mobile and Desktop versions. Once it’s downloaded and installed, open the app and click the New Project button. Choose Mobile or iPad from the Project Type dropdown.

I had an issue where I could only choose Desktop initially, but restarting the application seemed to solve this (no idea why, but I’ve had no problems since).

Titanium will most likely tell you to download the new Mobile SDK 1.4.2. This does not work for creating new Mobile projects, although it seems to be fine for creating new iPad projects. Choose the 1.2.0 SDK version and it will create a new Mobile project.

Getting Started

Creating a new project will give you a basic app with one Javascript file: app.js, inside the Resources folder. The app contains a TabGroup and two Windows. Windows are the basic unit within the app, and they can contain tables, views and other UI elements.

I found a useful tutorial for understanding the differences between Windows, Views and Tab Groups.

The Titanium Developer documentation is useful for finding out the names and properties for the different objects – as a rule, most UI objects can be created by something like this (replace ObjectName with the object name, property: value with the relevant properties and values):

Titanium.UI.createObjectName({property:value})

The Stack Overflow-style Developer Q&A section is also really helpful.

Getting the App on to the iPad

So far I’ve only put my app on to my iPad. I needed a Development Certificate and Provisioning Profile with the correct app ID (which I had to download from the Apple Developer centre – and jeez what a pain in the butt that was!).

Within Appcelerator, go to the ‘Run on Device’. You’ll need to click on ‘Upload’ to add your Provisioning Profile. Appcelerator will detect when it has all of the necessary stuff installed, and only then will the ‘Install Now’ button become available.

Make sure you’ve got the right SDK or you’ll get an install error. Choose the right Development Certificate and Provisioning Profile. I’ve got more than one, and it caused an entitlement error when I picked the wrong one and tried to install the app on my iPad.

Then click Install Now, and the app is installed via iTunes. Voila!

Launch 48

Launch48: inspiring, frustrating, mind boggling, fun, stressful, knackering, rewarding, and probably life changing one way or another. It’d better be anyway, since I’m missing the ThoughtWorks Christmas Party to attend.

Friday

The Conference

I check in at the PayPal offices and receive possibly the largest ID badge ever, for which somebody had the brilliant idea to print the agenda on the back. In the main room, small clusters of men sit amongst empty seats, discussing what I can only imagine are the next big thing in mobile. I’m terrified: I have no ideas, I’m here for the hackathon, where are the geeks and the girls?

Then Cathy sits down and says hello: she’s friendly and smart, and I’m inspired by how confidently she’s networking already. At last, things kick off with keynote speaker Darren. He’s engaging and insightful and I’m soon tweeting the highlights, but, as @otaku_coder comments: “Interesting how it seems to be only me, @ecobela and @jocranford tweeting at #launch48, this is a mobile event!”

@ecobela turns out to be Bela: the girls may be small in number this weekend but we are loud all right. I debate whether to STFU, but nobody’s complaining yet and I’m enjoying myself.

The presentations continue: 15 minutes each, which is the perfect length. John Lunn (Head Wizard at PayPal) is entertaining and I can’t wait to try Appcelerator; the VouChaCha founders give us an insight of what life can be like if we take our newly hatched business forward after the weekend; and Andy Munarriz of Hullomail gives me a new favourite word: featuritis.

Microsoft and Adobe have speakers at the event, which is great, but they can’t quite follow Ian’s countdown timer and overrun.

(Note: for a summary of the talks, Ben Wirtz published a great Launch 48 Conference Summary)

The messages I take away are that it’s hard to make money from mobile, and we will need to market our apps. Targeting more than three platforms is very tough, and the same UI doesn’t work for different platforms.

Pitching

At some point during the day, I decide I’m going to pitch, mostly because I find the whole idea terrifying. Ian draws out the anticipation for as long as possible with a Q&A panel before pitches start, with advice that is spot on although leaves me still with no real warning of what I’m in for.

Once I’ve pitched, I’m desperate to win, and I anxiously try to count the raised voting hands. Competition is fierce with some brilliantly entertaining ideas including “PeePal” and “Flitr”. There’s a tense silence as Tom grapples with Excel, then the results are in; and so am I! YES!

Forming Teams

My team members are a well mixed group, and I’m grinning like an idiot because it’s such a buzz that they chose me, and probably also because the beer has started to flow. We try to Clarify The Idea (as directed by The Launch48 Booklet).

There’s a lot of energy but I feel like creativity is stifled as we debate whether the app should work offline for users abroad, and where to get data. I grab a flip chart and attempt to find something we can agree to focus on, but it’s a struggle, and although we eventually agree on the user scenario, the same issues and questions continue to rear their head all weekend.

Saturday

Getting Started

At Tesco on Saturday morning I stock up on sweets and post-its, and on arriving I decorate a corner of the office with flip chart sheets. Scope control is going to be tough so I dedicate one sheet to Featuritis in the hope that if the ideas are captured they will not derail us. I scrawl “Build the simplest thing that could possibly work, then iterate!”, a mantra which the Launch 48 blog pokes fun at when we can’t agree scope.

The team have been hard at work already: we have a rough PhoneGap prototype, contact list, elevator pitches and a business plan. I write it all on flip charts and ask the team to underline the parts of the elevator pitch that they think form the heart of the app, this turns out to be “Simple” and “Custom Itineraries”. Despite my frequent and sometimes desperate references to this throughout the day, we battle to find a level of simplicity that we can run with.

I take the lead by default, and at first it’s fun. We create personas: Waldo and Susan are immortalised on the wall, but almost immediately we lose traction when we try to figure out how Susan will find our application: is it per city, or one app? The team seems unable to put an issue aside for later, so our first board meeting is a welcome distraction.

First board meeting

We sit in a row in front of the mentors. Ian grins at us like a child hiding something unpleasant behind his back, and I worry that a grilling is coming. It’s not as bad as I’d anticipated though, and we survive the gentle questioning. We admit that we have a data issue. The mentors suggest Yelp, Wikitravel, YQL. We need to sort it, and fast.

Ian gives us a to-do list. Blog post, marketing plan, business plan, technical architecture, UX designs. I’m slightly baffled; it’s a lot of businessy stuff, when do I get to hack a cool app together?

We divide and start to conquer the to-dos, and we make some serious progress on the business and marketing plan, at the cost of fragmenting the team.  The business team come up with an awesome name, Itiner8, and Patrick grabs the .com.

Progress on the UI sketches stalls: we can’t agree on how many buttons the initial screen should have. I want to JFDI, the others want an optimal UI now, and time slips away. Mentors stop by to lend their experiences, but even with this incredible expertise we struggle to reach a conclusion.

I’m tired of wading through mud; I want to code. We watch the Appcelerator demo, but Patrick seems pretty set on using PhoneGap, which he’s already familiar with. Data is still an issue, nothing seems to meet our requirements, perhaps because nobody really knows what they are.

Mentoring

Mentor Dan Moon visits our sofas and delivers a solid kick in the backside: choose a project manager and get going with building something, fake the data, just get it done. He doesn’t understand why everything is such an issue. Most teams are already halfway through their app.

Mark asks if I want to project manage, but I firmly decline and point out that he’s doing a far better job at the moment. Blatant flattery maybe but it releases me from the responsibility.

Coding doesn’t get far before I am distracted by the UI designers, who are sitting around a table producing pages of beautifully drawn iPhone screens. They are discussing aspects of the application that I don’t feel form the meat of it. I bluster in and announce that we need to keep it simple, and they are overcomplicating it. This is not what we discussed this morning. I succeed only in convincing them to dig their heels in further, and I want to tear my hair out.

I seek out Dan, who advises that we should get together, sort it out and move forward. Feeling like I’ve just grassed someone up to the teacher, I return and ask Mark to call the team together. My emotions and frustration are running high, and things get sticky when we try to discuss scope – neither side is giving an inch. With only ten minutes until our next board meeting, voting is 5-5, and we head in to get our mentors’ advice.

They’re not impressed either, the app should be mostly done by now. We file out and get back to work: I struggle with the back end while Patrick tries to get the PhoneGap app working.

The business guys have an excellent idea: write a short survey to gauge a price point, so we tweet the link.

Finally I head home to continue working on the back end and source some Yelp data, which turns out to be pretty good. I wish we’d tried it earlier.

Sunday

Prototyping

I’m early and take advantage of the quiet to indulge in playing with Appcelerator. After trying to keep the team focussed, I really shouldn’t be wasting time when we have half a PhoneGap app already, so it’s a guilty pleasure.

Overnight the results to the survey have poured in, and Rafael has produced an impressive looking HTML prototype overnight. I suggest that we take it to Starbucks and try it with real people. Later on, they do, and it goes down well.

We sail through the board meeting, although our actual app development is sorely behind schedule. I discover that Ernesto is a Ruby wiz, and suddenly we are rubbing along a whole lot better. He introduces me to Mechanize and soon we are pulling wiki data for our descriptions.

When Patrick has to leave unexpectedly, I opt to try and build something simple in Appcelerator for the demo on Sunday evening. This backfires when I run into an awkward bug, and the final offering for our demo is fairly pathetic. I had a lovely time coding it though.

Final Presentation

The final presentation has been written by Mark and the others so as we line up at the front I’ve only a vague idea what they’re going to say. Mark dodges the awkward questions about our finances, as investment banker Zuza put them together and she’s left already. We have to swap laptops halfway through to demo, and we can’t get the slides back up afterwards, so we’re not looking too smooth here. In our defence the presentations had been brought forward due to the tube strike. Ultimately, Mark does us proud, and Rafael’s prototype looks slick.

With the presentation over, the emotional blackmail begins: are we going to carry it on? There’s a weak desire to meet up and see what happens, but by the end of the evening Mark admits that he’s not going to drive it any further. Caught up with everybody’s enthusiasm it’s difficult to say that this is it, but my heart’s not in it either.

They think it’s all over …

I tidy up the flipcharts and post-its and pack my computer away. Finally it’s over. I find a beer and mingle with the people I’ve met this weekend, and make sure I’ve handed out my business cards. I chat to some of the mentors and marvel at the quality of people I’ve met.

For all the frustration and craziness, I can’t wait for the next Launch48.  This weekend has already changed my life. Monday morning: I steam into work, ready to go, with more energy and drive than I’ve had in weeks. I’ve already got another mobile app idea turning over in my mind, and this one, I will finish. Maybe.