Wednesday, November 28, 2007

Readability, Accuracy, and Maintainability of Chained Calls

The ability to chain together a bunch of calls is a handy thing, but it can easily lead to a number of issues in your code.

Readability's an awfully critical thing when you're writing code.  How many times have you read or heard that in almost every case you're writing code not for the compiler to read but for other developers, either yourself a few days/months/years down the road, or some other guy who has to work with your code at some point.

I'm working on a bug in some code which looks like the example below.  It's meant to return a stream of a file on the filesystem.  That file is pointed to by the Path property of a biz object we use, instantiated as contentFile in this example below.

   65 return new MemoryStream(File.ReadAllBytes(ConfigurationManager.AppSettings.Get("DataDir") + contentFile.Path));

 

A couple things hit my brain as I'm working on this.

First, the line is nearly 140 characters long with a bunch of chained calls.  That's hard to read simply because it extends well past most windows.  (At least if you're using multiple monitors and splitting windows.)  I much prefer a width of around 80 chars and won't ever go past 100.

Secondly, I much prefer having return statements returning something you've already built elsewhere.  To me that's much clearer.  Refactored and split up, the code looks like:

   65 MemoryStream contentFileStream =

   66     new MemoryStream(File.ReadAllBytes(

   67                         ConfigurationManager.AppSettings.Get("DataDir") +

   68                         contentFile.Path));

   69 return contentFileStream;

The next item is to clean up the chaining a bit.  It takes way too many brain cycles to break all these calls on lines 66 to 68 into their composite pieces.  The semantics of what you're trying to accomplish easily gets lost in all those chained calls.  A quick refactor turns this into 

   65 string filepath = ConfigurationManager.AppSettings.Get("DataDir") +

   66                   contentFile.Path;

   67 MemoryStream contentFileStream =

   68     new MemoryStream(File.ReadAllBytes(filepath));

   69 return contentFileStream;

Better, but there's still a problem in that we're using string concatenation for the construction of the filepath.  Evil since we shouldn't rely that the DataDir app setting value was properly terminated with the correct directory separator.  The lovely Path.Combine() method can help out here because it will smash together path and deal with the separators in the correct fashion regardless of whether they're there already -- and it's handled with the correct separators for whatever platform you're writing on, too.  Let's change that a bit:

   65 string filepath =

   66     Path.Combine(ConfigurationManager.AppSettings.Get("TKOPublishedFilesDir"),

   67                 contentFile.Path);

There's also a glaring error in that we're not using any guard to check whether or not the file actually exists on the system!  Let's fix that with a quick check:

   68 if (! File.Exists(filepath) )

   69 {

   70     //handle error

   71 }

Obviously you need real stuff instead of "//handle error", OK?   Also, I'll often build my test variable before the if statement but this File.Exists() is short enough that it's very readable as is.

Right now the tweaked method looks like this:

   61 public Stream GetFile(long id)

   62 {

   63     ContentFile contentFile =

   64         PolicyInjection.Create<EntityFactory<ContentFile>>().Find(id);

   65     string filepath =

   66         Path.Combine(ConfigurationManager.AppSettings.Get("DataDir"),

   67                     contentFile.Path);

   68     if (! File.Exists(filepath) )

   69     {

   70         //handle error

   71     }

   72 

   73     MemoryStream contentFileStream =

   74         new MemoryStream(File.ReadAllBytes(filepath));

   75     return contentFileStream;

   76 }

There's a bit of other cleanup which should happen here, such as wrapping the creation of the memory stream in some guards to catch exceptions, etc. I also realized that I don't like the name I gave the memory stream object, but I can will refactor that after I post this.

The main point of my post is that call chaining, statement chaining, or whatever the heck you want to call it, is a powerful thing, but it's something that easily morphs into something that leads your code into a place where it's difficult to read, hard to maintain, and susceptible to errors.

Use it with care.

UPDATE:  In the comments Troy points out that this is actually nesting, not chaining.  He's absolutely correct.  I wrote this post and the entire time was thinking "That's not the right word."  Thanks for the good feedback, Troy.

No Fluff Just Stuff Podcasts

The folks at the No Fluff Just Stuff conference (authors and editors of the great book No Fluff, Just Stuff) have a nice series of podcasts on various topics that have been presented at their shows.  Some of the podcasts seem little more than marketing slicks to whet your appetite for signing up for the conference, but all have at least some useful bits in them.

