May 2009

Google Wave and Chandler

At Google I/O today, I got to watch an hour-long demo of the new Google Wave. From everything I can tell, it is exactly what Chandler was supposed to be (well, minus a calendar, but I’m sure that’s basically just a plugin yet to be written)

I worked on Chandler at OSAF. Chandler is/was a sort of Personal Information Manager, or at least was inspired by the classic PIMs from the 80s, but juiced up for social collaboration. Honestly, Chandler meant many things to many people, which was part of its problem, but from my perspective, Google Wave encompasses many of those PIM/collaboration ideas that we worked on at OSAF. At chandler we were focused on the idea of an “Item”, which is very similar to Wave’s notion of, well, a Wave. The idea was that e-mail is old news – really it was all about updating the Item. Want to start working on a design document? Create an item. Let people collaborate in an object that got updated as people worked on it. Want to add coments as you go? Attach them to the item. In e-mail terms, it’s like a persistent, shared, dynamic attachment for an entire thread of messages, except even that doesn’t quite capture it.

Sitting through the first 30 minutes of the Wave demo, I thought “wow, been there, done that.” All of the examples they gave – from brainstorming about an activity to picking a movie to see to collaboratively editing a document, were all things that we hashed out over and over (and over and over and over) at OSAF. Hours of design meetings.

But I’m not writing this to say that Wave somehow stole these ideas or anything – I mean honestly once you throw SMTP, POP and IMAP out the door and invent your own protocol (yes, something we also tried to do at OSAF but using WebDAV, ugh) a lot of these ideas come naturally.

Ultimately, I really have to hand it to the Wave team because what they did, which is drastically different than what was happening at OSAF, was actually finish. One of Chandler’s biggest problems was that we spent way too much time designing, and not enough time making working, polished features that could be tested in the real world. To paraphrase, best was the enemy of completion. Chalk this up to 20-20 hindsight but even when I left OSAF, one of the reasons I found Metaweb so appealing was that the implementation of what was to become freebase.com was so complete, at least for an early-stage startup.

What I do know about Wave is that what they have accomplished is really, really hard, on a number of levels. Designing collaborative user interfaces is hard. Synchronizing fine-grained data streams is hard. I attended the “Google Wave: Under the Hood” and realized that at some level, Chandler had another problem beyond failure to launch: the problems were harder than we ever realized. We designed, and redesigned, and reimplemented, and redesigned again, synchronization protocols and data stream formats, and all sorts of craziness without any knowledge of whats out there. Sure, we could have had a few geniuses who pulled this stuff out of their hat but really there has been a lot of academic and non-academic research into these problems, and we didn’t even have the facilities to draw on them.

So kudos to the Wave team, I am truly impressed. At some level I’m probably more impressed than all the people doing the clapping and cheering during the demo, while I sat there with my sour grapes going “been there, done that.”

Uncategorized

Comments (3)

Permalink

the iPhone quest – going from C++ to Python to Objective C

I’m on a quest: I want to learn iPhone development because I’ve got too many fun ideas for little apps. Nothing amazing, but I want to beef up my skills enough that I can whip out an app in a few days, if I’m so inspired.

So I’ve started learning Objective C. And man, it has its ups and downs.

I come from a C, and then C++ background – years of hacking on the Mozilla / Firefox codebase. Since then I’ve spent 4 1/2 years writing a lot of Python. I fell in love with Python within the first few weeks of learning it, probably because everything is just so much easier than it was with C++. I could throw together a very powerful little script in a matter of minutes.  I won’t go more into my love of Python because this is more about Objective-C.

My impression so far is that Objective-C is a unique hybrid of dynamic and non-dynamic languages. Yes, it is C at its core, so of course all the usual compile-time C issues and benefits are there, blah blah blah. But, the core language itself is fairly dynamic, including dynamic method dispatch and a healthy amount of introspection. Yes, you can look at an object and see if specific methods exist or not, and if so call them. You can call methods dynamically, meaning you can look up an arbitrary method name by string, and call it.

But in all of this I’ve only mentioned methods and not attributes. Objective-C does seem to suffer from the getter/setter disease that plagues Java, though it disguises them with the name property. This kills me. getters and setters drive me crazy because 99% of the time you want direct access to a object’s instance variable (an “ivar” in Objective-C), and the other 1% of the time the object wants to interfere with that access. Adding a wrapper around every attribute access adds an extra level of abstraction and frankly, code, that seems totally unnecessary.

Thankfully Objective-C 2.0 has some nice @property and @synthesize shortcuts that mean you’re not typing the getter/setter code, which honestly is half the issue.

I’ll post more on these issues later.

Uncategorized

Comments (0)

Permalink