Windows Live Writer, Microsoft's Free Offline Blog Editor, is updated to Beta 2. It was getting pretty quiet there and I was thinking it had disappeared but they're back with a pile of good changes. Some of the changes are "it's about time" like inline spell checking and Paste Special support.

They support RSD (Really Simple Discovery, and have since the last build) so if you're running a Daily Build of DasBlog then you've already got this support. Just tell Windows Live Writer about your blog by entering your main URL and WLW handles the rest by interrogating the blog for its capabilities. This will also allow those of you who want to upload images directly via the metaWebLog newMediaObject method (Translation: You can upload images over HTTP directly from WLW) rather than using FTP.

More interestingly is their new Windows Live Writer Provider Customization API, which allows you to not only override the RSD if you like, but also includes a way to more complexly describe your blog's abilities. It also lets us have some control over the Weblog Pane within the editor, including adding buttons and what not.

I just banged together this integration with Alexander Gross' help...you can visit your blog, edit online, or see your statistics without leaving Windows Live Writer. There's lots of potentially cool customizations using their polling notification system. You could be notified of new comments on you blog while you're writing a post within WLW.

wlwbuttons

One more subtle thing we were able to get working was a "post and continue editing online...

image

This will do just that, it'll send your current post up to DasBlog, then launch your browser and you can continue editing.

With all these features, make sure you've launched Internet Explorer and logged into DasBlog with the "Remember Me" checkbox checked, otherwise you'll get "you aren't authorized to access this page."

It's easy to hack these things together. Just create an XML file named wlwmanifest.xml and put it in the root of your blog. Here's mine:

<?xml version="1.0" encoding="utf-8" ?> 
<manifest xmlns="http://schemas.microsoft.com/wlw/manifest/weblog">
  <options>
      <supportsEmbeds>Yes</supportsEmbeds>
  </options>
  <weblog>
      <imageUrl>images/dasbloglogo-16x16.png</imageUrl>
      <watermarkImageUrl>images/dasblogwatermark-84x84.png</watermarkImageUrl>
      <homepageLinkText>View your blog</homepageLinkText>
      <adminLinkText>Edit your blog</adminLinkText> 
      <adminUrl><![CDATA[
          {blog-homepage-url}Login.aspx
      ]]></adminUrl>
      <postEditingUrl><![CDATA[
          {blog-homepage-url}EditEntry.aspx?guid={post-id}
      ]]></postEditingUrl>
  </weblog>
  <buttons>
      <button>
      <id>1</id>
      <text>Statistics</text>
      <imageUrl>images/dasblogactivity-24x24.png</imageUrl>
      <clickUrl><![CDATA[
         {blog-homepage-url}Referrers.aspx
      ]]></clickUrl>
      <contentUrl><![CDATA[
         {blog-homepage-url}Referrers.aspx
      ]]></contentUrl>
      <contentDisplaySize>480,300</contentDisplaySize>
    </button>   
  </buttons>
</manifest>

I'm really interested to see what other cool DasBlog integration ideas (and better-formatted custom mini-pages for inline dropdowns...in the example above, I'm just showing the standard activity page) folks come up with.

What ideas do you have?

  • Last 10 comments, linked directly to the comment.
  • Chart of recent activity? Comments, traffic, etc. Perhaps from FeedBurner?
  • Link to the DasBlog Configuration Page

Here's a zip with my poor-man's integration:

Technorati Tags: , ,


What a cool conference I wish I was going to...

"TED started out as an annual conference in Monterey devoted to Technology, Entertainment and Design."

...everything about their site, their style, their recordings, their conference is fantastic. Even their Session Schedule is a work of art and an experiment in User Experience Design. Their TEDGlobal 2007 conference is in Arusha, Tanzania, next week. We spent this last Christmas there...I wish we could be there again for this event.

If you're any kind of nerd I hope you've checked out Photosynth before...if not, check it out now, or watch the Video of Blaise Aguera y Arcas presenting Photosynth along with Seadragon at Ted this last March. There's going to be some really interesting possibilities as innovations like this converge with new form factors like Microsoft Surface.



Stunning move by Google today in the Rich Internet Application space. While most of us (myself included) are off debating Flash vs. Silverlight vs. Apollo vs. Whatever, Google introduces Google Gears...at technology all of the above (or none of the above) can utilize...

This is a huge move and is quite brilliant. In one seemingly innocuous move (and one tiny 700k (yes, 700K) download) Google is well positioned to get Google Docs, including Writely, Spreadsheet and Presentation, along with who knows what else, enabled for offline use. And the whole thing is Open Sourced via the New BSD License.

Here's a snippet of Javascript that is used to detect if Google Gears in installed. Note the three (currently) different ways, one each for Firefox, IE and Safari.

 var factory = null;

  // Firefox
  if (typeof GearsFactory != 'undefined') {
    factory = new GearsFactory();
  } else {
    // IE
    try {
      factory = new ActiveXObject('Gears.Factory');
    } catch (e) {
      // Safari
      if (navigator.mimeTypes["application/x-googlegears"]) {
        factory = document.createElement("object");
        factory.style.display = "none";
        factory.width = 0;
        factory.height = 0;
        factory.type = "application/x-googlegears";
        document.documentElement.appendChild(factory);
      }
    }
  }

To the right is a dialog box that pops up to let you know that Google Gears is going to store data locally. Gears uses SQLite to store information, and you use SQL from your JavaScript to CRUD (Create, Read, Update, Delete) your data. I wonder how would would store data securely?

If you like, you can explore the databases that are created using SQLite Database Browser. This starts to explain why SQLite was a 2005 Google Open Source Award Winner. ;)

The local storage shows up when running Internet Explorer on Windows under:

C:\Users\Scott\AppData\LocalLow\
Google\Google Gears for Internet Explorer\
www.yourdomain.com\http_80

Within Firefox, the local storage databases go in:

...\Application Data\Mozilla\Firefox\Profiles\
<profile>\Google Gears for Firefox

So it seems I can't go to a Gears-enabled site in IE and later in Firefox and share data. Each browser gets it's own data storage. That means num of browsers * num of gears enabled uris = num of SQLite databases. For folks who run more than one browser, this makes the whole local storage thing a tricky issue, but I can understand why they'd segment databases by browser. I disagree, but I see their point of view.

Gears also includes a thread pool "tiny process pool" like construct that lets you perform CPU-intensive things without triggering the "Stop unresponsive script" dialog box, but you can't touch the DOM. Again, very cool and very intelligent tradeoffs.

Things are looking up, methinks. It'd be nice if Gears-like (Gearsesque?) functionality could get built into next-gen browsers the way that XmlHttpRequest did. Seems like only yesterday I was deep in the middle of the Great Cookie Scare of 1995, explaining to client what Cookies were...NO, they can't write out a megabyte sized cookie, no cookies aren't programs...glad that's over. If we've going to build some rich stuff, let's stop with the Flash Shared Objects and IsolatedStorage already and get the browser to solve this problem. Kudos for Google and let's pray there's no offline ads...

Technorati Tags: , , , , ,


A while back I posted about interesting maps (actually in 2005!) and listed out all the interesting map sites. At the time, Amazon's maps.a9.com was the most innovative because they had street level imagery. They've since shut down, but today Google Maps took it to the next level with Google StreetView.

Not sure why you'd want to watch a blurry video rather than just going there, but you can see a demo on YouTube if you like.

The embedded Flash has a nice draggable cylinder view like QuickTime VR, letting you see any angle stitched together.

The user interface is pure brilliance. Pick up the little yellow man and drag him, and his little feet float in the wind as you drag him round, until he's firmly planted on virtual ground again. A green arrow indicates which direction he's facing. Even arrow keyboard hotkeys work as they should!

Here's the real question - is this useful?



I received and accepted an invitation to go to O'Reilly's "Foo Camp" 07, being held in Sebastopol, CA, north of San Fransisco. Here's the schpeal:

We've invited about 250 Friends Of O'Reilly (aka Foo), people who're doing interesting works in fields such as web services, data visualization and search, open source programming, computer security, hardware hacking, GPS, alternative energy, and all manner of emerging technologies to share their works-in-progress, show off the latest tech toys and hardware hacks, and tackle challenging problems together. We'll have some planned activities, but much of the agenda will be determined by you. We'll provide space, electricity, a wireless network, and a wiki. You bring your ideas, enthusiasms, and projects. We all get to know each other better, and hopefully come up with some cool ideas about how to change the world.

There's about 250 folks going, and the list of "foo campers" is pretty cool. I'm going to have trouble keeping track of everyone, as the all seem so darned interesting.

One important thing about Foo Camp it seems, is that every attendee should be prepared to demo something that they are working on. This is, of course, where paralysis sets in. Here's their list of suggested sessions so far.

I like the sound of these:

  • Islam 2.0 - Understanding the intersection between spirituality and computing...creating 'life services' for Muslims (Imran Ali).
  • Using Improvisation to spur creativity and generate ideas (Kent Nichols, Douglas Sarine)

I'm hoping to record a number of Podcasts for folks to enjoy, and perhaps just conversations with cool people.

Help me, what sessions should I come to chat about? Here's some ideas I have so far...yours are appreciated as I'm only as clever as the sum of all of you. ;)

  • Carrying Water from the River to the Internet Cafe - Is Africa skipping a step on the technology road? How can The Continent avoid Brain Drain and support a new middle class of knowledge workers when there's no infrastructure to support them?
  • Using The Social Web to Improve Diabetes Care - What can the medical industry learn from Web 2.0 to provide better care for those with life-long chronic illnesses likes Diabetes?
  • How Important is NOT-English on The Web? - Will the Internet end up like the movie Serenity with just English and Mandarin? Or perhaps English, Spanish, French, Mandarin, Hindi and Arabic? Is there value in supporting a Web with pages in Amharic? Sioux? Zulu?
  • I left my Brain in my Other Pants or Where do you store yourself? or Techniques and Synchronization of your iLife or Mashing up your Life - Between email, contacts, calendars, freebusy information, documents, medical info, bills, accounts, my life is an exercise in synchronization...without an authoritative source. Who will be my cloud and can I trust them?

That's all I've got off the top of my head...What ideas do you have for me, Dear Reader? If you've gone to this event before, what tips can you offer me?



When copying giant (greater than 4 gig) files and Virtual Machines and Video and what-not to your fresh new External Hard Drive you might be greeted with this message, or one like it:

Doh! This hard drive came formatted as FAT32, which doesn't support files larger than 4 gigs. You can either Format the drive, by right clicking the Drive in My Computer and using the Tools tab, or, if you already have a bunch of files on it...

Run an Administrator Console (click the Start Menu, type cmd, then right click on the command prompt and click "Run As Administrator") then run:

