Tim's Rivershore Polar Plunge 2011 for the VA Special Olympics

By Michael Flanakin @ 2:15 PM :: 20316 Views :: Other :: Digg it!

I've joined a group of friends and co-workers to take part in Tim's Rivershore Polar Plunge in Dumfries, VA on Feb 26, 2011. If you're unfamiliar with Polar Plunge events, it's basically a bunch of people getting into freezing cold water to benefit the Virginia Special Olympics. This'll be my first year, so we'll see how it goes.

The real reason I'm posting about this is to share an info graphic I threw together that shows how much the top 4 teams have raised for this event. My team is #4, which is why I stopped there. As one of my early attempts at creating an info graphic, I'd love to get others' thoughts on it and how to improve it. Of course, if you want to donate, that'd be great, too! ;-)

Help 'Cold hearted Cache' be the #1 fund-raiser for Tim's Rivershore Polar Plunge 2011

Note that the numbers have been changing a lot lately, so I had to just take a snapshot and finish the image. I wanted to create an interactive Silverlight version, but that just didn't seem feasible given time constraints. I'm hoping I'll be able to take on more of these info graphics and push them out quicker as I get more experience.

I want to especially thank Joseph Williams (and Tina Garceau) of willceau.com for use of the shivering man cartoon picture.

Dependency Properties are Too Painful

By Michael Flanakin @ 3:16 PM :: 17091 Views :: .NET :: Digg it!

When I first started using dependency properties and routed events in .NET 3.0, I hoped things would be simplified. Given all the compile-time enhancements in .NET 3.5, that was a perfect time to greatly simplify these. Sadly, nothing changed and to my surprise, .NET 4.0 maintained the status quo. For instance, here’s a simple dependency property in Silverlight:

public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyControl), new PropertyMetadata("Hello", TitleProperty_Changed));

public string Title


    get { return (string)GetValue(TitleProperty); }

    set { SetValue(TitleProperty, value); }


Every time I type this, I cringe. What I should be typing is something like the this:

[DependencyProperty(DefaultValue="Hello", Changed=MyControl.TitleProperty_Changed)]

public string Title { get; set; }

The one trick is that the compiler would have to see the DependencyPropertyAttribute and convert that to the full code above. This could be further simplified with a new keyword (e.g. public dependency string or public attached string) to signify a property is a dependency property, but we'd still need a way to specify custom metadata, like the default value and change events -- of course, we already have a DefaultValueAttribute, so that should be partially sufficient.

There's really no way you can argue the simplicity of this approach. Hell, the dependency property registration line is 68 characters longer than the entire simplified alternative. That's 282 vs 106 characters. Which would you prefer?

Ideally, this same concept would be added for INotifyPropertyChanged and it's related interfaces. By simply stating that I want to use this interface, .NET should know what to do. All this code is just ceremony I'd rather avoid.

Infrastructure as a Service (IaaS) vs. Platfrom as a Service (PaaS)

By Michael Flanakin @ 6:05 PM :: 20801 Views :: Architecture :: Digg it!

Okay, "story" is a bit much. I just wanted to share perhaps the best picture that I've seen that compares two types of cloud offerings: Infrastructure as a Service (IaaS) and Platform as a Service (PaaS). Microsoft, of course, supports both with Azure. Enjoy!

IaaS vs PaaS

Using Analytics to Identify the Best Screen Resolution

By Michael Flanakin @ 6:37 PM :: 4483 Views :: User Experience :: Digg it!

As part of my site redesign effort, I had to determine what the best screen resolution to target was. Initially, I was ready to blindly accept 1024x768 as "the standard," firmly believing that 800x600 has been left in the dust more than 5 years ago. Then I reminded myself that analytics have the real answer, but not just any analytics.

Despite the wealth of interesting information we can find online about the "average" screen resolution, the best answer is a little closer to home than these general studies. Chances are, your user community isn't the entire world. If you think it is, you don't know enough about your users. This is where analytics come in. For instance, the average screen resolution may be 1024x768, but if I'm building a site/application for the visually impaired, the average may be much lower -- maybe even 640x480! On the other hand, if you're building a site/application for gamers, the average will most likely be higher. In either case, missing the key demographic will undoubtedly provide a less than desirable experience for your users. This is where your own instrumentation/analytics come in.

