Saturday, October 28, 2006

Blog Publishing Tools

I was trying to add the badge for Windows Developer Power Tools to the sidebar of this blog and was running in to problems with Blogger.com's template editing "feature." This reminded me why I don't use that part of Blogger.com very often: it sucks.

For me, a much better interface for editing my template is w.bloggar, an neat little freeware blog interface gadget.  It edits posts, it does your template, and it’s got a bunch of nifty little features.  Supports about a billion different blog engines, so it’s got that going for it.

My general posting tool of choice is BlogJet, but I only use it more than w.bloggar because I paid for it.  BlogJet’s goofy problems with keyboard shortcuts (or lack thereof) and its inability to use alt-Key commands for the menu drives me apes#it.  I do like BlogJet’s ability to easily dive straight to the HTML — always handy when you’re trying to clean something up or get picky about formatting.

Yes, yes, there’s Windows LiveWriter too.  It’s nice and pretty, but it scatters stupid crap all over the place which is completely insane.  But it’s pretty.  Oooohhhhhh.

Update:  It appears the latest version of BlogJet has fixed the shortcut issues, so I sit corrected.

Friday, October 27, 2006

CodeMash Site Is Live!

CodeMash – I’ll be there!

This is simply going to be the coolest event in the Heartland region this year: CodeMash.

You can now submit abstracts if you want to present and you can pre-register to hold your spot in line. Official registration should be open soon and will cost only $99 for a two-day event!

Why should you attend? 

Because we’ve got amazing keynoters like Bruce Eckel, Neal Ford, and Scott Guthrie already lined up. Because we’re lining up an amazing array of speakers from the Java, Perl, PHP, Ruby, and .NET communities.  Because we’re having it at the really cool Kalahari resort in Sandusky, where you’ll be able to get tremendous deals on rooms for the two day event.

You should attend because it’s a great opportunity for you to hear amazing stuff from amazing speakers.

See you there!

Thursday, October 26, 2006

Great Presentation at Tonight's DevGroup

Two members of our .NET group, Dan Hounshell and Joe Wirtley, put on a great talk at tonight’s meeting: Real World Continuous Integration.  Dan and Joe are two very smart folks who have some great experience moving in to a CI environment for their development projects.

Their talk was nicely done with great examples and full of concise, on target content.  By far the best bits of this gig was their emphasis on the real world issues.  They talked frankly about what hadn’t worked for them and some problems they’d had to overcome — and they had plenty to talk about regarding benefits of moving to a CI process.

Terrific show, guys!  I hope you seriously think about doing that at more venues!

(Slides and code will get linked to from the DevGroup’s site within a few days.)

Tuesday, October 24, 2006

Terrific Upcoming Webcasts

Drew Robbins, our terrific Heartland region Developer Evangelist from Microsoft, has put together a great series of webcasts from really smart folks in our region.  Webcasts will happen about every other week and they’re free of charge.  This is a terrific FREE way for you to learn great technlogy — all while sitting in your chair with your favorite beverage.

The next webcast is from Bill Wagner, author of Effective C#, and covers LINQ.  Bill’s been posting prolifically about LINQ on his blog and he’s exceedingly passionate about its benefits.  (LINQ, not his blog.)

Details on the cast:

Date: 11/6

Time: 12:00PM EST

Registration: http://msevents.microsoft.com/cui/eventdetail.aspx?EventID=1032314537&Culture=en-US

Event ID: 1032314537

Be sure to take advantage of this!

Monday, October 23, 2006

Windows Vista and Office 2007 Intro Events

My company, NuSoft Solutions, is teaming up with MicrosoftMax Training, and ASAP Software to put on a day-long event covering Windows Vista and Office 2007.  The event is free and lunch is provided, so it may be worth your day to head over to one of the events in Cincinnati on 28 November or Cleveland on 30 November.

Register by following either link above, or call Todd Davis at (248) 813-7200 x264.

The Vista and Office 2007 sessions are presented by two of NuSoft's practice managers, Jason Clishe and Adam Wilburn, plus you'll also get to hear Steven Haack, Microsoft's Strategic Security Advisor give a keynote address on various security matters.

