home & news
DSL DevCon
interviews
tools
the spout
writing
fun
colophon
contact
off topic

 

Google

 

Marquee de Sells Archive

 Current news

MGraph Visualizer Plug-in for Intellipad!

Ceyhun Ciper is at it again, this time taking advantage of the Intellipad plug-in capabilities in the "Oslo" May 2009 CTP and adding real-time "M" visualization as you type. This is a wonderful way to see both the textual and graphic abstract symbol tree of your data as you type it. Keep up the good work, Ceyhun!

Monday, June 29, 2009 2:38 PM  (0 Replies)

JavaScript implementation of "M"

Matthew Wilson is pushing "M" into the land of browser client-side scripting with his partial (but growing!) JavaScript implementation, as seen in his web 3-pane "M" grammar mode ala Intellipad. It's work like this that could make "M" a cross-platform solution for languages as well as data types and values. Good job, Matt!

Wednesday, June 24, 2009 9:43 AM  (0 Replies)

Deep Fried Bytes: Shawn Wildermuth on "Oslo"

Keith and Woody speak with the first repeat guest of the podcast, Shawn Wildermuth about Oslo and the M language.  In this episode listeners will get some real world examples and use cases for using Oslo and M along with a clearer understanding about DSLs and what the future may hold.


Be warned, this podcast uses the phrase "bowled shrimp." : )

Tuesday, June 23, 2009 4:09 PM  (2 Replies)

Need a visualization of "M" in your programs?


If you want to display "M" languages or values, Ceyhun Ciper from sixpairs.com has got you covered with the MGraph Object Model Display Library for WPF. It's as simple as this:

Canvas canvas = new ObjectModel().Display(
"Person {Name=>'Ciper', 47, 'sixpairs\n.com'}");

Sweet!

Tuesday, June 23, 2009 7:48 AM  (0 Replies)

From DSLs & Models to “Quadrant” w/ “Oslo” May CTP

Dana Kaufman, a PM on the extended "Oslo" team, has been blogging a series of articles on the definition of a set of "M" types, the associated "M" language definition for a domain-specific language (DSL) and concluding in how that data can be visualized and manipulated in "Quadrant" (the first two parts are available now and the third is coming). Enjoy!

Tuesday, June 09, 2009 11:37 AM  (0 Replies)

Actipro's SyntaxEditor Adds Support for "Oslo"!

Do you like Intellipad so much that you want to host it? If so, than you need Actipro's SyntaxEditor, which is not only a kick-butt syntax highlighting editor, but can be completely driven by an "Oslo" language definition in a .mg file. The demo is free and one of the samples is a fun little Intellipad clone. Check it out!

Thursday, June 04, 2009 5:43 PM  (0 Replies)

Helping to set up fireworks for the 4th of July?

Last year right after the 4th of July, one of my kind readers offered to let the me and the boys help set up and set off this year's 4th of July show in or around Portland. However, I can't find who offered. If that kind reader is still out there, can you drop me a line? I'm sure my 60-year-old father would like to help, too. Thanks!

Wednesday, June 03, 2009 3:31 PM  (1 Replies)

MGDisplay: Visualize Parsed "Oslo" Grammars


I love our customers. They do things like take our bits and produce MGDisplay, a tool written by Ceyhun Ciper for visualizing the parse tree produced by parsing a DSL instance document with a "M" language definition. Enjoy!

Friday, May 29, 2009 8:39 AM  (1 Replies)

Questions from Pinky on "Oslo"

Jeff Pinkston, the lead program manager on the "M" languages team has some questions that he'd love your feedback on:



The "Oslo" team is just at the beginning of our last real milestone before the PDC in November, so the answers to these questions help us to decide how to spend our time. I know that it seems like Microsoft has the ability to crank out the great works of Shakespeare, but we're limited by time and resources, too, so if you have an opinion on these questions, drop by Pinky's place and let him know what you think. Or, if you've got other suggestions about how to improve "Oslo", drop them into our suggestion box!

Thursday, May 28, 2009 3:21 PM  (0 Replies)

"'Oslo', the May CTP and You" at the PDX Code Camp

I'll be speaking at the Portland Code Camp on Saturday, May 30th, just as the May CTP of "Oslo" is hot off the presses:



As you may or may not know, "Oslo" is also a place. However, we're not going to talk about that. Instead, Chris Sells, a member of the technical staff on the Microsoft "Oslo" team, is going to give you a quick intro to "Oslo," including "M" and Quadrant, taking you end-to-end on a few real-world-ish examples and then wave his hands furiously about the rest, begging you to give it a try and complain loudly and often so we can get it right before we ship v1.0.


Come one, come all! Bring a friend and get a free GUID!

Wednesday, May 27, 2009 5:08 PM  (0 Replies)

Oslo May 2009 CTP Available Now

The May 2009 CTP of "Oslo" available on the Developer Center contains a new unified setup, an Intellipad with an integrated DSL authoring mode, the UML domain and the CLR domain, a slimmed-down SDK with the samples and the documents available on the DevCenter, a unified tool set for the "M" language and, the one that folks have been most anticipating, Quadrant.


For more details about what's new, check out the letter from Kraig and Kent and the release notes. Also, in the coming weeks and months, Kraig and Kent have a pipeline of content for the DevCenter to keep you informed about how we're using "Oslo" and how you can use it better. If you've got suggestions, please use the Connect site and don't hesitate to post your questions on the forum.


Enjoy!

Tuesday, May 26, 2009 7:26 PM  (14 Replies)

Flinging My 60-year-old Mother High Into The Air

My mom came to visit to celebrate my 40th birthday and her 60th birthday. She and the Sells Brothers and I spent yesterday afternoon wandering along the waterfront, checking out exotic animals, ditching lame cowboy comedians and eating elephant ears. And then, to put a point on the day, we launched ourselves 100 feet into the air on a giant bungle cord machine.




As part of this, my eldest son decided at the peak of our arch to spit in spite of my objections. You can see in the video us reacting to our falling at the same rate at his glob of saliva which is the clearest demonstration of Galileo's gravity experiment from the top of the Leaning Tower of Pisa that I've ever seen.


Enjoy. We did. : )

Tuesday, May 26, 2009 11:30 AM  (0 Replies)

"Olso": Hot or Not?


A coupla weeks ago, I did two days with of meeting, greeting, talking and interviewing at a Dutch company in The Netherlands named Sioux. They do a conference with the politically incorrect name of “Hot or Not,” which includes an even more politically incorrect picture of two women as part of their advertising, one lovely and one… less so. They have done this conference 12 times before (I was lucky number 13, just like Bilbo) and the goal is to have someone known for a particular technology come and give a talk, e.g. Alan Cox on Linux, and then rate the technology as “Hot” or “Not.” Since they couldn’t get someone good for Oslo, they had to settle for me.


I spent day one having lunch with the Sioux engineers who were very insightful in their questions about how models fit into their process (all kinds of ways), how it works for embedded systems (XML generation), how it works across platforms (MSC and OSP, baby!), etc. After lunch, I had time to work on my demos and slides (whew) and play with a desktop electron microscope. We must’ve spent an hour looking through fly parts at 26,000 times magnification. They build seriously cool software at Sioux!


My “Oslo” talk was 2.5 hours long with a 30 minute cocktail break. I thought the Dutch were loud before the alcohol was served, but that was nothing… : )  There were 120 attendees in the room they’d set aside for me, and they’d turned away another 60 more that had wanted to come. I did Don Box and Doug Purdy’s “Lap Around Oslo” talk with a German twist (“this picture of the Fairytale Castle is a model, not the castle itself”), David Langworthy’s M talk (“let’s parse a simple sentence”) and showed off Spork, WIX, MUrl and MService. The audience’s questions were even more insightful, e.g. what about schema versioning? Why a new language? How do you debug a declarative language? Can I embed languages in each other? What if I want to use an M language without a database at all?


At the end, I was awarded a book on Dutch culture (very useful! Now I know why the bicycles throw themselves in front of my car and why it wasn’t such a big deal as I thought for me to have to drive up on the sidewalk a little…). And then, without so much as a courtesy screen, the vote was called right in front of me – thumbs up, Oslo “hot” or “not?” I was to learn later that this is a serious thing – they’ve rated at least one technology as only 30% hot.


Luckily for my pride and my continued employment, Oslo was rated 98% hot. That made the magazine interviewing the next day much less embarrassing I’ll tell you!

Tuesday, May 12, 2009 4:51 PM  (2 Replies)

James Clark Getting Involved in M

James Clark, the father of the world's fastest XML parser (according to his bio) is helping us with M on the M Specification Community. He had some initial thoughts that I thought were interesting. I'm sooo glad he's keeping us honest!

Thursday, May 07, 2009 12:08 PM  (0 Replies)

Dutch "Computable" Interviews Chris Sells on Oslo


The translation from Dutch is pretty good: "The better you can describe applications in models, the less code you need to write and the more transparency you provide to developers and others." Computable spoke with Chris Sells. De programmamanager van de Connected Systems Divisie van Microsoft was in Nederland voor een Hot-or-Not lezing, georganiseerd door Sioux. The program manager of the Connected Systems Division of Microsoft in the Netherlands for a Hot-or-Not reading, organized by Sioux.


But they chose the strangest picture...

Tuesday, May 05, 2009 11:00 AM  (2 Replies)

Joel Spolsky talks about Wasabi: His FogBugz DSL

In Scott Hanselman's April 2009 podcast, Visiting Fog Creek Software and Joel Spolsky, Joel talks about Wasabi, FogCreek's VBScript compiler, and he talks about it really being a subset of VBScript used specifically for bringing FogBugz to Unix and the CLR. In fact, it's a VBScript compiler built specifically to compile a single application, doing things like making the 5% of ADO.NET they use cross-platform. And just in case the point isn't completely obvious, Joel and Scott draw the conclusion for us: Wasabi is the domain-specific language just for FogBugz. Just another DSL in nature.

Sunday, May 03, 2009 9:45 AM  (0 Replies)

CodeCast: Oslo and M with Paul Vick

Our own Paul Vick is on CodeCast: The Late Night Show for .NET Developers, with your hosts Ken Levy, Gary Short, and Markus Egger. Enjoy!

Friday, April 17, 2009 1:24 PM  (0 Replies)

Win7 killed a feature I love in Vista!


All my friends have updated to Windows 7. My 14-year old son is running Win7. I'm the only one I know that's not running Windows 7. The reason? Windows 7 took away a feature I use all the time, as shown on the right: Search the Internet.


Here's what I do all day, every day in Vista: Ctrl+Esc to bring up the Start menu, then I start typing. If I'm searching on my HD, I immediately get matches and I can choose one with just the arrows and the Enter key. If I'm typing in the name of a program in the Start menu, I get those matches and choose one. If I want "calc" or "notepad" I can just type those and those work.


However, 80% of the time, I want to search the internet, so enter my search term, optionally including attributes like "site:", I press, down-arrow once, highlight "Search the Internet" and press Enter. This brings up my default browser with my search results in my default search engine without me having to move the mouse or open the browser and wait for the home page or even decide where I want the search results to come from until after I've entered my search phrase.


And they took it out of Windows 7. : (


I logged the bug and heard nothing.


Does anyone know of I 3rd party program I can run that will work exactly like the Vista Start menu under Windows 7? Please?

Friday, April 17, 2009 11:43 AM  (12 Replies)

Twitter takes a bite out of blogs


At the last DevCon in 2003, blogging was rampant. We had about 100 posts in the lead up to the conference and during the conference itself.


A this year's DSL DevCon, there's a ton of buzz, but almost none of it is in the blogosphere. Instead, it's all in Twitter.Last I checked, it was more than 150 tweets and we're still on the first talk of the 2nd day (and day #1 was only a half day).


The worm has turned.

Friday, April 17, 2009 9:24 AM  (0 Replies)

Three "Oslo" Talks at VSLive in June!

This year's VSLive in Las Vegas (June 8-11), has three, count 'em three, "Oslo" talks! (And a Dublin talk to boot.) Just a few months ago, the "Oslo" team was giving all the talks and now there are so many of them I have to hear about them on the street! Our baby grew up so fast...


And as if that weren't enough, Jon Flanders gave me a code for a discount:



"If you register with code S9V10 you can get and all-access Passport Package for just $1,295, a savings of $400.00 off the standard price of $1,695."


I know I loved MIX in Vegas last month and I'm jealous I don't get to go back in June. Put some money down on 22 for me!

Saturday, April 11, 2009 6:37 PM  (0 Replies)

Real-World Credit Card Validation Rules w/ "Oslo"

This is a wonderful article on the use of an "M" grammar to parse a set of rules specific to credit card validation and then parse those rules at run-time to drive a framework for doing the validation itself. The article does a marvelous job of motivating the use of a custom DSL for construction and validation by non-engineers and then lays out the entire grammar and C# loader code. Recommended.

Wednesday, April 01, 2009 7:53 AM  (1 Replies)

Run your house with Oslo!

Kris Horrocks in our marketing team is using Oslo to run his house via X10. He's got two posts on it and it's damn cool! Hmmm... How much to get X10 at my house...

Wednesday, April 01, 2009 6:33 AM  (0 Replies)

DSL DevCon: More Attendees Than Ever

This year's DevCon for DSLs has 25% more attendees than any other previous DevCon. In this economy, I'm amazed by this.


And it's not just people from the US or even the Pacific Northwest. Not only do we have people from all over the country, but folks are coming from Canada, the UK, Scotland, France, South America and one attendee, Tomas Petricek, a student at Charles University, is coming from the Czech Republic.


Luckily, as we slide into home, there are still a scant few seats left if you'd like to register, but be quick before they're all gone!


I so miss this conference. Why don't I do this more often?!

Monday, March 30, 2009 7:38 AM  (3 Replies)

InfoQ: Oslo news and content

The nice folks over at InfoQ have been building up some Oslo content and reporting on Oslo news. Check it out!

Thursday, March 26, 2009 6:01 PM  (0 Replies)

Watch the Oslo Mix '09 Talk: Developing RESTful Services and Clients with "M"

Learn how Web developers can use "M", a new language for describing data, metadata and domain specific languages, to enhance RESTful services like HTTP, JSON, RSS/Atom, and more. Also see how "M" can be used on premise or in the cloud to achieve greater development productivity and to create more compelling customer experiences. Speakers: Douglas Purdy & Chris Sells

Monday, March 23, 2009 2:57 PM  (0 Replies)

Don’t Miss Doug and Chris Doing Their Mix ‘09 Talk Oslo-Style

Doug Purdy and Chris Sells will be giving their Mix '09 talk on Friday, March 20th at 9am in San Polo 3501. Doug will be talking about RESTful services and clients using "M", the language of "Oslo". Chris will be typing furiously trying to keep up. Come one, come all! Plus, free hugs from Doug to anyone that mentions this post!

Wednesday, March 18, 2009 8:09 PM  (0 Replies)

Why I Hate My iPhone


I've had an iphone for the last coupla weeks and there are some things that drive me crazy about it!



  • The battery life is crazy short. I can't make it more than 6 hours on a charge. Good lord!

  • Pandora, an app I dearly love, can't run in the background like the ipod app, so I can't do SMS, email, check my calendar, etc. while I'm listening. Are you kidding me?

  • There's no tactile feedback on the keyboard, although the auto-correct is amazing ("let go, let iphone!").

  • There's no copy-paste. I've never used a smart phone that did, but I soooo want this feature!

  • There's no free out-of-the-box app for using my iphone as a laptop modem, which is something I really loved about my T-Mobile Dash.

  • I used to be able to use my T-Mobile account to get free wifi at Starbucks. Can I do the same with my AT&T account? I have the unlimited data option.

  • There's no turn-by-turn directions on the map app and easy re-routing when I go off route. It's so close; let's go all the way!

And all of that pales in comparison to the single worst deficiency in the app-suite of the iphone for which I've found no good work-arounds; the calendar app is nearly worthless in a business environment:



  • There is no snooze, so I can't set an alert for 15 minutes and then 5 minutes before, then at the time, etc. In a meeting driven environment like Microsoft, the lack of snooze means that I'm actually missing meetings.

  • There is no way to invite other people to events. Further, if I create an event via Exchange so I can invite someone, I can't edit it on the iPhone.

  • I can't do a Reply All to an event to ask a question or let folks know I'm running a little late.

  • There is no detection of phone numbers or addresses in event locations or the body, which means I get no integration with the phone or map apps. This means that I'm memorizing phone numbers and addresses stored in events so I can enter them manually. I have a smart phone so I don't have to remember this stuff!

  • My appointments don't show on the home screen, so I have to constantly check the calendar app to see what my day is going to look like.

The calendar app is the single thing that makes me miss my Dash. Someone please tell me there's a workaround to these issues! I'll pay!


The reason I list the things I hate about my iphone is because the list of things I love about it would be impossible to enumerate. I had a T-Mobile Dash for years and it went with me everywhere. It was as big a boost in my electronic lifestyle as my first laptop. After having a smart phone for contacts, email, music and surfing the web, I couldn't go back. Plus, I loved the Dash so much that I'd try a new phone every 6 months or so and then bring it back because it just didn't compare.


On the other hand, the iPhone replaced my Dash in 24 hours. I've been twittering iPhone development related apps. I've purchased iphone charing cables for everywhere in my life where I sit for more than 5 minutes. I want to integrate my iphone as closely into my car as possible.


They will pry my iphone out of my cold dead hands.

Sunday, March 15, 2009 10:34 AM  (9 Replies)

How I learned to Stop Worrying and Love the Twitter


Scott Hanselman performed an intervention on me in the mall the other day. I was in denial and while I can't say I'm fully into acceptance, I'm at least past anger. : )


It took Scott 90 minutes and I fought him every step of the way, but I think I finally have a handle on what Twitter is. I've heard it described as a "24-hour virtual cocktail party," which always turned me off. I'll take a lake of fire any day over more than three strangers in a room with which I share no common task and with whom I'm expected to socialize. Making that into a 24-hour thing and including everyone in the world does not make this more attractive to me.


And while that is one valid way to describe Twitter, the more attractive way for me to thing about it is as a single global chat room with conventions and tools to pull out the bits and pieces you want, i.e. the people to which you want to listen, the topics you care about, etc.


Except that's not right, either.


Instead, it's more like a poetry reading in a hippy bar where you're up on stage saying whatever comes into your head and the audience is generally ignoring you (because they're also on their own stage) except occasionally when they holler "yeah man! right on!" back at the stage.


And why is that cool?


Well, I can't speak for anyone else, but until Scott turned the light on in my head, it wasn't. Now I check Twitter (via TweetDeck) half a dozen times a day looking for direct messages first, then replies, then new search results (I search on my name, Oslo and DSL right now), then whatever's on top of my "All Friends." When I find someone that says something interesting about a topic I like, I follow them for a while til I decide they're saying mostly stuff I'm not interested in and then I unfollow.


The whole thing feels very much like what we used to do in email ("Look! Cute kiddie pictures!") and then in blogs ("Look! I have a blog!") before we figured out how to use it and what it was really for. I can't say I really know what Twitter is for yet, although I've been following Scott's advice, i.e. bigger, permanent stuff goes into blogs, transient stuff to a few people goes into email and transient stuff that goes to the hippy bar audience (i.e. the world) goes into Twitter.


I'm still very much learning and hardly anyone is following me (@csells), but that's OK. I'm already finding out who's in the Oslo community and have had lots of useful stuff on personal topics, too, e.g. sharing my iPhone love/hate.


Also, I have to say that I really love the social aspect -- I'm working alone at my house a lot and it's nice to have the world listening to every fool thing that comes into my head. : )

Saturday, March 14, 2009 11:12 AM  (4 Replies)

Intro to Oslo in Dutch

My Dutch is a little rusty, but RJ's Intro to Oslo screencast looks great to me. Good work, RJ.

Saturday, March 14, 2009 10:45 AM  (0 Replies)

Preview of Doug's "M" RESTful Services Talk at Mix

Scott Hanselman got a preview of the talk that Doug is giving at Mix this year on RESTful services using "M", took some screen shots and did a nice write-up. Worth a quick look-over even if you're coming to the talk (which will be a hoot -- I'll be carrying Doug's bags on this one : ).

Thursday, March 12, 2009 7:09 PM  (0 Replies)

BizTalk Application Deployment DSL

Yossi Dahan has posted a most excellent DSL for building BizTalk application deployment scripts. Plus, he's created a most excellent project on codeplex for his bits. Most excellent!

Thursday, March 12, 2009 6:32 PM  (0 Replies)

OsloTool: GUI for the command line Oslo tools

Bryan Sumter has posted a GUI app he built to run the Oslo command line tools for him:



I'd love to see this integrated into Intellipad, Bryan!

Friday, March 06, 2009 2:30 PM  (2 Replies)

Did you register for the DSL DevCon and not hear back?

Apparently even more people have registered for the DSL DevCon than I thought. If you've sent a registration notice and having heard back from me, then you aren't registered. Please register again or email me directly: csells@microsoft.com.

Thursday, March 05, 2009 10:32 AM  (0 Replies)

Self-Modifying DSL from Savas

Leave it to Savas to invent a self-modifying DSL in MGrammar. You go, Savas! : )

Thursday, March 05, 2009 9:07 AM  (0 Replies)

January 2009 "Oslo" SDK Refresh

The "Oslo" team heard you! There was some "regression in the quality of the bits" in the Jan CTP from the PDC CTP that affected you guys in our 3-pane mode for grammar editing in Intellipad (aka the bits are worse than they used to be). It was just a sample, but it's so so useful, that language developers are using the hell out of it, which means they're running into "performance and robustness issues" (which means it was slow and crashed) and we've fixed the worst ones in the January 2009 "Oslo" SDK Refresh.


You have to uninstall the three things that are called "Oslo" before you install and there are no new features or other changes -- this is just to make the 3-pane mode better.


Please bang on it, ask your questions and report your issues. Thanks!


Oh, and 3-pane mode will be an official part of the product in future CTPs, so it will receive the same testing love as the rest of the project. We heard you!

Wednesday, March 04, 2009 2:37 PM  (0 Replies)

DSL DevCon: The 13th Talk

Magnus Christerson, the Vice President of Product Management from Intentional Software Corp, founded by Charles Simonyi, is giving the very last talk at the DSL DevCon, so make sure to stick around!


Also, seats are filling up FAST, faster than any of the other DevCons. Make sure to register now if you're coming! And don't forget, it's free!

Monday, March 02, 2009 8:10 PM  (0 Replies)

DSL DevCon Speakers and Sessions Announced!

Apparently there is quite a bit of pent up demand for this conference, as there were more than 50 session proposals for only 12 slots and we've already filled half the seats with just pre-registrations.


Sessions include an M deep dive by Paul Vick, DSLs in Groovy by Guillaume Laforge, DSLs in Eclipse by Markus Voelter, a functional vs. dynamic DSLs smackdown by Ted Neward, a DSL for Pixel Effects from Adobe and last, but certainly not least, giving the keynote for the entire conference, the undisputed Duke of DSLs himself, Maaaaaartin Foooooowler-er-er-er!


Come to Lang.NET and stay for the DSL DevCon or just come to the DevCon, but whatever you do, sign up for the FREE DSL DevCon right now! All 5 of the other DevCons have sold out and I expect this one to be no different.

Monday, February 23, 2009 12:11 PM  (0 Replies)

I love Microsoft's terrible automated voice attendant

Long-time readers may recall when I got an angry caller from a Vista user that had trouble configuring it the way they wanted it. They got to me because they were looking for "sales" using the automated voice attendant that matched my last name instead ("Sells") and forwarded him to me in the middle of a 1:1 in my office. Not wanting to let a customer go away angry, I stopped what I was doing and did my best to try to help.


It happened again today, except for an angry middle-aged guy, I got a call from the sweetest 12-year-old girl you'd ever want to talk to. Her Word CD had gotten scratched and she needed a replacement so she could write a big paper due next week. I considered telling her that I wasn't in sales or support or getting her number and calling her back (I was IM'ing with four other people at the time and I was late for a meeting), but she was so earnest that I just couldn't turn her away.


Instead, I took her name, address and email, went to the MS store and purchased her a copy of Office 2007, which I then had sent to her place via 2-day shipping, all the time assuring her that it wouldn't cost her a dime. I ended up using my own personal quota for discounted software and charging $60 to my MS AMEX, but I would've spent my own money (and still might if my boss reads this and rejects my expense report : ).


She was so grateful and it made my day to solve her problem. I love our customers and I hope the terrible robot on the main MS line keeps sending 'em my way.

Thursday, February 19, 2009 12:00 PM  (3 Replies)

Mix09: Developing RESTful Services & Clients w/ M

Doug Purdy and I will be giving an "M" talk about web stuff at this year's Mix:



Learn how Web developers can use "M", a new language for describing data, metadata and domain specific languages, to enhance RESTful services like HTTP, JSON, RSS/Atom, and more. Also see how "M" can be used on premise or in the cloud to achieve greater development productivity and to create more compelling customer experiences.

Come one, come all!

Wednesday, February 18, 2009 11:01 AM  (3 Replies)

Martin Fowler on DSL Migration

Martin, who has recently agreed to be the keynote speaker for the DSL DevCon, has a nice piece on DSL migration strategies.


While Oslo has no direct support for the incremental migration strategy to migrate DSL documents forward, we absolutely provide the tools for building it yourself. We do have very nice support for model-based migration, which keeps a parser around for each version of the DSL and produces the same underlying semantic model (which we call MGraph).

Monday, February 16, 2009 2:33 PM  (0 Replies)

More from Stephen Modeling an Application in Oslo

Stephen has three more installments in his series on modeling an application in Oslo: Discovery, Domain Entities and Refactoring and Transforming MGraph to TSQL. It's fascinating to watch him use the platform starting from scratch. Recommended!

Monday, February 16, 2009 2:14 PM  (0 Replies)

Stephen Forte: Oslo Confessions of a .NET Programm

Stephen's been turning himself into an Oslo programmer:



"Telerik is building some cool Oslo utilities and I am in the middle of designing them. As I was talking to Chris about some of the specs the other day, he asked me: “What are you using to keep track of the metadata of your application in your design process?” I was like: “Pen, paper, whiteboard, Word and Excel.” He said why are you not using Oslo? Then it struck me, I was in .NET programmer mode. So last decade. While I am using Visual Studio 2008, WPF, SQL Server 2008 and the Oslo SDK to build an application for Oslo, I was not using Oslo to help build the application."


Worth watching.

Monday, February 02, 2009 8:12 PM  (0 Replies)

Welcome to the January 2009 "Oslo" SDK!

Hello again from Chris and Kent, your editors on the "Oslo" Developer Center. On Friday, January 30th, we released the January 2009 CTP of the “Oslo” SDK. This release was primarily a quality release, but we’ve also added some new features (which you can read about in the release notes). My favorite of these is token actions, which lets me do things like specify a string in a .mg file but pull out the guts without keeping the double quotes that surround it:


token String = Word | a:'"' s:('""' | ^'"')+ b:'"' => s;


If you’re building grammars, you know why this is cool and if you’re not, what are you waiting for?


Also, you’ll want to check out the new Modeling Patterns and Guidelines document where we start to explore common modeling tasks and how to approach them in M. This document will grow a great deal over time and if there’s some particular topic you’d like to see covered, drop us a line.


In the three short months since the PDC, we’ve tried to keep you up to date on fresh content from the team showing off how we think our customers will want to use or showing off features you might not have known about. The ones in this category I think will get you pointed in the right direction are "Oslo" Basics: Build Metadata-Based Applications With The "Oslo" Platform, Mr. EPL and Spork.


Also, "Oslo" has generated a ton of buzz in the community, including the forum, the connect bug database and in the blogosphere. The ones we think you should take particular note of are featured on the DevCenter as soon as we find them. Items I really think you should check out are Why Oslo is Important, MSchema and Decorator Tables and Creating a Logo/Turtle Graphics Textual DSL using Oslo MGrammar.


But wait, there’s more! If you’d really like some focused time on "Oslo," there are not one but two training courses, one from Agilitrain and one from PluralSight.


Finally, if you’re an MGrammar fan, you’ll love the DSL DevCon, April 16 & 17 in Redmond, WA right after the Lang.NET conference.


Our goal on the DevCenter is bi-directional communication, so we’ve worked hard to make sure we keep our eyes open for all of the wonderful things you’re putting "Oslo" to use on. However, we’re only human, so if we miss something, whether it’s something you’ve built with "Oslo" or a question or piece of feedback, don’t hesitate to let us know!


Also, in case you don’t know what "Oslo" is or how to get started, you should check out the Getting Started section on the DevCenter home page.


Keep those cards and letters coming!


XXOO, Chris Sells & Kent Sharkey

Monday, February 02, 2009 8:51 AM  (2 Replies)

Bill Gibson on Domain Modeling

Bill Gibson is an architect on the Oslo team and is in charge of our M coding conventions and modeling patterns documents. He's started blogging recently and has a nice post about domain modeling in Oslo. He's a good guy to hit up with questions about how to model various constructs in M or just modeling questions in general. He's been doing this modeling thing forever...

Friday, January 30, 2009 3:58 PM  (0 Replies)

Agilitrain: Model Driven Development with Oslo

Holy cow -- another Oslo course, this one from Agilitrain:



"Microsoft's Oslo is trying to change the way that software is designed, developed and delivered. They are introducing a platform for building real, scalable and manageable model-driven applications. Being an early adopter of this platform will prepare you for our changing world.


"This course will show you how to build models and domain specific languages and use them all at runtime using the Repository to create great applications for your users."


I'm a huge Shawn Wildermuth fan (Shawn's the author of this course and the instructor). Recommended.

Tuesday, January 27, 2009 2:45 PM  (0 Replies)

All Technology Has Downsides

Rocky makes some good points in his recent piece on DSLs (DSLs – fun, cool, but maybe a bad idea? ) -- basically, who's going to learn the DSL when the folks that know it move on? That's one potential downside of the proliferation of DSLs and I could give you more.


However, all technologies come with these downsides, e.g.



  • Managed environments make new programmers forget what's under the hood (and in some cases, actually afraid to look).

  • Horseless carriages produce pollution.

  • iPhones are killing the English language by encouraging the use of "words" like "lol," "afaik" and "wtf."

  • Airplanes crash.

  • Very very bad code written in Visual Basic can still do the right thing.

  • Fonts let every letter look like a ransom note.

  • etc.

The point isn't whether a technology has downsides or not -- of course, it does. The point is whether the upsides outweigh the downsides. In the case of DSLs and model-driven development all up, the "Oslo" team is making a big bet that we can make you overall more productive when digging ourselves out of the IT software backlog hole. Will we be? I think so, but we have a lot of work to do before we'll know for sure.


And how do we reduce the impact of the downsides of a new technology? By knowing that they're there, which is why Rocky's commentary is so useful. Recommended.

Sunday, January 25, 2009 5:26 PM  (3 Replies)

ExtractM "Oslo" Sample

ExtractM is a sample command-line tool for extracting M source code from compiled M images by Shannon Koh, a developer on the "Oslo" team. Enjoy!

Tuesday, January 20, 2009 5:24 PM  (2 Replies)

There once was a man from Duluth

nearly 40 years old; past his youth!
But tonight with a smile,
he swam non-stop for a mile.
First time in his life - that's the truth!


I swam a mile when I was 17 and again last summer, but never non-stop before. I know it doesn't compare to real swimmers (it took me 45 minutes), but I've been swimming for less than a year. Plus i found two meaningful rhymes for "Duluth." I rock. : )

Sunday, January 18, 2009 10:45 PM  (10 Replies)

Dan Vanderboom: Why Oslo Is Important

I couldn't have said it better myself. Very much worth the read. Enjoy.

Sunday, January 18, 2009 11:57 AM  (0 Replies)

SE Radio: Oslo with Don and Doug

Episode 123 of Software Engineering Radio is all about Oslo:



"In this episode we discuss Microsoft's OSLO platform with Doug Purdy and Don Box. We briefly discuss what OSLO is in general and then look at the various components of OSLO. We also look at how OSLO fits in with the general Microsoft strategy and how it compares to other DSL/Model-driven approaches. We then look at language modularization and composition and discuss the similarities with XML and Smalltalk. Finally, we discuss possible integrations of OSLO with other MD* approaches and technologies."


Enjoy.

Friday, January 16, 2009 8:10 AM  (0 Replies)

DSL DevCon Pre-registration

There's been such a flood of DSL DevCon talk proposals that I've had a hard time keeping up (although feel free to let those nice folks in Eclipse, XML, Java and Unix land if you know who they are!).


Also, there's been a huge amount of interest in attending the conference itself and some folks even worry that the conference will sell out before they can register (the first five DevCons have all sold out and those cost money!), so they've been asking me to put 'em on a list. I'm still working out the logistics with the nice Lang.NET folks, but if you'd like to pre-register for the DSL DevCon, drop me a line and I'll put you on the list. It will be my job to make sure that anyone that pre-registers gets to go.


Tell a friend!

Thursday, January 15, 2009 4:36 PM  (0 Replies)

MGraph: Taste Great, Less Filling

Lars Corneliussen has a fun post entitled Microsoft "Oslo" MGraph - the next XML? He concludes by comparing JSON, XML and MGraph to represent the same data:



  • JSON: 661 characters

  • XML: 1065 characters

  • MGraph: 590 characters

Enjoy.

Tuesday, January 13, 2009 2:37 PM  (1 Replies)

I'm speaking at VSone in Munich, Feb 11-12

I'm giving two talks on model-driven development at VSone in Germany in Feb this year: the keynote and a dive into Oslo. If you're in the neighborhood or are looking for a party spot, drop on by!


