Thursday, March 31, 2005

Hansleman's List: Services and Executables

More from Scott Hansleman's list of what great developers should know: What is a Windows Service and how does its lifecycle differ from a "standard" EXE? A Windows Service (NT Service, formerly) is a process conforming to Service Control Manager interface rules. (Kalani) It's not just a normal executable started from a command line; a Windows Service must use the Service Control Manager's installer component to register with the SCM. Services are generally console apps with no User Interface. Interactive Services are highly discouraged, especially if running under the SYSTEM context. Services can start before a user logs on, and have a different security context than users. Take care when choosing the account to run a Service. LocalService or NetworkService recommended. (Howard, 2003) (Make sure you read this book for overall security issues, not just Service-related ones.) Services have their own process, or can share a process with other services. A Service can't be debugged directly in Visual Studio using the Run command. A service must first be installed, then started, after which the debugger can be attached to it. (MSDN, Introduction to Windows Service Applications) As for lifecycle, Services are started automatically, manually or programmatically and can be paused or stopped in the same fashion. See MSDN's Windows Service Applications for a good overview and starting point.

User Group Skills Gap

Bill Wagner and Julia Lerman talk about terrific solutions to bridging skills gaps in User Group presentations. (Bill's post here; Julia's here) The prime benefit of good user groups like the one in Columbus (or Cincinnati, although I've never attended it) is the advanced level of material and presenters offered. But what about UG memebers who are entry-level developers, or like myself, moving into .NET development after time in other domains? Bill and Julia's answer is to have a "pre-presentation" before the main meeting. This first session is geared to .NET "newbies" and should dovetail in with the "main" presentation of the evening. I'm working on starting a .NET UG here in the Dayton area. I'm going to keep this in mind as I move forward with growing a local community.

Hansleman's List: Threads vs. Processes

More from Scott Hansleman's list of what great developers should know: Describe the difference between a Thread and a Process? Processes are a single instance of an application. Threads are units of execution within that process. A process has one primary thread, but more may be created by developers. Both processes and threads have assignable priority levels. Windows CE is limited to 256 processes. I couldn't find a trustable source for XP/2003 limits, but I believe it's 64K. The Process class can be used to programatically get information about current processes on a system. Multi-threading brings a host of issues into play, no matter the environment or platform. Synchronization, variable storage and sharing, locking, resource handling, and several other matters need to be addressed. Check out Multithreaded Programming with Visual Basic .NET in Visual Studio Technical Articlesand Threading Tutorial (for C#) in the C# Programmer's Reference Manual. There's also a good discussion of Thread Pooling in the .NET Framework Developer's Guide.

Tuesday, March 29, 2005

Atom Feed Going Away

I'm shutting off the Atom feed from in order to channel everything through my feed. Feedburner will support numerous feed formats without you having to do anything. Just use this link for subscribing and you should be covered no matter what format your aggregator uses. Please leave a comment if you have any problems!

Cake Blogging: Great Birthday Cake

My wife asked for this cake for her birthday. It's the Gold Cake with Grandma's Fudge Frosting from Birthday Cakes: Recipes and Memories from Celebrated Bakers by Katherine Kleinman. This is a terrific book if you're a fan of good cakes. Great, mouth-watering photos, and all the recipes we've tried so far have been terrific.

Organizing Your Life in Outlook

Eric Gunnerson writes about a very useful-sounding book in this post on his blog. Take Back Your Life - Using Microsoft Outlook to Get Organized and Stay Organized looks like a pretty good resource for organizing tasks and work habits. It looks like folks with huge e-mail inboxes should benefit from some strategies put forth in the book -- a goal in the book is to have zero items in one's inbox. You read an e-mail and either delete it, delegate it, move it to a task or file it elsewhere for future reference. What a concept. I've got the book on order through the library and look forward to reading it. My e-mail inbox is tiny these days, but I may get some good tips on efficiently handling mail when I do get back into the workforce.

Psuedo-Quick Mole

Mole is an incredibly complex, rich sauce used in Mexican cooking. There are many regional variants (Mexico's cuisine is just as regional and varied as Italy's) ranging from redish pepper-based to green tomatillo-based sauces. It's a labor of love and really takes up a good chunk of a day to get it right. Moles are used to braise beef, poultry and even fish. There's really no quick way to make mole from scratch, but I cut some corners on a batch of mole yesterday used to braise some grilled chicken for tamales. All this work on a Monday? It was a special request from my wife for her birthday. Who am I to refuse? Rick Bayless runs Topolobampo and Frontera Grill restaurants in Chicago, has hosted a great PBS series on Mexican cooking, and has authored quite a few killer books on Mexican cooking. My mole today was based on his "Apricot-Pine Nut Mole" from Mexico One Plate at a Time. My changes and shortcuts may offend purists, but my wife, mother-in-law, and four year-old daughter all loved it. So there. Jim's Shortcut Mole 6 tomatillos, husked and rinsed 1/4 c. sesame seeds 1/4 c. walnut pieces 2/3 c. dried apricots, coarsely chopped 4 dried ancho chilies, stemmed and seeded 4 dried passata chilies, stemmed and seeded 4 dried mulato chillies, stemmed and seeded 4 garlic cloves, peeled 2 sticks cinnamon 10 black peppercorns 3 star anise 5 whole cloves 1 oz. dark chocolate, broken into small pieces 4 c. chicken broth
  • Pierce the tomatillos several times with a knife, place in a pan and broil for 5 to 10 minutes, turning once, until soft and blackened in spots. Set aside, reserving all juices.
  • In a heavy, dry skillet, toast the sesame seeds until browned. Sautee the walnut pieces until browned, then add to sesame seeds. Chop both in a spice grinder and add to the tomatillos.
  • Add the apricots to the tomatillos.
  • Break the dried peppers into flat pieces. A few pieces at a time, toast in the dry skillet, flipping constantly with tongs, until their insides change to a lighter color. [Bayless's method for this recipe has one deep fry the pepper pieces in lard while other moles of his use dry frying. I've done dry frying for most all my moles with no seeming harm.] Don't let the pieces start to smoke. A bit of smoke is fine, but heavy smoke indicates the peppers are over-cooking and will lend bitterness to the mole. Put the pieces in a large bowl and cover with hot water. Put a dish or plate on top of the pieces to keep them submerged. Let soak 30 minutes.
  • Sautee the cinnamon, anise, peppercorns and cloves until aromatic and just starting to smoke. Grind in a spice grinder and add to the tomatillos. Add the broken chocolate pieces to the tomatillos.
  • Add a little olive oil to the pan, then sautee the garlic until golden brown. Add to the tomatillos.
  • After the 30 minute rehydration, use tongs to transfer the pepper pieces into a blender. Taste the soaking liquid. If it's not bitter, add 2 1/2 cups to the blender. If it is bitter, discard it and add 2 1/2 cups water to the blender. Puree the peppers until they're very smooth. Pass through a medium-mesh strainer into a bowl.
  • Without washing the blender jar, puree the tomatillos (and everything you tossed in with them) in the blender until fairly smooth. Add some of the broth if needed to help buzz things up. Pass through the strainer into the same bowl you had the tomatillos originally.
  • Here's where my massive deviations from Bayless's recipe start. Bayless has you sear the chili puree in a hot pot with a bit of oil, cooking and reducing the puree until it's the consistency of tomato paste. The tomatillo puree is added and likewise seared and reduced down to tomato paste consistency. This process takes about 20 - 30 minutes and adds a great amount of depth to the mole. It's absolutely worthwhile, but I was running short on time, so I skipped the searing and just proceeded on.
  • Add 1/2 of the pepper puree to a pressure cooker. Stir in the tomatillo puree and the chicken broth and mix well. Add in the meat of your choice (see note below), cover and seal the pressure cooker and cook on high pressure for 45 minutes.
  • Remove the cooker from the heat, cool off in the sink. Serve the meat according whatever other recipe you're following. Leftover mole is wonderful as a side sauce. It freezes well and will store in the fridge for a week or so.
  • I braised some grilled chicken in the mole as a filling for tamales. (Tamales are another long process which I'll post on some other day.)
  • You may have noticed I used only 1/2 the pepper puree. Bayless's stock recipe is a bit hot for my wife and daughter, so I cut the amount of hot stuff in half. The remaining puree freezes very well and is a terrific resource for other cooking. Use a bit of the puree in the next batch of chili you make. You'll find it lends amazing depth!
  • Pressure cookers are great stuff. I use a Fagor similar to this one and love it. You can get results in 45 minutes which taste like you braised something all day.

Monday, March 28, 2005

Smart Testing Posts

I stumbled across Josh Ledgard's blog via James Avery's. Josh Listed a few of his best testing posts here. Josh's posts are from 2003, but they're still must-read for anyone serious about good testing. The "Good Tests for Bad Parameters" is especially killer.

Daily Studies: Hansleman's .NET Developer Knowledge List

Scott Hansleman posted a terrific list of topics great .NET developers ought to know. I've decided to work my way through that list as part of my ongoing studies. My goal is to hit one topic per day and do some actual research to prove or disprove my knowledge. I also want to compare and contrast (shades of my Lit classes!) these topics between .NET and other envrionments such as C++, Java or perhaps even Perl. Researching to confirm what I know and don't should lead me down some interesting paths via the resources I'll use. I'll post references to what I'm finding along the way. Comments will be welcome, but I'm not sure how many I'll get since my Mom's the only one reading this blog. Heh. More on a daily basis as I work through the list! UPDATE: Fixed the busted link above.

Recent Music Finds

A couple good music things I've found in the last week:
  • CD 101's stream. Great alternative radio station in Columbus.
  • Radio Paradise's stream. Nice mix of various rock, some alt but nothing seems too far out on the edge.
  • Dainbramage's stream. Mainstreamish mix, good stuff.
  • Radio.Wazee's stream. Best stream listed for my tastes. Responsible for the next two finds.
  • Speaking Confidently from the Cowboy Junkies' Lay It Down. I've always been struck and haunted by Margo Timmins's voice, plus the rest of the music's good as well. I've got their Black Eyed Man album and may have to chase down this one as well.
  • Nil Lara's self-titled debut album. Great rock with Cuban and Venezuelan influences. The bio on his website makes for an interesting read. Amazing how anyone who studied microwave analysis can create such emotional, passionate music.

Sunday, March 27, 2005

Technology: Broadening My Music & Views

My wife spoiled me with a terrific gift this last Christmas: a 20GB iPod from HP/Apple. (I note they're no longer available. No clue why, but other 20GB iPods are still listed on Amazon.) I've found myself rediscovering great music I'd forgotten I had, including Warren Zevon, Midnight Oil, The Call, Delbert McClinton, Desperado from the Eagles, John Hiatt, and some old Santanna among others. I'd forgotten about all these CDs gathering dust on the rack across the room. Forgotten, that is, until I got the iPod and started loading all my CDs into iTunes's library where I can easily and quickly listen to all these while working on my computer, in my car or out for my infrequent jogs. I most likely would never dug through the CD rack digging out these unless I'd gotten the iPod which can hold all the CDs I own, plus more I can download. Also, thanks to this amazing little widget I've begun to seriously broaden out the types of music I listen to. James Avery's Top 10 list for 2004 was a good asset, and he was nice enough to point me to Pitchfork, an interesting-looking source of music reviews. I'm also enjoying streaming music from alternate sources such as Energy X, Radio Paradise, DainBramage, and a couple others. I wouldn't ever had exposure to these without hooking up to this neat, new technology. On a similar but different line, technology's responsible for me broadening my views. Blogs and commentary sites have provoked me into reexamining some of my fundamental beliefs in politics and society as a whole. I won't bore the two readers of my blog with the details, but suffice it to say I've moved to a more libertarian position on many things. I wouldn't have made this change without reading sites like National Review Online, Instapundit, Daniel Drezner, Neal Boortz, and a few other political/social commentary sites/blogs. All of which brings me to what I think is a silly post by Andrew Sullivan. Sullivan says that "Americans are beginning to narrowcast their own lives. You get your news from your favorite blogs, the ones that won't challenge your own view of the world" and goes on to say much the same about music. I find this particularly ironic since Sullivan was responsible for me changing my views on homosexuality. (My views aren't easily distilled into a four word phrase which will fit on a bumper sticker, so I won't bore you with a long discourse right now. Maybe later.) Reasoning like this is exactly why I stopped reading Sullivan's site long before the last election. (I didn't find out about his 20 Feb post until weeks later through another news source.) Certainly many folks use the incredible advances in technology we're seeing to consume the same sorts of news and music that perfectly line up with their existing views. That said, I think that most folks view these exciting changes as enablers for them to expose themselves to new things. I think technology holds incredible potential for exposing consumers to a much broader, more accurate picture of the world than we're able to get now from current media. Better informed and better educated members of society are a Good Thing. Maybe I'm too optimistic and naive, but that's how I see things. So there.

Friday, March 25, 2005

Wednesday, March 23, 2005

Great Interview with Mono's Founder

O'Reilly's has a great interview with Miguel de Icaza, the founder of the Mono project to bring portions of .NET to the Linux platform. De Icaza hits many interesting topics including Mono's use for providing good class libraries in the compact framework environment, cross-platform issues, component development with C# in Mono, etc. Take a gander at the article. It might stimulate a few grey cells and remind folks that Microsoft's OS isn't the only platform for .NET. (Via Slashdot)

Tuesday, March 22, 2005

For My Buddy Scott:

Spam! (An old, good friend and I have a long-running banter. If you haven't seen Ford Fairlane, give it a try, but not if Andrew Dice Clay offends you.)

Monday, March 21, 2005

New Speakers!

Today I picked up some Logitech X-230 speakers for my computer. They only cost $55 at Best Buy and I'm really pleased with their sound. They're loud enough that I'm able to listen to music in the kitchen while streaming audio or my iTunes is playing on the PC in the next room. Nice thumping base from the subwoofer, very balanced sound from the speakers, especially after tinkering around with iTunes's equalizer. Good stuff! I'm listening to some Baba O'Riley right now and diggin' it a whole lot. My eight month-old son seems to like it as well, although he's just as interested in chewing on the tires of his toy trucks, so that may not be a great indicator. What's surprising is that I didn't do my usual anal-retentive extensive research and painful pondering before spending my hard-earned discretionary funds. I've known I wanted some decent speakers for the computer in my work area, and I'd looked a bit at Logitech's setup before, but I didn't troll or before dropping my money today. Boy, next thing you know I'll be doing something crazy like buying King Arthur flour when it's not on sale. Wait, I do that all the time.

Thursday, March 17, 2005

Change Is Good Update

My post "Change Is Good" prompted a friend I'd worked with to send me a good-natured mail pointing out that he was one of the Good Guys and not part of the conspiracy to kill off a great system. Re-reading my post, I realized I left off several important notes regarding my work, specifically in the company I was with from August, 2003 until last Friday: I did indeed work for a couple great customers who wanted to get the right thing done. Unfortunately, they were handicapped by politics far outside their control. Like that's never happened to anyone else before... I was indeed able to briefly work on a couple amazing projects with some downright brilliant folks. One set of folks were designing and implementing some incredible electronics and computer hardware to read data from aircraft avionics buses. It amazes me to be around folks who casually talk about building their own circuit boards to handle network or modem interfacing. Whoof. Another group of folks were implementing binary translation software to host compiled executables on completely different architectures and operating systems. These guys were actually remapping and reordering processor instruction calls to eke out the utmost in performance from the rehosted application. Falling to my knees while crying "I'm not worthy" just doesn't seem sufficient. Unfortunately, my opportunities to work with (and more importantly learn from) folks like this was limited both by my requirement for telecommuting as well business opportunities in the company which just didn't pan out. My post was far from sour grapes; rather it was an affirmation of looking forward to the chance to change direction in my life.

Near-Term Goals

Goals are important things. Without them, life is far too unfocused and too much time gets wasted. Without further ado, here are several of my near-term goals for the next couple months:
  • Re-read Lord Of the Rings.
  • Re-read The Hobbit.
  • Watch the entire Firefly series again. You're really,REALLY missing out on something if you haven't seen this series and you're a science fiction fan. Terrific plots, deep and complex characters, plus it's a lot of fun to watch. Science fiction meets westerns and all in a realistic, entertaining fashion. Too bad the dorks at Fox cancelled the show in its first season.
  • Read Lowy's Programming .NET Components.
  • Work through the problems in Bently's Programming Pearls.
  • Knock off at least one MCSD test by the end of April.
  • Get my rose garden in shape.
  • Take the next step in squirrel-proofing our garden shed. (Or at least limit the damage the little bas#$%@s can do.)
  • Put down Pergo flooring in our computer room.
  • Try and get my eight month-old son to laugh more when I tickle him then when his sister does. I can't believe I'm jealous of my little daughter, but there you have it.

Wednesday, March 16, 2005

Bread Blogging

Yesterday I baked a great loaf of bread: Multigrain Bread Extrordinaire from Reinhart's The Bread Baker's Apprentice. This bread is a mix of corn meal, oats, wheat bran, brown rice, and flour, sweetened with just a bit of honey and brown sugar. It's made using the "soaker" method, where some of the ingredients (corn meal, oats and bran in this case) are soaked in water overnight to activate some of the critical enzymes which deepen flavors. Also, I used a cup of amaranth flour in place of regular flour, my first use of this grain ever. End result? Killer bread. The corn meal, even though it was softened via the soaker, still lent a noticable crunch to the loaf. Plenty of rich flavors, a beautiful crust and dense crumb. It makes wonderful toast, too. Reinhart's book really is a terrific resource if you're a bread lover. The opening chapter on the intricacies of what happens during the bread making process may seem intimidating, and the recipes themselves seem complex, but everything actually makes sense after you've read it and have baked a loaf or two. The instructional style of the book is a great help, too -- but this isn't a surprise since Reinhart is a long-time baking instructor. Most importantly, the recipes work and make great bread! (Unlike Leader's Bread Alone, which seems to be full of tempermental or flat-assed wrong recipes.)

Friday, March 11, 2005

Change Is Good

On his blog, Drew Robbins talked about inviting change into his life, resulting in a terrific job opportunity for him. Alex Lowe made a big job change to help him focus on his family life. Change is sometimes negative, but I'm a firm believer that one's attitude frames how change will impact their life. Enough Dr. Phil-like blabber. I'm happily entering a major change in my work situation. My employer since August, 2003, decided to change their telecommuting policies, eliminating my opportunity to work from home while juggling child raising needs. I was forced to chose between putting our kids in daycare all day, or leaving the workforce until I could find another position with the same flexibility. The choice really wasn't all that tough. Today was my last day of work and I'm honestly looking forward to the next several months. I'm leaving a position which had offered me few chances to do interesting technical work: For the most part I'd spent the last 18 months doing proposals, white papers, customer support and very rudimentary process analysis work. Before that, I had a miserable two years of test engineering and trying to manage customer relations for a group of developers and customers who were between them conspiring to drive an amazing system into the ground. All in all, booring and miserable stuff for someone who is more interested in actually creating things. This break in work gives me a chance to update my technical skills and get more involved with the developer community. I'm hoping to even get a .NET users group started in my area. During that time I'll continue to search for a neat job which will let me do telecommuting, at least until my wife retires in 18 months and I can move to a full-time, onsite position. Yes, I'll miss access to some neat tools and hardware provided by the company, but I've been out of work and equipment-poor before and still managed to finish off an MCSE despite that. Most importantly of all, this break gives me a chance to recharge my batteries and reconnect with my family. Change. It's a Good Thing.

Thursday, March 10, 2005

The Power of Brainstorming

I've been working my way through The CRC Card Book, a great text on using index cards, brainstorming and role play to find and refine classes in a system you're designing. The brainstorming section has some key points on facilitating good brainstorming sessions, plus there are three very good scenarios or case studies in novella form showing how a well-moderated set of sessions might run. I've had access to the Rational Unified Process (RUP) for the last 18 months and have been a fan of some of detailed guides they've got. Brainstorming plays a large role in things like Use Case Workshops or Class Discovery Workshops. I had very good success using their Use Case Workshop as a guide when trying to flesh out a possible system I was working on -- and that was using that guide by myself in a single-person brainstorming session! RUP can be a ponderous, confusing system to work under, but the RUP toolset really is a great reference to have around. (Aside from it's stupid dependency on a very specific JRE version. I've got JRE 1.4.5 loaded and RUP will only run with 1.4.0. Thanks, dudes.) My jobs over the last few years have kept me out of any real brainstorming sessions (whiteboard BS sessions with my current boss excepted) and I'm beginning to realize how much I've missed them. There's something incredibly motivating about having participated in a successful brainstorm session with a small group of folks. I also admire great facilitators/moderators/leads who keep things rolling with artful skill. Hopefully I'll find opportunities to get more involved with this kind of neat creativity in the future.

Hungarian Notation

I played around with Hungarian notation some years ago in hobby projects I worked on, but never used it on any of the projects I've been involved with. I think Eric Gunnerson's post hits it on the nose: "...Hungarian works okay for C code, but when you get into the object oriented world, you can't really come up with prefixes that are both meaningful and short". More on the same topic here (good examples) and here.

Great Coding Standards

I'm a fan of reading coding standards from different organizations. I find the differences educational, plus some companies/groups put a wide range of topics in their standards. iDesign's standards are a great read because their standards also cover architecture, component issues and even delve into settings for VS.NET. These folks are truely industry leaders and their standards are very educational.

Wednesday, March 09, 2005

I Do Too Read Liberal Blogs

I tend to think of Dennis Miller's line as a good description of my thoughts: "I don't care if two guys want to get married. I have a problem if some terrorist wants to blow them up." During the election I had a homemade bumper sticker which read "Bush/Cheney -- the other guys stink even worse!" I'm somewhat more complex then that, but you may get the drift. The political blogs I've listed on the side bar are mostly right-leaning blogs (if you think Instapundit is a hard right-winger then you haven't been paying attention to him), but I do like reasonable, non-shrill left blogs as well. (Reasonable and non-shrill are why I have a blogroll category of "Blogs I Used to Read But Now Think Are A Waste Of Time".) Jeff Jarvis's BuzzMachine is a reasonable, non-shrill liberal. He's got a way with words which I really like. Here's a snippet about Paul Wolfowitz, the man the left loves to hate "If you don't like the way Wolfowitz is trying to spread freedom in the world, then try to find new ways. But standing back and not trying is not acceptable. Freedom is the best cause of all." Here's a Jarvis blurb on how the press should be more open with how they produce the news: "Show people how the sausage is made." Makes my stomach twist to think about that, but it's a great line all the same. Take a moment to stop by Jarvis's site if you're interested in thought-provoking commentary along some lines you might not be used to.

Tuesday, March 08, 2005

Good Bread. Yum!

Here's a picture of three loaves I baked today: a baguette, epée and batard. I've made plenty of baguettes and batards before, but this was my first attempt at an epée. Epée translates to "sheaf of wheat", which I think is pretty apt. It looks way cool, is terrific for fellowship around the table since you just tear off hunks as you pass it, and has the final bonus that the crust-to-crumb ratio is fairly high. A good thing for folks who love crust!
A nice batch of bread! Posted by Hello (Note: Epées normally don't have a bite out of the end. Blame my daughter. Honest.)

Bad News!

I was reading Michelle Leroux Bustamante's blog and saw she only rated 45 on the Nerd Score. I had to check what my own rating was. I am nerdier than 94% of all people. Are you nerdier? Click here to find out! Depressing, no? Still, how many nerds scoring 94 can make award-winning Heritic Chili, bake killer loaves of bread, put down 900 square feet of Pergo laminate flooring and keep a compost heap in their back yard? (Not to mention work from home while juggling diapers, laundry and a mop?)

Testing Large Code Bases

Keith Stobie's article on testing large systems is a good read, but only if you're pulling out bits and pieces of the article. I thought the piece was a bit rambling and without a coherent thesis, but there's good coverage on several topics all the same. Stobie seems to somewhat throw up his hands regarding "handcrafted" tests for large systems as being too cumbersome. He uses an example of trying to test square root values for 32- and 64-bit machines as being completely unreasonable in that it would take 584 years to run at one nanosecond per test. Much of the rest of the article stuck me in the same bent: testing methodology "X" won't work for large systems because of reason "Y". That's fine and might even be true, but I don't think one tool works for every situation. Constructing a solid system requires a well thought out test plan specifically addressing test requirements at all stages. Assertions ought to handle specific situations in the code itself. (See Maguire's book.) Unit tests need to hit boundary checks as well as input verification and 100% branch testing. They should also do some sanity checks by blasting the system with very large over- or undervalue situations. Integration tests need to be well-designed to check component interractions and verify functionality boundaries. (See Kernighan and Pike.) Acceptance testing needs to be tied closely with requirement verification. Finally, any large system needs a couple SOLID testers who do nothing more than random bashing of the system in attempts to break it. (See Whittaker.) "Users wouldn't ever do that particular action!" Horse puckey, and deep down you know it. I did like Stobie's point on code coverage != quality. Fixating on coverage buys you nothing if you haven't first laid out a solid testing strategy (boundaries, branches, etc.), or if you've badly implemented those tests. Code coverage will point out to you places you've missed implementing tests for. Code coverage is a tool, not a panacea. More fundimentally, a well-tested system uses all of these various methodologies. It's even more important as a system gets larger.

Monday, March 07, 2005

Provoking Criticism on .NET

Richard Grimes's farewell column in Doctor Dobbs Journal is a pretty provoking commentary. My exposure to .NET is rudimentary at this point (I'll be getting much deeper into it over the next few months), but some of the central points Grimes makes really ring true to me. Yes, I'm excited about the technology and power .NET brings to the development process, but too much of .NET seems to have been shoved out the door with rubberstamp approval rather than serious thought from the get-go. Grimes's comments on the cumbersome framework and VB.NET are blistering, as are his insights on underlying technology. Dr. Scott Meyers made some similar comments during his presentation at SD Expo West in March of 2004. He pointed out some silly, confusing (I'd say idiotic) inconsistencies in basic things such as having Array.Length vs. ArrayList.Count. Would it have been too much to ask that simple standards have been set at the start of the effort? I guess these folks didn't read their McConnell. There's a very interesting response on the blog of Dan Fernandez, Microsoft's C# product manager. Richard Grimes has a very good response in that blog entry's comments. (via Slashdot)

Sunday, March 06, 2005

More Vacation High Spots

I missed a couple key high spots during this morning's post:
  • A flexible infant. Our almost-eight-month-old son was terrific the entire trip. He'd get fussy during our park excursions, but would settle down and snooze in my arms for 30 or 45 minutes, then wake up happy and ready to go. We're lucky parents, especially considering our daughter's just as flexible and is happy to eat just about anything on the planet. (Although I'm a mite distressed about having to fight her for sushi and olives.)
  • Seeing Off Kilter perform at Epcot's Canada exhibit. Five guys in kilts with a funny act and terrific music. Their website has a few snippets of their killer music. Check out Alive from Celtic Armadillo. My son thought their music made a great lullabye and fell asleep during their act. (Might be one reason I like Alive so much...)

Code Complexity

Mark Miller's post on code complexity is a great discussion on code metrics. "Cyclomatic complexity" is a nice starting point for looking at how ugly software can be, but Mark discusses how "CC" isn't a wide enough picture. I like the detailed values he gives metrics in his post, but I'd disagree with his thoughts on weighting comments. Yes, comments must be read and maintained, but if you're using comments as a "why" instead of "how" (again, read your McConnel!), then comments help to reduce complexity, not increase it. Overall, though, this is a very minor quibble in the context of the great depths to which he goes for weighting code complexity. Check out the tools referenced in his post. DXCore is free, as is the plugin for generating metrics. Unfortunately, the zip file pointed to on SourceForge appears to be corrupt. Hopefully that will be fixed quickly, because I'd like to get a fast look at this toolset. I've also been very happy with Anticipating Minds' devMetrics , a nice tool for a quick exposure of cyclomatic complexity. Their Comunity Edition is a free plugin for Visual Studio. (Hat Tip: Alex Lowe)

Vacation's Over

We're back from a (mostly) restful week in Orlando. The weather wasn't particularly great, but it was better than the cold in Ohio! We had a bunch of great meals at Emeril's Tchoup Chop and several Disney World restaurants: California Grill (Contemporary Resort), Coral Reef (Epcot's Living Seas), and the Santa Anna (Epcot's Mexico). We also found two new good ones: Le Cellier (Epcot's Canada) and Jiko (Animal Kingdom Lodge). Low spots:
  • Espresso in the Orlando area. Nobody, including most all Disney restaurants, seems to know how to pull a decent shot of espresso. A double espresso is two ounces and should be served in a demitasse. You know it's going to be dreck when the waiter brings out a coffee cup nearly full of "espresso".
  • Thursday's rainy, COLD weather.
High spots:
  • Thursday's rainy, COLD weather which meant we got to have as many rides as we wanted on the various Fantasyland rides my four year old daughter loves. (Note to self: Remember that eight consecutive fast and furious rides on the Mad Tea Party's spinning teacups leaves you as queasy as those youthful mornings after too many flaming drinks.)
  • Espresso at the stand in Epcot's Italy, but only when you're lucky enough to get one of the few staffers who knows how to pull a decent shot.
  • Leaving Jiko's after a great meal, walking to the overlook and seeing Kudu grazing at night in the Animal Kingdom's refuge.
  • Better: Having your four year old daughter spot the Kudu far off in the murky darkness, tell you to be quiet so the animals won't get scared off, then have the animal come within 100 feet of the overlook you're at..
Now it's back to the wonderful, crazy everyday reality of life here!

Subscribe (RSS)

The Leadership Journey