Scott Hanselman

Wrong File Types View in Vista Explorer Folders

July 25, '07 Comments [18] Posted in
Sponsored By

I hope this is considered a bug (or at least an issue) and will be addressed in Vista SP1. I'm growing increasingly frustrated with Vista when Explorer decides that one of my many thousands of folders contains pictures and videos and surely I must want to rate them and tag them and see what date they were taken on. Don't get me wrong, the Folder Templates are lovely. I just don't like the assumptions that are being made.

unna

imageThis folder above is my Apple Newton Software Archive, from unna. Note the Explorer Columns like "Date Taken" and "Rating."

Right click in the whitespace of Explorer and click "Customize This Folder..." You can also click Organize|Properties from the menu if you like.

From the Properties Dialog that appears, click the first Dropdown that likely says "Pictures and Videos" and select "All Items." You may want to click "Also apply this template to all subfolders.

unna Properties

Personally, I visited c:\users on my Vista machine and applied the All Items view to every folder from there down.

This is probably my number one beef with Explorer right now.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Uncle Ronald

July 25, '07 Comments [11] Posted in Musings
Sponsored By

55' MG TF-1500-Priest RiverI've posted in the past about my Grandpa before, thereby blatantly breaking Rule 2 of my own 32 Rules to Keep Your Blog from Sucking. (What a hypocrite I am! Plan on seeing me break that rule often.)

Today I break Rule 2 again to wish my Uncle Ronnie a Happy 87th Birthday this week.

I never had a grandfather in my life. My paternal grandfather, whose face some say I share, died when my father was 11 and I never knew my maternal grandfather.

Uncle Ronnie is my grandmother's first cousin. He's a Lawson and my grandmother's mother was a Lawson. Ronald's dad and my grandmother's mother were sister and brother. The details are still confusing to me, but they don't matter, as he's still Uncle Ronnie. He's the only and closest thing to a Grandfather than I've ever known.

Ron & Margaret @ TimberlineMy grandmother is now 91 and lives across the street from Uncle Ronald and his wife Margaret, delights during our visits in telling me that she used to baby-sit Ronald.

The car picture is Ronald in a new 1955 MG TF-1500, and the skiing one is Ronald and his wife of 63 years (not a typo), skiing at Timberline Lodge here in Oregon.

Ronald is the keeper of the family stories and of the family genealogy. Uncle Ronnie is a fine writer and wrote an eloquent write-up of the wake of my cousin Hawthorne Hunt when she passed too early in September of 2002. He's a big letter writer and when I brought him a laptop years ago and set him up with Juno, he single-handedly re-connected the family with dozens of our relatives in Scotland and maintains a huge list of everyone's emails.

I think it's time I set him up with a blog, because he is the family raconteur. He knows every story and tells them better than any of us.

CIMG2620

He's creative and fearless. We set up a scanner together and I suggested he start scanning his pictures and certificates for posterity. Once I sent him an email with a picture attachment. He didn't know (at the time) how to Right Click|Save As, so he printed it out on his Inkjet and scanned the photo back in - and I was thrilled with this ingenuity. He surfs the web and emails daily and generally keeps the family all connected and sane, perhaps more than he realizes. I've never seen him angry or cross and he tells a number of excellent Scottish jokes.

Happy Birthday Uncle Ronnie!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Vonage Visual Voicemail

July 24, '07 Comments [10] Posted in Reviews
Sponsored By

vonageWe use the Vonage VOIP service here at the Hanselman House, and I recently turned on Vonage Visual Voicemail. Ordinarily when I get a voice mail message from Vonage, it attaches a WAV file to the email. I can't listen to the WAV on my Blackberry (for whatever reason. I probably could on a Windows Mobile phone) and sometimes I just don't want to listen to it. So, they send you the text of the message.

In their marketing pitch they offer this example:

Tired of listening to the same voicemail message over and over to make sure you wrote down the directions to the soccer game correctly? Just print out the message and you're on your way!

Hm. And why didn't I just map it out online and print the map? Why would I print out a transcription that is a very likely percentage wrong? Seems like a bad marketing example to me. Here's a better one they had:

Can't remember what time to pick up your daughter? With Vonage Visual Voicemail, just use your email search capability to find the information you need!

Now, in this example I find it a little hard to believe I'd forget something important like when to pick up a child, but ignoring that, I like the idea of searchable Voicemail.

Here's some actual voice mail examples that I've received recently:

Date: Jul 23 2007 07:04:32 PM From: Outside Caller To  : Scott Hanselman
Hello! This is a friendly reminder from Blockbuster. Our record shows that  as of Sunday, July 22nd, our Blockbuster customer has some items that have not been returned by the due date listed on your receipt.   Please note that if you choose to keep these items beyond store closing time on  July 26, your account will be charged the selling price for the items.  If you have any questions, please call your local Blockbuster store at 503-629-0500. Please disregard this notice if you have already returned these items.
--- Brought to you by Vonage ---