I'm even going for an extra few days to see the sights -- hopefully it won't be too cold. I'm from the Midwest and all, but when it's cold there, we stay home. I want to go out! Any suggestions for what I should oughta see?

Monday, January 12, 2009 8:34 PM  (1 Replies)

Oslo Tool: SQL schema -> MSchema

Kristofer Andersson is designing and implementing an airline reservation in the open air. In the process, he ported his models to M, but not by writing them by hand, but by writing a tool to convert existing SQL schema to M. Enjoy.

Friday, January 09, 2009 9:01 AM  (0 Replies)

Dealing with the Visual Studio 2010 expiration in the WCF and WF 4.0, “Oslo”, & “Dublin” PDC08 Virtual Machine

If you’ve been using the WCF and WF 4.0, “Oslo”, & “Dublin” PDC08 Virtual Machine provided on the PDC08 Goods Disk, you’ve probably noticed that Visual Studio 2010 within the VPC expired at the end of December and you are presented the following message “The evaluation period for Visual Studio Trial Edition has ended”.  Below are details on how you can export your data and get the image working again.


The work around involves creating a new differencing disk and new virtual machine configuration file and then disabling the clock synchronization between the host and guest OS.  In the end you will have a fresh virtual machine that believes it is 10/10/2008 and the clock will only increment when the machine is running.


NOTE: This workaround assumes you have not altered the “PDC08-CSD.vhd” file that was marked Read Only on the PDC08 Goods Disk.  If this file has been altered, the work around may not work.


1.     Export the data you want to keep from the VPC image.  This can be done using the “Shared Folders” feature of VPC 2007 to copy the data to your host and then copied into the new image at the end of this process.  See the “Share a folder between a virtual machine and the host operating system” topic in VPC 2007 Help for more details.


2.     Shut down the Virtual Machine and discard your changes. At the end you will end up with a fresh, new image but you need to discard any saved changes so that you can alter the VMC file later in this process.


3.     Create a new differencing disk.


a.     On the “Goods Disk” search for the PDC08-CSD-WorkDisk.vhd file and rename it to anything you want.


b.     Launch VPC 2007, click File, select Virtual Disk Wizard and click Next.


c.      Select “Create a new virtual disk” and click Next.


d.     Select “A virtual hard disk” and click Next.


e.     Store the new disk in the same folder where you found the PDC08-CSD-WorkDisk.vhd file and give it the same name.  Click Next to continue.


f.       Select “Differencing” and click Next.


g.      Locate the “PDC08-CSD.vhd” file in the same folder where you found the other vhd file, select it and click Open and Next.


h.     Click Finish and then Close


4.     Create a new Virtual Machine.


a.     Launch VPC 2007, click New and click Next.


b.     Select “Create a virtual machine” and click Next.


c.      Click browse and navigate to the same folder where you created the new PDC08-CSD-WorkDisk.vhd file in step 3 above.


d.     Create a new vmc file with any name you like and click Save, then click Next.


e.     Select Windows Server 2008 in the Operating System dropdown and click Next.


f.       Select “Adjusting the RAM”, click Next, set the amount of RAM you want to allocate (we allocated 1536 in the original virtual machine) and click Next.


g.      Select “An existing virtual hard disk” and click Next.


h.     Click browse and select the new the new PDC08-CSD-WorkDisk.vhd file in step 3 above and click Open.


i.       Check the Enable undo disks box and click Next.


j.       Click Finish.


YOU MUST DO STEP 5 BEFORE LAUNCHING THE IMAGE OR YOU WILL HAVE TO DO STEPS 3 & 4 AGAIN.


5.     Disable the host OS synchronization of the VPC.  This is a change to the PDC08-CSD.VMC file that disables the clock synchronization between the VPC and the host OS.  This means that time in the VPC moves forward only when the VPC is being used. As a result, you will have over 2 months of runtime (not wall time) for a fresh VPC.


a.     Find the PDC08-CSD.VMC file in the same folder where you found the PDC08-CSD-WorkDisk.vhd in step 2.


b.     Open the file in Notepad and made the change highlighted in RED below:


<integration>
    <microsoft>
        <mouse>
            <allow type="boolean">true</allow>
        </mouse>
        <components>
            <host_time_sync>
                <enabled type="boolean">false</enabled>
            </host_time_sync>
        </components>

Bunch of other stuff that I am skipping over to save space...
    </microsoft>
</integration>


c.      Save and close the VMC file.


6.     Launch the Virtual Machine in VPC and repeat step 1 to create the Shared Folder for copying your data back into your new image.


Your virtual machine will now show a date of 10/10/2008 and will only increment when the virtual machine is running.


One important note:  Don’t attempt to join the VPC to a domain since the domain will set the time within the VPC and thus cause Visual Studio to expire.


Many thanks to Jeff Beehler for this information which he posted on his blog, Brian Keller and his detailed description of the various activation messages associated with the CTP as well as to Virtual PC Guy who provided the original information on how to disable the VPC clock synchronization. 


If you’ve converted this VPC image to HyperV following Grant’s instructions, be sure to read Cameron’s update to learn of a similar workaround for HyperV.

Thursday, January 08, 2009 9:31 AM  (0 Replies)

Call For Speakers: DSL DevCon

Are you interested in presenting a 45-minute talk on some Domain Specific Language (DSL) related topic? It doesn't matter which platform or OS you're targeting. It also doesn't matter whether you're an author, a vendor, a professional speaker or a developer in the trenches (in fact, I tend to be biased toward the latter). We're after interesting and unique applications of DSL technology and if you're doing good work in that area, then I need you to send me a session topic and 2-4 sentence abstract along with a little bit about yourself.


I'll be taking submissions 'til February 9th, 2009, but don't delay. Passion and a burning story to tell count twice as much as anything else.


And don't be shy about spreading this announcement around! I've got good coverage in the .NET and Windows communities, but don't know very many folks in the Java or Unix or hardcore modeling worlds, so if you're in that world, let those guys know! Thanks.


The DSL DevCon itself will be in Redmond, WA on the Microsoft campus April 16-17, 2009, right after the Lang.NET conference. Lang.NET will be focused on general-purpose languages, whereas the DSL DevCon will focus on domain-specific languages. The idea is that if you want to attend one or the other or both, that's totally fine. We'll have 2.5 days of Lang.NET on April 14-16 and then 1.5 days of DSL DevCon content.


Oh, and the cost for both conferences is the same: $0.


We're only accepting 150 attendees to either conference. Every one of the five previous DevCons have sold out, so when we open registration, you'll want to be quick about getting your name on the list.


Submit your DSL-related talk idea!

Wednesday, January 07, 2009 4:53 PM  (1 Replies)

The First "Oslo" Training Course!

Pluralsight has a two-day course of "Oslo" available on 3/30 in Kirkland:



Since the release of .NET 3.0, Microsoft has been actively engaged in an internal initiative to unify their services and modeling technologies. The result is a new modeling platform -- codename "Oslo". To summarize, "Oslo" makes it possible to move from a world where models describe the application to a world where models are the application. The technology to deliver this new set of capabilities will be delivered through future versions of BizTalk Server, System Center, Visual Studio, .NET Services and the .NET Framework. Come get a "first look" at this ambitious effort and see what's available today!


Enjoy.

Tuesday, January 06, 2009 11:58 AM  (0 Replies)

What is all the fuss about how you can write DSLs in Lisp?

I found an interesting post on domain-specific languages and Lisp from June of 2007. It has this to say about designing a DSL:



"There are three approaches to designing programming language syntax. The first is to develop a good understanding of programming language grammars and parsers and then carefully construct a grammar that can be parsed by an LALR(1), or LL(k) parser. The second approach is to `wing it' and make up some ad-hoc syntax involving curly braces, semicolons, and other random punctuation. The third approach is to `punt' and use the parser at hand."


I like these categories. I find most folks do #2 with no tooling support or #3 using XML. MGrammar in Oslo is about making #1 easier than #2 and providing the tooling support, e.g. language-specific Intellisense services.


The real topic of the thread, however, is how to do a DSL in Lisp. The questioner would like to implement the following syntax:


trade 100 shares(x) when (time < 20:00) and timingisright()


I find this syntax to be reasonable for an event and it wouldn't be hard to imagine a system with a bunch of rules expressed this way and I could imagine a developer and a business person working together on such a system to ensure things were expressed properly. I don't think I could imagine the business person keeping up as well with syntax expressed as the answerer suggests, however:


(when (and (< time 20:00)
                   (timing-is-right))
      (trade (make-shares 100 x)))


IMO, that's not a DSL -- that's just a set of function calls in an existing language.

Monday, January 05, 2009 8:20 AM  (5 Replies)

Eat Less and Exercise: Before and After

A few years ago, I looked like the "before" picture to the right. I didn't look like that all the time, thank goodness -- this was some couples' party and I was doing the "ballerina dance" challenge -- but as you can tell, I was a tad overweight. Specifically, I weighed in excess of 100 pounds more than the top end of my idea weight range, which put me over 300 pounds.


I had been a skinny kid with a fast metabolism growing up. At 6'5" it takes a lot of food to get to full grown, even when I had only a medium build (I can't even claim to be "big boned"). In college, living in a fraternity served by a cook that believed fully in the benefits of meat and potatoes and having been born in the Midwest with a gravy ladle in my mouth, I got my "freshman 15" in the first semester and kept on going until I was the jolly fellow you see to your right (complete with the belly that shook like a bowl full of jelly).


I tried dieting. A few years ago, I was able to lose 50 pounds on The Geek Diet (it was a freely downloadable PDF file at the time), but gained it all back in a year. The problem was that that diet is fundamentally based on deprivation: you count calories and don't eat more than a certain amount based on your activity level. This made me hungry and crabby all the time. Then, one Christmas back in Fargo under the influence of my deep-fried meat, brownie, cinnamon roll and fudge pushing grandmother, I snapped. It was like a psychological rubber band, pulling me right back into my old habits. Also, I didn't exercise, so I'd plateau'd and my metabolism wasn't equipped to deal with even a few extra calories.


Over the last twelve months, I tried something different and as of a coupla week ago, I look like the guy on the left. I called it "eat right and exercise." It sounds revolutionary, I know, but I've lost 60 pounds over the last year and I've kept it off (even after the visit to my grandfather over the holidays!) The idea isn't to diet at all, but to change your habits. I can't say that I'm expert enough to recommend any of this to you, but here's what I did:


Stop Eating When You're Full. This was the hardest one to learn. In college, I learned up to drink and, most importantly, when to notice when it's time to stop drinking. However, it took me 'til I was 38 to learn how to tell when I was full. This involves eating slowly and being very ready to leave food on your plate (which I always try to do now).


There's Always More Later. This is the other key to stopping eating. As much as I might like something and want to finish it, I had to realize that there would always be more of whatever it was later. I learned to feel good about leaving food uneaten, no matter how good it was.


Eat Better Food. If you have to choose between eating 1000 calories of Doritos or of broccoli, I think we all know the right choice to make. The key is, making it. I've had to learn to like salad, fruits and vegetables, which I'm still working on. I'm always trying new things to learn to eat things that are better for me.


Don't Buy Grazing Food. If I'm doing something I don't like or am bored or reading or watching TV or any number of other things, I can easily eat chocolate or chips or any other manner of things that are bad for me, even if I'm not hungry. I have a hard time saying "no" to an unhealthy snack when I'm watching a movie, for example, so I don't buy them. Instead. I buy apples and applesauce and melons and other things that are good for me so that if I have to snack, there are only good things available.


Eat Lots of Meals. This one is counter-intuitive, but I find I do better if I eat a small amount every few hours than larger meals three times a day. In general, if I'm hungry, I eat and if I'm full, I stop. It's really just that easy.


Don't Deprive Yourself. If you want a piece of chocolate or a chip or whatever it is that you crave, then have it. Life is short and there is a variety of wonderful things to enjoy. Don't gorge yourself -- everything in motivation -- but don't make yourself crazy, either. I find it makes me feel good to eat a piece or two of my grandmother's famous fudge and it feels equally good to stop eating it.


Exercise Regularly. This is one of my major failings with The Geek Diet. I was depriving myself of calories, but I wasn't boosting my metabolism, so my body was just adapting to fewer and fewer calories. These days, I try to swim 2 miles/week and that seems to keep me at my fighting weight.


Mix It Up. I find I'm happiest eating a bunch of small portions than one or two large portions at a meal. I like variety, so I like a little bit of a few things. Also, to make sure that my body doesn't get used to my level of exercise (it's getting easier and easier to swim for distance), I try a variety of exercises. For example, I just did a 90 minute hot yoga class the other day (I thought I was gonna die) and I regularly do sprints in the pool, going as fast as I can. The latter's useful because it always sucks, no matter how fit I get, so it's almost more than I can handle.


Commit. The key to making anything happen is to decide it's going to happen and then route around obstacles until it does. The days I swim without resting or swim a mile when I normally go half are the days I decide to do so. The key to weight loss or any other accomplishment is first to commit.


Don't Beat Yourself Up. Didn't do as much exercise as you wanted this week? Had a few too many Twinkies? So what. You're human. Let it go. Don't give up. Do better today.


The whole point of all this is that it's not about a temporary diet, but about changing my habits permanently. I still have 40 pounds I'd like to lose, but I don't obsess about it. In fact, I haven't weighed myself in months. And even if I never do lose those pounds, I'm down from a 44 waist on my pants to a 38. If I do nothing but stay there, I'll be happy as hell with myself.


I love that most of these tips are just like Scott's newsflash -- gives me some validation. Do you have tips to contribute? Tell me about them.

Sunday, January 04, 2009 4:47 PM  (8 Replies)

Martin Fowler: DslExceptionalism

I love what Martin has to say on the topic of designing DSLs:



"DSLs are seen as a small and simple subset of general purpose programming thinking. As a result people think that what's true for general purpose languages is also true for DSLs (with the implication that DSLs are too small to be worth thinking much about).


"I'm increasingly of the opposite conclusion. The rules for DSLs are different to the rules for general purpose languages - and this applies on multiple dimensions."


When you're ready, Oslo lets you build DSLs to be as simple or as complex as you like.

Tuesday, December 30, 2008 4:47 PM  (0 Replies)

Spirited Discusson of Oslo on stackoverflow.com

Joel Spolsky and friends have started a developer question/answer board and they've started to get some Oslo traffic. Jump on in; the water's fine.

Tuesday, December 30, 2008 4:41 PM  (0 Replies)

Jon Flanders Builds XLANG in MGrammar

It's cool to see an MGrammar for a real-world language (XLANG). Enjoy!

Tuesday, December 30, 2008 4:39 PM  (0 Replies)

Creating a Logo / Turtle Graphics Textual DSL using Oslo MGrammar

Jason Hogg has posted a very cool Oslo DSL and an interpretter for doing Logo Turtle Graphics. He had this to say about MGrammar:



I did the bulk of the work specifying the grammar for this simple version of Logo on the flight back from LA to Seattle - which should give you a sense of how intuitive Mg is - and how productive the Intellipad authoring experience is.


Thanks, Jason. We try!

Tuesday, December 30, 2008 4:37 PM  (0 Replies)

Shawn Wildermuth on Oslo

Shawn's been doing a bunch of Oslo work on his web site:



Enjoy.

Tuesday, December 30, 2008 4:31 PM  (0 Replies)

Jeffrey Juday Exploring the Oslo Repository

Jeffrey has a nice hands on intro to Oslo focusing on the Repository:



Oslo is Microsoft's model-driven future. The Repository is one of the many architectural components debuting in the Oslo SDK. M is the Oslo model building language. M is translated to TSQL and the resulting Data Definitions create tables and views in the Oslo Repository.


Check it out!

Tuesday, December 30, 2008 10:41 AM  (0 Replies)

Erik Stepp provides the question for Oslo's "42"

I'm just catching up a little after one set of holidays and before another one on Wednesday and I noticed Erik Stepp's blog post entitled "Oslo == 42" in my inbox. In his post, he provides a lovely discussion of what Oslo is and why we built it, giving us a concrete example from his own development life. He got it pretty much dead on. Check it out.

Tuesday, December 30, 2008 9:31 AM  (0 Replies)

Parsing relative and absolute dates with MGrammar

Dilip Krishnan has built a lovely little date parser that supports absolute dates like "6/2/1969" (just like DateTime.Parse already supports today) and relative dates like "today" or "next Monday" or "5 days from today". I find myself using relative date expressions like these all the time in Outlook and I've love to have them in every app I use that does dates. With Dilip's parser and the Oslo SDK, you can add it to your app. Good work, Dilip!

Monday, December 22, 2008 4:57 PM  (0 Replies)

If you liked Zork, you'll love Spork!

Spork is a sample of an end-to-end application using M and the Repository. It starts by defining a set of M types that describe the data needed for a text adventure along the lines of the famous Infocom game Zork (and hence the corporate bad-café-inspired name). The M instances are generated by running a custom compiler developed with the VBA (Visual Basic for Adventures) MGrammar grammar. We also provide a runtime driven by adventure data loaded into the Repository in multiple versions of the types called AdvRunner.


Follow along with the video or with the ReadMe see Spork in action. Enjoy!

Monday, December 22, 2008 3:50 PM  (2 Replies)

Lang.NET + DSL DevCon = Joy

This year, we’re thinking very hard about putting the Lang.NET conference and the DSL DevCon at the same venue (the research center on the Microsoft Redmond campus) in the same week. The idea is that people interested in general-purpose language design and development can come to Lang.NET and the people interested in domain-specific languages can come to the DSL DevCon and for folks interested in both, the DSL DevCon will start right after Lang.NET, so folks can stay a little longer and come to both. Also, the conference chairs on both conferences will make sure to keep the content unique across the two conferences.


 


We think that’s a good way to make sure the conferences complement each other and helps keep people’s schedules sane and their travel costs lower. However, I have two questions for you:


 


1.      Traditionally, Lang.NET is 3 days and a DevCon is 2 days. Because of the overlap of the content (languages), we were wondering if folks thought it would be a good idea to do 2.5 days of Lang.NET and 1.5 days of DSL DevCon this year instead, doing both conferences in 4 days instead of 5. What do you think?


2.      If we linked these two events like this, will you attend just Lang.NET, just DSL DevCon or both?


 


Post your comments on this blog entry. Vote early, vote often!

Thursday, December 18, 2008 5:15 PM  (5 Replies)

Notation, Notation, Notation!

Markus Völter has posted some interesting model-driven design guidelines, my favorite of which is "notation, notation, notation!" Since Of course, since Oslo provides MGrammar to let you build the notation of your choice, I'm hardly unbiased. : )

Wednesday, December 10, 2008 6:40 AM  (0 Replies)

.NET Rocks! Oslo is Love

COM spread the love between developers of multiple languages.


Oslo spreads the love between domain experts, developers and IT folks.


Check out show #401 of .NET Rocks for the how and the why. Enjoy.

Tuesday, December 09, 2008 10:46 PM  (0 Replies)

Mr. Epl on the brain

I've been writing my MSDN Magazine pieces introducing Oslo and spending a great deal of time in Mr. Epl mode inside Intellipad. So, at 1:23p on a Sundary afternoon, I'm getting a little loopy, which is manifesting itself as me repeating famous lines from popular culture, only substituting Mr. Epl's name, e.g.



"Mr. Epl, I am your father."


"Oh, Mr. Epl, I can't pay the rent!" "You must pay the rent." "I can't pay the rent!"


"Help me, Mr. Epl. You're my only hope!"


"Mr. Epl, Mr. Epl, it hurts when I do that!" "Don't do that."



Did I mention I'm doing the voices, too?

Sunday, November 16, 2008 1:23 PM  (1 Replies)

SpankyJ is an Oslo Star!

SpankyJ (Josh Williams) is a star developer on the Oslo team (specifically the MSchema compiler) and he's been doing some very cool stuff with M.


Firstly, Spanky's the author of the Mr. Epl tool, which is a Read-Evaluate-Print-Loop program for interacting with M (M-REPL => Mr. Epl -- cute, eh? When we used to call "M" "D", it used to be Dr. Epl. If we change it to "S", we'll Senór Epl! : ). Mr. Epl ships with the Oslo SDK, so if you've installed it, you can find it in C:\Program Files\Microsoft Oslo SDK 1.0\Bin\Intellipad\Samples\Microsoft.Intellipad.Scripting.M\MREPL.exe or you can execute it directly inside of Intellipad with the MScriptMode mode.


For a demonstration (and an explanation of how to get MScriptMode working in Intellipad), Spanky has recorded a very nice Mr. Epl screencast. Highly recommended.


Secondly, Spanky has just released a library for taking the output of MGrammar and producing a graph of .NET objects via XAML. He's got a nice screencast of using it to create something simple to give you a feel, then he moves right into a natural language processor for creating WPF windows and controls interactively. The ability to type text that translated into WPF without using angle brackets demonstrates the potential for DSLs very well, I think.


A few notes when watching Spanky's screencasts:



  • He has slowed himself down considerably to be clear and understandable and he's done a good job. If you'd like to hear what he sounds like in real life, run the screencast at 1.5x speed. : )

  • He has a blinking red/green light in the taskbar -- what *is* that?!

  • He's a dev that tells a story like a champ -- why the hell does my team even need PMs?

Anyone interested in Oslo should absolutely subscribe to Spanky's blog. I know I have.

Saturday, November 15, 2008 9:50 AM  (2 Replies)

Syntax Coloring for Your Custom Mg Language with Intellipad

Justin Bailey shows how to hook up custom syntax highlighting in Intellipad for your MGrammar language. Very cool!

Thursday, November 13, 2008 8:10 AM  (0 Replies)

tvrss.net + uTorrent + FiOS + WHS + 360 = DVR Bliss

So, the other day, Windows XP SP2 destroyed my Windows Media Center Edition install that I've been using for years and absolutely loved. It let me record all my favorite shows on two separate tuners and I could watch them on the TV attached to my MCE box, from all the PCs in my house and from my XBOX 360. Losing it was a huge blow, especially since it was clear I'd need to repave and I was swamped with PDC and post-PDC work (damn those MSDN Magazine deadlines!).


A little research revealed the following facts:



  • tvrss.net provides RSS feeds of every TV show I've ever heard of, whether it's on normal TV, cable or a premium channel like HBO and Showtime. The shows are available in HD with the commercials pre-edited out, so I wouldn't even have to do the 30-second fast-forward, 5-second rewind dance that MCE enables to skip them.

  • uTorrent provides automatic downloads from RSS feeds, including fancy features like only downloading each new episode once, even if it's provided from multiple sources.

  • My Verison FiOS pipe provides 20MBps downloads, so a 22 minute TV program (30 minutes - 8 minutes of commercials) even at HD would only take about 20 minutes to download, on average.

  • My $500 Windows Home Server machine has 1.4TB of storage, so your average 22-minute sitcom, at 180MB, is only a tiny fraction of the storage. Put another way, I could store about 4000 hours of TV.

  • My XBOX 360 supports the same format (XVID) that TV shows available from tvrss.net seem to be provided in. Further, my 360 has direct support from playing videos from shares on my home network (which is wired for 1GB Ethernet, but only run by a 100MB Ethernet router right now).

  • The XVID codec is available, along with a ton of other useful codecs, from free-codecs.com (I'm partial to the K-Lite Codec Pack myself), which means that any videos that I download in XVID format can be played back on any PC in my house. Those PCs running Vista Ultimate that have a Media Center remote control on them can surf to videos on the network and pick them with an experience just like that of my XBOX 360.

  • It's my understanding that the XBOX 360 menuing system will be updated this month to support Netflix streaming, so for the minimum subscription fee (1 DVD at a time, $8/month), I'll be able to get live, streaming movies directly from my XBOX 360 and all my PCs for the movies I don't yet own.

All of this means is that if I were to schedule episodes of say, Burn Notice, to be recorded by uTorrent and dropped into the Videos\TV\Burn Notice folder of my WHS box, I'd be able to access those and play them back on my XBOX 360 even more simply then I could access video from my MCE box, because I don't have to start up the Media Center software first -- access to shared folders is built right into the XBOX 360 menuing system. And I could have all of this in HD (no CableCard required) without commercials and without regard for how many tuners I have. This is all free and, if I don't want to watch live TV (the Superbowl was the last time I did), then I don't even need to spend $55/month on cable.


Plus, when combined with my photos, music and ripped DVDs, all of which are also stored on my WHS box, and streaming movies I don't yet own, I could access all of my digital media from my XBOX 360 (attached to my 46" LCD panel) and from all of my PCs simply and quickly.


Of course, I would never record my favorite TV programs like this, because it's very much a copyright violation and therefore highly illegal.


But if I did, wow, it would rock...


Why do I need cable again?

Wednesday, November 12, 2008 6:44 PM  (3 Replies)

Rocky on Oslo

Rockford Lhotka had this to say about Oslo:



"The Oslo modeling tools are also interesting, though they are more future-looking. Realistically this idea of model-driven development will require a major shift in how our industry thinks about and approaches software development. Such a massive shift will take many years to occur, regardless of whether the technology is there to enable it. It is admirable that Microsoft is taking such a gamble - building a set of tools and technologies for something that might become acceptable to developers in the murky future. Their gamble will pay off if we collectively decide that the world of 3GL development really is at an end and that we need to move to higher levels of abstraction. Of course we could decide to stick with what has (and hasn't) worked for 30+ years, in which case modeling tools will go the way of CASE.


"But even if some of the really forward-looking modeling ideas never become palatable, many of the things Microsoft is doing to support modeling are immediately useful. Enhancements to Windows Workflow are a prime example, as is the M language. I've hard a hard time getting excited about WF, because it has felt like a graphical way to do FORTRAN. But some of the enhancements to WF directly address my primary concerns, and I can see myself getting much more interested in WF in the relatively near future. And the ability of the M language to define other languages (create DSLs), where I can create my own output generator to create whatever I need - now that is really, really cool!


"Once I get done with my book and all my fall travel, you can bet I'll be exploring the use of M to create a specialized language to simplify the creation of CSLA .NET business classes : )"


Rocky on, Rocky!

Wednesday, November 12, 2008 3:27 PM  (0 Replies)

Designing a language is hard; implementing it shouldn't be

Frans Bouma has an interesting point: Designing a language is hard, and M won't change that. And he's right.


For many domains, a DSL can make expressing what's important easier so that the developers using the DSLs can communicate between themselves and to a computer with fewer lines of code, making it easier to read, check and maintain. Many (arguably most) domains live without a DSL, instead encoding design decisions into general purpose languages, adding unnecessary ceremony to the essence of what's being decided, thereby obscuring it.


Does M making designing a language easier? No. It's still hard to design the syntax of a language. Does the M family of languages and the associated tools make it possible for more developers to add DSLs to their domains, letting them concentrate on the essence their language and reducing the Weird Science-like ceremony to bring it to life? We hope so. You'll have to let us know.

Tuesday, November 11, 2008 10:55 AM  (0 Replies)

More Oslo Reactions: What “Oslo” is and is not

Lars Corneliussen (not the wonderful Lars that did a cameo at the Repository & Schemas PDC talk about 8 minutes in) did a nice overview of Oslo. It's amazing to me how well the vision and details of the platform came through at the PDC. General-purpose modeling is a new thing for mainstream developers, but at least the developers that we've heard from so far seem to be open to the idea.

Tuesday, November 11, 2008 10:42 AM  (2 Replies)

Ted Neward Explores M

When I was an external to Microsoft, I used to see new Microsoft technologies and have several reactions: wonder, awe, lust, hate, confusion, apathy. Really, Microsoft was a harsh mistress that caused all kinds of reactions.


I've been heads down for 3.5 years working on Oslo, so seeing other peoples' opinions from inside of Microsoft is very enlightening. Ted Neward has an Oslo opinion that I enjoyed reading, even if it wasn't all positive. Thanks, Ted.

Tuesday, November 11, 2008 10:36 AM  (0 Replies)

News: How modeling will change programming

Burley Kawasaki is a Microsoft marketing person, it's true, but he also really understands the point of Oslo. Enjoy.

Tuesday, November 11, 2008 10:27 AM  (0 Replies)

Three-Pane MGrammar Development in Intellipad

Roger Alsing has posted a discussion of how Intellipad's support for MGrammar development makes writing DSLs easier but showing you what parsers and how as you update the input file and the grammar file itself.


Personally, I'm a huge fan of seeing something work as I type. Think of it as "holistic intellsense." The SQL generation in Intellipad works the exact same way. I find it a huge help.

Tuesday, November 11, 2008 10:22 AM  (0 Replies)

Another Oslo MGrammar Sample: WatiN

Torkel Ödegaard has done a very nice, detailed look at created a DSL in MGrammar for the WatiN browser automation library, including a look at the code he used to parse the Abstract Symbol Tree produced by MGrammar to do something useful.

Tuesday, November 11, 2008 10:18 AM  (0 Replies)

Generating code from M

On the Oslo team, we think of three kinds of models:



  1. Drawings: This is modeling to communicate from human to human, e.g. on a white board or in Visio. An architecture diagram in a design document is an example of such a thing.

  2. Model-Assisted: This is modeling where we're talking to a computer, most often to generate code, e.g. the .edmx file used by Visual Studio to generate C# data access code.

  3. Model-Driven: Here we're also communicating from a human to a computer, but instead of doing it at development-time to generate code, the model is actually used at run-time to drive a run-time, e.g. a Workflow definition to drive the Workflow engine.

I've seen various samples around the interweb on model-driven aka "executable models" (some of which we've supplied on the Oslo DevCenter), but Kirill Chilingarashvili has done a nice little sample of combining Visual Studio's T4 codegen language with a custom DSL in MGrammar. Enjoy!

Tuesday, November 11, 2008 10:14 AM  (0 Replies)

MisBahaving with M

The M family of languages is meant for all kinds of things, from executable models, e.g. defining a workflow and executing it via the Workflow runtime, to allowing a business person to express something in a language, either visual or textual, that they understand so that it can be communicated as formally as desired to another human. As an example of the latter, Claudio Perrone has implemented a DSL in MGrammar for Behavior-Driven Development.


It is amazing to me how many of these little DSLs have popped in M just since the PDC. Keep 'em coming!

Tuesday, November 11, 2008 10:02 AM  (0 Replies)

MSchema and Decorator Tables

The one where Shawn Wildermuth explores the MSchema syntax that looks like inheritance but isn't (since inheritance has no meaning in a structurally type language).

Tuesday, November 11, 2008 9:54 AM  (0 Replies)

Vim Support for MGrammar

From Fredrik Eriksson.

Tuesday, November 11, 2008 9:52 AM  (0 Replies)

The DSL DevCon

I'm thinking it's time for another DevCon. I know it's been a while since the last one (in fact, I hear there was some kind of petition to have another one? : ), so we're long past due.


This one will be on all things data-driven, model-based and/or DSL enhanced. I'm thinking March or April of 2009.  Who's interested?

Thursday, November 06, 2008 1:43 PM  (14 Replies)

Big, Juicy Video on M from Jon Flanders

Jon Flanders from pluralsight has posted a 39 minute screencast video introducing M to .NET developers. Enjoy!

Thursday, November 06, 2008 1:00 PM  (0 Replies)

Oslo: Using Mg to Define a To-Do Language

Justin Bailey has built a little language in MGrammer to create tasks and even better, he's provided a very tutorial on how he did it. Following along with him would make a great way to learn the basics of Mg. Plus, I love his conclusions:



"Mg is clearly a powerful technology for defining languages. The above is a trivial use, but already we have bypassed most simple file parsing techniques. Quoted strings and balanced parentheses are the bane of non-parsing techniques and it appears that Mg will be placing those abilities within reach of most .NET developers."


Good work, Justin!

Thursday, November 06, 2008 12:57 PM  (0 Replies)

Aaron Skonnard on "Oslo"

Aaron Skonnard of pluralsight has provided a very nice overview of "Oslo," including the major pieces and most importantly, why you care. Enjoy!

Monday, November 03, 2008 5:38 PM  (2 Replies)

Oslo Week One Wrap-Up

Oh my lord above. I have been working towards last week for about 3.5 years altogether. It started with an incubation in the Connected Systems Division (CSD -- the folks that own WF, WCF, BizTalk, etc) doing work to see if modeling was a feasible way to build applications and we just announced the work so far along these lines at the PDC last week. It's called "Oslo" and here are the top places you should look to get up to speed on it:


Microsoft "Oslo" Resources



But don't take my work on "Oslo." Check out what the world is saying (in no particular order -- honest!).


The World's Take on "Oslo"



Whew. We just announced "Oslo" last week and it's crazy how much there is on it already. Enjoy!

Sunday, November 02, 2008 3:47 PM  (4 Replies)

The Oslo Developer Center: Letter from the Editors

Welcome to the "Oslo" Developer Center, your one-stop shop for all things "Oslo." Do you need to learn how M works (or what the heck it is?)? Do you want to sprinkle some of that repository stuff into your SQL Server? Do you need a quick video tutorial on the "Oslo" SDK tools? Then you've come to the right place!


This DevCenter is a bi-directional communication channel between the "Oslo" product team and you, our customers. We have all kinds of things we want to tell you about Oslo and all manner of ways for us to tell it to you, e.g. articles, videos, screencasts, samples, tools, etc. But more important than that, we want to hear from you, so we've set up a forum for you to ask questions and a Connect site for you to report bugs. And, if you blog about Oslo, you're very likely to get noticed and featured on the home page. Or, if you do post about Oslo or find something Olso-related that you think deserves mention and we haven't found it yet, then don't hesitate to tell us! Finally, if that doesn't make you happy, you should feel free to send your email directly to the site's editors, Chris Sells and Kent Sharkey. We're here for you!


What is "Oslo?"


