Catching The Next Wave

April 8, 2008

Note: The Pages o’ Peat have moved to http://peat.org/ — please update your bookmarks and references accordingly. Thank you!

Every now and then a set of technologies gets twisted together by a small group of dedicated people, and a new industry is born — a watershed event that demonstrates a new way of thinking about things, and throws out a lot of old rules.

There are a three that are coming together to trigger another watershed.

The first is open, popular, mobile Internet devices.  Think Blackberry, iPhone, or the slew of new MIDs that Intel showed off a few days ago in Shanghai.   These are built around the assumption of ubiquitous access to the Internet, high resolution displays, multimedia capabilities, and a bit of horsepower under the hood.  Any college student can get their hands on the Android or iPhone or Windows Mobile SDKs and build a hot little application in their spare time.

The second is web services.  It doesn’t matter if it’s WS* or REST or XML or JSON — the point is being able to query and manipulate data at a distance, with open protocols across public and private networks.  Pick your web framework of choice … building a web service is almost a drag and drop process today.

The third and final piece is cheap and scalable cloud computing.  The physical infrastructure capable of serving billions of transactions is available to anyone with a credit card and a little spare time on the weekend.  Amazon’s Web Services, Google’s App Engine, and a slew of smaller providers sell scalable computing and bandwidth by the hour and gigabyte.

These three fit together to form a fundamentally different picture of mobile computing:  light weight applications that fit in your pocket that take advantage of the local hardware, but seamlessly tap into “Internet scale” computing power and storage.

I’ve talked with a dozen entrepreneurs in as many months who are exploring these waters.  Streaming media (push and pull), information discovery and analysis, mobile social interactions, and location aware applications all depend on this trinity of capabilities.  I’m just one guy in a groundswell of people who are looking at the landscape and thinking “hot damn!”

What makes this so exciting is how easy it is to do today.  You don’t need a dozen engineers and a multi-million dollar budget.  You don’t need to negotiate with a corporate gatekeeper.  You don’t need to pitch to VCs.  You don’t need to wait.

2009 is going to bring a wave of media rich, location aware, always connected mobile applications to hundreds of millions of people.  I’m confident we’ll see a real forehead slapper by the end of 2008 — a tool or service that is painfully obvious, but fundamentally changes how we think about a day to day task.  It’ll make a millionaire or two, at the very least.

This will be fun.  :)

Note: The Pages o’ Peat have moved to http://peat.org/ — please update your bookmarks and references accordingly. Thank you!

Note: This is a little out of date, since the Beta 3 build automatically generates an empty XIB and the code for including it in new projects. If you’re looking for Apple’s introductory tutorial on how to build applications with Interface Builder, click here.

So, the trick to using Interface Builder is figuring out where to put the files, and plugging the XIB interface into the app.

The file question is easily answered:  File > Write Class Files to the directory in your project where the rest of your classes live.  For really simple apps with a single view, select your existing AppDelegate class and IB will merge the changes for you. You’ll also see a new .xib file in your classes directory, containing your interface.

Connecting the XIB interface is also relatively straight forward.  In your AppDelegate file, change what self.contentView points at:

self.contentView = [[[NSBundle mainBundle] loadNibNamed:@"XIBFileName" owner:self options:nil] objectAtIndex:0];

Where XIBFileName is the name of the generated XIB file without the .xib extension.

Anyhow. I’m still learning, and this is with a beta release of the iPhone SDK, so you’re welcome to leave comments if you have better ideas or tips on working with IB for the iPhone. Thanks!
 

 

Note: The Pages o’ Peat have moved to http://peat.org/ — please update your bookmarks and references accordingly. Thank you!

I spent the weekend building a native iPhone app.  It’s unfinished, and a little rough around the edges … but I’m happy with the experience so far.

The concept is relatively simple:  I want an app to search through (and show off) my collection of international banknotes when I’m out and about.

There are a few hurdles, though.

For example, it’s been over a decade since I worked on a reasonably sized C application.  So, I’m getting back into the swing of things with Objective-C style pointers and memory management, and remembering how much I hate segmentation faults and bus errors.

