Finished “Practical Perforce”

The day before yesterday I finished reading “Practical Perforce” (by Laura Wingerd, from O’Reilly books). I liked it more than I thought I would. My first impressions of Perforce, hadn’t been that favorable, mostly because of its unusual paradigm of keeping track of client workspaces, which can lead to a lot of unintuitive behavior. Reading the book helped solidify my understanding of Perforce’s view of the world and demonstrated that Perforce can be a very powerful tool. For sure there are warts, like the sometimes strange syntax of the p4 integrate command and a section that was downright humorous, showing how simple it is to back out a change, using 7 commands piped through various sed filters (in fairness, backing out changes in CVS is also complicated and actually much worse because CVS doesn’t have changelists – I wonder if any version control system has bothered to actually make the simplest of tasks actually simple. At work we have a p4 wrapper command, written in Perl, that adds a backout command, but I wonder why Perforce doesn’t build this simple feature in?).

The best part of the book for me was the later chapters, where the book describes the bigger picture of managing branches in shrink-wrap and Web development software shops. A lot of the material in these last few chapters is about general SCM and branching methodology and is largely independent of what version control system you’re using, though naturally this book concentrates on the application of this methodology with Perforce.

Finished The Rise of Endymion and the Hyperion series

A few nights ago I finished reading The Rise of Endymion and thus, the entire 4-book Hyperion series.

  • Total # of books read: 4
  • Total # of pages read: 2336

That’s a lot of pages and if that scares you, then I might suggest reading only the first two books. The first two books comprise one cohesive story and the second two books comprise another story which is related to the story in the first two books, but largely independent and different (the events of the second two books occur hundreds of years after the events in the first two books and with mostly different characters). The first two books were more enjoyable to me then the latter two (and also shorter!). This is not to stay that the latter two books were not enjoyable – they are. However, if you read them looking for answers to the mysteries in the earlier books, you might be disappointed in the end. In fact, some earlier explanations get a bit muddier and there are some new mysteries, some which are explained well and others which aren’t. In particular, the origins of the enigmatic Shrike seem a bit different in the latter two books and never get satisfactorily explained, IMHO. Also, the first two books are more pure science fiction, whereas the latter two get a lot more into mysticism and “quantum love” and a sort of sci-fi spin on some of the ideas of Buddhism. Some elements of the first two books like an oft-mentioned future war between deities get ignored. I did still enjoy the latter two books, so if you have the time, go ahead and read all four books.

Book # of pages (paperback)
Hyperion 512
The Fall of Hyperion 528
Endymion 576
The Rise of Endymion 720

Finished Endymion

Last night I had a headache and couldn’t sleep so I took a couple of Excedrin and then went downstairs to read Endymion until the headache subsided. I was near the end of the book and the story hit a climax. I couldn’t put the book down and ended up reading to the end.

Excellent as usual (see Hyperion, Fall of Hyperion).

Onward to the fourth and final book: Rise of Endymion

The Fall of Hyperion

Back in May, I read Hyperion, the first book in a renowned 4-part sci-fi series from Dan Simmons (official site).

This weekend, I finished The Fall of Hyperion. This book continues the story of the Shrike pilgrims from the first book and a few other characters, including the John Keats cybrid, as the interstellar war escalates and the universe goes to hell in a handbasket.

This book doesn’t have the pilgrim stories of the first; it’s more linear, if you can call it that. There are lots of parallel stories, farcasting, worlds within worlds, and time travel to make it plenty interesting. Most of the mysteries of the first book get explained though some of the explanations are so mind-bending, that you will probably have a bunch of new questions. Luckily, there are two more books…

Speaking of the other two books, not wanting to forget too much and lose momentum, I picked up the next book in the series, Endymion, at a book store in Santa Cruz today. I already have the fourth book, The Rise of Endymion, as a friend of mine dug his hardcover version out of his garage and lent it to me.

Interestingly, I noticed that Dan Simmons has a web site and he mentions that a movie is in the works:

Yes, Virginia, there is a Hyperion movie in the works. It has been optioned by a top-notch studio, is slated to be directed by a top-name director, and already has the involvement of a top-flight movie star. Screenwriters have been attached to the project and a first draft screenplay is expected soon.

I’m looking forward to that!


During our recent Europe trip, I read the book Hyperion and really enjoyed it.

The first in a series of 4 books (the others being The Fall of Hyperion, Endymion, and The Rise of Endymion), Hyperion is a science fiction novel set in the far future. The Earth had been destroyed centuries earlier and mankind lives in a federation of many planets called the Web (note that this book is from 1989; I bet if he wrote the book a few years later, he would’ve chosen a different nomenclature to avoid confusion). The Web consists of many planets linked together by farcasters (teleportation devices) and is ruled by a government called The Hegemony of Man, or The Hegemony for short (which is not as dictatorial and repressive as it sounds). Hyperion is a colonial world that is the center of much activity. There is much folklore about the mysterious Time Tombs and a nightmarish metallic thorned creature called The Shrike, worshipped by some and feared by all. At the same time, the spaceships of a barbarian horde called The Ousters are descending on the Hyperion system and a war is brewing between The Hegemony and The Ousters. A third party, a huge artificial intelligence called The TechnoCore also seems to be interested in Hyperion for unknown reasons. With war on the horizon, The Hegemony sends out a group of pilgrims to go to the Time Tombs on Hyperion and visit The Shrike. Why The Hegemony is sponsoring this pilgrimage is unclear, but each of the pilgrims has their own reasons for wanting to confront The Shrike. As they travel together, a Catholic priest, a soldier, a Jewish scholar and his child, a poet, a private detective, a diplomat, and a ship captain tell each other their stories of how they came to be on this dangerous mission. With all these travelers telling tales, it is reminiscent of Chaucer’s Canterbury Tales and that is not the only reference to English literature. Hyperion is also the title of an unfinished epic poem by 19th-century English Romantic poet John Keats and the book has many other overt references to Keats.

It’s a fascinating book and very hard to put down, once you get started.

Beyond the C++ Standard Library: An Introduction to Boost

I just finished reading Beyond the C++ Standard Library: An Introduction to Boost. A really interesting read. Some of the more interesting things that I picked up:

  • boost::shared_ptr – like auto_ptr on steroids, a very nice reference-counted smart pointer. Not only can it clean up memory allocated with new, but you can pass in a custom deleter and thus use it to clean up anything, such as close a file or database connection, etc. The book also covers shared_array, intrusive_ptr, weak_ptr, scoped_ptr, and scoped_array
  • boost::numeric_cast can warn you when you’re casting a number to a smaller number type that will truncate.
  • boost::lexical_cast can convert back and forth between strings and numbers, thereby accomplishing in one concise line, conversions that I normally do with a few lines of stringstream code.
  • boost::regex can do all kinds of interesting things with regular expressions.
  • boost::any is an interesting variant type that allows storing several types of values, but is type-safe in the sense that it makes the caller specify the correct type in order to gain access.
  • boost::tuple is a logical extension of std::pair and allows a nice way to get multiple return values from a function:
    boost::tuple gcd_lcm(int val1, int val2);
    boost::tie(gcd, lcm) = gcd_lcm(15, 20);
  • boost::signal is an interesting “signals and slots” (or “publish and subscribe” or callbacks) implementation.