Rock on, they totally nailed this one. Probably because it was another computer talking very clearly and slowly on the other end. Hm. Let's try one from an actual human being:

Hi! Hi Studge.  It's a bad day.  I'm sure you guys have put (??) down.  I'm so sleepy.  I'm so tired.  I (??) to (dance?).  I (??) (??).  And, oh yeah, I'm tired.  I ain't tired on the other hand.  I'm trying to get up, open one eye and study my homework.  See you tomorrow?  Yup, dangerous time, dangerous times to do homework, but, i got you message yesterday I could hardly open one eye.   Monday I still can hardly open an eye. So, hmm. I have (class?) tomorrow. I should be home by 7 so I will try and call you then.  Okay, (so save as a small candle?) with my semi lighting .  I have to let it go.   Quite a (??).  Okay, I will talk to you tomorrow.  I need a couple of (??) to do. My bed always come (??) a little out of it. Oh, but I'm fine.

Wow. Let me just assure you that this wasn't even close. Like, there's not even a thread of cohesion here. Notice the lowercase "i" as well.

One of the first questions I had when I started using this was, "have they hired a legion of people to transcribe this, or are they using Voice Recognition." Looks like Vonage has outsourced the project to SimulScribe that appears to be a technology - not Mechanical Turk - based solution.

Here's another:

We're sorry.  We were unable to transcribe this message.  You will not be charged for this message.
Please listen to your voicemail.

Bummer. It's interesting to see what it gets right and what it gets wrong. Yesterday it send me a transcribed Voicemail saying that our friend had just come back from 4 weeks in Maui. We were like, Maui? What's she doing in Maui? Well, she's from Mali. Once we listened to the actual voicemail it made more sense.

Another oddity is that I can't log into Vonage and read my transcribed Voicemail either. They don't appear in the interface.

Even with all this weirdness, it's still pretty sweet when it works. It's about 1/3 right now. Definitely for the early adopter...maybe someday it'll be 99%. I'm looking forward to seeing what the Exchange/Communicator stuff inside of Microsoft does in this space.

Technorati Tags: , ,

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

John Lam presenting at PADNUG on Thursday

July 23, '07 Comments [1] Posted in Programming | Ruby | Silverlight | Speaking
Sponsored By

Just to make sure you're getting the full court press on IronRuby, if you're NOT at OSCON (the O'Reilly Open Source Conference), but you are in the Portland/Southwest Washington area you'll be interested in this little tidbit.

John is presenting on IronRuby at OSCON on Thursday at 5:20pm, but just afterwards he'll come by Corillian and speak to us at PADNUG, the Portland Area .NET Users Group (details on Rich's Blog).

"John Lam, creator of RubyCLR, will discuss IronRuby, an implementation of Ruby on the .NET platform that will be released under the MS-PL licence (BSD-style license). We will look at the implementation of IronRuby on top of the recently announced Dynamic Language Runtime to better understand how the DLR deferred compilation model can be used to obtain excellent performance and cross-language interoperability. We will also look at different scenarios where IronRuby can be used, including the recently announced Silverlight platform."

The presentation will start at 6:45pm with Pizza and Socializing at 6:00pm. Click the image for Driving Directions. The meeting will be in the small middle building (the café). Hope to see you all there.

Technorati Tags: , ,

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

WPF Sample in IronRuby talking via C# to Wesabe

July 23, '07 Comments [12] Posted in eFinance | Programming | Ruby | Web Services | XML | XmlSerializer
Sponsored By

wesabeironrubymoney John Lam and team have released their first drop the IronRubySource code. It's super-pre-alpha so don't hate, but it's looking pretty sweet, if you're a burgeoning Ruby-head like myself. There's incomplete support for some of the cooler Ruby syntax things, but I have full confidence that it's only going to get better. All the underpinnings are there.

John also announce that the team will host IronRuby source on Rubyforge (which is quite the coup, actually) and that they'll be taking external contributions very soon (this being the open part of open source.) 

Not every sample (initially) will look and feel and smell good like Ruby, and this one is no exception. You might remember that last week I did a quicky Wesabe client in C# and put it up on Google Code. We've got four folks up there improving the code, which is cool.

Today, Shady the intern and I decided to do a sample in IronRuby that would call the C# Wesabe client API and display some account data via WPF. This is part of my new plan to take over Money and Quicken's business and you can tell from the hours of intense UI design that Shady and I did, that my plan is inevitable.

We started from ScottGu's HelloWorld sample, and slogged creatively coded our way forward. Here's how it went.

imageFirst, get the IronRuby source and upzip. Open on Visual Studio 2005 command prompt and compile the DLR and IronRuby by running build.cmd.

All the interesting stuff will show up in bin/release, including the IronRuby equivalent of IRB, the interactive Ruby Interpreter.  You can run this from the command line and try things out interactively if you like.