C:\Users\Scott>convert h: /fs:ntfs /nosecurity
The type of the file system is FAT32.
Enter current volume label for drive H: My Book
The volume is in use by another process. Chkdsk
might report errors when no corruption is present.
Volume My Book created 1/31/2003 2:23 PM
Volume Serial Number is XXXX-XXXX
Windows is verifying files and folders...
File and folder verification is complete.
Windows has checked the file system and found no problems.
244,136,352 KB total disk space.
128 KB in 4 hidden files.
544 KB in 17 folders.
3,063,072 KB in 63 files.
241,072,576 KB are available.

32,768 bytes in each allocation unit.
7,629,261 total allocation units on disk.
7,533,518 allocation units available on disk.

Determining disk space required for file system conversion...
Total disk space: 244196001 KB
Free space on volume: 241072576 KB
Space required for conversion: 369647 KB
Converting file system
Conversion complete

...and continue your copy, with the crisis averted. Bummer there's no "Convert File System" button in the Tools Property Tab of a Disk Drive.



In the last post on Virtual Machine Performance Tips I said, here are some realistic goals for your Guest OS (VM) performance, that I originally got from J. Sawyer at Microsoft:

  • Ideally Virtual PC performance is at:
    • CPU: 96-97% of host
    • Network: 70-90% of host
    • Disk: 40-70% of host

In the comments Vincent Evans said:

From personal experience with VM (running in MS Virtual Server) - i have grave doubts about your claim of VM CPU performance approaching anywhere near 90% of native.

Can you put more substance behind that claim and post a CPU benchmark of your native server vs. vm running on that server? For example i used a popular prime number benchmark (can't remember the name, wprime maybe? not sure.) and my numbers were more like 70% of native.

I agreed, so I took a minute during lunch and ran a few tests. For the test I used the Freely Available IE6 WindowsXP+SP2 Test Virtual Machine Image along with the Free Virtual PC 2007 and Virtual Server 2005 R2 as well.

These are neither scientific, nor are they rigorous. They are exactly what they claim to me. They are me running some tests during lunch, so take them as such. I encourage those of you who care more deeply than I to run your own tests and let me know why these results either suck, or are awesome.

I used wprime to calculate the square roots of the first 4,194,303 numbers. Wprime can spin up multiple threads, and this was significant because my system has two processors, so you'll see what kind of a difference this made in the tests.

Both Virtual PC and Virtual Server only let the Guest OS use one of the processors, so I did the tests on the Host OS with one, then two processors, to make sure the difference is clear.

My Hardware (as seen by wprime from the Host OS)

>refhw
CPU Found: CPU0
Name: Intel(R) Core(TM)2 CPU T7600 @ 2.33GHz
Speed: 2326 MHz
L2 Cache: 4096 KB
CPU Found: CPU1
Name: Intel(R) Core(TM)2 CPU T7600 @ 2.33GHz
Speed: 2326 MHz
L2 Cache: 4096 KB

Results

Looks like for both tests a VM's CPU, when stressed, runs at just about 90% of the speed of the Host OS, which is lower than the Goal of 96-97% I printed earlier. Tomorrow I'll update this post by rebooting and going into the BIOS and turning off my system's Hardware Assisted Virtualization and seeing if that makes a difference. If the results are lower (I assume they are) then that'll just confirm that VT Technology is useful - I assume that's a fair assumption.

You can try these tests yourself on your own machines using wprime. Just make sure you tell wprime how many threads to use in your Host OS, depending on your number of processors. Thanks to Vincent for encouraging the further examination!



I continue to meet folks who complain that their Virtual Machine performance is slow. Yes, it would be great if VMs somehow were able to self-tune the relationship between themselves and the host OS, but that's sadly not the case.

When you're running an OS within and OS and maintaining a FileSystem within a FileSystem, not to mention sharing a hard drive spindle, there's lots of opportunities for things to go very slowly.

If you're experiencing poor VM performance, I would encourage you to go through a Performance Checklist.

Also, before you start, remember what you goals are. You'll not get your VMs running at 100% of native speed, at least not this year, so just stop aiming for that as a goal.

Here's some more realistic goals:

  • Ideally Virtual PC performance is at:
    • CPU: 96-97% of host
    • Network: 70-90% of host
    • Disk: 40-70% of host

Try to make all of these changes if you can. If you can't do one or more of these recommendations, then you can't complain. ;)

Virtual PC Performance Checklist

  • Make sure your Host Operating System's disk is defragmented.
    • This includes the System Disk (the disk your OS boots off of) as well as the Disk that holds your Virtual Hard Disk File.
      • For a quick fix, use a single-file defragmenter like Contig from SysInternals. With the Virtual Machine shut down, run Contig -a to analyze single file fragmentation and run without -a to defragment the file.
  • Run Fewer Applications.
    • I'm continually amazed when folks complain about VM performance and when I get to their desk I see that they are running Outlook. That 200+megs could be better used by the system. Are you running a VM or checking your email? Consider checking your email on a schedule, or using Outlook Web Access while you work on your VM.
    • If you have 2 GIG or more of memory, consider running your Host Operating System without a Paging File. This doesn't mean you get to keep 50 applications, plus Outlook running all at once, but it does take the pressure off your Host OS's disk, and you might find things run considerably snappier.
  • Run the Virtual Machine on a separate spindle.
    • There's no better tip, as anyone who has run VMs (I've been using VMWare since it was in Beta) will tell you. The #1 bottleneck is disk.
      • Try to use a 7200RPM or 10000RPM drive for your VM disk
      • Use USB2 or SATA or Fireware.
        • If you're using USB2, make sure the Eternal Hard Drive is on it's own USB root hub, all alone. Don't share it with your keyboard, mouse, or webcam.
  • Optimize your VM for your current task.
    • Personally, I use and highly recommend Invirtus Virtual Machine Optimizer for this. It's inexpensive if you value your time. Considering getting a site license and actually do the math at how much time it'll save your company when you're trying to convince your boss. I run it over lunch on a VM and move on. You can also do a lot of the work manually if you have the time using tools like XPLite and CrapCleaner (although less so with CrapCleaner if the box is already fresh).
      • Remove any application that's not needed.
      • Shut down every service you can possibly get away with.
  • Enable Hardware Assisted Virtualization
    • If you've got this on your computer, turn it on. There IS some concern about really sophisticated Trojans that can use this technology for evil, but for me, it's all good as it speeds most Guest Operating Systems (especially non-Microsoft ones) up quite a bit.
  • Give your Virtual Machines LESS MEMORY
    • I've found that 512 megs is just about the Ideal Amount of memory for 90% of your Virtual Machines. Don't bother trying to give them 1024 megs, it's just not worth the pressure it'll put on the Host Operating System.
  • Considering making a custom Windows install for your VMs.
    • Rather than going to all the effort to REMOVE things, why not create a Windows installation that can be shared across your organization that doesn't include the crap ahead of time. There's a Windows Installation Customizer called nLite that lets you prepare Windows installations so they never include the stuff you don't want. Makes it easier if Solitaire is never installed, eh?
  • Make sure the Guest Operating System is defragmented.
    • Jeff likes this free Disk Defragmenter that runs in that "Text Mode" place before Windows really starts up. This allows it to get at files that don't always get defragmented.
  • Squish your VM Hard Drive.
    • Again, I use Invirtus so it does this for me, but you can also zero out the free space on your VM hard drive with the Virtual PC Pre-Compactor that comes with Virtual PC when hosting Windows, and there are Linux options for shrinking VM hard drives as well.
  • Don't use NTFS Compression on the Virtual Machine Hard Drive File in the Host Operating System
  • Don't Remote Desktop or VNC into Host Operating Systems that are hosting Virtual Machines.
    • If you're remoting into a machine where THAT machine is running a VM, note that to the Remote Desktop protocol (and VNC) the VM just looks like a big square bitmap that is constantly changing. That guarantees you slow performance. If you can, instead, Remote Desktop into the Virtual Machine itself.
  • Make sure you've install the Virtual Machine Additions (or Tools, or Utilities, or Whatever)
    • Virtual PC and VMWare and Parallels all include drivers and tools that improve the performance of your Virtual Machine. They are there for good reason, make sure you've installed them.
      • Also, if you're running a Virtual Machine created under and older version, like Virtual PC 2004, and you're now running under a newer one, like 2007, pay attention to the upgrade warnings and install the latest drivers and Virtual Machine Additions.
  • Optimize Painting and the "Perception of Responsiveness"
    • If you're running a VM, you don't need to have eye candy like menu fades, smooth scrolling or shadows.
      • Turn off wallpaper
      • Turn off Window Dragging and Shadows under Menus (under Effects in the Display Control Panel). Consider removing all effects like fading as well as ClearType.
      • Consider running the Classic Theme if you're running an XP VM, or consider "net stop themes" altogether.
      • Turn off the Mouse Pointer Shadow in the Mouse Control Panel.
      • Turn off Mouse
      • Use TweakXP or change the Registry to remove the Menu Delay for the Start Menu and other Menus via the MenuShowDelay setting in HKEY_CURRENT_USER\Control Panel\Desktop.

Did I miss any tips?



UPDATE: Looks like this bug has been fixed in Vista Service Pack 1 (SP1). I've upgraded and I've not seen this issue again.

I give Microsoft a lot of credit for the work all their bloggers do to increase the transparency of their business. Specifically the developers and folks in the developer division (devdiv) do a great job of letting us know what's up, especially when things are wrong.

However, when I have a problem, and I Google and Google...

(and sometimes find myself - that's always disheartening when you Google for a problem, find yourself, then at that moment realize that not only have you had this problem before, but you're still screwed.)

and find a huge number of folks "suffering" on blogs, on Usenet, in Forums with some similar problem, and nary a Microsoft blogger or MVP in sight.

Try Googling for any subset of these words "MSMPENG.EXE, TrustedInstaller.exe and SLSVC.EXE at 100% CPU on Vista Machines" and you'll discover a mass of pained and screaming Vista users, yearning for a HotFix.

When I see things like this, I think "If I worked for Microsoft, fixing this problem could be a HUGE opportunity." This isn't a small problem, if Google has anything to say about it, but rather something is really sick somewhere.

I've had a pretty decent Vista experience, recognizing that I'm an Early Adopter. Early Betas hurt me, and an RC1 or two destroyed a machine or two, but after release (RTM) including installation and day to day use, my experience has been nice. My wife, my mom, and myself all run Vista. I also got OneCare for the whole family, having had nice experiences as a Beta Tester.

Now, in the last month, on EVERY Vista Machine I have, from a slow AMD K5 my wife runs, to a Toshiba m200 Tablet, an IBM T60, and a home-built monster, has suffered with these issues. All of them, every machine and every issue:

  • MSMPENG.EXE - Some say this is Windows Defender, others say it's the OneCare AntiVirus. SysInternals ProcMon says it's constantly going over totally innocuous files over and over again. Note that I've turned off both OneCare and Defender on these machines. (Not sure why there's two apps?) This process just won't stop sucking the life from my machines. Things are SO slow, especially when the process hits a 4 gig ISO or 12 gig VM Disk Image.
  • TrustedInstaller.exe - This application has such a suspicious name I immediately started Googling around thinking I was infected with some evil Trojan. I mean, "TrustedInstaller.exe"? Seriously, like I'm going to see this in Taskman and say to myself, "oh, as long as it's TRUSTED." This process starts up seemingly randomly, even when I'm not installing things. It runs for 10 minutes or so, then disappears. I fear it. I fear iTunes on Vista more, but this one is pretty bad also.
  • SLSVC.EXE - The Software Licensing Service. I guess it licenses software, or hands out licenses, but there's no telling when it'll pop up, churn for an hour, then leave.
  • SearchIndexer.exe and friends - These guys just won't stop. There's usually 3 or 4 of them going all at once, but I still have to wait for a count of one-one-thousand, two-one-thousand, three-one-thousand, four-one-thousand before Search Results come back.