And to kick this conversation off, we'd like to provide the 10,000 foot introduction to "Oslo". "Oslo" is the code name for our platform for model-driven applications. The goal of "Oslo" is to provide a 10x productivity gain by making model-driven applications mainstream. At the core of this platform are domain-specific models, language and tools:



  • A language, M, for authoring domains textually

  • A tool, Quadrant, for authoring domains visually

  • A Repository for managing domain models

  • A library of pre-built domain models and languages

Together, these components will make it more efficient for a team to develop, implement, and maintain applications and services.


What is "M"?


"M" is a new declarative language that provides developers with an approachable, textual format for authoring models and DSLs for those models. The "M" language consists of three parts: MGraph, MSchema and MGrammar. MGraph is used to write down values in a graph structure similar to syntaxes like JSON. MSchema builds on MGraph by providing a structural type system, extent declarations for storing values, and computed values, which are queries over values and extents. MGrammar is used to describe a domain-specific language in terms of token and syntax rules, which are then used to parse text into an MGraph.


What is "Quadrant"?


Quadrant is a real-time editor over a SQL database. Updates in Quadrant are automatically propagated to the database. Views over the same data are automatically refreshed when those data changes are made to the database. This is technically possible because Quadrant is built on an innovative dataflow technology. Quadrant's user experience is reflective of the experience in Office tools.


Quadrant is available to PDC attendees on the VPC, but not yet available for download. We hope to get Quadrant into a future Oslo CTP soon!


What is the Repository?


The "Oslo" repository delivers a platform to manage application metadata. The "Oslo" repository provides a common set of features to enable data-driven applications to leverage a platform investment made by Microsoft.


The "Oslo" repository builds naturally upon the SQL Server database and provides optimizations for storing and sharing models – by providing a thin layer on top of the existing DBMS engine, this enables customers to easily leverage the existing SQL Server database ecosystem (e.g. tools, reporting, BI, etc). The repository is designed for extensibility, and supports common tasks such as impact analysis and access control. The repository manages end-to-end system models across the lifecycle, including support for both design and run-time views of application metadata. Pre-built models will be delivered as a starting point for building your full application, and with extensibility points so that your models can be augmented as needed.


Call to Action!


See for yourself. Download and install the Microsoft "Oslo" SDK. It contains lots of goodies, including:



  • Compilers and tools

    • The "M" compiler (m.exe)

    • The MGrammar compiler (mg.exe)

    • A tool to parse files based on a .mgx, and output an "M" or XAML file (mgx.exe)

    • A tool to load "M" content into a SQL database (mx.exe)

    • Visual Studio language integration for "M"

    • Intellipad, a text editor with MSchema and MGrammar integration (ipad.exe)

    • MSBuild integration for the "M" compiler

    • "M" Add-in for Excel 2007

  • Documentation

    • Oslo Overview

    • "M" in a Nutshell

    • "M" Language Specification

    • MGrammar in a Nutshell

    • MGrammar Language Specification

    • Intellipad Primer

    • Help content for "M", Models, and the Repository

  • The Oslo and Dublin models

  • Samples

    • M Models: Northwind DBMS, WMI schemas (subset), enumeration and relationship patterns, and query examples

    • MParserDemo, a sample that demonstrates using the "M" framework

    • Samples for "M" Language Specification

    • MGrammar samples

    • Intellipad samples

And then, once you've dug through all of that, come here for more and to post your bugs and questions. We're working to keep the content up to date and fresh, so they'll always be something new for you at the Oslo DevCenter.


XXOO, Chris Sells & Kent Sharkey

Monday, October 27, 2008 10:33 AM  (3 Replies)

Tired of writing unit tests yourself? Try Pex!

From the Pex site:



"Pex (Program EXploration) produces a traditional unit test suite with high code coverage. ... To do so, Pex performs a systematic white box program analysis. Pex learns the program behavior by monitoring execution traces, and uses a constraint solver to produce new test cases with different behavior. At Microsoft, this technique has proven highly effective in testing even an extremely well-tested component." [ed: emphasis mine]


So, Pex will produce a parameterized set of unit tests for your classes and does all of this integrated with Visual Studio and the unit testing built into VS. I've seen the demo and it blew me away. Nikolai Tillmann, a developer at MSR (Microsoft Research), has a nice write-up that discusses his work and when you're done with that, go download Pex!

Friday, October 24, 2008 7:36 AM  (2 Replies)

MS + jQuery: This Is Huge!

Yesterday, the ASP.NET team announced that they were going to ship jQuery, a small, populate open source web client library. And not only is Microsoft going to ship this library, as is, but we're going to build support into Visual Studio for it, build future versions of our web components assuming it and support it via PSS like any other Microsoft product.


This is huge.


Of course, is it useful for developers using Microsoft tools, because they get another supported library out of the box for them to use to build their applications. But that's not what makes it huge.


What makes it huge is that, instead of seeing the functionality in jQuery and thinking to themselves, "Wow. jQuery is really great. Let's build something from scratch like that into our products," the ASP.NET team, in what is the first time in Microsoft history afaik, decided to reuse something from the world that was already working, adding only the thing we do better than anyone else: integration into a suite of libraries and tools.


"But isn't this just 'embrace and extend?'" I hear you asking. "Isn't Microsoft just going to absorb jQuery, thereby killing it for folks not using Microsoft products?"


There are two ways forward at this point. One, we could push on jQuery in a Microsoft-centric way until the project "owners" (which is a slippery concept with an OSS project anyway), decide to either give up and let Microsoft "own" it or they decide to fork jQuery, thereby creating jQuery-classic and jQuery-MS. This would not be good for the jQuery community.


The other way to go, and this is the way I hope it goes, is that Microsoft learns to play nicely in this world, submitting features, changes and bug fixes to the jQuery source tree in a way that's consistent with the vision from which jQuery sprang, making it work better for Microsoft customers and non-Microsoft customers alike.


If we can learn to do that second thing, then we've turned a corner at Microsoft. I'm keeping my fingers crossed.

Tuesday, September 30, 2008 7:27 AM  (2 Replies)

Teasers for this year's PDC

Do you want to know a tiny bit of what's going to happen at this year's PDC? Check these out:



Also, we're giving away so much good stuff at the PDC that we're putting it onto a 160GB USB2 hard drive for every PDC attendee. You can't beat that with a stick!


If you haven't done so yet, you should register quickly before the whole thing sells out.

Wednesday, September 24, 2008 7:16 AM  (0 Replies)

Custom Window Chrome in WPF

Joe Castro, a developer on the WPF product team, has written a very cool article about how to do custom chrome in your WPF applications. But, what makes it even cooler is that he dissects the various ways that shipping apps do custom chrome on various versions of Windows. It's amazing the number of techniques there are. Very nicely done, Joe.

Monday, September 08, 2008 8:29 PM  (0 Replies)

Oslo Defined

I've spent the last 3.5 years of my life working in various roles on a project that is now called "Oslo." Both Don and Doug have posted definitions.


See you at the PDC!

Saturday, September 06, 2008 7:27 PM  (0 Replies)

I don't pretend to understand advertising

I've always liked the Mac vs. PC ads. They're clever, they make me laugh and I like both actors (Accepted is very under rated, IMO). Of course, I actually prefer my PC running Windows to a Macintosh (I had a Mac IIcx back in the day), I prefer Vista to XP and I'm a Microsoft employee, so I don't have any trouble seeing the exaggeration, but there's always a kernel of truth, which is what makes them funny. The part that kinda annoys me is that Apple seems to be claiming they have no such problems, which is, of course, not true.


The Mac vs. PC ads I understand: they're meant to put down the PC by having the PC guy look like an idiot, leaving the Mac guy to seem non-threatening and therefore better by comparison.


On the other hand, I can't say I understand the latest Windows ad with Jerry and Bill. I did enjoy it, however. Not only did Bill seem much friendlier and more approachable than I've ever seen him, but the image of someone in the shower with their shoes and socks on made me laugh, as did the image of Bill wiggling his butt in a Deep Throat sorta way.


And the commercials are having an effect: they're being talked about and folks are interested in the next one. How often do you hear about folks looking forward to a commercial? That in and of itself is an achievement.

Friday, September 05, 2008 10:31 AM  (1 Replies)

Programming WPF goes into 3rd printing

Get 'em while they're hot!

Thursday, September 04, 2008 5:00 PM  (5 Replies)

Where did my old Word command go in new Word?

I've been using Word for a long time and my fingers knew where the commands were that I used even though my brain didn't. Most of the those commands I've mapped to the new Ribbon-enabled Word without a problem, but sometimes I still search. For those times, the Office guys have put up a cool tool that shows me where the new version of each command is located in the new Word. Enjoy.

Wednesday, August 27, 2008 10:48 AM  (4 Replies)

DVDFab + My Own DVDs = Couch Convenience

I don't know if it's legal or not, but if you use DVDFab with the Mobile option set to XVID video + MP3 audio (both supported by the XBOX 360 if you have the latest updates installed), you can rip the movie from your DVD (no menus, extras, etc) onto a network share (I use my Windows Home Server box), scroll through them on my XBOX 360 and play them back with a/v quality high enough that I can't tell the difference (and I don't have the quality cranked as high as it goes by any means).


Each movie takes roughly 1GB, so I can get all of my DVDs stored for the cost of two weeks' worth of lattes (although I'm really just using the spare space on my 1.4TB of WHS storage). Plus, since I'm still in the 30-day trial period of DVDFab, if I hurry, I could rip them all for free (although for the $40, DVDFab Gold is definitely worth the price). It generally takes about 45 minutes per movie, so I'll be flipping a lot of DVDs during the next 30 days and I haven't bothered to figure out how to get DVD metadata, e.g. cover art, etc, but other than that, the experience is a wonderful one. In fact, since I hate going through all the previews and menus, just picking the movie from a list and having it playing immediately is a better experience that a DVD in many ways.


The only thing that could make this better is if WHS or Windows Media Center Edition had this feature built in. I'm guessing I'm breaking some laws by doing this, but to me, it sounds like fair use. I'm backing up the DVDs that I already own to a HDD. The fact that I can watch them without getting out of my couch doesn't change the fact that the DVDs are right there on my shelf, purchased fair and square.


Oh, well, if the police want to come for me, they know where I am. : )

Monday, August 18, 2008 9:29 AM  (9 Replies)

Digigirlz Rock!

I gave a talk to the Digigirlz yesterday and it was a blast. It was 25 high school girls that were on the Microsoft campus all week learning various technologies to promote women in IT. The girls are nominated by their teachers for aptitude and attitude and these girls had both in spades.


Vijaye Raji and I were giving the talk, me primarily the pretty front man while he drove the slides, typed the code and made sure I didn't get things very wrong (he knew the environment and the language far better than I). We were teaching general programming basics using a variant of BASIC that was especially well suited to new programmers. We spent two hours showing them how to do turtle graphics and how to write a game (Pong) all from scratch and we all had a blast doing it.


And these girls were sharp! I'm used to pacing material for rooms of adult software engineers, but I didn't have enough. I had to take feature requests from the audience and figure out how to implement them on the fly while they followed along, programming their own versions of the game as we went. They were hands on the whole time and eventually I enlisted their help to tell us what code to write. Mind you, this was a language they'd only learned minutes before, but they didn't have any trouble at all.


They laughed and asked questions and answered my questions and were engaged the whole time (well, most of them -- some were seduced by the siren song of the high speed internet connection : ). I figured I was doing OK when one of the girls asked me if I ever thought about being a teacher.


"Naw," I said. "I hate kids..."


They didn't buy it... : )

Thursday, August 14, 2008 10:50 PM  (4 Replies)

Digital Video Camera and Editing S/W for a Kid?

My youngest likes to record video, but has been doing so on busted equipment and doesn't have anyone that knows what to do with it once he's got it. His birthday's coming up and I'd like to get him a DV camera and sit down and learn a piece of editing software that folks recommend so I know he'll be able to do cool things with the resulting video.


Does anyone have any recommendations? Is the video editing software that comes with XP any good (that's what he runs on his laptop)? How about the one that comes with Vista?


Thanks!

Sunday, August 03, 2008 7:59 AM  (9 Replies)

Oslo talks at the PDC

After 3.5 years, my team's work in Microsoft's Connected Systems Division will finally see the light of day! Here are the related talks we're giving at this year's PDC:


Friday, August 01, 2008 7:58 AM  (0 Replies)

George Carlin, Rest In Peace

When I was a teenager, some kids were sneaking out to get drunk or have sex. I was sneaking into my parents' record collection to listen to George Carlin. Unfortunately, unleashing my version of his brand of humor on my peers was one of the things that kept me from being invited for parties or sex, but I still dearly loved the man and was very sorry to hear that he passed away yesterday.


Certain situations still trigger George Carlin responses whether I want them to or not; he is permanently lodged in my brain. And of all the things he's done, his incomplete list of impolite words is stuck in there furthest (*not* safe for work!).


I'll miss you, George. Give whatever all-powerful being you run into in the next life a piece of your mind about the state they've left us in here on Earth.


Update: a very NSFW GC highlight video series.

Monday, June 23, 2008 5:52 PM  (2 Replies)

Losing weight the old fashioned way: tonsilectomy

Today is my last day of time off work from a tonsillectomy a week ago Thursday. I'm down to about 20mg of OxyContin/day (from 60mg) and hope to have that down to nothing by Monday (although I still have half a jug for my next party : ).


Why would a grown man fresh off two SDRs and a BillG review feel the need to have his tonsils pulled? Well, I've been trying to talk someone into taking them for a coupla years now, even since the recurring strep throat started, but no luck. This time it was because I wasn't sleeping properly.


A few months ago at a routine checkup, my doctor was working her way down a standard questionnaire, asking me if I had this problem or that problem. I'd been swimming a lot and had lost a few pounds recently, so mostly I didn't have any health problems. Until she got to sleep:


"Are you having any trouble sleep?"


"Well, I've been waking up about 4am every morning, no matter when I go to bed."


"Any stress?"


"I work at Microsoft," I said, figuring that was answer enough.


She laughed. "I mean anything out of the ordinary?"


I couldn't think of anything that would explain it, so I said so.


"Have you ever had a sleep study?"


"Well, one time I recorded a chapter of my social studies text book and listened to it all night while I slept. I got an A on that test."


Now she was just tired of my lip, so she explained what she meant. And then she signed me up. And I went. And it sucked. Imagine trying to get sleep while tied up (and not in a good way!).


The diagnosis of my sleep study was "severe sleep apnea," as defined by more than 10 episodes an hour when I stop breathing and more than 10% decrease in oxygen to my brain. I was at 31 and 17% respectively, the sleep tech told me as they strapped me in for sleep study #2, this time with a C-PAP machine. Now imagine sleeping while being tied up and gagged.


Apparently the gag improved my sleep enough that it "cured" my sleep apnea so, without benefit of advice from an actual sleep doctor yet, I was set up with my own C-PAP machine, where I could gag myself every night before going to sleep. And not just gag myself, but strap on a hockey mask while someone blows into your mouth all night long. And now try to sleep while this is happening. My father got one and complained bitterly about it for a full year 'til he got used to it.


So, being even more stubborn than my father (which, if you knew my father, is stubborn on a Biblical scale), I asked for a second opinion. Or at least a first opinion from an actual sleep doctor (and not just a tech).


And I got one. There are other treatments besides C-PAP machines for sleep apnea, among them tonsillectomy (can work depending on the patient), some kind of dental appliance (generally not very successful) and, I kid you not, learning to play the digeridoo. This last one had me particularly interested as I've always wanted to do that anyway. (Come on! Breathing in and out at the same time and making weird noises! It's like sex without the mess!)


"Well, let's see if a tonsillectomy would help you," the doctor said, leaning in for a look down my throat. He shined his little light in and then started backward as if scared. "Oh, yeah... You'll want to have those looked at," he said, his eyes all big.


"What?" I asked, a little worried.


"Those are within the range where should talk to an ear-nose-throat doctor about having them removed," he said, hastily writing out a recommendation and stealing a look at my throat out of the corner of his eye as he did so.


And so I went to the ENT doctor, a young'un one step up from Doogie Howser (or maybe just having celebrated my 39th birthday, everyone is starting to look really young to me...). He explained how things worked inside the mouth and throat. He looked at my nose. He looked in my ears. He understood my dislike of the C-PAP machine. He described the four-point scale they used for measuring tonsils, asked me to open wide and, like the other doctor, started backward after a 500ms look.


"Those are huge!" Doogie said.


"Really?"


"Yeah!" I swear his pupils were dilated in some kind of fight or flight response.


"So, on the four-point scale?"


"4+. Huge!" he said. "Most people have a bunch of space around their tonsils to let he air in. How are you able to breath at all?"


"OK, doc. What do you think we should do?"


"We should take 'em out! Here's how it's going to work..." and he started describing the surgery, which was to include removing my tonsils, shaving back my uvula and fixing my deviated septum.


"Will I ever be able to sing?"


"Sure," he said. "That shouldn't be a problem."


"Great. I've always wanted to be able to sing!"


He laughed. "Well, no promises there." And then he started to describe the complications. Up until then, I was fine with him talking about permanent non-trivial surgery to correct a problem that I could be using an external (infernal!) machine to correct otherwise. But when he started talking about "uncontrolled bleeding" and "rushing to the emergency room as [my] stomach filled with blood," well, that was a bit much after no breakfast that morning.


"Are you OK?" he said, a concerned look on his face. "You've gone all white."


"Ah, no, actually, I'm not. I'm feeling a bit faint..."


So Doogie had me put my head between my knees and breath deeply. And when that didn't work, he popped some smelling salts under my nose. That hurts! But that didn't work either.


"Huh. That normally works," he said, dumbfounded at the giant man getting ready to pass out in his office. "Nurse! Bring me some juice!"


After recovering from the mere idea of uncontrolled bleeding down the back of my throat (which still makes me a little queasy just typing it), he said, "Well, let's not talk about that any more. You'll come in and I'll take care of it, OK?"


That sounded good to me, so I scheduled the surgery for 6/5, a week after the BillG and a few days after my birthday (my own gift to myself : ).


So, I had a few weeks to shutdown my work because the doctor said that I would be out for "at least" two weeks recovering. "And you'll be on heavy medications, too. Kids bounce back in a day or two, but this is *very* painful surgery for adults."


Great. Never had any surgery other than my wisdom teeth and now I get a doozy.


I started informing those around me of my impending doom. And then the advice started.


"The first week was really easy. It's the *second* week that's hard."


"My throat hurt so much that I just didn't eat for two weeks. I lost 30 pounds!"


"Those drugs will lower your IQ by like 30 points."


"I wonder if your voice will change? Mine did."


"I had a tonsillectomy as an adult and I still can't say my Ls properly."


As a professionally speaker, I didn't mind the idea of my voice changing a little (hopefully deeper), but losing my Ls? Good lord!


I was not to eat or drink starting midnight the night before my surgery, so I didn't. Normally the sleep deprivation has acted as an appetite suppressant, so that and the exercise has caused me to lose 43 pounds in the last 6 months. Missing a few coupla meals hasn't been an issue, but by 3pm the next morning, sitting on the hospital bed in a hospital gown, my ass hanging out while every nurse and doctor in the place asked me if I'd avoided food and water of any kind and I started to get damn hungry, hoping for the surgery just to have something else to do (although Melissa let me win a few hands of gin, which was nice).


Then the nice anesthesiologist came and slipped me a little something. I felt completely normal for about 10 minutes and then I woke up in the recovery room, the nurses asking me if I could help them move from the gurney to the bed. Seriously. That was my entire surgical experience. Melissa was there, making sure my stuff came with me and asking if I was OK.


Oh, and I was feeling no pain. I don't remember much from those first few hours. I could talk, which apparently was very unusual. I could walk. I remember my sister-in-law bringing my boys by for a visit and them waking me up every five minutes so I didn't spill my juice all over myself. I remember several pretty nurses waking me up every hour or so to adjust this sensor or give me that medication. I don't remember what I said to them, but I do remember making them laugh, which made the increasing pain of my throat more bearable.


We figured out my pain dosage that first night, 10mg of OxyContin every 4 hours mixed with intravenous morphine to take the edge off. I was disappointed that I didn't get any kind of "high," though. I just felt fuzzy headed and sleepy. Is that what Rush liked? I don't get it. I tell you though that the tennis elbow I'd given myself with the free weights in my garage was *completely* cured.


In that first 12 hours, it was my job to be able to walk, go to the bathroom on my own and manage my own pain via oral medications. And I did so. In fact, I was recovering so quickly, the doctor came by and gave me permission to go home hours early. I'd told him the night before that, if my voice had to change, could he push it toward Barry White? Oh, and I'd like to be able to say all my letters if possible. That morning, he asked, "Have you tried it? Can you still say your Ls?"


And then, because I couldn't not, I channeled A Christmas Story for demonstration purposes: "Fa ra ra ra ra ra ra ra ra!" willing to endure the pain in my throat for the cheap laugh. And I got it. : )


I came home a week ago Friday and have been largely ignoring my work, sleeping most of the time, getting up mainly for drugs every four hours and a little food (Top Ramen, Popsicles and water). The combo put me to sleep within an hour, giving me just time enough to send the random pathetic email or IM before collapsing again. Gradually I've been cutting back on pain meds and eating more, my throat just a minor annoyance at this point. It still hurts and my voice is still scratchy, but a quick chug of OC and I'm back in the game, mostly awake during the day and asleep at night.


I went in for my week check-in with the ENT guy yesterday. He was delighted to tell me about micro-pustules and puss inflammation that had riddled my tonsils. Not only where they "huge," but apparently my body's been fighting them off as a low level infection for who knows how long. While telling me this, the doctor put a bib around me and handed me a tray to hold as I looked at him questioningly.


"Oh, I don't think you're going to throw up," he said, rummaging for some instruments in a drawer. "I just need you to hold the splints when I take them out."


As part of fixing my deviated septum, Doogie had put splits in my nose so that things would heal open. At the mention of "splint," I thought of a little stick to hold my nostril open like the pole in the center of a tent. I thought he'd reach in, cut it in two and pull out a couple of tiny toothpicks. Well, he reached in, stretched my nostril to uncomfortable proportions, clipped the thread holding the split in and started pulling.


Have you seen the scene from Total Recall where Arnold reaches up into his nose and pulls out that giant tracking device? Yeah. Think that except the split was longer. The doctor kept pulling and it kept coming out until it fell with a thump into the tray.


"That was in my nose?!"


"Yep. And there's another one on the other side," he said, reaching for the other side.


"There is?!"


"Yeah. Didn't I tell you? Oh, I guess you were asleep when I put them in," he said, pulling another canoe out of my other nostril.


"Oh my god!" I said, looking down at the snot covered railroad ties in the tray I was holding.


"Are you OK? You look a little pale. OK, head back..." He was much more comfortable getting the color back into my face the second time, having practiced on me before.


"Nurse! Cold compresses!"

Friday, June 13, 2008 1:15 PM  (10 Replies)

Bill's Last Review

The last coupla months have been crazy. We've been warming up our PDC message with a series of SDR (Software Design Reviews) where we invite folks from the community, influencers, important customers, etc, to come and hear what we think the story is for our new technology before we blow it in front of a live PDC audience. There's a ton of prep to make sure we're as polished and as thought through as possible and that we're presenting as well possible, so there's been a ton of work on what the story is and how to present it properly. The latter means that I run a little internal training course called "Sells University" which is kind of an "extreme presentation skills" workshop I run, complete with Sells U hats and t-shirts (the alumni parties are fun : ).


Still we don't always get it right, which means mining the feedback (loud, enthusiastic and extensive feedback) to see what we can improve for the next time.


Sometimes the "next time," is something called a "BillG Review." This is where we get together our best folks, our best bits and our best story and we bring the all together for BillG himself for up to 4 hours of dog 'n' pony show. Normally this is as much about forcing teams together that should've been together all along as it is about the actual presentation to Bill, but either way, it's generally a month or more of hard work.


This time, we had two weeks.


"Chris, how'd you like to put together the demo for Bill's last review?" was what Doug asked me. I'd been to a BillG before, but had never been that involved, so I really had no idea what the effort was going to be. When faced with a new challenge and little information, I did what I always do: "I'd be happy to," I said.


And so began two weeks of 14+ hour days, meeting every day with execs up to the VP-level, figuring out what the story was, who'd say what, the mix of demo to slides, what he'd heard before, what he'll want to hear, rat holes we want to avoid, rot holes we want to engage him on (called "drawing the foul" in softie-speak), timing, etc.


And those are just the daily meetings -- the rest of the time is spent actually getting the bits to work, which means integrating technologies across teams and divisions, often for the first time. Can't have Bill saying, "But why didn't you just use such and so -- they've already solved that problem?" so we have to make stuff work, even if it's alpha and hasn't been made to work together yet or isn't stable when you bring it together. So I'm pulling in all my friends and their friends to set up conference calls to make these bits work with those bits and using the name "BillG" like a club to motivate folks that are already very very busy.


And it worked. It was more than full-time for two solid weeks, but we got a stack of bits working reliably and repeatably to demonstrate the goals of our work. It was chewing gum and bailing wire, but it got the point across. And the demo I worked on was just 15 minutes of a two hour review; there were dozens of other folks working on the rest of it.


The BillG review itself? Imagine the nicest conference room you've ever been to, with giant leather chairs, a podium, a huge retractable projection screen, miles of white board and acres of windows looking out over the green Microsoft campus. Imagine our Sr. VP checking in on us minutes beforehand to straighten out any questions we need answered (we spent 30 minutes guessing where Bill would sit and arranging ourselves accordingly). Then imagine Bill himself coming in like a ninja, appearing in his designated seat as if he'd teleported to it from his previous meeting (and maybe he did). No introductions, no fanfare, just "We'll get right to it, Bill."


And he listened, laughing a little from time to time, asking the odd question. I'd been at one of these before, but sitting along the wall, looking at the back of Bill's head. This time I was at the big boy's table. Last time, I'd tracked f-bombs, keeping a running total in my head: the higher the number, the worse you're doing. The last time, we had one/hour, which was considered to be outstanding. This time, zero. Even though the demo I'd prepared didn't go off flawlessly (there was a continuous reset in the underlying communications stack we were using that we'd never seen before), he got enough of the demo to appreciate our intent and was interested enough in the the rest of the material to seem pleased.


Near the end, he started talking more, synthesizing our work with the work going on in the rest of the company, making startling leaps that I'd never considered (and I've got pipe dreams in my head for the upcoming release and the one after that). We agreed some. We pushed back some. We asked him for help making some things happened.


And then he was gone, 30 minutes over his time, but off to somewhere else he had to be.


And then gushing started. We kicked ourselves for the little hiccup in our demo, but really we'd shown him what we wanted to show him and we felt good about it.


Was it really Bill's last review? Well, probably not. He's still got a few weeks left in his official role as chief software architect and I hear he still wants to work part-time on his pet projects (I was surprised to learn that we were one of those), but it's certainly one of the last. I can say that I worked to put together part of a BillG review while he was still around.


I still can't say that I've actually *met* the man, though. sigh.

Friday, June 13, 2008 9:55 AM  (0 Replies)

$200 Off Early Registration for PDC2008!

I love the smell of the PDC in the morning!

Wednesday, May 28, 2008 11:36 AM  (0 Replies)

The Next Generation

When I was in high school, "game programmer" meant at best BASIC or at worst 6502 assembly language, but either way, lots of text manipulation. These days, high school-age programmers are going to camps and programming competitions having spent their time in drag-n-drop programming environments like Game Maker. They've been doing work flow for 7 versions already!


Yesterday, I was a judge and the keynote speaker at a high school game programming contest. After asking a bunch of the 25 teams questions about their games, I was asked to speak about careers in software to 100 high school computer geeks. My people!


I started by introducing my youngest son as the "slide monkey" to warm applause and them myself as a Microsoft employee to... silence. So, I said: "How many of you think that Microsoft is..." and then I put my face down to the podium microphone and said in a voice from God, "EVIL?". Half of them raised their hands, all of them laughed and I had them engaged for the next 20 minutes.

 

Instead of listing various careers and their duties, I had dug through literally 13 years worth of bad Internet humor (641 emails) that I'd saved over the years and used all the silly, stupid, funny pictures to illustrate the various careers, like an x-ray of Homer's tiny brain (Architect), a picture of some hand puppets chasing a kitten (Legal), street signs that said "left turn" and "keep right" at the same time (User Assistance), etc. A couple pictures I had to clean up, like that one that said "Every time you masturbate, God kills a kitten," but even so, the pictures worked: they were listening to me.

 

While I had their attention, I told them two things. First, I told them that Microsoft was hiring. : )  Second, and most importantly, I told them not to worry about the money, but to pick a job that's going to get them excited every day. Pick the job that's the most *fun*. And when that one isn't fun anymore, pick another one! I tried to put every ounce of sincerity I had into it, because I believe it. I love my work, I love who I work with and I think everyone should have that. I know it's silly, but if I could inspire just one person to reject some high paying job that's going to make them miserable in favor of a starvation-wages job that they'll love, then I'm happy.

 

And to illustrate the downside of picking the wrong job, I closed my talk showing a little boy balling his eyes out (although in his case, it was because of Santa's tombstone behind him : )

 

What a good way to spend the day. Highly recommended.

Sunday, May 18, 2008 12:38 PM  (6 Replies)

Why I Love My Tribe and Want You To Join It!

Recently, I went to lunch with some friends of mine from the DevelopMentor Software days (wow, *that* was a long time ago) and they accused me of "radio silence" for the last two years.


"What?" I said. "I blog all the time!"


"Oh yeah? What have you been working on again?"


"Uhhh..."


I've mentioned my work on this blog in passing as "model-driven" this or "data-driven" that, but never the details. And I still can't tell you those kinds of details.


But what I can tell you is how I spend my days, because they are *glorious* days.


Have you ever had one of those jobs where you're energized about coming to work every single day, because whatever you're doing, it *really* needs doing and it's going to be different than yesterday?


You might be pushing to finish writing a talk for an upcoming SDR (Software Design Review) or getting that last bit of code checked in before a big internal drop, digging into security threat modeling for the first time or complaining that the thing your team is building is too damn hard to use, only to be told, "fine, then, fix it!"


You could be holding the hand of a new Jr. PM just joining the team or busting the balls of some Sr. Architect that thinks he's all that and a box of Cracker Jacks, interviewing the next set of folks that are dying to be on your team and turning some away because as much work as you have to do, it's better to leave it undone than to lower the bar even an inch on the quality standards you're committed to living up to.


You could be building your own sub-system that we already have 8 of inside the company, but you need some source code you understand and that you can experiment with so that you can add the one or two features you think could really make a difference, only to find out you've just built the thing that your management wants to base the next-gen version of that very sub-system on.


You might be meeting your boss in the ProClub locker room when you're half naked or soaking in the hot tub laughing about some trick you pulled in a meeting, listing the customers that need special attention or cornering an executive in the elevator asking for a really cool thing we have to do for the PDC, damn the cost.


You're definitely going to be going into work with the smartest, nicest, most fun, more interesting, most sincerely quality-focused people you've ever known. After Don had first come to Microsoft for a while, he told me that he'd found his "tribe." I'd been at DevelopMentor during it's heyday, so I couldn't imagine ever finding another group of people I enjoy working with that much. I was wrong. My tribe (of which Don is one of the chiefs) gets so much accomplished because we lean on each other, we trust each other and we spend *so* much time laughing with each other (and *at* each other : ).


Most of you will be able to see the thing I've been working on with my tribe at the PDC. Or, if you'd like to help us build it, we're always looking for new tribe members.

Wednesday, April 30, 2008 12:04 AM  (3 Replies)

Nobody Knows Shoes: The Book -- Pure Genius!

I friend of mine dropped a book with a funny cover in my lap and said, "Hey, check this out." I threw it on my pile and didn't get back to it for a few days. When I did, I didn't know what to make of it. It was like The Grapes of Wrath by Rory Blyth, with illustrations by a drunk Salvador Dali.


It took a few pages, but I eventually figured out that "Shoes" was a cross-platform GUI framework for Ruby and this 52-page book was a tutorial for it. By page 15, I knew the major concepts. By page 20, I could write my first program. By the end, 30 minutes after I'd started reading, I knew the whole thing.


But it was page 24 that completely blew me away. The use of pictures of dominoes and matches to illustrate layout in stacks and flows was genius. This wasn't just a random collection of wacky illustrations and  non-traditional font choices -- the author of this book really knew how to tell a story.


It wasn't that I wanted to program Shoes, so went looking for a tutorial. It was the tutorial that made me want to program Shoes. Now *that's* writing.


P.S. This book is not from a publisher -- it's self-published through LuLu.com for cost. There is no bar code, copyright page, Table of Contents or index. It's just the stuff you actually need to get started programming a completely new thing. And, if you don't want to shell out the $8.72 to read a paper copy, you can read the HTML and PDF versions instead.

Saturday, March 22, 2008 9:38 AM  (4 Replies)

Anyone know anyone in the TV industry?

Don turned me onto the Walking Dead series of "graphic novels" (I'm too proud to call them "comic books!") and I loved them. I read volumes 1-4 in one day when I should've been doing other things.


Don thinks that they're good enough for a Lost-esque style 10pm cable TV show and I agree. The interplay of characters and watching them fall apart under the pressure is fascinating. The zombies are there, but it's mostly a background thing, like IRS agents when you forget to include the check (I wrote it! I swear I did!).


Anyone know anyone that needs the story for a new TV show? We'd watch and buy tons of advertisers' products!

Monday, March 17, 2008 4:24 PM  (1 Replies)

Do you want to host the WF workflow and rules designer?

If so, fill in this survey and tell the WF team what you want. They *really* want to know.

Friday, March 14, 2008 12:55 PM  (4 Replies)

On Beyond Unit Testing

Quetzal Bradley is a software development engineer (SDE) on my team with *tons* of experience in all manner of infrastructure stuff including the requirements of real-world software testing from the trenches at Microsoft.


Q gave a talk about what comes after unit testing to my team and I was blown away, so I sent him to tell Scott about it so that you could hear it, too.


Enjoy.

Saturday, March 08, 2008 2:02 PM  (1 Replies)

My Favorite Blog: Scott's computerzen.com

If I have time to read the web, I go to digg.com first, computerzen.com second and very little after that.


Just this morning, I enjoyed Six Months in the Inside - Am I evil yet?, Amazon Kindle and LINQ to Everything - LINQ to XSD adds more LINQiness. The Kindle review was especially enlightening because it was the first one I've read that actually a) covered the stuff I care about and b) pushed me off the fence about whether I want one (I do!).

Tuesday, March 04, 2008 7:15 AM  (1 Replies)

Programming WPF: "Programming Book of the Decade"

*blush*

Monday, March 03, 2008 12:33 PM  (2 Replies)

Programming WPF enters 2nd printing!

Wahoo! You love us, you really love us! : )


When a book goes to another printing, 100% of the time, there's a list of "errata" (aka "mistakes") that are fixed in the new printing. In this case, neither Ian nor I have any fixes to apply. So, it's official -- the book is perfect! : )


