Saturday, December 15, 2007

Book Review: Designing Web Navigation

Designing Web Navigation: Optimizing the User Experience by James Kalbach, published by O'Reilly.  ISBN:0596528108.

This is a book about design, not implementation.  You may have grokked that from the title...  The book's beautifully laid out with lots of shots of real websites scattered across full color pages to help illustrate important points.

This book's really targeted to make you think about how to make your site's visitors best able to easily and repeatedly find content you deem important.  You won't find bits on CSS, Javascript, or Ajax.  Instead you'll find out things such as selecting appropriate navigation menu styles for given contexts, information architectures, the impact of tagging systems, and some of the complexities around search.

The first chapters are pretty academic and can be pretty dry, but they provide good information on content/information architecture.   The rest of the book is an easier read, but that doesn't mean you should skip the first chapters.  Lots of good sidebars call out specific topics -- accessibility is a hot topic throughout the book and gets a lot of sidebar treatment.

The book's full of gems such as how you should consider workflows in navigation (think shopping cart systems, e.g.), or the differences between "lingo" and vocabularies.  There are also a bunch of great references to other works, and each chapter has some nice exercises which are actually pertinent and helpful in making the reader more aware of that chapter's points.

I was surprised that globalization/localization didn't get more treatment in the book, but there are quite a few example screenshots and discussions around international websites.

Overall it's a very interesting, thought-provoking book.

Monday, December 10, 2007

Renaming NHibernate-Persisted Classes

If you rename classes that you're passing through NHibernate, keep in mind that you've got several places you need to do that rename at:

  1. The business class itself, i.e. Schema -> Schematic.
  2. Inside the Hibernate.cfg.xml file, where you'll have a mapping resource element pointing to the class and its assembly.
  3. Rename the mapping file, i.e. Schema.hbm.xml -> Schematic.hbm.xml
  4. Change the name of the class within the mapping file's class tag.

That last one's bitten me a couple times and I always lose more time than I should over it.

Forget any one of these and you'll run up against the infamous "Could Not Compile Mapping Document" error.

First CodeMash Podcasts Up!

Michael Kimsal of WebDev radio did an interview with me a week ago about CodeMash and has posted the ‘cast up on his site.

Chris Woodruff also did an interview with me about the history of CodeMash, my current role in CodeMash, and what attendees can expect to find at CodeMash this year.  That’s posted as the first ‘cast on the CodeMash website — Chris will be posting a series of podcasts interviewing speakers, attendees, and others around CodeMash.

I’m never pleased hearing myself speak in any media, so I’m definitely not a good judge on the quality of these.  I know I had waaaaay too many “uh”s in the interview with Chris.  That aside, we covered a lot of interesting topics so I think they’ll be useful and interesting to listeners.

Check ‘em out!

Saturday, December 08, 2007

CodeMash Badge: Wear It!

For some stupid reason I’ve forgotten to put up my CodeMash badge on this blog.  Rectified now.

If you’re heading out to CodeMash, please add the badge to your blog or site.  You can find HTML for the badge at the CodeMash registration page.  Every bit of exposure for our community-driven event helps drive attendance!

Good Series on Collections in NHIbernate

Billy McCafferty has a nice series on collections in NHibernate.  I like his discussion of good places to put particular retrieval methods (FindAllByDateRange is his example).  His thoughts on separating out responsibilities between the data access layer and domain layer are thought provoking and well-reasoned. 

McCafferty walks through some various scenarios of where such methods could live and lays out good pros and cons along the way.  His article's really about how you can work solve problems around collections, but the general point of where and how to implement accessors is an important one too.

Wednesday, December 05, 2007

Nice Blog from O'Reilly's Publicity Folks

The publicity team at O’Reilly has a great blog talking about releases, conferences, and a lot of other good stuff relating to O’Reilly.  I just stumbled across it today and found it pretty interesting!

Another Reason CodeMash Rocks

Reason #152 why CodeMash and its crowd of homies is awesome: The CodeMash Song.

Read the rest of the thread for a great discussion on the pending jam session at CodeMash.

Saturday, December 01, 2007

Ironing Out the CodeMash Schedule

I’m looking at the tentative schedule for the CodeMash sessions we’ve selected and it’s shaping up to be a pretty amazing lineup! 