Also, being new to Objective-C and Mac development, this learning curve looks a bit like a wall.  Thankfully, there is quite a bit of sample code out there, but it’s not entirely consistent … which I guess is par for the course for a beta development system and a OS that hasn’t been released yet.

I’m learning, but I’m pretty sure my code is gnarly enough to make a Real Mac Developer nauseous.  That said, if you are a Real Mac Developer with a strong stomach, please drop me a line — I’d love to show you what I have, just so that you can tell me how bad it really is (and, hopefully, tell me how I can make it better).

At this point in the game, there are a few things I’m very pleased with:

  1. Interacting with the Internet and web services is incredibly easy.  Support for synchronous and asynchronous HTTP requests and very flexible caching policies make for a happy web service developer. This is particularly nice since the guts of the database and searching features will be powered by a Rails app siting on a server somewhere else.
  2. Working with XML is also very pleasant.  NSXML can handle proper XPath and XQuery searches, which is really quite nice.  The documentation is very mature for this and the other supported NS* classes, and there are plenty of examples out there on the net.
  3. UIKit follows very sane MVC and delegation patterns.  It’s pretty straight forward and consistent.

And, of course, a few things I’m rather surprised to find, and desperately hope for resolution on:

  1. The iPhone simulator isn’t entirely safe. My hamfisted techniques have somehow caused other apps (including Finder) to crash several times.  It’s terribly frustrating, and makes me a bit nervous about experimenting. I’m not sure if I’m getting better, or if the recent betas have been more stable, but I haven’t had any catastrophic errors recently.
  2. No (official) coverflow interface.  Wow.  This is perfectly suited for what I want to do, and a big part of what makes the iPhone such a compelling platform to develop for.  Please, please, please include this in the final release.
  3. I see Interface Builder … but absolutely no documentation on how to use it for an iPhone.  Can someone point me at an example? Apple now has a step-by-step guide to building a simple app on the iPhone with Interface builder. I also found an example here and posted my own followup summary for people who are already familiar with Interface Builder, and just want to see how to plug in their interfaces.

Anyhow, good points and bad points, but on the whole it’s been a good experience so far.  The NS* classes are all stable and well documented, and the UI* classes and documentation are about what you’d expect from an API in beta.

I’m keen to get a code review from someone who knows what they’re doing, and I’m eagerly awaiting the next update to see what’s changed.  Unfortunately, I think I’ll have to have to wait until June to get a real iPhone — I’m betting that the next generation iPhone will be released along with the SDK and OS 2.0 at WWDC ’08.

Update:  I found an Interface Builder + iPhone tutorial, and I posted a short summary about how to interface with the IB files.

This Feels Mighty Good

April 3, 2008

Note: The Pages o’ Peat have moved to http://peat.org/ — please update your bookmarks and references accordingly. Thank you!

iphone-sdk

… we will have much fun together. 

In my spare time I’m doing a little hacking with Erlang.  It’s an interesting language.  I’m still warming up to  functional programming, but the rest of it makes a lot of sense:  immutable variables aren’t as big a headache as I expected, the message passing is easy and cheap, and light weight threading without worries is a genuine pleasure.  Plus, the performance is excellent.

The reason for my interest is that in the next year or so, I have several projects that are going to bottleneck on the database.  Which got me thinking about caching, synchronization, and distributing data across multiple servers.  The popular solution is to use memcached, slice up the database, and write a custom layer for managing the cache and database.  It’s a non-trivial task, and there are two problems that get solved over and over, both have to do with synchronization:

  1. Cache synchronization requirements are variable.  Some things needs to be updated in real time (like shopping carts), some can be loose by a few minutes (e-mail), and some can wait around for hours or days (aggregate statistics, relatively static content).
  2. Server-to-server synchronization of cached data is not variable. It doesn’t have to be instant, but it needs to be predictable.

All of this has to happen while serving thousands of requests per second, and the whole ball of wax needs to have tight error and exception handling.  So, as a mere Erlang noob, the hype sounds like a good fit.  ;-)

Regardless — I’m sure there are other people working to solve the caching problem, and I’d love to hear their thoughts.

Follow

Get every new post delivered to your Inbox.