Just a quick note. I’m headed to PDC this year. If anyone reading is also going to be out there and would like to meet up, contact me via email/cell or via LinkedIn. I’m looking forward to it!
Requisite iPhone 2.0 Post
As everyone who reads technology news knows, on June 9th, Apple is rumored to unveil the second generation iPhone. It’s predicted to have all the features of the first plus twice as much memory (16/32 GB), 3G network connectivity, and a GPS. In addition, AT&T or Apple is likely to subsidize the phone by 50% to $200. What the analysts aren’t talking about is the fundamental shift in mobile computing that this release will bring. Apple may have lost the desktop operating system wars, but they are about to become the Microsoft of the mobile phone.
A subsidized iPhone is going to penetrate the smart phone market fast and deep. In 2004, the Motorola RAZR launched at a $600 price point. It was the sexy, sleek, must-have phone of its day. Sure it was expensive, but within 2 years it was carried by virtually every GSM network operator and could easily be purchased for $100 (subsidized with a two-year contract). The RAZR has now sold more than 65 million units worldwide. Apple has shipped approximately 6 million iPhones thus far. By subsidizing, I expect exponential increases over the next 12 months. As if that weren’t enough, Apples latest back to school promotion is giving every student or teacher purchasing a new computer a free iPod Touch. This is adding up to a whole lot of iPhone OS installations.
So what does it all mean? For one, if you are a web application company, you had better be seriously thinking about what the iPhone means to your business. Every iPhone user has constant access to your application via mobile Safari. This is a dramatic paradigm shift that will result in new business opportunities. Desktop and enterprise line of business software companies also have great new opportunities. A mobile device capable of rendering desktop-grade user interfaces with high-speed connectivity is what mobile computing is all about. Implications to industries requiring high levels of mobility (i.e. healthcare, network management) are substantial.
A lot of hubbub has been made over the restrictive Apple App Store business model, but serious software companies will make it work. Apple’s services and fees really only pertain to distribution. Once a customer has your application installed, alternative revenue models can be pursued outside of Apple’s domain. Think monthly service contracts, online feature unlocking, etc.
Who are the big potential losers here? First off, Dash needs to seriously rethink their business model. Their hardware (GPS + 3G connectivity) all of a sudden costs too much ($299) and does too little (Internet connected GPS). Compared to iPhone 2.0 their only remaining competitive advantage is the software. An iPhone compatible version better hit the iPhone App Store before a more nimble startup beats them to it.
Second, Microsoft is going to suffer some major market share losses. Windows Mobile has been widely criticized elsewhere so there isn’t much I can add to the conversation. Despite the tiny form factor, limited screen size and puny hardware, Microsoft attempted to cram in the desktop Windows experience. Like every mobile OS predecessor it’s a marginally usable platform that users only put up with due to lack of alternatives. On Monday, Apple’s (relatively) cheap and exceptionally well designed alternative is going to push Windows Mobile in to obsolescence. (Yes, I’m aware of the Windows Mobile 7 and 8 leaked specifications and screenshots. Sure, it looks improved, but right now it’s vaporware. They are playing catch up.)
What about Google? The videos from Google IO were impressive. They’ve got a more open platform and more manufacturers slated to build devices with Android. You’d think, surely Apple has major competition here. Perhaps. However, it’s unlikely Google will achieve the same level of UI polish that Apple has risen to. Open source third party software is notorious for ugly, cumbersome user interfaces. Android apps will suffer the same fate. Apple was smart to spend significant time establishing user interface tools and specifications from the get-go. Third party iPhone apps will feel as polished as the ones coming directly from Cupertino. With Android devices sporting nearly identical features to the iPhone, the battle will be waged on software. Apple has a distinct advantage here.
I’m excited to see how these predictions pan out. Mark your calendars because on Monday everything changes.
Some Thoughts on Live Mesh
I’ve had a day to play with Live Mesh and here are some things I’ve noticed.
Installation
- Aside from hard drive IO and a LiveMesh.exe process there was no feedback about installation progress. I’m assuming this will be corrected in the final release.
- There is no install wizard! Hurray! Feedback came from a toast window right above the SysTray. At first this was disconcerting, but I am absolutely thrilled. Installers on Windows are full of stop points and friction. This was a true “one-click” installer.

