With the Olympic ceremony only days away and being able to enjoy the Olympic experience online via Silverlight, why not get a little excited and play some casual games, Olympic style.  All of these were build using Silverlight and the Popfly game creator:

I played them and they are pretty fun and amazing what can be done using a non-programming tool for gaming and Silverlight!

Have you seen those television commercials about used car markets and someone standing in a white background and as they vocalize their automobile preferences the selections fly in and around them.  That’s what I was reminded of when I came upon the new feature on Kelley Blue Book’s comparison feature on their site.  I had previously written about some innovative uses of DeepZoom with Jose’s samples and I like what KBB has done here as well.

They’ve leveraged Silverlight with DeepZoom in a way that provides some good user functionality but at the same time provides a line-of-business application for their organization.  You can get to the comparison feature by starting at their Perfect Car Finder® section of their site and clicking the Photo Edition near the bottom of the application.  Once launched you are presented with an array of vehicles which you can start trimming down by using the controls to specify your preferences.  As you enter options the images of vehicles filter and wrap into a new grid view.

I saw something that I’ve been working on as well for a blog post used in this application…a range control:

I did some snooping and was able to spend some time chatting with the developers of this beta application for KBB.  It was great to hear how they’ve got to this point in such a short time (abt a week) and with a developer who said this was his first Silverlight application.  I like that they had a need for a custom control and built it.  If you play around with it on the site you can see that it is basically the Slider functionality with two Thumb controls (which is the direction of my sample as well).  Changing these slider values also filters the car selections as well.

The car pictures are the DeepZoom portion of the application and do what you’d expect any DeepZoom app to do at this point with some great resolution photos.  One thing that KBB has done here is monitor where you (the user) are viewing within the DeepZoom collection and provide some highlighting of the car you are looking at (via a border).  Once you click on a specific vehicle it also zooms directly into that vehicle to provide you additional information.

They are making use of knowing where the user is as well as where in the collection that car exists to provide the best functionality to the end user.

I think this is another great use of Silverlight and DeepZoom together to provide some business functionality that is fun for the customer and functional for their organization.  It’s a great mix of services and client technology.  In talking with their developers I made a few suggestions that I think could even enhance the overall user experience and they understand they have some refinement they are desiring to do as well.  But from nothing to an integrated experience in a short time is great!  I’m looking forward to see how this application evolves.  Go check it out and tell them what you think.  Great job KBB team!

If you are a constant reader of this blog, I suspect you’re a geek as well.  And with most geeks it is generally pretty hard to buy gifts.  We usually buy gadgets when they come out and don’t give much room for ‘wish lists’ for our significant others to shop for us.  As such my house around holidays is usually no gifts for me of substantial surprise…that’s fine by me.

This father’s day was different.  My family got me a portable GPS device.  Specifically the Garmin Nuvi 260.  To be most accurate, my family actually got me a Magellan device but my wife gave it to me with the “I’m not sure if this is a good one so you can get which one you want.”  I love the “you can get” with regard to marriage and purchases…we share the same money don’t we? :-)

After a good amount of research I settled on the Garmin Nuvi line as the best.  Almost every review site I went to had the Garmin Nuvi models at the top of their list.  TomTom was a close second and actually from the experience I liked their physical designs a little better. 

I already have a GPS system in my car, but it is a year 2000 model car, so my GPS screen looks like a mainframe app compared to modern devices…and operates like one as well!  I didn’t think I’d like this idea of the Nuvi because of that, but was I wrong.  Man I turn that thing on to go check the mail.  Honestly I don’t know why, but I’m having so much fun with it!  There was a widescreen model that was about $80 more but had ZERO added features so I opted for the 260 model.  I have NOT been disappointed at all.  The screen is great, the directions are great, re-routing is fast.  I bought the Mexico maps for my device because I go there often.  The Mexico maps came as an SD card I pop in.  I thought this was a little weird because other maps can be downloaded directly into the device…why is Mexico (and some others) different?

This leads me to a little rant.  My Navteq car system wants to charge me $200+ for the map updates to my car.  Garmin - $90.  WTF Navteq!?!?  It’s the same data.  I’ve written to them and asked them why such the difference.  As you would expect: no response.

I used to think about GPS systems in cars and always wanted the in-dash in all my cars.  Never again.  For the cost (walmart.com had the best price for my model at the time of purchase – Best Buy price matched too), you just can’t beat the convenience.  I’ve heard of car companies like Volvo offering a credit voucher instead of in-dash systems.  I must say that is a great idea!  The lack of in-dash is the only thing I don’t like about my device…aesthetically I don’t like the extra thing hanging from my windshield, but the added convenience of taking with me no matter what vehicle I’m in is awesome.  It also has a “walking” mode that routes differently if you are walking.