Get Microsoft Silverlight

I found out a few interesting things about my site's visitors from this exercise.

1024x768 is the smallest resolution. I should've expected this, knowing my audience; but I didn't. I figured there'd be at least a few 800x600 visitors out there. While I'm sure there are some in the world, this at least confirms that 1024x768 is the smallest resolution I need to concern myself with; however, at 11%, it's still a very small part of the overall audience.

26% use 1280x1024. While not that large of a percentage, the largest group of visitors has a 1280x1024 resolution. I was surprised to see this as the most popular resolution, but it makes sense, given hardware advances. Arguably, this is where my focus should be. A 1280-pixel width would support 87% of my visitors. Unfortunately, a 1024-pixel height only supports 59%, so that's not quite ideal. Luckily, this is just about scrolling. The best height to target for the prime real estate would be an 800-pixel height, which would support 86% of my visitors.

58% have widescreen displays. Again, not stunning, but very interesting. Knowing more than half of my visitors have widescreen displays tells me I should embrace the horizontal spread of key information, as opposed to dropping this info below "the fold." I'm not saying every layout decision needs to be based on "the fold," but it does exist and it should be acknowledged to a certain degree. Yes, people scroll, but the initial impact is above the fold, so that should be targeted and drive interest in not only scrolling down, but clicking thru to other pages. But I digress... The biggest lesson here is that fixed-width layouts are not an option. Limiting to a 1000-pixel width, for instance, would waste 25-50% of the display size for half of my visitors. That's crazy.

Most well known aspect ratios are the rarest. While 4:3 and 16:9 are the aspect ratios I hear about the most -- likely because they are the standard aspect ratios used in TVs -- they only make up 22% of my visitors. While knowing this won't help me come to a solid conclusion, it is another interesting point I wouldn't have expected. I only point this out because it shows how instrumentation can tell you things you may not have known you didn't know.

Strange resolutions like 1152x864 and 1366x768. I knew about most of the resolutions I found, but there were a couple I've never heard of, specifically 1366x768, which was very odd and doesn't exactly map to 16:9, but seems to be attributed as such.

There are a countless ways I could've sliced the numbers to extract other interesting tidbits, but the important thing is that I was able to use actual metrics to validate my assumptions. This would be even more important on larger projects; especially, team projects. Have you ever had an argument over some subjective aspect of a system you've built? Maybe it was a particular class design or visual layout or perhaps it was something as trivial as a color. We all have our opinions and design reviews tend to bring them all out. It's about time we stop having subjective arguments and actually pull together objective, factual metrics based on real system usage. What do your customers deserve? Assumptions and guesses or educated conclusions based on proven facts?

Source code for resolution visualization

Using PowerShell to Analyze Screen Resolutions

By Michael Flanakin @ 7:54 AM :: 14987 Views :: PowerShell :: Digg it!

As part of my site redesign effort, I'm taking a look at different screen resolutions users of my site have (I'll post something on that later). I noticed a few strange screen resolutions and wanted to compare the different aspect ratios. I knew a couple of them, but not all, so I figured PowerShell should be able to solve this problem fairly easily to ultimately give me the following information. Note that the chart was created in Excel. I could've used WPF, but since this is a rat-hole of a rat-hole off my actual task at hand, the redesign, I didn't want to get into WPF generation in PowerShell.

Screen aspect ratios of michaelflanakin.com users

Breaking the problem down, we need to be able to go from 1024x768 to 4:3. In order to do this, we'll have to whip out some elementary school math to figure out the greatest common divisor. Luckily, this is pretty simple to determine. First, let's start with getting a list of all divisors for one number.

function Get-Divisors($n)
    $div = @();
    foreach ($i in 1 .. ($n/3))
        $d = $n/$i;
        if (($d -eq [System.Math]::Floor($d)) -and -not ($div -contains $i))
            $div += $i;
            $div += $d;
    $div | Sort-Object;