Jason Gilmore and Dianne Marsh have done the really, REALLY difficult job of the initial session selection: 120 submissions were received, all of which were of high enough quality to be selected at any code camp or other regional conference, most of which were solid enough for national level conferences!  They had to cut out almost 80 selections to pare down to 42 sessions.  That was a hard, hard bit of work, particularly since we know all of the submitters and it’s tough to tell friends “Sorry, maybe next year.”

Now comes the next hard part: slotting those sessions into a schedule where we can try and build momentum at the start and avoid too many obvious conflicts.  Not an easy task, and I’m very glad that Jason and Dianne did all that initial work and then tossed the list over to me for a review!

Dianne, Jason, and a few other folks have confirmed two great keynoters (Brian Goetz and Scott Hanselman) and have a third nearly nailed down.  I’d love to tell you who it might be, but I don’t want to sink the process.  Trust me, you’ll agree it’s a cool catch if we get him!

CodeMash isn’t far away at all — 10 January’s not many squares out on the calendar.  Go register.  Now!

The Importance of Good Task Granularity

On Tuesday's DNR the guys read a letter of mine I'd sent them after hearing a comment on one of their shows about burnout due to a perceived lack of progress when working on vague, esoteric, or difficult features. 

Carl and Richard didn't read my whole letter, which is understandable since they've time limits.  (And no, it wasn't particularly long-winded, either!)  Unfortunately, they left out the main reason I wrote in: The importance of breaking those large or vague tasks into smaller, more concrete chunks, and a creative way to do that. 

My letter included my explanation of how I tried to keep some sanity around a poorly scoped, vague feature I had on my plate during a project.  The feature was estimated at three days and ended up taking three months.  Ouch.  There's a long story behind that, and the huge overrun was largely due to the client making some very sensible changes based on good business decisions for them.

Regardless, I had one feature card that remained on our working wall for three months without any visible sign of progress.  It was frustrating for me since my teammates were wracking up completed features, and I also felt it left upper management the impression that no progress was being made on the feature.

The right thing to do in these cases is go back to the drawing board and rework that feature into a number of smaller, more granular tasks.  You should bring in the client to ensure you're getting the right things broken out and aren't missing any necessary pieces of the larger part.  Those new decomposed tasks should then be broken out as their own features and tracked.

For a number of reasons that wasn't feasible (theory versus real world), so what I did was handle all that myself using one of the best technologies known to mankind: Post-It Notes.

I broke down the larger task into smaller parts and wrote those up on Post-Its.  Those stickies went up on a couple different sheets of paper to categorize their status (limbo, in the queue, working, complete).  I used these Post-Its to help keep me focused on specific tasks as well as reminding myself that I was indeed making some progress while the others on the team were wracking up a large number of feature completion dots each week. 

Small things like green lights on a test or completion dots on a feature chart may seem simplistic or silly, but they are much more significant than you might think.  We all crave satisfaction in some fashion, and these sorts of things help salve that need.

When the Feature From Hell finally got finished I decided a regular dot (we use the round labels) wasn't quite expressive enough of the effort I put in to the feature, therefore I got a marker and made a dot that indicated the significance of the event:

Two important things about this:

1) Break down a large or vague task into smaller chunks so you have better scope and can see better progress.

2) Use some form of BVC to help keep that progress visible.