By the way, Live Mesh is installed to Documents and Settings\<User Name>\Local Settings\Application Data\Microsoft\Live Mesh. - While “Configuring Live Mesh Updates” my screen went black several times. It felt like a UAC prompt was due at any moment. Then I realized this was an XP machine. Huh?
- The installation gave me an unknown error on my Vista 32 machine. It appears to be working fine, however.
- This one hurts. Why is there no support for Windows Home Server? I know it’s just an MSI operating system check that I could bypass but that’s just silly. Synchronization of files from various machines to share folders on the server is a no-brainer. Perhaps they are working on a WHS plugin…
Client Application
- This new trend kills me. It’s starting to pop up all over the web. Must I click three checkboxes to have an application launch without any prompts?
- I chose a folder to synch and within seconds it appeared on my web-based Live Desktop. The entire Live Desktop experience is very well conceived.
- Adding a second computer automatically started synching all shared folders to my desktop. Just like the installer, Live Mesh made an assumption about where I would want the folder and ran with it. Personally, I didn’t want the folder on my desktop, but switching the location was intuitive and painless. I can almost hear the Live Mesh product managers chanting “Convention over Configuration” and Sensible Defaults.”
- Memory usage is high. Moe.exe and MoeMonitor.exe take a combined 100 M.
The client application is written partially in .NET. Reflector uncovered a few interesting details.
- Lots of references to Mac support.
- The logging code appears to have a bug. It logs to the GacBase directory instead of the Logs directory.
- Bummer. The UI isn’t done with WPF.
Live Mesh!
Excellent. I was just selected as a Live Mesh technology preview tester. I’ll post some thoughts once I’ve had a chance to play with it. If there’s anything specific you’d like me to look in to, let me know!
Hopefully I’ll get accepted in to the developers program as well.
Upgrade!
Well, if you are seeing this post, I’ve successfully migrated this site from SubText to WordPress. I’ve come to realize that one of the biggest reasons I don’t post regularly is the overall experience I was having with SubText. It is an OK product, but quite frankly I found writing posts laborious. I’m hoping that WordPress facilitates more communication. I’ve setup a Tumblelog theme too. We’ll see how it goes. I’m sure the number of grammatical errors will increase dramatically!
Death by Dialog Box
UPDATE: See the comment below. Huw from Sapphire Steel agrees. Ruby in Steel no longer has the same evaluation experience.
I’ve always been interested in Ruby on Rails development. The rapid adoption and growth of Ruby as a language and Rails as a framework has been inspiring. Unfortunately, it has yet to grow beyond the ranks of early adopting alpha programmers. Much of this can be blamed on the lack of an easy to use, fully integrated IDE for development. Developers like things like syntax highlighting, intellisense, refactoring tools and interactive debuggers. Until yesterday I had yet to come across an exceptional IDE for Rails development. So, my consideration of RoR for any reasonable sized projects was nil.
Yesterday I came across Sapphire Steel’s Ruby in Steel package. It’s an add-on that sits on top of Microsoft Visual Studio and integrates all of the features I expect from a proper development environment. Sweet! What I don’t get, however, is the ridiculous “nag ware” mentality Sapphire Steel has propagated throughout the experience. Various actions in the IDE force me to shoo pesky windows.

It makes absolutely no sense. I installed this product. I’ve been offered 30 days to try it out. Those 30 days should give me such a stellar development experience that when the sands in the hourglass run out I don’t even question the $199 license fee because I can no longer work effectively without it.
It’s hard enough to convince customers to choose your product based on its ability to fulfill needs. Don’t make the job even harder.
Google Bumps Desktop 2.0
It’s been several months since I first pondered the future of desktop applications. I argued that web applications had a significant pain point in that they are unable to run offline. Yesterday, Google announced a new browser plug-in called Google Gears. Gears is a step in the direction of removing this pain point. Basically, it’s a series of JavaScript APIs to interact with a local web server and persist to a local instance of an SQLite database. A WorkerPool module is also offered to emulate multithreading in the browser. This allows developers to implement background synchronization of the local database with the central web server. (The docs mention synchronization but I don’t see any out-of-the-box support. That would be a nice addition.) If your application is architected properly, it seems that this wouldn’t be a horribly complex means to add significant value to a web application. Google Docs (prediction: Google Gears implemented in < 2 months), SalesForce and BaseCamp are several immediate candidates to go Desktop 2.0.
But, I don’t expect to see them popping up at CompUSA?