This is pretty simple, but I should probably cover a few non-obvious things. First, @() is an empty array, which will be used to store all of the divisors. Looking at the loop, you'll notice that I only loop thru one third of the possible values. I hope I remember this correctly from school, but you do not need to loop thru all numbers between 1 and the target value to identify all possible divisors. This is simply a way to speed up the calculation. I'll leave it to you to explore the algorithm on your own, since that's not my focus here. Within the loop, the function checks to see if the divisor is a whole number and whether the value has already been saved to avoid duplicates then adds each divisor to the array. Pay attention to this because what's happening here is that PowerShell sees [array] + [object] and automatically determins that you must want to add a new item to the array. This was a very nice surprise. Finally, Sort-Object puts the numbers in order for us humans. Now, we can get all divisors for a specific number.

PS C:\> Get-Divisors 1024;

Next, we need to get the common divisors for both the height and width of the screen resolutions.

function Get-CommonDivisors($x, $y)
    $xd = Get-Divisors $x;
    $yd = Get-Divisors $y;
    $div = @();
    foreach ($i in $xd) { if ($yd -contains $i) { $div += $i; } }
    $div | Sort-Object;

This is pretty much more of the same. Get all divisors, create a new array to hold the common divisors, loop thru the divisors to find the commonalities, and finally sort the array. The array shouldn't need to be sorted, since the previous function did it, but I figured it's probably good to be sure.

PS C:\> Get-CommonDivisors 1024 768;

Next, we'll grab the greatest common divisor.

function Get-GreatestCommonDivisor($x, $y)
    $d = Get-CommonDivisors $x $y;

This isn't even worth explaining. Arguably, we could've simply returned the greatest common divisor in the last function, but this is a good way to create composable, reusable scripts. After all, we need to retrieve a list of divisors all the time, right? :-P I won't bother showing what the output would be. I'm sure you can figure this one out ;-) We'll move right on to the last step, which will get the actual aspect ratio.

