Journler: Blog

The Proxy Application: Strategies in Software Development

June 25th, 2007

It’s over a week since WWDC 2007 and I am still reeling from my first exposure to the fascinating, jargon filled world of software development processes. What was probably a boring session for many of the attendees was for me a first step into the disciplines of project management and development methodology. I am eager to apply what I have learned.

Alongside Journler I am working on Lex. Lex picks up where Journler leaves off. If Journler is “entry based information” then Lex is project based documents. Journler was originally designed for journaling your life. Although the program benefits from recent features seen more commonly in information managers, Journler is not one by its nature. Lex is, and where Journler runs a single database, Lex is databases plural so that you can split projects up and deal with the relevant data in distinct groupings.

Development has, however, taken longer than expected. In a post two months ago I said I would need four weeks to produce a working version. It was a naïve enthusiasm. The coding itself isn’t so much the problem. My style is. I go about my work in an erratic way, jumping between features to see if they are all possible. I have reached a point where, although I am confident everything can be done, I am lost in a maze of half accomplished ideas.

Iterative Development
“Iterative” software development refers to a process which moves forward in short, repeated, independent phases. The steps involved in the development of a complete product — requirements analysis, design, coding, testing, and documentation — are compacted and micro-applied to every change made over a product’s lifetime. With each completed change an improved, fully functioning product is ready for release, even if it is not actually delivered.

I have decided to apply this approach to Lex. It is an opportunity to discipline my practice and ideally produce a better product faster. Hoping to add to iterative design theory, I will be adapting the process to fit the needs of this project. Rather than applying the iterative method to small changes built into the project as a single system, I am partitioning Lex into self contained, feature specific “proxy applications” and applying the iterative process there. The goal is to produce independent, fully functioning applications out of the many features that Lex brings together.

The Proxy Application
I am calling them proxy applications because during development they stand in for the corresponding features actually built into Lex. This differs from prototyping. I will not be developing models that demonstrate or test an idea. Instead, the process should produce applications, feature complete though highly focused on a single task. By isolating a subset of Lex’s functionality into a separate application, the proxy allows me to analyze, design, code and test that subset independent of every other. While one proxy undergoes real world testing I’ll be able to work on others without interfering with the first, and vice versa.

Lex is an extensible application from the ground up. Although I define the program’s core functionality at the outset, plugins are responsible for the actual implementation. Lex itself is tiny, a simple structure with hooks for the plugins. I believe that projects of this nature are especially suited to the use of proxy applications. Most of the proxies I have envisioned for Lex are simply wrappers for a feature expressed by one of the hooks.

Applying the Method to Lex
If this is all too abstract let me offer a concrete example. In addition to the regular and smart folders already familiar in Journler, Lex allows you to build spotlight folders which automatically collect documents on your computer. Support for executing this action is built into Lex, but the means by which you specify a folder’s criteria is implemented with plugins. This is the hook. Lex examines the document type targeted by the folder, e.g. PDF or Image, and loads the most appropriate plugin, permitting plugin developers to target files with custom metadata or taylor the existing set.

Spotlight folders concretely define one of Lex’s features. Following the proxy strategy, I isolate the relevant code and wrap it inside a proxy application. The proxy takes center stage during development. I do all my design, implementation, and testing on it. Furthermore, the proxy is a complete application in itself. In this case I’m calling it Smarts. As soon as Smarts reaches a mature stage I intend to release it as a standalone application. Real world testing will verify that the feature performs as expected, at which point I can integrate the code back into Lex itself.

Where It All Leads
From the user’s perspective it will look like I’m not working on Lex at all. Instead, you’ll see the release of a number of simple applications with strongly defined feature sets. But behind the scenes I am actually combining each verified proxy into a single, whole application: Lex. The method should allow me to establish the code for each feature more quickly as well as more efficiently test and debug it. Ideally, before a beta of Lex is even made available, most of its functionality will have been tested and verified. The end product is one of higher quality that is produced more efficiently.

That’s the hope. Lex has just become an experiment in software development. It’ll be interesting to see how this works out.

Apple to Developers: Write Web Apps. — Is It Really That Bad?

June 18th, 2007

Or: It’s the Content, Stupid.

Had a good conversation today with Chris Messina of Citizen Agency fame. Chris is one of the Agency’s co-founders and advises startups and other firms on their web presence. He is steeped in Web 2.0 goodness and is enthusiastic about the iPhone’s potential as a device which supports web standards. Our conversation brought into perspective my recent diatribes against the iPhone and has given me the chance to ask, is it really that bad?