Burnout due to a missing sense of accomplishment on long, esoteric,  or vague tasks is a real risk.  Help yourself out by doing something, anything to show progress on those tasks.

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     }


   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() {





 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() {





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 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.

Tuesday, October 30, 2007

DockPanelSuite: Missing A Window?

DockPanelSuite is a great open source set of dockable window tools which can make your WinForms apps a sweet suite if you’re not able to use the dockable bits in the 3.0 Framework.  (Why am I so limited, you ask?  Think support for Windows 2000 clients.  Let’s not go there.  It hurts.)

I ran into an irritating problem where I shot myself in the foot I mean some idiot missed something which cost me a silly bit of time trying to isolate.  The DockContent.HideOnClose property will keep a DockContent form opened, but inactive (hidden) if you have it set true.  This can cause some serious head scratching if you’re trying to figure out why this one form out of four isn’t closing, disposing its resources, and going away to the closed form graveyard somewhere east of the middle of nowhere.  (That would likely be close to El Nido, California, population 32 when I lived there decades ago.)

DockContent.HideOnClose.  Don’t miss it.

Saturday, October 27, 2007

Heads Up: VS 2008 VPC Expiring

Are you using the Visual Studio 2008 Beta 2 VPC image?  Be forewarned: The image expires on 1 November, 2007, not March 15th, 2008 as originally announced.

You’ve got only a couple days to work on getting your projects and TFS data off that box and on to another location.  Microsoft’s put out some guidance on moving TFS data.

Microsoft put out word of this goof themselves and is asking the community to help spread the word.  If you know anyone using this VPC then please pass word of this problem on to them.

One critical issue regarding this: Your data on that VPC will not be accessible after 1 Nov, 2007.  Get cracking and move your data off to a safe location!

Thursday, October 25, 2007

Great Turnout at Dayton .NET DevGroup Last Night

Joe Wirtley gave a nice talk on pragmatic architecture at last night’s Dayton .NET Developers Group meeting.  Joe’s a very smart fellow, passionate about getting software right, and has a lot of experience and hard knocks to share.

We had a world record for attendance at last night’s meeting: 37 souls in the door.  Wooo!

We’re running a membership drive right now and are shooting for 40 at the next meeting on 14 November.  If we hit 40 then Microsoft will donate an XBox to raffle off at the meeting.

Bring a friend to the meeting, or blog about the user group or CodeMash, and you’ll get a chance to win extra swag at the meeting!  Make sure to contact me (link on right sidebar) and let me know the URL of any blog posts you make.

Hitting 37 folks in the door last night was a big deal for me.  Our attendance has been right around 20 - 25 for a couple years and it’s great to see a big jump in attendance. 

Thanks to Joe for presenting, and thanks to everyone who showed up!

Monday, October 22, 2007

Ann Arbor Day of .NET Recap

As usual, the folks running the Ann Arbor Day of .NET did a fantastic job putting on their conference. 

I sat in on pieces of a number of good presentations: Jesse Murray’s intro to .NET 3.0, James Bender’s WCF Messaging, Josh Holmes’s bit on the Dynamic Runtime, Joe Wirtley’s Pragmatic Architecture, and several others.  All the content was great, and the audiences all seemed pretty engaged.

I did a talk on Story-Driven Development using Fitnesse.  It was my first time giving that particular talk in a full-length session — I’ve done a couple groks on it in different venues, but never a 75 minute spiel.  The talk went fairly well, but there are several areas I’ll be smoothing up for future talks.

To Jason, John, Chris, and all the other folks who worked their butts off: Y’all did a great job.  I’ve run these events before, and I know how much effort goes in to putting them on.  It was an absolute pleasure to show up and not worry about anything other than snarfing food, complaining about past crashes during presentations, and then just wandering in to my room to give my presentation.

Great job, all!

Friday, October 19, 2007

Access, SQL, VB Wildcards Compared

Here’s a handy quickref I ran across for when you need to figure out wildcards in Access, Visual Basic, SQL Server.  I never can remember the Access ones because I don’t use them but once every thirty or forty years.

(Or something like that.)

Thursday, October 18, 2007

SubSonic: Empty Generated Classes

I’m just starting to play around with SubSonic, a nifty Rails-like DAL package that handles a lot of the goo for you.  Smart Guy (tm) Steve Harman turned me on to this during a conversation some time ago and I’m just getting around to it.

The problem I ran in to right off the bat was that the wicked cool generation tool was giving me classes from the tables with nothing but using declarations in them.  Completely emtpy classes.  Not helpful.

It took me a bit, but I finally figured out that yes, you do need Primary Keys identified for each table you want to generate code against.  I’d had an ID column created with an identity set, but no primary key defined.  Duh.

I may have missed that in the numerous cool screencasts available on SubSonic’s site.  It’s an easy fix, so now I’m off to finish up a project I’m playing with for my talk at the Ann Arbor Day of .NET.

Monday, October 15, 2007

Books In The Queueueueue

(I spell it that way because I was raised in Jerry Brown’s California educational system and I figure a few extra “u” and “e” characters can’t hurt.)

Here are a few books I’ve partially skimmed but haven’t had time to fully read and report on.  I’ll get reviews out on them shortly.

Implementation Patterns by Kent Beck.  This is a manuscript copy I got before publication because, as I told the publicist, I’d happily read Beck’s grocery list if he published it.  The book is concise and appears to cover patterns to help you keep your code readable and maintainable.  Examples are in Java, but if you can’t get over that then you need to get over that.

Visual Studio Team System: Better Software Development for Agile Teams by Will Stott and James Newkirk.  Yes, that James Newkirk.  I’ve been sitting on this one for months and haven’t gotten a review out for it yet.  It’s a fine book with a lot of great content on how to do Agile (or at least some folks’ version of it) in VSTS.  There’s some jewels in here that don’t get much coverage in works — think FIT/Fitnesse and similar goodies.  I have some quibbles with the organization of the chapters, but overall it’s a very nice book.

Pragmatic Unit Testing in C# with Nunit, 2nd ed.  Andy Hunt.  Dave Thomas.  Testing.  NUnit.  Nuff said.  I’m stoked about getting through this one because their approaches to doing testing look like a huge boost.

Head First SQL  My SQL is weak, and it’s all weak knowledge from Oracle 7/8 and Sybase 10 days.  Barf.  I’m hoping this book will help me increase my SQL karma points.

SharePoint 2007: The Definitive Guide.  Looks shiny.  It appears to be a high- to mid– level guide to many features in MOSS, not a deep dive.  That’s fine because I’ve got other deep dive books.  Appears to be well-written, but I’ve only had a glance or two at it.

Windows Developer Power Tools.  Wait, you’ve heard plenty about that here already…

There are a passle of others in the queueueue, but this is what’s bubbled up to the top.  (Actually, Beck’s book pretty much landed on the top when it arrived last week.)

Sunday, October 14, 2007

Off to SharePoint Connections (Las Vegas, 4-9 November)

I got back from a week’s vacation and found that I’m off to SharePoint Connections 4–9 November in Las Vegas!  I am completely pumped about going to this conference for a number of reasons.

0) I get to go to a great conference – the first national-level conference I’ve been to since SD West back in 2003.  That was a life-changing experience and I’m hoping this conference will be the same.

1) I hope to network with a bunch of MOSS smarties and find out their experiences with solving the many pain points in MOSS development.  What build tools are folks using?  What automated testing are they using?  What other tools have been helpful? 

