Marquee de Sells: Chris's insight outlet via ATOM 1.0 csells on twitter

You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.




"Student who needs to interview a programmer"

Jimmy, a very polite 14-year old student of Washington Manor Middle School in California had an assignment to interview a computer programmer. I have no idea how he found me, but I did my best to help him out.

[jimmy] Thanks for your time! Here are the questions...

[jimmy] How long have you been working in this profession?
[csells] I've been a professional programmer of one kind or another since I was 20 years old, so 17 years.

[jimmy] How did you realize you wanted to be a computer programmer?
[csells] I had three professions in my mind as a child, first magician, then architect and by the time I got my first computer in high school, I decided I wanted to be a programmer. From that point on, I was pretty much a full-time programmer who took time out during the day to go to school.

[jimmy] What kind of education did you have to have?
[csells] BS in Computer Science from the U of MN, MS in Software Engineering from the Oregon Graduate Institute

[jimmy] What are some of the classes you took in High School that maybe helped you in your career choice?
[csells] The course that made me want to become an architect was my Jr. high school drafting courses. The thing that made me want to be a programmer was using first my friend's computer and then mine. By the time I got to my programming classes in high school, I knew much more than the teacher (and, in fact, he would often pull me out of my other courses to fix other people's computer problems).

[jimmy] Tell me about a typical day in this job.
[csells] For the last two years, I've been involved in an "incubation" project at work, which means that I'm in a small group of engineers doing advanced product development thinking. We look at a bunch of problems that developers are having building software on the Microsoft platform and build various experimental pieces of software to see if they would be useful in helping developers build applications that are more secure, more robust and more full-featured, while still helping them to build them faster.

Toward that end, my day is filled with design meetings where we run design ideas past our peers, build our ideas and then try to use them to build applications the way our customers would. I spend about half of each day in verbal and written communication, e.g. meetings, presentations, emails and design documents, and half the day writing code, specifically C#/.NET.

[jimmy] What skills are important to be successful in this position?
[csells] Communication, both written and verbal, customer empathy, logical thinking, debate, compromise and willingness to live with vague, under-specified problems and requirements.

[jimmy] How would you describe the responsibilities of the position?
[csells] With my team, it’s my responsibility to not only generate and try new ideas, but also to push the good ideas into customers' hands. That can include everything from forming my own product team, to forming ad hoc "virtual teams" from existing product groups around the company, to "selling" my ideas to product teams to get them to ship them with their products.

[jimmy] What long and short term problems and opportunities do you think this career faces?
[csells] Short-term, there's a shortage of computer science graduates, so high-tech companies, Microsoft included, are doing what they can to make sure that they attract smart, motivated, educated, experienced software folks. This includes higher salaries, better working conditions and better benefits, all of which is good for folks in this industry.

Long-term, software engineering is changing rapidly, both how we build and apply our development tools and how we turn our craft into an actual engineering discipline. The tools I'm using this year are more full-featured, more rigorous and, at the same time, simpler than the tools I used even a few years ago. I don't anticipate that change slowing down any time soon. We've got a long way to go before we've got a solid set of principles that can make software into the same kind of measured, certifiable activity that engineering fields like civil, electrical and mechanical engineering now enjoy.

[jimmy] What are the positives and negative about being a computer programmer?
[csells]
Pros:

  • flexible work environments
  • fun work (if you like bending a computer to your will)
  • rapidly evolving
  • challenging
  • important – the entire world is being remade by software

Cons:

  • vague requirements from customers that don't really know what they want (but they sure know what they *don't* want...)
  • engineering discipline left up to individuals, leading to a wide-range of software quality
  • lots and lots of work to do, making it very easy to balance the work/home life far away from non-work related activities (all work and no play makes Jimmy a dull boy : ).

[jimmy] Is there anything else about being a computer programmer that you would like to tell me about?
[csells] If you've got the disposition, programming and related software engineering work can be extremely rewarding, not just for the fun and satisfaction of taking control of a tiny virtual universe, but also because of the real difference software has and continues to make on real people's lives. Over the last three decades, I believe that software has literally changed the world for the better and I see that trend accelerating. Bottom line: It's fun, flexibly, in-demand and makes the world a better place -- what could be better than that?