I don't like having to run my Operating System with Taskman constantly open because I no longer trust background processes. I'd like someone at Microsoft who works on one of these apps, help me understand what crazy edge case I've hit on every machine I own and how I can make it stop. I mean this not as a troll, and if you read my blog, you know I never blog bile, but I'm really interested in figuring out what's up.

What process is currently sucking up YOUR CPU? (Mac and Linux folks are welcome to join in, as I run TOP in a Terminal constantly on my Macs also.)



My sixty-fifth podcast is up, recorded on the floor RailsConf2007 here in Portland, Oregon. In this episode I sit down with Martin Fowler of Thoughtworks and David Heinemeier Hansson of 37signals and talk about beauty, making developers happy, the death (or life) of HTML, the future of Microsoft, and I ask if we should care about Rich Internet Applications. DHH is the creator of the Ruby on Rails framework, and Martin Fowler is the Chief Scientist at ThoughtWorks, well-known systems architect and Extreme Programming expert.

This episode is chock full of goodness and good guests, so it's double the ordinary length, clocking in at over 40 minutes, so forgive me, as all three of us tried not to waste the listener's time.

If you have trouble downloading, or your download is slow, do try the torrent with µtorrent or another BitTorrent Downloader.

Links from the Show

Martin Fowler's Bliki (p5p)
RailsConf 2007 • May 17, 2007 - May 20, 2007 • Portland, Oregon (p5r)
Ruby on Rails (p5t)
Loud Thinking by David Heinemeier Hansson (p5q)
Jesse James Garrett's Information architecture resources (p5s)
Tree Surgeon for .NET (p5u)

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is our sponsor for this show.

Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

Enjoy. Who knows what'll happen in the next show?



If you are headed to TechEd 2007 in Orlando, make sure you make the time to go to Party with Palermo. Jeff throws an unmatched geek party and you don't want to miss it.

It's free, and I can attest, it's great. You'll meet lots of cool folks, many bloggers, wonks and other geeks. I went to the last one in Seattle and had a blast.

Sadly this year, a very large combination of events, both business and personal, meant that I have had to bow out of TechEd, so I won't be there to join you. It's only the second time ever I've canceled a speaking gig, and I'm bummed, but it was the right thing to do at this point.

But for you who are going, go over to the Party with Palermo Website and RSVP by leaving a comment right now!

It's June 3rd, 2007 @ 7PM - 11PM at Glo Lounge:  http://www.gloloungeorlando.com/
8967 International Dr, Orlando, FL
(407) 351-0361

Enjoy. My giant head may appear via Skype Video Conferencing at some point during the evening. ;)

Jeff's also been kind enough to add Team Hanselman and our Diabetes Walk 2007 as honorary community sponsors of the event, so drink lots of beer and click for a Tax-Deductible Donation.



