Languishing

July 8th, 2008

Sometimes I just do not understand Microsoft. Windows Media Center is a very good DVR/front end, and pound for pound, arguably the best out there right now. It is easy to set up, simple to use, and aesthetically pleasing. And Microsoft claims that it is an important part in their "living room experience," yet they have barely done anything to support it.

Media Center is basically the exact same thing that was introduced back in 2003. Yes the UI has been updated, and some things have been added, but the main selling points are the same. It’s seen about the same level of commitment as Vista’s "Ultimate Extras."

What could be done to help right the ship? Firstly is the whole "Internet TV" thing. Hulu.com is awesome, and would be a killer feature if it were built into Media Center. Netflix’s Watch Instantly is similar, and already has a 3rd Party plugin, but should be bought or re-created in-house.

The second is to focus on one product. The truly amazing thing is just how many separate technologies Microsoft is developing that do the same thing. MSN TV is a set top box designed for streaming television over the Internet. Media Room has nearly the same feature set as Media Center, and a confusing name to boot. Has anybody even heard of these products?

Additionally, they need to move Media Center to the living room. The Xbox is just too hot and loud, and Extenders are still poorly designed and ugly. If Microsoft could release a set-top box that functioned as a complete Media Center, without the need for a PC, they would have a killer product. Give it a modest hard drive (say 80 gigs) with the option to stream to and from a networked PC. Give it DVR functionality, Flickr, Hulu, Netflix, Joost (maybe), YouTube, and Rhapsody or a similar music streaming service. Dump the worthless and clumsy "stores" that are currently offered: MovieLink, CinemaNow, etc, and tie it into the Xbox Live store. Sell it for $250 - $300 and you’d have an amazing product that would sell very well if marketed properly. I’d buy one anyway.

Of course, the cynic in me sees this happening instead: someone (probably Apple, since they’ve already done it, several times) swooping in and releasing that product and stealing their lunch. Microsoft tries to do something similar, but can’t keep up (eg. Zune) and fails for several years before pulling the plug.

One of my favorite quotes

March 11th, 2008

"You can safely assume that you’ve created God in your own image when it turns out that God hates all the same people you do."

– Anne Lamott

WPF Margins

February 13th, 2008

Since Intellisense doesn’t tell you this, here is a quick reminder for what each of the values in the Margin attribute do:

Margin="left,top,right,bottom"

Command Central

October 31st, 2007

This is what my desk looked like about a week ago:
Desk Pre-Organization

As my wife can attest, I had become a little disgruntled with the whole thing, since there wasn’t any extra space to actually do anything. So, I did something about it:
Desk Post-Organization

I got a small shelf thing from IKEA and put the monitors and laptop on top of it, freeing up a ton of space. I use Synergy to allow me to use the same mouse and keyboard on both the desktop and laptop. I still need to work on the wiring a bit to make it extra pretty, but I definitely enjoy it more.

More notes on the desk at Flickr

TFS Uncertainties

September 26th, 2007

It is generally a Bad Thingtm when I am presented with a dialog from a source control management system and am not sure which button to click that will not destroy all of the changes I have made. Especially when there is no option to branch/shelve these changes just in case I do something stupid.

Take my picture

September 21st, 2007

An interesting [to me anyway] observation - When asking someone to take a picture of me with my camera:

4 years ago - With a point & shoot - Now, it’s digital so just look at the screen.

Today - With an SLR - No, you have to look through the viewfinder. No really, that screen is going to stay black. Yes, like a real camera.

FogBugz For Free

September 15th, 2007

One of my favorite tech/programming blogs has been Joel Spolsky’s Joel On Software. I’ve also been interested in his company’s premier product, FogBugz, but the $129+ license fee turned away small time developers like myself.

Recently, they put together a version of FogBugz that is 100% hosted by Fog Creek’s servers, and included a “startup and student” version, which is free. It is limited to only 2 users, but last I checked, I was only using about 50% of that limit.

FogBugz Kiwi

To take part, first sign up for a normal On Demand account. You do have to provide credit card info, but nothing is billed for 45 days, and you’ll be switching immediately. Once everything is initialized, you can change your account to the free version in Settings > Your FogBugz On Demand Account.

I’ve only given it a cursory glance, but I like what I see. It looks very intuitive and powerful. Big thanks to the Fog Creek guys for removing the cost barrier for people like me! I’ll definitely be recommending it to others.

Big msbuild gotcha