0 comments




The Microsoft "Sells" Department

So, I'm sitting in my office pair programming with Geoff Kizer when my phone rings. It says "Microsoft" on the display, so I figure it's one of my brethren.

"Hello?"

An angry voice replies, "I'm calling you because your technical support sucks and I'm tired of being put on hold!"

"I'm sorry? Are you a Microsoft employee?"

"No! I'm a *customer*! I'm trying to use Windows Vista Ultimate 64-bit and it doesn't work!"

"Oh." Now I'm reaching way, way back into my distant technical phone support past. First, defuse the anger by empathizing with the customer. "Well, on behalf of the 70,000 Microsoft employees, I'd like to apologize." That was a little over the top -- have to dial it down a bit next time...

Second, try to take things back a step and establish a rapport with the customer. "My name is Chris. What's yours?"

Calming down a bit, "John."

"OK, John. I can't claim to know everything there is to know about Vista, but I'll answer your questions if I can."

"How do I get the icons to be smaller on the desktop? No matter what the resolution is, they're always huge! I want them to be small like on XP!"

"Are you at your computer now?"

"Yes."

"OK. I know you can change the icon size on the desktop. Let you look around a little." At this point, I'm opening up the Personalize control panel, finding nothing about desktop icon size. I used the cool narrow-as-you-type Help. Nothing about icon size (although I can change the icons themselves). Now I'm cursing Vista myself. "I don't see it here," I admit to John.

At this point, I look up and notice I've gathered a crowd outside my office, including my boss and his boss, all laughing because a) dealing with angry customers is not the most fun job in the world and b) they're glad it isn't them.

At this point, Mr. Kizer reaches over to my computer, right-clicks on my desktop and shows me the context menu option that actually changes the icon size, which I share with John, making sure he's happy with this solution before moving on.

And move on we did. John has one more problem, which I repeat back to him to make sure I've gotten it right, emphasize with him and try to help him reproduce it. When we can't, I send him an email, asking for some additional data when he is able to reproduce the problem so that I can follow up with a fix, apologizing again for the trouble he's had today, both with Vista and with tech support.

After about 15 minutes, John thanked me and asked me if I was in Sales or Support.

"No. I'm a developer," which was close enough to true for your average person.

He then told me how he got to my phone in the first place. Apparently, he had called the main number and was tired of being put on hold by our support, so he told our voice-recognition system that he wanted to speak to "Sales," I'm guessing to give them a piece of his mind. That day, "Sells" was enough of a match to "Sales" and suddenly, I'm the one talking to John.

At no point during this call did I consider sending John somewhere else for help. He'd already been through our support and didn't like it. I can't make people purchase Microsoft products. I can't make people like Microsoft products. However, that one day with that one customer, I was going to do my best to help one customer to not hate Microsoft. Sometimes that's all you can do and I was proud to do it.

0 comments




Name Sara Williams's Baby Girl

Today, Sara Williams, ex-Developer Relations Group (the folks at MS that were allowed to speak to developers before we had blogs), ex-MSDN head and ex-Microsoftie has given birth this morning to a 5 lb. 4 oz baby girl. Both mother and daughter are doing well (and father is resting fitfully, having lost a month of sleep with the arrival of his daughter a bit earlier than planned).

However, their daughter does not yet have a name and, on the suggestion of Mr. Box, I am soliciting suggestions. If your suggestion is picked, you will be awarded a signed book of your choice (regardless of whether I wrote it or not). Have at it!

0 comments




Programming WPF: Rough Cuts

If you can't wait for Programming WPF to be on the shelves (I know I'm having trouble), then you can read the chapters as we write them. These chapters have not gone through the technical reviewing stage or the copy editing stage, but they've been through the baptism of fire that is co-author review and both Ian and I are nuts for grammar, so they should be pretty readable. Enjoy.

