You'll Never Know Enough

Now he would never write the things that he had saved to write until he knew enough to write them well. Well, he would not have to fail at trying to write them either. Maybe you could never write them, and that was why you put them off and delayed the starting. Well he would never know, now.

-- Ernest Hemingway, The Snows of Kilimanjaro

I've been working my way through The Complete Short Stories of Ernest Hemingway, and this quote nailed me. I have half a dozen unwritten stories and a dozen unwritten blog posts. I delay writing about technical topics until I know more. I defer penning my fictional fancies for fear of screwing up what seems to me to be a decent idea.

I imagine there's a more knowledgeable, more experienced version of me just waiting to take up the topic at some point in the future, but the reality is he only gets that way through the "practice of." In Kilimanjaro, Harry dies never knowing if he was competent to write the things he planned to write or not. Here's hoping I don't do the same.

My current strategy (at least for the blog) is to write less on any given topic but do it more often. Any other ideas?

Book Review: Drupal E-commerce with Ubercart 2.x

Developing Ubercart was a wonderful experience. I learned a lot about software development, Drupal, web technologies, and worldwide communities. At the end of my time leading the project, I could also see that thousands of people were using the software to sell products for profit, bring people together at events, and raise money for many worthy causes and organizations. Seeing now a book written to help even more people do these things is an added treat.

I was asked to review Drupal E-commerce with Ubercart 2.x published by Packt and received an e-book and three physical copies to give away at DrupalCon San Francisco. I started reading the e-book on that trip and finally finished on the plane home from DrupalCamp Colorado.

What follows is my review with a chapter by chapter analysis of the content. What I saw was very encouraging, and I applaud the authors, George Papadongonas and Yiannis Doxaras, for their effort in delivering this work to the community. My review picks up on what's great about the book, what could use some work, and who I think would benefit most from owning it.

Before the in-depth analysis, here's a quick summary:

  • This book provides a very comprehensive look at Ubercart's major core and contributed features, modules, and themes (free and commercial). It's the most expansive summary of all that Ubercart offers I've seen. The value in this exposure can't be overstated, and it's for this aspect of the book alone that I'd recommend it to anyone diving into building e-commerce sites with Ubercart.
  • The book includes chapters and content introducing the user to Drupal itself. I suppose this was to make it a standalone resource for building e-commerce sites on Drupal, but I think the book would have benefited from a sharper focus on Ubercart itself. Referencing one of the many general Drupal books, even titles published by Packt itself, would have been sufficient for topics such as installation, search engine optimization, and theming.
  • The book introduces all of Ubercart's features but doesn't often address the reasons for a particular feature's existence or the best practices for implementing it. For example, chapter four could have provided a lengthier introduction to product attributes so readers have a fuller understanding of the reasoning behind the system, when and how to use them, and what to look out for (like losing adjusted SKUs when attributes are modified on a product). If the book were made shorter by removing the general Drupal instruction, the content could easily be made up in those sorts of discussions.
  • In other areas, the discussion is particularly well thought out and helpful. I thought the payment discussion was great.

Read on for the chapter by chapter summary and review. As I said in the first point, I'd recommend this book to any newcomer to Ubercart. Experienced users might not find much new here but could still employ the book as a desk reference. Anyone looking to write modules and customizations for Ubercart won't find much here - but that wasn't really the point of the book.

For more information, resources, and errata, you should refer to the book's own website,

Chapter One: Getting Started

The first chapter provides a quick introduction to both Drupal and Ubercart that hits all the high points of using the software to build your store. It then takes the approach of showing the end product first - there are screenshots and a feature walkthrough demonstrating the store that the reader will build by the end of the book. Good idea!

Chapter Two: Installation of Drupal and Ubercart

The second chapter covers installation of both Drupal and Ubercart and should successfully guide a newcomer with some technical experience through the installation process. If anything, it might be a little too thorough. Because the book isn't really a Drupal primer, many of the details and "gotchas" for general Drupal installation could have been left out entirely. Furthermore, instructing readers to download Ubercart from instead of seems risky, as the Ubercart downloads page has a history of lagging behind releases.