We used Notepad2 with Ruby Support for our editor, although I'm deeply digging "e" the TextMate for Windows and will likely move over to it for my text editor of choice when I start at Microsoft in September.

Next, we tried to add a require statement to bring in the Wesabe library. You run a IronRuby app (today, in this build) by running rbx.exe YourApp.rb. We put our .rb text file in one folder and had rbx.exe in another, so when we added our wesabelib.dll we had to add it to the same folder that rbx.exe was in, otherwise the Assembly load would fail. You can also put things in the GAC and get to them there. Just remember that Fusion will load from the same folder rbx.exe is in, not the folder that your program is in.

For debugging, we used the classic "got here" debugging of old, via the standard MessageBox, so we added a requre for Windows Forms also and a constant as a alias for the MessageBox class:

require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
require 'wesabelib, Version=1.0.0.0'
MessageBox = System::Windows::Forms::MessageBox

As this build is a pre-Alpha, likely created in the dark of the night just hours ago, there's all sorts of weirdness and stuff that didn't "just work."

The naming integration with .NET is persnickety at best. The C# Wesabe client had a lowercase class called "wesaberest" that IronRuby just couldn't see, so I changed it to uppercase and aliased it with a constant.

#this build of IronRuby doesn't like Class Names that are lowercase,
# so I made mine Uppercase
Wesabe = Wesaberest

As I said, The Wesabe client API that we created is written in C#, and returns a array of Account objects. In the click event of a button, we pass in the username and password from our TextBox and PasswordBox respectively and store our Account object.

Our goal is to spin through the list of Account objects in the Array, but there's a few gotchas, again because of the pre-alphaness. First, we can't use for because in Ruby for is a sugar syntax on top of "each" that assumes an each method exists. Each isn't implemented yet, but the plan is to have for syntax just work over IEnumerable things.

Second, we can't index into arrays because the [] operator isn't implemented yet, but we can call GetValue(), which is the same thing.

#in the future we'll be able to index into CLR arrays...
#oneAccount = myAccounts[i]
oneAccount = myAccounts.GetValue(i)

Thirdly, in IronRuby there's FixNum, which is a DLR extension of Integer and there's MutableStrings, that have private StringBuilder. A lot of this will be hidden in the future, but in this build I had to be aware of some of the impedance mismatches as I tried to coerce my numbers into strings for output.

For example, none of these worked, but I expect they will one day.

Lastly, currentBalance is a float (System.Single) and IronRuby wouldn't respect it's ToString method, so I changed the value to a System.Double and all was fine.

Here's some failed attempts at String Concatenation. Notice the "secret" call to to_clr_string. Those should all go away and the Ruby types should marshal cleanly in most cases. Note that I'm assuming a lot, and in some cases basing these assumptions on my chats with John, but also as educated guesses as to how it ought to work.

#Ruby string concatenation works fine...
my_message.content = "scott" + " hanselman"

#Attempt0
my_message.content = oneAccount.name + oneAccount.currentBalance.to_string("C").to_clr_string

#Attempt1
my_message.content = oneAccount.name + "$" + oneAccount.currentBalance.to_s.to_clr_string

#Attempt2
my_message.content = System::String.Concat("$" + oneAccount.currentBalance.to_s.to_clr_string)

#Attempt3
#There's a name conflict when trying to use the StringBuilder:
# System.MemberAccessException: uninitialized constant ScriptModule::Text
s = System::Text::StringBuilder.new
s.Append(oneAccount.name)
s.Append("$")
s.Append(oneAccount.currentBalance.to_s.to_clr_string)
my_message.content = s.to_string

At this point, I just added a new property called "DisplayString" in the Wesabe Account class and moved on. As for the loop we used a while. It's not clean, but it's clean enough:

my_button.click do |sender, args|
   a = Wesabe.getAccounts(text_user.text,text_password.password)
   myAccounts = a.Items
   i = 0
   accounts_listbox.items.clear
   while (i < a.Items.Length)
      oneAccount = myAccounts.GetValue(i) #GetValue is on System.Array

      i+=1 #needed for the while
      
      # Create new label
      my_message = Label.new
      my_message.font_size = 36
      my_message.content = oneAccount.DisplayString

      #Add the Label to the ListBox
      accounts_listbox.items.add(my_message)
   end
end 

There's a couple of ways to make this even more clean, and those ways will come. I'll update this sample as the new features roll into IronRuby.

I think it'd be nice to add some charts and graphs, make the whole thing a ClickOnce app, etc. Probably, for now, it'll be easier in C#, but it was fun to hack it together in today's drop of IronRuby and the interns learned something.

You can get my source for this Ruby App, along with a custom build of the Wesabe client (with my changes) here. Remember to get the IronRuby source, compile it, then copy the Wesabe client to the bin\release folder (or move the .rb files into there along with the Wesabe dll). I've left all the comments in the source for fun.

Technorati Tags: , , , ,

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.