Thanks for reading.

Thursday, February 21, 2008 7:35 AM  (4 Replies)

Bridging object models: the faux-object idiom

My 1997 master's thesis came online today (he says, trying not to flinch). Here's the abstract:



Microsoft's Component Object Model (COM) is the dominant object model for the Microsoft Windows family of operating systems. COM encourages each object to support several views of itself, i.e. interfaces. Each interface represents a collection of logically related functions. A COM object is not allowed to expose multiple interfaces using multiple inheritance, however, as some languages do not support it and those that do are not guaranteed to do so in a binary-compatible way. Instead, an object exposes interfaces via a function called QueryInterface(). An object implements QueryInterface() to allow a client to ask what other interfaces the object supports at run-time.


This run-time type discovery scheme has three important characteristics. One, it allows an object to add additional functionality at a later date without disturbing functionality expected by an existing client. Two, it provides for language-independent polymorphism. Any object that supports a required interface can be used in a context that expects that interface. Three, it provides an opportunity for the client to degrade gracefully should an object not support requested functionality. For example, the client may request an alternate interface, ask for guidance from the user or simply continue without the requested functionality.


COM attempts to provide its services in as efficient a means as possible. For example, when an object server shares the same address space as its client, the client calls the functions of the object directly with no third-party intervention and no more overhead than calling a virtual function in C+ +. However, when using COM with some programming languages, this efficiency has a price: language integration. COM does not integrate well with a close-to-the-metal language like C+ +. In many ways COM was designed to look and act just like C + + , but C + + provides its own model of polymorphism, object lifetime control, object identity and type discovery. Of course: since C+ + is not language-independent or location transparent. it was designed differently. Because of these contrasting design goals, a C+ + programmer using COM often has a hard time reconciling the differences between the two object models.


To bridge the two object models, I have developed an abstraction for this purpose that I call a faux-object class. In this thesis, I illustrate the use of a specific instance of the faux-object idiom to provide an object model bridge for COM that more closely integrates with C+ +. By bundling several required interfaces together on the client side, a faux-object class provides the union of the operations of those interfaces, just as if we were allowed to use multiple inheritance in COM. By managing the lifetime of the COM object in the faux-object's constructor and destructor, it maps the lifetime control scheme of C+ + onto COM. And by using C+ + inline functions, a faux-object can provide most of these advantages with little or no additional run-time or memory overhead.


COM provides a standard Interface Definition Language (IDL) to unambiguously describe COM interfaces. Because IDL is such a rich description language, and because faux-object classes are well defined, I was able to build a tool to automate the generation of faux-object classes for the purpose of bridging the object models of COM and C+ +. This tool was used to generate several faux-object classes to test the usefulness of the faux-object idiom.


Enjoy.

Wednesday, February 20, 2008 12:28 PM  (9 Replies)

.NET Source Code Mass Downloader

On 1/16/08, Microsoft announced the ability to download some of the .NET Framework source code for debugging. This download process was only supported inside of a properly configured Visual Studio 2008.


21 Days Later: Kerem Kusmezer and John Robbins released a tool to download the source code en mass. Frankly, I'm surprised it took so long. : )

Wednesday, February 06, 2008 2:22 PM  (5 Replies)

I woke up today and decided to win the lottery

And so I did the only thing I could to do increase my odds -- I actually played the lottery. (I blame my inability to apply this strategy for my lottery losings in the past.)


I did a little research and then went to two local Plaid Pantries to purchase the Oregon Lottery "Trio."


At the first Plaid Pantry, an thin, stringy haired older lady behind the counter blinked in surprise when she saw me and then laughed to herself.


"I just saw your geek pin. It's so subtle... geek..." she said. "I wish I would've paid more attention to geeks when I was growing up. I only paid attention to the rockers."


"Well, that's pretty common," I said.


"But they're dumb and self-centered!"


"Yeah, but they get all the girls..."


"Well, I'm not a girl anymore and I prefer nerds. They're more stimulating!"


"Well," I said. "On behalf of the geek community, thank you."


She smiled, handed me my tickets and I left proud of my geek heritage.


At the second Plaid Pantry, a crowd had formed at the front desk. I got to the front of the line and a little old lady with a plastic tiara was cutting into a homemade chocolate fudge cake. The lady behind the counter said, "It's her birthday! And we love her!"


"Your birthday!" I said.


The birthday girl said, "Yep, don't you see my 65-year-old birthday crown?"


"Lovely," I said. "Happy birthday!"


The lady behind the counter said, "Well, no one was going to make a cake, so I did. That oughta be against the law."


I agreed and placed my Trio order. On the way out, I was happy to have been even a short part of that woman's birthday at the local convenience store where she was loved.


I decided to walk across the street to the locally owned coffee shop, tucked away off the main streets, fighting for survival against the Starbucks juggernaut. I walked in, said good morning to Ju, the owner and proprietor, who immediate started making my standard order. I haven't been there for months, but he still remembered what I wanted.


It's already been a good day. Think how much better it'll be after they announce my winning numbers? : )

Friday, February 01, 2008 9:20 AM  (8 Replies)

Poetry Proclivities

I'm not a big poetry fan in general, but notable exceptions are Poe's The Raven (especially the Simpson's version), Dr. Seuss and Shel Silverstein.


However, I have to admit a certain fondness for the lowly limerick. I've done some composing, but the subject matter is often not something I'd want to post on my blog ("Hi, Mom!"), so when I ran into the rare clean one, I had to share:


A Limerick packs laughs anatomical
In a space that is quite economical
But the good ones we've seen
Very seldom are clean
And the clean ones so seldom are comical


I've seen geek poetry, geek activities as song parodies, programs as songs (genius!), but I've never seen a geek limerick. Got any?

Wednesday, January 30, 2008 7:41 AM  (11 Replies)

Configuring VS08 to Debug .NET Framework Source

Shawn Burke has released the details to set up VS08 to debug into the .NET Framework source code, including the following assemblies:



  • mscorlib.DLL

  • System.DLL

  • System.Data.DLL

  • System.Drawing.DLL

  • System.Web.DLL

  • System.Web.Extensions.DLL

  • System.Windows.Forms.DLL

  • System.XML.DLL

  • WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others)

  • Microsoft.VisualBasic.DLL

Others are coming. Thanks, Shawn!

Friday, January 18, 2008 2:38 PM  (1 Replies)

Bookscan says "Programming WPF" is #3 .NET book!

Wahoo!

Thursday, January 17, 2008 10:25 AM  (0 Replies)

WPF Book Easter Egg

Does anyone have both the Anderson WPF book and the Griffiths/Sells WPF book? If so, have you read Don's forewords in both books?

Tuesday, January 08, 2008 11:46 AM  (9 Replies)

The Annotated Turing!

I just saw that Mr. Petzold is re-publishing the paper that started computer science and annotating it so that even I can understand it. I can't wait!

Sunday, January 06, 2008 7:55 AM  (6 Replies)

Time for some anti-social networking

OK, just after all my friends are on FaceBook, now I'm getting the requests to join Spock.com. I don't know what Spock.com is, but after the address-book thingie, MySpace, the high school alumni thingie, Friendster (?), the Google ork-something, the business thingie and most recently FaceBook, I'm all done. All I ever do on these sites is approve friends requests! Isn't there supposed to be some value to it other than that?


Oh, sure, I've had a few messages from people I haven't heard from in a while, but email works for that. In fact, email works for a helluva lot of the internet apps I see today. Plus, most of them just forward web form results to my email anyway! Why do I need a whole other thing when I've already got all my friends listed in my address book?


I declare the social network backlash officially started!


From now on, I'm going to be doing some anti-social networking around the ol' Casa de' Sells. If you want me, you know my email addresses, how to post comments on my blog and my phone number. That should be enough.


"*cough* When I was a boy, we didn't have these fancy social networks. *cough* *cough* We had email and we were happy to have it!"


"Yes, Grandpa. Shhhh...."

Saturday, January 05, 2008 5:37 PM  (15 Replies)

"So easy to read, it should be illegal"

Thanks very much "ET" on the Canadian Amazon. I can think of no higher compliment. : )

Friday, January 04, 2008 9:41 AM  (9 Replies)

WHS Continues to Rock My World

In the same way that .NET manages memory for you, Windows Home Server manages storage. All you have to do is tell it the names of shared folders you want it to have and which computers to back up and it will spread it and duplicate it across however many HDDs you have, without you worrying about which actual HDD your "Music" folder is on or where your wife's computer is being backed up to.


Plus, if you have more than one HDD and you have "Enable Folder Duplication" enabled for a shared folder, the data in that folder will be shared across multiple HDDs, effectively giving you the benefits of RAID without the config muss and fuss. (It's my understanding that this cross-HDD data duplication happens automatically for backed up data, but I don't know how to confirm that empirically without risking the data.  : )


Because a 750GB SATA HDD was $156 at newegg.com, it was a no-brainer to pick one up. It arrived today and it was mean-time of 10 minutes between tearing the tape off the box and the new HDD being used for data storage on my WHS. I didn't even have to turn off the HP MediaServer machine!


All I did was pull an empty drawer forward, place the new HDD into it and push the drawer closed. Seating the drawer also seated both the data and power connections on the HDD itself, no wires or plastic connectors needed. I want all HDDs to work this way!


10 seconds later, the little light went on that said my new HDD was ready to be added as storage to my WHS, which only took right-clicking in the WHS console (already updated to display the new HDD) and adding it as storage. Another 10 seconds and some additional settings changes to enable folder duplication on my shared folders and the new HDD is in active service, providing redundant storage for all the data I care about in the house.


Really, the only problem I have now is that I only have enough data to fill 14% of the 1.4TB of new storage space. Maybe we need a Windows Friends & Family Server and I could rent out the extra space? : )

Thursday, January 03, 2008 3:57 PM  (8 Replies)

Fingerling Potato Baby Jesus

This is what happens when my relatives get together and the wine flows freely... : )

Thursday, December 27, 2007 5:37 PM  (8 Replies)

Christmas Delight

Not all was gloom and blackness this XMas. Among the new things in our lives, several of them rocked*:



  • Our new HP MediaServer running Windows Home Server is awesome. As a Microsoft employee, I got a killer deal on this server appliance, but knowing what I now know, I'd have paid full price -- a whopping $550. In fact, I recently sunk another $200 into it for a memory upgrade and a 750GB HD, bringing it up to 1.25TB.

    WHS keeps all the computers in my house automatically backed up, keeps shared folders duplicated across multiple HDs which can be added via the slide-out drawers in the front of the unit (no muss, no fuss) and serves it all up over the web securely. Plus, it's platform for add-ins, so, for example, if I want offsite storage of everything on the WHS box in case of catastrophe, I can get KeepValue for a flat $100 year.


  • My youngest's new Zune 2 is the best MP3 player I've ever touched. We got the 4GB version, which is tiny, but still comes with amazing video playback, an FM radio and very intuitive controls. (I know I'm unusual in this regard, but when I first touched the iPod, I had no idea how to make it work and the manual didn't help.)

    The client software is also a joy to use. The look and feel is unique and simple. Both the client and Zune UIs make me hope that those guys actually are building a phone. I want it.

    Plus, we got a pair of the Altec-Lansing Zune speaker dock from woot.com for $40 and they sound great, worked instantly and come with the cutest remote control. Very nice package.


  • I can't wait to put my new portable Bosch 10" Table Saw with Gravity Rise Stand to use (thanks, Babe!). I've been remodeling my homes for years, doing as much of it myself as I have time for, but was missing a saw to do straight rips. I'm all set now!


  • My brother-in-law got Rock Band for his family and it *rocks*, especially the tone feedback on the microphone. (I love to sing, which you'll know if you're ever trapped in a car with me and Bohemian Rhapsody comes on the radio : )


  • My youngest also got a pair of the Killer Rabbit Slippers, which Chris picked up for me when he and his wife went to Spamalot. I'd covet my son's new slippers except I love the Goofy loafer Slippers I stole from him years ago. : )

What did Santa bring you this year? Anything you'd recommend or want to steer folks away from?


*Yes, I know I'm a Microsoft employee and biased. Feel free to take what I say with as much salt as your heart can take. : )

Thursday, December 27, 2007 2:51 PM  (3 Replies)

The Sidekick Phone Sucks

I brought my son a Sidekick Slide cell phone for XMas this year and I've come to the conclusion that it sucks, or at least the way T-Mobile sells it sucks.


When I purchased it, the T-Mobile salesman offered me unlimited data and text messages for an additional $20/month on that line. The phone was an upgrade on our existing family plan, which already has 3000 minutes/month and unlimited text messaging and I don't really need my son surfing the interweb during class, so I declined. He never mentioned that the phone wouldn't actually work without this extra money, or I never would've purchased it.


Then, XMas morning rolls around, my son is super-excited and plugs his SIM card into his new phone, turns it on and is greeted with the activation screen. This lasted for hours. Eventually, he found the magic key combination and was able to use the phone, but when it crashed, it lost all his contacts and pictures. Plus, the battery life sucked, lasting maybe four hours between charges. The boy swears it's because it's still trying to activate in the background.


Finally, we called T-Mobile "customer care." If I wanted to use the "full capabilities" of the phone, like save f-ing contacts, we pay the $20/month. The contacts are saved "on the network" *only*. That sucks. This was a $200 phone subsidized with a 2-year extension to the contract and it can't store f-ing phone numbers?!?


I was about ready to cram the phone back up the T-Mobile salesman's.... well, I would've returned it, but the boy was so enamored, he committed to ponying up the dough from his allowance.


And I have a sneaking suspicion that even though we now have the "Sidekick feature" package, that the battery life is *still* going to suck... Keep your fingers crossed.


P.S. I can't tell you how much my son loves this phone...

Wednesday, December 26, 2007 10:48 PM  (3 Replies)

Microsoft needs you to build Emacs.Net

Interested? Drop Doug a line.

Wednesday, December 26, 2007 8:42 PM  (3 Replies)

Posting from my OLPC PC

The form factor is cool, the OS is fine (although I'd prefer Windows) but the chicklet keyboard is worthless. I can literally type faster on my t-mobile dash smartphone. Anyone want an OLPC laptop PC for $200 + shipping?

Sunday, December 23, 2007 10:13 PM  (15 Replies)

XBOX 360 For Pennies a Day!

In 2006, I purchased an XBOX 360 bundle from CostCo for about $550, including the console, a game and two wireless controllers.


In April of 2007, my 360 caught the "red ring of death" ("Ring around the rosy, pockets full of posies, ashes, ashes, we all fall down!"), at which point I brought it back to CostCo and exchanged it for the bundle they had available at the time, which was $475. They refunded me the difference!


Net return: $75 in one year on an initial investment of $550.


Earlier this month, my new 360 also caught the plague and I returned it again to CostCo, where the holiday bundle now costs $400.


Net return: $75 in 7 months on an initial investment of $475 in 58% of the time from the last return of this amount.


If this continues, at this rate I'll have made my original investment back in another 9 months, at which point I'll have had the use of an XBOX 360 for 28 months for the opportunity cost of the original $550, which is approximately $50 at 7% over two years after taxes, $1.80/month or 6 cents/day.


What a deal! : )


P.S. The moral of the story: buy your electronics at CostCo.

Sunday, December 16, 2007 2:22 PM  (13 Replies)

Conversing In Italian over the Interweb

Yesterday I got an email from a fellow named Corrado Cavalli to whom I sent a free copy of Programming WPF. When he received it and read through it, he posted a note on his web site, which of course, I went to read.


Now, Corrado lives in San Pellegrino Terme, Bergamo Italy, so his blog is in Italian. That didn't stop me from reading it in English using Google's language translation page.


Then, just to be "cheeky" as my Australian friends say, I composed simple responses in English and translated them to Italian before posting them, you know, pretending I'm smart and international and such like. : )


To be somewhat confident I wasn't asking him for improper knowledge of his dog, I did the Italian to English translation on the translated text and rearranged my English it bit when it wasn't quite right.


All in all, I'd say it worked out pretty well, although I did get some flowers from his dog the other day...

Wednesday, December 12, 2007 10:20 AM  (5 Replies)

Here Comes Another Bubble sttto some Billy Joel song...

This is hilarious!

Tuesday, December 11, 2007 12:01 PM  (1 Replies)

Win a Trip to NYC + WPF Dream Machine with Your WPF Application Stylings!

The nice folks at Lab 49 are throwing a contest for WPF programmers.


The goal: take the financial data they provide and build a kick-ass WPF app around it.


The grand prize:



  • a trip for two to the MS Financial Services Developer Conference in NYC

  • the "Ultimate WPF Developer's Machine"

  • an XBox 360 Elite (plus games!)

  • a Zune

  • a profile in WindowsFS magazine

  • a copy of Expression Studio, Visual Studio 2008 and Windows Vista Ultimate

  • a WPF Team signed t-shirt

  • <whew>!

Final submission is 2/29/08, but there are other prizes for early submission (by 2/14/08).


The judges (Charles Petzold, Rob Relyea, Josh Smith and yours truly) will be looking for "your use of WPF, innovative display of financial data, the quality of your code, performance, appearance, and overall functionality."


I'm a bit of a financial nut, so I'm very much looking forward to the results of this contest. Dazzle us!

Monday, December 10, 2007 12:52 PM  (3 Replies)

Give Them a Fish or Teach 'em To Fish?

Dvorak asks this about One Laptop Per Child:



"Does anyone but me see the OLPC XO-1 as an insulting 'let them eat cake' sort of message to the world's poor?"


I can see his point, but I don't see how decades of giving food and support to the 3rd world has helped them to become part of the 1st world. Maybe access to the world's information so that they can educate themselves and learn how to solve their own problems might work a little better. It's worth a try at least.

Monday, December 10, 2007 9:00 AM  (10 Replies)

Mark Your Calendars! PDC08 Announced

Save the Date!


Announcing PDC08


October 27–30, 2008
Pre-conference October 26, 2008
Los Angeles, California

Thursday, December 06, 2007 10:04 AM  (0 Replies)

12 ways to de-commercialize the holidays

From 12 ways to de-commercialize the holidays:



  1. Yankee Swap

  2. Secret Santa

  3. Un-Secret Santa

  4. Re-gifting

  5. Pool your resources

  6. For children only

  7. Donate in others' names

  8. Limit spending

  9. Families helping others

  10. Plan family outings

  11. Let the kids rule for one day

  12. Take a trip

On the "Let the kids rule for one day" front, that's what we do each year for each kid's birthday. They look forward to that part of it more than any other.

Monday, December 03, 2007 6:10 PM  (4 Replies)

StayAtHomeServer.com!

From Mommy, Why is There a Server in the House?:



"When a mommy and a daddy love each other very much, the daddy wants to give the mommy a special gift.


"So he buys a 'stay-at-home' server."


I wish more of the rest of Microsoft had this kind of humor when dealing with the world! I thought I was going to wet myself...

Monday, December 03, 2007 5:58 PM  (0 Replies)

MS Math Add-In for Word 2007

I mention this because this is just the thing I've wanted to be able to check my kid's math homework: the Microsoft Math Add-In for Word 2007.


For example, after installing it, I can open Word, press Alt+= to get myself a new equation and then enter:


x^2 +2x + 2 + 3x - 4x^2


it translates into:



If I right-click and choose Simplify, I get the following:



If I right-click again and choose Plot in 2D, I get:



If I've got an equation that I want to solve, I can enter it:



and then right-click and choose Solve for x and get all the possible solutions:



This even works if you have multiple equations with multiple unknowns, which means this is good through at least 8th grade Algebra. Wahoo!

Friday, November 30, 2007 10:35 AM  (6 Replies)

1 Setup == Innumerable Uninstalls?

OK, what's the deal with installing 1 product (Visual Studio 2008 beta 2) and having to do 22 separate uninstalls?!? How is this a good thing?

Tuesday, November 27, 2007 7:09 PM  (8 Replies)

Why aren't Windows settings stored in %HOMEPATH%?

Normally, this is the kind of question I'd pose and then provide an answer, but this time I just don't have one.


If my Word settings were stored in %HOMEPATH%\WordSettings.xml, I could edit the file, back it up, carry it to other machines and generally manage it. Instead, my settings seem to be stored in the Registry, %LOCALAPPDATA% or %APPDATA%, but who knows what's stored where or how to manage it.


Obviously, Unix already does just this and I'm jealous. If I had settings stored somewhere I could understand and apps that actually used XCOPY deployment, I wouldn't have to uninstall at all -- I could just delete.


These are the thoughts you have uninstalling VS05 and VS08b2...

Tuesday, November 27, 2007 6:18 PM  (17 Replies)

I had to load FireFox on my machine yesterday

In general, IE7 more than meets my needs. It shows me the web pages I want and it works well. However, there is one killer feature that FireFox has that I desperately needed yesterday that caused me to load it onto my machine. It's not my default browser and it doesn't replace IE7, but FireFox is there and fulfilling my one killer feature needs nicely.


What's the feature, you ask? Well I'll tell you: sane content scaling. IE7 has Ctrl+, but it works very poorly, unlike FireFox, where it works fabulously.


Here's the problem. Yesterday, I started reading the most excellent C# 3.0 in a Nutshell online, but the "Text Zoom +" button didn't increase the font size nearly enough for me to read on my giant LCD monitor. So, I started pressing Ctrl+ on IE7 and the text got bigger, but it didn't wrap the text inside the window, instead giving me horizontal scroll bar. This confuses me, because IE wraps text just fine when the window is resized or when the text size changes -- why can't it wrap when the content is scaled?


Anyway, FireFox rescales things very nicely and made my online reading very pleasant.

Monday, November 26, 2007 12:04 PM  (13 Replies)

C# 3.0 in a Nutshell, LINQPad and Pure Genius

I absolutely love what the Albahari brothers (Joe & Ben) have done with C# 3.0 in a Nutshell. Not only is their prose concise in a way that mine is not, but I have learned a bunch of stuff about LINQ I didn't know, they built a tool (LINQPad) that lets you experiment with LINQ interactively in a way that the designers of LINQ themselves don't support and the tool has all kinds of wonderful features that LINQ, SQL and Regular Expression programmers alike will want to use regularly long after they've read the book.


And if that weren't enough, the tool comes with an integrated tree of samples that follow along with the material in the book, teaching the material from another angle and reinforcing it perfectly. It's pure genius and if I ever write another book, it's a model I'm going to follow. Very highly recommended.

Monday, November 26, 2007 9:06 AM  (7 Replies)

Amazon Kindle Real-Life Review

I've posted about ebooks before (e.g. I Hate Books). It sounds like the Amazon Kindle has some real potential. All we need is a product with enough critical mass to create a market and then we can have real competition ala the music player market.


Has anyone used an ebook reader before? I have some friends with the Sony version and they love it. Are we there yet? Does anyone have a Kindle?

Saturday, November 24, 2007 11:11 AM  (11 Replies)

Visual Studio 2008 Has Been Released!

From the Visual Studio home page:



Enjoy! I know I have been.

Monday, November 19, 2007 10:52 AM  (1 Replies)

My Team is Hiring and We Need YOU!

As Don Box, Chris Anderson and Doug Purdy have mentioned, my team is hiring. We use agile methods and "everyone shovels," i.e. everyone designs, codes, writes unit tests, gives presentations on their stuff and writes the core docs.


Presently, we need language designers and UI framework designers. Interested? Tell Doug I sent you.


P.S. Did I mention that the team includes Don Box, Chris Anderson and Doug Purdy as well as Martin Gudgin, Jeff Schlimmer and Clemens Szyperski, as well as a bunch more talented folks?

Friday, November 16, 2007 10:31 AM  (3 Replies)

Free copies of "Programming WPF" for YOU!

I just got a box full of free copies of Programming WPF from ORA.


If you want one, post a comment on this post with a) a reason why you deserve one and b) contact info so I can follow up for snail mail addresses.


That's it! I'll pick the top n folks based on how many books I've got when I unpack the boxes. : )

Wednesday, November 14, 2007 3:20 PM  (163 Replies)

Volunteering as Christmas Present?

When I was a kid, Christmas was my favorite holiday because my entire family (grandparents, parents, siblings, cousins, aunts and uncles) would get together at our lake cabin, chop wood for the fireplace by day and play games at night, culminating in an hours-long gift opening bonanza on Christmas Eve where each of us would watch the opener open a gift, youngest-to-oldest, one at a time. Did we like opening? Sure, but even better was seeing the look at the person's face when you'd managed to get them just the right thing because you saw them all the time and you knew what they wanted.


Now, I'm building my own family in Oregon, but I still have parents and in-laws and grandparents that need Christmas presents. Do I know what they want and need? No, because I hardly ever see them. Do I get to see their faces when they open the gifts? No, because I'm in Oregon. Does that get me off the hook? No, because when the presents don't show up in time, one or two have been known to call and complain. So, what's a remote relative to do?


In the past, I've floated the idea of sending donations in their names to various charities, but that seems kind of like a cop out, as there's no real thought or effort in it. Plus, it's not every much fun to open.


This year, I thought I'd give an hour of volunteer service and then write a little story about it for them to read around the tree in our absence. I'll pick an organization that fits their personality. For my step-mom, I might walk dogs at the local Humane Society (she likes dogs). For my Grandmother, I might volunteer to drive some elderly shut-in on her holiday errands (as I do for her when I can when I'm in town). Then, step-mom and Grandma can hear about how the hour went and share it with whoever they're opening presents with by reading my description out loud. This way, someone gets something they need, I've put in the effort to show my loved on that they really are loved and there's a little something under the tree.


Thoughts? Has anyone done something like this before? Does anyone have any ideas for Portland-area organizations that can help me get my volunteer hours in this holiday season?

Monday, November 05, 2007 12:33 PM  (6 Replies)

The Future of Telecommuting

I truly believe that the future of employment will be much more individualistic and that requiring people to move will be an anachronism. Right now, phone + LiveMeeting is about 50% as good as being there; you're limited in what jobs you can do based on how much a part of your job "being there" actually is. We already have the pieces of technology to push "being there" to about 80%; we just haven't put them together yet. When we do, a bunch more barriers are going to come down. Until then, some folks are on the bleeding edge and isn't that what this whole industry is about anyway? : )

Monday, October 29, 2007 6:12 AM  (8 Replies)

Working Remotely for Microsoft: Misc Tips & Tricks


  • I used to drive up because it gave me the freedom of traveling whenever I wanted and I always had a car on the far end. Besides the speeding tickets, the other big problem was the amount of human energy it takes to drive back and forth so often.

  • I've taken the train, which I love because of the comfy surroundings and the electron dispensers, but if I want to be at a 9:45am meeting on Monday morning, I have to leave on the 2pm train on Sunday, which really cuts into family time.

  • Now I fly. The drive to the airport is only 30 minutes and I've never gotten a ticket along the way. When I get there, I use the express line to Seattle flights and get myself a Chai tea on the far side of security, itself made easy by long practice and my slip-off Crocs. The flight is short and I've long ago dropped off luggage that I leave in building 42, so I only have to bring clean undies in my laptop carry-on. When I land, instead of renting a car, I take a cab and get the benefit of the HOV lane when means I can take the 8am flight instead of the 7:30am flight, giving me 30 more minutes in bed. When I arrive, I have a junker freebie car I leave in the parking lot for tooling around town.

  • I split my overnights between my long-time friend and mentor Don Box and a local hotel. I stay at the hotel because I don't want to overstay my welcome and I stay at Don's because he and his family have made me feel so at home that I can't not stay there. As much as Don would prefer I be in WA, he has really gone a long way to enable my lifestyle and I love him for it.

  • Sometimes when I'm on a roll, I'll keep going long into the night, just like the old days at DM. And sometimes when I'm not feeling it, I'll take the afternoon off and see a movie with my sweetie. It's all about the balance.

  • I've always had an office for when I'm in Redmond, but I've always made sure I was the first guy on the double-up list when things get tight. Now only does this give me more face time when I'm in town, but I look like a hero and the guy who rooms with me only has to put up with me 3 days out of 10. I also let the other guy decide how to lay out the office, since my real office is set up just how I like it at my house. I've worked on couches, in the hall, in conference rooms, in the care and at the local Starbucks on 156th. Give me a laptop and wi-fi and I'm good to go.

  • Keep a machine setup inside the firewall. Every once in a while, VPN won't let you do anything except terminal serve into a machine, at which point you can do anything just like you were there.

  • Make Microsoft pay at least half of your phone and internet bills.

  • Just because you're working from home, you should expect adequate equipment to be supplied by your employer. Over a 4.5 year period, Microsoft has supplied me with two laptops, a 20" LCD monitor and a printer-fax-scanner-copier, all in my home office.

Tomorrow, I'll post the final entry in this series with my thoughts about the future of telecommuting.

Sunday, October 28, 2007 8:21 PM  (0 Replies)

Working Remotely for Microsoft: What Are the Consequences?

When I went to work for Microsoft without moving up, I knew I was making a tradeoff. Before Microsoft, I spent a lot of time traveling, so MS meant staying home much more with my family. It also meant, because of MS's cultural bias, that my rate of advancement would be considerably slower than it would be if I was local. In fact, I was prepared to be completely unpromoted as several senior folks I trusted at Microsoft promised I would be. As it turned out, even though I came into Microsoft at a fairly high level (high enough that it wouldn't have been hard to not meet expectations even if I were local), I was promoted. I doubt seriously that I'll be promoted again, but I never thought I would be promoted at all. In fact, I've often referred to my Microsoft job, especially my new one on a product team, as "the world's greatest dead-end job." : )


I know this sounds bad, but it gives me two freedoms. First, and most importantly, it gives me the freedom to spend evenings and weekends with my family (especially since I shipped the last book I plan on working on for a long, long time) and to put them first. This was the conscious decision I made going it and I'm happy every day that I made it. The second freedom that took me by surprise is that I can focus on the parts of my job that I really love without worrying about picking up tasks just because they'll look good at review time. It's almost like I'm one of those Microsofties with "fuck you money" without the actual money. : )