I was at Fresh Thyme Soup earlier this week (fantastic place, seriously, go there, it's all made from scratch) and there was a guy surfing with their free wireless whose desktop looked basically like this (this is mine, for illustration.) He was actually running Ubuntu and running what looked like AbiWord, but that's not the point.

Why is a guy who's _______ (insert adjective here...perhaps "savvy?") enough to run Ubuntu reading a document with the window sized like this?

Seems like I'm forever doing this series of keystrokes in Word: Alt-V, then Z, then T, then Enter, to return Word to the Text Width Zoom level. Then I use Alt-V, then U, for Full Screen mode, especially when I'm forced to present a Word document via projector.

Is this the fundamental issue with a Windowing interface that lets you size things willy-nilly.

I've been using a MacBook Pro for two weeks now and I'm still, even now, never sure what I'm going to get when I press the little Green dot that I think of as "Maximize." Sometimes a window gets really tall, other times really wide. With the Finder, it's a roll of the dice.

Same thing with Windows, and Ubuntu. I'm FOREVER forced to rearrange things. There's got to be a middle place between Full-Screen/Maximized and Minimized that "knows" what I need. The fact that the "middle place" is currently "size it however you like" is starting to wear on me.

I'm not sure if the infinite possibilities of window resizing is more sad than the fact that anyone who has a 15" or larger screen wouldn't take the time to maximize their window for readability.

If you've got an LCD, for goodness sake:

  • If you've got bad eyes, make the icons large and the fonts large. Really. Don't run your monitor at 1024x768 if it supports 1900x1600. You're doing yourself and your a disservice. Turn on ClearType.

If I had a nickel for every time I went into an Executives office and had this conversation, I'd like like 65 cents. At least.

    • "Hm, you're running your laptop at non-native resolution..."
    • "I am?"
    • "Yes..." click, click, right-click, enter, boom.
    • "Oh, wow, that is clearer. But the icons are small now"
    • "Ok. One sec" click, click, Large Icons, boom.
    • "Ah, that's nice. That text is kind of jagged."
    • "Ok. One sec" click, click, ClearType, boom.
    • "Wow, that's like getting new glasses."
    • "Yes. Yes, it is."

Make your pixels work for you, Dear Reader.



USA Today just published their 25 years of 'eureka' moments...their list of the 25 gadgets that changed people's lives. To be clear, these are gadgets, so we're not touting the creation of the MRI here, or the LifeStraw.

There was an article in PCWorld a while back called "The 50 Greatest Gadgets of the Past 50 Years," after reading that article I realized that I might be an early adopter.

For me there's three four devices that have changed my day to day life experience. I could live without cell phones and blackberries, as addictive as they are, but these devices all did one thing and did it well. They ultimately gave me time - the one thing we're all running out of. They say Real Estate is a good investment because "they're not making any more land" (Unless you live in Dubai, where they are actually making more land) but anything that gives me more time, or makes the time I have more useful and enjoyable is a good thing.

In no particular order:

GPS - Handheld Global Positioning Systems

I love my Garmin Nuvi 350 GPS. Love it. We use it all the time and have mounts in both cars and switch it between them. Even though I've lived in this city for 34 years, I don't know every nook and cranny - certainly not in the suburbs. Now, I never get lost. The Nuvi included one free Map Update so I was able to get 2006 v8 Maps for free via a download and automatic update. It has a slot for Add-On Maps (like Europe, or the US if you're in Europe) via SD Card. It speaks the street names, it's a photo viewer, MP3 player and Audible book reader. It even knows when I'm walking, notices, and suggests better routes on foot. All this and it's the size of a deck of cards. My wife loves it as well. All these devices have a high WAF. Even better that good GPS's are in almost all decent cell phones, including the Blackberry Pearl.

MP3 Players (iPod)

Seriously, hasn't your MP3 Player changed your life? While audiophiles with vacuum tubes (and Carl Franklin) are lamenting the death of the Hi-Fi and berating us for buying lossy-compresses "damaged" music I'm enjoying America's Next Top Model on a Video iPod at 30,000 feet. Try that with your RCA Victor. My entire CD collection - every CD I've ever owned - is inside my 80gig iPod, lovingly ripped by RipDigital.com (What? You rip CDs yourself? ;) That's so 2005.). An MP3 player is worth the cost of entry just for the Audiobooks.

Digital Video Recorders (DVR, ReplayTV, Tivo)

When is House on TV? I seriously don't know. It's on whenever I like at my house because I've got the "House Channel." Same with Grey's Anatomy, The Office and Heroes (Heroes Spoiler: Why didn't Peter just fly away himself? It would have saved Nathan the trouble).

Aside: Did you know you can watch FULL Hi-Res episodes of Heroes online for free, as well as download them in even Higher-Res with the Viiv Universal Player? Even MORE amazing, they've got Full Video Cast Commentary in a secondary window for each episode. Brilliant.

I watch them on my time. Sometimes I skip commercials, sometimes not. Sometimes I turn on the captions and watch them in double- or quadruple-speed. We've got the whole season of Signing Time (DVD's just remastered and rereleased and Rachel has a blog also) so my son can do American Sign Language anytime. We always watch the news, even though dinner is at a different time each day. DVRs fundamentally change how we watch TV (if you can get over the "Psychic Weight" of a full DVR and a whole season of Dexter to catch up on.)

Insulin Pump and Continuous Glucose Meter

I got the results of my blood tests yesterday. Diabetics should have their blood checked for a 3-month indicator of their blood sugar. Pricking your finger tells you your blood sugar at an instant, but the hA1C blood test gives you an idea of how the last three-months have been. You can kind of think of it (simplistically) as a measurement of a percentage of blood cells that are coated in sugar. My value was 5.8% which is at non-diabetic levels. You, Dear Reader, as a likely non-diabetic have an hA1C between 4 and 6. My value is now "high-normal" but still normal. To be clear, I'm VERY diabetic, but I'm managing it so closely that my blood test indicates I'm more or less successfully emulating my damaged pancreas with the insulin pump and continuous meter. I'd be lost without these devices. They've made my life better and allowed me to more easily travel the world.

What's your top four list look like?



A user named yesthatmcgurk left a comment on DotNetKicks where he/she said:

I must be a complete loser, because I can't see where Ruby is such hot shit. I'd love to read a story, "What you're not getting about Ruby and why its the tits."

Such a great comment that I had to get involved. One of the other commenters pointed to a post over on "Softies on Rails" that's really worth reading.

Note: Forgive the use of "the tits" in this context. "Slang Definition: A description of something you show great liking to, or greatly appreciate..." Usually not a work-friendly phrase, but perhaps pub-appropriate.

There's a simple snippet of Ruby code:

def shutter_clicked
if @camera.off? || @camera.memory_card_full?
    return
end
  capture_image
end

Ruby folks have their own aesthetic and sense of beauty. They would say that the Programmer's Intent is better expressed like this:

def shutter_clicked
  capture_image if @camera.on? && @camera.memory_available?
end

These two functions identically express the Programmer's Intent and the second one expresses it better, many believe. This one simple example is subtle to some, beautiful to others. TunnelRat says:

What is this obssesion[sic] with "expressiveness"? Go write poertry [sic] if you want to be expressvive.[sic] 

Remember that ultimately our jobs are (usually) to solve some kind of business problem. We're aiming for a finish line, a goal. The programmer's job is translate the language of the business person to the language of the computer.

The whole point of compilers, interpreters, layers of abstraction and what-not are to shorten the semantic distance between our intent and the way the computer thinks of things.

Reginald "raganwald" Braithewaite links to the blog Agile Renaissance that absolutely nails it for me (emphasis mine):

If you survey the over 5000 different languages and dialects that humans speak, you find that there is no universal set of equivalent semantics between them. This fact implies that there can never be a computer language which will always have the shortest semantic distance between itself and any solution. Therefore there never will be a universally best programming language.

I'm just learning Ruby, personally. Like anyone making their way in a new language, be it a programming language or a spoken language, I can make myself understood, but not effectively. I'm certainly not writing poetry, nor am I able to "mince words" in Ruby.

You'll find lots of "smackdowns" on the .NET between different languages. This post isn't a smackdown post. Sure, if your language of choice doesn't have a particular function, it could likely be added.

There are some fun one-liner comparisons though and some folks think that paying a:

Java:

new Date(new Date().getTime() - 20 * 60 * 1000)

Ruby:

20.minutes.ago

In this example, the elegance is a combination of how Ruby works, and a Rails library called ActiveSupport that is a Domain Specific Language that extends Ruby. There's a special satisfaction when you read a well-written novel and you go over a turn of phrase and think, "wow, what a great way to express that. That was a perfect way to describe ____," and there's no ambiguity.

While programming, unless you have 100% code coverage via Tests, there's ambiguity. There's a lack of clarity in expressing what you intended vs. what you might get.

Cyclomatic complexity is just one of many software metrics that can help you understand what your code "says" it's going to do. Remember, your code always runs exactly as you wrote it.

Cyclomatic complexity may be considered a broad measure of soundness and confidence for a program. Introduced by Thomas McCabe in 1976, it measures the number of linearly-independent paths through a program module.[Carnegie Mellon SEI]

The most important word there, to me, is confidence. Can you be confident that your code is written to be express what you intended? If you have full coverage, there's a better chance you understand what it can and will do (although achieving full coverage guarantees nothing, but that's another post). If not, it often helps to have a language that makes expressing your intent very clear, concise, and above all, unambiguous. Unambiguous expression of intent gives you (and your customer) confidence that things will happen as expected. There are some things easier expressed in Zulu than in English. Folks who run Ubuntu should know that.

When programming (that is, expressing your intent to the computer) you should select a language that matches up with the program you're trying to solve. Every language is, in a way, a Domain Specific Language.

Regardless of what your language of choice is, you might be someone who says all languages eventually become, or try to become Lisp, or you might think Visual Basic is the best or that PHP is God's Language, you should learn a new language every year. I code, and have coded, for many years in C#, and before that C++, but it's important for me in my personal development to remember why I learned Haskell and Lisp (I suck at Lisp) and Smalltalk, and why I return to them occasionally for a visit.

This year, I'm learning Ruby. Does that mean my team is moving to Ruby?  Probably not, but it does mean I'm learning Ruby this year because I believe in sharpening the saw. You might be too busy sawing to sharpen, but I'd encourage you - no matter what brand or type of saw you use - to remember that there are other folks out there cutting wood successfully with a different kind of saw. Maybe they know something that you don't.

Either way, it's clear that the jury is still out on all these technologies. Hedge your bets and learn as much as you can. There's more than one way to express yourself. Give it a try.



Last week in order to increase awareness of Diabetes and raise money for the ADA I twittered my diabetes. I twittered (tweet'ed) every blood sugar test, every time I stuck an needle in me, refilled my pump, had a low, had a high, went for a walk. Every time Diabetes stuck its nose in my life, I twittered it.

Here's the transcript. Thanks to everyone who donated! The transcript is ordered NEWEST twitters first, so read it from the bottom up if you want the full experience. Finally, a use for Twitter. ;)

Big thanks to the folks at Twitter for featuring me on the their home page last week in support of the idea.

Please do note this is experiment was designed to generate empathy and turn that emphathy into action. No one's looking for pity and this wasn't intended to inspire fear, only to spread understanding.

For more information on why one ought to manage their diabetes closely and an analogy that explains how insulin and blood sugar relate to either, do check out "Diabetes Explanation: The Airplane Analogy" and the Diabetes section of this blog.

---

The day (++) of Twittering for Diabetes is over. Thanks everyone. http://hanselman.com/fightdiabetes 05:27 PM May 19, 2007

Blood sugar is 110mg/dl but heading low fast. I'm off to burgerville. *http://hanselman.com/fightdiabetes/donate* 03:22 PM May 19, 2007

Blood sugar is 150mg/dl...crept up some before lunch. 12:53 PM May 19, 2007

Sugar is 122. Nice stable night. Don't get to many of those. *Twittering my diabetes* to raise money for the ADA - http://hanselman.com 09:04 AM May 19, 2007 from web

Blood sugar is 110mg/dl...looking like I'll be in for a stable night. Thank goodness. 01:23 AM May 19, 2007

Looking stable at 140mg/dl. Never a good idea to go to sleep with blood sugar that's "moving"...makes nighttime dangerous 11:27 PM May 18, 2007 

Blood sugar starting to inch up...now at 140mg/dl. I'd like an apple, so I need to do some calculations. 10:42 PM May 18, 2007

*Twittering my diabetes* to raise money for the ADA - http://hanselman.com 09:00 PM May 18, 2007

Salad was a good choice. Don't want to have a low while putting the baby down. 08:50 PM May 18, 2007

Blood sugar heading up, turns out tortilla strips have more carbs than I thought. 07:34 PM May 18, 2007

Going to have a chicken salad...should not be much insulin, but it's HUGE 07:15 PM May 18, 2007

Italian food tonight, but going to try lower carbs...I'd rather not "disturb" good blood sugar. 07:00 PM May 18, 2007

Getting ready to drive home....gotta check sugar before I drive. Looks like a lovely 105mg/dl. Don't want to have a low while driving. 06:49 PM May 18, 2007

Had to have a 15g granola bar to "level off" blood sugar. In a good position to start dinner with good numbers. 06:43 PM May 18, 2007

Blood sugar are 96mg/dl...kind of "sliding" into a low blood sugar...no action now, but soon. 06:09 PM May 18, 2007

Levelling off nicely. 108mg/dl, fitting nicely in the 80-120mg/dl goal that you, dear reader, the non-diabetic has. 05:53 PM May 18, 2007

Blood sugar is 122mg/dl...looking much better, but still "coming down hot." Don't want to have another low. 05:30 PM May 18, 2007 from web

Blood sugar is 177mg/dl...the delta/slope is great....40 points drop in 20min...I need to soft land this plane.... 04:59 PM May 18, 2007

*Twittering my diabetes* to raise money for the ADA - http://hanselman.com 04:44 PM May 18, 2007

Blood sugar starting to fall...224mg/dl now. Aiming for 100mg/dl, remember. Not sure why lunch was a failure. 04:43 PM May 18, 2007

I think my blood sugar has topped out (apexed) at 232mg/dl....I hope I'm heading back down... 04:24 PM May 18, 2007

Crap...totally messed up lunch...sugar is 228mg/dl and climbing... 04:14 PM May 18, 2007

Alarm just went of...blood sugar is 177 and heading higher. 03:39 PM May 18, 2007

There's free granola bars at a booth here at the conference. I'm grabbing 4 in case I have a low later. 03:34 PM May 18, 2007

There's lots of candy here...snickers, piles of the junk. Everyone's eating. Not I. 03:29 PM May 18, 2007

Blood Sugar 138mg/dl. Nasty low, now I'm afraid I'm going to "overshoot" my low and now I'm going high. 03:26 PM May 18, 2007

Found a cookie in the exhibit hall...gotta wait 10 min to see... 02:14 PM May 18, 2007

Insulin has a "half life" in the system...I've underestimated the power of the walk...I've got 2.5U still "pending"... 02:10 PM May 18, 2007

Alarm just went off...I can feel it, having a low. Shouldn't be...meter says 65...pump says 70... 02:09 PM May 18, 2007

Starting to get really nauseous...the secondary drug, Symlin, causes an hour of seasickness after injection... 01:41 PM May 18, 2007

Just walked 0.5 miles, back from the Restaurant. Can feel the sugar rising... 01:21 PM May 18, 2007

Blood sugar is 155mg/dl. Took 5U of Symlin, that slows digestion. Set pump to deliver 5U with 2.5U now and the rest on going. 01:07 PM May 18, 2007

Most insulin starts working in 2 hours, but most food starts raising your sugar in 10 mins. 12:34 PM May 18, 2007

Blood sugar 120mg/dl...good start to have Ethiopian food. Going to take insulin now in anticipation of a large meal. 12:18 PM May 18, 2007

At Queen of Sheba, trying to count carbs. 12:09 PM May 18, 2007

Walking to Queen of Sheba Ethiopian....walking takes the edge of blood sugar... 11:54 AM May 18, 2007

It's always a good idea for a diabetic to enter a meal with stable blood sugar... 11:31 AM May 18, 2007

I'm well positioned for lunch, blood sugar seems stable at 120mg/dl. Good for a diabetic. 11:02 AM May 18, 2007 

Blood sugar is 110mg/dl...trend is downward... 10:43 AM May 18, 2007 

My insulin pump is currently set to deliver 0.6U of insulin per hour. I take 30U a day total, including this "background insulin." 10:20 AM May 18, 2007

Doing more walking today than anticipated...I may need to take less insulin. 10:19 AM May 18, 2007

My continuous meter just alarmed, says I have to calibrate it with a blood test within 2 hours. Have to keep them in sync. 10:02 AM May 18, 2007

Blood sugar is 140mg/dl. Coming down, good. Safe to drive. Under 80 would not be safe. 09:56 AM May 18, 2007

Driving somewhere, gotta check blood sugar first....diabetics can lose their licenses if they have a "low" 09:55 AM May 18, 2007

I'd like to get my blood sugar back to a more normal level before eating lunch... 09:43 AM May 18, 2007

Sometimes when you have high blood sugar, your mouth tastes sweet, like you're marinating in your own juices. 09:36 AM May 18, 2007

Refilling my insulin pump reservoir. I don't "trust" this bottle of insulin. Insulin only lasts 28 days unrefridgerated and sometimes "dies. ... 09:32 AM May 18, 2007

Sugar is 160mg/dl. The goal is always 80-120. 160 is too high given I haven't eatten yet. 09:30 AM May 18, 2007

Sugar is 172bg/dl. That's high for a fasting number. Has the correction I took not hit yet, or do I need more insulin? 08:56 AM May 18, 2007 

Out of the shower, reconnecting the insulin pump tube to me. The tube is 43" long. The pump has 4 days worth of insulin. 07:20 AM May 18, 2007

*Twittering my diabetes* all day to raise money for diabetes research. Info at http://hanselman.com 07:14 AM May 18, 2007

Getting in the shower. I can disconnect the tube that connects my insulin pump, but then there's no insulin...can only d.c. for 30min. 07:09 AM May 18, 2007

Blood sugar went up around 5am, now 166bg/dl. Taking 1.25U to 'correct.' This is called the "pre-dawn effect," and is hormonal. 07:05 AM May 18, 2007 

Sugar is 104. Got to remember to refill my pump, and change batteries. http://hanselman.com/fightdiabetes 03:13 AM May 18, 2007

Took a 1/2 unit too much insulin...alarm just went off, having a fig newton. 02:02 AM May 18, 2007

Blood sugar seems ok after the apple an hour ok, I'll go to bed now. I'll wake at 4 to check. 01:20 AM May 18, 2007

When eatting large meals, I use the pump *and* take an additional shot of a drug to slow digestion, and slow the sugar rise. 12:58 AM May 18, 2007

Some diabetics take shots, I'm connected 24hrs a day to a pump. I keep it under the pillow. 12:56 AM May 18, 2007

Running out of insulin in my onboard pump....I need 30U (units) for 24 hours. Got 14U on board...change the whole thing now or in the mornin ... 12:06 AM May 18, 2007

Going to eat an apple. Blood sugar is 102mg/dl. Gotta take 2U of insulin, but I'm also eating cheese, so I'll do 3. 12:05 AM May 18, 2007

blood sugar is low...74mg/dl. Starting to feel it. I took too much insulin for dinner. Damn low carb soup. 10:39 PM May 17, 2007 from web

A non-diabetic's blood sugar is between 80mg/dl and 120mg/dl (milligrams/deciliter of blood). 10:23 PM May 17, 2007

Tomorrow I'm going to "twitter my diabetes" - all day, to help raise awareness. hanselman.com/fightdiabetes 07:10 PM May 17, 2007



DHH, Fowler, HanselmanIt was fun this week to meet Martin Fowler and David Heinemeier Hansson at RailsConf. It's always cool at a conference to meet someone who's done great work, chat with them, and try to figure out how you too, can do great work. If only others appreciated it also...

Wife: How was the conference?

Geek (Me): It was excellent. I got to meet and chat with Martin Fowler and David Heinemeier Hansson, and they were both very cool.

Wife: Ermm...that's nice...

Geek: Ya, David created a Web Application Development Framework called Rails using a rather obscure Japanese gentleman's language called Ruby, and came up with a number of new and synthesized ideas in a way that no one had yet. It's sweeping the 'net and folks are digging it. Martin is one of the pioneers of Object Orientation and agile methodologies, as well as an Extreme Programming Guy.

Wife: I've never heard of these guys, but I'm glad you're glad!

David Heinemeier Hansson, Martin Fowler, and Scott HanselmanGeek: Well, meeting Martin is kind of like meeting Michael Caine, he's a very respected guy, talented actor, he's been around for a long time, done a lot of great work, and you're never disappointed with any thing you see him in. Meeting David is kind of like meeting Tobey Maguire, because Spiderman kicked butt and everyone enjoyed it, but it's unclear if he'll get a lot of work and do great stuff after Spiderman. But, still, he's Spiderman, so he'll always have that.

Wife: Ah, well, that is cool!

Geek: Darn right.

Wife: Some Geek People out there seem to know who you are also...what actor are you in this analogy?

Geek: I'm Bruce Campbell, of course.

Wife: Who?

Geek: Exactly.



I'm here at RailsConf in Portland (where I live, so that was nice, eh). As with all conferences, in my experience, the real "conferencing" happens outside the sessions. I stopped by the ThoughtWorks booth and started chatting with a number of folks.

I've been increasingly concerned with the "Web Developer Stack" that we're (the collective We) using. I started a conversation in the ThoughtWorks booth (because they had free granola bars) where I expressed this concern, and it turned into quite a large and very spirited conversation between the ThoughWorks crowd, DHH, Martin Fowler, myself, and a pretty decent-sized crowd egging it on. It was multi-faceted chat and covered a lot of area. I haven't had so much fun at a conference in a while.

The next day, Chris Sells (unintentionally) got a crowd going that also included the ThoughtWorkers, and we talked about what Alpha Geeks want. I asked if there was a coming diaspora of the Alpha Geek towards developer tools and developer experiences that feed their passions, perhaps more than tools and experiences from Microsoft and Sun. At this conference, the general feeling was that a migration of Alpha Geeks had already started. Just as Alpha Geeks forced to develop using Waterfall migrated to more agile shops, these folks feel the same kind of migration is happening around Web Development.

I propose that newer (somtimes younger) programmers may have less "tolerance" for development pain or frustration present in existing stacks just as a frog doesn't like being thrown into a hot pot. Perhaps we older frogs are starting to notice some heat and are considering other, cooler pots to spend time in.

The one thing I learned about Rails and Rails/Ruby folks at this conferences is that they are enthusiastic and passionate. Not just because many are young (I suspect the mean age to be about 26 at this conference) but because they feel that Ruby and Rails expresses their intent in a clean and aesthetically pleasing way that avoids repetition. The code is DRY (Don't Repeat Yourself.)

In the blogosphere, David Laribee proposed a term I've heard bandied about in the last few years - ALT.NET, to describe developers like this:

What does it mean to be ALT.NET? In short it signifies:

  1. You’re the type of developer who uses what works while keeping an eye out for a better way.
  2. You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc.
  3. You’re not content with the status quo. Things can always be better expressed, more elegant and simple, more mutable, higher quality, etc.
  4. You know tools are great, but they only take you so far. It’s the principals and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principals [sic] (e.g. Resharper.)
Why does this have to be ALT.NET? Why is this alternative? Seems that this should be mainstream and baked in by the tools and "dogma" that comes down from on high. Microsoft needs to make ALT.NET attitudes Mainstream.NET attitudes, through leadership, openness, and a lot more prescriptive guidance.

Rails appears to be very prescriptive. It says, by its very nature, "do it this way," but still allows developers to do creative things and extend the framework in ways not previously thought of by DHH.

It's important to remember, I think, that Rails is a Web Application Development Framework that enables one to make Web Applications that talk to Databases really fast. It's not the end-all-be-all development stack, and it's better to compare Rails to ASP.NET than it is to compare Rails to .NET proper.

That said, there's a sense of striving for true beauty, beauty in tests, beauty in expression of code, in markup, that .NET developers should drink in.

I'm an Alpha Geek, and you likely are too. I'd love to have the Ruby on Rails developer experience, the gems, the libraries, as well as the ability to bring in .NET libraries, and run the whole thing on IIS and SQL2k5. I'm not the only one who thinks this way. Sun knows it, and JRuby will (is) bringing "pure" Ruby to the Java-based datacenter.

The collective group in the discussion at RailsConf seemed to agree that Microsoft should make not just the DLR source available, but actually create a non-profit organization, ala Mozilla, and transfer the developers over to that company. They should allow commits to the code from the outside, which should help get around some of the vagaries of the GPL/LGPL licensed Ruby Test Suites. "IronRuby" should be collectively owned by the community.

Why? Because as the Wu Tang Clan said, "Protect Ya Neck." This isn't about Microsoft making money on developer tools, but rather about the platform, where the money is made. An open CLR-based implementation of Ruby on Rails would be a great way to introduce Rails into the Windows-based Enterprise, and would encourage more Alpha Geeks to code on Windows.


I've googled my brains out about this and I can't find anything. For some reason, on my Vista Desktop Video only plays for a few frames, then stops. Sometimes it stops completely, other times it just stutters severely. This happens in both Flash and Windows Media video.

At this point, I'm debating a new Video card. Does ANYONE else have this problem? I've tried contacting ATI and it's virtually impossible to get a straight answer from them.



UPDATE: This event is now over and the complete transcript of the Diabetic Day's Twittering's are now available.

Twitter is a new thing on the 'net lately. You can send text messages of up to 140 characters into the cloud, and folks who are your "friends" or "followers" (read: digital stalkers) can receive those updates. You can send your updates to twitter via their Web Interface, via their Mobile Browser interface at http://m.twitter.com, but the really compelling way is via their 5-digit SMS code "40404." Here's a Twitter SMS Cheatsheet. For example, to "subscribe" to me, you'd SMS/text "follow shanselman" to code 40404. To stop, you'd SMS/text "leave shanselman."

Personally I find it a little silly to need to be THAT connected to folks, but I've found twitter to be useful in temporary situations, like conferences when you WANT to let folks know what's going on and what you're doing. It was very useful at Mix to meet up with folks I wanted to talk to, so from a just-in-time networking point of view, it was brilliant. I didn't update after Mix, though, until RailsConf2007.

I've been trying to raise money for Diabetes Research as I'm a Type I diabetic. Driving home today, I had an even better idea on how I could use Twitter.

Tomorrow, Thursday, May 18th, I'm going to "twitter" my Diabetes for one day. By this, I mean, every time I take a manual shot, update my pump, prick my finger, have a high blood sugar, have a low blood sugar, eat, calibrate my continuous meter, or do ANYTHING related to diabetes, I'll send an update to Twitter.

My hope is that this will give folks who don't think about diabetes a little insight into how often I, and 20 million others, either do, or should, be thinking about their diabetes. I'd also like you to imagine if a small child had this disease, and how a parent of a small child deals with it.

Please spread the word by , and I encourage you and yours to subscribe to my Twitter account just for 1 day. If you don't want to make an account, just visit http://www.twitter.com/shanselman throughout Tomorrow and watch the updates. I hope it'll give you some insight into diabetes, and maybe open some eyes.



I really have to give my boss credit for being a forward-thinker and an out-of-the-box type. These are clichéd terms, sure, but they fit. The day after the merger and where am I going to be tomorrow? I'll be at RailsConf2007, of course.

We are not religious zealots here at Corillian CheckFree, so we're always looking at other ways to do things. Even as a .NET/Java shop, we'll have four people at the conference, all with open minds, ready to learn. There's lots of folks at Corillian who dabble in Rails, and CheckFree has a Rails Study Group.

Here's where I'll be during the conference, courtesy of myconfplan. Fortunately for me, John Lam has loaned me a 17" MacBookPro with daily bits of his DLRConsole demo, including Ruby support in Silverlight (and .NET) with the DLR. It's all running in Safari, and it's yummy. This is one of the Mac's used at Mix in the Keynote.

Aside: I'm going back and forth about getting the Ultimate Atwood Developer Machine (I got the wife's OK), and getting a fully loaded MacBook Pro. The hardware is sexy as hell, unlike any Windows laptop I've ever seen (and I have a Lenovo t60p, to be clear) and apparently it's a heck of a Vista machine. Dare I even think like this? Having John's machine to borrow has already got be hooked on two-finger scrolling...

If you want to hook up at the conference and get a demo of Ruby on the DLR, you can email me or setup a request through the RailsConf 2007 Conference Meetup website. Tim Sneath will also be around to chat and demo.

The (totally speculative) prospect of the cleanness of the Rails developer experience married with an order of magnitude (or three) speed up, with the .NET GC, Rails (potentially) under IIS7 and SQL2k5 is just dizzying.

Even if you don't believe anything I say and you're a hardcore Rubyist who has no interest in Ruby on .NET, I'm interested in talking about Silverlight-specific gems that could make Silverlight fit into the Ruby lifestyle, with Ruby as code-behind.

Tagged:



This just went out.  Today CheckFree completed acquiring Corillian. It started in February, and the acquisition phase is complete. Now the real work starts.

In the press release, this sentence struck me:

The combined organization will have the potential to provide a market-leading, fully integrated, secure and scalable online banking, electronic billing and payment platform. Together, CheckFree and Corillian’s platforms serve 21 of the top 25 financial institutions, more than 40 million online banking consumers, more than 31 million electronic billing and payment consumers, and more than 250,000 small businesses.

It's going to be interesting as our little 300 person company becomes part of a 3000+ person company, but the potential for good that we can do is so much greater as one entity. We'll be learning about the new organization and how we fit into it in the coming months. I visited the campus in Atlanta, Georgia and got to hang out with a number of the key players working on the integration and I can attest to the coolness of their corporate culture. We'll see what tomorrow will bring. Wish me luck.



Hopefully if you've been coding .NET for a while, someone has shown you Reflector, Lutz Roeder's .NET Object Browser and you have basked in its glory.

Surprisingly (to me at least) not everyone knows about Reflector's plugin model. There is a vibrant and active community of plugin writers out there, and you won't realize the full power of Reflector until you download some of these are start messing around. Seriously, if you thought that Reflector was useful today, just wait until you've tried some of these add-ins.

PowerShell Language Add-In

The one I've been messing with for the last few weeks is the PowerShell Language Add-in. Reflector can "decompile" (not the correct word) the IL within an assembly and show you the "intent" of that IL in any number of languages like C#, VB, Delphi, etc. Daniel "kzu" Cazzulino has created a PowerShell Language Add-in that, for the most part, shows you what the code would look like in PowerShell.

Now of course, it's important to note a few things. PowerShell is not (yet) a language that you can use to author .NET assemblies with. It is, however, an incredibly powerful scripting and automation environment. Sometimes the Powershell language (it is a language, by the way, with a formal grammar - here's a link (PDF)) can be a little confusing to learn, so the PowerShell Language Add-in is a really cool way to learn more about PowerShell within an environment you're already comfortable in.

Reflector Add-Ins

Here's a reformatted snapshot of what's currently available.

CodeMetrics.png
CodeMetrics: Analyses .NET assemblies and shows design quality metrics. Download
Review.png
Review: Allows editing and managing annotations during code reviews. Download
Diff.png
Diff: This add-in shows differences between two versions of the same assembly. Download
FileDisassembler.png
FileDisassembler: This add-in can be used to dump the disassembler output to files for any Reflector supported language.
SQL2005Browser.png
SQL2005Browser: This add-in allows to browse .NET assemblies stored in SQL Server 2005 databases.
FileGenerator.png
FileGenerator: This add-in can be used to dump the disassembler output to files for any Reflector supported language.
Deblector.png
Deblector: This add-in allows to debug processes from within Reflector.
Doubler.png
Doubler: A code generator for unit tests, stubs and wrappers.
Graph.png
Graph: This add-in draws assembly dependency graphs and IL graphs. Please read the install instructions here.
DependencyStructureMatrix.png
DependencyStructureMatrix: Allows you to create and browser dependency structure matrices.
CodeSearch.png
CodeSearch: This add-in allows searching for strings and regular expressions in disassembled code. Download
SequenceViz.png
SequenceViz: This add-in draws sequence diagrams.
PowerShellLanguage.png
PowerShellLanguage: Renders output as Windows PowerShell script.
DelphiLanguage.png
DelphiLanguage: The Delphi view that is used inside .NET Reflector provided as a language add-in.
CppCliLanguage.png
CppCliLanguage: This add-in extends Reflector with a C++/CLI language rendering module.
Hawkeye.png
Hawkeye: A tool that allows you to debug the UI tree of Windows Forms applications.
ClassView.png
ClassView: Shows class definitions as plain text with color coding.

CodeModelViewer.png
CodeModelViewer: This add-in shows the underlying code model objects for selected items.

Diff.png
Diff
: This add-in shows differences between two versions of the same assembly. Download
ComLoader.png
ComLoader: Lists COM components for browsing and converts them into managed interop assemblies. Download
TestDriven.png
TestDriven.net: This Visual Studio add-in can navigate to any code element inside Reflector with a single click.
BizTalkDisassembler.png
BizTalkDisassembler: Allows you to list all BizTalk artifacts contained in an assembly and extract them. Download
ComLoader.png
ComLoader: Lists COM components for browsing and converts them into managed interop assemblies. Download
AutoDiagrammer.png
AutoDiagrammer: This add-in draws class diagrams.


Last week during lunch one day, Carl and  I recorded an episode of "DotNetRocks TV." This is  Episode 66 of DNRTV. 

We started with the idea that we'd do a show on debugging ASP.NET, but once we got into System.Diagnostics.Debug.WriteLine, I realized that I first needed to cover the relationship between Diagnostics.Trace and Page.Trace, as well as the relationships between debug statements and trace statements inside and outside of ASP.NET. The whole show was spontaneous, no script, no plan, but it turned out pretty darn good for a single take, if I may say so.

Play Flash Version in the Browser
Download zipped video
Download Torrent to Zip
Subscribe

Be aware if you download the ZIP that it's about 200megs. The show is in two parts, so there's an advertisement in the middle of the show...after that advert, Part 2 will automatically start. I encourage you to check it out the ad, first because it's telerik and they sincerely rock, and second because our sponsors pay for the massive bandwidth bills for the direct downloads. 

If you like DNRTV, and want to subscribe to the DNRTV Feed, consider using the RSS Downloader features of µTorrent ("microtorrent").

I hope you enjoy the show.



My sixty-fourth podcast is up, recorded on the floor at Mix. Google for "Lynda" and you'll find the legendary Lynda.com. Lynda Weinman has had a popular online presence for over 12 years. She created the original Web-Safe Color palette (remember when that mattered?) and now she sells nearly 20,000 training videos online via subscription. Silverlight is likely next. I chat with Lynda after we had lunch with Ray Ozzie and some other bloggers. Lynda created the FlashForward Conference, the largest Flash Conference out there - this year it's in Boston in September. As a geek aside, she also worked on the CGI for Return of the Jedi. I hope you enjoy this episode.

ACTION: Please vote for us on Podcast Alley! Digg us at Digg Podcasts!

Links from the Show

 Lynda.com
 Lynda.com Podcasts

Subscribe: Feed-icon-16x16 Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is our sponsor for this show.

Telerik is a new sponsor. Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

  • The basic MP3 feed is here, and the iPod friendly one is here. There's a number of other ways you can get it (streaming, straight download, etc) that are all up on the site just below the fold. I use iTunes, myself, to listen to most podcasts, but I also use FeedDemon and it's built in support.
  • Note that for now, because of bandwidth constraints, the feeds always have just the current show. If you want to get an old show (and because many Podcasting Clients aren't smart enough to not download the file more than once) you can always find them at http://www.hanselminutes.com.
  • I have, and will, also include the enclosures to this feed you're reading, so if you're already subscribed to ComputerZen and you're not interested in cluttering your life with another feed, you have the choice to get the 'cast as well.
  • If there's a topic you'd like to hear, perhaps one that is better spoken than presented on a blog, or a great tool you can't live without, contact me and I'll get it in the queue!

Enjoy. Who knows what'll happen in the next show?



There's a lot of Silverlight in the air right now. I haven't seen the 'net abuzz like this since FutureSplash Animator. ;)

I've been collecting links to samples out there. Since Silverlight is all text (XAML, JS, etc) there's a whole world of copy/pasting out there just waiting for us (developers) to create Green and Purple blinking abominations like we did with Visual Basic 3.

I'm enjoying XAML, but I'm not at the point where I'll do it all in a text editor like Chris Sells or all in black and white like Charles Petzold, so I'll stick with using Expression to draw my XAML for now. I've also I haven't gotten my brain around the object model yet...I can't remember who said it, I think it was Bret, but they said it, and they are awesome:

"Drawing with code is like painting over the phone.

Here's links to some of the choicest samples that I've been viciously copy/pasting from after Getting Started and viewing the screencasts and the Silverlight Comparison Chart from Alexander Strauss:

I'm sure the coming months are going to bring lots of good samples. I also want to dig into OpenLaszlo, JavaFX, and Apollo, as well as Flex. Does anyone have contact info for Ted on Flex? I'd like to do a show on Flex for Hanselminutes.



Code Camp in Portland is in only 10 days. It starts on May 19th and 20th. There's a good list of sessions so far with topics like Cardspace, XNA (XBox Development), PowerShell, Amazon S3, Silverlight, and many others by a great list of presenters. There's also an even party on Saturday, so be sure to register/RSVP ahead of time.

Remember that Code Camp is always free and you're welcome to present in this low-pressure environment. There's still time to submit a session of your own. If you've been thinking of presenting a topic or want to try presenting in public, now's the time to make it happen.

This is an open event, so come talk about Ruby, C#, Smalltalk, COBOL, Robots, whatever, as long as you're excited about it. You can submit any level session from Beginner to super-Expert. What are you working on at your job that is so awesome you're overflowing with excitement about it? Come give a session on that.  Are you building a PacMan arcade in your garage, or hacking your TV remote control? Come talk about that.

CodeCamp is just over the bridge in Vancouver at the WSU Campus. It's an easy drive from Portland. If you're coming from Seattle, there's many hotels nearby.

Spread the word around town as all are welcome at Code Camp in Portland.



I was asked recently to help in creating some estimates. Dates were mentioned, features were requested, but generally the information given was pretty vague, as is common with many estimates. So, we start digging. What is needed, when is it needed, in what form is it needed? What does success look like?

There's lots of estimation tools out there. Steve McConnell's Construx Estimate (even though it's written in VB6 and was created in 2001) is well thought of, and can certainly get one jump-started with an estimate. Of course, garbage-in, garbage-out still applies. Planix is an new hosted estimating application that looks very encouraging.

Patrick's been using the PlanningPoker technique for estimating lately. It's a useful technique that relies on the folks doing the work also doing the estimating. (Always nice.)

If you take a look at the White Papers section of the Construx website (free registration required, but it's worth it) you'll find a number of excellent presentations in PDF format that are good reminders and primers when dealing with daunting Software Estimation tasks.

Pick up Steve McConnell's book "Software Estimation: Demystifying the Black Art" if you want a nice introduction to the voodoo that is estimating.

I've been reminded of a few important tenets doing this estimating processes.

Know your scope

Negotiating the scope of your project, the features, subsystems, etc. with your business stakeholders is a good first step in getting your head around "what are we really trying to accomplish." User stories and complete and accurate Use Cases are invaluable when trying to nail down how large something is.

Targets are not Estimates

Folks sometimes come up with dates, like "February 2008" as a target for a project to hit. After a while that target date starts getting treated like an estimated date. It's important that everyone on a project remember (or be reminded regularly) that targets are not estimates. If you want to hit a date, you'll likely not know when if an estimate is good enough to hit a target until you start moving far enough into the Cone of Uncertainty.

Ask for Worst Case - then Double That

Jeff Atwood points out, after reading Steve's book, that asking for multiple points (best case, worst case) when asking folks for an estimate is important. He quotes Steve, emphasis mine:

Considering that optimism is a near-universal fact of human nature, software estimates are often undermined by what I think of as a Collusion of Optimists. Developers present estimates that are optimistic. Executives like the optimistic estimates because they imply that desirable business targets are achievable. Managers like the estimates because they imply that they can support upper management's objectives. And so the software project is off and running with no one ever taking a critical look at whether the estimates were well founded in the first place.

This quote nails it for me. No one wants to give a realistic estimate. It's hard and sometimes it's potentially career-limiting.  Steve quotes Fred Brooks (who, as a random aside, is the uncle of a good friend of mine from high-school):

It is very difficult to make a vigorous, plausible, and job-risking defense of an estimate that is derived by no quantitative method, supported by little data, and certified chiefly by the hunches of the managers.
Fred Brooks (1975)

A few companies encourage worst-case estimates in the hopes that you can look like a hero if you make it happen. A few companies ago I worked somewhere with the philosophy: Underpromise, over-deliver. It was the founder's belief that this idea was fundamental to making happy customers. It seemed like a good idea, except when you actually delivered and things turned out to be simply: Promised, delivered. Which isn't all that bad, actually, considering that folks say that fewer than 1/4 of projects actually do deliver on time.

Learn From the Past, and Don't Forget It

There's a great slide in the 10 Keys to Success PDF up at Construx that compares 120 projects at Boeing, juxtaposing those that were estimated with Historical Data and those that were done without. Seems obvious, but it's useful to see these kinds of things and "learn from the sins of our fathers."

When estimating based on historical data, however, sometimes people use the historical estimate rather than the historical actual. In fact, a lot of companies don't closely track the actuals. You'll be better off if you not only keep the actual datas, but also compare the original estimate with the actual result in a project post-mortem.

  • How do you estimate your projects?
  • Do you estimate?
    • If so, what tools do you use?
  • Do you use Function Point Counting?
    • Do you use other techniques?
  • What does success look like for your project?
    • What's your success rate?

Discuss, dear reader.



Zenzo and I went garage-saling on Sunday.

(If you're not in the US, a Garage Sale is when folks open up their garages, sometimes their homes, and sell all the stuff they don't want. They are called Garage says because "Garbage"-sale doesn't have the same ring to it. Some folks just put stuff on their front lawn with a sign that says "Free," then get some drinks and sit in their driveway waiting for the stuff to disappear. This is common with old computers and printers, as well as Washing Machines.)

We were lucky on this trip. We picked up a small toy kitchen construction set made out of Toy Bricks for only US$5. Zenzo is 17 months old now and he's getting deeper into role-playing. Here he is frying imaginary fish. 

Cartoon by Linda CauseyIt struck me how someone else's garbage, er, discarded well-loved pre-owned items, could be our find-of-the-day. The toy was used, to be sure, but otherwise intact, complete and totally useful. I hate to waste and I hate to throw useful things away when they could be passed on, so I like the idea of a garage sale.

It's charitable giving, if you do it right. The 25 cents you'll pay for a paperback isn't meant to make a profit, it's just there to keep folks from ransacking your sale.

One woman wanted $250 for a maple rocking chair. She insisted it was worth $500 new. I politely suggested that she was not only insane, but that perhaps she wasn't really interested in getting rid if the chair. I offered $100 cash, which she refused with an insulted stare. It was a shame because the chair wasn't worth more than $50 in the Real World. She clearly wasn't interested in selling it, or she got the (wrong) idea that Garage Sales can make you rich.

Why aren't there more Code Garage Sales? Sure there's a lot of code out there that is lying by the side of the road with a "Free" sign on it, you can find it on blogs (mine included) and CodeProject.

You don't have to go so far as to make an Open Source Project. You also might want to do more than just release a choice snippet. Why not try a middle place, and have a Code Garage Sale?

I think that Garage Sale-quality Code should be of a higher quality. Perhaps if there was a way to charge me a quarter when I downloaded it, it might be more like a garage sale. For me, Garage-Sale code is slightly different from code snippets in that it's complete (no missing parts) and organized on your website - like a Garage Sale.

Garage Sale Code should follow at least 4 of the 5 C's:

  • Complete - It's a whole library or application.
  • Concise - It does one discrete thing.
  • Clear - It'll work when you get it.
  • Cheap - It's free or < 25 cents.
  • (Quite Possibly) Crap - As with a Garage Sale, you'll never know until you get it home if it's useless.

There's lots of great Garage Sale code out there, but as with a real sale, sometimes you have to look for bargains. I find this kind of code more valuable than the "flea market" code snippets on (some places on) CodeProject and Google Groups. It's a shame that more companies, especially small ones, don't release their discarded code with a liberal license. All that typing, wasted. Surely someone might find part of it useful?

I like the following sites because they are PERSONAL. Again, like a Garage Sale, they are well-loved and useful things. Things that someone made for a reason, but just doesn't need anymore.

I KNOW I've missed a thousand good sites, so...

Garage Sale Code - Call To Action

If you've got a Garage Sale Code section of your blog or website, leave a comment on this post and include the link to your side in the URL text field, not in the comment itself. That way it'll get linked automatically.

If you KNOW you've got good code lying around your house, but you've just never taken the time to have a Garage Sale, now's the time to put up a section of your site dedicated to your old crap code, or just a single blog post with a zip file full of it. Get it out there so Google Code Search can get to it, and make sure there's a LICENSE block, license.txt, or comment with the word LICENSE, even if you intend to use the WTFPL as your primary license. Go have a Code Garage Sale!



Hopefully you've taken a look at http://www.hanselman.com/fightdiabetes and read my personal story. Many of you have donated and I appreciate it, more than you realize.

As of this blog post we've raised $13,808 in 22 days. That's 28% of our $50,000 goal! That's truly amazing, but we're not there yet.

Here's my ongoing "rolling thunder" plan to hitting this goal. There will be more ideas as we get closer to the day of the walk.

1. Portland, OR - BONUS "Silverlight" .NET User's Group Meeting with ALL proceeds benefiting diabetes research.

We're going to have a BONUS May Meeting of PADNUG, the Portland Area .NET User's Group. I'll be talking about Silverlight and sharing and demoing everything I learned this year at Mix. We're asking for a small donation for this meeting to benefit the ADA.

You can make checks out to the "American Diabetes Association," or you can paypal me at 'my first name at my last name.com.' I will be matching PayPal'ed donations personally.

The meeting is at the Corillian Cafe at 6pm this coming Thursday, May 10th, 2007. Please do join us and bring your friends. Even though we're a .NET Users Group, we're not religious zealots. Bring your Macs and Open Source Friends! Bring Python People and Ruby People! Do join us!

2. Blog "Donation Matching" Challenge

A number of folks have put this badge up on their blogs and linked it to http://www.hanselman.com/fightdiabetes or http://www.hanselman.com/fightdiabetes/donate.

Brian Hewitt, former co-worker, friend and world-traveler, wanted to a do a matching challenge, so we came up with the idea to do a 48 hour blog-matching challenge.

Starting Weds, May 9th at Noon PST until Friday, May 11 at Noon PST we'd like to ask any bloggers who'd like to be involved to volunteer to match donations that come in during that period up to a specified ceiling.

I'll keep this list updated with bloggers who are participating in the match:

If you've been hanging back and waiting for the right time to give, next Weds to Friday your tax-deductible gift will have even more kick and be doubled, tripled or more!

Let me know in the Comments of this post or in a Post on your own blog if you want to be involved in this matching challenge and I'll add your name here.

Thanks to everyone who has given or spread the word. You're making this the best walk ever, and giving me hope that we're going to fix this thing. I'm off to check my blood sugar.

3. Update - MicroISV Donations

The very awesome Martin Plante, lead at slimCODE Solutions, has offered to give all the earnings from his slimKEYS product during the May 6th to May 11th to help fight diabetes. An amazing idea and a very nice gesture.

I talked about slimKEYs in my post "Replacing Start Run." It's a Universal HotKey Manager with easy-to-code-to plugin model. As Martin says, "Help a good cause and get a lifetime slimKEYS license at the same time!"

Thanks Martin!



My sixty-third podcast is up and this one was a blast. I recorded this one at Mix just two days ago with Scott Guthrie and Jason Zander. Scott runs the teams that build IIS, ASP.NET, Atlas, CLR, Compact Framework, Windows Forms, Commerce Server, Visual Web Developer 2005 and Visual Studio Tools for WPF. Jason was a dev on the CLR 1.0 and is now the General Manager of the .NET Framework (DevFX) within the Developer Division. Needless to say, these gentleman know their stuff. It was fantastic to get a full 30 minutes of these guys' time. I hope you can tell just by listening how much they enjoy their work and how excited they are about Silverlight.

 There's a lot of Silverlight coverage out there right now, so rather than covering the basics, we attempted in this podcast to not waste your time and tried to get into some technical detail quickly. I hope you enjoy it.

ACTION: Please vote for us on Podcast Alley! Digg us at Digg Podcasts!

Links from the Show

Silverlight Home Page
Scott Guthrie's Weblog
Jason Zander's Weblog
Jim Hugunin introduces the DLR

Subscribe: Feed-icon-16x16 Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is our sponsor for this show.

Telerik is a new sponsor. Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

  • The basic MP3 feed is here, and the iPod friendly one is here. There's a number of other ways you can get it (streaming, straight download, etc) that are all up on the site just below the fold. I use iTunes, myself, to listen to most podcasts, but I also use FeedDemon and it's built in support.
  • Note that for now, because of bandwidth constraints, the feeds always have just the current show. If you want to get an old show (and because many Podcasting Clients aren't smart enough to not download the file more than once) you can always find them at http://www.hanselminutes.com.
  • I have, and will, also include the enclosures to this feed you're reading, so if you're already subscribed to ComputerZen and you're not interested in cluttering your life with another feed, you have the choice to get the 'cast as well.
  • If there's a topic you'd like to hear, perhaps one that is better spoken than presented on a blog, or a great tool you can't live without, contact me and I'll get it in the queue!

Enjoy. Who knows what'll happen in the next show?



My sixty-second podcast is up. In this, the second part of a two part episode, I visit the home of Chris Sells and we make up a topic for the show! I suggested we talk about what programming will look like in 15 years, and Chris countered with the suggestion that we chat about the LAST 15 years first, then the next 15. In this episode with continue our discussion and speculate on what the NEXT 15 years of technical innovation will bring. Don't forget to listen to Part One.

ACTION: Please vote for us on Podcast Alley! Digg us at Digg Podcasts!

Links from the Show

 Chris Sells Blog

Subscribe: Feed-icon-16x16 Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is our sponsor for this show.

Telerik is a new sponsor. Check out their UI Suite of controls for ASP.NET. It's very hardcore stuff. One of the things I appreciate about Telerik is their commitment to completeness. For example, they have a page about their Right-to-Left support while some vendors have zero support, or don't bother testing. They also are committed to XHTML compliance and publish their roadmap. It's nice when your controls vendor is very transparent.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

  • The basic MP3 feed is here, and the iPod friendly one is here. There's a number of other ways you can get it (streaming, straight download, etc) that are all up on the site just below the fold. I use iTunes, myself, to listen to most podcasts, but I also use FeedDemon and it's built in support.
  • Note that for now, because of bandwidth constraints, the feeds always have just the current show. If you want to get an old show (and because many Podcasting Clients aren't smart enough to not download the file more than once) you can always find them at http://www.hanselminutes.com.
  • I have, and will, also include the enclosures to this feed you're reading, so if you're already subscribed to ComputerZen and you're not interested in cluttering your life with another feed, you have the choice to get the 'cast as well.
  • If there's a topic you'd like to hear, perhaps one that is better spoken than presented on a blog, or a great tool you can't live without, contact me and I'll get it in the queue!

Enjoy. Who knows what'll happen in the next show?



Updated: I got some feedback from some MSFTies and this is an updated ecosystem diagram. For reference, here's the original ecosystem diagram. This version is better, but still who knows, eh?

I'm over here at Mix. There were some big announcements at Mix07 this year. Many were expected, a few were not. I've been following WPF/E with interest for the better part of a year.

Overheard: "There's a lot of college kids, lotta high school kids out there who expect more things to move." - CEO of MLB.com referring to the increased expectations young folks have while on the web.

I'm off in a corner here at some party trying to put it all into context. For a complete list of links, I'll suggest you head over to Sam Gentile's site.

Most Awesome Marketing-Guy Quote of the Day: "This announcement opens up significant opportunities in both the 'lean-in' and 'lean-back' environments." - MLB Marketing Guy refererring to folks watching MLB.com at their desks, or on their couches.

 Here's what was announced in the driest terms:

  • Silverlight 1.0 Beta - Lightweight Browser plugin that can render XAML, play HD 720p Video with included VC-1 codecs and be accessed via JavaScript. Supports Windows and Mac OS X.
  • Silverlight 1.1 Alpha - All of the above including a CLR 2.0 (Whidbey) compiled CLR and Type System along with select BCL (Base Class Library) classes from the .NET Framework 3.5 (Orcas) including DLINQ. Also included is a new dynamic language runtime (DLR) layer and support coming for Python, Ruby, VBScript VBx (Visual Basic "10") and JavaScript (ECMAScript). Compiled/JIT'ed JavaScript is at least 1000x faster than interpreted. Supports Windows and Mac OS X.
  • Expression Studio - Design, asset management and interaction design application suite with XAML editing and Visual Studio integration, along with a Media Encoder.
  • Silverlight Streaming - More developer focused than YouTube, this service gives you 4GB of free storage and virtually unlimited streaming of video clips using Microsoft's content deployment network. Why? Because Silverlight looks bad if your web host sucks, and if Microsoft hosts your videos, you, Microsoft, and Silverlight all look good.

Some good places to start learning are:

Now, what follows is just me talking. Not my company, just me and everything here is just my opinion and ruminations. 

Everyone who saw the keynote has a different take on what they've seen, and what Silverlight means to them. While the Microsoft messaging was pretty spot-on, I think that some context couldn't hurt.

Silverlight has Flash-like qualities, and Adobe was brilliant to counter the coming announcement with the Open Sourcing of Flex. All this means more choices for me, the developer.

Overheard: "This is the biggest thing since God talked to Moses. Well, maybe not, but it's still up there."

While folks are justifiably stoked about the rich media and interaction benefits of Silverlight, and I don't mean to draw attention away from those good things, but I want to touch on the most game-changing aspects of this announcement while you all are watching 720p HD video over Silverlight and thinking this is a direct shot over the Flash bow.

1. The impact of the new Dynamic Language Runtime should not be underestimated.

This new layer on the CLR adds a number of features around code generation and dynamic type systems that take the CLR's already decent support for dynamic languages to a considerably greater level. This DLR will enable support for Python, EcmaScript 3.0, Visual Basic "10" (VBx - VB as Dynamic Language), and Ruby. Initially this support will be enabled in Silverlight in the browser sandbox, but will no doubt move to the server side soon.

A cool side note; John's team added a subtle nod to the Ruby team in their demo. If you want to access a .NET library, like say, List.AddRange(), when you access it from Ruby it'll be list.add_range. Subtle, but an important (and classy) statement of respect for one of the things that Ruby programmers feel strongly about.

1a. Code for the DLR, IronPython and IronRuby will be released under the Microsoft Permissive License.

This is nothing but a good thing. I look forward to seeing what the folks who use Boo (another alternate .NET language) and the MonoRail and Castle Project guys come up with in to exploit these new dynamic services for their languages and environments.

2. There's a "new" CLR in town, and it's for more than just animation.

During the demo, ScottGu showed a Windows Developer connecting to a "CoreCLR Remote Debugging Service." The text "CoreCLR" appeared briefly in the Attach to Process Window in Visual Studio.

Check out this great diagram of the Silverlight 1.1 world, at right - click for the giant version.

The CoreCLR term refers to the CLR that powers the Silverlight 1.1 Alpha. I like to think of this as a "reimagining" or refactoring of the current CLR. The Silverlight CLR isn't tiny, micro, or crippled. It's refactored, modularized, tightened, simpler with fewer dependencies. This new CLR design will likely power and influence future CLR versions. The diagram above is my own speculation, memory and from Googling around.

Also, the CoreCLR in Silverlight can live in the same process space as the existing CLR. So if Internet Explorer has a .NET plugin or toolbar loaded, Silverlight keeps working fine.

2a. You can use and re-use existing .NET assemblies, business logic even, in Silverlight

The assembly format is the same - it's the same CLR - so things that you've previously used on the server-side and potentially (depending on the libraries in the BCL you used) reuse them on the browser-side and finally put all these Core2Duos to work doing more than just waiting for <angle brackets to show up> for rendering.

2b. It works on a Mac. Same binaries, no cross compilation, just IL, working cross-platform.

The Mac version of Silverlight is a Universal Binary and runs the same code and renders the XAML exactly the same on the Mac as it does on Windows. There's also, as mentioned before, support for debugging Silverlight client apps running on a Mac directly from within Visual Studio.

Overheard: "It's the new smart client. It's a chubby client. Everyone knows chubby girls are smarter."

One great prt of the demo was done entirely in TextMate on a Mac where ScottGu created a Silverlight XAML file and CodeBehind in IronRuby. There was no Visual Studio or C# to be seen. The potential for Silverlight to energize the LAMP stack and complete with mXml is great. Silverlight might be the only Microsoft technology in a solution. Everything can be served by any Web Server as long as the mime-types line up.

3. Your XAML can be used all over.

One thing to know about the XAML rendering that's happening on Silverlight is that it's a different XAML parser/renderer than the one included in WPF.

If you're on Vista, try this cool test. Open up the Accessibility Magnifier and hover over any WPF app, like the New York Times Reader. Rather than little raster/bitmaps becoming large raster/bitmaps, you'll see beautiful scaled vectors. As long as what you're looking at is a XAML vector rendered on Vista with WPF, you can scale it forever.

I speculate - I haven't tried this yet - that if you put the Vista magnifier over a Silverlight XAML-created vector I suspect you'll get a scaled bitmap, not a smooth vector. This is because Silverlight will run on a bare-naked Windows XP (not even SP2) machine, and Silverlight's XAML renderer is painting via GDI. This is not a huge bummer, but it's a significant and very clear, visceral way to illustrate that there are two XAML renderers. Fortunately XAML is a clear spec, and both WPF and Silverlight (on both platforms)should both render identical XAML identically. It's not open to interpretation the way that HTML was/is.

4. It's a JavaScript/CLR Type bridge

Silverlight can act, it seems, as a bridge between the world over in-browser Javascript and in-Silverlight CLR-code. Your CLR code can get ahold of the DOM and manipulate it just as your in-browser Javascript can reach into Silverlight and access properties and dispatch events.

Overheard: "This is the most significant launch since .NET 1.0 and I don't think 10% of the audience gets that."

I'm pretty stoked about this whole thing, and I'm going to dive into both Silverlight and Flex, along with other options like OpenLaszlo as there's many ways to create a Rich Internet Application these days. The addition of an integrated client-side CLR will allow for greater scalability in large systems where the server is called upon to do calculations that really belong on the (increasingly powerful) client-side.

<disclaimer>I don't work for Microsoft, nor is any of the data on that diagram from NDA'ed sources. It's very likely wrong, so enjoy.</disclaimer>

I may also have overheard myself saying all those quotes, but one can't be sure about these things. :)



Contact

Sponsors

On this page...

Windows Live Writer Beta 2 - DasBlog and the Customization API
TED: Blaise Aguera y Arcas: Photosynth demo
Google Gears - Maybe all Rich Internet Applications needed was Local Storage and an Offline Mode
Is This Useful? - Google Street View
Going to Foo Camp 2007
The Duh Files - The file is too large for the destination file system
Virtual Machine CPU Performance
VM Performance Checklist - Before you Complain that your Virtual Machine is Slow
MSMPENG.EXE, TrustedInstaller.exe, SearchIndexer and SLSVC.EXE at 100% CPU on my Vista Machines
Hanselminutes Podcast 65 - Martin Fowler and David Heinemeier Hansson
The TechEd Party to Attend - Party with Palermo
Reading Documents on your Screen Effectively
Four Life-Changing Gadgets - GPS, iPod (MP3) and Tivo (DVR)
Programmer Intent or What you're not getting about Ruby and why it's the tits
Twittering my Diabetes - Conclusion and Complete Transcript
Explaining CyberGeek Fame to my Wife
Is Microsoft losing the Alpha Geeks?
ATI Radeon 9800 Vista Drivers - Flash and Windows Video Stops or Stutters
Twittering my Diabetes
Ruby on .NET, Silverlight Gems, the DLR, and RailsConf 2007
CheckFree Closes Deal to Acquire Corillian - Now the real work begins
Reflector Addins and PowerShell Language Support for Reflector
DNRTV Screencast - ASP.NET Debugging and Tracing
Hanselminutes Podcast 64 - Interview at Mix with Lynda from Lynda.com
Silverlight Samples
Call for Sessions: Portland Code Camp v3.0
Software Estimation: Remember that Targets are not Estimates
Garage Sales and Garage-Sale Quality Code
Diabetes Walk 2007 - Blog Matching Challenge and Silverlight Presentation in Portland
Hanselminutes Podcast 63 - Scott Guthrie and Jason Zander on Silverlight
Hanselminutes Podcast 62 - Inside the Mind of Chris Sells and The Next 15 Years of Programming - Part 2 of 2
Putting Mix, Silverlight, the CoreCLR and the DLR into context

Tags

Calendar

<2008 April>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

Archives

Google Ads