I was impressed that the book included a section on the UberDrupal installation profile, and in the first update of the text it would be good to mention that now automatically packages distributions based on installation profiles that include all the necessary modules. To install Drupal and Ubercart now, one would simply have to grab the latest distribution from ... but now I'll need to go make sure all the modules in that package are up to date!

Chapter Three: Basic Configuration

The third chapter runs through various administration pages and configuration forms describing what a lot of the forms and settings do. As with the previous chapter, I would've left the general Drupal information out, but the chapter doesn't suffer from having it in there. The main problem with the approach as I see it is the chapter introduces all the various Ubercart settings, but at this stage in the book they're divorced from any greater context. Descriptions of some of the settings aren't helpful without greater knowledge of how Ubercart works in general, so the discussion would have fit better in a chapter specifically introducing the topic (e.g. introducing order panes, invoices, and settings in a chapter on Ubercart orders).

Chapter Four: Managing Categories, Products, and Attributes

Chapter four is spot on when it begins by emphasizing planning. Ubercart offers multiple ways to simplify product catalog creation and administration, and the authors provide a good overview of how to get it done. I was pleased to see a description of product classes, but it would have been greatly improved by a discussion of how to take advantage of their default attribute settings. Those sorts of tips should save store administrators plenty of time.

I did feel like the introduction of Tagadelic was a little distracting and might recommend placing all the contributed module discussions in the later chapters on customizing / optimizing the store. I also think it would be helpful for the order of the information to be adjusted, so that readers are instructed on how to make attributes and product classes before bothering with information on product kits and especially product importing (as that will often require classes and such to be configured in advance). In fact, given the poor support for product importing in general, I'd almost want to just punt that whole section off into an Appendix or at least a separate chapter where the pitfalls and strategies for the topic can be addressed.

Chapter Five: Managing Shipping and Packaging

Chapter five introduces the configuration of shipping quotes and Ubercart's limited product packaging functionality. It includes a brief description of the Conditional Actions system, but in my experience with training, there is not near enough material here. You could really include an entire chapter on navigating the CA interface, explaining the concepts, and walking through screenshots of setting up predicates. Most people won't understand how to add conditions and actions, especially when it comes to grouping, logical operators, and argument selection. While I wouldn't expect an introductory book to be a full manual on the system, the instructions and few screenshots scattered through the chapters seem insufficient for getting started.

Chapter Six: Managing Taxes and Payments

Chapter six covers taxes and payment, two essential parts of any online store. Figuring out taxes is one of the trickiest things for any online store, especially stores selling physical goods across multiple tax jurisdictions. The chapter provides a sound overview of Ubercart's tax features, but this is one of the rare places in the book where appropriate contributed modules aren't mentioned. Users should be aware of tax modules providing out of the box support for specific tax jurisdictions (like some countries / states) and VAT.

The payment discussion shines in this chapter as one of the most thorough and helpful of the entire book. It includes a lot of the background information and best practices instruction that I felt would've benefited other discussions in the book. Many readers, especially those new to e-commerce in general, will find the payment section extremely helpful.

Chapter Seven: Managing Customers and Orders

Chapter seven begins with a helpful introduction to the order management features of Ubercart, including a nice explanation and graphic explaining the difference between order states and statuses. The chapter is full of screenshots and instruction for administering orders and reminds me that in spite of Ubercart's limitations, there's still quite a lot you can do with it.

The chapter does mostly gloss over the packaging and shipping features on order screens, but those are seldom used features and the mention seems sufficient. Readers should get a firm grasp on how to create and administer orders from this thorough chapter. There are some minor errors in the chapter, like saying that Ubercart's reports depend on Views (they're actually stand alone and worse off for it), but nothing that should confuse newcomers to Ubercart. Also, the chapter helpfully introduces readers to CiviCRM but fails to mention how to setup an ongoing integration between it and Ubercart using the contributed integration modules.

Chapter Eight: Customizing the Frontend