2) I’m hoping to get a moment with Carl and Richard of DotNetRocks and pimp CodeMash something fierce.  We’re starting to campaign to have them at CodeMash v2.0.0.8, and I’m looking for any way to hook them in.

3) I’m hoping to hook up with just about anyone in the community who’d like to gab about anything from software engineering to coffee roasting.   Feel free to ping me via the contact link on the right sidebar if you’re going to be there.  I’ll buy everyone one drink — and a crapload of straws for all y’all to share with… <g>

Saturday, October 06, 2007

Great-Looking ASP.NET Book

Jeff Atwood, Phil Haack, and a couple other fellows banded together to put out The ASP.NET 2.0 Anthology from SitePoint.  I haven’t read the book, but I can heartily endorse it despite that for two reasons:

0) It’s authored by Atwood, Haack, Galloway, and Allen.  All four of those guys are wicked smart, have tremendous experience (the invaluable hard knocks kind), and are fantastic writers.

B) It’s published by SitePoint.  I’ve been awfully impressed with their catalog over the last year.

Atwood’s got a rather ranting post where he actually discourages folks from buying the book.  I don’t know if he’s in the Post-Publication Traumatic Stress Disorder phase — I was so sick of my co-authored book when we finished that it took me weeks to do anything more than have a cursory glance through it — but I’m looking forward to getting a copy of it on my desk at some point.

Monday, October 01, 2007

CodeMash Registration Is Open!

Registration for CodeMash v2.0.0.8 is now open!  Head on over and register for the bestest software conference in the Midwest!

(But don’t register yet if you’re in the process of submitting a presentation for consideration.  We’ll have a separate registration channel for speakers.)

Friday, September 28, 2007

Join Microsoft, Get a Harley