Let’s take it by way of the WWDC’s OS X Graphics and Media State of the Union. I can’t go into details because of an NDA that was signed by my presence, but let me say that the session offered a convincing argument for the unification of the web, desktop and mobile experience, especially by way of “rich” — read media rich — content.

Since the desktop PC became a consumer product we’ve seen it increasingly decentralized. What traditionally belonged on the desktop is now appearing on other platforms. The transformation has given rise to a “device ecosystem.” Consumers work on their desktops, give presentations with their laptops, play on their portables, listen to their iPods, stream movies to their Apple TV and surf the internet on their mobiles. At the same time two other trends have developed. Rich content has become more prevalent, and individuals expect a single, unified experience.

The circumstances have led to a bit of a conundrum: how do you deliver the same experience when every year the experience becomes more complex and the devices which deliver that experience more varied? Take a movie for example. Alongside that movie are a website, a soundtrack, games for your desktop and portable, downloadable trailers and eventually the movie itself as a download. Heck, you might even throw in email stationary. Not to mention that presentation you put together on your desktop but can’t access from your laptop because of a bad USB stick, but which should be available from your homepage, usable on your phone and editable on your co-worker’s Vaio. What’s the solution?

Standards, and it is here that the iPhone may offer something truly revolutionary. It’s not an area I am well versed in, so I missed it the first time around when I said in my keynote post:

“Instead of announcing an SDK Jobs announced that developers would be able to write AJAX Web 2.0 applications that could be run directly in Safari on the iPhone. This was even billed as an advantage — developers wouldn’t need an SDK, how great is that? But the phone has a standards compliant browser. Of course it can run web apps based on dhtml, css and javascript. Nothing new here.”

Ok, nothing new because we knew the iPhone runs Safari and Safari is standards compliant. But that the iPhone is a phone with a standards compliant browser in the first place is huge! The sessions zeroed in on this with examples of how web pages render on the iPhone verses other web enabled devices. Correct me if I’m wrong but I believe Apple Inc. is the first company to fully support web standards on a mobile device so that a site’s content appears exactly how it appears on your desktop or laptop.

With that we reach the point of this article: the platform is becoming irrelevant. At the end of the day does it really matter what kind of computer or device you use as long as it enables you to do what you want and in the manner you expect? The western consumer is about to enter an age of ubiquitous computing. I love that word, ubiquitous. Your Mac better play nice with the PC at the office and they both better work with your printer and your phone, render web content uniformly and allow you to access your data from anywhere at anytime.

I’m sure you’ll forgive the developer if he or she is upset about this. When Steve Jobs takes advantage of his Keynote to flip 6000 Macintosh developers the bird, hand delivering instructions to start writing web apps, he is negating tens of thousands of years worth of career and experience. I’ve only been doing the Cocoa/Obj-C gig for a few years now, but there are developers out there who have been doing this for a lifetime. Asking them to consider a whole other programming language with its syntax, style, libraries and quirks is like telling a Manhattan taxi driver to do his job in LA starting eighteen days from now. You’re gonna hear a few choice words.

Chris is hopeful this is a step in the right direction and our conversation really opened my eyes. It’s going to be a lot of work for Mac developers to make this transition but it certainly looks like a necessary one if they want to be relevant in the approaching age of ubiquitous computing, platform irrelevancy and content supremacy.

Rock Star Programming

June 16th, 2007

If you haven’t yet heard the Delicious Generation has become a hot topic in the Macintosh community. It’s a title bestowed upon a new generation of developers inspired by the appearance of Delicious Library. Other apps like Disco and iClip also come to mind. I was afforded the opportunity at WWDC 2007 to mingle with the members of this up and coming group, a generation X so to speak and one that will play an increasingly prominent role with the release of Mac OS 10.5 Leopard. For my second WWDC post I’d like to characterize the Delicious Generation and offer a caveat or two.

Rock Star Programs
The Delicious Generation has a style, and it is Rock Star Programming. I’m not talking about a methodology here like “cowboy coding” or a paradigm shift made possible by new features in the latest, baddest cat on the block. I mean an attitude both personal and technical. It is a way of doing things and having things done which has developed in and around the programmers and the applications they create. These guys — and it is mostly guys — are rock stars of the Macintosh world. They rock, their apps rock, and they know it.

