| Comments

It’s that time of year my friends in Arizona.  No, I’m not talking about when the air conditioners start get turned on, nor how the golf green fee rates are reduced or the snowbirds fly away…although those are good things as well.

I’m talking geek fest time.  Mark your calendars:

26 May 2009 – 8:00 AM

The community leaders in the area have organized another big event for your benefit.  So who is coming?  Here’s the rundown:

Glenn Block – come see why you should get addicted to MEF.  Don’t know what it is?  That’s an even better reason to come.  If you haven’t learned about MEF, you’ll want to see what Glenn has to show and talk about…it’s quite cool.

Jaime Rodriguez – from the WPF side of the house, Jaime is coming to talk about WPF development and the continuum of reusing skills (and some code) from Silverlight and WPF development.  Want to know what is going on in the WPF world?  Come and ask Jaime. 

NOTE: Also don’t forget to register for the Phoenix WPF training event for free as well! Info here and Register here for the WPF LOB Tour.

And last but not least…

Scott Guthrie – he returns to brave the early heat of the desert!  Scott is ready to talk about Silverlight and ASP.NET MVC frameworks and what his teams are up to.  Bring your questions and take advantage of this opportunity to talk with the one responsible for building the web platform for Microsoft.

This truly sounds like a great event and one NOT TO MISS!  Tell your co-workers and friends.  This is a free event!  You can register for this event here.  Please come and spread the word to support this community event.  Your community leaders will thank you (and be able to do more things like this for the community).

Spread the word! REGISTER

| Comments

There seems to be a lot of buzz around Silverlight lately and I admit, I like it :-).  But I also think that there is a huge misconception about Silverlight “replacing” WPF.  I get emails a lot about people asking me questions about Silverlight and after a bit of prodding, I see that their target platform for their application is Windows.  I then begin my rant on why it should be WPF if that is the target platform.  I’m usually met with some weird looks being that I do a lot of Silverlight, but I state my case accordingly.

The conversation usually follows about not understanding WPF or trying to find more information about it.  Well, the WPF teams are trying to change that perception.  In fact, Jaime Rodriquez and Karl Shifflett have been organizing a WPF LOB Tour to provide 2 days of free WPF training for developers.  Jaime is the technical evangelist for WPF and Karl works on the WPF team.  They will be in these cities soon:

  • Los Angeles, CA
  • London, UK
  • New York, NY
  • Chicago, IL
  • Phoenix, AZ

Take a look at what they’ll be covering about WPF:

  • Day One:

    • Lap Around WPF
    • WPF Tools ( Blend, Visual Studio 2008)
    • Graphics Subsystem
    • Layout
    • WPF Fundamentals and new concepts
      • Application Model
      • Dependency Properties
      • Trees (logical & visual)
      • Events
      • Threading
      • Resources
    • Controls
    • Styling
    • Templating
    • Q&A with instructors at end of day
  • Day Two:
    • WPF integration with Win32 and Windows Forms
    • Data binding
    • Introduction to Model-View-ViewModel
    • Commanding in M-V-VM
    • Views, Navigation and Transitions
    • Data Validation
    • Error handling, Model dialogs, Logging
    • Unit Testing
    • MVVM & LOB tips and tricks
    • Q&A with the instructor
  • If this is coming to an area near you, I’d strongly encourage you to make the time to be there.  There is no cost to you other than getting yourself there (if it isn’t in your same city).  Their first event packed a full house on registration within 2 hours and the feedback from the training was overwhelmingly positive and exciting.  Karl is such a dynamic and fun guy to be around, it will be worth your price of admission to hang out with him and Jaime for 2 days.  I’d love for one city to rally together and all show up wearing Hawaiian shirts to make Karl feel at home :-).