Because my current boss cares deeply about making me as successful as I can be, we've talked about me having direct reports. I've done it before and I believe I could do it effectively again, even remotely (I've run successful remote development teams all over the world). However, because of the strong MS bias, I told my boss that I'd only take direct reports that had bought into the downsides of being remote, even if they're local. If I'm not perceived as effective because I'm remote, then by extension, neither will anyone that works for me. My boss hasn't pushed it since our conversation on that matter and frankly, I don't expect to get any reports, but he's surprised me before, so we'll see. : )


Tomorrow: Misc tips & tricks.

Saturday, October 27, 2007 11:49 AM  (3 Replies)

Working Remotely for Microsoft: Can You Communicate Effectively From Home During Meetings?

Communicating during a meeting is an art unto itself and has its own set of considerations:



  • Learn to love LiveMeeting: If you can't see faces, the next best thing is whiteboards and what's on each other's computer screens. For whiteboards, you really need a video camera, which I'll talk about later. For desktop sharing, I've tried NetMeeting, VNC, Terminal Services (in shadow mode) every version of MS Messenger, Office Communicator, Vista Meeting Space and LiveMeeting and a bunch more I'm not remembering. The only one that works consistently through firewalls (mine and Microsoft's) and is easy to get bootstrapped is LiveMeeting. Learn how to start a "Meet Now" meeting (I have an URL that starts up the "Meet Now: Chris Sells" meeting but I have no idea where I got it) and use it! I've actually heard Don Box, who hates working with me when I'm not in the room, say "LiveMeeting is better than you being here!" And when you're jointly working on a shared document or shared code, it's pretty damn good.

  • Get a LiveMeeting monkey: If you're going to do a remote presentation, make sure there's someone on the other end with LiveMeeting tested and running that can project your slides for you while you narrate.

  • Learn the short path through LiveMeeting: Microsoft employees, like most humans, don't like to be distracted by things they don't care about. They don't want to install a new piece of software on a machine they just got working again last week and they certainly don't know how to use it. Make sure you can talk them through the shortest path to getting LiveMeeting installed and sharing their desktops. The first time, this takes 10-15 minutes of disk churn (unfortunately), so ideally you'll do it before the big meeting.

  • Keep time zones in mind: Martin was at GMT+0. Tim was at GMT-5. Microsoft is at GMT-8, as am I. Being working and available for meetings, phone calls and quick turn emails is important, otherwise, your team is going to start forgetting to include you in ad hoc stuff, as was a problem for Tim and completely impossible for Martin.

  • Meet new people face-to-face: I go up to Microsoft 3 days/2 nights every other week with the idea that I'm not going to get much actual coding or writing done, but I'm going to get face time with new people I need to start relationships with. When they hear you're remote, most folks at Microsoft will want to postpone the meeting 'til you're in town. To make them comfortable with you and to put faces to the voices, that's a good idea the first time. However, after that, phone calls are just fine, especially when combined with LiveMeeting.

  • Learn your address book: When a meeting room is scheduled, the scheduler doesn't know the phone number for the meeting nor are they even going to remember that you're calling in, so you need to know how to get the phone number yourself. At Microsoft, the address book lists conference room phone numbers as "conf room [blg]/[room]," e.g. "conf room 42/5646". If you have any trouble or you need someone to call you a cab for the airport on the last day of your trip, you can look up the receptionist for the building you're in with "Reception Bldg [bldg]," e.g. "Reception Building 42".

  • Get your own personal conference call number: If more than one person is calling into a single meeting room, have your personal conference call phone number and code ready. Again, Microsoft issues these to anyone that wants one (and again I can't remember where I got mine : ).

  • Take meeting notes: If you are finding yourself missing out what's going on during meetings while you're on the phone, offer to take the meeting notes. That way, when you have questions, you're asking as the guy taking notes not the annoying guy who's too full of him/herself to move.

  • Play solitaire: If you're not taking notes and you find yourself zoning out during a phone meeting, either because you're surfing the web or starting to do "real" work, you need to do something that will occupy your eyes and your hands while keeping your ears and brain free to pay attention. For that I recommend solitaire or, when I've really let my work interfere with my home life balance, I like to put the dishes away or fold clothes. Handy access to the Mute button on your phone covers up the "clink" noises. : )

  • Learn to intuit what's going on to the whiteboard: I find that the single biggest downside to not being there in person, especially on a product team, is not being able to see the whiteboard. Microsoft has a face-to-face, brute force culture; if a design or implementation problem can't be solved in two sentences in email, that's cause for a whiteboard scribble session. What I've learned, however, is that most such whiteboard scribbles look the same: there are going to be some boxes, some lines and some letters. The most powerful thing about what's happening on the whiteboard is not the whiteboard itself, but the story that's told while the boxes and lines are being scribbled. With some practice, you can learn to guess what's on the whiteboard by listening to the story, even if you have to ask a clarifying question or two. Further, just the mere act of saying something like "Well, I'm just guessing, but what I think you think drew is…" More often than not, the folks on the other end of the phone will say something like, "Wow. That's pretty close, Chris, except that…" With a little practice, you too can become a "whiteboard whisper." : )

That's not to say that I wouldn't love a better solution for remote telepresence then I've got. I've tried a number of experiments over the years and right now Scott Hanselman and I are trying yet another one. For me, a basket of laptop that my team can carry to meetings for me that's running Skype for a/v sharing (it works through firewalls and does great noise cancelation), with a high quality pan/tilt/zoom camera I can control from my end is the killer app for remote employees. Scott's got more of a mobile IvanAnywhere mindset, but between the two of us, we hope to cobble together something that closes 80% of the remaining gap I can't close with the communication tips I've listed above.


Tomorrow we'll discuss the career consequences of working remotely at Microsoft.

Friday, October 26, 2007 11:01 AM  (3 Replies)

Working Remotely for Microsoft: Can You Communicate Effectively From Home?

Assuming you can focus on work and you can find someone to hire you, effective communication is the next issue you'll run into. When I was working for DM, practically everyone was remote, so our communication was based on email conversations that would be long and involved, sometimes lasting for days. However, that's not the case at Microsoft, where brevity in email is valued and meetings are called for the tough issues. How do you fit into this culture? I use several techniques:




  • Over-communicate: I like to check and double check the things I heard and read vs. the things I've seeing done. "I did X. Can you check it and make sure it's what we agreed on?" "We agree that you were going to do Y. How's that coming? I looked at that last check-in you made and you seem to be doing Z. Why?"


  • Pick good email subjects: Lots of times, people have so much email, if the subject isn't relevant, they don't bother.


  • Keep emails short: At Microsoft, we have literally thousands of mailing lists and it's not unusual for a single employee to belong to tens of them, generating 200-500 emails/day. If you want to be heard in that ruckus, you have to be succinct. If you get a reputation for long, rambling emails, especially without a summary, your missives will be ignored.


  • Summarize long emails at the top: When I need my email to go over a page, I summarize it at the top with a single sentence or two. That saves folks from having to dig through an email to get the gist.


  • Resend emails: I know Raymond Chen says not to, but if you don't get an answer to an email, send it again. I can't tell you how many times the first email was ignored, but the second email was answered.


  • Reply to yourself: If you're asking a question that doesn't get answered, follow up with the answer when you get it. I've had threads of conversation that were 80% me. At least they'll see you're there so they'll remember to keep sending the paycheck. : )


  • Follow up on hints: Sometimes you'll see something go by in an email that implies a different understanding than you had when last you talked to folks. For example, you're expecting to participate in a design review on Wednesday, but someone sends an email including the sentence like, "We'll have to have this question answered by Tuesday's design review anyway." In the hallway/meeting/face-to-face communication culture of Microsoft, decisions are made and changed all the time without a written follow-up, but most of the time you'll see the new data referenced in some kind of way. When that happens, follow up, e.g. "I thought the design review was on Wednesday. Has it been changed?"


  • Read those status mails: You're saving all kinds of time and being more productive by skipping those random conversations in the hallway, so you can afford to actual read your colleagues' status emails. I also like to follow up on them, asking questions about the stuff I'm curious about. Often it helps me get my own work done and it almost always means I can integrate my work with that of my team's better.


  • Own the efforts you're involved in: It's very easy to get focused on your own work and get out of sync with the team. If you're dependent on other folks to get their work done so that the thing you're doing gets done correctly and on time, you've got yourself a powerful motivator to communicate.


  • Get everyone on your team to use IM: IM is a wonderful simulation for hallway conversations that works even when the target of your question/comment is in a meeting (it's common for Microsofties to have their laptops open during meetings). At Microsoft, even if folks don't have a personal IM account via Yahoo or Live Messenger, they do have one with Office Communicator. If you're trying to get someone that's never online with it, instead of sending them an email with your question, send them a link to the Office Communicator installation and a request for them to log in. If that doesn't work, start calling them and asking them the same thing. They'll get the hint. : )


  • Pick up the phone: A ringing desktop phone is a novelty at Microsoft that few folks will ignore. Use it to startle them into submission! : )


  • Schedule a meeting for a phone call: If you can't get your team on the phone for a quick discussion, schedule a 15-minute phone call.

Tomorrow I'll focus on remote communication during meetings.

Thursday, October 25, 2007 7:37 AM  (6 Replies)

Working Remotely for Microsoft: Can I Find Someone To Let Me Work From Home?

Assuming you decide you can and want to work from home for Microsoft, now the trick is finding someone that will take you. The first time, this took me years. As my writing and speaking became more popular, I'd get more regular calls from someone at Microsoft with "the perfect job for me." Each time, I'd ask them if I had to move and when they replied, "Of course" as if the entire pool of worthy workers lived in Washington, I'd politely decline. Eventually when the question came up, Sara Williams said, "No need to move" and I went to work for MSDN. As is often the case with one's first Microsoft job, it wasn't a long-term fit (a software engineer needs to be on a product team!), but finding a product team took me took 6 months of digging. All the groups I talked to wanted me and they all were happy to move me (some even offered to move my extended family up, too, eliminating my main anchor for staying in OR), but culturally they just didn't know what to do with a remote guy.


Eventually, persistence, and my long experience working remotely, paid off and I actually had two competing offers (and I'm *so* happy about the one I chose). Microsoft has a *ton* of open positions and they get more open about remote employees all the time. Keep at it!


Tomorrow: Can You Communicate Effectively From Home?

Wednesday, October 24, 2007 11:53 AM  (10 Replies)

Working Remotely for Microsoft: Can You Focus On Work At Home?

First off, I don't recommend remote work for folks who don't like spending the vast majority of their time away from their colleagues, sometimes having trouble focusing on the work in favor of household duties or interactions. In fact, the ability to focus on work while at home is the #1 issue you'll have to face as a remote employee and I've seen it drive 80% of folks back to the office. I've always been naturally in the 20% bucket on that issue.



As an example, when I first started at DevelopMentor, my office was in an open back room separated from the dining room by a hallway kitchen. My two infant boys had me in clear view when I was handcrafting RPC packets for communication with a DCOM server, hanging on the child gate, crying for me to play with them. My wife also had in plain sight when she wanted something from the high shelf. My family often heard me protest, "You know, I am actually working over here!" I eventually built a door, purchased Melissa a stool and learned to be very mushy about the split between work and home life. My family's actually been very supportive and I've always preferred the work environment I've established at home over any I've ever had from an employer, if for no other reason than my home has my family in it.



My advice to anyone that wants to switch to remote work is to try it for a month or two first. Are you able to balance work and family life when you're at home? Are you able to go for days or weeks without the hallway conversations with your colleagues? Can you communicate effectively in ways that aren't face-to-face? If you don't like it, don't force yourself into it. For example, while DM instructors didn't seem to have any attrition due to remote work, all of the names I listed above as remote Microsoft employees have either quit, moved to Redmond or complained bitterly during their transition (Scott's still new : ).



Tomorrow I'll discuss "Can I Find Someone To Let Me Work From Home?"


Tuesday, October 23, 2007 10:59 AM  (4 Replies)

The Whiteboard Whisperer: Working Remotely for Microsoft

I've been at Microsoft about 4.5 years, the whole time a "remote employee," i.e. I work mainly from my home in a suburb of Portland, OR but the teams I've worked for have all been based at Microsoft HQ in Redmond, WA.


Microsoft is traditionally a company that moves the bulk of their employees to WA, especially for product team and related duties. Of course, we've got subsidiaries and sales world-wide, as well as the occasional technology team in talent hot spots around the world, but there is a large corporate bias towards moving new hires to HQ. In fact, so much so that when we've got open spots, I've learned not to recommend someone that I know won't move.


And yet, there are notable exceptions. Martin Gudgin worked from England for a number of years. Tim Ewald worked from New Hampshire. Scott Hanselman works from Portland, as did Rory Blythe. Sometimes if there's enough need and the right role, the distance bias can be overcome. And when it does, I sometimes get an IM, an email, a phone call or a meeting request so that I can answer the question: how do you do it?


Tune in tomorrow for "Can You Focus On Work At Home?"

Monday, October 22, 2007 9:16 PM  (3 Replies)

Fun With GridView*RowPresenter


I was searching for advanced WPF tree samples the other day and ran into the tree-list-view sample:



Notice how the left-most column does the indenting, while the rest of the columns line up nicely. The code for the tree-view-sample is a little C# and a bunch of sophisticated XAML templates I didn't understand, so I stripped it down to the bare nubbins to discover what was going on. Assume a simple class holding the data:

class Person {
List<Person> children = new List<Person>();
public string Name { get; set; }
public int Age { get; set; }
public List<Person> Children { get { return children; } }
}

The juicy bit that makes the tree-list view above possible is the GridViewRowPresenter:

<Window ...
xmlns:local="clr-namespace:WpfApplication10"
Title="GridView*RowPresenter Fun">

<
Window.DataContext>
<
local:Person Name="John" Age="13" />
</
Window.DataContext>

<
GridViewRowPresenter Content="{Binding}">
<
GridViewRowPresenter.Columns>
<!-- NOTE: must explicitly create the collection -->
<GridViewColumnCollection>
<
GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<
GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" />
</
GridViewColumnCollection>
</
GridViewRowPresenter.Columns>
</GridViewRowPresenter>

</
Window>

Here, we're creating an instance of the GridViewRowPresenter, which is the thing that the ListView creates for you if you use the GridView. Here, we're using it explicitly and setting the columns explicitly, binding it to our data and yielding the following:



Notice that we're showing a single item, arranged as a row of values according to our column definition above. It's boring and not at all interactive, at least because we don't have a header, which we can get with an instance of the GridViewHeaderRowPresenter:

<Window.Resources>
<
GridViewColumnCollection x:Key="columns">
<
GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<
GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" />
</
GridViewColumnCollection>
</
Window.Resources>

<
StackPanel>
<!-- NOTE: must share access to same column collection to get shared resizing -->
<GridViewHeaderRowPresenter Columns="{StaticResource columns}" />
<
GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" />
</
StackPanel>

Here we're creating an instance of the row presenter, passing in a reference to the same columns collection used by the row presenter so that the column sizes and positions are shared between the header row and the row presenters:



If we want more than one piece of data, all we have to do is use an items control with an item template that in turn creates a row presenter for each item in the collection:

<Window.DataContext>
<
x:Array Type="{x:Type local:Person}">
<
local:Person Name="John" Age="13" />
<
local:Person Name="Tom" Age="12" />
</
x:Array>
</
Window.DataContext>

<
Window.Resources>
<
GridViewColumnCollection x:Key="columns">
<
GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<
GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" />
</
GridViewColumnCollection>
</
Window.Resources>

<
StackPanel>
<
GridViewHeaderRowPresenter Columns="{StaticResource columns}" />
<
ItemsControl ItemsSource="{Binding}">
<
ItemsControl.ItemTemplate>
<
DataTemplate>
<
GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" />
</
DataTemplate>
</
ItemsControl.ItemTemplate>
</
ItemsControl>
</
StackPanel>

Now, we've got a stack panel that combines the header to the grid view rows with the grid view rows themselves, one per item in our collection:



Now on a rush of discovery and simplicity, I took the next step to show hierarchical data, hosting the data in a TreeView control and using a hierarchical data template so that I could build the tree list view shown above with the tiniest bit of XAML and code:

<Window.DataContext>
<
x:Array Type="{x:Type local:Person}">
<
local:Person Name="Chris" Age="38">
<
local:Person.Children>
<
local:Person Name="John" Age="13" />
<
local:Person Name="Tom" Age="12" />
</
local:Person.Children>
</
local:Person>
<
local:Person Name="Melissa" Age="39" />
</
x:Array>
</
Window.DataContext>
...
<StackPanel>
<
GridViewHeaderRowPresenter Columns="{StaticResource columns}" />
<
TreeView
ItemsSource="{Binding}" BorderThickness="0">
<
TreeView
.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<
GridViewRowPresenter Content="{Binding}" Columns="{StaticResource columns}" />
</
HierarchicalDataTemplate>
</TreeView
.ItemTemplate>
</TreeView>
</
StackPanel>

Unfortunately, that's where we run into the limit of what we can do without cranking things up a notch:


 


Beside the border around the tree view (caused by focus), the worst part about our simple tree-list-view is that, while each grid view row has the proper column sizes and relative positions, because the tree does the indenting, all of the columns are offset, not just the first one. The key to fixing this problem is to put the styling for indenting into the template for the first column only using the CellTemplate property of the GridViewRowColumn, taking over the drawing of the tree view items, which is what the tree-list-view sample does.

Friday, October 19, 2007 12:44 PM  (41 Replies)

The Windows Workflow Team Wants to Hear from You!

Are you using WF but it's not quite right? Are you avoiding WF because it doesn't have the features you need? Now's your chance to influence the future of WF with a quick survey. Vote early, vote often! : )

Friday, October 19, 2007 7:28 AM  (7 Replies)

Yahtzee Croshaw -- You're My Hero!

First it was the Halo 3 review (which I can't agree or disagree with yet because I'm still stuck on level one) which a Wii zealot forwarded to me because he likes to send me links to negative portrayals of anything MS-related (like that's a challenge to find : ), then it was the BioShock review (a game I never figured out the cool part of), then his POV on the console wars (I'm proudly a member of the frat-boy demographic!) and finally it was the Tomb Raider Anniversary review (a game I haven't played since v1 and preferred the Apple ][+ equivalent) which had me laughing out loud.


Agree with him or not, you gotta appreciate Yahtzee's style.

Wednesday, October 03, 2007 4:54 PM  (2 Replies)

Releasing the Source Code for the .NET Framework Libraries!

After programming with MFC (a lot!) and writing the ATL book, it was *very* difficult for me to live in a world without the source code to figure out how something was working. All of us have since moved over to Lutz's most excellent Reflector, but that's still no substitute for actually stepping in and now ScottGu has announced that we'll have the ability to browse and debug with the .NET library source code, integrated into VS2008:



Wahoo!

Wednesday, October 03, 2007 2:17 PM  (7 Replies)

I'm an "Uber Cool High Nerd"

NerdTests.com says I'm an Uber Cool High Nerd.  What are you?  Click here!

Sunday, September 09, 2007 11:56 AM  (3 Replies)

20 Timeless Money Rules

Save yourself the Suzy whoever and read this instead:



  1. Be humble

  2. Take calculated risks

  3. Have an emergency fund

  4. Mix it up

  5. It's the portfolio, stupid

  6. Average is the new best

  7. Practice patience

  8. Don't time the market

  9. Be a cheapskate

  10. Don't follow the crowd

  11. Buy low

  12. Invest abroad

  13. Keep perspective

  14. Just do it

  15. Borrow responsibly

  16. Talk to your spouse

  17. Exit gracefully

  18. Pay only your share

  19. Give wisely

  20. Keep money in its place

Following this advice will put you in the top 20% of investors in the world.

Saturday, September 01, 2007 9:22 AM  (2 Replies)

"Programming WPF" (finally) shipping!

John Osborn of O'Reilly and Associates had this to say in my morning email:



"Congratulations, guys. The book is printed and shipping! Just got my copy this morning and it looks great. A very substantial body of work, to say the least.


"Thanks for all of your hard work on this project. Now to crank up the PR machine and make sure no book shelf is without a copy."


Wahoo!

Tuesday, August 28, 2007 9:48 AM  (1 Replies)

Shawn has prepared Genghis v0.8

Shawn Wildermuth has prepared a v0.8 release of Genghis that includes a bunch of stuff that the folks that put the v0.6 release together dropped. The v0.8 release has all the good stuff from the v0.5 release and all the new stuff from the v0.6 release in a .NET 2.0 package.


Shawn's really done all the work for Genghis since I came to Microsoft. Thanks, Shawn.

Friday, August 24, 2007 4:07 PM  (0 Replies)

Duck Typing for .NET!

For structural typing fans (and they'll be more of you over time -- trust me), David Meyer has posted a duck typing library for .NET. There are many reasons this is cool, but in summary, it allows for many of the dynamic features of languages like Python and Ruby to used used in any .NET language. Very cool.

Friday, August 17, 2007 1:42 PM  (2 Replies)

How to write a book - the short honest truth

I found this on digg.com and liked the short, honest style. Bottom line: anyone can write a book; it takes real work to write a good book.

Friday, August 17, 2007 1:31 PM  (2 Replies)

"How you doin'?"

I wanted to figure out how to emit a new CLR type at run-time using Reflection.Emit and Google revealed the following article: Generating Code at Run Time With Reflection.Emit in DDJ.As usual, I skip most of the initial prose to the first code sample (I don't need some author's fancy intro -- I just want the code!). Then, I'm reading along and I find some phrases I enjoy, e.g.



"If you plan on generating lots of calls to Console.WriteLine(), you should be aware that the ILGenerator class exposes a method for just that purpose: ILGenerator.EmitWriteLine() generates the exact same code as our example. (Could this be the first assembler ever devised that includes explicit support for creating "Hello, World" sample programs?)"


and



"When creating a dynamic assembly with Reflection.Emit, you must declare, ahead of time, what you plan on doing with it. Do you want to run it or save it? Or both? (Of course, if your answer is 'neither,' then you should probably should have stopped reading this article long ago.)"


By the end of the piece, I've enjoyed the story and it told me exactly what I wanted and then some, pointing out some pitfalls I would've missed, being entertaining along the way. It's rare that I enjoy an article so much and I'm thinking I should send the author an email, congratulating him/her on his/her tight, fun prose.


And then I get to the author bios:



"Chris Sells is a blah blah blah."


"Shawn Van Ness is a blah blah blah."


Of course, now I remember Shawn writing this piece and me helping him with the polish. At this point, I feel a bit like the Joey Tribbiani of Windows technical writing...

Tuesday, August 14, 2007 8:10 PM  (8 Replies)

eWeek: Microsoft Moves Ahead w/ Software Modeling

I work on the same team as Don and Chris to which this article refers. There's few actual facts in this piece and some of those are wrong (love Chris like a brother, but he wasn't on the WCF team : ), but it's interesting that my little group is making its way into the news.


BTW, as a matter of context, I'm not a big codegen fan (in spite of my previous dealings : ) and it would be a mistake to think of "modeling" as "fancy codegen," in spite of what this article implies.

Thursday, August 02, 2007 6:05 PM  (5 Replies)

Take the Silverlight Tour

Shawn Wildermuth, author of the Silverlight appendix in Programming WPF, has put together a comprehensive 3-day shortcourse on Silverlight and is taking it on road to Atlanta, Boston, Chicago, San Fran, Dallas, Seattle and DC. Sign up today!

Tuesday, July 31, 2007 8:03 AM  (0 Replies)

Another One Bites the Dust!

Welcome to Microsoft, Scott Hanselman!

Saturday, July 21, 2007 9:26 PM  (0 Replies)

Programming WPF, 2e (RTM Edition) on Amazon!

Buy your copy today! : )


P.S. I read the QC1 (Quality Check 1), all 859 pages of it, in two solid days this weekend. I found a bunch of nits, all of which will be fixed before you see it in August. Wahoo!

Tuesday, July 17, 2007 3:51 PM  (4 Replies)

Windows Home Server RTM Shipped!

I knew something was up when the Home Server team climbed onto a bus Friday afternoon outside of building 42. They were obviously celebrating something. This morning, I found out what it was -- Windows Home Service RTM shipped! Congrats, guys! I can't wait for the RTM bits to be available internally so I can install it. I've got a machine all picked out. : )

Monday, July 16, 2007 9:12 AM  (1 Replies)

Unpublished Microsoft Interviewing Tips

A friend of mine is going for an Microsoft interview next week and he IM'd me asking for any "unpublished tips" for interviewing at MS (apparently he'd already read all my published tips). Frankly, I don't know if these are published or unpublished, but these were the ones that I thought were most important:



  • Your interviewer cares most about 1) how you think and 2) what you feel, so be vocal about both. You might not get the job, but if you do, it'll be a better fit than if you'd have kept your mouth shut.

  • Don't be afraid to ask clarifying questions. This is more detail on the "let 'em know what you're thinking" point above. If you don't understand the problem fully, don't jump in to solve it before you do. Or, if they ask you something potentially scope-less, e.g. "Tell me about yourself," feel free to ask for a scope, e.g. "I'm 38 years old and a lot of stuff has happened. : )  Would you like to narrow that question down a bit for me?" (or something less smart-ass-like if you're not able to carry off smart-ass-ness with a smile).

  • Let the interviewer know how you feel about the job. At Microsoft, you'll have quite a bit of latitude in how you do your job, so they want to know that you care about the same things they care about so they can set you loose and know good things are going to happen.

    Think about the job before you show up so that you have an agenda. It often helps if you can list a bunch of reasons Microsoft is currently screwing the pooch in your area. I can't tell you how many times I've heard about someone railing against Microsoft because of something we're not doing right and that person gets a job offer to go fix the thing they were complaining about ("Put up or shut up" is a big part of the Microsoft culture).

    One thing to watch out for: if you do have an agenda, make sure it's something in your proposed job scope. If you're hiring as a mid-level Program Manager, you're not likely to have much impact on how MS builds software all up, but you can definitely work to fix how your group-to-be is doing it.

  • Answer questions from your own experiences. If someone asks, "How do you deal with conflict," don't give them the stock, pat answer. Instead, reach into your experiences and pull out a specific example. This will give your answer more credibility. This technique runs the risk of the interviewer not liking how you handled the issue, but again, do you really want a job where you're not a good fit, but nobody knows 'til you've sold your house and put the kids into a new school?

  • You have to like us, too. When Microsoft is interviewing you, remember that you're interviewing them, too. Make sure you're going to like the work you'll be asked to do and the people you'll be asked to work with. It's not good for *anybody* if you show up for work and don't fit in because you didn't ask questions. Plus, when the interviewer says "Do you have questions for me?" you better have some, or you're not going to come across as someone that actually cares about the position.

  • Don't talk about money during the interview. There'll be a short window between the time they offer you the job and the time when you accept it that you'll be able to discuss compensation frankly. If you do it at the interview, you'll look like you're after the job for the money and not because you have a burning desire to fix something Microsoft is currently doing wrong or not doing at all.

Bottom line: your interviewer wants make sure you're a fit for Microsoft, a fit for their team, that you're smart and that you've got passion to do the work that they want you to do.


Good luck!

Saturday, July 14, 2007 10:33 PM  (6 Replies)

Genghis moved to CodePlex

Shawn Wildermuth has moved Genghis to CodePlex because GotDotNet Workspaces is going away. I actually really like CodePlex, but not the state those pesky contractors left the Genghis bits in, so we'll be following up with another release in early July to bring sanity back. Thanks, Shawn!

Sunday, June 17, 2007 3:22 PM  (3 Replies)

Hands on the Microsoft Surface

After raving about Microsoft Surface, I get a personal invitation from Robert Levy, a PM on the Surface SDK team to come take a look.  Robert's job is to make sure it's possible for the partners that want to put a Surface into their hotels, stores and theme parks to build apps to help sell whatever they're selling.


There're currently no plans to enable just normal humans to program it, unfortunately, or even to sell the things except to corp partners. This is too bad, 'cuz I definitely want one for my family room. Man, talk about a conversation starter!


The demo apps were very cool. Of course, there were the apps that are shown on the surface web site and they really work. The ones that I thought were best were when you used physical devices to control what happens on the surface, e.g. turning a knob you drop onto the surface to adjust settings, putting a camera on the surface to get the pictures, putting a credit card on the surface to pay for your drinks, etc. Of course, just using your fingers to paint or drag stuff around was fun, too.


I can definitely see these things attracting a crowd at the zoo or the local phone store. It's a thing.

Thursday, June 14, 2007 7:31 PM  (3 Replies)

The T-Mobile Wing rocks! 'til the battery dies...

I was really loving my T-Mobile Wing with WM6, Pocket Office, external micro-SD slot, slamming keyboard, beautiful ClearType display, one-handed usage (even though it is a PocketPC, I almost never needed to pull out the stylus), blue tooth (very high quality!), wi-fi, Edge and a slamming keyboard! (yes -- it was that slamming.).


Unfortunately, I couldn't keep it. After four days of the battery going dead after 12 short hours of my normal usage, e.g. email, texting, surfing, etc, it was dead. I turned off wi-fi, blue tooth and DirectPush to no avail. The T-Mobile Wing is just too cool for the battery and T-Mobile didn't have a bigger one to give me.


So it's back to my i-mate smartflip (hurray for data sync!). I was *so* loving that slamming keyboard...

Thursday, June 14, 2007 3:21 PM  (9 Replies)

Big Screen + Keyboard for my Cell Love? Love it!

I love the idea of the new Palm Foleo, i.e. my life fits on my cell phone in my pocket and my "laptop" is just a bigger display and full-sized keyboard. Of course, this presupposes the storage capacity to store my life on my cell phone (like I do currently on my laptop), which we're a ways from. Unfortunately, this means that the Foleo is likely ahead of its time and will therefore suffer, but it's another step down a good road (remember the "brick" computer that could plug into any keyboard/mouse?).

Thursday, June 07, 2007 11:52 AM  (1 Replies)

What's your programmer personality type?

Your programmer personality type is:

DHSB

You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.

You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.

You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.

You are a liBeral programmer.
Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need.

Tuesday, June 05, 2007 10:38 PM  (12 Replies)

LoadWithPartialName, I miss you...

When you make a call to LoadWithPartialName in .NET 2.0, you get the standard compiler error that you're using an obsolete function:

foo.cs(5,24): warning CS0618:
'System.Reflection.Assembly.LoadWithPartialName(string)' is obsolete:
'This method has been deprecated. Please use Assembly.Load() instead.
http://go.microsoft.com/fwlink/?linkid=14202 '

The problem is, unlike more obsolete function warnings, there's no good way I know of to reform the arguments from the obsolete function to the recommended replacement, i.e. Assembly.Load doesn't work if you give it a partial assembly name. Because of this, instead of code filled with Assembly.Load calls, I see this all over the place in production .NET 2.0 code:

#pragma warning disable 618
Assembly.LoadWithPartialName("foo");
#pragma warning restore 618

Maybe in .NET 3.5, we can get a helper function that wraps the #pragmas for us... : )

Tuesday, June 05, 2007 4:31 PM  (6 Replies)

A really bad optimization

I always knew that the scientists would optimize away sending the matter when all they need is to send the state:



"A team of physicists has teleported data over a distance of 89 miles from the Canary Island of La Palma to the neighbouring island of Tenerife, which is 10 times further than the previous attempt at teleportation through free space. The scientists did it by exploiting the "spooky" and virtually unfathomable field of quantum entanglement - when the state of matter rather than matter itself is sent from one place to another." [ed: emphasis mine]


Sure. And what do they do with the matter at the original end? Do they leave it alive work another job, but only pay one set of taxes? I don't think so...

Monday, June 04, 2007 5:25 PM  (2 Replies)

Microsoft Surface

I sent the boys to the Microsoft Surface web site last night while I was in another room. I don't believe I've ever heard that many "wows" and "cools" and "I want its!" out of the two of them. And after getting my butt out of my chair, I have to agree -- I want one.

Wednesday, May 30, 2007 8:33 AM  (1 Replies)

Why do we pick on journalism majors, so?

Here's another one:



For example, if we had had a background in journalism, we might have used one-based indexing instead of zero-based indexing to...


That Ian didn't like, but it still makes me smile (and if you're not a smiling author, why be an author at all?!?).

Monday, May 28, 2007 12:08 PM  (0 Replies)

Sometimes I crack myself up

I forgot until the copy edit review process that I'd dropped this gem into a footnote:



On August 4th, 1997, the world’s oldest person so far, Jeanne Louise Calment, died at age 122, having taken up fencing at age 85 and out-lived the holder of her reverse-mortgage. Although I firmly believe that Ms. Calment is showing us the way to a richer, longer life, it’ll be a while yet before we need the full range supported by the Int32 class (2,147,483,647 years young).


This is what happens when you write into the wee hours of the morning... : )

Monday, May 28, 2007 12:05 PM  (1 Replies)

Heard in the halls at RailsConf 2007

I was passing a young, blue-haired photographer-ess who said the following to a gentleman she wanted to smile for a picture:



“Just think about Martin Fowler dry-humping my leg.”


I find I like the Ruby crowd : )

Saturday, May 19, 2007 2:18 PM  (5 Replies)

Dogfood -- it ain't just for dogs

Am I the only one that find it ironic that an online paper on the merits of a new way to format text for online reading doesn't use the technique it advocates?

Friday, May 11, 2007 12:02 PM  (5 Replies)

Get your PDC Code Camp On!

The *free* Portland Code Camp is just around the corner on May 19th and 20th at the Vancouver WSU campus. Personally, I'm looking forward to the Chris Bilson talk on adding PowerShell support to your app, George Clingerman on 2D graphics in XNA (maybe it's time to port Wahoo!?) and Stuart Celarier on NDepend. Register today!

Thursday, May 10, 2007 9:04 AM  (1 Replies)

Lutz's Silverlight 1.1 Alpha Samples

Lutz has ported some of his .NET code to use the Silverlight 1.1 alpha, which includes the mini-CLR (or whatever we're calling it these days : ). Enjoy.

Sunday, May 06, 2007 12:58 PM  (1 Replies)

On becoming an empty nester...

I submitted the final manuscript for Programming WPF, 2nd edition, by Ian Griffiths and Chris Sells to O'Reilly and Associates this morning for publication. Of course, there's stuff still to do (today we hit step 8 of 18), but this represents a major milestone in the life of any book.


I have mixed feelings when I finish a book. The last few have been especially intense, as I have a real day job on a Microsoft product-team-to-be, so it's just been evenings and weekends. With this much work to do, you have to focus hard and the work becomes a part of you. This means that giving it up is also hard. My boys are just now becoming teenagers, so it'll be a while yet before they leave home, but I imagine I'll feel the same kind of melancholy I feel now -- happy to see something you've put so much of your life into make its own way into the world, but hard to have the cord cut.


On average, I've been an author, co-author or a "with" on 12 books over the last 12 years. At one time, I had open contracts on four separate books. This book represents my last planned book. I'm now truly an empty nester.


So, what's next for me in this new phase of my life? Well, I've already started some stuff. A couple of weeks ago, I started a little gooey shell for monad (I call it "gonad"  : ). And last Friday, I started private piano lessons (a blast!). I'd like to pick up my other hobbies again, too, but for the life of me, I can't remember what my other hobbies used to be...

Sunday, April 29, 2007 9:03 AM  (9 Replies)

Glyn Griffiths: Ian's Dad and Damn Fine Reviewer

This was an email I sent to Glyn Griffiths, the final external reviewer on the WPF 2ed book before we submitted the final manuscript for copy edit and publication (and which has been posted here with his permission):


Mr. Griffiths, in chapter 7, you had a couple of comments about what happened in the 1ed of the book vs. what we've got now in the 2ed of the book. The first such comment was:



"The first edition of the book had '…selected by going backward and forward…' which I think is better. [ed: as compared to 'selected back and forward']


"This is one of several instances I've found of improved wording in the first edition that seems to have been lost in this one. Is this because work on the second edition was started using a text base that was earlier than the final version of the first edition?”


To answer your question, the post-copy-edited version of the 1ed is in Framemaker. Apparently, ORA does have a process for getting Word documents out of Framemaker for just this reason, but I didn't know that, so we started with our pre-copy-edited 1ed Word documents when we started the 2ed. Since so much of the 2ed prose is different than the 1ed, this doesn't concern me overmuch, but it's worth avoiding for the 3ed.


And now here's my question: how the hell do you know what was in the 1ed at this level of detail? Have you memorized it so that you can do a diff in your head? Do you have it open in front of you so you can compare? I can't imagine what powers you possess to be able to make comment such as these, but I'm happy to have you use them for good and not evil.


P.S. With your kind permission, I'd like to post your comment on my blog so that others may have a greater understanding of where Ian gets his monster intellect.

Sunday, April 29, 2007 8:08 AM  (1 Replies)

Shooting the Sh*t with Scott (part 1 of 2)

Scott came over to my house and we made up a topic ("Software: The Last Fifteen Years and the Next Fifteen Years" in two parts), but it's really just an excuse to talk to each other and have a good ol' time. Have a listen.


P.S. Sorry about coughing they weren't able to edit out. Alergies...

Friday, April 27, 2007 6:28 PM  (1 Replies)

WPF/E == Silverlight

If you haven't already heard about Microsoft's new high fidelity, cross-platform application development platform, you just haven't been paying attention. Silverlight is the new name for WPF/E (although it's still XAML-based) and does some *amazing* things.