Chapter eight is something of an enigma. It's full of useful information, but it feels more like a brain dump of the many ways to theme a Drupal site (from free and commercial themes to rolling your own using Zen or from scratch) than actually customizing a frontend for an Ubercart store. I'd expect to find information on theming product pages, the shopping cart, the checkout form, and order invoice templates. Instead, the chapter offers many different ways to prepare a custom Drupal theme without really going deep into any particular topic. This is one of those more general Drupal introductions where recommending a reference book on Drupal theming at the beginning and then explaining how to specifically customize the Ubercart frontend would've been more helpful.

Chapter Nine: User Interface Enhancements and Techniques

Chapter nine takes a look at using contributed modules to improve the user experience of your store for the purpose of increasing sells. I didn't find the cross-selling section useful beyond finding out that the Recommender module has an Ubercart integration module. It never went beyond introducing a couple methods without really applying them, and I didn't see mention of the UC Upsell module which was written specifically for thus purpose. However, the chapter moves from there to a much more useful section introducing using Panels, Views, and the Ubercart Views module to merchandise products.

The rest of the chapter introduces some key contributed modules that enhance the shopping cart / checkout form and others for offering discounts and coupons to your customers. The AJAX cart block module mentioned is a great way to get around the limitations of Ubercart's static cart block when page caching is enabled. The UC Discount Framework module doesn't get mentioned (likely due to its development status), but it provides an additional way to provide discounts using the Conditional Actions system. You might never use all the modules mentioned in this chapter (though you're bound to use some), but simply knowing they exist will help you greatly as you build out different types of sites.

Chapter Ten: Optimizing and Promoting Your Store

Chapter ten walks through various optimization topics regarding search engine optimization, marketing your site, improving performance, and enhancing security. It starts by walking through configuration of various modules recommended by the SEO Checklist module. Following the chapter on cross-selling products, I expected Packt to mention the Drupal SEO Book here.

There are certainly more ways to market your site and improve performance than are mentioned, but the chapter should provide a good start for new store owners to get a leg up. In what seems to be an oversight, the Ubercart Google Analytics module isn't mentioned in the discussion on Google Analytics, but enabling that module will cause actual sales data to be reported to Google Analytics for review in addition to goal completion.


The appendices offer some nice extra information, like how to take advantage of the UC Hotel module to sell hotel reservations using Ubercart in Appendix A. It won't be useful for many people, but for those who need it I'm sure it will be helpful. That's why it's an appendix I guess! The remaining appendices list all the modules referenced in the book (there's a lot!) and a host of free and commercial Drupal themes that are ready for e-commerce use and/or specifically designed with Ubercart in mind.

Sir Dalton and the Shadow Heart by Chuck Black

Having recently participated in the blog tour for Andrew Peterson's North! Or Be Eaten, I was excited to get a chance to review another book with a similar target audience, Chuck Black's Sir Dalton and the Shadow Heart. The author and approach are completely different, but I still found the book to be an enjoyable read that I would recommend to my friends with boys in the 8 - 12 age range. I'm sure they'd dig it.

First, the good. Smile Chuck Black does pull together a fine story in a world beset by evil with a gradually growing force of fighters for the truth known as Knights of the Prince. Young men and women both spend time training as knights to practice good works toward others in the kingdom and defense against the dark knights and their cronies roaming the land.

This particular story follows the training of a young knight named Dalton who is done a disservice by an inadequate trainer. His trainer really serves to weaken the faith of the knights in the universal goodness of their cause to fight for the King, and as a result the knights he sends out run into trouble almost immediately upon confronting the dark knights.

The main antagonist is a fellow named Lord Drox who plays on the knights' doubts and insecurities, not just about the goodness of their cause but even the entire existence of their King and his resurrected Prince. Dalton must face down these doubts in order to flee Drox and eventually return to rescue his brothers in arms who are held captive in a prison with no doors by their fears.

What I found a little disappointing was what one reviewer called his "heavy handed allegory." I don't have any way to judge its effectiveness with his target audience, so maybe a 12 year old boy wouldn't mind it. However, I found in particular his propensity to simply rearrange the letters in names and places to be contrived. You'll quickly recognize Sejus as Jesus, the Tisgri as the Tigris, Nedehaven as Eden, and possibly Arrethtrae as Earth / Terra. A little more subtle use of allegory might have better served the story so it could stand on its own as a fantasy tale and not just a means to the end of passing on a Bible lesson. The study guide in the back is a great tool, and it could easily have drawn attention to a more subtle allegory in the story itself.

That said, the lessons taught are timeless and have been enshrined in allegories at least since The Pilgrim's Progress. A mature Christian must have a faith that responds appropriately to doubts, fears, and the uneasiness of those who balk at Christian zeal. The examples of Koen, Carliss, and the reformed Dalton are worthy of imitation, and the swordplay makes that lesson more than a little palatable to young readers.

North! Or Be Eaten by Andrew Peterson

As I mentioned in my Wingfeather Wiki blog, my wife and I were absolutely thrilled to come home from our second anniversary daycation to find North! Or Be Eaten waiting for us at our front door. I don’t think we've awaited another book’s delivery so eagerly since we ordered Harry Potter and the Deathly Hallows to read together during our engagement. Smile

We grabbed his first book in the Wingfeather Saga, On the Edge of the Dark Sea of Darkness, as soon as it came out and had a great time reading it out loud to each other. It chronicles the beginning of the Igibys' adventure, three special children who have been living in hiding (unbeknownst to them) in the town of Glipwood on the continent of Skree in the world of Aerwiar. Quite a mouthful, eh? That's just the beginning...

Andrew has created a thoroughly original, quirky world full of wonderful surprises and terrifying creatures. The peoples of Skree are daily terrorized by the vicious Fangs of Dang, invaders from across the Dark Sea of Darkness who conquered Skree while searching for the lost jewels of Anniera. The jewels, it turns out, are actually the three Igiby children, Janner, Tink, and Leeli. The first book introduces you to the children and tells of their discovery by the Fangs and their escape from Glipwood under harrowing circumstances. North! Or Be Eaten picks up with their flight ... well, North ... so they can avoid being eaten.

This second book is a treat, even better than the first, but I highly recommend reading them in order. You'll better understand why and from what the Igibys are running, and you'll further be prepared to expect the random bits of humor in the story, the personalities of the main characters, and the footnotes on various pages in the book. Speaking of humor... this book is spot on! I love Andrew's wit and feel he's really improved since the last book at incorporating it more neatly into the story. I laughed out loud several times, especially when I read about Podo Helmer "quivering in a boat like a belcher's belly" and Janner Igiby being disturbed by the superfluous punctuation of the "FORK! FACTORY!" as he was about to be imprisoned in it.

In addition to imagination and humor, Andrew has filled North! Or Be Eaten with plenty of action. The plot is basically a series of clever escapes from trouble punctuated by short periods of recuperation and reflection. The character development kept me turning the pages just as much as the action. Janner's continued maturity is front and center as he grows into being a proper Throne Warden. On the other hand, Tink's spur of the moment immaturity brings a lot of heartache to the story as he rebels against his future as the High King of Anniera and gets himself in a boatload of trouble.

Speaking of boats and trouble... we learn a lot more about the mysterious past of Podo Helmer. He's just as tough, funny, and tender as always, but we also see his fears from his past catching up to him as the Igibys get closer and closer to the Dark Sea of Darkness in their flight from trouble.

Like all good fantasy children's literature, the Wingfeather Saga provides weaves sound moral instruction and personal character development into the stories (see the Chronicles of Narnia and the Chronicles of Prydain for other good examples). The characters are seen to grow in a number of virtues, including responsibility, love, faith, forgiveness, courage, intelligence, and much more. We get to see them fail, as well, and learn how they get back up to make wrongs right. I can't wait to read these books to my children and help them wrestle through the very same problems and growing pains.

To summarize... I'm a fan. A huge fan. And I want you to be one, too. I can only entice you with so many awesome things from the books before you're overwhelmed, so it will be much better for us both if you just read the stories and let Andrew introduce you to the wonderful world inside his head. You won't be disappointed. Cool

For more fan goodness, you can check out my wife's review of North! Or Be Eaten (it's more thoughtful and complete with pictures) and the official Wingfeather Saga site. I'm trying to kickstart a fan site called The Wingfeather Wiki but never seem to have time to stoke the flames. Tongue