Neal Ford's talk on Metric Driven Agile Development was one particular cast I wish would have gotten more into details.  Venkat Subramaniam's Open Source Agile Tools is another short one, but has some goodness on specific tools -- the specific tools he talks about are Java tools, but a number have .NET equivalents.

The series is available via the site or iTunes subscriptions.  They're nice fillers for my commute and well worth the download.

Wednesday, November 21, 2007

A Great Addition To The Team

Steve Harman's joined our AppDev team at Quick Solutions, the great place I drive 2.5 hours back and forth to work at. Steve is a wicked smart guy, passionate about all things techie, and a great proponent of open source tools.

Matt and I were joking that the AppDev team is quickly becoming filled up with folks that are a lot smarter than us -- and that's a Good Thing. It's great to be a part of a team where I can turn to any number of resources for answers on the vast number of things I don't know.

Quick is always looking for folks to add to our team, either on the staffing side or on the AppDev team. Drop me a note via the contact link on my sidebar if you're interested in talking with us.

(And our "staffing side" is a much, much different business model than other companies. We actually back up promises of mentoring and training, and the employee owner environment of Quick is unlike any other place I've worked.)

I'm really, REALLY looking forward to working with Steve, and not just because he can tidy up all the crappy code I've written.

Update: Fixed busted URLs. Something seems to have changed at Blogspot and now I'm forced to qualify URLs with "http://" instead of just the site. Feh.

Monday, November 19, 2007

Fixing TFS Report Problems

I've had a problem with TFS reports where the Active (Cumulative) number of bugs had fallen to zero for a week or so.  While I like that number, it wasn't true -- we had bugs > zero.

Turns out the warehouse update wasn't working, and errors were pointing to issues with a bunch of zero byte files in the working directory.  Ugh.  Thankfully Russell Seymour had the answer on how to fix the problem.

Now the report shows a true number of bugs, but at least the progress I'm showing is honest...

Sunday, November 18, 2007

CodeMash Keynoter: Scott Hanselman

We have scored SOOOOO big time this year!  Scott Hanselman will be coming to CodeMash for a keynote!

Not to imply that ScottGu, Neal Ford, and Bruce Eckel weren’t big folks for last year’s keynotes, I’m just excited because Scott’s “never found a geek tool I didn’t want to check out” and “Open Source software is cool and fills solid business needs” philosophy is right along my line of thinking.

Scott’s keynote, and the other two great names we’re working on, will flesh out what is an amazing lineup of breakout sessions for v2008.  I got a little crazy pushing our content/speakers staff this year and we ended up with six or seven concurrent sessions going for a total of 42 breakouts.  (Of course, I’m the guy who, with his co-author, completely lost control when writing a book and covered 176 tools in a book that weighs in at over 1200 pages…)

What?  You still haven’t registered for CodeMash?  Get thee to the registry and fill it out!

CodeMash v2.0.0.8.  It’s da bomb.

Wednesday, November 14, 2007

Dayton DevGroup Meeting Tonight!

Justin and I are teaming up for a presentation on all things testing tonight at the Dayton .NET Developers Group.  I’m hitting a quick overview of unit testing, Justin will hit mocking in depth (mock objects, not heaping scorn on me), then I’ll wrap up with a quick bit on Fitnesse.

Stop by for some good content, free pizza and soda, and general visiting with a lot of smart, passionate folks.  Meetings are held at Max Training’s Dayton/Miamisburg facility and start at 6pm.

It’s also election night, and the finale of our membership drive.  Bring a friend and get an extra ticket for the raffle.  You get as many tickets as friends you bring with!  If we hit 40 folks at the meeting tonight then we’ll raffle off an XBox!

Tuesday, November 13, 2007

Book Review: Visual Studio Team Systems: Better Software Development for Agile Teams

Long overdue with a review of this book…

Visual Studio Team System: Better Software Development for Agile Teams (Microsoft .Net Development) by Will Stott and James Newkirk.  ISBN 0321418506, published by Addison Wesley

This book covers a wide range of cool things in VSTS wrapped up in a solid introduction to and roadmap through agile practices.  Read the book and you’ll get great guidance to working with agile planning, test driven development, refactoring, agile modeling, and a number of other topics.

I have two small gripes with the book.  First is that it includes the seemingly mandatory, maddening “meet the development team and walk through each day in the project with them” storyline.  This book does no better than any of the other weak attempts at the novelization of a working team.  Leave that stuff off for novellas and focus on the technical aspects instead.  My second gripe is the book’s organization.  Planning is way back in section 8, modelling’s in 6, etc.  It seems a bit disjointed.

Those gripes aside, the content in the book is just great.  The walk-through of test driven development is solid, and the emphasis on having an environment and code base that can rapidly change to requirements is very nice.

The technical side relating to Team Systems is also solid. The guidance on using source control is well-written, and the section on working with team build is as good as it can be (I’m NOT a fan of team build).  The section on using and working with the process frameworks are solid, although I wished they’d covered the process editor add on.

I’m also very happy to see that the Framework for Integrated Testing (FIT) was included — I’ve been a long-time proponent of FIT and love seeing it in more books.

Overall this is a very solid book.  I like their approach to discussing agile, and I like their tie-ins to VSTS/TFS.  They gloss over some of the things I don’t like about VSTS/TFS, but hey, those are more my issues, not theirs.

This book is a good addition to your bookshelf if you’re looking to do agile in the VSTS/TFS world.

Book Review: Implementation Patterns

Implementation Patterns by Kent Beck.  Published by Addison Wesley, ISBN 0321413091.

This book is a wonderful, concise book on writing code that others can understand.  I love Beck’s premise in his intro: “Actually, this book is based on a rather fragile premise: that good code matters.  I have seen too much ugly code make too much money…”  A pretty amazing blurb, but Beck goes on throughout the book to prove why you should care about good code and how you can do a better job of writing non-ugly code that others can more easily grok out.

The book’s chapters run a short gamut of great topics from programming theory to frameworks.  One of the more intestesting bits I found was his discussion on symmetry, the idea that methods and classes should be well balanced.  Methods such as “Add()” should be balanced by “Remove()”, and that ideas in sections of code should be expressed in the same style, i.e.

void process() {

input();

count++;

output();

}

 where input() and output() are intentions while count++ is an implementation.  Esoteric, but the flow is much cleaner and clearer when you read the snippet below instead.

void process() {

input();

tally();

output();

}

I like the discussion in this book is on good naming styles, something I’m passionate about — and am still not happy with my own practices in that area.  There’s also great text on state, behavior, and different ways to look at methods.

This book’s an easy read.  Beck’s writing style is absolutely approachable, and the book’s quite short at 155 or so pages.

Beck’s book helps me to better consider how to rephrase my code so its intent is clearer and it’s more maintainable by myself and others on my teams.  Highly recommended.

Sunday, November 11, 2007

Why CodeMash Rocks (and is Fun)

I’m working through editing some of the sessions we’ve accepted for CodeMash and am thouroughly enjoying the task, simply because the speakers we have firmly grasp how to write cool abstracts and bios.

From Catherine Devlin, about her talk on Python: “This session is suitable for anyone who'd like to get started with Python, or who just likes seeing planets blow up.”

From Bruce Eckel, on his talk about Python: “’Why is Python so great?’ As any Python programmer will tell you, the easy answer is ‘because it doesn't hurt.’”

From another speaker’s bio: “In his off-hours he enjoys watching bodybuilding and Broadway musicals, but not at the same time.”

From Dustin Campbell’s talk on F#, the very cool functional programming language: “Note: no object-oriented programmers will be harmed during the session.”

From Neal Ford’s talk on “Engineering” & Polyglot Programming: “This presentation also engages in a real conversation about ‘software engineering’ and what that really means. And, it tells how we can get other engineers to stop making fun of us.”

Like those?  Go register and then you’ll be able to hear it directly from those great folks.

Saturday, November 10, 2007

SharePoint Connections: Final Day

I’m winding up my last few hours in Vegas sitting in a workshop for developing on MOSS.  It’s being taught by Todd Baginski, which is great because his other sessions have been terrific.  He’s being assisted by Dustin Miller, also of SharePoint Experts, and Heather.  (Missed her last name.)

The session’s just OK, solely because at least half the attendees came completely unprepared.  Prerequisites for the course were to have a working dev environment set up, either by building your own or grabbing the MOSS VPC from Microsoft and finishing up installs of Visual Studio and the SDKs.  I think the conference registration folks really put Todd, Dustin, and Heather in a bind because they didn’t make the prereqs clear to attendees.  As a result we’ve lost most of the morning trying to get attendees up to speed.  The three instructors are dealing with it well, with Dustin and Heather scurrying around to get folks set up while Todd hits a lot of great content and demos. 

Update: We’re now bagging the hands on labs in favor of having Todd run through more content and demos.  That’s a fairly good compromise since we’re moving forward and we’ll have all the lab materials anyway.

I had an interesting short conversation with Todd about testing in the MOSS world.  It’s readily apparent to me that nobody’s seriously addressing any form of unit testing for MOSS development, and certainly not anything about test driven development.  I think this may be an area I start writing some content on because there’s a serious need for it.

Overall impressions of the conference has been generally positive.  The downsides have been some throroughly mediocre speakers who leave tiny fonts on the screen, mumble, cut sessions extremely short, etc. 

The upsides have greatly outweighed those cons: I’ve met a large number of folks who’ve been influential in my professional life or community — thanking them face-to-face is a Big Deal for me.  I am still staggered that I got to get up on stage for a panel discussion and sit together with Rob Conery, Phil Haack, Joe Brinkman, and Jon Galloway.  I’ll probably wake up and find out that was a dream and instead I’m in the drunk tank downtown with some guys named Earl, Bubba, and Adolf.  I’ve gotten a great amount of solid expertise and practical tips and tricks from experts like Todd, Neil Iverson, and some other folks.

As I’ve said on this blog many times before, my last major conference was SD West in 2003 and that turned into a hugely life-changing event for me.  (Thanks, Josh, Steve, and Michelle!)  This conference hasn’t been as big an impact, but only because I’m already on the career track I want — and that was definitely not the case in 2003.  That said, I’ve gotten some great motivation to step a few things in my career up a notch.  We’ll see how well that pans out over the next six or so months.

I’m looking forward to getting out of here this afternoon and getting home.  My wife certainly needs a bit of a break seeing as we’ve continued the pattern of things blowing up when I travel.  Last year during a trip a chipmunk got in the house for a couple days. Picture a two-year old boy wandering around the house with a flashlight looking under couches all the time saying “Monk?  Monk?”  This time it was the neighborhood power transformer blowing up and throwing the house into the dark.  That was followed by my daughter coming down with strep throat.  Roses and chocolates may be in order…

Final Update: I just got home now and am winding down a bit after a long day.  The family’s asleep and since it’s 2:30AM I plan to follow their lead shortly.

Thursday, November 08, 2007

SharePoint Connections: Day 4

First off, some highlights from yesterday which I didn’t hit in my Day 3 post: I spent most of my evening at an MS-hosted party for speakers and MVPs chatting with great folks like Phil Haack, Jon Galloway, Neil Iverson, and Jay Flowers. People milling about in other corners included Juval Loewy, Michelle Leroux Bustamante, Carl Franklin, and a passle of other Big Names. I am soooo small fish in a big pond! Phil and Jay both wrote articles for my book so it was a lot of fun finally meeting them in person. Neil and Jon are both passionate, wicked smart folks who were just great to gab with — and I got a lot of great thoughts on MOSS things from Neil. I think I also managed to ask Christian Weyer if he was Miguel Castro, who I was trying to hunt down since he’s speaking at Dayton in December. Sorry Christian. That’s rather embarassing, especially because I was sober… This morning I sat through the first half of a two-part session on InfoPath forms and workflow in MOSS. Very informative, but the presenter finished up 45 minutes into a 75 minute session. What, was the session duration a surprise to him? I wish he would have filled up the entire session, particularly since he was rather snarky about attendees holding all questions until the end. Yeesh. The second session of the day was actually a very cool surprise for me: I got to sit up on stage with Phil, Jon, Joe Brinkman, and Rob Conery for a panel discussion on open source architecture. Seriously small fish, big pond. I’m still surprised event security didn’t run in and grab me off the stage. That discussion morphed into a lot of different directions which was quite cool. We talked about building a community around contributors and commiters, marketing OS projects, dealing with bugs and features, and yes, architecture. It was a lot of great conversation, and it was very, VERY cool to be up on stage with four guys who are industry leaders. Right now I’m sitting through a good session on virtualization for MOSS environments. There’s a lot of great info so far. The only downside is that the speaker has decided that sitting down and hiding behind the monitor is a great way to present. Ugh. (Maybe he’s got mobility issues, in which case he should have at least moved his chair out from behind the table.) Also turns out he had only enough material for 45 minutes. Grrr. The short session on virtualization actually turned out to be have a golden lining: I went over and listened to Joe Brinkman talk about PowerShell in the DotNetNuke environment. I caught the last 20 minutes or so of his talk — and saw his very cool concept of fronting PowerShell in an aspx page. This gives you full access to all the PowerShell goodness on the hosting machine. That is very cool. There are some trust issues he still needs to work around, but it’s a killer concept and I’m going to steal it for some MOSS work. The final session today was Neil Iverson’s PowerShell for SharePoint. Gold. Sheer gold, and a great kick to get my lazy ass in gear and get serious about rolling back into exploring PowerShell. Neil’s a great speaker and it was great to hear him both because he’s sharp and also because he covered PowerShell which is sort of esoteric and off the beaten path. The closing session was a complete goat rope. It was supposed to be Q&A with a panel, but turned in to a group of attendees griping about everything from lack of video recordings to break time to session duration to a lack of wireless. Hey, dumbasses: The panel up on the stage had Kimberly Tripp, Juval Loewy, Rocky Lhotka, Steve Smith, and a bunch of other internationally known experts. Do you think you could perhaps get over your pique and direct those complaints to the event planners and ask one or two intelligent questions of these great experts? Yeesh. (Actually, I’m probably just being whiny because, as usual, I didn’t win anything in the swag.) I’ve got a bit of work to wrap up tonight, then it’s time to prep my VM for tomorrow’s MOSS development workshop with Todd. I'll have to leave a bit early to catch my flight, but it ought to be a great few hours.

SharePoint Connections: Day 3

Day 1 was my workshop with Ben Curry, Day 2 was odds and ends session (and getting my butt kicked by a supermodel). Now it's Day 3. Overall impressions are pretty good. I’ve been underwhelmed by the keynotes I’ve attended (didn’t hit ScottGu’s because I was in a different one), but the general sessions have been pretty solid. Right now I’m listening to Todd Baginski talk about the SharePoint object model. This is one of the best presentations I’ve ever been to: almost pure code and demos with very few slides. Todd has a great SharePoint tool he’s written for various odds and ends, and he’s walking through its code and showing the most important pieces of the code and what they do. Wow. Pure gold. One mission I’ve been on here at DevConnections is to hook up with a number of folks/companies who’ve been supporters of the .NET communities I’ve been involved with. These companies have given the .NET community tons of swag and a lot of financial support, and it’s been great to put a face to an e-mail address and shake a few hands while saying “Thanks!” I caught up with folks from Telerik, Infragistics, Pearson Education (Addison Wesley, Wiley, etc.), Wrox, JetBrains, and a few others. I’ve also manged to catch up with a few folks who helped out with Windows Developer Power Tools. I stumbled in to Scott Hanselman and Phil Haack this morning. It was great to chat Scott because a couple years back I reached out to him and asked for some comments for my “Ask The Pros” series for VisualStudioHacks.com. Scott gave me some great bits for those articles — and he didn’t know me from Adam. He also gave James and I some great tough love technical review comments on drafts for Windows Developer Power Tools. Later Now I’m listening to Charlie Poole (!!) and Jay Flowers talk about NUnit and CIFactory. I’d initially started out in a SharePoint session, but the presenter was spending time waiting on a new virtual machine to extact and configure. Apparently, the demo VPC he was given didn’t work, so he thought it would be OK to talk to some slides while his VPC was getting set up. Sorry, waste of my time and frankly this session was a better one for me anyway. Noch spaeter I got to sit with Charlie over lunch and discuss a wide range of topics. He’s a very interesting fellow to sit down with and chat. We hit NUnit’s future direction, communities for open source projects, Fitnesse, and world travel. I count myself awfully fortunate to have gotten some of his time. Neil Iversen gave a great talk on advanced features in MOSS. He's a great speaker and very pragmatic in his approach -- and he's all over PowerShell which I loved. I'm definitely hitting his PowerShell for SharePoint Devs tomorrow. Another great presentation by Todd Baginski on SSO in real world situations. Todd actually created a demo site in MOSS and put all his code and presentation materials within, then saved it out as a site template and posted it to his blog. Amazingly cool way to get code out! Overall this was a great day. Hooked up with good folks and got some seriously good ideas on work and how to go about future presentations.

Wednesday, November 07, 2007

CodeMash Early Bird Discount Expiring Soon!

CodeMash’s Early Bird discount rate of $125 expires next week on 11/15.  Regular registration is $175, so you’re going to suffer a $50 penalty if you don’t get rolling and register soon!

Note that the alumni rate of $110 is good until 12/15.

Get over to the registration page and sign up now!

Why Sustainable Pace Matters

One of the (many) reasons I’m happy to be at Quick Solutions is their emphatic position that overtime is never directed by project managers or engineers, it’s a choice of each team member.

Sustainable Pace is a critical piece of well-done agile environments.  The idea is that productivty and quality suffer as folks start working longer hours on a project.  Frustration of team members climbs, mental cruft gathers up as team members can’t unwind or get enough sleep, and silly errors creep into the codebase because members get sloppy.  Maintaining a sustainable pace ensures you’re not falling into any of the bad situations I just listed. 

Additionally, if you’ve got a customer-facing role then there’s another critical benefit to maintaining a sustainable pace: your’re better able to communicate and manage the relationship with your customer.  

It’s tough to communicate complex issues clearly to your client when you’ve had four hours sleep for the last month. Worse yet, it’s much harder for you to keep your head straight and your attitude professional when an upset customer becomes difficult. 

Regardless of whether the client’s right or wrong with their outlook, you as the consultant have to keep your head in the game and get both sides past the bad communication to get things back on track.  This is especially important when your client refuses to accept ownership of errors on their part.  During these situations you can not afford to let the conversation get sidetracked into the blame game finger pointing thing.  A brain fogged up by weeks of ten to 12 hour (or more) workdays is not an asset at this point.

Sustainable Pace means you work hard during a reasonable workday, then you leave work and use your remaining hours in the day to do things that rejuvinate your mind.  Go play with your kids.  See your spouse while you’re awake.  Exercise.  Eat good food.  Go drink adult beverages with your friends. 

Do those things and then you’ve better able to sit back at your desk and crank out code that doesn’t suck.  You’re also better able to keep the relationship with your customer in a good place since you’re rested, refreshed, and hopefully happy.

Sustainable Pace.  It’s a Good Thing.

Coding For Speed (Or How I Got My Butt Kicked By A Supermodel)

The crazy guys at Developer Express have a great challenge at their booth here: Code head to head against a model who’s had six hours training on writing a specific bit of code using CodeRush.  She uses CodeRush, you use Visual Studio. 

The great point of this exercise is that anyone, even a complete novice, can see great gains in productivity by using CodeRush.  Additionally, Sara had only used Macs until this week.  “What do you mean press the ‘Control Key’?”  Dustin Capmbell and Mark Miller work the audience and shame folks into going head to head with Sara to see who can get through the exercise faster. 

I’m a ReSharper fan, so Mark convinced me to give it a shot.  He even let me use my own system with ReSharper installed.  I spent a bit of time practicing and ironing out what keystrokes would be the most beneficial — Sara gets through creating the two classes, several properties with backing stores, and a couple methods in under 50 seconds, so there is NO room for any wasted keystrokes.

Yesterday I stepped up to the challenge and went head to head with a super model who’s young enough to be my daughter.  I did OK out of the gate and was keeping up with Sara, but my Visual Studio instance had a meltdown and cratered as I was, literally, finishing up my last line of code and getting ready to build my project to finish out the challenge.

We had a rematch and then I had a complete meltdown.  Somehow I hit a key combo that brought out and pinned the property sidebar window.  Not good when you’re working on a narrow screen resolution with a large font size — you need every bit of real estate to see the code you’re writing and you do not have an extra second to close things out. 

Ugly finish.  She completely kicked my butt, which was too bad, because my fastest time practicing(40 seconds) was right at Sara’s best time.

Regardless, it was a lot of fun and I got to spend a session in the DevEx cash booth windmachine thingy which blows money around you.  I managed to grab up $63 and am looking forward to spending some of that on yummy tequila at the Border Grill later this evening (Next morning: The nice folks from Data Dynamics brought my tequila for me. Thanks DD!).

Kudos to the great DevExpress folks who came up with a great, fun idea.

(And kudos to the folks at JetBrains for the great ReSharper which I still love.  I’m sorry I couldn’t pull off a win for the team!!)

Tuesday, November 06, 2007

At SharePoint Connections

So far it’s a great conference.  My pre-conference workshop on installing and deploying MOSS was taught by Ben Curry of Mindsharp was terrific.  I already knew a lot of the fundamentals; what was golden was “Ben’s Best Practices” on things like load balancing, search intricacies, and any number of “gotchas” in MOSS.

I also got to finally meet real people at Telerik and JetBrains and thank them for their support of the .NET community.  I also met up with a couple old friends like Joe Brinkman, Dustin Campbell, and a few others.  (Sorry if I left you off the list!)

Now it’s off to sit in on more content.  I’m also looking forward to trying to finally meet Phil Haack, except I think he’s avoiding me.  Go figure.  I thought we were past that whole restraining order thing.

Subscribe (RSS)

The Leadership Journey