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

Announcing the Release of Quasar 0.1 Alpha  

Monday, January 19 2009

Over the past several months I have been developing a forthcoming portfolio of my past works in Silverlight. Over the course of this project, I have developed several reusable controls that I have decided to release open source under the MIT License (MIT ftw). As the title of this blog post suggests, the name of this new library is Quasar. You can download 0.1 Alpha here.

I am attempting to release this library using an approach similar to what the Silverlight Toolkit team has done. That is, to have quality bands that represent my confidence in the RFPT (ready for prime time) status of these controls. Currently I have thrown all the controls and behaviors into the “pre-Alpha” band. Robust unit tests and sample usage will be forthcoming soon, but I’d love any and all feedback about this library. Enjoy!


  • Posted by Charlie Robbins

Inserting Views into Regions in Prism V2 Alpha for Silverlight  

Wednesday, January 07 2009

Recently I was implementing a ReorderableListBox in Silverlight using Prism. Now the standard approach in Prism would be to write a ReorderableListBoxRegionAdapter and then register the type in your bootstrapper. After doing this and getting my reordering behavior working in a sample application without Prism, I ran into a brick wall around what I see as a glaring hole in Prism: IRegion does not allow Views to be inserted at an arbitrary position, they may only be added to the end of the list.

Clearly without the ability to insert dynamically my reordering behavior was up the river without a paddle. Now after digging through the Prism source code I have a very clean, workable solution that I would like to eventually get into Prism itself.

If you do not want to see the details of how I did this, you can download it here and stop reading now. For those foolish souls who want to listen to my banter, read on. The problem revolves around the fact that although ViewsCollection implements INotifyPropertyChanged it does not implement IList. The ViewsCollection class is responsible for filtering the underlying collection of ItemMetadata and keeping these collections up to date. It updates these filters by responding to CollectionChanged events in the underlying collection. It’s response to NotifyCollectionChanged.Add is:


case NotifyCollectionChangedAction.Add:
  foreach (ItemMetadata itemMetadata in e.NewItems)
  {
    itemMetadata.MetadataChanged += itemMetadata_MetadataChanged;
    if (filter(itemMetadata))
    {
      changedItems.Add(itemMetadata.Item);
    }
  }
  AddAndNotify(changedItems);
  break;


Read More...
  • Posted by Charlie Robbins
Subscribe Here