Internet Explorer to Chrome: "Bring it on"  

Tuesday, March 31 2009

It seems that although Chrome has given Internet Explorer a mean right hook after the opening bell of the first round, Internet Explorer is not down for the count. After reading today about the next version of Internet Explorer, IE 8.1, code named Eagle Eyes it is clear that Microsoft will not leave the browser space without a fight.

There are a lot of new features to discuss, but some of the ones that I am pleased about include:

  1. Ability to run FireFox extensions (like FireBug and Remember the Milk)

  2. A faster JavaScript engine, apparently borrowing some of the speediness of V8

  3. Better Acid3 Performance (Open Standards ftw)

  4. Multiple Browser Rendering Options (cross-browser testing without the need for tools like Litmus)

It’s nice to see competition coming back to a market that has been quite stagnant over the course of the last few years. Only time will tell who will win the new royal rumble between Firefox 3.1 (and it’s new JS engine Trace Monkey), Safari 4.0, Chrome 1.0, and now IE 8.1.


  • Posted by Charlie Robbins

Moving my project to GitHub  

Friday, March 27 2009

So this week I have been slowly moving all the projects and samples that I host on this blog over to GitHub. While I really like all the features that GitHub offers (especially the social coding features), but the Windows tools support for Git is a barren wasteland. Maybe I’ve just been spoiled by TortoiseSVN, but going back to a pure command line version control system seems like a step backward in some ways.

However, there is hope on the horizon as TortoiseGit has been quietly developing a port of TortoiseSVN to support Git. I have gone back and updated all my old blog posts with the new GitHub URLs, so just check back there if you want to find anything.

You can find me on GitHub (or Twitter) @indexzero or @levelg.


  • Posted by Charlie Robbins

Why isn't 'Edit Other Styles' in an object's context menu in Blend?  

Thursday, March 26 2009

So I recently read a good tutorial on how to style a ListBox in Blend and I finally found a feature that I have simply overlooked in Blend for over a year. That feature is, as the title of this post suggests “Edit Other Styles,” which exists in the ‘Object’ menu in Blend. I have been getting around this perceived limitation in this extremely convoluted way that I am very happy I will no longer have to do.

The point I would like to now pose to the Blend team is that why in the name of all that is logical isn’t that option in an object’s context menu? To illustrate the differences here, I’ve got two screenshots of the ‘Object’ menu and the context menu of a ListBox:

  1. The ‘Object’ menu in Blend

Blend Object Menu Screenshot

  1. Context Menu of a ListBox

Blend ListBox Context Menu Screenshot

It just doesn’t make any sense to me why “Edit Control Template” and “Edit Other Templates” are important enough to have in the context menu when “Edit Style” and “Edit Other Styles” isn’t. The trend that I am seeing more and more from custom controls (such as the AutoCompleteBox or DataGrid) is an increase in the number of Styles for template parts. So please, please, just add it to the context menu in Blend 3 RTM.


  • Posted by Charlie Robbins

I have seen the future and the future is Boxee  

Wednesday, March 25 2009

My friend turned me on to the Boxee Meetup last night at Webster Hall. I had never heard of Boxee before, but after hearing Anvers (Boxee CEO) demo the product and talk about the features in the upcoming beta, I am sold.

If you’ve never heard of Boxee, let me give you my synopsis of what they’re doing. Boxee is designed to enable internet content providers (like Hulu, Pandora, NextNewNetworks, and Blip.tv) to reach more customers by creating a platform that gives users the “10 foot experience.” That is, a great user experience when you’re sitting back on your couch and have your respective device hooked up to your TV using a remote control. Currently, Boxee supports Apple, Apple TV, and Ubuntu in a public alpha and Windows in a private pre-alpha. I attempted to sign up for the Windows pre-alpha last night and hopefully I’ll have more details to share soon.

Ok, so now you know about Boxee. But wait, there’s more. Last night they made a series of announcements that got me really excited about their platform. The released a Pandora integration that was built with their new set of developer APIs. I haven’t had a chance to look at the APIs first hand yet, but it seems like it should be relatively straight forward to enable audio/video content providers (as well as maybe interactive content providers like game emulators) to build new applications and experiences on the platform. They also made a series of feature announcements about the beta that I’m not going to hold my breath for because they haven’t announced a release date and didn’t even have any mockups to show. To their credit though, they’ve already got a great product, so I’m just excited to try to get it running on my Windows-based Shuttle.

You can check out more about Boxee at http://www.boxee.tv


  • Posted by Charlie Robbins

Comments working again...  

Monday, March 23 2009

My apologies to anyone who has tried to post a comment in the last couple of weeks and has been met with an ActionController message:

Comments Extension Exception

I have modified that exception slightly and I’m still investigating the issue. The changes will get pushed to the Level G git fork here. I’ll try to update when I’ve completely fixed this issue.


  • Posted by Charlie Robbins

Silverlight 3: The WPFification of RIA  

Sunday, March 22 2009

It's 5am on a Saturday. Yeah, RIA will do that to a person. Regardless, there are several things I'm catching up on from MIX '09 in Vegas that make me just think: *finally*. Here's a short list of what should have been in SL 2.0:

  1. ElementName Bindings (but where's RelativeSource={RelativeSource, FindAncestor ...} ?)
  2. <ResourceDictionary.MergedDictionaries>. It was impossible to manage complex resources/assets without this.
  3. PixelShaders. I know it's a .NET 3.5 SP1 Feature, but so awesome.
  4. <Style BasedOn={x:Null} />, BasedOn styles are an improvement, but in my opinion just the poor cousin of cascading styles. CSS concepts in a WPF/Silverlight application would be so welcome.
  5. Silverlight on the desktop. I mean Telesto can run anywhere right? Does this mean I'll see an Android port of Moonlight 3.0 *fingers crossed*?

That's enough speculation for now. I'll save the rest for the comments.

Update: Apparently RelativeSource is supported in Silverlight 3, see here for more details.


  • Posted by Charlie Robbins

String Sorting with Dynamic Tries, "Burstsort"  

Saturday, March 21 2009

When I was a Computer Science student (not all too long ago as my colleague Doug likes to remind me) I was taught that you couldn’t get better performance in your sorting algorithm than your run-of-the-mill Quicksort algorithm (assuming you’re using a dynamic pivot of course, or else, all your reverse sorted data [read: base] are belong to us).

So when I stumbled across an interesting white paper from the Journal of Experimental Algorithmics a couple of months ago I was happy to learn that it is possible to get better performance than Quicksort. The paper boasts speeds twice as fast as any other string sorting algorithm due to fewer cache misses, which at least merits a quick (no pun intended) read.

The algorithm utilizes the Trie data structure, something that has always been a matter of much mystery to me. You can read a little bit more about Tries (and F#) over here. Let me know what you think!

White Paper: Cache-Conscious Sorting of Large Sets of Strings with Dynamic Tries"


  • Posted by Charlie Robbins

WPF Tips: How to use a MultiTrigger with an "or" condition  

Monday, March 16 2009

A colleague of mine at the Lab recently asked how one would accomplish an OR condition in a MultiTrigger. After some thinking and looking around on the forums (see: here and here) a workable solution presented itself. MultiTrigger (and MultiDataTrigger) both take have a property called 'Conditions' of type ConditionCollection. Each Condition object within these ConditionCollections can be used in one of two ways:

  1. You can set the Property and Value properties to setup an ordinary property condition.
  2. You can set the Binding and Value properties to setup a data condition.

Read More...
  • Posted by Charlie Robbins