Xml over SMTP?
Account verification workflows have always perplexed me. What I’m referring to are the common steps you usually have to go through to register a new account on a site:
I understand the logic behind this (spam prevention, guaranteed means of contact, etc), but the task is arduous and repetitive. It’s also problematic if you sign up for an account on a computer without easy access to your email account. Not everyone uses webmail. In the process of brainstorming solutions I started pondering whether it might be possible to use SMTP email as a mechanism for performing stateless web services. The fundamentals are the same as services over Http. The only difference is that, email servers do not expose hooks for acting on incoming messages. You’d have to use a specialized SMTP server in order to get this functionality.
Or would you?
Every halfway decent email client I’ve ever encountered has a rule system for preprocessing incoming mail.
So, in your client you could setup a rule to forward certain messages on to a third-party mail server with Xml message handling capabilities. If the email met the criteria of an web service request, it would be forwarded on to a third-party mail server for processing. Your personal email address now becomes an Api for any number of exposed services. Getting back to the start of this post, one of the Api calls could be a check to verify accuracy and authenticity of a user’s email address. I could see this easily tying in with centralized authentication providers such as Windows CardSpace or OpenID.* Taking things even further, I could imagine using something like Yahoo! Pipes to redirect incoming email Api calls to fourth-party web services translating responses back to plain text or html via XSLT.
Doing a bit of searching, I see I’m not the first
to come up with this idea. I even found a ready-to-use Python implementation of the whole process. However, no one has really embraced this approach. It could be I’m crafting up technology for technology’s sake here (admittedly not the first time). However, there is something appealing about the idea emailing a friend with a WSDL request and getting a list of services their email can provide me.
Of course, this does leave me with another unanswered question. How do you avoid the email address verification for the third-party provider?
* Yes, I realize this is a naive brain-dump that doesn’t consider security or privacy.
What’s Up With Castle - Week of April 30, 2007
Sorry I missed a week there. There wasn’t a whole lot going on other than JIRA fixes.
ActiveRecord
- Support for NHibernate’s Subselect Fetching Strategy [svn]:NHibernate supports the ability to load multiple collections in parallel. This can improve performance when loading related collections based on sub-select criteria. The Hibernate documentation has further explanation.
- Validation Error Messages [svn]: Added support for overriding the default validation error messages from strings located in resource files. There are several home-grown implementations of this (including the one I wrote) but it’s nice to finally have support for this out of the box.
MonoRail
- Visual Studio NVelocity colorizer: Here is one of the two NVelocity Visual Studio 2005 add-ins currently in development. It’s not finished yet, and has several show-stopping bugs, but it’s a good start. I messed around with the Visual Studio SDK about a year ago and can attest to the difficulty in working with it. There’s a lack of documentation, and the examples included with the SDK were less than transparent.
Windsor
- Series of Articles on Using Windsor: An excellent set of short tutorials on how to use various features in Windsor. I love the fact that these are really bite-sized. Each contains only a few paragraphs of text and some relevant source code. However, they are exceedingly effective at demonstrating Windsor’s power. (I should really link directly to Alex’s blog, but can’t find a nice way to go directly to the relevant posts.)
Contrib
- Screencast on Using CodeGenerator and ActiveWriter: Shows the basics of both of these projects and why you might want to use them in your next Castle foray. If you’ve never used either it’s worth 20 minutes of your time. In case you are unfamiliar, CodeGenerator is an MSBuild task for generating strongly typed wrapper classes for your controllers and views. ActiveWriter is a Visual Studio file type used to create ActiveRecord models using a visual designer (similar to the class designer).
What’s Up with Castle - Week of April 16, 2007
Another week with some exceptional new features.
MicroKernel
- Synchronize Facility [svn]: New facility providing synchronization support for components by implicitly implementing ISynchronizeInvoke and SynchronizationContext. This provides some convenient help for dealing with UI updates in multi-threaded applications. Check out this article for more details on ISynchronizeInvoke.
MonoRail
- JSON DataBinder Extension [svn]: Databinding support for binding serialized JSON objects to CLR classes. It uses NewtonSoft’s JSON.NET. It’s also a separate project so the extra dependency doesn’t affect people who aren’t using it.
- Eager Fetching in ARFetch [svn]: Great stuff here! Nhibernate lazy collections defer loading collection properties for an object until properties are accessed. This is usually the most performance-conscious approach. However, if you know beforehand that you will need to access the collection on an object it is better to fetch the collection at the same time the parent object is loaded. F�bio Batista added support for eager fetching specific known lazy collections directly in the ARFetch databinding attribute.
Dynamic Proxy
- Mixin Support [svn]: Proxied objects can now support mixin functionality.