September 13th, 2007

Msbuild is not necessarily a “real” component of TFS, but it is heavily integrated throughout its build system (as well as Visual Studio 2005), so I’ll be recording my thoughts on it as well. It seems to be better than NAnt, a similar open source product, in most regards, but I have spent the better part of a day getting to the bottom of one of its maddening quirks.

You can define an <ItemGroup> consisting of files that you can copy, zip up, or do whatever you want with, but the collection it will only be evaluated at the initialization of the script!

For example, say you need to deploy all the files compiled by a solution, and then do something else with the binaries. Your build script may look something like this:

<ItemGroup>
	<WebDeploy Exclude="@(ExcludedTypes)" Include="**\**">
	<BinDeploy Include="$(DeployDir)\bin\*.dll">
</ItemGroup>

<Target DependsOn="Compile" Name="Deploy">
	<Copy DestinationFolder="$(DeployDir)\%(RecursiveDir)" SourceFiles="@(WebDeploy)">
	<Copy DestinationFolder="$(BinDeployFolder)" SourceFiles="@(BinDeploy)">
</Target>

The @(BinDeploy) group will evaluate at the start of the script. This means that if you have a “clean” folder setup, the group will be empty, even after the Copy task has been executed. Additionally, if you run the script a second time without deleting the contents of the $(DeployDir), the script will happily copy over the prior build’s binaries (even if a Delete task has “deleted” them, and they’ve been “replaced” by a fresh compile).

To fix this problem, you need to use the CreateItem task:

<ItemGroup>
	<WebDeploy Exclude="@(ExcludedTypes)" Include="**\**">

<Target DependsOn="Compile" Name="Deploy">
	<Copy DestinationFolder="$(DeployDir)\%(RecursiveDir)" SourceFiles="@(WebDeploy)">
	<CreateItem Include="$(PathToCompiledBinaries)\*.dll">
		<Output ItemName="BinDeploy" TaskParameter="Include" />
	</CreateItem>
	<Copy DestinationFolder="$(BinDeployFolder)" SourceFiles="@(BinDeploy)">
</Target>

This will guarantee that @(BinDeploy) isn’t created until there are files for it. Do note that this “feature” happens for everything that uses ItemGroups this way; it’s not just limited to the Copy task. 

A musical mind

September 6th, 2007

Back when I was a teenager, a CD was a sort of precious commodity. As with most of my peers, I didn’t have a ton of money, so shelling out $12-$15 per album was considered an investment; if you ended up with a CD that was barely worth a single listen, you couldn’t help but feel like you had been mugged. I think ending up with a crummy CD ranked up there with bombing the SAT’s in terms of high school worries.

Since I was essentially hording music like a miser hordes gold, I listened to the same CD’s over and over. One side effect of this was that my brain’s internal catalogue of music became exceptionally indexed and fast. I remember playing a game with a friend: pick any of my CD’s (around 80 or so at the time) and play a random track for 5 seconds, and I’ll name the artist/album/song/probably even the lead singer.

Eventually, this ability waned. These days I’ll find myself hearing a song that I know I own, but can’t remember the band playing it. The CD changed from being an investment to a legacy technology. I haven’t purchased a real CD in RIP Compact Discsover a year; everything has been digital. My collection has grown to over 11,000 songs, and if I find even that number is too little, adding to it is trivial in both time and money. 

I wonder then, do I enjoy this new way of mass consumption more than the old, or should I be taking the time to smell the roses? Sometimes I do wish that I still had my freakishly encyclopedic knowledge of music, but I don’t think I’m ready to give up the sheer quantity of it all just yet.

I don’t think that is really the copout that it seems to be though. Thanks in part to cheap digital media, I can find quality faster. Before the Internet, I had to wait for magazine reviews to find out if an album was any good (and trust that the reviewer shared similar tastes as me) or depend on word of mouth. Nowadays I can listen to parts or entire tracks without leaving my chair.

So, I guess this is one of those rarer situations where you can have both quantity and quality. Though, I should probably take the time to enjoy more of what I have rather than always being on the watch for my next download.

“Throwaway” dummy text

September 6th, 2007

Why you shouldn’t be too outlandish in the garbage text you create when debugging an email script: there may be someone else in the company that has the same name as you, and only a ‘.’ differentiates the address. The “other” Scott Williams was cool about it though. Fortunately I didn’t fill the body of the email with random profanities or compromising pictures of myself.