You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Wednesday, Feb 22, 2006, 9:52 AM in .NET
Feb06 CTP of WinFX
The February '06 WinFX CTP cometh:
- WinFX RC February CTP Readme
- WinFX Runtime Components
- Windows SDK
- Visual Studio Community Technology Preview - Development Tools for WinFX® (aka Fidalgo)
- VS Extensions for WorkFlow
- Ed's Big List of WCF Breaking Changes
- Karsten's Big List of WPF Breaking Changes
Enjoy!
Wednesday, Feb 15, 2006, 4:50 PM in The Spout
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, Feb 15, 2006, 10:04 AM in The Spout
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.
Friday, Feb 10, 2006, 1:03 PM in The Spout
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, Feb 10, 2006, 8:58 AM in The Spout
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.
Wednesday, Feb 8, 2006, 10:35 AM in Tools
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?
Friday, Feb 3, 2006, 4:59 PM in The Spout
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!
Tuesday, Jan 31, 2006, 5:29 PM in The Spout
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, Jan 31, 2006, 2:50 PM in The Spout
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, Jan 31, 2006, 11:00 AM in The Spout
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...
Sunday, Jan 29, 2006, 10:06 AM in Fun
IT Crowd: Yesterday's Jam
Why is British comedy so much funnier than ours? Check out Yesterday's Jam.
Thursday, Jan 26, 2006, 5:33 PM in Tools
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 combo of stuff I found on the net and my own experimenting. However, I had to get an MS employee who know IS (thanks Chad Ray!) to figure out how to access IS remotely, which I was finally able to get working thusly:
// Server and catalog specified in query string, not connection string
string query = "select Path from MyServer.MyCatalog..Scope() where FREETEXT('foo')";
using( OleDbConnection conn = new OleDbConnection("Provider=MSIDXS.1") ) {
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;
}
Also, if the server or catalog name has anything "weird" in it, e.g. those wacky dashes, you're supposed to wrap it in double quotes. My experimenting showed that wrapping any server or catalog name in double quotes worked just fine, e.g.
string query = "select Path from \"MyServer\".\"MyCatalog\"..Scope() where FREETEXT('foo')";
However, if the server name is "localhost" or "127.0.0.1", IS doesn't like it, which meant that I had to check for those server names and drop the ones that used the loopback adapter (although using the machine name of the local machine worked just fine), e.g.
static bool IsLocalHost(string server) {
return string.IsNullOrEmpty(server) || (string.Compare(server, "localhost", true) == 0) || (string.Compare(server, "127.0.0.1") == 0);
}
string GetPlainTextQueryString(string text, string columns) {
// IS doesn't like "localhost"
if( IsLocalHost(_server) ) {
return string.Format("select {0} from \"{1}\"..Scope() where FREETEXT('{2}')", columns, _catalog, text);
}
else {
return string.Format("select {0} from \"{1}\".\"{2}\"..Scope() where FREETEXT('{3}')", columns, _server, _catalog, text);
}
}
I'm only posting this 'cuz I couldn't find it on the net and I want to be able to find it again later. : )
Wednesday, Jan 25, 2006, 1:00 PM in The Spout
Imperative vs. Declarative
Savas showed me this great example from a book he's reading. Consider this:
F = m * v
Using an imperative interpretation, this is a expression that, when evaluated, multiplies m and v, putting the result into F.
Using a declarative interpretation, this is an equation and is completely equivalent to the following:
m = F / v
The imperative interpretation allows me to execute. The declarative interpretation allows execution as well as addition reasoning.
Sunday, Jan 22, 2006, 10:10 AM in The Spout
Netflix for Books?
I know, I know, "I hate books." Still, books are where most of the content I love is, so I live with 'em. However, it'd be nicer if there were a Netflix for books, like there is for DVDs and games. I think the public library should be become such a thing and I'd happily pay $15/month for mail delivery and return.
Thursday, Jan 19, 2006, 4:58 PM in Fun
Looking for an Xbox 360
I got my first hands on Xbox 360 demo today and I want one! Unfortunately, MS employees aren't treated specially, i.e. there isn't a big warehouse full of 360s for us at the MS Store. However, there is an internal mailing list filled with rapid pre and post-360 purchasers that showed me several resources to use to find 360s:
- 360 Tracker, a WinForms app to find stores in my area with 360s in stock. Will alert me via email and my cell phone as well as on my computer screen. It's running now.
- NotifyWire.com, a web site that will filter for online sales in my price range and notify me via email and SMS. I've created my account.
- xbox360tracker.com, a web site that shows online sales and their in-stock status. Available as an RSS feed, so that's a reason to run one again! : )
I don't want any fancy bundles and I don't want to purchase online -- I want the premium bundle and I want to walk out of the store with it. Is that so much to ask?