Thursday, September 08, 2005

"Head First" Book Sometimes Makes My Head Hurt

I’m helping out with a study group for "Head First Design Patterns," which just finished chapter 6. On the whole, it’s a pretty good introduction to software design patterns – way more accessible than the seminal work by the Gang of Four; however, the examples sometimes make my head hurt. I can’t imagine what they’re doing to the heads of the beginners in the group. Coming up with decent examples is the hardest thing to do in expository writing, and I certainly give the authors an E for effort in creativity, but I wish they had been a little less concerned with making their examples "hip" and a little more concerned with making them appropriate.

To wit, the whole pizza store analogy in chapter 4 (to illustrate factory method and abstract factory) is flawed. For one thing, that’s just not the way you’d model a pizza business in any actual software that I can imagine. For another, the differences between a New York pizza factory and a Chicago pizza factory are too subtle/trivial to make for an effective illustration of why you would need to subclass anything (much less use a factory to manage the subclasses). A much better example, as everyone in my group agreed, would have been an application that needs to offer up a consistent set of functionality to users who are accessing it in wildly different ways: one’s in a web browser on a desktop, another is running a cell phone app, another is using a touch-tone phone, and yet another is using a voice-activated headset. All the client code knows is that, for example, it needs to ask a multiple-choice question and obtain the answer. It’s up to an abstract factory to provide the client with a set of classes that can do that, in the context of the selected user-interface, in whatever way is necessary.

To a lesser degree, the Starbucks coffee example at the beginning of the book suffers from the same too-hip-to-be-effective syndrome, although I do think that the remote-control example for the Command pattern in chapter six is dead on.

For any novice who is reading this book without the benefit of a study group, I highly suggest that you find at least one other programmer who is experienced in design patterns to explain why/if/how the examples are lacking.

Wednesday, June 29, 2005

Wax On, Wax Off – Red Bar, Green Bar

TDD has become as automatic for me as breathing. It’s a beautiful thing when you get to start a new project from scratch and can write every line of code test-first. These days, however, I’m working on a legacy app with very little in the way of unit tests, and it feels as if I’m working at 5,000 meters above sea level and struggling for every breath of rarified atmosphere.

So I can only imagine how it seems to the rest of my team, for whom automated unit testing is a new concept. The level of drudgery involved in retrofitting a legacy app with a test harness rivals the chore of waxing Mr. Miyagi’s deck. All I can tell my teammates is that it’s good practice. Soon, writing unit tests becomes a habit, and then, eventually, it becomes pure instinct. Attack from the right? Wax On! Attack from the left? Wax Off! Add a new feature? HTTP-Unit! Change a business rule? JUnit! Keep it up, and that black belt will arrive in no time.

Wednesday, June 22, 2005

Copying SQL Records within the Same Table

I discovered a neat trick for copying a record, or set of records, within the same SQL table today. For example, say you have 20 employees listed in department A, and you want to clone all 20 records to also be listed under department B.

You may or may know that this can be done with a single INSERT INTO statement if you use an embedded SELECT statement in place of the VALUES clause. The hard part is that you cannot just use SELECT * FROM table WHERE ... becuase the * would pick up the key field (e.g. DepartmentID) along with all the rest. So, you have to list every field in the table by hand, except DepartmentID. You would specify the new value as a constant ("B") instead.

The "trick" is that you can probably find a tool that will generate the INSERT and SELECT statements for you. In my case, I'm using the Query Analyzer that comes with Microsoft SQL. In the explorer pane, navigate to the table. First, right-click and choose the option to generate an INSERT script and send it to the clipboard. Paste it into your favorite editor. Next, right-click and choose the option to generate a SELECT script and send it to the clipboard. When you paste this snippet into the editor, do it so that it replaces the VALUES... part of the INSERT statement. Finally, change the field name of the key field in the SELECT statement to the appropriate constant.

The Cobbler's Children Have No Shoes

This blog is back. It's been offline for far too long -- a case of me being so busy working on software projects for other people that I haven't been able to keep my own stuff going. Anywho... Things are starting to settle down, so you can look forward to more of my endearing, but not necessarily enduring, wisdom to come.

Wednesday, February 16, 2005

"Building WebApps with Tapestry" - 2/22/05 7pm

My business partner, Vladimir Drndarski, will be speaking on Tuesday, Feb 22 at 7pm in the city of Orange on the topic of Building WebApps with Tapestry. This will be at a meeting of the Orange County Delphi Users Group, although the topic has nothing to do with Delphi, per se. OCDUG meetings are free and open to the public.
Here is the official meeting announcement:
This month Vladimir Drndarski of Maxim Software Corp. (www.maximsc.com) will show how to build web applications in Java using the Apache Tapestry framework (a JSP alternative). As a recent convert from Delphi to Java, he'll introduce the topic from the ground up focusing on freely available open source projects that'll get you started quickly and for free. To start, Vladimir will show the Eclipse IDE and compare it to Delphi. He'll then discuss several Eclipse plug-ins that are must haves when working in Tapestry. And finally he'll delve into Tapestry itself. If time permits Vladimir will give an overview of the Hibernate persistence layer and give a quick demo of its use in Maxim Software's latest website, Oovie.com.

Vladimir Drndarski is co-founder of Maxim Software Corp. and the co-creator of Oovie.com (www.Oovie.com) and CollectorStreet.com (www.CollectorStreet.com).

The OCDUG meetings are held at Red Brick Software, 1301 East Lincoln Avenue, Orange, CA 92865. [Directions]

Saturday, January 15, 2005

Pres. Lincoln's Farewell Address

The "Great Moments with Mr. Lincoln" attraction on Disneyland's Main Street is going away on Februrary 22 (the day after President's Day) to make room for a special exhibit celebrating Disneyland's 50th anniversary, and our favorite audio-animatronic won't be giving his rendition of the Gettysburg Address again until Autumn 2006. So, if you haven't seen Great Moments lately, be sure and catch it this month -- especially if you haven't seen it since 2001 when the 3D audio effects were added and the whole tie-in with Mathew Brady's glass plate photography was included in the story. This is a great attraction to catch on your way out of the park. They always run it one last time after the official park closing. So, put on your headphones, have a seat, enjoy the show, and wait for the exiting crowd to die down. Who knows? You and your kids may even learn a thing or three about US history in the process.

Saturday, January 01, 2005

Orange County Poker Meetup

Happy New Year. One of my New Year's resolutions is to play more poker, and to that end I would encourage any and all poker players here in Orange County, CA to attend the Poker Meetups every third Tuesday. We don't actually play at these. We just meet and talk, and arrange for games at other times. I usually bring whatever poker books I've been reading to pass around and we always have some terrific discussions. So, get yourself registered on meetup.com and then RSVP for the next poker meetup.

Friday, December 17, 2004

Announcing CollectorStreet.com

Check it out! The CollectorStreet.com web site that Vlad and I created is now open for business. Do you know any collectors? Please do them a favor and spread the word that we're kicking off by giving away free classified advertising space to anyone who wants it. Thanks.

Click here to see some example ads (items that I am personally selling).