You can find all the information about the events on Karl’s blog or Jaime’s blog.  Registration links and everything are listed there.  If you have a question about the event, please reach out to Karl or Jaime.  I know their most asked question is "why aren’t you coming to <fill-in-the-blank-location>?  Honestly after talking to Karl I’m convinced he wouldn’t sleep if he could go everywhere…and he wants to as well!  I think there are some plans to do some studio recordings and produce the information online, but there is no timeframe for that just yet…and I do believe that nothing really supplements being able to network with others learning and being in-person to ask questions, etc.  It’s a great opportunity to learn and demystify WPF development for yourself…really, make the time to be there.

Additionally, there have been some organized XAMLFest events happening around the country (US – but if there are others worldwide, leave a comment where they are happening).  These aren’t 2-day workshop trainings, but are events organized around our XAML technologies, specifically WPF and Silverlight. 

I think WPF and Silverlight are really great technologies and compliment each other well.  Try not to learn one without the other.  I know personally I’m trying to do more WPF learning myself as the natural progression of the Microsoft platform is the continuum of Silverlight to WPF as shared application platforms.  I hope you’ll do the same.

If you’ve attended one of these WPF events listed above, please leave a comment about your feedback as well. 

| Comments

I’ve been promising this for a while and I’ve ranted about creating good installation experiences for Silverlight applications before as well here and here.  Well, our team rallied and created some new guidance and sample code to provide for you to implement the best possible experience.  The guidance whitepaper can be found on the Silverlight Community Site in the whitepapers section and includes:

  • Documentation for defining a good user experience
  • Sample code for media applications
  • Sample code for non-media applications
  • Sample code for implementing various states: not installed, upgrade needed, browser restart detection

The sample code is easy to understand and was templated so that you could change things to your brand/application.  The media sample can be dropped into your Expression Encoder templates easily and does a lot of the magic for you without having to thing (i.e., getting sizes of media, snapshot of media for image, etc.).

Hopefully this will help you understand the process more and provide you with the information (and code) you need to complete the best possible experience in your site.  You’ve spent the time developing your application, make sure you spend the time delivering the best install experience for those who may not have Silverlight yet.

Download the whitepaper and code today.

Hope this helps!

| Comments

UPDATED: If you found this post via a search, the below information was for Silverlight 3 beta and no longer works in Silverlight 3 release.  Click here for an updated tutorial on grouping in the Silverlight DataGrid for Silverlight 3.

I got this question on how do you add grouping to the DataGrid in Silverlight without using the RIA Services ObjectDataSource.  Frankly I didn’t know off the top of my head either and I’ve since learned it isn’t obvious.  Allow me to explain the steps.

In my simple app I have a static class that supplies some hard-coded data:

   1: public List<Person> GetPeople()
   2: {
   3:     List<Person> peeps = new List<Person>();
   4:     peeps.Add(new Person() { FirstName = "Tim", LastName="Heuer", Gender="M", AgeGroup="Adult" });
   5:     peeps.Add(new Person() { FirstName = "Lisa", LastName="Heuer", Gender="F", AgeGroup="Adult" });
   6:     peeps.Add(new Person() { FirstName = "Zoe", LastName = "Heuer", Gender="F", AgeGroup="Kid" });
   7:     peeps.Add(new Person() { FirstName = "Zane", LastName = "Heuer", Gender="M", AgeGroup="Kid" });
   8:     return peeps;
   9: }

You can see there is a Gender field and I want to list them grouped on that in a DataGrid.  So I would first add a reference to the DataGrid control library and add that:

   1: <navigation:Page x:Class="SilverlightApplication32.AboutPage" 
   2:            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   3:            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   4:            xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
   5:            xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
   6:            Title="AboutPage Page">
   7:     <Grid x:Name="LayoutRoot" Background="White">
   8:         <StackPanel>
   9:             <TextBlock Text="Detail" Style="{StaticResource HeaderTextStyle}"/>
  10:             <TextBlock Text="Detail list of members with gender." Style="{StaticResource ContentTextStyle}"/>
  11:             <data:DataGrid ItemsSource="{Binding}"/>
  12:         </StackPanel>
  13:     </Grid>
  14: </navigation:Page>