0 comments




Mobile Video Conferencing! I want one!

I gotta get one of these (the video conferencing robot, not the dude)!

0 comments




Using my XBox 360 for Corp. Video Conferencing

I've been having another adventure in social video conferencing, this time with my team in Redmond. It all started with Doug brought his 360 into our new conference room, which is just an office with a coupla white boards, some comfy chairs and a 37" LCD panel for projecting.

Once we got the 360, I purchased a year Live Gold subscription and a live camera for $30, turning it into a video conferencing solution. Now, every morning at scrum, I'm sitting in my living room, telling folks in building 42 what I did yesterday, what I'm doing today and whether I'm blocked or not and they can see as well as hear me. When we go around the room, somebody turns the camera for me and it's my turn when we get to the LCD panel.

You might ask why we don't just use Live Messenger's video support and the answer is -- configuration and hardware. Live Messenger's video just never seems to work out of the box w/ people's s/w and h/w firewalls and even if it did, nobody's got a camera on their laptop. Now, the only thing my team mates need to do to see me is turn on the LCD panel and accept my request for video.

That's not to say that the experience is perfect. I'd love it if the xbox video conferencing:

However, for the $30 incremental cost of the camera + year of live, it's a solution good enough that we're using it more and more. Have I mentioned how much I love my xbox 360?

0 comments




Visual Studio Orcas March 2007 CTP

And the hits they keep on comin':

Enjoy!

0 comments




Lutz Roeder's Reflector 5.0

Need I say more?

0 comments




Detailed Time Zone Data

A long time ago (2000), I was fascinated with turning a phone number into a time zone so I could tell what time it would be somewhere before I called and woke anyone up (this happened too often : ).

As part of that work, I quickly realized that info in Windows for time zones wasn't detailed enough, so I began looking elsewhere. I found the Time Zone Map Group, which maintains time zone data for all over the world backward through time. This is an amazing accomplishment, since they have to account for every law change as each tin pot dictator comes to power, e.g. George W.

At the time, they had a custom format for the data (and they probably still do, as far as I know), so I wrote a utility to translate the tz format into XML for easy parsing. I literally haven't touched the tool since, but with the recent time zone law changes in the US, I thought folks might be interested. Enjoy.

0 comments




Slide your vote in for ScottH's Podcast

I only listen to one podcast, so casting my vote for Hanselminutes on podcast alley's list of top podcasts was a no-brainer.

Plus, when I voted, they had a free sample for K-Y Brand Intrigue, which is apparently the longest lasting premium personal lubricant. The opportunity for jokes here is boundless, so let's start w/ some obvious ones and I'll send a free copy of Programming WPF to the best one in the comments:

Enjoy. : )

0 comments




.NET: Decompressing zip file entries into memory

I knew that the J# libraries in .NET had zip file support, but I couldn't find any samples that showed how to decompress the files into memory. The hard part, of course, is that the J# stream objects aren't the same as the .NET stream objects. If you're a Java programmer looking for a familiar library, that's great, but I'm not, so I had to do a little finagling.

The first thing you need to do is to add a reference to the vjslib assembly, which brings in .NET classes in Java namespaces, e.g. java.io. The one we care most about is java.uti.zip, which includes ZipFile and ZipEntry. We also need java.util for the Enumeration class and java.io for the InputStream class. With these in place, we can enumerate a zip file:

using java.util; // all from vjslib assembly
using java.util.zip;
using java.io;
...
static void Main(string[] args) {
  if( args.Length != 1 ) {
    Console.WriteLine("Usage: dumpzipfileoftextfiles <file>");
    return;
  }

  // we're assuming a zip file full of ASCII text files here
  string filename = args[0];
  ZipFile zip = new ZipFile(filename);

  try {
    // enumerate entries in the zip file
    // NOTE: can't enum via foreach -- Java objects don't support it
    Enumeration entries = zip.entries();
    while( entries.hasMoreElements() ) {
      ZipEntry entry = (ZipEntry)entries.nextElement();

      // read text bytes into an ASCII string
      byte[] bytes = ReadZipBytes(zip, entry);
      string s = ASCIIEncoding.ASCII.GetString(bytes);

      // do something w/ the text
      string entryname = entry.getName();
      Console.WriteLine("{0}:\r\n{1}\r\n", entryname, s);
    }
  }
  finally {
    if( zip != null ) { zip.close(); }
  }
}

