spout

August 25, 2003 spout

RSS Bandit Implements wfw:commentRss

Here. Dare released a new version of RSS Bandit that, among other things, implements my RSS extension that exposes comments for an RSS entry via an RSS feed [1]. Dare's implementation is not only *exactly* what I had in mind when I proposed the extension (thanks, Dare!) but I think this also address's Shawn's request from the other day [2]. [1] http://www.sellsbrothers.com/spout/#exposingRssComments [2] http://weblogs.asp.net/shawnmor/posts/24960.aspx
August 23, 2003 spout

In defense of continued innovation at MS

Here. After watching several people complain about the lack of innovation at MS, Franci couldn't take it anymore and weighed in with his dissenting opinion. Thanks, Franci!
August 21, 2003 spout

The .NET Show: Managed Code

Here. "Joining us in this episode will be Brad Abrams and Anders Hejlsberg to discuss the overall architectural issues involved with Managed Code, as well as Nick Hoddap and Chris Sells to show us some of the programming benefits that are gained by using Managed Code."
August 21, 2003 spout writing

VS.NET 2003 + Mastering VS.NET

Here. Buy VS.NET 2003 on Amazon.com and get a special deal on Mastering Visual Studio .NET by Ian Griffiths, Jon Flanders and some other guy...
August 19, 2003 spout

Buffering .NET Console Output

Doing some ad hoc benchmarks, I found that my compute/IO intensive program was significantly slower in .NET than in native C++ (here’s a more rigorous test showing the same thing). However, when the IO was taken out (Console.Write), the test showed that the computation in .NET and in native C++ was nearly the same (with C++ still having a slight edge).

My .NET IO code looked like this:

static void OutputIt(int[] vect) {
  for (int i = 0; i < vect.Length; ++i) {
    if( i > 0 ) Console.Write(”,“);
    Console.Write(vect[i]);
  }
  Console.WriteLine();
}

In tracking down this disparity, Courteney van den Berg noticed that, unlike STL IO streams in native C++, .NET Console output is not buffered. A simple manual buffering using a StringBuilder brings the performance of .NET back in line with native C++:

static void OutputIt(int[] vect) {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < vect.Length; ++i) {
    if( i > 0 ) sb.Append(”,“);
    sb.Append(vect[i]);
  }
  Console.WriteLine(sb);
}

Instead of buffering manually, I could have turned on buffered console IO by reopening console output with a buffer size:

static void Main(string[] args) {
  using( StreamWriter bufferOutput = new StreamWriter(Console.OpenStandardOutput(1024)) ) {
    Console.SetOut(bufferOutput);
    // Use Console.Write (via OutputIt)…
  }
// Remaining buffered Console output flushed
}

// Console output now buffered
static void OutputIt(int[] vect) {
  for (int i = 0; i < vect.Length; ++i) {
    if( i > 0 ) Console.Write(”,“);
    Console.Write(vect[i]);
  }
  Console.WriteLine();
}

Why isn’t Console output buffered by default? Unlike in C++, which has deterministic finalization, in .NET, console output would have to be manually flushed or closed (closing causes a flush). Failure to do so can cause console output to be incomplete at the end of a program. Notice our careful use of the “using” block in the code above, causing the output stream to be closed at the end of the block and the remaining buffered output to be flushed, even in the face of exceptions. Forgetting to use the using” block or forgetting to manually flush or close in a finally block, can cause console output to be lost. Rather than imposing the new burden of manually closing the console output, .NET architects opted to turn off buffering by default, while still letting you turn it on at will.

August 15, 2003 spout

The real goals of marketing?

I’ve long lamented that I have no clue what the basics of marketing are and therefore I’ve been at the mercy of actual marketing people whose skill I can’t judge. In fact, I so miss this important knowledge in my life that I interviewed for a marketing job at Microsoft (although I was in no danger of getting it). A *long* time friend of mine, Dave Stroble, said that I was too “customer-focused” to be in marketing, anyway, and I should be glad I’m not in that field. When I asked how that could be (isn’t customer focus the core of marketing?), he went on to say the following:

Marketing is not about giving the customer what he wants, or even finding out what the customer wants and trying to get engineering to create it. It’s about trying to sell the customer what you already have — whether that’s product, talent, or pre-conceived notions. If the needs of a customer occasionally overlap with an actual product, that’s merely random coincidence.

“Marketing people are customer-focused in the sense of always thinking about why customers aren’t buying enough stuff, and how to get them to buy more. You’re customer-focused in the sense of caring about what customers need, and helping them accomplish it, even if that doesn’t result in selling anything.

But don’t take it so hard. It’s not as if I said you were too honest to be a banker, or too smart to be a teacher. (God, what if girls thought you were too handsome to be sexy?)”

While I find this cleverly stated (even though I’m nowhere near too sexy for girls : ), I sure hope this isn’t the real goal of marketing. My hope is that it’s about taking a solution and letting folks that have the matching problem know so that you can trade your solution for their money and both consider yourselves lucky. Is this a naive view? Anyone with real marketing training want to chime in on the real goals of marketing?

August 12, 2003 spout

I’m no hero

Tuesday, August 12, 2003

In yesterday’s post, I did not mean to imply that I was some kind of internal David against the MS Goliath. I am in the majority of employees when I say that I want to keep in mind what’s best for the customer. The only issues, really, are what is best for the customer and how can those needs be met within the limits of our resources. We do spend quite a bit of time arguing over those, however. : )

August 11, 2003 spout

I speak for the trees

After a few weeks at Microsoft, when I was feeling particularly frazzled with my work and travel schedule, Peter Drayton pulled me aside to reinforce what I’d heard before: the first 6 months at MS suck for everyone; after that, you either hate it forever or you can’t ever imagine working anywhere else. At that point in my budding MS career, I was leaning towards the former. Peter, having been there, said that he’d gotten a piece of advice that had seen him through.

The advice was simple: have an agenda. The idea is, no matter what projects you work on, no matter what groups you go to, no matter what tasks you’re into that day, to have an underlying agenda that pushes you forward and drives your decisions. Businesses call such a thing a vision statement.” Authors call it a story.” Whatever you call it, it’s always helpful to have one and here’s mine:

“Remember what it’s like to not work at Microsoft.”

That’s it. That’s my goal. Of course, as with all things, Dr. Seuss says it better than I can:

I am the Lorax. I speak for the trees. I speak for the trees, for the trees have no tongues.”
I consider it my mission to speak for the thousands of developers that I've known and talked to over the years that have no tongue inside Microsoft.

This came up just this morning on the phone with a colleague of mine at MS. He said, We need to maintain the value of X.” I replied, I don’t care about the value of X. I care about enabling our customers to get the most out of our products.” Of course, there are hundreds of people concerned with X inside of MS and they would be less than happy that I’d dismissed the value of it, but that didn’t matter to me. What mattered was being the kind of developer advocate inside of MS that had helped me when I wasn’t there and to be a constant reminder to my colleagues of the needs of those folks.

Since MS was founded by developers and run by developers (which has its pros and cons), I plan on being more successful than the Lorax.