Rock is an ambiguous word but the metaphor is entirely appropriate. On the application side, rock star programs “do it because they can.” In a word it is show; rock star programs put on a helluva show. They may not be all that incredible, sometimes just a three chord progression, but rock star programs know where to play the extra rift, hit the impecable triplet or hammer on and off, and all with perfect timing. Rock star programs take the most mundane data management tasks and make them gorgeous and exciting.

Rock Star Programmers
Rock star programmers throw a concert you want to see in the next town and then again, and indeed rock star programmers have their groupies. The fans gather online, hanging out at Digg,, twitter and flickr, but they get together for parties too, private rock star parties. WWDC featured the one or the other. You see, rock star programmers know they’re good, and when you’re good you’re exclusive. It can’t be helped.

Don’t get me wrong. I met a few of the rock stars this week at WWDC and they’re good folk. Sure, there’s the über rock star who takes the mic at Q&A, introduces himself with “Hi my name is so and so from so and so, you may have heard of it,” and then talks for five minutes to the applause of his fellow developers (!). But most of these guys are cool, down to earth rock stars, smart guys writing killer code for awesome apps. Props. On stage these guys rock, but back stage they just want to chill, drink a beer and talk.

Rock Star Leopard
Rock star programming is nothing new. The programming community has always had its personalities, coders with style and code on the edge. But Leopard heralds a new era. Leopard is the rock star’s OS, enabling a heretofore unseen level of visual appeal and interface excellence. We’re talking some serious snaz here. Apple has given developers a whole new toolset, a repertoire that coders and designers will take advantage of to deliver an immersive computing experience that is dynamic, fluid and potentially ubiquitous. Folks, your Mac is about to get a whole lot better. “Wow” doesn’t cover it. The volume has been jacked up and the set is gonna blow your mind.

This time around we are talking about a paradigm shift, and as is often the case with paradigm shifts there will be those who try but for whatever reason are unable to hit the mark. I can think of two. Put the power chord and effects box in the hands of a noob and you’ll get a cool sound now and then but also a lot of noise. Leopard enables but with that enabling come the results of inexperience and excess. Both new and longtime Mac developers will be trying new things with the interface and, failed by Human Interface Guidelines (the HIG) that are long out of date, much of what they produce will be ugly. As I’m sure you know, a lot of rock is shit.

Another problem is the level of knowledge and talent required. Rocks stars form bands for a reason. The dude on the piano singing into a mic has a good sound and sells a lot of records, but he doesn’t rock. If you want to rock you need a drummer, a guitarist and singer, your buddy on the ukulele and someone else on sax. Putting on a show with substance requires personnel. The Mac OS already offers a plethora of technologies. Leopard adds to the list. The lone developer might be an expert in one or two areas but he or she can’t be an expert in all of them. While new technologies like CoreAnimation do make it easier for that lone developer to rock, the most rocking apps will likely be written by teams of talented individuals, however loosely associated they are.

Rock star programming and the delicious generation are already underway in full force. If you’re impressed now, wait and see what October produces.

WWDC 2007 Keynote

June 11th, 2007

The Keynote is a few hours past and my first impression is not a good one. “Weird” as one developer friend put it. “WTF are the secret features?” asked another. The Keynote felt like it was missing something. Simply put there was nothing spectacular. No hardware announcements, features mostly covered last year, very little for the developers in the crowd, and no iPhone SDK but rather a “compromise” billed as a great idea. You know it’s a bummer when the WWDC headlines run “Apple launches Windows browser” (BBC) and “Apple: Safari available to Windows users” (CNN). Is a Windows product the most exciting thing to come out of it?

The bulk of the keynote focused on Leopard, but Jobs announced very little that the Mac community didn’t already know about. New desktop? Hardly. Some changes and a few features. Improved Finder? Granted there are some neat additions here, Cover Flow for your files, Quick look and better network connectivity with other Macs, but basically it’s the same old Finder, not an “all-new” one advertised at the new Apple website.

Kudos to the subtle design changes though. The Finder *does* look better. Love the unified window look. Folder icons have been redesigned as well as icons for common file types. The side bar looks great and seems a bit more functional, with quick access to smart folders, network devices, shared computers and so on.