Josh Holmes, a long-time friend who’s had a number of significant (positive) impacts on my career, joined Microsoft last year as the region’s Architect Evangelist.  Josh has a way with working deals.  Like managing to get a Harley for his job.

OK, so it’s not just Josh getting a Hog, it’s Josh coming up with a terrific concept for a great Channel 9 show: Code To Live.  He and Steve Loethen are travelling around on a Hog doing shows about passionate folks who develop code because it’s something central to their personas.  As Josh says, “Coding isn’t just a paycheck, it’s who we are.”

The show looks terrific, and with Josh behind it you can rest assured the shows will be full of great content.

Great stuff, Josh — keep it up!

Tuesday, September 25, 2007

Blogroll Shoutout

The folks at NuSoft Solutions where I worked for a short bit have made some of their blogs publicly available.  NuSoft has a bunch of smart folks and I’m glad to see they’re rolling out a public facing site.  I tried fighting for a public blog while I was there but got no traction, but I was the new kid on the block and was in Cincinnati far away from the rest of the collective.  I’m really glad to see that Chris Woodruff got the project pushed forward!

In any case, you might pay attention to that set of blogs!

Friday, September 21, 2007

CoolCommands for VS 2005

CoolCommands is perhaps one of my favorite add-ins for Visual Studio 2005 — perhaps even more so than TestDriven.NET.  Check out Gaston’s post for some of the details of its goodness.  Suffice it to say that I use features from it on a nearly hourly basis as I’m coding.

The URL for the tool is wrong on the post page, though.  You can find CoolCommands’ installer here now.

Thursday, September 20, 2007

Good (Older) Series on the /3GB Switch

Raymond Chen, author of the great book The Old New Thing, has a nice series of posts back in August, 2004, laying out what exactly the /3GB switch does for your addressing in 32–bit versions of server operating systems.

There’s an awful lot of misunderstanding around on what that switch does, and a lot of people don’t really consider the consequences of flipping that switch.

Chen’s blog isn’t a regular read of mine, but it’s a great source of information when I’m looking for anything deep level about operating systems, memory, and a host of other things.

(Go read his book, too.)

Nice HOW-TO for Creating Site Collections in a Specific Content DB

A very nice HOW-TO with pictures, even, on the steps needed for creating site collections in a specific content DB.  There’s also a bit at the bottom on how you carve off sites in an existing content DB and move them off to their own DB.

Wednesday, September 19, 2007

Finding the Length of an Image Field in SQL 2005

Problem: I need to know the size in bytes of an image stored in an Image column in SQL 2005.

Solution: SELECT DATALENGTH(image) FROM schematicsimage WHERE [schematicsid] = 527

(Courtesy of Bruce the DBA)

Wednesday, September 12, 2007

Working With LZ-Compressed Files in .NET

I’m needing to deal with some files compressed with the COMPRESS.EXE utility which packs targeted files in the Lev-Zimpel algorithm via the lz32.dll system library.  That means playing with PInvoke which is something I’d rather not do since it’s generally a huge PITA. 

To uncompress files you’ll need to open the zipped file, copy it to another file (expanding it enroute), then close your source and target files.  Three different calls from lz32.dll: LZOpenFile, LZCopy, and LZClose.  PInvoke means you need to reference those calls with DllImport statements:

[DllImport("lz32.dll", EntryPoint = "LZOpenFile", SetLastError = true,

    CharSet = CharSet.Ansi)]

public static extern int LZOpenFileA(

    string lpszFile,

    [Out, MarshalAs(UnmanagedType.LPStruct)] OFSTRUCT lpOf,

    int mode);



public static extern int LZCopy(int hfSource, int hfDest);



public static extern int LZClose(int hfFile);

A couple things about the first call, LZOpenFileA: The CharSet declaration makes sure that the unmanaged code gets things correctly marshalled from the CLR’s native Unicode over to the unmanaged world’s ANSI.  Secondly, the OFSTRUCT structure in the Win32 world needs defining as a .NET class in our world:


public class OFSTRUCT


    public const int OFS_MAXPATHNAME = 128;

    public byte cBytes;

    public byte fFixedDisc;

    public UInt16 nErrCode;

    public UInt16 Reserved1;

    public UInt16 Reserved2;

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst=OFS_MAXPATHNAME)]

    public string szPathName;