And, if you can wait just a little while longer, you can read about Silverlight in Programming WPF (available now in Rough Cut format and for pre-order from Amazon) in an appendix by my friend and yours, Shawn Wildermuth. Shawn's been doing a ton of Silverlight work lately, including doing a bunch of Silverlight presentations for Microsoft, so he knows of what he speaks.

Monday, April 16, 2007 4:50 PM  (2 Replies)

My Foreword To ChrisAn's "Essential WPF"

Now that Chris Anderson's most excellent Essential Windows Presentation Foundation has transitioned to the physical world, I thought I'd share my foreword:



Thank God there weren't more people like Chris Anderson when I was making my living outside of Microsoft.


I work at Microsoft now (two doors down from Chris, in fact), but not all that long ago, I was an instructor at a Windows developer training company. My brethren and I were led by a deep-thinking PhD candidate that applied the same rigor he applied to a scholarly pursuit that had to stand up to the "crush or be crushed" mentality of academia. We learned how to think clearly as a defense mechanism and to communicate clearly as a survival technique. If we didn't do it to his exacting standards, he'd sweep us aside and redo our work before our eyes (we learned to call it "swooping" and you worked hard to avoid the phenomenon).


In a similar fashion, we learned to ignore the tutorial and reference materials produced by our vendor of choice, because it was clear that however clearly they may or may not be thinking inside their hallowed walls, it was certain that they weren't up to communicating it with the rest of us. Arguably, our whole job for close to a decade was "swooping" Microsoft itself, redoing their materials in the form of short course, conference talks, magazine articles and books. We called it the "Microsoft Continuing Employment Act," treating it like a pork barrel entitlement program that kept us in the style to which we had grown accustomed.


In fact, we made a nice living traveling the country saying things like, "remember to call Release," "avoid round-trips" and "ignore aggregation" because these were clear guidelines that distilled for developers what Microsoft couldn't manage to say for itself. That's not to say that there weren't clear thinkers inside of Microsoft (Tony Williams and Crispin Goswell being two of my very favorites), but the gap between the beginner and the reader of such advanced writings was largely unfilled in those days.


With this book, that gravy train has run right off the track. Chris Anderson was one of the chief architects of the next-generation GUI stack, the Windows Presentation Framework, which is the subject of the book you're now holding in your hands. You'd have thought that the very nature of the architecture job, that is, to make sure that the issues deep, deep inside were solved properly so that others could come along and build the trappings that made it into plain sight, would disqualify him from leading the developer from "go" to "whoa," but that's not the case. Chris's insight allow him to shine a light from the internals of WPF to those standing at the entrance, guiding you through the concepts that form the foundation of his creation (and the creation of more than 300 other people, too, let's not forget).


As the author of a competing book from another publisher, I can't say that this is the only book you'll ever need on WPF (or they'd have me in front of a firing squad), but I can say this with certainty: it belongs on your shelf within an easy reach. I know that's where my copy will be.

Monday, April 16, 2007 11:21 AM  (0 Replies)

Best WPF Resources?

I’d like to provide a list of the best WPF resources, including real-world apps, free web resources, SDK docs, samples, blogs, etc. If you’ve got something that belongs on that list, I’d love to hear about it. Thanks!

Saturday, April 14, 2007 1:09 PM  (14 Replies)

Show Me The Templates!

Show Me The Template is a tool for exploring the templates, be their data, control or items panel, that comes with the controls built into WPF for all 6 themes.


Show Me The Template screenshot


Enjoy.

Wednesday, April 11, 2007 9:47 PM  (6 Replies)

"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?

Wednesday, April 11, 2007 10:29 AM  (160 Replies)

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.

Tuesday, March 27, 2007 8:37 AM  (31 Replies)

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!

Wednesday, March 21, 2007 3:22 PM  (50 Replies)

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.

Saturday, March 10, 2007 7:45 AM  (8 Replies)

Mobile Video Conferencing! I want one!

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

Thursday, March 08, 2007 9:38 AM  (9 Replies)

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:



  • Allowed each side to run video at full screen. I just don't need to look at myself and when we go picture-in-picture (the LCD is also used for projection), the video's not very useful.

  • Allowed me to remotely, instead of locally, select zoom regions.

  • Allowed me to control a camera that supported pan, tilt and zoom in hardware.

  • Supported noise cancellation. As it is, I still have to place a phone call to get onto the speaker phone in the room. If we try using the headset as a roaming mike, the feedback makes it unusable.

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?

Saturday, March 03, 2007 10:21 AM  (9 Replies)

Visual Studio Orcas March 2007 CTP

And the hits they keep on comin':



Enjoy!

Thursday, March 01, 2007 1:14 PM  (4 Replies)

Lutz Roeder's Reflector 5.0


Need I say more?

Monday, February 19, 2007 10:59 PM  (8 Replies)

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.

Wednesday, February 14, 2007 10:42 AM  (7 Replies)

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:



  • I hesitate to think where the folks at podcast alley think we stow our MP3 players...

  • I like Scott, but come on...

  • What kind of gadgets has Scott been reviewing lately?!?

Enjoy. : )

Thursday, February 08, 2007 10:38 PM  (24 Replies)

.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.

Sunday, February 04, 2007 10:05 AM  (18 Replies)

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...

Saturday, February 03, 2007 7:46 PM  (8 Replies)

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.

Friday, February 02, 2007 9:58 PM  (5 Replies)

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.

Friday, February 02, 2007 9:02 AM  (4 Replies)

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?

Thursday, February 01, 2007 4:58 PM  (20 Replies)

WPF XBAP App: British Library Books Online


"The British Library is one of the world's leading libraries and the national library of the United Kingdom. By charter, it holds a copy of every book ever published in the UK, along with 58 million newspapers, 4.5 million maps, and 3.5 million sound recordings. They hold some of the most priceless literary treasures in existence, including the Codex Sinaiticus (one of the oldest New Testaments in existence), the Lindisfarne Gospels, one of Leonardo Da Vinci's notebooks, the first atlas of Europe by Mercator, the original illustrated manuscript Lewis Carroll's Alice's Adventures in Wonderland, Jane Austen's History of England and Mozart's musical diary. ...


"Enter a fantastic new application, developed in partnership between the British Library and Armadillo Systems. The British Library have digitized the pages of fifteen of their most valuable works and created Turning the Pages, a browser-based WPF application that allows you to interact with these books in a virtual environment from the comfort of your home."


Wow. This is literally the only way to interact with some of this material and it's enabled with WPF. Nice.

Tuesday, January 30, 2007 3:12 PM  (5 Replies)

Window Clippings 1.5

Capturing screenshots for a book used to be a piece of cake. Alt+PrintScreent and you were golden. However, sometimes I wanted to get the cursor, too, and neither Alt+PrintScreen nor PrintScreen does that, so I got myself a copy of SnagIt. Unfortunately, if I wanted to capture multiple screens, I was putting a maximized copy of Notepad in the backgrand, using PrintScreen and PBrush to do the cropping (although SnagIt has slightly more seamless multi-window selection).


Still, this all worked 'til Vista came along and Alt+PrintScreen left the shadows out! I was fine with that, but Ian correctly pointed out that the screenshots with the shadows looks *so* much better that I could hardly say "no." And I discovered the Snipping Tool in Vista, which let me do a selection on any part of the screen I wanted to, except that now instead of just doing Alt+PrintScreen, even for a single window, now everything is a selection, which means that somebody (hopefully not me!) has to trim the extra whitespace to make sure the pictures layout OK in the book.


I told you all of that so you could know that I envy folks that don't have to do screenshots! It's hard to make it look right, although, for visual technologies, I really can't imagine not having them. Anyway, I was definately open to another screen capturing technology and that's when someone turned me on to Windows Clippings.


When I found Kenny Kerr's most excellent screen capture tool, it was so close to what I wanted (it did Vista shadows with no guesswork!), that I sent Kenny an email with my feature request (easy child+parent capturing support), fully expecting not to hear back (it's clear from his web site that he's a busy guy!). Not only did he reply, but he'd implemented my feature!


And it was such a time-saver, that I forwarded it along to Ian, who had his own feature request (keeping the transparency in the captured image w/o grabbing the stuff underneath), which Kenny promptly implemented (with some example code from Ian). Of course, that broke my feature (the constant animation of WPF apps + capturing transparency caused problems), so Kenny fixed that, too. By this point, Kenny's app itself was notifying me of updates faster than he could send the emails.


All of this is merely to say, I'm really loving my Windows Clippings experience. Thanks, Kenny!

Monday, January 29, 2007 3:32 PM  (9 Replies)

API Usability

Don has a piece up about something that I've always called "API Usability." The idea when building libraries is to write client code first against some pretend API that you wish existed and then to implement that API. Another good name for this approach would be "RAD API Design," simply because it's the same way I prefer to design UI -- layout the UI the way you'd like it to look and then implement it that way. Of course, I have to admit to preferring Don's name for this style of programming (I like what he calls my conferences, too : ).


BTW, the comments to Don's piece mention to startling similarity between this approach and Test-Driven Development (TDD). I'm a huge fan of TDD (NUnit is a wonderful tool I use all day every day). I'd say that TDD is a generalization of my little "API usability" technique in that you can use it for all kinds of things, e.g. code coverage, perf testing, stress testing, etc, including API usability.


P.S. If we fix the atmosphere, clean up the water, stop polluting the soil and learn to live in harmony with our environment, what's to motivate us to move off this rock before we lose our aggressive drive and then, when we're sipping Mai Thais, the sun explodes? Consuming this planet until nothing's left but an empty husk and we're forced, like locusts to move on to the next one, may well be the only thing that keeps our species alive (assuming we survive the coming ice age, of course).

Friday, January 26, 2007 3:24 PM  (9 Replies)

Boogers and My Writing Process

I'm supposed to be writing today, but John (my eldest son) is also doing some writing as part of his homework. However, after watching him struggle with just the topic (the phrase "Always aim for the moon. Even if you miss, you'll end up among the stars" [which isn't even the correct quote]) to try to write the fully-formed essay, I give him a little lesson about how I write. Plus, since I'm supposed to be writing, this blog post is an excellent avoidance technique.


When I write, I told my son, I have to write giant books starting from empty pages. I can't just have a topic and start writing, I have to have something to break up the whitespace first. So, as a demonstration of this technique, I asked the fruit of my loins, an apple from my tree, for a topic. He said, without so much as a second of hesitation, "boogers."


So, we started by brainstorming booger-related topics:



  • can be dry and crunchy

  • can be wet and chewy

  • flick 'em

  • eat 'em

  • wipe 'em

  • come from noses

  • wipe 'em on somebody

  • wipe 'em on tissue

  • wipe 'em under something

The brainstorming is just a list of facts in whatever order I think of them that I know about the topic that I may or may not decide to share with my readers. While brainstorming, I don't judge -- I just type whatever comes up. After brainstorming, I spend some time rearranging my facts into some kind of outline to lay out my order and my main topics into which the facts fall:



  • intro:


    • what they are

    • formed from dust and other irritants in the air

    • can be dry and crunchy

    • can be wet and chewy

    • come from noses

  • how do I get 'em out of my nose:


    • Kleenex

    • finger

    • friend's Kleenex

    • friend's finger

  • what do I do with 'em now that I've got 'em out of my nose:


    • flick 'em

    • eat 'em

    • wipe 'em

    • wipe 'em on somebody

    • wipe 'em on tissue

    • wipe 'em under something

    • straight blow in the shower

  • summary

  • overrun (although I've decided I don't want in my finished piece)

During the outlining phase, it's often the case that more facts come up and sometimes even whole categories of facts. As you're forming the story, that's when the gaps make themselves clear. At this point, I generally jump into the first fact, turning it into the first sentence, adding supporting sentences, transitions to the second fact and so on. Sometimes, though, especially with shorter pieces, I'll write the summary to make sure I've got it in mind as the write the entire piece. This idea of the story that I want to tell is what Don Box calls "the spine," and it's the most important part. Once you've got the spine, everything else falls into place.


summary
Boogers happen to everyone and they're good for you. However, when there are too many, you gotta get 'em out. I recommend that you use a combination of Kleenex and your finger (for those hard to reach spots). You should make sure to throw the Kleenex away and wash your hands, although the shower straight blow is a good alternative. You should never, ever flick or wipe your boogers on something besides Kleenex, because who wants to find them?


At this point, I've gone from a blank sheet of (virtual) paper to a place where I know the spine, the details and the ordering; most of the hard work is done.


Obviously, brainstorming + outlining + summary + details = completed essay isn't exactly a unique perspective on the writing process. Still, how often does one get the change to turn boogers into a positive learning experience for one's progeny? : )

Sunday, January 21, 2007 4:19 PM  (11 Replies)

CodeFetch: Search Book Source Code

CodeFetch allows you to search in the source code associated with books (like the code I publish for my books). Plus, it lets you choose the language to search on and shows the book the results come from so you can read your favorites. Very cool.

Friday, January 19, 2007 8:36 PM  (4 Replies)

Five Things You Don’t Know About Me

I've been tagged a coupla times, so it's time I fessed up with Five Things You Don't Know About Me:



  1. In college, I was in a fraternity and not just a geek fraternity, but an actual, national, recognized social fraternity (Phi Delta Theta). I figured I was geeky enough in high school, so needed a place to learn to at least hide my dorkiness. Obviously, I failed, but it was a very fun four years. : )

  2. In college, I coded in Unix using VT100 emulation software via a modem to my school's DECs from my Mac IIcx running System 7 (I worked two jobs all summer to earn half of the $6000 it cost me to purchase the thing in 1988). It was the combination of the best programming and best UI experience at the time (although on two separate OSes). After graduation and working a job for a coupla years where I programmed Unix all day, I needed to look at Windows 3.1 for the first time because I had an interview at Intel. I could only stand to use it for about 10 minutes. They hired me anyway as a Windows programmer and, thank goodness, it's much gotten better. Windows is now my favorite programming and UI experience (and I've used both Unix and Mac OS X several times since then to make sure).

  3. I am a fetishist; my fetishes are domain names and phone numbers. I can't think of a cool domain name without a) checking to see if it's available and b) purchasing it if it is (the one that sticks in my mind is clownporn.com, but that one was long gone). If I ever have a cool idea for an app, I must first purchase the domain name (I own appsettings.com and I just purchased 16 domain names the other day for another thing I want to do). Likewise, if I see a 7-digit phone number without a 0 or a 1 in it, I am physically compelled to surf to phonespell.org to see what the possible 7 and 8-letter words are (my old home phone number was 642-JOHN, the name of my eldest son). Of course, I've written my own program to do the permutations of numbers to letters, but phonespell does that cool dictionary lookup and grouping thing. I also added the phonespell support to Dave's Quick Search Taskbar Toolbar Deskbar.

  4. I have jumped out of a perfectly good airplane (not Alan Cooper's plane).It was just before I got married and I took my best man. We both used parachutes. The fall was surprisingly quiet, but the stop at the sudden bottom was unpleasant.

  5. The equal-rights-for-humans theme that sometimes pops up on this site isn't because I've seen friends discriminated against and now I have to change the world (I don't actually know very many people that are homosexual), but rather because I think it's the right thing to do.

I tag Don Box, Chris Anderson, Michael Weinhardt, Tim Ewald and Ian Griffiths.


P.S. What's the deal with the shape of the Pentagon and the Seal of the US on money (the eye at the top of the pyramid)? Damn you Doug Purdy for getting me The Illuminatus Trilogy when I'm supposed to be writing a book!

Thursday, January 04, 2007 10:03 PM  (11 Replies)

On good days, I'm Iron Man...

My superhero results:
You are Iron Man


















































Iron Man


80%
Spider-Man


70%
Catwoman


55%
Hulk


50%
Green Lantern


50%
The Flash


45%
Robin


42%
Superman


40%
Batman


30%
Supergirl


30%
Wonder Woman


20%
Inventor. Businessman. Genius.

My super villian results:
You are Dr. Doom






































































Dr. Doom


58%
Mr. Freeze


55%
Lex Luthor


53%
Juggernaut


48%
The Joker


45%
Kingpin


45%
Apocalypse


42%
Poison Ivy


38%
Riddler


37%
Venom


36%
Green Goblin


36%
Dark Phoenix


33%
Magneto


27%
Catwoman


25%
Mystique


20%
Two-Face


20%
Blessed with smarts and power but burdened by vanity.

Click here to take the Superhero Personality Test


Click here to take the Super Villain Personality Test


P.S. Happy New Year!

Sunday, December 31, 2006 1:06 PM  (8 Replies)

Special Holiday Episode IV: DBox and ChrisAn

"?Keeping up with their tradition, Don and Chris sing an inspired song for the holidays."


Merry & Happy!

Tuesday, December 26, 2006 12:09 AM  (4 Replies)

Xbox 360 Warranty: Now 1 Year (Retroactively!)

I love it when we do a good thing:



"Effective today (December 22), the one year warranty is now the standard for all Xbox 360 consoles. Customers that experience hardware issues with their Xbox 360 within one year of purchase will have their consoles repaired at no cost. Moreover, the new warranty policy is retroactive, so consumers that may have already paid for out-of-warranty Xbox 360 repair within one year of the console's purchase will be eligible for reimbursement of their console repair charges."


I'm a big Vista fan, I'm loving Office 12 and I live on my WM5 phone, but the Xbox 360 is currently the coolest thing we do. And it just keeps getting better.


P.S. If the postscripts aren't appreciated, why do they get all the feedback?

Friday, December 22, 2006 9:04 AM  (41 Replies)

Somebody Diggs Me...

I don't know why the MS interview page is suddenly digg-worthy after all these years, but it's nice to be dugg:



I'd like to thank the academy...


P.S. I'm not looking forward to giving up the tax cuts when the Democrats tax the presidency (the 2008 elections are theirs to lose). How about we cut our military in half so that it's just the most powerful on earth instead of more powerful than the sum of all the rest of the armies on earth?

Thursday, December 21, 2006 8:06 AM  (7 Replies)

Point: Local Live Maps

When it comes to Web 2.0 apps, online maps are easily the thing I use the most. I don't go anywhere these days w/o first pulling up the map on MapQuest, Google maps or, for a coupla years now, local.live.com (starting back when it used to be called MapPoint). I generally use Google for my search engine, so don't think it's just the MS employee thing pushing me -- I genuinely like local.live.com better.


Google and MS have been in an arms race for years on the maps stuff, doing fancy stuff like 3D globes and other goo that looks good in demos, but that I don't need. However, in this war of the world (so to speak : ), today MS fired a decisive shot across the bow, I think -- the "Send" menu. This is huge for me, because I can send the directions to my phone, either via SMS or via email, and I get a great display clearly optimized for my smartphone. Not only does it have a great mini-map, but the directions are easy to read (saving me from printing the directions for just a single trip) and it has a link to reverse the directions (the one thing I never remember to do).


Oh sure, I can do the same thing with the Google maps "Email" menu, but when I follow the link on my phone, there's no map (although there is a handy link to reverse the directions). Also, the directions don't read as well and I swear it's faster to surf to the local.live.com directions (although this might just be the MS bias talkin' : ).


On the other hand, I just noticed that Google maps has a new "Add destination" link for multi-destination trips, which is the only thing I use AAA online TripTiks for and you have to be a member to access the feature (I am, but still it's kinda clunky...). Hey, local.live.com guys -- can I have that, too?!?


P.S. I think I've scared the most reactionary, close-minded folks away, so I think I'll cool it on the postscripts for a while ('til I feel like it again : ). BTW, my definition of "close-minded" is "those who don't think I have the right to express my opinion," not "those who disagree w/ me." Hopefully I managed to shake the former off my RSS feed while keeping the latter.

Friday, December 15, 2006 5:55 PM  (14 Replies)

VS2005 SP1

"Through further advancement and feedback, Service Pack 1 ... provides over 70 improvements for common development scenarios including:



  • New processor support (e.g., Core Duo) for code generation and profiling
  • Performance and scale improvements in Team Foundation Server
  • Team Foundation Server integration with Excel 2007 and Project 2007
  • Tool support for occasionally connected devices and SQL Server Compact Edition
  • Additional support for project file based Web applications
  • Windows Embedded 6.0 platform and tools support

For more information, see the Microsoft Download Center:



At the time of this posting, VS05SP1 update for Vista download wasn't available, but it should be directly.


P.S. I hope everyone is enjoying the holiday season with peace, love and understanding.

Friday, December 15, 2006 7:50 AM  (6 Replies)

Rory, Distilled

Lord knows, I love Rory, but easily my favorite thing are his comics. However, he doesn't do enough of them, so if you're looking for a Rory-alternative between comics, check out xkcd. This is the one that made me realize just how Rory xkcd is:



I wonder how often this happens to Rory? : )


P.S. I look forward to the day when it's just as easy to get int'l news in the US as corporate-spun news. The world will be a better place when we realize that we're not the only ones on the planet.

Thursday, December 14, 2006 9:21 AM  (12 Replies)

XNA Game Studio Express Has Been Released!

Oh, man, I *so* want to write a game that runs on my Xbox 360! Now I can (and so can you). Enjoy!


P.S. Impeach!

Monday, December 11, 2006 2:05 PM  (31 Replies)

XAML Design Tools from Microsoft

If you're a designer looking for XAML design tools, and you're a designer type (you know -- beret, turtle neck, a wardrobe that extends beyond jeans and t-shirts), you've got two choices from Microsoft. You can use Expression Design [1] for static XAML graphics or Expression Blend (aka Sparkle) for dynamic XAML interfaces. Both are available in pre-release form (CTP for Design and Beta 1 for Blend), so give them a try.


[1] "Expression Design" is not to be confused with "Expression Designer", which is the old name for Sparkle (Blend).


P.S. Can someone give Scoble a hug? He's obviously a little worked up if he's recommending physical violence for disagreements about web site design. : )

Monday, December 04, 2006 3:11 PM  (3 Replies)

Holy Cow! An Entire WPF/E DevCenter!

I expected eventually to get a WPF/E (Windows Presentation Foundation Everywhere) download or two, but these guys went crazy; they just released an entire WPF/E DevCenter this morning. Here're just a few highlights:



Enjoy!


P.S. Regardless of whether humans caused global warming or whether it's part of a natural cycle, it's happening and we're going to have to deal with it.

Monday, December 04, 2006 11:12 AM  (4 Replies)

Xbox Video Marketplace Worked Great For Me

I tried the Xbox Video Marketplace on my 360 today. For 160 points ($2), I was able to purchase the season 2 premiere of Venture Bros (which is hilarious, btw) and 17% into the download, I was able to start watching it commercial free. Quality was high and I'm downloading Star Trek: The Enemy Within (a transporter accident creates an evil Kirk) for another $2 as I write this. The next experiment is a movie, but I'll wait for the wife to come home before we decide which one to pick.


The experience was seamless. Recommended.


P.S. I think gays and lesbians have just as much right to get married and to be parents as heterosexuals.

Friday, November 24, 2006 5:23 PM  (105 Replies)

I'm Thankful for Windows Vista

Of course I have no credibility here (I'm part of the evil empire, after all), but I have to say, I'm really loving the Windows Vista Ultimate RTM. I know the Vista team takes a lot of crap for being late and for not being revolutionary enough, so I thought I'd let the Vista team know that I have yet to find something that isn't just better in Vista than in XP. Here are a few things I really like:



  • I no longer have to do Ctrl+Esc, R before I can type something to run (I'm a huge keyboard guy); I just have to type Ctrl+Esc and start typing. This savings alone has ruined me for XP. (And before you point out that I can just use Win+R, I don't like the Windows key: it's not on all keyboards and it's not always in the same place.)

  • If I want to search for a program in my voluminous start menu, I just do Ctrl+Esc and start typing. When the list of results contains my target, I press the down arrow to pick the one I want and press Enter when I get there.

  • If I want to search for content on my computer, I just do Ctrl+Esc and start typing (once search is set to index my entire computer -- I wish that were the default). If I want to be specific that I just want to search content or file name, I can use the "content:" and "name:" designators, e.g. "content:foo name:foo.cs".

  • If I want to find a setting in a particular control panel app, I open the control panel and start typing -- the results point me at the specific control panel applet and page with that setting.

  • If I want to find something on the internet, I press Ctrl+Esc and start typing, then press the up arrow (to get to the "Search the Internet" option) and press Enter, which brings up the results in my IE7 favorite search engine.

  • If I want to find something in my large list of installed programs, I open the Programs and Features control panel and start typing (I found the renamed "Add and Remove Programs" control panel by searching for "uninstall").

  • Before you narrow my list of likes about Vista to "pervasive search" (which, obviously, I love), I also really like the sidebar. It's amazing how often I glance over there to get some quick piece of info that's always being updated for me rather than start some app, interrupting what I'm doing (e.g. lately I've been waiting with bated breath for MSFT to hit 30). I'm anxious for lots more sidebar gadgets.

  • I love that the desktop is in the Alt+Tab list.

  • I love the 3D Win+Tab list.

  • The games, both new and old, are uniformly gorgeous.

  • I really love the new look 'n' feel, including the animations and the new start menu, both of which I turned off in XP.

  • I love that it just works on my 2-year old Dell laptop w/o any muss or fuss. I only have a Windows Experience Index of 2.0 because of my graphics card, but using Vista is still a very pleasant experience (and I have Aero glass around the edges of my windows and everything).

  • I really love Windows Meeting Space. I'm a big user of Live Meeting because of my remote employee status and Windows MS is a simpler, cleaner, peer-to-peer version of the only parts of LiveMeeting I every actually used, i.e. sharing apps and sharing files. To have it included for free is huge.

  • I love having Media Center included, too.

  • I love that I can do picture slide shows from zip files as well as from folders.

  • I like the new Sync Center, one-stop shopping for my offline folders (which I love) as well as managing my smartphone's files.

  • I really like the real-time thumbnail of apps when I hang the mouse over icons in the taskbar and in the Alt+Tab/Win+Tab list.

  • I love that .NET 3.0 is included out of the box.

  • I love that every app I've tried, including an app I originally wrote for Windows 95, just works.

  • I love that I find new features all the time.

  • As I've mentioned, I like the clearification.com site. In fact, I liked it so much, Mel and I want to see Demetri Martin live in Portland. Very funny.


Seriously, given the experience with recent pre-release versions of Vista, I thought I was going to just stick with XP. I'm so glad I didn't. Vista rocks.


P.S. I'll continue to desensitize/scare away readers with political/religious/social messages in future posts. Until then, Happy Thanksgiving!

Thursday, November 23, 2006 11:25 AM  (76 Replies)

Dammit!

There are a very few games I could call "great." Doom (of course). Half-Life 2. Burnout Revenge. Mario Kart. And last week, I added another game: Gears of War. Wow. I'm almost exclusively a first-person-shooter person (although I never liked the Halo series), but GoW has converted me to 3rd person. It rocks.


The one flaw in GoW is that it's too damn short! I've already finished the entire game on "casual," so now it's time to start over again on "hardcore" and begin the n-year wait for GoW 2. <sigh>


P.S. I believe in God, but am not a member of any religion. I was confirmed Catholic, but am no longer one.

Wednesday, November 22, 2006 3:41 PM  (11 Replies)

Costco + Busted Xbox 360 = Happiness

After a scant 6 months of service, my Xbox 360 yielded up the dreaded "to play this disc, put it in an Xbox 360 console" error (where do you think I was putting it?!?), which indicated a problem w/ the DVD drive. Ironically, this only became an issue after playing Gears of War for an hour or so (OMG is that a great game), even though it was happening consistently across my entire game library.


Calling 360 technical support yielded an offer of a repair, if I was willing to pay $140 (+ shipping) and wait 10 days for transit time. Having invested more than $1000 into my 360 and taken it into my home as a family member (ranking just below the kids but well above the dogs in the pecking order), I couldn't abandon it. This part of my experience yielded a very important lesson:


Lesson #1: Modern-day consoles should be treated like PCs, not VCRs, and warranteed appropriately.


I'm so used to refusing the warranty when I purchase a piece of consumer electronics (and normally it is just a scam), that I didn't even think to get the warranty on this one. On the other hand, I warranty ever Dell laptop I buy w/o a thought (and it has paid off many times). The XBox 360 (and I imagine the Play Station 3) are useful enough, that it's worth the warranty fee when things go wrong and complicated enough that things are much more likely to do so, like your average laptop.


Luckily, my clever wife remembered that she'd purchased the 360 at Costco (she's the one that brought it home -- how cool a wife do I have?!?), which has a very liberal return policy. So, Costco took back my broken 360 and in return gave me:



  • a brand new XBox 360 (which plays Gears of War consistently wonderfully)

  • one extra controller

  • one extra game (Xbox Live Arcade Unplugged Volume 1)

  • my old HD w/ our saved games (instead of the new one)

  • a $15 credit

You read that right -- not only did they give me a new Xbox with more stuff in the bundle, but because the bundle was now cheaper, they refunded me the difference. I'm now hoping my 360 breaks every 6 months 'til they're paying me to take the new one home w/ me... All of this leads us to lesson #2:


Lesson #2: Costco rocks.


In fact, Costco is such a great store, that I can ignore lesson #1, because I know that they'll replace my Xbox again in 6-12 months if it breaks again.


P.S. I'm in favor of legalizing marijuana (although I've never smoked any myself)


P.S.S. I put in that postscript because I don't want readers to think that I was scared off (or wised up, depending on your POV) from the response to my last post. : )

Monday, November 13, 2006 5:37 PM  (19 Replies)

Our Long National Nightmare is Over

Since at least 2001 we've been stuck in a quagmire of missteps, indecision, corruption and the eroding of our freedoms. Some of us feared it would never end.


But the US House and Senate are now officially out of the hands of the Republicans, and that's cause for much rejoicing. Let the balloons drop and the dancing begin! It's a new age.


P.S. apologies to Mr. Petzold for ripping off his blog post, but when I saw it in my RSS reader, I thought that the above would be the subject of his latest essay and that we would finally have something on which to agree. It'll be my luck that he's a staunch Republican and I'll hear about my misguideness tomorrow... : )

Wednesday, November 08, 2006 7:24 PM  (179 Replies)

.NET Framework 3.0 (aka WinFX) Has Shipped!

After a monumental amount of work, the .NET Framework 3.0 has been completed! It ships out of the box in Vista, but for down level clients (Windows XP and Windows Server 2003) and developer tools, see the links below:



Wahoo!

Tuesday, November 07, 2006 10:25 AM  (9 Replies)

Pay As You Go Phones For the Boys

Back in writer avoidance mode, I did some research into PAYG phones for the boys based on some recommendations from friends, colleagues and Wikipedia. This is what I found:

























































CompanyEntry-Level
Phone Cost
Initial AirtimeAdditional
Airtime
Coverage
In My Area
Virgin Mobile$20$20 (100 minutes)$11/houruncertain
T-Mobile ToGo$30$10 (30 minutes)$20/hourgood
Firefly Mobile$80
(no keypad)
$7.50 (30 minutes)$15/hourreported
Tracfone$20
(shows time left)
$40 (120 minutes)$20/hourreported
Boost Mobileunknown
(bad website)
unknown
(bad website)
$12/hourreported
Cingular GoPhoneunknown
(bad website)
$10 (40 minutes)$15/hour +
$1/day for usage
crappy
Verizon INpulse$70$10 (100 minutes)$6/hour +
$1/day
reported
Net10 Wireless$40
(shows time left)
$30 (300 minutes)$6/hourreported

Assuming I trust my kids to call whoever they want (so long as they pay), it seems clear that Net10 is the way to go. It's effectively $10 for the entry-level phone (because it comes w/ $30 of free airtime) and $6/hour for more time after the first 300 minutes are gone. Plus, the Net10 phones show the amount of time left on the account, so the boys can monitor it themselves easily. Neither AT&T Wireless or Cingular has good reception in my area, so who knows what the reception would be, but for $40, it wouldn't be expensive to find out and they sell them at my local Safeway...

Saturday, November 04, 2006 12:50 PM  (4 Replies)

Mark Twain on Investing

OCTOBER: This is one of the peculiarly dangerous months to speculate in stocks in. The other are July, January, September, April, November, May, March, June, December, August, and February.


-Mark Twain

Monday, October 30, 2006 4:53 PM  (5 Replies)

Errata for Windows Forms 2.0 book (and more)