Notice the xmlns attribute in the control (this is in a navigation page, but the syntax is the same).  Now how to add the grouping?  You’d hope it would be something as simple as GroupPathName on the DataGrid or something.  But remember that grouping can be done multilevel.  So to add grouping we have to do some things first.  First, add a reference to System.ComponentModel in your application.  Then add another xmlns to your control for the library, since that is where the PropertyGroupDescription is located.  The result is that we have:

   1: <navigation:Page x:Class="SilverlightApplication32.AboutPage" 
   2:            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   3:            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
   4:            xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
   5:            xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
   6:            xmlns:cm="clr-namespace:System.Windows.Data;assembly=System.ComponentModel"
   7:            Title="AboutPage Page">
   8:     <Grid x:Name="LayoutRoot" Background="White">
   9:         <StackPanel>
  10:             <TextBlock Text="Detail" Style="{StaticResource HeaderTextStyle}"/>
  11:             <TextBlock Text="Detail list of members with gender." Style="{StaticResource ContentTextStyle}"/>
  12:             <data:DataGrid ItemsSource="{Binding}">
  13:                 <data:DataGrid.GroupDescriptions>
  14:                     <cm:PropertyGroupDescription PropertyName="Gender" />
  15:                 </data:DataGrid.GroupDescriptions>
  16:             </data:DataGrid>
  17:         </StackPanel>
  18:     </Grid>
  19: </navigation:Page>

Notice the ComponentModel use within the DataGrid’s GroupDescriptions node.  This would render in a UI like:

DataGrid single grouping

Want to add multilevel grouping? Just add another PropertyGroupDescription:

   1: <data:DataGrid ItemsSource="{Binding}">
   2:     <data:DataGrid.GroupDescriptions>
   3:         <cm:PropertyGroupDescription PropertyName="Gender" />
   4:         <cm:PropertyGroupDescription PropertyName="AgeGroup" />
   5:     </data:DataGrid.GroupDescriptions>
   6: </data:DataGrid>

And it will render top-down:

DataGrid multilevel grouping

You can also do this in code of course like this (assuming the DataGrid is named “MyGrid”:

   1: MyGrid.GroupDescriptions.Add(new PropertyGroupDescription("Gender"));

I found this information on one of our tester’s site, Naga Satish.  Naga also has some other valuable DataGrid information:

I recommend you bookmark a few :-).

| Comments

All your base are belong to us.

The year was nineteen ninety something.  A strapping young chap entered the world of technology.  With overpromises from tech leads, undertrained programmers, and caffeine, there was nothing we couldn’t conquer. 

Or something like that.

I’ve pretty much been in technology all my “professional” life…save it being a small sting of leadership consulting right out of college that a totaled car at Duquesne solved that decision for me….but that’s another story.  I’ve grown up around programming, I’ve programmed like the worst of them and I am a better person for ‘thinking aloud’ and learning what others are doing to make me better.

Over the past 2 years I, like many of you, have entered in the world of what seems to be called “social media” or “new media.”  No, I’m not about to claim I’m one of them (warning may be NSFW with language).  But I will say I’m a user, dare I say a power user.  I didn’t get on the MySpace train because at the time I just didn’t get it and it didn’t look tailored for me.  I gave up my Geocities account long ago and didn’t feel the need to start a new one with MySpace :-).  I joke, as I know it is valuable for some social circles, just not mine…some pages make my eyes bleed.

Enter Facebook.  I list my LinkedIn account in my contact information, but I’ll be honest with you – I don’t use it.  I also stopped using Plaxo as a result of company IT restraints.  So apologies to all you Plaxo Pulse invitations…I’m not responding to them.  All of these networks seem to share the currency of “friends” in their taxonomy.  It got out of control fast on Facebook for me with tons (well relatively speaking of course) started sending friend requests.  Are these really my friends? I had to ask myself this.  But being the people-pleaser I think I am and not wanting to offend most I just started accepting them all.  Thus, my Facebook friends have gotten out of control.