I couldn’t have possibly asked for a better gift and to-date this has been the best gift I’ve received…and I didn’t even need it!  Bravo family, bravo.  If you are in the market for a GPS unit, check out the Nuvi line.  There are varying features for different models.  I think the 260 is the lowest model I would have went as the one feature I wanted was voice-announced streets (“turn right on Raven” rather than “turn right ahead”).  I don’t much car to integrate my device with as a Bluetooth speakerphone, but there are models that can do that.  Voice commands (available in the 800 series) is something I would have liked, but not at the price differential.  Check out the Nuvi.

I used these sites to help me decide: gpsreview.net and gpsmagazine.com (great buying guide).

If you already pay attention to the IronRuby dev group and are on the distribution list, apologies for the dupe.  I’ve just got back from a camping trip and rifling through all my emails now.  I checked in on the IronRuby group and noticed a new project emerging from someone.

It’s from Ivan Porto Carrero and he calls it IronNails.  It was previously called something else (quite frankly I liked the other name better myself) but there was already a project named after his chosen name.  So alas, IronNails it is!  Ivan describes this as:

IronNails is a framework inspired by the Rails and rucola frameworks. It offers a rails-like way of developing applications with IronRuby and Windows Presentation Foundation (WPF). This framework uses the pattern Model - ViewModel - View - Controller (M-VM-V-C). It should be able to run on both WPF and Silverlight.  The idea is that the views can be created using a design tool like Blend for example and just save that xaml as is. The designer should not need to use anything else than drag and drop to create a GUI design. The behaviors are then added to the view by using predefined behaviors in the framework or by defining your own behavior. Source: IronNails GitHub homepage

The project is really just started so don’t expect a ton of meat there just yet, but it has a great goal and I can’t wait to see it evolve.  Ivan’s using the Rails-like framework of MVC where the XAML can serve as the view for either a WPF or Silverlight application.  The idea being that someone can create a view using a rich interface design surface like Expression Blend and write the code that targets the view which can be fine tuned to either Silverlight or full WPF.

The vision is something like this:

   1: class MyController < IronNails::Controllers::Base
   2:  
   3:   view_object :some_model, :refresh => :refresh_some_model, :refresh_interval => 2.minutes
   4:  
   5:   view_action :some_action, :target => :my_button, :action => :some_action_implementation
   6:  
   7:   def refresh_some_model
   8:     # code here
   9:   end
  10:  
  11:   def some_action_implementation
  12:     # code here
  13:   end
  14:  
  15: end

If you are interested in contributing or lurking, get on over to GitHub and watch the project!

I’ve seen the rumbling a few times now about property setting in Silverlight.  The rumblings are along the lines of “why do I have to use SetValue for setting simple properties like the x/y positioning?”  To those points, I agree from a fundamental standpoint.  From a technical standpoint SetValue is there and serves a great purpose for providing a common way of setting properties on XAML elements regardless of the element.  As a developer, I like it actually.  I do, however, see the point about wanting to set simple properties and it just looks a little verbose.  Take for instance setting the x/y positioning of an Ellipse (in code):

   1: Ellipse circle = new Ellipse();
   2: circle.Width = 10;
   3: circle.Height = 10;
   4: circle.SetValue(NameProperty, "MyCircle");
   5: circle.SetValue(Canvas.TopProperty, 200);
   6: circle.SetValue(Canvas.LeftProperty, 200);

You’ll see the last three lines seem a little verbose when setting simple properties.  Most of the time you’ll run into this using your own custom controls or while providing controls to others.  Here’s a tip to simplify this process…abstract these simple ones away if you know they will be used frequently.

Developers familiar with Flash/Flex will note that for something like the above example, there are .x and .y values.  We can do the same with Silverlight by ensuring our controls follow a pattern we anticipate our developers will use.  Let’s say we have a control called MyCircle which contains only an Ellipse.  We know that our consumers of our control will be animating our circle control using various calculations and moving x/y coordinates frequently.  In our control we can do this (assuming our XAML has an Ellipse in a Canvas element):

   1: public double X
   2: {
   3:     get { return this.GetValue(Canvas.LeftProperty) as double; }
   4:     set { this.SetValue(Canvas.LeftProperty, value); }
   5: }
   6:  
   7: public double Y
   8: {
   9:     get { return this.GetValue(Canvas.TopProperty) as double; }
  10:     set { this.SetValue(Canvas.TopProperty, value); }
  11: }

Now when developers need to move this control around they can simplify things by writing code like this:

   1: MyCircle circle = new MyCircle();
   2: circle.X = 200;
   3: circle.Y = 200;

By doing this we’ve abstracted out the SetValue/GetValue functions (while still there if needed) for some simple properties.  I like this tip a lot and generally is helpful when you need quick/simple access to properties like this.  I learned this tip from Rick Barraza who incidentally does work in Flash, Flex, WPF and Silverlight.  He uses this technique when doing a lot of manipulation of objects that involve math, etc. – in the end the result is the same, but this tip might save you some precious keystrokes.