Mike Weinhardt, the more capable of the two authors on Windows Forms 2.0 Programmer, has posted the infrastructure for the errata for all three Windows Forms books (1.x in C#, 1.x in VB.NET and 2.0 in C#). And maybe if we ask him nicely, he'll package it up as a component for other authors that need errata on their books.

Sunday, October 29, 2006 10:13 PM  (604 Replies)

Isaiah Okorie Asks "How do you do what you do?"

From: Isaiah Okorie


Sent: Friday, October 13, 2006 08:06 AM


To: csells@sellsbrothers.com; csells@microsoft.com


Subject: XSellent!!!


 


Hi Chris,


 


I am  a .Net developer working in Ghana, West Africa. I have been reading your articles for a while now and listened to you whenever the opportunity came along. I think you have been very inspirational to my own work.


[csells] I’m happy to hear that. Thanks.


 


If you don't mind, I would like to know how you are able to organise you work. How are you able to prepare for your conferences and still be a prolific author?


[csells] I think I’d sum it up as: Commitment + Fear. First, I commit to something, then I let the fear of bad consequences, i.e. giving a bad talk, missing my deadline, writing something inaccurate, etc, motivate me to do a good job. Unfortunately, this means I spend more time working then I’d like, but generally the results turn out pretty good.


 


What discussion groups, conferences, blogs (if any) are a must for you?


[csells] Since becoming an MS employee, I lurk on a few internal aliases based on the technologies I’m interested in. Externally, I hang out on slashdot.org, joelonsoftware.com and computerzen.com and that’s probably about it. It used to be lots, lots, lots more, but I just don’t have the kind of time I used to. As far as conferences go, I generally only do the PDC and my own DevCons.


 


How are you able to keep up with the changes? What books do you read?


[csells] I keep up with changes by a) a broad familiarity with as much technology as possible and then b) committing to using it because it feels like it’ll be the right thing and c) using fear to motivate me (recognize a pattern? : ). I read books on demand given the topic I’m into, and then it’s 3-5 books in a week for immersion. Frankly, after writing a few books, I’m a bit of a snob, so I don’t read a lot of technical books for fun the way I used to.


 


Now you work at Microsoft, how do you manage your 'usual tasks'?


[csells] Honestly, it’s hard to keep up with the personal mail; I don’t do as good a job as I’d like. The web site stuff, e.g. blog, tools, spout, Genghis, etc, is catch as catch can. As soon as this last book is done (WPF Programming: The RTM Edition), I plan on trying to get some balance back into my life.


 


Many thanks for your inspiring hard work.


 


[csells] My pleasure.

Wednesday, October 18, 2006 10:56 AM  (96 Replies)

I don't know what this has to do with Vista...

but I like it.

Friday, October 06, 2006 3:07 PM  (190 Replies)

WPF: Enabling Crimes Against Nature in a Good Way

My friend Jeff asked me to do a terrible thing yesterday: "How do I show a form in the popup window that a menu shows?" I said, "Dude! Don't do that -- write a dialog!" And that's what he did, but then, like a train wreck, I couldn't look away. It took me all of 10 minutes of very straight forward coding and here we are:


If you're familiar with WPF, data binding and data templates, this is all standard stuff. Here's the data structure:

class Person : INotifyPropertyChanged
{
    string name;
    public string Name
    {
        get { return name; }
        set { name = value; Notify("Name"); }
    }
    int age;
    public int Age
    {
        get { return age; }
        set { age = value; Notify("Age"); }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    void Notify(string prop) {
if( PropertyChanged != null ) {
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}

The data template is also bog standard:

<DataTemplate DataType="{x:Type local:Person}">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="auto" />
      <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="auto" />
      <ColumnDefinition Width="auto" />
    </Grid.ColumnDefinitions>
    <Label Grid.Row="0" Grid.Column="0">_Name</Label>
    <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name}" />
    <Label Grid.Row="1" Grid.Column="0">_Age</Label>
    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Age}" />
  </Grid>
</DataTemplate>

Setting up the app itself is nothing special:

<Window ...>
  <Window.Resources>
    <DataTemplate DataType="{x:Type local:Person}">
      ...
    </DataTemplate>
  </Window.Resources>
  <Grid>
    <Menu>
      <MenuItem Header="File">
        <MenuItem Header="Exit" x:Name="fileExitMenuItem" />
      </MenuItem>
      <MenuItem Header="Form" ItemsSource="{Binding}" />
    </Menu>
  </Grid>
</Window>

Notice that the items that make up the menu come from a binding to the ambient data source, which we set in the code-behind:

protected override void OnInitialized(EventArgs e)
{
    ...
    Person tom = new Person();
    tom.Name = "Tom";
    tom.Age = 11;
    DataContext = new Person[] { tom };
}

The only thing at all tricky is that, even though we're only editing a single object in the "popdown window," it has to be in an implementation of IEnumerable so that the menu can display it (it expects items to come in a list).


That's it. You can download the RC1 WPF project here.


You might wonder why I would post such a sample, when clearly that's not a UI we want to foster on folks. The answer is simple: because WPF allows it.


The power of any platform should be judged by how well it lets you write bad code. Early versions of Visual Basic let you write really bad code -- but it worked. Likewise, WPF lets me build the worst UIs ever -- but they work. This is necessary so that UI visionaries can experiment and get to a place where they're doing something completely different from UIs of today and we like it.


Do you think the Office folks, who, for all practical purposes, have been setting UI guidelines on Windows for a decade, could use MFC or Windows Forms? No, because they're not flexible enough. Could they use WPF? Absolutely they could. And so can you.


The crayon box has lots of colors that I don't like, but in the hands of an artist, they can create beauty.

Friday, October 06, 2006 10:14 AM  (10 Replies)

Teaching Kids To Do Cool Computer Stuff?

My youngest son's teacher found out I work at MS, so now he expects me to come into his class to teach them cool stuff. I'm happy to do that, but now I'm worried about putting together a cool 1-4 hours of stuff to do, e.g.



  • Cool PowerPoint stuff (wowing their classmates)

  • Cool Excel stuff (doing their math homework)

  • Cool Web stuff (building their own web site)

  • Cool Programming stuff (writing their own PC/XBox 360 games)

  • Cool Hardware stuff (programming a robot)

Obviously, I'm not the first person to want to teach kids how to do cool stuff w/ their computers. Can someone point me at some activities for a classroom for of kids to do in these (or other) categories? Thanks!


P.S. My son is a 6th grader, making his class 11 and 12 year olds.

Monday, October 02, 2006 11:41 AM  (17 Replies)

Sept CTP of .NET 3.0

The CTPs are coming so fast and so furious now that I nearly missed the September 2006 .NET Framework 3.0 CTP:



Enjoy!

Sunday, October 01, 2006 3:10 PM  (0 Replies)

Horning in on Hanselminutes

It took a while, but I was finally able to horn in on an episode of Hanselminutes. Thanks for having me, Scott!

Wednesday, September 27, 2006 4:42 PM  (7 Replies)

Amazon Unbox -- what about my TV?

I don't want to download movies via Vongo or Amazon Unbox to my PC; I want to download them to my TV and smart phone! YouTube works because the videos are short, so watching them on my PV happens right now or not at all. Any movie or TV show service that doesn't let me play the result on my media center or take it with me on my phone, I just don't care. Does anyone want to watch 30+ minutes of video sitting at their desk or staring at their lap? I don't get it...

Friday, September 08, 2006 11:31 AM  (8 Replies)

.NET 3.0 RC1 Download

This one should be about done:



Enjoy!

Thursday, September 07, 2006 9:18 AM  (3 Replies)

Congrats To Mr. Petzold on this WPF Review

In the world of Windows technical writing which has so much competition, there's rarely any money involved, one dreams for reviews like these from KarstenJ:



"Tim Sneath walked into my office the other day and laid Charles Petzold's Applications = Code + Markup on my desk.  I'm only to Chapter 7 of 31 chapters and I am riveted.  I already have that feeling when reading a great novel when you don't want it to end.  It actually does read like a novel to me, with a narrative arch as it negotiates its methodical way through the WPF jungle of APIs."


Congrats, Charles.

Tuesday, September 05, 2006 11:34 AM  (2 Replies)

$366 PC scores 2.9 on the Vista-o-meter

I installed the "almost" RC1 of Vista onto my $366 PC and I've finally got sound! In addition, I've got the real transparent Aero effects and playback of my .msdvr files (Media Center recorded TV shows) over the network. The "experience" scores out at only 2.9, but only 'cuz of my crappy CPU (1.67 GHz) and the video card (although it does real-time video and Aero -- what more should it do?!?). The DVD video playback worked but not the audio, which was one of very few glitches (another was that it doesn't show video on Google videos).


I'm running Vista Ultimate, and while I can't tell what's "ultimate" about it, it feels about time to make Vista the OS on my main computer. Certainly my sons like it on their computer, which is the real test.

Thursday, August 31, 2006 7:47 PM  (1 Replies)

USB MP3 Player + SD Card = Gadget-o-licious


The sound quality ain't that great, but don't criticize the dog for being off key...

Wednesday, August 30, 2006 3:09 PM  (9 Replies)

Develop Games For Your Xbox 360

The Microsoft XNA Game Studio Express (Beta) is available for download:



"XNA Game Studio Express enables individuals and small teams to more easily create video games using new, optimized cross-platform gaming libraries for Windows and Xbox 360. This beta release targets the development of games for Windows. The final version of XNA Game Studio Express will be available this holiday season and will enable development of games which target Windows and upon purchase of a XNA Creators Club subscription, the Xbox 360 as well."


Has any other console vendor every let an individual develop games?

Wednesday, August 30, 2006 2:49 PM  (7 Replies)

If it can be installed, Scott's installed it

and if it's any good, we hear about it. Really, I'm just posting this link to Scott Hanselman's 2006 Ultimate Developer and Power Users Tool List for Windows here so I can find it later, but feel free to browse the list yourself, broken up into several interesting categories:



  • Top 10 (+ 5) Life/Working-Changing Utilities

  • A Developer's Life

  • COM is Dead [ed: if only]

  • XML/HTML Stuff

  • Regular Expressions

  • Launchers

  • Stuff Scott Digs

  • Low-Level Utilities

  • Websites/Bookmarklets

  • Tools for Bloggers

  • Smart People's Utility Pages

  • Alt.Lang

  • Browser Add-Ins

  • Things Windows Forgot

  • Outlook Add-Ins and Life Organizers

  • Ultimate Registry Tweaks

  • Windows Explorer Integration (and other integratey things)

  • Continuous Integration

  • TablePC Indispensables

  • ASP.NET Must Haves

  • Visual Studio Add-Ins

Notice how just his list of categories is longer than most people's lists? Scott's a gem. Guaranteed you'll find something that makes your life better.

Wednesday, August 30, 2006 7:50 AM  (1 Replies)

100,000 downloaders get pre-RC1 Vista

If you're interested in the "same build (5536) released last week to Technical Beta and TAP customers" (according to Shawn Van Ness), you and 99,999 of your closest friends can download the pre-RC1 of Vista.

Tuesday, August 29, 2006 7:51 AM  (2 Replies)

Wikipedia has an open enrollment day...

Right there next to Don Box, Jeffrey Richter, Robert Scoble, Charles Petzold, Keith Brown is the Chris Sells Wikipedia page. There aren't any pictures (not this one or this one or even this one), the blogarticles and tools aren't listed and nobody's mentioned the interview questions, but it's there. I'd like to thank the academy...

Monday, August 28, 2006 8:35 AM  (3 Replies)

Fun Presentation