function Get-Ratio($x, $y)
    $d = Get-GreatestCommonDivisor $x $y;
    New-Object PSObject -Property @{
        X = $x;
        Y = $y;
        Divisor = $d;
        XRatio = $x/$d;
        YRatio = $y/$d;
        Ratio = "$($x/$d):$($y/$d)";

This will most likely throw you for a loop, if you're a PowerShell beginner and possibly even some intermediate users. You most likely expected the function to simply return a string, like "4:3". We could absolutely do this, but with the richness of PowerShell, using a string is somewhat wasteful. This all comes back to a goal of composable scripts that can be reused in the future. In the future, we may want more than just a string value. Since PowerShell is so good at passing around objects, let's create a new object that has all the properties that make sense for this context, namely the two numbers, greatest common divisor, individual ratio portions, and the string representation of that ratio.

PS C:> Get-Ratio 1024 768;

Divisor : 256
Y       : 768
XRatio  : 4
X       : 1024
YRatio  : 3
Ratio   : 4:3

Now, we have what we sought out to get: the aspect ratio for a 1024x768 screen resolution. Let's face it, tho, we didn't want one, we wanted a bunch of them. To be exact, I was curious about 10 different resolutions. We've gone this far to automate this process, we might as well finish up with a function to get a group of aspect ratios.

function Get-CommonRatios($res)
    $ratios = @{};
    foreach ($r in $res)
        $rat = (Get-Ratio $r[0] $r[1]);
        if (-not $ratios.Contains($rat.Ratio))
                (New-Object PSObject -Property @{
                    XRatio = $rat.XRatio;
                    YRatio = $rat.YRatio;
                    Ratio = $rat.Ratio;
                    Count = 1;
            $ratios[$rat.Ratio].Count += 1;
    $ratios.Values | Sort-Object -Property XRatio;

Again, this is all pretty normal. I'm using a hashtable (@{}) instead of an array to avoid duplicates and also created a new object to hold the metadata instead of the original ratio object because not all of the properties on the old object are applicable anymore. I also added a property to count the number of times the aspect ratio is used.

PS C:\> Get-CommonRatios @((1024,768), (1280,800), (1280,1024), (1366,768), (1440,900), (1600,900), (1600,1200), (1680,1050), (1920,1080), (1920,1200)) | Format-Table Ratio, Count;

Ratio                           Count
-----                           -----
4:3                                 2
5:4                                 1
8:5                                 4
16:9                                2
683:384                             1

There ya have it. The only special thing I did was format the results as a table with only the ratio and count properties. Hopefully, you were able to pick up a few new things for me, I was glad to explore the dynamic array handling and runtime object creation.

Site Redesign Thoughts

By Michael Flanakin @ 10:57 PM :: 20335 Views :: User Experience :: Digg it!

As I mentioned on Twitter, my site's long overdue for a revamp. I'm looking at ways to make my personal site a hub of all my activity on the many disparate services and social networks I'm part of. I have a number of ideas on how to bring them together, but it all comes down to how much time I'm willing to sink into this activity, given the many other things I should probably be working on instead. My biggest concerns are creating a hub of my activity, most likely moving my blog because I'm tired of managing the current platform, and coming up with a design that's more modern and fresh, yet simpler than what I have today.

I've been doing a lot of thinking over the past few hours and, while I don't want to slap my entire OneNote notebook of thoughts out here, I do want to share a wireframe of a conceptual home page. This is merely a conceptual layout from an information architecture perspective, but it's a start.

Site redesign concept wireframe

I'm thinking about the site having four main areas: about page, activity stream, blog, and articles. The activity stream is the most complicated piece of the puzzle, given the vast number of disparate services that provide lackluster offerings. While this has the biggest opportunity for improvement, it's also a huge time sink, considering people use those services and aren't going to come to my site just to see my end-to-end activity stream. Based on that, I'm not sure how much time I'll dedicate to it.

I'd love to get feedback from others. I want things to be as simple as possible. I threw around the idea of not having a main menu at all in an effort to let the context drive the experience, but I'm not sure that's approproate given the fact that people are used to seeing a menu. I should probably go for it and use instrumentation and analytics to determine which way is best. What do you think?

Check All To-Do Items on Foursquare

By Michael Flanakin @ 5:44 AM :: 3593 Views :: Technology, Other :: Digg it!
Foursquare + jQuery

As fun as Foursquare is, it agravates me to no end at how short-sighted their interaction designers are (if they even have any). Admittedly, I have this problem with almost every piece of technology I use, but don't have the time to fix them all -- if only *rolling eyes, shaking head* What I do have the time for is finding a quick hack to something that was annoying me -- namely, checking all the to-do items on a Foursquare account page.

Go to any Foursquare account page, like the Bing account page, and you'll be presented with a list of usually 50 or 100 to-do items that often lead to a badge. Say what you will about Foursquare, I enjoy the game. I have gone thru several of these pages clicking each one after the other a few times now and finally got fed up. Within a minute, I was able to use IE8's built-in dev tools to come up with a quick solution.

If you're not familiar with the IE8 dev tools, simply open IE8 and press F12. The dev tools may open in a new window, but I prefer them docked at the bottom of my main window, since I'm usually on a laptop. The extra window is ideal for dual monitor setups, tho.

IE8 Dev Tools

The HTML tab comes up first, which is where I started -- actually, that's not true, the first thing I did was jump over to the Script tab and type $ into the Script Console. This let me verify that Foursquare uses jQuery. Armed with jQuery, I knew I could accomplish what I needed fairly quickly. I selected the element selector arrow (first item on the toolbar on any of the tabs) and then clicked on one of the "Add as a To Do" elements within the page. This switched over to the HTML tab to show me a div with a checkbox. Most importantly, the div has a class of tip_todo_unchecked and the checkbox had an onclick handler. This is all I needed, thanks to jQuery. I moved back to the Script Console and used the following jQuery code to select all unchecked items and click them. Note that I had to "click" them to run the onclick handler. Simply checking them wouldn't have triggered the onclick event.

$('.tip_todo_unchecked :unchecked').click()

If you're not familiar with jQuery, the question mark ($) is an alias to the jQuery() function. Typically, you pass in a selector that is used to traverse and select HTML elements. In this case, we're grabbing all elements unchecked checkboxes (input elements with a type of checkbox) that are within elements with a CSS class of tip_todo_unchecked. While not exactly the same as CSS selectors, jQuery selectors were obviously heavily inspired by CSS selectors and aim to "embrace and extend" what CSS offers in this arena. The click() function simply calls the onclick event for each of the elements that were retrieved. It's that simple.

Note that you'll have to wait a few seconds while the page dynamically registers all of those clicks for you. I just jump down to the bottom of the page and wait for the last few to process.

Arguably, I should've put this into a GreaseMonkey for IE script, but my faith in IE add-ins has dwindled, so I don't use that anymore. Firefox users can do the same thing with FireBug and/or GreaseMonkey. Heck, there may already be a GM script for this. I don't know because I'm not a fan of Firefox -- not that I think IE8 is the best browser in the world. Obviously, the same capability is in Chrome, as well. The bottom line is that jQuery allows this simple hack.

How the Top Tech Companies Made it There

By Michael Flanakin @ 1:54 PM :: 3458 Views :: Technology, Microsoft, User Experience :: Digg it!

If you were to ask someone on the street who the top technology company is, you'll likely get one of three answers: Apple, Google, or Microsoft. Whether you agree that these are the best technology companies or not, you have to admit these three own the broad mindshare. While I listed them alphabetically, I'd bet you'd hear them in that specific order. It all comes back to mindshare. IBM and Oracle are definitely top technology companies in the enterprise, but without a consumer focus, both are sacrificing this all-too-valuable metric. You can see how important this metric is by looking back at how technology was driven in the past. 15 years ago, technology was driven by enterprise needs. Over time, however, technology has become less expensive and more accessible, which has flipped that trend. Now, most technology trends are driven by the consumer market. But what did these three do to get that mindshare?

Ask anyone with an Apple product what they like the most or what their first impression was and they'll comment on how beautiful the device or interface is and how easy it is to use. Apple's core competence is exactly this: visual design and, to some degree, user experience.

Taking the same look at Google, first impressions are typically on simple interfaces and speedy responses. Alone, this doesn't tell us much, but if you take a deeper look, you see that Google is driven by algorithms. After all, search and advertising can only succeed with solid algorithms. This is Google's core competence: engineering.

To put it simply, Apple and Google represent the art and science of technology. As such, those are the crowds they attract. Apple attracts artists and creative professionals and Google attracts engineers and hard-core geeks. This is the key to both companies' success -- a targeted audience.

Having a targeted audience allows these companies to build precise, unambiguous experiences aimed at a specific type of user (or persona). You might say that neither Apple nor Google can do this because their products are used by a wide range of users. That's very true, but just because you target a specific persona, that doesn't mean your user base will never grow beyond that. In fact, it's just the opposite. By targeting a specific persona, you're able to focus your efforts and not only meet, but exceed that persona's expectations because you truly understand what their needs and goals are. With this, you're affording yourself the primary key to product success: passionate users.

Take a look back at the iPhone's debut. Were people not passionate about its sexy interface? Of course they were. And that passion was a virus that spread like a pyramid scheme. Google had the same effect, albeit much slower.

When Google first launched their search engine in the late 1990's, there weren't too many people using it. Yahoo was the most popular search engine at the time, with it's gaudy interface, attempting to be everything to everyone. Perhaps the biggest interaction mistake Yahoo made was attempting to follow the mythical 3-click rule, where users "must" be able to get to any feature within 3 clicks, or they will stop trying. I don't want to get into it here, but this is completely wrong. The way Google succeeded was by getting all the crap out of the way. By focusing on finding what you want, Google attracted geeks -- and a lot of them. Geeks told other geeks who told their family and friends and before you know it, less than 5 years later, Google was the #1 game in town -- all because they drove passion in a small subset of possible users. Of course, passion alone isn't going to earn you a multi-billion dollar business, but passion in the hearts and minds of the right audience can. Passion can also be dangerous.

If you're reading this, you're probably well aware of the stigma of Windows Vista. It's the worst operating system in the world, right? Not so, but the passionate few who did have bad experiences sure did let everyone know. As with the passion of the iPhone and Google search users, Vista haters shouted it out, loud and proud. But I'm not here to defend Windows Vista; I want to show you the value and impact of passion. Speaking of which, if Apple is #1 in the hearts and minds of artists and Google fills that spot for engineers, where does Microsoft fit in?

We can all agree that Microsoft isn't known for its superb aesthetics or engineering prowess, but it is good at both. And, when it comes to these three companies, Microsoft is arguably second in both areas, despite the fact that neither artists nor engineers will accept or admit it. Don't get me wrong, there have been some major blunders on boht fronts, but this is exactly my point. By not excelling in the art or science of technology, Microsoft is taking a back seat to both Apple and Google. When it comes to end-to-end user experience, Apple has the most mindshare, as I mentioned before; but I'd argue that Microsoft is second in this game. Yes, Google does have some wins in this space, but Google is nowhere near as dedicated to or capable of delivering the end-to-end user experience Microsoft is -- just look at Bing and Windows Phone. Admittedly, Microsoft has only started showing its ability in this space over the past few years. On the other side, Google drives mindshare for technology engineering; but once again, Microsoft comes in second. I can cite examples of why Apple sucks at engineering and Google can't quite cut it with end-to-end user experience, but I want to focus on the culmination of all this.

Microsoft has a tendency to attract people who want both beauty and brains; people who understand that beauty alone will get you nowhere and brains alone will leave you as exactly that -- alone. Together, beauty and brains will reach an even broader audience. This is the 80% Microsoft is known for targeting (for better or worse), which is exacly why Microsoft is as popular as it is. Everyone like to look at pretty pictures or solve problems .6825 seconds faster than the next  guy, but the vast majority of the populations doesn't care -- as long as they can figure it out and their problem gets solved, they're happy. Let's face it, the best interface is no interface. If human beings could achieve their goals without interacting with your product, they would. Your product is a necessary evil.

Microsoft hasn't been successful by purely being a runner-up, tho. Microsoft has their own niche: developers. I know of absolutely no company that has ever had the ability to drive passion in developers as much as Microsoft has. Sure, iPhone development has seen a great boon, but that was forced (on Apple) and it wasn't because Apple had a great development platform; it was because users were flocking to the product. Microsoft has continued to deliver compelling platforms for developers to take advantage of year after year. This is only heightenedby the fact that Microsoft's partner ecosystem is fiscally 10 times the size of Microsoft itself. Said another way, partners make $10 for every $1 Microsoft earns. Given Microsoft's gross earnings, that's a huge market. I'd say that's definitely something to be passionate about.

While having 80% of the market sounds outstanding, this group is quite fickle and has no allegiences. They aren't opting out of the artistic and scientific approaches; they just don't care. So what drives them? Each of us has something inside that motivates us. If you want to be successful, you need to start with a core demographic, the primary persona you want to target. Remember that, by meeting everyone's needs, you meet no one's needs. This may seem counter-intuitive, but it's been proven time and time again. If you target a specific type of user, you're giving your primary users an opportunity to get passionate. There's no mathematical formula to cultivate passion -- if there was, Google would've figured it out by now -- but it all starts with targeted experiences. If you want to win in your market, drive passion.

To bring this back to those top 3 companies, Apple and Google are both fairly stuck in their ways. Both companies have art and science built into their DNA. I don't expect to see either company change. Microosft, on the other hand, has an immense amount to learn and I think they're on their way to correcting those. I can't say I expect Microsoft to surpass Apple in artistry or Google in engineering anytime soon; but I do expect Microsoft to give both companies a run for their money. We've already seen Apple reacting to Windows Phone 7 and Google reacting to Bing. As slow as the company is, Microsoft is a huge innovator. We've seen it in the past and I suspect the next 12 months will be full of opportunities for history to repeat itself as Kinect, Windows Phone 7, and IE9 come to fruition. Okay, there's some wishful thinking in that last one, but each of these platforms has developers chomping at the bit, eagerly awaiting their release. And, with each of these combining best-of-breed user experiences  with solid, top-notch engineering, Microsoft is giving us something to be passionate about -- on all three screens (phone, computer, and TV), no less.

For the developers out there, how about your products? How are you driving passion in your users? For everyone else, what makes you passionate?

MSDN Subscriptions: June 2010

By Michael Flanakin @ 6:26 PM :: 3554 Views :: MSDN Subscriptions :: Digg it!

The following consists of the English DVD updates released under the MSDN Ultimate subscription level for June 2010.

Developer Tools

  • Disc 4699
    • Visual Studio Ultimate 2010 (English)
  • Disc 5000
    • Visual Studio Team Foundation Server 2010 (English)

Operating Systems

  • Disc 4694
    • Windows 7 Ultimate N (x64 and x86) Product Key Required (English)

For more information, see the MSDN Subscriptions Index.

Interesting First Impressions with the IE9 Preview

By Michael Flanakin @ 10:27 PM :: 3706 Views :: Microsoft, Predictions, Open Source/Standards, Tools/Utilities, User Experience :: Digg it!


It's been almost a year since my plea to the IE team. Windows 7 has rocked, Office 2010 is looking very nice, and, most recently, Windows Phone 7 Series has amazed the world. All these great things coming together are really putting pressure on the IE team to deliver something revolutionary. Back in Nov 2009, the team talked about the tremendous performance improvements, sub-pixel text rendering, and HTML5/CSS3 support. All-in-all, there was a quick burst of information and buzz around what IE9 could become, but then it died off very quickly. I admit, I was quite skeptical -- and still am -- but at least it showed the team is heading in the right direction. In what seems to be the IE team's typical process, silence happened and annoyance returned.

Today, Microsoft announced the release of an early IE9 developer preview. I was pretty excited about this, since I've been waiting for it since they first started talking about IE9 in November -- well, maybe since IE8 was released without some of the big features I was hoping for. Nonetheless, I was grounded pretty quickly. For better or worse, there are some interesting things that came out of the preview.

1. Uhh, What's This Window?

I'm pretty willy-nilly with new software. Not too smart, but whatever :-P I installed the preview and expected magic. As it installed, I started closing other IE8 windows. All of a sudden, a new Window popped up. "Woo-hoo, it's done! IE9, here I come!" Then I noticed I left one IE8 window open. I switched over to close it and hesitated -- "Why is there an IE8 window still open?" I switched back to the new IE9 window and thought, uhh, this isn't a browser. There's no back button; no address bar; nothing. "Ah, maybe it's just a 'Welcome to IE9' dialog before the IE9 greatness kicks in!" I close the IE8 window, open another with the pinned icon on my taskbar. "Uhh, nothing changed." *Help > About...* Still IE8. WTF!? I guess this is more of a literal "preview" than I thought. No browser; just a chance to see how their pre-built tests work. Meh.

2. The Tests Work... Mostly

I've said it before and I'll say it again, just being part of the game isn't going to fly. And, if this is all the IE team has to show, I'm not impressed. Don't get me wrong, I love everything they show, from performance to sub-pixel text rendering -- seriously, this isn't something to scoff at, it's a very noteworthy improvement for any browser -- to all the HTML and CSS improvements. But it's not enough. Heck, the "Falling Balls" example didn't even work. I really want to bash the performance improvements. I even wrote this paragraph a few different ways to express my disapproval in different ways, but it all comes down to this: you won't realize how drastic the improvements are until you see IE8 and IE9 running side-by-side. The Flying Images example seems obvious, when you see it in IE9, but when you go back and watch it in IE8, you think, "Is this seriously what I'm putting up with today!? I feel lied to; cheated. How dare you, IE team; how dare you!" With all that said -- and seriously, the perf improvement is tremendous -- I'm still not happy (here's where my desire to bash performance comes in). While you definitely notice that aspects of performance have improved, the perceived performance really sucks. It's not the page loading that I'm talking about, tho; it's the standard page interaction that's defunct. Even clicking some of the links used by the examples were ridiculously buggy. I guess there's a reason they called it a "developer preview"... wait, that doesn't say "developer," it says "platform"...

3. "Platform Preview"

In an effort to find the hidden navigation controls, I scoured the lifeless window edges. The best I could find was the Page > Open... menu option. Well, at least that's a way to test out other pages. I figured, what better way to test out the new browser than to write a blog post. Let me just tell you that I'm dying here. I mentioned the perceived performance sucks already. Try typing in this thing. I feel like I'm clawing my eyes out -- and I'm talking about with freshly trimmed fingernails. You know what I'm talking about, when you trim your fingernails down to the nub and putting even the slightest pressure on them hurts. Now, try to claw your eyes out with that. That's why I feel like I'm doing right now. Every character is painful. *Ouch, oooh, ouch...*

Okay, I'm exaggerating; but it is painful. But, now that I'm able to get past the examples, I'm realizing I have two versions of IE installed. Hmm... very interesting. Remember the days when IE was a crucial part of Windows and couldn't be unbundled? Well, they seem to have figured out how to install a new rendering engine without touching the old one, hidden deep in the innards of Windows. Of course, they did introduce the ability to completely uninstall IE in Windows 7, so maybe that's a moot point nowadays. Either way, this is a first for IE, as far as I know. Then it hit me... "platform preview." Are they saying something with that? Are we talking about a rendering engine completely detached from the Windows desktop OS?

4. IE9 on Windows Phone?

In the original Windows Phone 7 Series announcement at Mobile World Congress 2010, Joe Belfiore commented that the phone is more than just the Mobile IE we see in Windows Mobile 6.5 and its predecessors. He said it came from the desktop browser code-base. This alone doesn't mean much, but when he called out the sub-pixel text rendering, my mind started adding things up. Is this IE9 on Windows Phone!? Nobody has said that, but you have to wonder. I've read that Windows Phone 7 Series is based on IE7 with some back-ported features from IE8, but that doesn't really make sense, when you consider that sub-pixel rendering is only coming in the next version of the browser. I still have to wonder about this. It doesn't make sense to back-port that feature two versions. Maybe it's IE8 with that one feature back-ported, but maybe it's IE9. If that's the case, IE9 will need to be on a hyperactive beta period and, as I mentioned before, they definitely aren't close to being done, yet, and I'm admittedly not confident they even know how to do that.

5. Where's the Navigation?

I really want to get back to the preview. I'm still annoyed at the fact that I have to get to sites in a hacky way. Why would the IE team do that!? Do they not want us to use the browser? That can't be it. Maybe they didn't have time to finish out the preview and just crammed some stuff together to make the Mix10 keynote. Maybe, but I doubt it. I didn't notice this at first, but the menu options aren't standard. Specifically, there's a "Page" menu instead of a "File" menu. Perhaps I'm reading into this too much, but "Page" sounds like more of a ribbon tab than a menu option. Maybe the reason we're getting such a scaled-back browser is because the old chrome isn't there anymore -- we could be getting the first ribbon-based browser. I'm very excited about this possibility. At the same time, I can't ignore the fact that this will be a very touchie UI, given the ever-popular tab-based browser. IE7 brought me back from Firefox because the UI was slim and just looked and felt more professional. IE9 with a ribbon done right -- extra focus on "done right" -- could seriously bring people back to IE. At the same time, it's an opening for haters to complain about the ribbon. I whole-heartedly believe the ribbon interface is demonstrably better than menu-based interfaces. So much so that, if I had my way, I'd never use another menu-based interface again. I'm not saying the ribbon is the way to go in every case, but I don't know why a traditional menu would ever be the "right" experience. It just isn't optimal.

With all that said, maybe the ribbon isn't the IE team's target. Maybe they've put a lot of thought into how users should be interacting with the browser. In either case, I welcome the change. Chrome took an interesting move with minimization, but I don't think it was drastic enough. Google played it safe with Chrome. Microsoft's not afraid of taking big risks when it comes to user experience -- just look at Office 2007, Windows Phone 7 Series, and even Visual Studio 2010 to a lesser degree.

No matter what happens, I'll be eagerly awaiting either the next preview/beta. At the same time, I'm not holding my breath. The IE team has a lot to prove with respect to being agile and, if they really are creating a new UI, that'll just complicate things more. I'd like to say we'll see something by the end of June, but who knows with that team. All I can say is, IE team, prove me wrong; please, prove me wrong!