The string szPathName gets some MarshalAs love to deal with the transition from managed to unmanaged code.

Finally, we’ll set a couple constants for the mode we’re opening the files in:

private const int OF_READ = 0x0;

private const int OF_CREATE = 0x1000;

Now the code to actually deal with the calls:

public static string ExpandLZCompressedToTempFile(FileInfo file)


    OFSTRUCT sourceStruct = new OFSTRUCT();


    int handleSource = 0;

    int handleTarget = 0;

    string tmpFile = "";


    handleSource = LZOpenFileA(file.FullName, sourceStruct, OF_READ);

    OFSTRUCT targetStruct = new OFSTRUCT();

    tmpFile = FileSystem.GetTempFileName();

    handleTarget = LZOpenFileA(tmpFile, targetStruct, OF_CREATE);


    LZCopy(handleSource, handleTarget);





    return tmpFile;


I’ll use another method to read the expanded file and stream that into a GZip-compressed format since that’s supported in .NET’s managed world.

Check out Natty Gur’s article on Code Project if you’re interested in some very, very deep PInvoke details.  His article solved a couple issues for me, but is written about sharing and caching data between processes using some interesting trickery. 

Tuesday, September 11, 2007

Visual Studio Tip of the Day

If you’re not reading it already, hop over to Sara Ford’s blog and subscribe PDQ.  She’s got an ongoing series of daily tips for VS 2005/2008.  There’s a lot of serious gold therein!

Saturday, September 08, 2007

Extreme Model-View-Presenter

ARCast has a very interesting three-part series on Presenter-First development.  There’s a lot of thought-prevoking discussion on breaking out responsibilities in a MVP pattern approached from the presenter first.  Mocks, interfaces, single responsibility principle, adapters, and an interesting take on what they see as the model. 

The folks at Atomic Object wrote a good white paper on the topic that I’ve been slowly working through. What I found interesting was their approach of having all communication to the presenter based on events spawned from the view or model.  I disagree with the algorithm (steps) they use for approaching the development (they stub out the presenter with interfaces and mocks before they even hit the user stories), but there’s an awful lot of useful info therein.

Listen to episode 1, #2, and the final installment and check out the paper.  Good stuff.

Shout Out: Web Standards Meetup Group

Who knew?  Dayton’s got its own web standards meetup group.  Interested in doing your web work in a non-craplike fashion?  Check ‘em out.

(Updated: The reason I ran across this is because Justin, one of the two guys foolish enough to sign up for helping me run the .NET User Group here, is speaking there later this month.)

Thursday, September 06, 2007

Toggling All Cells in a DataGridViewCheckBoxColumn

Problem: Need to toggle all cells in a DataGridViewCheckBoxColumn.  We’re using a dynamically generated set of checkbox columns starting after two static columns.


private void dataGridView1_ColumnHeaderMouseClick(object sender,

                                              DataGridViewCellMouseEventArgs e)


    int colNumber = e.ColumnIndex;



        bool selectAll = (bool) dataGridView1.Rows[1].Cells[colNumber].FormattedValue;

        foreach (DataGridViewRow row in dataGridView1.Rows)


            row.Cells[colNumber].Value = !selectAll;




Adapted from a couple Google hits.  Yes, it’s based off the value already extant in row one, but hey, it’s just ducky.

(Thanks to Kramer for getting the grid built and populated in short order today!)  (Now I wish he’d just start blogging so he could write this stuff himself.)

Monday, September 03, 2007

MOSS & WSS SDKs Updated

This is almost a week old, but critically important if you’re working in the MOSS or WSS space: Go grab the new SDKs for MOSS and WSS.

The SharePoint Team Blog lays out a lot of the updates on their blog.  One of the most critical is the holes they’ve filled in the documentation.  This is an area that’s been brutally, horrifically, pathetically terrible in the initial release.  I’ve ranted about this a number of times already, so I’ll just leave this part off with another small one: the state of the initial documentation was unconscionable.  It’s taken far too long for them to clean it up, but at least they’ve applied more resources and are closing the gap.

Rant off.

Now go get v1.2 of the SDKs!

Subscribe (RSS)

The Leadership Journey