Enter Twitter.  This gave us all an outlet to strip down to “status” updates.  I signed up immediately and thought it was lame.  What possible use could this be for me?  Of course I was wrong and it has been the single-most useful social tool I leverage.  I use it daily and treat it just like what I think it is – a conversation I can enter/leave/comment on at any time.  There is a friend (follower) concept, but it is easier to deal with because people can choose to follow me if I’m public (more on that later).  And I can choose who I want to follow and there doesn’t have to be a mutual connection of permission between the two.  I like that.

Enter my wife.  She’s a wonderful woman.  She’s super smart and super talented.  For years she’s made fun of my geekiness.  For a while I was McGeeky to her friends.  She would mock me in her speak (she still does sometimes).  But then something changed.  A genuine interest in certain things.  It started with her retiring from her job.  She still wanted to be connected, so got a laptop.  I introduced her to GMail.  Later she started asking what’s this blog stuff?  Soon enough she started a blog – more for journaling our family life and her perspective on it with parenting, etc.  Her blogging has exploded.  She has more posts than me combined over the 6 years I’ve been blogging.  It’s frightening and fun at the same time.  I love to see her spunky personality come through in her writing.  Then came Facebook.  Then came Twitter.

Fast forward to a few weeks ago.  We were on date night and started talking about all this stuff.  It was a surreal moment that my wife would actually want to talk about tech stuff.  You see, she has become a power Twitter user among her friends.  Her Blackberry probably sparked a lot of this with text messaging with her friends and now she also uses Twitter via her mobile!  She signed up, they signed up and she’s really using it a lot.  For now for just fun stuff, but I see her use grow more…as does her followers.  She even took a web seminar about how to use Twitter effectively.  In this conversation she asked me what’s the point for Facebook if I have Twitter?  Good question.  It was good timing as well because on that day Seesmic released their Facebook desktop application which did one thing – essentially boil Facebook down to a status stream.  As we talked about this I realized that my use of Facebook was tiny.  Beyond looking at a friend you hadn’t seen in a while and then checking out their pictures, my use boiled down to the status stream.  It was an interesting conversation we had that night.  And weird.

Since then my wife has been opening my eyes to some things.  I kept seeing these tweets of I’ve listed myself in localtweeps.com under zip code XXXX.  So me being part of the nerd sheep, I added myself.  Then I got a lesson in privacy from my wife.  She convinced me in less than a minute that wasn’t a good idea.  Again, we had a good conversation about it.  She even pointed out that people who block their Twitter stream but post it to Facebook via the linking, aren’t really blocking anything.  I actually didn’t even make the obvious connection.

Now within the past week she’s asked me about tools and I believe she started using Twhirl.  Her latest tweet had a TwitPic URL in it. 

WHAT HAVE I CREATED!?

Seriously it is fun and bazaar at the same time.  I love to see my wife blogging, twittering, and bringing technology into her life.  Some of it concerns me, but I can’t judge…my thoughts are pretty much an open book on the web.  So why am I writing all this and wasting precious whitespace on the interwebs?  Who knows…but just thoughts I had as my worlds have converged a bit.  It reminds me of a Seinfeld episode where Jerry and Elaine contemplate inviting George’s girlfriend on an outing.  Kramer points out:

Jerry, don't you see? This world here, this is George's sanctuary. If Susan comes into contact with this world, his worlds collide. You know what happens then? (Kramer raises his hands into the air and slowly brings them together in an explosion.) – from “The Pool Guy” episode

It’s like Relationship George and Independent George.  Except for me it is Husband Tim and Geek Tim.  Worlds colliding my friend, worlds colliding.