Scientists are going to try launching paper planes from space? Cool idea, I wish I could get me some of that research money.
I tried this same experiment a few years ago, only it wasn't a paper plane. It was a hamburger wrapper. Oh, and it wasn't from space, it was from the drivers side window of my Jeep. It was a rousing success, the wrapper made it to the ground ok, didn't burn up on re-entry. I wish at that time I'd have used some other material though, as the deputy behind me wrote me the $200 ticket. Maybe if I'd explained it to be an important successful science experiment he'd have let me go.
Hmmm...
BCS Bowls for the SEC?
LSU 41
ND 14
FLA 41
OSU 14
Coincidence??? I think not.
This 'Bama fan's hat is off to the Gators for their great win.
I've been at Microsoft for over a year now, and was really good for the first year about not spending money on tech gadgets. So much so that I was very proud of the savings my wife and I had worked hard to accumulate.
Then came October...
First I bought a Sirius radio for the car (actually, it's for home and car with the home Kit). This finally lets me listen to my Alabama Football when I'm out of Alabama and not connected to the web. A must for any die-hard sports fan who doesn't live in their favorite team's market. I also listen to a lot of varieties of music. I may listen to a little of each classical, swing standards, Hair Bands, Country,.Grunge, and old-school rap on any daily commute to work.
Then I bought a Zune on the 1st day it was available. A lovely brown one. I wanted to do my part to help this be a successful product. Two words. I love this device (ok, maybe more than two words). We all have read or experienced the unique features of Zune, I'm just waiting to be in the area with another one to share some of my musical joy with someone else. Next, I realized that after giving up my old stereo at the house a few months back, I didn't have anything suitable for playing that music in the living room other than my headphones.
So I did what all tech addicted guys with extra money during football season do and bought a new Sharp Aquos 37" LCD tv. WOW! What took me so long to do that. I'm travelling during the week so I only get to see it about three days per week, but what a difference over my old 25" Sony. I would have gotten the 42" but my room is just not big enough to support it without it just completely taking over.
This had hookups I could now plug my Zune, my Sirius sattelite radio, DVD, and still have one input left over since I had just given away my XBox to my younger nephews.
What? Gave away my XBox? and I have extra inputs available? This can't be. So I jumped online and ordered the XBox 360 bundle from the MS company store and received it last weekend. Now, after hooking it up I realized that I don't need that DVD player taking up space in the living room anymore since I can use the XBox 360. That didn't solve my problem. Actually the XBox 360 is really my wifes, as she's the gamer in our family. I wish the game studio folks would get to work on more adventure games that involve more exploration and problem solving, rather than shooting. I'm not against the violence, just not coordinated enough to play well. But a Myst-like game can hook me for hours, days. We need more of that on the 360. It's graphics could do wonders for the experience.
My over all impressions.
Zune is cool. Get one today, and hang out around the MS office in Alpharetta, or Dreamland BBQ so I can send you some music.
LCD HDTV. I won't ever be the same again. Get it now while there are great specials going on.
XBox 360. I can't belive I waited this long to get one. XBox live will too as soon as I get home and set it up. (just need the wireless adapter and it's on order). I don't think I would have liked it as much on a standard width TV though. It's the immersion factor and HD output that makes it cool to me.
Sirius sattelite radio - Perfect for the car (and home). I just wish I could record broadcasts from it and push to my zune (podcast style). I am addicted to Radio Classics on 118.
Can I just say thanks to my wife for letting me go nuts?
I'm already the new Microsoft Live Writer to post to my personal blog, so I thought I'd try it out with my MSDN blog as well. Just to make it interesting, I thought I'd add a quick little post about the decorator pattern.
The decorator pattern is a Gang of Four (GOF) pattern that allows you to add behavior or state to an existing component without modifying the original component.
I've created a code example, and created a class diagram (in Text) to show the structure here.
I have defined an abstract class "BaseComponent" that does some work. It has exactly one method called DoWork. I then created a concrete component called WalkingComponent that inherits the Base Component and overrides the abstract method.
At this point we have a working program, but we want to add new functionality. Here's where the fun begins.
We can create another inheritor of BaseComponent that knows it's a decorator. the code for the Decorator class is below.
abstract class Decorator : BaseComponent
{
protected BaseComponent component;
public Decorator(BaseComponent component)
{
this.component = component;
}
public override void DoWork()
{
if (null != component)
{
component.DoWork();
}
}
}
The decorator class contains a field of the BaseComponent type. It wraps the functionality of that class (some or all methods). In it's override of DoWork, it first checks to see if it's component is null, then calls the components DoWork method. We've just successfully created an Abstract decorator for the BaseComponent.
Next we'll add a decorator with state. This is a very trivial example. Here's the code. We've added a property called NewState to hold a string value that we can read later if we need to. Here's the code.
class DecoratorWithState : Decorator
{
public DecoratorWithState(BaseComponent component)
: base(component) { }
private string newState;
public string NewState
{
get { return newState; }
}
public override void DoWork()
{
base.DoWork();
newState = "Windows Mobile Phone";
Console.WriteLine("I've brought my {0} with me.", newState);
}
}
Whew, that was easy...
Now we're going to add some behavior with a new class called DecoratorWithAddedBehavior. Here's the code.
class DecoratorWithAddedBehavior : Decorator
{
public DecoratorWithAddedBehavior(BaseComponent component)
: base(component) { }
public override void DoWork()
{
base.DoWork();
DoAdditionalWork();
Console.WriteLine("I'm finished. I'm headed home.");
}
void DoAdditionalWork()
{
if (component is DecoratorWithState)
{
DecoratorWithState stateful = (DecoratorWithState)component;
Console.WriteLine("I have email on my {0}. I'm stopping to read it.", stateful.NewState);
}
else
Console.WriteLine("I'm tired, think I'll take a break.");
}
}
Ok, this one gets a little tricky, because I'm trying to get tricky. I'm mixing concepts here, and probably shouldn't but it's my post, and I can do as I please... :-)
I've added the DoAdditonalWork method to my class. When a caller calls my DoWork method, they will still call down the chain of components, execute each one, but I've injected my new method here to in this case "take a break". If the component passed to me is a DecoratorWithState, I'm going to use some of that state. If not, I'm just going to do a simple Console.WriteLine().
Anyway, to run this sample, we're going to use a few factory methods, that will create our component stacks for us. Here's the "Program" class code.
class Program
{
static void Main()
{
// basic funtionality
BaseComponent decorator = GetMyBaseComponent();
Console.WriteLine("Concrete Component");
decorator.DoWork();
Console.WriteLine();
// added some state
decorator = GetStatefulComponent();
Console.WriteLine("Stateful Component");
decorator.DoWork();
Console.WriteLine();
// added some additional behavior
decorator = GetAddedBehaviorComponent();
Console.WriteLine("Added Behavior Component");
decorator.DoWork();
Console.WriteLine();
Console.ReadLine();
}
// factory methods
static BaseComponent GetMyBaseComponent()
{
WalkingComponent component = new WalkingComponent();
return component;
}
// factory method (could easily be an abstract factory, but thats a whole other article.
static BaseComponent GetStatefulComponent()
{
return new DecoratorWithState(GetMyBaseComponent());
}
// factory method (could easily be an abstract factory, but thats a whole other article.
static BaseComponent GetAddedBehaviorComponent()
{
return new DecoratorWithAddedBehavior(GetStatefulComponent());
}
}
Ok, that's just about it. The last thing to do is show the output of this excercise...

Yesterday was the Atlanta, GA code camp. We had a pretty good turnout, a good venue (DeVry University) good meal of hamburgers, hot dogs, spicy grilled chicken made outside on the grill (as the good lord intended).
I attended last year's code camp and was really blown away at how good a free one-day conference could be. But this year was different, instead of sitting by and enjoying the benefits, I helped contribute by giving one of the presentations. "Diagnosing Code Smells and Refactoring Them Away". I present in conference rooms, and have given training to my team before, but this was people I didn't know. Now I hope to know a few of them, as I thought we had some good Q&A going before the end of the session.
As this was my first "community" presentation, I hope it was acceptable. If you were there, please let me hear from you.
Speaking in Public Lessons learned:
- Look around before you begin to see if some wonderful person has left you some water near the rostrum. (I found it after the presentation, and needed it almost immediately upon starting.)
- Wait until the crowd has arrived before beginning. I started at 5 minutes after the start time, but 5 minutes later, the class size over tripled, all at once... I guess one of the other classes overflowed, and they sent them away. :-) Anyway, I simply backed up, and made the on-time attenders suffer through my first 5 minutes again (although slightly less embellished).
- Don't code on the fly and try to invent new demos in front of the crowd. It will expose your inability to type. (usually I type quite well, strange)