The most surprising announcement was Safari for Windows. I get the feeling this is part of a long term plan that isn’t immediately apparent. I’m really curious what’s happening behind the scenes for this to work. Did Apple port WebKit to Windows? If so, they may have needed to re-code a decent bit of Cocoa as well. Is Cocoa for Windows a long term goal?

Surely all of this is related to the iPhone announcement. Developers have been waiting for an iPhone Software Development Kit (SDK) since the device was first mentioned. Such a kit would allow programmers to write their own applications for the phone. In a post back in April I mentioned the lack of this possibility as a reason for my displeasure with the device.

Instead of announcing an SDK Jobs announced that developers would be able to write AJAX Web 2.0 applications that could be run directly in Safari on the iPhone. This was even billed as an advantage — developers wouldn’t need an SDK, how great is that? But the phone has a standards compliant browser. Of course it can run web apps based on dhtml, css and javascript. Nothing new here.

Seen in this light Safari on Windows makes sense. It looks like Apple is moving to position itself as an internet leader, in terms of content distribution as well as consumption. With a Safari offering on Windows, web developers will be more inclined to create sites that display correctly and work completely in WebKit, Apple’s html rendering technology. This guarantees an easy transition to an iPhone targeted app. If it works in Safari, it’ll work on your iPhone.

Although there’s some neat stuff going on, and I’ll be writing about it later, all in all it was a keynote that didn’t leave me very excited. From my conversations with other developers it seems I’m not the only one feeling this way.

WWDC, Business Cards, the Apt Hunt

June 9th, 2007

So I’ve arrived in San Francisco and am getting ready for WWDC. Headed over to Moscone West tomorrow morning to register for the conference and grab the latest Leopard beta. Leopard? Did he say Leopard? Oh yeah, you know you’re jealous. ;)

I’ve already met other conference attendees although I’ve only been here a day. I ran into a certain Ben at the airport after he got off the same flight as me, and I’ve run into a few at the hostel where I’m staying. A couple even know who I am thanks to Journler. Along those lines I’m really hoping to make connections this year so will definitely be proactive about meeting and talking with other developers.

With that goal in mind I set about designing business cards before I left. I’ve never had business cards before, but I figured it might be an important part of establishing lasting relationships with individuals who are otherwise strangers. Designing the cards was actually a bit of fun. I’m not at all experienced in the world of desktop publishing, so I had to fool around a while to get the resolution, fonts and graphics to all match up. Can you imagine getting excited about business cards? It was the case. And shoot, they didn’t turn out all that bad:

Props to Mike Rohde for the icon design. It’s the same one featured as Journler’s application icon.

In the meantime it’s all about the apartment hunting, although I have to say I’m disappointed with the results so far. I’ve sent out some two dozen emails in response to Craig’s List postings but I’ve received only three replies. Are my messages going straight into the Junk Mail boxes? In any case, here’s my latest posting: Chill Indie Mac Developer Looking for Room in Shared Apt/House

WWDC Coming Up, Connecting, Making Ideas Happen

June 6th, 2007

Woah, the last week has blown by. I’m moved back to the U.S. after four years in Austria. Oklahoma is where I’m at right now, in the middle just north of Texas, as I told my students. The move took place a week ago today.

On Friday I’m flying out to San Francisco for Apple’s Worldwide Developer Conference, the WWDC. I’ll also be looking for a place to live. Know someone in the Bay Area? Check out my Craig’s List post. The plan is to land a room in a shared apartment or house by July 1st. If it all works out I’ll be celebrating the Fourth of July in Cali.

Life is happening. I’ve moved back to the United States and I’m moving to San Francisco because I’m looking to build a team. I have some ideas for some cool stuff I’d like to see realized, but I can’t do it by myself. Shoot, Journler alone has become more than a one man project.

I’m thinking of ways to meet other developers and engineers at WWDC. I imagine walking up to random people in the hall. “Hi, I’m Phil. I’m an independent software developer. What’s your name and what do you do?” Introductions. Hmm.

Will you be at WWDC? Do you do hardware engineering or software development? Do you live in the Bay Area? Let’s get in touch. I’ll be in SF from June 9 to the 19th and ideally from July 1st on.

I’ve created a WWDC category for the blog. Let’s see if I don’t take advantage of it. I remember being in the fifth row during the Keynote last year. I’d like to be there again this year and do some blogging about it. Keep an eye out. WWDC starts next week!

Copyright © 2006-2007 Journler. Some rights reserved       Contact: Phil | Evan Agee (Webmaster)