In massive writing avoidance mode, I found my way to Seth Godin (who I don't know from Adam) doing a great presentation on stuff that's broken at Gel 2006 (I conference I've never heard of) as a way to promote his site. I found the presentation itself at Presentation Zen, when I read about in Guy Kawasi's essay on The 10/20/30 Rule of PowerPoint, which I found on the sidebar of the Startup Success 2006, which I got to from the Churchill Club web site. I can't for the life of me remember how I got to the Churchill Club web site, but it killed a lot of time (did I mention I was in writing avoidance mode?).

Sunday, August 27, 2006 2:15 PM  (3 Replies)

Windows Live WiFi Beta

The Windows Live team has posted their WiFi beta and they'd love it if you checked it out. I already love the HotSpot Locator (there are lots of free hot spots in my neighborhood I didn't know about!) and are working on a security blanket for unprotected hot spots as well as a bunch of other WiFi related stuff. Check it out!

Friday, August 25, 2006 12:05 PM  (2 Replies)

I listen to one podcast: HanselMinutes

Scott created his podcast with the idea of not wasting his listeners' time and he's done it. HanselMinutes is the only podcast I listen to. In fact, I prepared for a long car drive by filling my phone w/ episodes I hadn't hear yet and listened all the way (except when I called Scott to complain about one of them : ).


Not only does Scott have a fabulous list of topics for the Windows developer, but the way he explains them is wonderful, too. I don't know where the guy finds the time to do all the stuff he talks about; I'm jealous!


In fact, I'm so enamored of his show, I've been trying to horn my way onto an episode (and not just 'cuz he had very nice things to say about me recently [19:53 - 21:12]). I'm keeping my fingers crossed, but either way, if you only listen to one podcaster this year, it should be Scott.

Wednesday, August 23, 2006 10:31 PM  (2 Replies)

Fixing the Internet

About 18 months ago, I asked for an intern and boy did I get one. He doesn't want to be mentioned, but he's done some pretty cool stuff with the site in his spare time (he's also a very busy web development consultant):



  1. Dug into what it would take to rebuild sb.com from scratch in ASP.NET 2.0 (although we differ on the moral implications of the license on Community Server 2.0)

  2. Updated 404 page that tracks usage on dead/non-existent links, even missing URL #frags

  3. Server-side link and client-side #frag forwarding

  4. tinysells.com implementation (e.g. www.tinysells.com/4) and administration console (i.e. book co-authors)

#4 was very cool, because it enables me to put links into my writing that are easy for the reader to type and that are easy for me to update when the real URL changes (none of the other URL redirection sites allow administration post-facto as far as I can tell).


#3 is also cool, because of the primitive site authoring tools I use (FrontPage), so when I move spout/index.htm (the content of spout/default.aspx) to spout/archive.htm (the content of spout/archive.aspx), all of the links that folks have put into their own content are broken. Now, we've got a means for tracking when those links are broken and for forwarding them, even using my silly client-side name #frags. That even means that when folks form their URLs incorrectly (this one was never right and should always have been this) can be caught and corrected on my side.


Anyway, I wish I could tell you about this guy 'cuz he does great work and he deserves move business. Hopefully this post will shame him into it. : )

Friday, August 18, 2006 11:48 AM  (9 Replies)

The Internet Is a Meritocracy

It's easy to think that if you're already got a high page rank in google, that you'll get more than your far share of traffic, polarizing the internet into a small number of sites that get all the hits. Luckily, according to "Topical interests and the mitigation of search engine bias," published in the Proceedings of the National Academy of Sciences, that's not the case:



"Our result has relevant conceptual and practical consequences; it suggests that, contrary to intuition and prior hypotheses, the use of search engines contributes to a more level playing field in which new sites have a greater chance of being discovered and thus of acquiring links and popularity, as long as they are about specific topics that match the interests of users as expressed through their search queries."


In other words, if you've got something relevant to say, the folks that care will find it. Yet again, letting the internet decide yields the best result.


Source: Is there a googlearchy?

Friday, August 18, 2006 9:22 AM  (3 Replies)

$33 On Bookpool: Windows Forms 2.0 Programming

The nice folks at Bookpool are running a special on Windows Forms 2.0 Programming: only $33! Enjoy.

Tuesday, August 15, 2006 9:56 AM  (5 Replies)

Vista Song Parody from Ted + Carl!

I'm a big Ted Pattison fan in general (you have *got* to hear the story where the cowboy shows up at the door in buttless leather chaps), but he's at his best when he's singing (or holding Don's hand). Of course, Carl Franklin's no slouch at singing either (I don't know how he his at holding hands or whether his chaps have a butt or not), so you'll want to hear them singing "Why Did Shipping Vista Turn Out to be so Hard" sttto "Me and Julio Down by the School Yard," by Paul Simon. Enjoy.

Tuesday, August 15, 2006 12:29 AM  (4 Replies)

24 and the Comic Book Archive

I'm an avid 24 watcher and one of my favorite parts of the show (offsetting the fact that Jack never so much as cracks a smile let alone giving us a nice "Wahoo! I did it! I rock!") is when one of the technies "sends her screen" to another computer. Man! I want that! It's so often the case that I've got a bunch of morning news sites and documents I'm reading through that I get onto one computer in my house and want to send to another computer for reading (maybe it's the computer downstairs or the Tablet), but there's no way to do that. I want a little glyph next to the Minimize button called Send that lets me pick a computer to send the screen to.


And what does that have to do with the Comic Books Archive, which was archiving digital images of almost 3000 comic books at last count? These are folks that have figured out how to digitize a specific media and provide a specialized format (the Comic Book Reader format) and provide a specialized reader (cdisplay), which would make an excellent thing to send to a Tablet PC, along with PDFs, Word docs, web sites, 18,000 books from Project Gutenberg, and anything else that you'd like to share between your own computers or those of your friends and colleagues.


In April of 2005, Paul Thurrott mentioned something called "application sharing" that would enable sharing of individual apps via terminal services instead of entire winstations. I don't know if we're actually building such a thing, but I in addition to being able to reach from one computer to another to grab an app, I'd also like to send one.


Wouldn't that make Jack proud?

Monday, August 14, 2006 10:24 AM  (9 Replies)

WPF Security in 14 Points and Some Extra Words

MikeDub has a nice summary to get you started down the road to WPF ClickOnce deployment, both for stand-alone apps and browser-based apps (XBAPs). Enjoy.

Sunday, August 13, 2006 11:41 AM  (0 Replies)

Get 'Em While They're Hot

Even though the 1st printing was just in May of this year, Windows Forms 2.0 Programming just entered the 2nd printing. Thanks for reading!

Sunday, August 13, 2006 8:30 AM  (1 Replies)

We Sold A Copy of ATL Internals!

You said it couldn't be done, but ATL Internals, 2e, has a review! Thanks, W.

Friday, August 11, 2006 1:07 PM  (3 Replies)

The Media Center PC ain't a desktop; it's a server

I've seen some flack lately about how the Windows Media Center Edition-style computers haven't changed how folks consume content. Man, it sure has changed mine. Sure, you can put a MCE box on your desk and watch TV from your chair, but who the hell wants to do that?


A MCE box belongs in a living room or bedroom somewhere or even in a server closet. In fact, while I have my MCE box attached to my bedroom TV, I use it as a media server for music, video, photos and recorded TV shows. My media is available at every PC in my home and at every TV w/ an MCE extender box (I have an XBox on one TV and an XBox 360 on another). This setup allows my media "room" to be my entire house and allows my family room media setup to consist of an HDTV and an XBox 360.


What's not to love about that?

Tuesday, August 08, 2006 1:29 PM  (9 Replies)

3 Degrees of Email Separation

Microsoft is a sea of answers if only you can find the right person to ask. In my experience, I get a lot of those incoming questions, both internally and externally. Often, I don't know the answer, but I can direct the email to someone closer, who will either know the answer or the right person to ask and so on.


Depending on how well a person in this chain is at answering this email, this process can take minutes or days, but it almost always ends up with the person that knows the answer within 3 emails. Often this chain involves an internal mailing list (lots of external questions end up on internal email aliases, insults and all : ), which doesn't necessarily shorten the chain, but it does tend to shorten the response time.


I consider the ability to follow this chain to an answer one of the huge benefits of my industry -- I wish I was able to tap into it in other disciples, e.g. health care, financial, home repair, etc. Likely these chains exist in other areas, too, I just don't know the first link in the chain. I actually tried to establish a financial chain one time, but that just pissed off the guy who was always my first email. : )

Thursday, August 03, 2006 10:57 AM  (1 Replies)

Custom Settings Provider in .NET 2.0

I updated the SDK RegistrySettingsProvider to implement IApplicationSettings and built a sample to demonstrate how to integrate it (or any .NET 2.0 custom settings provider) with the settings designer-generated code. Enjoy.

Sunday, July 30, 2006 7:35 PM  (10 Replies)

Number to String Converter

To capture the work that Doug and I did to make Indigo (WCF) and Avalon (WPF) work together, I tore up our PDC sample application into a set of simpler technology samples. To make it fun for myself, as part of these samples, I built a little library for converting numbers into strings of English words, e.g.



Enjoy.

Sunday, July 30, 2006 2:06 PM  (11 Replies)

On W*F Integration Samples

As you may or may not recall, Doug Purdy and I had some trouble at the last PDC getting Avalon (WPF) and Indigo (WCF) to work together. To save myself from having that trouble again, I came back from the PDC and starting the "WinFX Cross-Pillar SDK Samples Working Group," which is just a fancy name for the PMs in charge of Avalon, Indigo and Workflow samples getting together to make sure that we have a list of simple technology samples showing the three W*F technologies working together.


You can see the results of that work in the .NET 3.0 SDK under the Integration Samples for WinFX Features topic. Right now, there are 9 integration samples and I'm hoping to almost double that by .NET 3.0 RTM. I'd love feedback. Thanks!

Sunday, July 30, 2006 1:34 PM  (5 Replies)

Laura Foy makes on10.net for me

I had my first on 10 experience today (I was following the links to the PhotoSynth stuff) and I have to say, I instantly fell in love with Laura Foy. I know that Erica Wiechers (of The .NET Show and MSDN TV) has a huge geekboy fan base (and it was fun to work with her @ MSDN), but Laura's interviewing style and her personality made me subscribe to her interviewer-specific RSS feed on 10.


In fact, Laura makes me wish I did something besides developer-related stuff. What do I have to do to be interviewed by Laura Foy?!?


P.S. I wanted to title this blog entry "Laura Foy is a major babe," but Laura is a fellow Microsoft employee and that would be inappropriate. Also, the whistling and cat calls would be way out...

Saturday, July 29, 2006 1:22 AM  (14 Replies)

MS Live Labs PhotoSynth: building the photo web

Imagine your vacation photos displayed in 3D and linked together, both around a space and zooming in and out. Now imagine everyone's photos linked together in this way. What you get is PhotoSynth:



Worth checking out.

Saturday, July 29, 2006 12:52 AM  (1 Replies)

Phones are just little PCs and should be treated as such

Folks are having enough issues with their Qtek 8500 phones that they're starting to want to trade them in on IMate Smartphones, which are the same HTC hardware but different software. Issues include (for me):



  • phone not ringing on all incoming phone calls

  • phone not providing notification of pending voicemail

  • heavy bluetooth interference

  • fuzzy pictures

Yesterday, I used Stork's instructions to turn my Qtek into a Smartflip and have not had any of the problems except for the bluetooth interference.


The real problem is that, unlike with PCs, phone hardware manufacturers don't actually support their phones. If I buy a Dell, they'll provide BIOS and driver upgrades. If I buy an Qtek, they send me to the cell provider for a fix who, of course, doesn't have the Qtek 8500 on their list.


With the flexibility of phones these days, they're just like pocket-sized PCs and there's a lot more innovation going on with them then with my PC right now. I used to get excited about my new laptop; now I get excited about my new phone. However, this situation about who you're supposed to buy phones from and get support from is completely messed up and needs to change.

Friday, July 28, 2006 9:30 AM  (9 Replies)

An Embarrassment of WPF Riches

I just realized that Avalon is getting a book treatment unlike any other topic in my memory:



User and GDI had Petzold. Win32 had Rector. MFC had Prosise. COM had Box. Indigo's got no big names I've yet seen, but Avalon gets Anderson, Petzold, Nathan *and* Griffiths?!? It's going to be a bloodbath in the market, but the readers are going to benefit. Why couldn't I have picked a lightweight topic, like, oh, I don't know, ASP.NET 2.0? : )

Sunday, July 23, 2006 2:53 PM  (6 Replies)

Portland Code Camp: Wow!

I have to say, I was very surprised at how much I enjoyed Portland Code Camp yesterday. I had planned on skipping the sessions (except my own), instead monkeying for Rory as my entertainment, but that went out the window when I got there and saw the session list. I very much enjoyed Scott's PowerShell presentation (Tab completion and PowerShell Analyst -- wahoo!), as well as the RoR meta-programming and IronRuby sessions, but easily the best talk I saw was Jeff Berkowitz's Poker Bots for Fun and Profit. The set of legal, ethical, technical and algorithmic issues he covered as awesome. The coolest thing I learned about was the Poker Academy, which is a poker tutorial program that lets me build my own poker bots to test my strategies. Fabulous!


My own session was co-delivered by Chris Tavares (recently of the Patterns and Practices group), and we spent 90 minutes pumping the audience for their feedback about building distributed applications under Windows, including what their scenarios are, what sucks and should be fixed, what's good and should be kept and what solutions they propose. I have to say, it was fun to be on the receiving end of the heat instead of the giving end for the change and to be in a group that hopes to solve such problems (the Connected Systems Division owns Indigo, BizTalk and Workflow). Thanks, attendees, for the great list and for not throwing anything but insults (and so politely, too! : ).


In addition to the free sessions, there was free food, free entertainment, free wireless and free air conditioning. I miss the single-track benefits that you get with the DevCons, but other than that, the Portland Code Camp is now in the very short list of conferences I won't be missing in the future. Thanks to Jason, Rich, Stuart and the rest of the organizers. Highly recommended!

Sunday, July 23, 2006 1:08 PM  (1 Replies)

DVD Wars. Huh. What is it good for?

Here’s the thing I don’t get about the next-gen "DVD Wars." When I moved from VHS to DVD, I got much higher quality output and random access to content. Given that DVDs are already letterbox, what do I get moving to an HD DVD format? Is the quality that much better? Are there other features I get that I’m going to really want? The only feature I wish I had was the ability to easily burn the main content of my DVDs to my computer for random access like I get w/ music today. Will the next-gen formats support that?

Monday, July 17, 2006 12:12 PM  (15 Replies)

I'm on MySpace now

I'm on MySpace. Now what?

Friday, July 14, 2006 10:59 AM  (17 Replies)

Functional Language Summary

I've been hearing a lot about functional programming lately (and the circle of life continues); I found Functional Programming For The Rest of Us to be a nice summary. Here's what I got from it:


Atoms of FP:



  • All "variables" are immutable, often called "symbols"

  • Program state is kept in functions (specifically, arguments passed on the stack to functions), not variables

  • Functions are first class citizens, i.e. functions can be passed as arguments

  • "currying" is a convenience syntax for adapting a function to an alternate function signature

  • "closures" are functions that are allowed mutable state and access to state outside their lexical scope to bridge functional and non-functional languages

Implications:



  • Functions cannot cause side effects ("variables" are immutable)

  • FP is great for unit testing (only have to test outputs against inputs -- don't have to test side effects)

  • FP is great for debugging (no need to worry about external state affecting function results -- results are only based on the input)

  • No need for multi-threaded locks, as state is immutable


    • This makes functional programs automatically parallelizeable

  • Can hot swap new function definitions w/o effecting existing instances

  • Don't need to evaluate a function 'til the results are needed

FP sounds great! Why do we mess around w/ anything else?!?

Tuesday, July 11, 2006 3:36 PM  (10 Replies)

This blog entry cost me $113.70

So, I'm loving my t-mobile cell phone account (I get unlimited HotSpot access at Starbucks and lots of other places, too). However, I just learned that one service I don't have is free text messaging. Normally, that's not a problem because I'm a middle-aged white guy and "texting" is for young kids cheating on tests and looking for sex partners (at least, that's what I get from the news : ).


Anyway, I just got my t-mobile bill and my phone has been receiving text messages to the tune of 54/day for a total of 1137 in the first 21 days. At $0.10/message, that doubled my bill and confused the hell out of me, because I only ever see a text message on my phone when I miss a call from my wife or when my European friends text me, i.e. about 10/month. Where have all of these text messages come from?


Apparently, they come from Exchange using AUTD (Always Up To Date) to notify my phone that new messages are available. I didn't know that's how this worked; I was just happy to get it to work at all. Luckily, this is no longer a problem. AUTD was apparently a Windows Mobile 2003 Second Edition thing that my old Audiovox 5600 used (I must have had free text messaging on my AT&T Wireless account and not noticed how young and hip my phone was).


Luckily, my text message traffic has fallen back to near zero because of my Qtek 8500, which uses "push email." Apparently push email keeps an HTTP session open to Exchange using my unlimited data access instead of using my (very!) limited text message access.


I sure wish there'd been some way of knowing this before the first bill arrived, of course, but it's nice to know my Qtek is actually saving me money (at least, that's what I'll tell the wife : ).

Thursday, July 06, 2006 3:58 PM  (4 Replies)

Struggling with NUnit (2.2)

The one where I get System.IO.FileNotFoundException in NUnit in a bunch of different ways and suggest some possible solutions.

Thursday, July 06, 2006 11:29 AM  (231 Replies)

Superman Returns: Boring

Superman Returns has some cool scenes and Kevin Spacey does a great Lex Luthor, but overall there were far too many soulful looks between Superman and Lois Lane for my taste. It's a matinee at best.

Wednesday, July 05, 2006 4:50 PM  (11 Replies)

A Shared Source Site: CodePlex

"CodePlex functionality, built on Microsoft Visual Studio® 2005 Team Foundation Server, provides source control, issue tracking, discussion forums and RSS feeds in and out of each project so that members can stay up to date on the development issues most important to them. Microsoft Visual Studio Team Foundation Server enables developers to collaboratively develop, share, discuss and consume source code and build software."


Enjoy.

Wednesday, July 05, 2006 4:47 PM  (5 Replies)

When to ship a book is hard to know these days...

Mr. Petzold beat me to the punch on the Windows Forms 2.0 book and he's going to do it again on the RTM Avalon book. However, such a thing is dicey, as Mr. Petzold points out.


It was in researching the Windows Forms 1.0 book when I grew to be scared of finalizing a book before the technology was finalized; that's when they added AllowPartiallyTrustedCallersAttribute and it screwed up the entire No-Touch Deployment story. Toward that end, we didn't ship the WinForms 2.0 book 'til after the .NET 2.0 bits went gold and we won't ship the paper copy of the Avalon 1.0 book 'til then, either (although I understand ORA is going to be shipping early electronic drafts of our work as we do it). I have to sacrifice 2-3 months on the shelves to my competitors, but I get to be less scared of big, last minute changes.


It's a judgment call, though. In this era of books with 12-18 month shelf lives, I can't say Mr. Petzold's not right...

Tuesday, June 27, 2006 12:01 AM  (10 Replies)

Oh La La -- Qtek 8500!


I got my Qtek 8500 today. The bad news was that I got the French version of the manual, but that wasn't so bad, since I wasn't going to read the manual anyway. However, the worse news was that all of the phone menus where in French, too. The nice folks at expansys.com were quick to send me the set of menus to turn English back on, but the instructions they sent where themselves in English, which required me to do a little babelfish work to translate into French menu text, but I managed.


Things I like about my new phone:



  • It's a flip phone that looks almost exactly like the famous RAZR, but runs Windows Mobile 5, allowing me to sync my email, contacts and appointments, play my music, load my own apps, etc. Physically, it feels very nice -- thin, but solid. Even the flat keypad feels nice.

  • I really like the higher res screen (when compared to my Audiovox 5600) and the larger keyboard (handy when you've got sausage fingers like mine).

  • I like the external screen with the clock (a nice round analog one, too), the battery, the email count and three buttons for controlling the audio.

  • The reception is better than my Audiovox.

  • The volume on both my existing bluetooth headset and the included headphones is louder than my Audiovox (which is good for an aging Def Leppard fan...).

  • I love not having to lock the keys on my phone -- just flip it!

Things I don't like about my new phone:



  • The single, proprietary USB port (they call it an "extUSB," whatever the hell that is). It's for power, data and audio, which is handy, but I've got a bunch of mini-USD cables that no longer work, as well no way to connect my fully music-capable phone to the mini-jack in my car. I can get a conversion from extUSB to mini-USB on expansys.com, but so far, I've found no way of connecting the phone to my car.

  • The camera's high-res (1.3M), but doesn't seem to focus very well.

  • I haven't yet found the button or option that allows me to set flight mode. Given the amount of air travel I do, that's kind of a problem. Hopefully the pictures in my French manual will provide a clue...

  • My $19 1GB mini-SD card doesn't fit -- I need *micro*-SD (who knew?!?). Luckily, micro-SD cards are pretty cheap, but it'd be nice to use my existing mini-SD cards, especially since the included storage was just enough to hold a single MP3 file...

  • I don't like the Start menu laid out in a 3x3 grid -- I prefer to have things in a list with numbers by 'em, like in WM 2003SE. As it turns out, the numbers still work, but they're not shown.

It's true that I've listed more things I don't like than that I do, but most of the stuff I don't like is nuisance and the stuff I do like is very, very cool. I don't know about battery life yet or what I'm going to think over time, but right now, I really like this phone. Recommended.

Saturday, June 24, 2006 12:17 AM  (12 Replies)

Free Portland Code Camp, 7/22-23

I've just registered for the Portland Code Camp 2.0, July 22-23. It's a free conference that includes 26 developer sessions (so far), food, a party and the potential to win an XBox 360. And did I mention it was free? I'm not sure about the name (it's being held at the Washington State University in Vancouver, WA), but other than that, what's not to love about a local, free, developer conference?!?


And if you're coming from out of town and need a place to crash, I've got a spare room. Come one, come all! Tell a friend! Register today! It's free!

Thursday, June 22, 2006 6:28 PM  (2 Replies)

My Qtek 8500 should be in my hands tomorrow!

The reviews have been largely positive (but not completely), and I'm very much looking forward to my new QTEK 8500 (aka the Star Trek [STRTrk?]). Apparently I'll be one of the first folks on the west coast to have it, which will probably destroy my book-writing productively over the weekend (I'm supposed to be working on the Avalon RTM book).


Being first with hardware is not generally something I like to do. In general, I purchase laptops and cell phones and not many of either (usually one every 18 months of either). Frankly, I'm a late adopter on hardware 'cuz I like to handle someone else's first (no snide comments, please... : ). However, the experience with my Audiovox 5600 has been so positive and the features of the QTEK 8500 are so overwhelming (on paper) that I just had to get it ASAP. It's really the first Windows Mobile 5 phone I've found compelling.


Stay tuned for a review.

Thursday, June 22, 2006 11:56 AM  (2 Replies)

PM Skill #9: Team Off-site

I've been doing some design work with a small part of my new team for a few months now and we've gotten largely on the same page with each other. However, there were 20-some odd folks that we hadn't done a good job keeping on the same page, so ChrisAn proposed an off-site. I proposed the format:



  • 45-minute slots for each "bucket" of design functionality with the owner of the bucket leading the discussion (my boss, Adam, wanted to make sure that at least half of each talk was *not* lecture from the speaker). Each session was followed with a 15-minute break.

  • 90-minute break-out sessions where each person had to pick their technology bucket and work with the owner to produce a 2-page functional spec and a 2-page technical spec.

If this format sounds like a tweaked DevCon to you, then you know where I got the format.


We started at 8am (1-2 hours before most folks start their day @ MS), so that gave us a little shared adversity to help build the team.


The 45 minute sessions made sure that the presenter had to get to the meat quickly, while the 15 minute breaks allowed folks some downtime to catch their breaths, check their email and chat with their brethren (this was a new team, so "bonding" time was an important element).


The 90 minute break-outs allowed folks to self-select into the bucket that most interested them, validated that we had the right buckets (any bucket w/ too few people would be cut, whereas any bucket w/ too many people would be split), helped establish the base-line for each bucket's future (we used the off-site to kick-start the buckets) and gave the team a seemingly impossible task given the amount of time they had (shared impossible task == more team building).


Like your average DevCon, the "DesignCon" worked pretty well. We generated a ton of issues in each bucket that the owner hadn't yet thought of and gave the entire team a kick-start down the road to shared pov. Also, since we had some folks from other, related teams and from upper management, we made sure we were communicating up and out as well as internally.


Of course, just as no DevCon is perfect, neither was the DesignCon, but if you're looking for a way to get your team pointed in the same direction, I find the DesCon format a good one.

Friday, June 16, 2006 5:21 PM  (2 Replies)

Would anyone be interested in another DevCon?

I'm thinking about doing a DevCon before the end of the year (likely October) in a pleasant environment (likely the Skamania Lodge) on a topic that's *not* XML or Web Services based (we've done that topic to death). The soul of the DevCon will remain the same, i.e. to cut away all the unessential conference baggage and concentrate on why we're spending time at a conference in the first place -- the talks by industry experts and experienced practitioners.


If I organized such an event, would anyone come?

Tuesday, June 13, 2006 8:58 AM  (50 Replies)

"man" for MSDN

If you like man, you'll love MSDN man. Enjoy.

Monday, June 12, 2006 2:02 PM  (2 Replies)

WinFX + .NET 2.0 Renamed .NET 3.0

The WinFX name is no more. Instead, WinFX (.NET 2.0 + W*F)is .NET 3.0. <whew>

Monday, June 12, 2006 11:28 AM  (439 Replies)

Annotate the MSDN Wiki

For a long time, my favorite place to put up code snippets that I could get back to later has been pinvoke.net (like GetTempFileName). However, that was only good for managed/native interop, whereas the MSDN Wiki is for anything in the docs. I don't know what their commitment is to keeping content over time or between versions, but I've got my fingers crossed. Enjoy!

Friday, June 09, 2006 4:20 PM  (6 Replies)

Advanced MSDN Search

MSDN has a new search UI which includes And, Or, Exclude, Group, Exact Phrase and Preference in the query and then narrowing by source or category in the results, e.g. MSDN or MFC Reference. The ability to exclude CE in the search results is worth the price of admission. Check it out!

Friday, June 09, 2006 4:17 PM  (0 Replies)

Avalon Beta 2 Change Notes + Samples

Ian and I have prepared updated samples and change notes for the Avalon book for the move from the Feb CTP to Beta 2. The good news is that the changes are tiny. Enjoy.

Thursday, June 08, 2006 12:56 PM  (0 Replies)

Web Application Project: "The type 'foo' exists in both 'some dll' and 'another dll'"

In using the most excellent Web Application Project support for ASP.NET 2.0 in VS05 from Mr. Guthrie and co, I ran into what was first an intermittent and then a constant problem that actually made it's way onto my live site (it worked on my machine!). The error looked like this against several classes in my app, i.e. when I'd comment out one, I'd get another class that showed the same problem:


Compilation Error


Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0433: The type 'ASP.clientredirector_ascx' exists in both 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\sb2\4d76034e\bec2c8d0\App_Web_clientredirector.ascx.cdcab7d2.zmdrab5k.dll' and 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\sb2\4d76034e\bec2c8d0\App_Web_axhgbqrn.dll'

Source Error:









Line 11: 
Line 12: <!-- client redirector -->
Line 13: <sb:ClientRedirector runat="server" id="ClientRedirector" />
Line 14:
Line 15: <!-- fragment monitor -->


Source File: d:\project\mine\sb2\pageLayout.ascx    Line: 13


I chased this with my ISP a few days ago, but futzing with it made it go away mysteriously. When it came back, it came back with a vengeance and I pulled in every ASP.NET 2.0 resource I could think of to fix it, including sending ScottGu the FTP user name and password to sellsbrothers.com (my site hasn't fit into a reasonable .zip file for a while now : ).


The thing I did that fixed the problem (seemingly consistently), came from Scott himself; I added the batch="false" attribute to my compilation element in my web.config file:


<configuration ...>
  <system.web>
   
<compilation ... batch="false"/>
      ...


Apparently this ends up generating a lot more assemblies than 'batch="true"', but I don't know why that would fix the problem or even what's causing the problem. This never happens in WinForms or Avalon (and, of course, neither of those technologies have issues of their own... : ).


Thanks Scott, Ting-Hao, Simon and David!


Update: Microsoft has updated the Knowledge Base with this issue

Monday, June 05, 2006 12:49 PM  (10 Replies)

I wish I had time for this

Alternate Reality Gaming sounds like fun, but I just don't know where people find the time...

Tuesday, May 30, 2006 5:49 PM  (1 Replies)

WinFX Beta 2

Beta 2 signals the beginning of the final drive towards RTM for WinFX:



Enjoy.

Thursday, May 25, 2006 3:45 PM  (5 Replies)

T-Mobile Smartphone Fun Facts

A coupla weeks ago, the AT&T wireless cell phone reception at my house went through the floor. I called up the nice folks at Cingular and they guaranteed me that my reception would improve if I moved my old AT&T account to Cingular (Cingular owns both, after all). When that didn't work, I went to the mall, signed up for T-Mobile, went to my house and, when the reception was much better, had 'em move my phone number over. Since then, I've been moving my smartphone along with me (I have a QTEK 8500 on order, but my Audiovox 5600 is still the greatest thing to happen to me since my first laptop). Here's what I've found:



  • To get the data working (assuming you've selected that account option from T-Mobile), set up a GPRS connection that connects to the internet and uses "wap.voicestream.com" as the Access Point (no user name, password or DNS addresses). There's no need for a proxy connection, but make sure that your IE connection options use the internet as its network (I mistakenly had it set to WAP at first).

  • To use the phone as a modem for use in connecting to the internet, pair the phone w/ your computer using Bluetooth (make sure to put the phone into discovery mode so that Windows can find it) and then use the new COM port that Windows adds (COM4 on my machine) to set up a dial-up network connection, using "*99#" as the phone number (no user name or password). I get this working when I called T-Mobile and they walked me through the setup, even though the Audiovox isn't a supported phone and the tech support guy had no documentation on one.

  • This isn't phone related, but once you've got a T-Mobile data plan, you should be able to use WiFi from your laptop at a T-Mobile HotSpot by using your 10-digit phone number as the user name and the last 4 digits of your SSN as your password (I haven't tried this yet, but I plan to!).

Theoretically, I should be able to use ActiveSync via Bluetooth, but I haven't figured out how to make that work yet.


So far, I'm loving T-Mobile, not just 'cuz of the rates and the features, but also because they seem to understand that some folks aren't going to want to be stuck with the phones that they sell and they actually help you make them work. T-Mobile's not the biggest network, but apparently that makes 'em try harder. Recommended.

Wednesday, May 24, 2006 11:09 AM  (11 Replies)

Don't want to skew Amazon reviews

While I don't mind being called tacky by one of this generation's best technical writers, I do mind the idea that the folks that would abuse the system would skew the Amazon reviews. While I don't hide the fact that I ask people to post reviews for my book, I've always been proud that I've never asked them what kind of review to post and, when Amazon's system had a hiccup recently, none of my books had any reviews posted by me (unlike 50% of the other books on Amazon).


So, the idea that folks would just post a review having not even read the book was something I never considered (and why you don't want me writing your security subsystem). So, consider this offer rescinded. You can post a review on Amazon or not, good or bad, as you choose.


However, as to the signed copies, I still want you to have those. So, the first 5 people to tell me the 2nd word in the 3nd paragraph of prose on page 444, I'll send you a signed copy. Whether you purchase a copy or just go to the bookstore and look up the word is up to you.

Tuesday, May 23, 2006 11:25 AM  (19 Replies)

Google's 2-day interview process

Wow. Two days of interviews for a contracting position at Google...

Monday, May 22, 2006 5:13 PM  (0 Replies)

Post an Amazon review and you get my royalties

Update: Whoops -- didn't think of the ways to abuse this system. I've updated the offer here.


If you post a legitimate review on Amazon for Windows Forms 2.0 Programming before the 4th of July, 2006, I will personally send you my royalties for that copy of the book ($4.77 -- don't spend it all in one place : ).


You have to put your email into the Amazon review so that I can communicate with you about your address and Sells Brothers, Inc. can send you a check, but good review or bad, my royalties for one copy of the book are yours.


The first five reviewers also get signed copies shipped to their home (I'll get Mike to sign it, too). Again, the email needs to be in the post.

Monday, May 22, 2006 3:50 PM  (16 Replies)

WinForms 2.0 book @ the printer

The one where the brothers Sells and I travel to Ann Arbor, MI to see Windows Forms 2.0 Programming being printed. It's well worth the trip, if you can talk the publisher into arranging it.


Friday, May 19, 2006 7:49 PM  (13 Replies)

A C# Bedtime Story Updated for C# 2.0

Seeing a reference to A C# Bedtime Story as a generic definition for .NET delegates in a recent DDJ article inspired me to post the new and improved version that takes into account C# 2.0's anonymous delegate support. Enjoy.

Friday, May 12, 2006 8:55 PM  (2 Replies)

Code Monkey: The Song

Check out the Code Monkey mp3!

Friday, May 12, 2006 12:24 PM  (0 Replies)

ATL Internals, 2e, available for pre-order

ATL Internals, 2e, this time with ATL 8, is available for pre-order on Amazon.com. For those wondering what the world needs with such a book, I refer you to the preface:



.NET has hit the Windows programmer community like a tornado, tipping over the trailer homes of the ways that we used to do things. It's pretty much swept up the needs of most web applications and service applications, as well of most of the line-of-business applications for which we previously used Visual Basic and MFC.


However, a few stubborn hold-outs in their root cellars will give up their native code only at the end of a gun. These are the folks with years of investment in C++ code who don't trust some new-fangled compiler switches to make their native code "managed." Those folks won't ever move their code, whether there are benefits to be gained or not. This book is partially for them, if they can be talked into moving their ATL 3/Visual C++ 6 projects forward to ATL 8 and Visual Studio 2005.


Another class of developers that inhabit downtown Windows city aren't touched by tornados and barely notice them when they happen. These are the ones shipping applications that have to run fast and well on Windows 95 on up, that don't have the CPU or the memory to run a .NET application or the bandwidth to download the .NET Framework even if they wanted to. These are the ones who also have to squeeze the maximum out of server machines, to take advantage of every resource that's available. These are the ones who don't have the luxury of the CPU, memory or storage resources provided by the clear weather of modern machines needed for garbage collection, just-in-time compilation, or a giant class library filled with things they don't need. These developers value load time, execution speed, and direct access to the platform in rain, sleet, or dark of night. For them, any framework they use must have a strict policy when it comes to zero-overhead for features they don't use, maximum flexibility for customization, and hard-core performance. For these developers, there's ATL 8, the last, best native framework for the Windows platform.

Tuesday, May 09, 2006 8:14 AM  (5 Replies)

There's a Windows "Brat Pack?!?"

Not only does Amazon.com have a traffic ranking for sellsbrothers.com (80,616 -- this number sounds too high to be good : ), but there's a web site review claiming that I'm one of the "Windows Brat Pack." I have to associate with Anthony Michael Hall or Rob Lowe from this bunch (they seem the most geeky), but them who's Don and who's Tim? Definitely, Ted Pattison is Judd Nelson...

Sunday, May 07, 2006 2:53 PM  (5 Replies)

CSD Wants You

Do you want to build the next level of capability and productivity on top of the .NET Framework and WinFX? Do you want to work on the same team as Clemens Szyperski, Tony Williams, Chris Anderson, Don Box, Doug Purdy, Steve Maine, Yasser Shohoud, Keith Short, Savas Parastatidis, Martin Gudgin, me and a host of folks so busy being smart that you don't even know their names? Do you have a long list of where Microsoft is failing folks building distributed application and a driving need to get them fixed? If so, the Connected Systems Division is hiring (we're the same folks that own Indigo, InfoCard, Windows Workflow, Active Directory and BizTalk).


Mail something interesting to csdjobs@microsoft.com to apply today.

Friday, May 05, 2006 2:12 PM  (12 Replies)

Rory on Windows Mobile Dev. @ PADNUG Tonight

Rory's giving a PADNUG talk on Windows Mobile Development in Beaverton, Oregon tonight. Should be tons o' fun.

Wednesday, April 26, 2006 12:59 PM  (7 Replies)

Visual Studio Express Editions Free4Ever

Top-notch tools at rock-bottom prices. Enjoy.

Thursday, April 20, 2006 5:37 PM  (0 Replies)

WinForms 2.0 book just about ready

Mike and I submitted our last round of comments to the WinForms 2.0 book last night. The way it works is, after we submit the "final" manuscript, the copy editor has his/her way with it. Then Mike read all 1300 pages, making sure that the copy editor didn't change the meaning of anything. After that, the publisher moves everything from Word to Quark so that they have the control they need to produce photo-ready copy for the printer and sends us a set of PDFs.


With the PDFs in hand, we both read the ~1000 pages again (the move to Quark puts in the final styles), looking for things that got messed up during the move between software packages or new things that we notice. Theoretically, we're only checking for formatting, but I always take this opportunity to read the entire book all the way through with fresh eyes (which is why I made Mike do the copy edits -- so I had some time away from the book to get fresh again). That yielded about 50 pages of comments for the publisher to apply, including dropping about 5 pages of content that didn't add enough value to be worth the space.


And then the iteration begins. We submitted 50 pages of comments on round 1, they provide round 2. We submitted 10 pages of comments on round 2, they provide round 3. Last night, we submitted about 4 comments, none of which would ever be noticed if they weren't submitted. I asked for a round 4 (just 'cuz I'm anal), but for all intents and purposes, we're done. And how do we party animals plan to celebrate? We're taking 90 minutes for lunch. Off campus! : )


By the time all is said and done, not counting the front mater or the index, chapters 1-19 and appendices A-F will be 960 pages. It was about 1300, but we cut and we tightened up the styles to keep it to 3 digits while still covering roughly twice the technology (WinForms 2.0 is about twice as full-featured as WinForms 1.x). We were careful about not cutting anything useful, but we were ruthless about cutting stuff that didn't meet the bar. Hopefully you'll like the results.


Windows Forms 2.0 Programming is supposed to be printed the first week of May, so you should order yours today!

Tuesday, April 18, 2006 10:07 AM  (11 Replies)

Tell me about your troubles and woes configuring, deploying and maintaining distributed .NET apps

Believe it or not, Microsoft is always trying to improve its products and to do so, I find we do our best work when we actually ask our potential customers what they think.


In this case, I’d like to know what “pain points” you experience when configuring, deploying and maintaining distributed .NET applications. That can be any kind of app, whether it’s a client-side app that phones home for code or data updates or whether it’s a fully distributed grid or anything in between. Please be as specific as possible and, if you’d like one of our courteous technical people to follow-up, make sure to include contact info.


Use this as an opportunity to vent – don’t hold back. Remember: the life you save may be your own…

Wednesday, March 29, 2006 11:27 AM  (61 Replies)

Gengis for .NET 2.0

Genghis has been updated for .NET 2.0 and is available from the Genghis workspace. Enjoy.


Update: The following controls have been added to Genghis in the .NET 2.0 version:


  • Dynamic Custom Button Control

  • Data Interchange List Boxes

  • File List Control

  • Folder List Control

  • Multi-Direction Progress bar

  • Help Popup Control

  • IP Address Control

  • PictureBox Button Control

  • TimeOut MessageBox Control

  • Calendar Combo


Wednesday, March 29, 2006 6:59 AM  (8 Replies)

I'm with Scott -- I Love Monad

I fell in love w/ the potential of monad a while ago w/ Jeffrey Snover's original Channel9 video, but I was too lazy to download it onto all of my machines. However, after seeing Jeffrey's talk at TechDays 2006 in Switzerland (and remembering that monad is installed by default w/ the WinFX SDK, so it was already on all my machines), I took the dive (starting with kiping Jeffrey's personal copy of "Monad," from ORA, Andy Oakley's most excellent monad intro) and I've been doing it pretty much non-stop on the train and on the plane all the way home. Like Scott, I'm loving it.


I've built several scripts, including start-process (to act like cmd.exe's "start" command -- invoke-item doesn't work on URLs), find-file, find-filebytext, find-dir and format-notepad. So far, no luck on format-clipboard, i.e. dropping the results of an operation into the clipboard, but I'm having a blast trying.


Monad is the command line I've missed so much from my ex-life under Unix. Give it a try! You'll love it.

Sunday, March 26, 2006 1:52 PM  (4 Replies)

Greetings from Switzerland

Hello from the fabulous Victoria-Jungrau Hotel in Interlaken, Switzerland, where Mel and I have just landed after three days in a much dinkier hotel in Rome (and although it was just a block away from the Vatican, I never ran into the pope at any of the local eateries or pubs...). I tried to post from the coin-operated Unix machine in our hotel basement last night, but the browser didn't like the POST involved in adding new content to my site (or maybe it was the alt-shift-left knee to get the @ sign to appear on the Italian keyboard...).


This hotel room is nicer than our house, as evidenced by the fact that Mel made me take my jacket off the bed so that she could get “pristine” shots (including from an elevated position in the bathroom). They always treat us so well in Switzerland. Highly recommended.


This is my first real connected experience since boarding the plane Sunday morning (I don't care how cool Outlook Web Access is -- it ain't nearly so cool as the Windows version), although I was able to get my cell phone to download my emails. I can't image what that bill will be like...

Wednesday, March 22, 2006 10:56 AM  (7 Replies)

I just watched my son learn to fear the computer

When kids are young, they have no fear of computers or anything else. My eldest, when he was 2.5, knew how to detect what OS he was running (I dual booted Win2K and Win95 at the time), remember which OS his games needed, reboot, choose the non-default OS from the boot menu and start his app like it was the most natural thing in the world. Even though he couldn't read, he learned all of the functionality of the app by choosing all of the menu items and pressing all of the toolbar icons just to see what they did. He had no fear.


Tonight, my youngest was working in Word, writing a paper that's due tomorrow (of course). After he was finished digging through the thesaurus on the right-hand side, he wanted to close that part of the window, but accidental pressed the X to close the document he was working on (which, of course, he hadn't saved). When he was asked if he was sure, he thought he was being asked if he was sure he wanted to close the thesaurus, so he pressed "Yes."


The moment his document disappeared is when he learned to fear the power of the computer to throw away his work.


What did he do wrong? How do I explain it to him? What did we do wrong as an industry to teach my son to fear a tool meant to help?

Thursday, March 16, 2006 8:36 PM  (34 Replies)

Ninja's Need Love

I love the internet. Where else would you see a video of a ninja answering letters about love?

Wednesday, March 15, 2006 2:23 PM  (2 Replies)

WPF Book Samples and Change Notes for Feb CTP

Ian and I have updated the WPF book samples and provided change notes to match the Feb '06 CTP of WinFX. It's nice that the changes are getting increasingly small. Enjoy.

Saturday, March 11, 2006 5:29 PM  (1 Replies)

My $366 Vista PC

This morning, I read about a $159 computer from a review on the PC Magazine site:



I called my local Fry's, and while they were no longer have the $159 sale (apparently "quantities are limited"), they would be willing to sell me one for $171. While I was there, I got a 1GB memory upgrade and a 256MB ATI graphics card. Here's the equipment I went home with:



  • Fry's Genuine Quality 3131 PC: $170.99


    • 1.67GHz CPU

    • 128MB of RAM

    • 40GB HD

    • 10/100 integrated Ethernet

    • 56KB modem card

    • 52X CD-ROM

    • Stereo speakers

    • Keyboard + Mouse (including roller ball)

  • ATI Radeon 9550, AGP 8x/4x, 256MB DDR RAM: $94.99

  • 1GB RAM SIMM(for a total of 1.1GB of RAM): $99.99

I then added an LCD panel and a DVD drive I had laying around. Total cost $365.97.


When I got the PC, it came pre-installed with Lindows, the Linux distro meant to look and act like Windows. And I gotta say, it wasn't too bad. Then, because they ship a free CD that runs directly w/o an install, I plugged in Ubuntu, another popular client-side Linux distro which was also surprisingly easy to use. Neither was as familiar as Windows XP, of course, but they were both a lot easier to use then the last time I ran Linux.


At 12:04am, I started the Vista Feb '06 CTP installation. At 12:44am, I was running Vista, it having recognized all of hardware (except the sound device) from my $366 PC, including enabling those cool "glass" effects and the nifty animations, integrated search and all the neat things you've read about in the Vista reviews.


I know I work for "the man," but even so, I'm seriously impressed. The install was fast and seamless. The performance is way better than I thought it would be. And the little UI tricks are fabulous. I can't do any media stuff 'cuz my audio device wasn't recognized, but it was cool when I tried to play video and a DVD, that the Vista Media Center UI came up (my complete home entertainment needs are served with a coupla TVs, a Media Center PC and an XBox).


I know, I know, I got the OS for free, but come on! It's still beta and it runs great on my cheapo PC! I don't know what Vista's going to go for, but I bet the whole she-bang (including LCD panel and DVD drive) could be had for ~$500 when Vista ships. Plus, I've only been playing with it for about an hour, but I already don't want to go back to my XP boxes...


P.S. This post was composed and posted from "visto," my new Vista PC.

Saturday, March 11, 2006 2:15 AM  (23 Replies)

Zombie MMORPG

I love this idea!



"Exanimus is an online massively multiplayer game created in a world where the dead live and roam the earth eating the flesh of the living. While most of the world is dead, there are small pockets of survivors that exist in barricaded cities across the globe."


You guy will kill me before I change, right?

Friday, March 10, 2006 11:17 AM  (3 Replies)

I'm *loving* the new live.com images search

Live.com has a new image search which does progressive showing of images, scaling of the group and individual photos in very cool ways, but the killer feature is when you surf to the page from whence the image comes, the image is shown in full size hovering above the page. Very slick. My only complaint is that there seems to be no way to do an image search w/o first doing a normal search and then pressing the "Images" button. Still, I've switched from a9.com and google.com image search.

Thursday, March 09, 2006 8:20 AM  (1 Replies)

ClickOnce + FireFox

If you're having trouble with ClickOnce while using FireFox as your default browser, then this post is for you. Thanks, Saurabh!

Tuesday, March 07, 2006 5:20 PM  (0 Replies)

Fabulous Half-Life 2 Comic

Here's a tip -- if you've got a deadline, don't wander over to the Half-Life 2 comic "Concerned." I'm a *huge* Half-Life and Half-Life 2 fan, so when I heard about it, I went right over and now that's two hours of my life I'll never get back (but were oh so pleasantly spent) reading all 120 comic strips front to back. Since I've been spending my evenings and weekends playing Half-Life 2 again (why oh why aren't there any more good games?!?), all of the stuff in these comics is fresh in my mind. Plus, I don't mean "comic inspired by Half-Life 2;" the guy actually posing characters and objects from the game using a Half-Life 2 mod and builds his comics out of the screen shots, adding hilarious prose. It's like if Rory built his comics from "Stick Figure World 3D" (coming soon to XBox 360). Very highly recommended.

Friday, March 03, 2006 5:32 PM  (4 Replies)

Hello from ASP.NET 2.0

I ported sellsbrothers.com to ASP.NET 2.0 a while ago, but I wasn't happy with the experience, so I didn't pull the trigger on moving it to a production environment. I'm glad I waited. I ported the site again last night using the VS05 Web Application Project preview and it worked a treat. Recommended.

Sunday, February 26, 2006 4:33 PM  (5 Replies)

testing

1.2.3...

Saturday, February 25, 2006 10:59 PM  (3 Replies)

PM Skill #9: Learn From The Masters

Of course, when you're learning to do something, whatever it is, you should check out how a lot of different folks do it. For example, the author of The Game learned to be a PUA from a variety of sources. One PUA guru of PM love is Brad Abrams and he regularly spills his guts onto his blog (plus, you've got to love his numbering scheme...):



Enjoy!

Saturday, February 25, 2006 7:28 PM  (2 Replies)

PM Skill #8: Give Credit Freely

Engineers are people, too, and appreciate pats on the back as much as anyone. In fact, many of us are so socially needy that we're willing to trade "attaboys" for money (and hence the fuel that drives the OSS community).


The beauty: praise is cheap. Blocks of plastic, plaques, bowling night morale events, etc, all cost money and can be the cause of derision as often as pride. On the other hand, sincere praise freely given doesn't cost a thing, but it's often much more appreciated.


So why doesn't praise happen more often? I think one reason is because we're engineers, so we're trained to focus on where our work falls short, often completely ignoring when it lives up to expectations. Also, sadly, it's not uncommon for folks to want to take credit for themselves . However, as PMs, we have to remember that just because we give the presentation or write the status email doesn't mean that we did the work. We need to be explicit about giving credit.


So, the next time you're giving a talk, don't say "And this feature does ..." say "This feature, which Pete implemented, does this..." When you're writing that status email, don't say "We implemented feature XXX this week...," say "Carol and Joe implemented feature XXX this week..." As soon as you do this, Pete, Carol and Joe know that you appreciate their work and that whoever you're communicating with knows that they did good things. Appreciated team members are happy team members.


So, does that mean you should praise things you don't necessarily appreciate, just to keep your team motivated? Absolutely not. As soon as the praise sounds empty, you've done more harm than saying nothing at all. Definitely look for opportunities to give credit, but don't make stuff up that you don't believe.


But what do you do to get praise for your own work if you're busy doing all of this praising of your team mates? Nothing. Praise from yourself is called "bragging" and it makes you look stupid (I know this because I struggle w/ this constantly). Give your praise freely and let others do the same. If you're effective, people will say good things and that'll be enough.

Friday, February 24, 2006 3:20 PM  (9 Replies)

Feb06 CTP of WinFX

The February '06 WinFX CTP cometh:



Enjoy!

Wednesday, February 22, 2006 9:52 AM  (1 Replies)

A Reviewing Trick I Learned A Long Time Ago

I learned this way of reviewing artifacts from Cal Caldwell, a friend of mine from my instructor days. The technique is for doing code reviews, but I'm going to be using it later this week for some design docs. Anybody who recognizes this technique can chime in with what it's called:




  • Every reviewer gets a different "hat," i.e. a POV that they adopt when reviewing, e.g. looking for coding guidelines, looking for readability, looking at a feature from an architecture pov, looking at it from a particular customer pov, etc. Anyone can have feedback on anything, but the idea is that with different folks wearing different hats, you get a greater coverage.


  • Every reviewer brings review comments to the meeting, i.e. you reviewer before hand and only report at the meeting.


  • Every reviewer must start with something nice! Too often, engineers focus on the negative. Saying nice cushions the blow and reinforces the good things so that they don't get cut.


  • Each piece of feedback will be logged (hopefully by the person that provides it) and spoken to the reviewee, but will not be argued with. If a reviewee disagrees, they keep it to themselves, asking only clarification questions to make sure that they understand the feedback. What feedback is applied it up to the reviewee and any follow up arguments happen offline.

That's it. The best code reviews I've every participated in used this technique and I can recommend it highly for that. On Monday, we're going to use it to get through a large number of design docs, so I'll let you know how that goes.

Wednesday, February 15, 2006 4:50 PM  (10 Replies)

Scrum is very focusing

We started using scrum in my group this week and I'm already finding myself pushing aside work that I would normally sign up for in other groups. Scrum gives you to choice of being able to say "I did what I said I was going to do yesterday" or "I didn't." I want to always be able to say the former or have a good reason why not. Is "I was working with this other group" a good reason when the rest of your team is focused 100% on the thing? This is going to play hell with MS culture, but in a good way, imo.

Wednesday, February 15, 2006 10:04 AM  (5 Replies)

Multi-Touch Interaction Research

Wow. I wonder how many years that existence of the mouse has set us back because it delayed us from using this.

Friday, February 10, 2006 1:03 PM  (6 Replies)

My Favorite Wiki: pinvoke.net

I guess wikipedia is cool, but the wiki that provides a vital service in my life is pinvoke.net, which provides an enormous, user-contributed list of Win32 API mappings for .NET. I find it useful not just because folks are contributing tons of stuff I use, but also because I find it a wonderful place to drop code for my own later use, e.g.



This is the closest thing I've seen to a working code repository that is just as easy to contribute to as it is to use. Highly recommended.


P.S. I think this kind of functionality should be built into the SDK docs. I'll ask 'em.

Friday, February 10, 2006 8:58 AM  (2 Replies)

Network bandwidth usage monitor?

Sometimes, for no reason I can discern, the network bandwidth on various computers in my house goes south. What I'd love is a tool that shows me how much traffic is going across my network, where it's going and where it's from, i.e. from the internet, from a machine in my house, etc. Ideally, it'd also show me the ports and even the processes on each machine that are producing/consuming the data. Does such a tool exist?

Wednesday, February 08, 2006 10:35 AM  (31 Replies)

PM Skill #7: Use That Meeting Time!

It's very easy, as the PM, to not want to waste team time in a meeting, letting folks go when there's still 30 minutes left. In fact, lots of folks will praise you for your short meetings. That's fine if all of the work for that meeting has been done, e.g. everyone's reported their status, all of the open questions have been decided, etc.


However, it's often the case that in these meetings, other issues will come up to be discussed in future meetings to be scheduled at another time. Don't let your concern for your team mates' free time tempt you to let 'em go! It's hard enough to get the folks you need together in a room. Once you've got 'em there, use 'em.


For example, if you've got the team together for weekly status that's scheduled for 60 minutes, it often only takes 30 minutes. In that 30 minutes, you may decide that a subset of the team needs to get together for an hour design discussion on whether to spinning text boxes to your next software project. As a dutiful PM (aka "mom"), you'll often find yourself saying, "Sure -- I'll set that up." Then it's your job to find an hour on everyone's calendar while that issue remains open and the project drags on.


Don't do it! Instead, peel off the folks in the status meeting that need to be in the "hour design discussion" and have the meeting right then and there. You've already scheduled the weekly status for 60 minutes, so you know those folks are free and just dying to get back to reading email in piece in their office -- put 'em to work instead! Who the hell knows how long a design discussion is going to take anyway? It's just as likely to go under an hour as over, so you might be able to wrap up the issue right then and there, skipping the need for another meeting altogether. Believe me, your team mates will thank you for that!

Friday, February 03, 2006 4:59 PM  (2 Replies)

Japanese version of Avalon book

I thought someone might be interested in the Japanese version of our WPF book. Personally, I love the cover.

Tuesday, January 31, 2006 5:29 PM  (1 Replies)

Pre-order "Windows Forms 2.0 Programming"

I just noticed that "Windows Forms 2.0 Programming," by Michael Weinhardt and Chris Sells, is available for pre-order. I've had a lot of requests for info on this book, so now folks can watch this space. Mike and I have finished the copy edit rounds, but we still haven't seen the final PDFs, so it's still going to be awhile (hopefully no later than early April).

Tuesday, January 31, 2006 2:50 PM  (2 Replies)

IE7 Beta 2 worth the download

I've been using IE7 for the last week or so and it's definitely worth the download. Just Ctrl+/Ctrl- itself is worth the upgrade, imo...

Tuesday, January 31, 2006 11:00 AM  (10 Replies)

IT Crowd: Yesterday's Jam

Why is British comedy so much funnier than ours? Check out Yesterday's Jam.

Sunday, January 29, 2006 10:06 AM  (11 Replies)

Calling a Remote Index Server from .NET

I was building some code to access Index Server's results via .NET and I got this:


// Catalog specified in connection string
string query = "select Path from Scope() where FREETEXT('foo')";
using( OleDbConnection conn = new OleDbConnection("Provider=MSIDXS.1;Data Source=MyCatalog") ) {
  conn.Open();
  OleDbDataAdapter cmd = new OleDbDataAdapter(query, conn);
  DataSet ds = new DataSet();
  cmd.Fill(ds, "SearchResults");
  DataTable table = ds.Tables[0];
  ds.Tables.Remove(table);
  return table;
}


This came from a co