Obviously I'm biased about this event, but I think it's a terrific opportunity to get exposed to some terrific technology and ask questions of very sharp folks.  (Plus there's free lunch...)

There are going to be a significant number of events like these coming up as the launch for Vista and the entire Office line nears.  You may have caught my earlier rant about keeping ownership of your career.  Events like this are a great part of keeping yourself current -- and finding out how to pitch cool technology to your bosses so they'll understand there's a significant return on investment for moving along with such things.  (Plus you should go join a .NET group.)

Sunday, October 22, 2006

Carnival of the Recipes

The Carnival of the Recipes #114 is posted up at Nerd Family.  My posting for my BBQ Ribs made this week’s list, but there’s plenty of other tasty stuff to read about, so head over if you’re looking for some good recipes!

You can find a full listing of Carnival of Recipes at Blog Carnival.

Nice List of Free Fonts

Brian Prince, all around smart guy, pointed me to this post which in turn points to this list of 25 free fonts.

The list doesn’t include my all-time favorite P22 Typewriter which I use for my presentations.  (Brian likes to call it the “Unibomber font”)  Despite that, the list is nice and a good resource if you’re wanting more fonts to shine up your whatever.

Friday, October 20, 2006

Testing Helper Methods

I'm working on some code that ended up having some moderately complex helper methods.  I don't want to expose these methods on the public API because I want to keep my class's public face as simple as possible.  Something I heard Scott Meyers talk about some years back at Software Development Expo has always stuck in my head: “Make your code hard to use incorrectly.” 

That’s always in my head as I’m deciding what bits and pieces of functionality should be exposed.  Helper methods are generally internal bits, not something your class’s consumers should have to worry about, so why should you then expose them on the public side of an API? 

Easy. You shouldn’t.

The issue is how do you create those helper methods when you're doing Test Driven Development?  My first approach was that I just had to figure out all the test cases to drive execution through the various paths of the public function plus its helper function.  That got too complex, but I really didn't want to change that helper to public visibility in order to test it directly.

A few moments with my Thinking Cap on and I came up with this solution: Use the preprocessor and the DEBUG constant.  This lets me have the helper method's signature exposed with a public scope during testing and changed to private when I'm building for release.

 #if (DEBUG)

        public int ProcessGlobalMessages_NoSubscribers(DateTime lastSendTime,

                                                       DateTime thisSendTime,

                                                       bool isEmergency)

#else

        private int ProcessGlobalMessages_NoSubscribers(DateTime lastSendTime,

                                                       DateTime thisSendTime,

                                                       bool isEmergency)

#endif

Now I can surround test cases for that method in similar #if blocks and they'll only appear when I'm building Debug releases:

#if(DEBUG)

        [Test]

        public void CheckProcessGlobalMessagesNoSubscribersReturnsCorrectCount()

        {

A quick check in Reflector proves things worked as expected in the Release build assembly:

OK, so I’m not 100% happy with this workaround because it’s a fundamental design smell to me in that I can’t get the test coverage I want without a bit of trickery, but this seems like pretty fair compromise between doing my design in a TDD fashion and keeping my class’s public API as simple and clean as possible.

Thursday, October 19, 2006

Book Review: Extreme Programming for Web Projects

Knocking off another from my stack of books to review.

Extreme Programming for Web Projects by Doug Wallace, Isobel Raggett, Joel Aufgang

Addison-Wesley Professional (2002)

ISBN 0201794276

This book's premise is an interesting one: Does XP work for web projects, and if so then how does one go about implementing it? The authors are up front about the first question in the opening to Chapter 1: "Sort of" they say. The book's entire content struck me as a continuation of that statement.

The book attempts to be a bit too general in many aspects: there's a lot of high-level coverage of XP tenets without much utility specific to web development. The general coverage of XP is nice, but you'll find better content in other works; however, the authors didn't intend for this to be a seminal work on XP anyway, so that's not a big issue.

Several sections do provide good information specific to XP in web development, such as Chapter 8 (Graphics Design) and its emphasis on how to wrap customers in to the process early. Another example would be the discussion in Chapter 11 (Planning) on how the "customer" in web development differs a bit from what XP usually considers a "customer."

There's also a lot of good discussion at a high level on how the use of XML vice static HTML as data can greatly benefit the development process. There are good overviews of XML in general, XSLT from 30,000 feet, and a nice blurb on how the Tidy tool can help you keep out of trouble.

The downside of this book is that too often it stretches too far to make the connection between XP and web development. It's not detailed enough as a reference for implementing XP practices, and it doesn't do a good enough job of tying web development into XP for those looking to solve that problem.

The book is concise and well-written, but that doesn't make up for its fundamental weaknesses.

(As always, keep in mind my review disclaimer.)

Wednesday, October 18, 2006

Book Review: ASP.NET 2.0 -- A Developer's Handbook

I'm long overdue on writing up a blurb on this book.  I've had it and used it off and on as a reference for months and months...

ASP.NET 2.0: A Developer's Notebook, Wei-Meng Lee, O'Reilly Press, June 2005, ISBN 0596008120.

This is a well-written, easy-to-use book hitting the main points of ASP.NET 2.0.  I've never read it cover-to-cover, but have gotten great use from it as a reference manual when I need to quickly figure out how to do something new in ASP.NET 2.0.

The book's laid out in a clear fashion and has a solid index, so it's easy to find the material you need to solve a problem.  Each "lab" in the book is task-oriented, so you'll find things like "Create a Master Page for Your Site" which details the steps necessary to accomplish the task.  Sections are nicely done and full of tips and tricks, plus there are plenty of short sidebars noting smaller bits of interest such as content pages being limited to having only one master page. 

I've found the breadth of coverage quite nice.  The author hits everything from Master Pages/Site Navigation to Security to Profiles.  There's also a nice section on Performance which talks about site precompilation and caching.  (I even nabbed one of the author's labs for one of my talks on .NET -- with attribution, of course.)

The book's very nicely done.  It's concise and clear, and I like its style, both content and visual.  Some folks might complain about the examples all being in Visual Basic 2005, but as Dr. Phil might say, "Build a bridge and get over it."


Advanced ASP.NET developers probably won't get a lot out of this unless they're completely new to 2.0, but beginning and intermediate developers should find the book very helpful.

So far this book's been very useful.

Tuesday, October 17, 2006

NIMBY (Politics)

This article by the Washington Post sure gives an interesting view of the international complaints about Guantanamo Bay prisoners.  There’s been a long, loud outcry from any number of nations including Great Britain, Germany, and of course France.

Yet none of those nations will allow prisoners we’re looking to release from Gitmo to return to their homes in those countries.  Amazing.

I’ve got my own set of objections to Gitmo (“Club Gitmo,” as Rush Limbaugh would call it), but this article certainly shows a  lovely display of the two-faced nature of politics at the international level.

(“NIMBY” stands for Not In My Back Yard, if you’re not familiar with the term.)

Cooking: Jim's BBQ Ribs

It’s been awhile since I’ve posted up any recipes.  My cooking adventures took a bit of a break during the months I was crushed on the book.  That sucked for any number of reasons: my family missed the neater stuff I did when I had time and wasn’t grumpy about the book, and I certainly missed the creative energy I get from tinkering around in the kitchen.

So on to this recipe.  Ribs are wonderful things, if nothing else for the wide range of styles they’re cooked in.  Ribs are very much a micro-regional thing around the US: they vary greatly from the southwest to the south to the midwest.  I’m no expert, but I enjoy them and have tinkered around with a number of different variations.

This is the simpler version of several recipes I make.  I'll often make a dry rub of sugar, ancho and chipotle chili powders, ground cumin, dry mustard, salt, pepper, oregano, and whatever else strikes me.  This simpler recipe uses Galena spice rub from Penzey's Spices (www.Penzeys.com) which is a terrific treatment all on its own.

I use a charcoal grill heated with a mix of Kingsford briquettes and hardwood lump charcoal.  Lump charcoal's important as it gives a noticeable improvement to the food you're grilling.  Get a hot fire started with the bricks, then dump on a pile of the lump and get that good and hot before slapping the ribs on the grill.  I've also got a passle of lava rocks in my grill to help evenly spread the heat around.  These are usually for gas grills but I've had great results in my charcoal one.

I also use hickory chunks soaked in water for an hour or so to retard their burning.  Toss one or two large chunks on the fire to give a very light touch of smoke flavor to the ribs.  A lighter hand with the smoke is greatly preferred to piling on scads of hickory and covering up the flavors you get from the meat and spices.

Lastly, toss a few springs of rosemary, sage, or thyme on the fire throughout the cooking.  I've got a herb garden where I grill, so I'll just reach down and grab a bit each time I'm moving the ribs around.  A light hand with the herbs is preferred.  (Skipping the herbs is fine if you don't have any.)

I don't use a gas grill, but the general process will be the same - you'll just have to figure out how use a tray for the smoking chips/chunks, although you could skip that and it wouldn't be the end of the world.

  • Pork baby back ribs
  • Galena spice rub  (www.Penzeys.com)
  • Beer or apple juice or orange juice

Start four or five hours before you plan to serve the ribs.  Coat the ribs front and back with a healthy dusting of the spice rub.  Wrap in plastic wrap and leave in the fridge.

Two hours before serving remove the ribs from the fridge and let them come to room temperature.  (I've generally had better results working with room temp ribs vice cold ones, but it won't be catastrophic if they're not at room temp.)

90 minutes before serving start a medium-hot fire on one side of the grill using the briquettes.  When they're good and hot add the hardwood lump coal.  Place a small aluminum tray right next to the coals and pour in a beer or some apple or orange juice.  This liquid's important to help keep the ribs moist as they cook.  Beer's good, apple and orange juice work fine and lend a slightly different flavor to the ribs.

Sear the ribs over the direct heat, then move them off the heat to the other side of the grill.  Cover the grill and cook for 45 - 60 minutes, moving the ribs around occasionally.  I cooked eight or ten racks of ribs at once on my large Weber by standing the ribs on their sides and frequently moving them from direct heat to indirect heat, making sure that no racks were burning.  You’ll need to pay careful attention if you’re juggling this many ribs at once!

Important: when the ribs are cooked, remove them to a large tray/platter, cover with aluminum foil and several layers of towels.  Leave to rest for 15 minutes.  This resting period is critical because the juices from the ribs settle down and the meat finishes its cooking.

Monday, October 16, 2006

Book Review: Implementing Lean Software Development

Implementing Lean Software Development, Tom and Mary Poppendieck.  (Addison-Wesley, 2007, ISBN: 0321437381)

This book is a great follow-on to the Poppendieck's "Lean Software Development" book.  That book gave readers "an Agile Toolkit" for understanding what lean and agile are all about.   This book is similar to its predecessor both in tone and content with practical examples of what works and what doesn't.  Much of the book is still framed by lessons learned from Toyota's manufacturing system and Mary Poppendieck's experience at 3M. 

That said, the book isn't just a rehash of the earlier, seminal work.  This book seems to have a solid core of how to get the most out of development teams with two sections specific to people and partners.  There are also terrific sections on knowledge-sharing, speed, and how to get the highest quality while delivering in a rapid and lean fashion.  Some things aren't covered at all, such as the fundamentals of value streams or Pareto charts, but those areas are by far the minority.

I’ve seen comments remarking about the lack of anything specific to Extreme Programming in this book, but I think that's missing the point a bit: this book isn't about a specific implementation of agile/lean/whatever, it's about the general approach to the principles of lean development.  The book guides readers to explore what's not working in their own environment and alter bits and pieces to improve production.  An example of this is the closing section to each chapter where a "Try This" section guides readers to examine how their own environment is working or not working.

Folks who have done plenty of reading on agile/lean concepts may not find anything earth-shattering in this book, but it's a terrific read for anyone regardess of their exposure to and involvement in agile.  Well-steeped readers will find lots of head-nodding stories and a few provoking exercises and topics.  Newcomers will have their eyes opened by a wealth of riches.

Huge Regional Event In The Works

Drew Robbins, Josh Holmes, Jason Gilmore, and a passle other folks way smarter than me are working together to put on a huge regional conference in January, 2007. 

What’s the topic?  How about bringing together industry-leading speakers in the Java, Ruby, PHP, and .NET communities for a two-day conference?

The event is CodeMash, and I’m part of the group organizing the event.  We’re swinging for the fence: we’re hoping to bring in 400 – 500 folks to attend somewhere between 35 and 40 sessions put on by top-notch speakers.

How’s this for a starter list of keynote speakers: Bruce Eckel, Neal Ford, and Scott Guthrie?  We’re also looking to nab one of the top leaders at a certain company which has been the predominant force behind Java.  Can’t say more yet because I’m still coordinating with the folks from Sun I mean a certain top company.

The list of speakers will be pretty dang impressive too: think about the weath of riches we’ve got in the region simply in the .NET domain: Brian Prince, Josh Holmes, Bill Wagner, Tim Landgrave, Dave Donaldson, James Avery, and Drew Robbins, just to name a few.  We haven’t even begun to hit the Java, Ruby, or PHP folks yet.

This event is going to be tremendous for a great number of reasons.  First, who wouldn’t want to hit an indoor water park in the middle of January?  Second, the energy at such events is simply stunning.  I was at Software Expo several years ago and it was a life-changing event for me.  Seriously.

Interested in attending?  Our registration site at CodeMash.org will be going live shortly.

Interested in speaking?  Look for a call for papers/abstracts to go out very shortly.

This is going to be sooooo cool.

Dayton DevGroup: New Home!

Heads up to readers who are members of, or interested in, the Dayton .NET Developers Group: We’ve got a new home!

Starting with this month’s meeting on October 25th we’ll be meeting at Max Training’s Miamisburg facility.  We’re excited about the move and are looking forward to our future home!  (Not to mention they’ve got a great pizza source nearby.)

You can find directions to Max’s facility at their site.

I hope to see you at the next meeting!

Friday, October 13, 2006

Yet Another New Technology

I spent Monday through Friday afternoon in the Boston area getting spun up on several interesting new technologies for some future work.  I was there with four other geeks from NuSoft as part of a team getting ready for some implementation and integration work.  We're forming a relationship with a company full of very clever folks who are doing some very cool things with a couple different business rule engines from the folks at InRule and Active Endpoints

I'm still not sure how much I can talk about regarding the main company; hopefully our partnering agreement will let me blog about who they are and how we'll go about solving some very neat problems.

One general issue we're running in to is testing of business rules.  Active Endpoint's product is based on the Business Process Execution Language, an XML implementation/specification targeted at, well, business processes.  It's been a tough concept to get our heads around, but a few things are becoming clearer as we're continuing our work.  I've found a couple interesting things which may offer us some guidance and tool/test framework help:

  • Ben Carey's MSDN webcast on Test Driven Development in BizTalk
  • BizUnit, a framework for testing BizTalk and processes in general
  • Towards a BPEL unit testing framework, a white paper on the Association for Computing Machinery's digital library.  (I still haven't read this one, but the abstract looks promising.)
  • Fitnesse.  I think has terrific potential in that we're able to have the customers specify inputs and expected results for each process -- plus we'll be able to use those test results as documentation.

It was a very challenging week, and we've still got an incredible amount to learn, but I think exciting times are ahead of us.

Sunday, October 08, 2006

SQL Server Restore 101

Need to find out what processes are still attached to your database, thereby preventing you from restoring it?

Use SQL Server Managment Studio and check the Activity Monitor under the Management folder.  You'll get a nice list of all the oddball processes you've got which are hanging on to your db.  Right-click on the leeches and kill 'em off to get your DB in a state where you can restor it to.

(Uh, of course, make sure those procs aren't anything overly important first...)

Thursday, October 05, 2006

iPod Woes: Overcome!

It wasn’t short or easy, but I’ve got my iPod 4G back working from the troubles I’ve already talked about.  It took the nice adapter mentioned on Command-Tab’s blog, plus a combination of SpinRite and WipeDrive.

I popped the iPod’s case apart using a putty knife — you’ll need something thin and absolutely rigid to pop the case.  After that it’s a matter of carefully separating the two halves and folding them apart since there’s a thin ribbon cable connecting the two.  The mini-drive gets separated from its connector and attached to the adapters referenced above.  Now you just need to get an IDE cable and power connector free to hook your iPod drive into.

Eight hours later, I’d successfully run a level 4 pass with SpinRite and used WipeDrive to make sure all contents were scrubbed from the disk.  SpinRite didn’t find any outright bad sectors on the drive, but its reformat/refresh always seems to help out cranky disks.

The bottom line is that my iPod is back up and running, and I’m much happier for it.

Now I just need to get a new receiver in my car so I can jack the iPod directly in.  I’ve got a Belkin FM transmitter which lets me get iPod content into my receiver, but it’s crappy fidelity and you have to constantly change channels if you’re driving any distance.  I’ll be spending some time at Crutchfield to sort out the right unit.  I’ll share that when I’ve figured it out…

Wednesday, October 04, 2006

Two Handy Tips for Coding Windows Services

I've been doing some development on Windows Services the last couple days and found two handy bits of info.

First, always make sure to close the Services management console when you're installing or deinstalling services.  The Services console can keep a handle open on various parts of the registry, causing you grief when your service is being removed.  An attempt to install a new version of the service will give you an error "The specified service has been marked for deletion."

Secondly, if you're working with multiple services in a single executable make sure to add each to the list of services to start:

ServicesToRun = new ServiceBase[] { new NormalMessageService(), new EmergencyMessageService() };

(Sorry about bad formatting -- CopySourceAsHtml 2.0 is giving me some grief today.  I'll get it noodled out.)

Tuesday, October 03, 2006

Want a Free Copy of Our Book? (Rough Cuts Draft Online)

If you’re interested and you’re quick to respond, you can have a coupon giving you free access to our book on O’Reilly’s Rough Cuts program. 

Coupons entitle you to completely free access to the book as long as it’s available on Rough Cuts.  You can even download PDF copies of the chapters so you’ll have a local copy for when you’re offline.

I’ve got eight coupons to pass out on a first-come, first-served basis.  E-mail me via the contact link on the right sidebar. 

Rules of Engagement:

  • I’ve got eight coupons and that’s it.  Once they’re gone, they’re gone.
  • No strings attached.  Of course I’d very much like to hear what you think about the book, regardless of whether it’s good or bad.  Feedback of any sort is greatly appreciated.  It would be cool if you blogged about the book, but it’s certainly not required or expected.
  • Sorry, offer not good for folks who contributed to or reviewed the book — y’all should have gotten a coupon for access already!

So there you have it.  Zap me an e-mail and I’ll shoot the first eight folks a coupon and instructions for its use.

CodeKeep Wins a Great Award

Dave Donaldson, a way smart guy, developed CodeKeep a couple years ago as a wicked cool way to handle snippets inside Visual Studio -- the beauty of it is you're wired up to an online, searchable repository of snippets.  CodeKeep is a thing of beauty and a great productivity booster.

Dave's hard work on a very innovative project was recognized as top dog in Microsoft's Visual Studio Extensibility contest in the add-in category.  Dave says he and his wife are taking advantage of the prize and heading off to TechEd Europe for some geeky fun.

Many congrats, Dave!

Monday, October 02, 2006

Tracking Short Task Lists With SlickRun's Jot

SlickRun is just plain shiny.  You’re seriously missing out if you’re not using it to ease your way of life by launching apps, URLs, folders, and any number of other things with just a few keystrokes.

One neat feature I’d missed in SlickRun was its Jot feature.  Jot is a simple scratch pad that persists between your logon sessions.  It’s accessible via the “Jot” Magic Word, or by the Win-J key combo.  That makes it perfect for me to keep tabs on simple tasks I need to knock out on a development project like in the following shot:

How did I find out about Jot?  Eric Lawrence, SlickRun’s wicked smart creator, was kind enough to write an article on his tool for our book.

Subscribe (RSS)

The Leadership Journey