October, 2004

  • Eric Gunnerson's Compendium

    Edit and Continue in Whidbey...


    Soma has just announced that C# will support Edit and Continue in Whidbey.

    Waaay back when we first planned Whidbey, one of the questions we asked was "is refactoring or edit and continue more important"? We knew that our users wanted both, but we didn't have schedule time to do them.

    The answers we got back were along the lines of "refactoring, but we'd also like E&C as well".

    At the time, it was an either/or choice, and we did refactoring. After talking with customers at the last PDC, it was apparent that the desire for E&C was pretty high. We explored if there was any way to do E&C in Whidbey, and came up with a way to make it happen. And now, thanks to the hard work of many on the C# team (excluding me, who didn't really do much of anything), the feature will be available in the next community preview.

    So why didn't we tell you earlier? Why did Eric lie to you when you came up to him at TechEd and asked about E&C?

    Well, the fact is, it was a very near thing. If a few technical details or schedule points had come out a bit different, it wouldn't have made it into the product. We decided to delay announcing until things were firm rather than risk having to de-announce a feature.

  • Eric Gunnerson's Compendium

    Review: American Idiot


    My CD of Green Day's new "American Idiot" showed up Monday, and after listening to it a few times, I think it's a pretty good effort.

    But it may not be the Green Day that you're used to hearing, and, while I'm not really sure where the boundaries of "punk" are, I don't think I'd use that label. "American Idiot" is similar to "Minority" off of Warning, and "Letterbomb" sounds like many other Green day tunes. Don't get me wrong - I like "American Idiot" (though not as much as "Minority"), but they're not breaking any new ground with those songs.

    The rest of the album, however, is an excursion into new areas, though there are some typical Green Day touches in many of the songs.

    The first is two multi-part songs, which are in the "rock opera" genre. Some of the approach and pacing is reminiscent of Queensrÿche's excellent Operation Mindcrime, one of my favorite concept albums, coincidentally being performed live by the band tonight in Seattle at the Moore (if only I had known...) (this is the start of the tour, so you may have a chance in your city). The second two-part song ("Homecoming") pays a lot of homage to The Who's Tommy, and one segment is especially close (I'll let you figure it out). Overall, I think it works fairly well.

    And finally, there are a several songs that are in the same vein as "Good Riddance" from Nimrod. "When September Comes" reminds me of "God of Wine" off of Third Eye Blind's debut album, which is a good thing.

    I'll have to listen to it a few more times before I decide for sure, but so far it's wearing well.

    Oh, and one more song comment. The start of "Are we the waiting?" reminds me very much of the start of "(She's So) Selfish" from "Get the Knack"


  • Eric Gunnerson's Compendium

    Music Recommendations


    I'm spending a lot more time listening to music in my new job, and I'd like to expand my collection.

    That's where you come in.

    I need some recommendations. For reference, here are a few group I listen to:


    • Rush
    • Green Day
    • Third Eye Blind
    • The aforementioned Queensryche
    • The Police
    • The Cars
    • The Who

    Jazz (ish):

    • Rippingtons
    • Lee Ritenour
    • Bruce Hornsby

    Industrial/Whatever (I don't keep up on the labels...)

    • BT
    • Orbital
    • Robert Miles
    • Stereo MC's
    • The Crystal Method


  • Eric Gunnerson's Compendium

    LCD Monitors and ClearType


    XP does a nice job of enabling ClearType automatically if you have a laptop, but it doesn't know if you have an LCD display, so many people don't benefit from it.

    Here's a page that helps you turn it on and tune it.

  • Eric Gunnerson's Compendium

    Couches * 2 (thank you Levitz)


    This morning two new couches showed up at our residence this morning.

    We'd originally headed out furniture shopping - not one of my favorite pasttimes - because we had some couch needs. The basement / rec room couch was nearly 15 years old (that's 90 in human years), and not only did it not fit the space, it was having some problems with sagging. Oh, and it was dirty, since we bought it in a special "can't readily be cleaned fabric" that is (or at least was) light colored.

    The living room couch was covered in Nubuck leather, which has a nice, soft, suede feel. For about 5 minutes. Here are a few tips on Nubuck leather):

    • Nubuck leather is very prone to staining and soiling
    • Nubuck leather is difficult to maintain
    • Nubuck leather is very susceptible to becoming flattened with wear or scuffing

    Hey, I've got a tip for you. DON'T BUY NUBUCK LEATHER! There are some nice microfiber fabrics that have a similar feel but wear much better.

    So, our dark green leather couch had, over time and due to a few unfortunate feline encounters, transformed itself from a couch to what can only be termed a "somewhat decorative space-occupier", and served mostly to embarass us whenever we had people over ("Whatever you do, don't sit on the couch...")

    So, after hitting one store, we ended up at Levitz, which occupies the space where Sears' Homelife used to be.

    First of all, the store carries a ton of stuff, and the quality seems to be reasonable. We ended up working with Cliff, who spent some time talking with us about the rooms where the couches would be, what surfaces and colors we had, whether we had children or pets, etc. He then showed us a number of different couches.

    We choose a Berkline dual-recliner model for the downstairs room, in a medium brown leather. The recliners work well, and it doesn't take up too much space.

    For upstairs, we wanted something a little more formal. After showing us a few options, Cliff took us to see a custom-color (ie Levitz specified the color) Italian couch in olive. We chose that for the living room.

    This morning, Levitz showed up at 10:20 (in their 10AM - 1PM window), delivered both couches, and even carried the downstairs couch (with sleeper) up and put it in our garage.

    Definitely recommended.


  • Eric Gunnerson's Compendium

    NASA World Wind (Warning: Don't read this post)


    You had to go and read it, didn't you.

    Today I got a link to an application I had been hoping to write, someday. Take various sources of imagery of the earth (landsat, topo maps, USGS aerial, etc.) Add in elevation data from the Shuttle synthetic aperture radar mapping mission. Serve it all up in an interfact using DirectX. Enjoy.

    It's incredibly cool. I navigated to some of the ski areas where I go, and was able to rotate the mountain views around. Has to be seen to be believed.

    Oh, and it's written in C# using managed DirectX.


  • Eric Gunnerson's Compendium

    More bicycle test rides...


    I took advantage of the wonderful early October weather today to do some more test riding.

    I'd plannd on going to Bicycle Center of Issaquah, but today was "keep people away from our businesses" day at Issaquah, so after spending 20 minutes in traffic and 10 minutes on my bike trying to get to the store, I gave up, and drove into Seattle to Greggs at Greenlake.

    After doing the usual "what are you interested in dance", the salesman pulled out three bikes for me to ride:

    • A Specialized Roubaix (Elite Triple, I'm fairly sure)
    • A Trek Madone 5.2 (Treks replacement for last year's 5200)
    • A steel-framed Bianchi (apparently no bike shop has a nice Bianchi in my size to ride - this is the second shop that put me on a $1500 bike when I'm riding other bikes that are quite a bit pricier).

    I rode the Roubaix first. After a short trip out and back when I re-discovered that the standard method for determining the proper seat height works poorly for me (felt like I was sitting on the seat tube), I headed out for a quick loop, up some hills. The Roubaix frame uses aluminum for most tubes, except for the fork (hard to buy a bike without a carbon fork these days), and the downtubes in the back triangle. This results in a frame that is very responsive - I could sprint very well, and it felt really good up a short hill. The problem is that the frame is pretty stiff, and - to me at least - leads to a ride that is harsh. Its not as bad as the ride of the all-aluminum bikes that I rode about 7 years ago, but it's still enough to be objectionable. Sprinting perforance isn't high on my list of requirements right now, so my overall rating wasn't very high on the Roubaix. Better than my current bike, certainly, but too harsh.

    I rode the Trek next. Trek is, as far as I can tell, one of the few manufacturers to bring the carbon fiber frame to the masses, and the bulk of the feedback I've heard has been quite positive. It is, however, about $800 more than the Roubaix, so it's going to need to be pretty good. Unfortunately, Gregg's only had it in a 58cm frame, and a 60 is closer to what I've been riding, but I took it out anyway.

    I took it out on the same route as the Roubaix. It only took about a block for me to start smiling, and I continued smiling up the hill, down the hill, and then back up the hill on a different route. It's not quite as stiff as the Roubaix was when sprinting, but the ride is incredibly good. All the low-level "road rumble" is soaked up by the frame, and the edges are taken off the harder bumps. For me, it seemed to climb about as well as the Roubaix, and I did the hill twice to see how it would do on th steeper stuff. The geometry is much quicker than the Roubaix, and while that means you have to pay more attention, it makes it more responsive, which I like.

    With the exception of the price, there's really wasn't anything I didn't like.

    I next rode the Bianchi. It's pretty close in the feel to my current bike, but with a harsher ride. Blech. Though the bike is only 4 pounds heavier than the Trek (22 pounds vs 18 pounds), it rides like it's lots heavier. Though the fact it was my fourth trip up the hill may have been a factor, this time the climb was *work*, rather than fun. Given the price differential, it's really not a fair comparison, but it did reinforce to me that I don't want a steel frame.

    So, that's two more bikes off my "must ride list". I'm getting a 60cm of the Trek to ride in a few weeks, and I want to ride the Giant before I make a final decision. If I do go with the Trek, I have one final decision to make. Trek has an option called "Project One" where you can, for a few $$$ more, customize a few things on your bike, including the paint job. For example, I could get a bike that looks like this:

    My big surprise today was how much difference I could tell between the bikes.

  • Eric Gunnerson's Compendium

    Visual Studio "Orcas"


    There has been some talk about the follow-on release to Visual Studio Whidbey, which is codenamed "Orcas".

    I won't comment on the release, since I'm not on the team any more, but Dan's title makes an allusion to Marine Mammals, and some of you might be wondering why we chose that as a code name.

    In fact - and I'm not sure if this is clear in Tony's video or not - the code name comes from Orcas Island, which is one of the San Juan islands, which reside in north Puget Sound, near the Canadian border. If you cross the border, you get to the Gulf Islands, which are really part of the same island group as the San Juans.

    Interestingly, the pronunciation for Orcas and Orca's is different. Orcas is pronounced "Oar-cuss", while Orca's is closer to "Oar-cuz".

    "Whidbey" came from Whidbey Island.

  • Eric Gunnerson's Compendium

    Donate to your local phone company


    I was looking at my Cingular bill tonight, at the various fees. For our most recent bill, we paid $4.75 in "other fees and charges". The details are:

    Regulatory Cost Recovery Fee = $2.50
    Federal Universal Services Charge = $1.88
    State B and O Surcharge = $0.37

    Oh, the government is hitting me with fees and charges.

    Well, not really. If you do a little digging, you find out something that is surprising.

    Regulatory Cost Recovery Fee. To quote Cingular's website, "The purpose of the fee is to defray Cingular's costs associated with payment of fees and compliance with various initiatives imposed by the government."

    In other words, there are government regulations that apply to Cingular, but they don't want to pay them, so they're passing them straight to customers and making it look like it comes from the government.

    Federal Universal Services Charge. Same deal. The government set up a program that the telcos were supposed to pay into, and they don't want to, so they make it look like the fee comes from the government.

    State B and O surcharge. For this you need to know that Washington has this weird business tax called "Business and Occupancy", which charges you for running a business, even if you don't make any profit. Nope, we don't want to pay that either, so we'll pass it on to consumers.

    Now, obviously, businesses have expenses, and all these expenses are ultimately passed on to consumers. So what's the problem in this case?

    Well, there are really two problems. The first is that the companies are engaging in a "Bait and Switch" tactic, which is illegal. I signed up for service that only costs $60 a month, but they really charge $65 per month. The second is that they attempt to hide their extra charges with names that sound like taxes. I would argue that that is also fradulent.

    This obviously makes it hard to compare carriers, when a plan really doesn't cost what it says it costs.


  • Eric Gunnerson's Compendium

    And a recommendation for you...


    Waaaaay back in about 1988, my wife and I wandered over to a Medieval arts fair in Kent, WA. I've had friends that were in SCA, but I was never really into it myself, so we didn't really have a purpose to be there. While we we wandering, we came across a stage with a bunch of people in front of it. There were three performers, and the first song we heard was, IIRC, a song about a man who became very depressed because The Love Boat had been cancelled. Not only were the lyrics funny, the music was an impressive mix of three very talented vocalists.

    We had stumbled across a concert by Uncle Bonsai.

    Uncle Bonsai is a group that is very hard to describe, but basically, you have two women and a guy with a very high voice doing vocally complex songs in many genres, some of which are funny, some of which are deep, and some of which are both.

    If I had to recommend a single album, it would have to be:

    A Lonely Grain of Corn

    After the group broke up, Andrew Ratshin went on to record more songs on his own as "The Electric Bonsai Band", which is neither electric nor a band, and is a pretty good indication that they never took themselves too seriously.

  • Eric Gunnerson's Compendium

    What's wrong with this code? (Answer)


    A few days ago, I posted some code with a problem in it. Here's the segment I posted:

    IWMStreamConfig iStreamConfig = ...;   // set somewhere else...
    DirectShow.IWMMediaProps mediaProperties = (DirectShow.IWMMediaProps) iStreamConfig;

    uint typeSize = 0;
    mediaProperties.GetMediaType(null, ref typeSize);  // call to get size

    byte[] buffer = new byte[typeSize];
    mediaProperties.GetMediaType(buffer, ref typeSize); // call to fetch values

    fixed (byte* pBuffer = buffer)
        mediaType = *((DirectShow._WMMediaType*) pBuffer);
        waveFormatEx = *((DirectShow.WAVEFORMATEX*)

    The problem is that I've used the IntPtr that came back in pbFormat, but it's an internal pointer. In other words, the buffer that I pass looks like this:

    _WMMediaType structure

    WAVEFORMATEX structure

    There's a small chance that a garbage collection will happen between the time I call GetMediaType and the time I get into the fixed block, and if that happens, buffer will be moved. That will leave pbFormat pointing at where the WAVEFORMATEX used to be, not where it is now.

    The basic rule here is "be suspicious whenever you get a pointer back from interop". In this case, you can't use the pointer at all, and need to depend on the size of the structure. In this case, since we know the two structures are allocated contiguously, we can use:

    int mediaTypeSize = Marshal.SizeOf(mediaType);
    waveFormatEx = *((DirectShow.
    WAVEFORMATEX*) (pBuffer + mediaTypeSize));

    and things will be fine.

    Interestingly, after I wrote the post, I came up with another method that also returns an array of the same structure, but instead of the "make the structures longer" approach, it uses two separate unmanaged allocations. That makes it safe to follow the pointer, but it also means that you need to call Marshal.FreeCoTaskMem() on the pointers to clean up after you're done with them.

  • Eric Gunnerson's Compendium



    There's a new flu going around Microsoft. So far, it's only been caught by a few people, but I think that in the next two weeks, it's going to reach epidemic proportions.

    Apparently, if you've got it, you can't even get out of your chair for hours, and there's no vaccine that works on it. There's no official name yet, but people have taken to calling it "Covenant Flu"

    I'm pretty sure I'm going to catch it. In about 11 days...

  • Eric Gunnerson's Compendium

    Halloween Circuitry


    I managed to steal a bit of time in the past few weeks to build some circuitry for Halloween. I'd hoped to do something with pneumatics, but that didn't happen, so we had to settle for a few smaller things.

    I'm also using this as an opportunity to teach Sam how to solder.

    We started with converting a typical "Home depot" motion sensor into an inline version. That's pretty simple - take a extension cord, and wire in the motion sensor inline. A little heat-shrink tubing, and it was done. The motion sensor is hooked up to the power for an old boom box that I have, which is playing spooky music from my MP3 player. Come up the walk, and the music starts playing.

    Te second project is a bit more elaborate. Right next to the front door, there's a dummy with a pumpin head sitting in a chair. In his (its?) lap, there's a bowl with a full-size Hershey's chocolate bar, and a sign that says "Help Yourself". If you do help yourself, the eyes of the pumpkin light up and a bell rings. This is all based on detecting somebody trying to grab the candy. I explored a few methods of doing this - there are some that use RF techniques to detect the change in capacitance as somebody approaches, but they're notoriously finicky. I decided on an IR approach, and was lucky to find a site that sold the Sharp GP2D15 IR sensor. You've probably come across this sensor in the hands-free faucet in a public restroom. This sensor is very easy to use - it generates a signal when something comes within about 10" of the sensor. The output of the sensor isn't powerful enough to power a relay, so an added 2N2222 transistor does the amplification. That relay runs the bell, and there's a separate solid-state relay that turns the eyes on.

    Finally, I bought an Edirol UM-1X Midi interface. This connects to our Roland digital piano, and is used to play back spooky organ music (Bach, mostly) through the piano's built-in Pipe Organ patch.

  • Eric Gunnerson's Compendium

    Corporate blogging and PR...


    I came across an interesting discussion on Corporate blogging and PR departments (via Scoble), and as so often happens, my short reply turned into a long one, and I thought I'd post it here. BTW, I agree with what Clarke said.

    The question is whether a PR department should be involved with blogging. Elizabeth Albrycht posted a comment saying that PR could offer advice to bloggers, to help improve clarity.

    I don't think having PR provide editorial advice is a good thing. My concerns would be:

    1) Anything that gets in the way of making blogging drop-dead simple causes problems, which means no approval process. I would often answer customer email questions in my blog, and then point the customer to the blog entry. That means I need to have it show up right when I write the entry.

    2) Regardless of the good intentions of the PR department, I think knowing the PR department is reading all the blog entries is going to have a chilling effect on the bloggers. If I had to tell developers that PR would be reading their enties, my guess is that 90% of them wouldn't have even started a blog.

    3) It's really hard to scale on something like that. If my post shows up a day late because the PR department can't give me advice in time, I'm much less interested in blogging.

    Finally, I think - and this is going to sound strange coming from an author who spends a lot of time editing - that clarity on blog posts is overrated.

    Let me be more concrete.

    I would rather have a blogger post 10 items that might not be totally clear and/or polished than have her post 9 items that were totally polished.

    Blogs are all about content. Sure, it's nice to have stuff that is readable, especially if you're writing opinion stuff, but for the most part, it just doesn't matter.

    And blogs already have a great editorial department. It's the readers. If I write something that's unclear, I'm pretty sure there's going to be a comment heading my way, and I have a great opportunity.

  • Eric Gunnerson's Compendium

    Aerodynamic Flutter


    A discussion on flutter in rocket fins let to this archive of Flutter tests from the Smithsonian.

    Don't watch this if you're going to be flying soon...

  • Eric Gunnerson's Compendium

    More on group blogs


    I got an email today from Gary Cornell (Apress publisher), who told me that they had decided to split their blogs out into individual blogs, based partly on my comments about group blogs.

    That triggered another thought about group blogs, something I didn't realize I'm doing.

    When I first start reading a blog, I put it on a sort of "mental probation", until I'm convinced that it has content that's worth my while to read. What I realized is that I base this probation on a specific number of posts - if it hasn't gotten interesting in <x> posts (where <x> varies, but is probably less than 10), I'll unsubscribe.

    For a single new blogger, that will normally get over their initial rough posts, and give me a chance to see what they can do, but for a group blog, I may be seeing 3 people ramping up at the same time, so I'm more likely to stop reading.

  • Eric Gunnerson's Compendium

    Halloween Fun


    My daughter and I have been planning on a special Halloween surprise for our Trick-or-treaters for a few days, and this morning we went to our local Halloween-surprise-superstore.

    What, you don't have such a store?

    Well, neither do we. Sure, one can head down to the local Fred Meyer (or local equivalent) and purchase any one of numerous Halloween-themed displays with what to adorn one's domicile, but that, in my opinion, shows lack of creativity.

    Our goal is to have something that is triggered by the proximity of sucrose-seeking young-uns. Our first trip to Home Depot netted us the following:

    • One "Guardmaster" motion sensor
    • Two 1" red round night light bulbs
    • Two Edison sockets for the light bulbs
    • One extension cord

    We have a fairly good plan, but it requires me to build some new electronics, which requires parts, which necessitates a trip to Fry's (Radio Shack is remarkably inadequate these days), which means it will take a few days.

    Do you have plans in this area?

  • Eric Gunnerson's Compendium

    Burt and Paul...


    Before I came in this morning, I watched the second launch of Burt Rutan's and Paul Allen's (well, Scaled Composite's, really...) SpaceShip One, in pursuit of the Ansari X Prize. All appearances are that they have won, but it's not official until the pilot survives 24 hours (by international aeronautical federation rules).

    I still have scrapbooks that I made during the early Apollo flights in 1968 (I'm not *that* old - I was 4 at the time), so space has been in my blood for a long time. But I've felt for a long time that NASA lost its way after Apollo. Shuttle was designed more to keep NASA centers open and be politically feasible than to be the next step into space.

    Today, I think I saw what is likely to be the next step, with technology that comes more out of the aeronautical world than the space world, and comes from a small group of dedicated people working together rather than a large army. There are some obvious parallels there between space and software development that I won't go into right now.

    As soon as I heard that Scaled was going for the X Prize, I knew they would be the one to win, as whenever Burt Rutan gets in the game, he's always a front runner. From the globe-circling Voyager to the Beech Starship, his designs have always had innovative solutions.


  • Eric Gunnerson's Compendium

    Music Recommendations - Thanks...



    Thanks for all the ideas. It's a pretty big list, and while there were a few groups I already listen to (it was nice to see "Toto" make the list - I listened to Hydra last week.  Given when I went to school, I've certainly heard "The sun is the same in a relative way, but you're older. Shorter of breath, and one day closer to death" hundreds of times... (shame on you if you don't know it...)), most of the list was groups I hadn't heard of, which is great.

    It's going to take me a little while to go through all the recommendations and preview (prelisten?) them, but I think I'm going to be hitting half.com for a bunch of new CDs...


Page 1 of 1 (19 items)