Notice the use of the Enumeration object so we can enumerate in the Java style and the use of the ZipFile and ZipEntry types. This is all stuff you could find in readily available online samples (I did). The interesting bit is the ReadZipBytes method:

static byte[] ReadZipBytes(ZipFile zip, ZipEntry entry) {
  // read contents of text stream into bytes
  InputStream instream = zip.getInputStream(entry);
  int size = (int)entry.getSize();
  sbyte[] sbytes = new sbyte[size];

  // read all the bytes into memory
  int offset = 0;
  while( true ) {
    int read = instream.read(sbytes, offset, size - offset);
    if( read == -1 ) { break; }
    offset += read;
  }
  instream.close();

  // this is the magic method for converting signed bytes
  // in unsigned bytes for use with the rest of .NET, e.g.
  // Encoding.GetString(byte[]) or new MemoryStream(byte[])
  return (byte[])(object)sbytes;
}

For those of you familiar with Java, I'm just reading the zip file entry data into an array of signed bytes. However, most .NET APIs like unsigned bytes, e.g. "Encoding.GetString(byte[])" or "new MemoryStream(byte[])", which means you've got to convert a signed array of bytes in .NET to an unsigned array of bytes. Unfortunately, just casting doesn't work (the compiler complains). Even more unfortunately, I could find nothing in the Convert or BitConverter classes to perform this feat of magic and the code I wrote was dog slow, so I asked around internally.

Luckily, James Manning, an MS SDE, had the answer: cast the signed byte array to an object first and then to a unsigned byte array. Thank goodness James knew that, because I didn't find anything on this topic. Hopefully future generations will find this missive.

You can download the sample if you like. Enjoy.

0 comments




Stange But Real Facts

I don't know how many of these are actually real (my left-handed son was very disappointed to hear that he'd be dying 9 years before his right-handed brother), but they were very fun to read with the kids.

P.S. Can you lick your elbow? Tom claims to have a friend that can lick his. He's going to be very popular when he grows up...

0 comments




You Can Help Find Jim Gray

From Dan Rosenfeld of Microsoft Research:

"As some of you may know, our colleague Jim Gray is currently missing, having failed to return from a sailing trip in Northern California. Here's a NYT article discussing Jim's contributions and the efforts to find him.

"I learned from the article that there's an effort on Amazon's Mechanical Turk site which allows volunteers to search satellite imagery for Jim's sailboat.

"You can help by spending a few minutes on the task at this site."

Please spent a few minutes. Thank you.

0 comments




Windows Servers for the rest of us

Charlie Kindel of COM fame (he's wrote the foreword to Don's seminal work "Essential COM") is the Product Unit Manager (softie-speak for "butt on the line") for the new Windows Home Server team. If you haven't heard about it, Home Server is a Windows server box for the rest of us. I don't know about you, but I've got file, print and media servers all over the house in a confusing mess and I look forward to being able to consolidate it. According to the enthusiastic beta tester I talked to, Windows Home Server is the way to do that.

Yesterday, Charlie announced the Windows Home Server Blog. Enjoy.

0 comments




The Potential of WPF/E

Savas turned me onto an amazing WPF/E application. I don't speak the language of the web site, but the screenshot on Savas's site is worth a look...

P.S. I don't smoke (except for the occasional cigar) and I definitely don't want to smell smoke while I eat or in my clothes, but the fact that smokers are no longer allowed to smoke most places strikes me as a violation of an important liberty. Have those studies about the effects of 3rd party smoke been verified?

0 comments




2320 older posts       315 newer posts