A theme I've been running into lately is what I'll call "How to work with IBM," namely Support
. How do you get support? More generally, what sorts of info does IBM make available that you can make use of without having to go through support?
What I have to say isn't any sort of official statement from IBM, but is my observations on what info customers need to know and where to find it (which seems to be half the battle
). In general, don't take my word for it; believe the documents I'll link to. And keep in mind that IBM could change this stuff down the road.
To get started, here are some general support links that may be helpful:
Here are some support sites for specific products:
Today, May 30th, is Memorial Day here in the United States, so most corporate offices--including IBM's--here are closed today. So what is Memorial Day?Memorial Day
) is a designated day here in the States
for us to honor our soldiers who have died in war. This is similar to Vetran's Day
, November 11th, which is to honor living people who used to be soldiers.
Memorial Day is also a national holiday
, so most people get the day off work. Although what businesses are closed today varies--factories, offices, banks, and Post Offices
are closed; but stores, hotels, airlines, and restaurants (the services industry
) are open. Memorial Day, the last Monday in May, is America's unofficial start of summer
. This lasts until the unofficial end of summer, Labor Day
, a national holiday on the first Monday in September, which is designated for honoring workers (especially union members
So what does Memorial Day mean to Americans? As you may well know, most Americans hold what we call "freedom
" in very high regard. We feel that we owe a great debt to our soldiers, especially those who died in combat, for making sacrifices to preserve our way of life
. Today many of us will spend time with our families and friends, having picnics, attending parades
, and generally enjoying the freedom our soldiers have helped preserve. (Not to say that everything the US Military
has done throughout history has always been ideal or noble, but we still honor the sacrifices our soldiers have made, which they did for the good of us all.)
So, happy Memorial Day.
I'm documenting Working with IBM Support
. You ever wondered exactly what databases and what driver versions work with WAS
? What operating systems, web servers, etc. are supported? What hardware this is all supposed to run on? We spell that out in documents that detail what we call the "Supported Prerequisites."
The root page for supported prerequisites is WebSphere Application Server - Supported hardware and software
). What does IBM mean when we say we "support" these configurations? See "WebSphere Application Server has grown and so have your requirements
" (Reference #7004311) and its paper (PDF), "IBM WebSphere Application Server: Clarification of configurations support
There are different versions of WAS (6.0, 5.1.1, 5.0.2, etc.), different editions of WAS (Express, Base, ND, etc.), and different parts of the total WAS server (application server, clients, edge components, etc.), any combination of which can have different specific prerequisites. The Base, ND, and z/OS editions are generally all listed on the same page, but there are different pages for the different parts. So make sure to drill down to the page you need.
Here are the pages for the latest application server versions:
My current customer has reminded me of a common problem many app development teams face: You want to test your app before putting it into production (always a good idea), but you don't have suitable test data. How do you develop an adequate set of test data?
You could test with production data, but especially if the tests change the data, the users won't appreciate their records being mangled. You could test with a copy of the production data, but this approach risks exposing private data with competitive advantage to developers, testers, etc., and the opportunity for the data to be stolen. This risk is especially unacceptable for apps using classified military data and development teams whose members do not have security clearances. You could write a program to generate random data; while it would be of the proper schema and size (if you generated enough of it), it would not necessarily be of representative complexity to model the joins and unions in production data.
Many projects resort to producing a token amount of test data and using that. This is inadequate for testing typical performance and scaling issues. A query which locks a table and/or iterates over all rows may work fine for a 100-row table, but may fail in production when the table has 10,000 rows. Likewise, the code processing a single Customer record with one Order containing one Product may work for testing, but fail in production when a typical Customer has 100's of Orders, each containing 100's or 1000's of Products that are parts of 100's of other Orders.
What is often needed is a set of test data that contains generic values, but is comparable in size and complexity to production data. How can such data be created?
The solution: Use what I'll call a Data Obfuscator.
This is a program which runs on the production data (by someone with sufficient authorization) and produces a set of generic test data. It is configured specifically for a particular data set and its schema. It knows which rows are confidential--such as name, address, social security number, salary, etc. Meanwhile, more generic rows like event timestamps, quantities, etc. can probably be considered non-confidential. The obfuscator has a set of unique generic values equal (or greater) in size to the set of unique values in a confidential column. When converting the data, for each new confidential value, it substitutes a randomly-selected generic value, and consistently uses that generic value in place of that specific confidential value. How random this is may need to be tuned/configured by business rules and constraints, such as ensuring that an Order that contains a small number of items also has a small total price.
In this way, the size of the data set and the complexity of the data are both preserved. But the new data set is generic and the conversion cannot be reversed (at least not easily). This produces a non-confidential set of data which still serves as a basis for very realistic testing.
What do you think: Does this solution seem reasonable? Have you seen this solution in practice? Do you know of other solutions to this problem? Let me know.
This is hardly a big news flash, but if you haven't heard and you haven't already seen it (4 or 5 times): Star Wars: Episode III - Revenge of the Sith
is really good.
It's one of the best Star Wars movies
, much better than the other two movies in this latest trilogy, as good as The Empire Strikes Back
and Star Wars
itself. For a series that seemed to be running out of steam, this last movie is a very satisfactory ending that really brings the story full circle. It's a deserving and fitting end (at least, so far) to an excellent series.
One note: This is not a good movie for young kids. Multiple characters meet quite gruesome
ends. If these scenes don't freak out the average pre-teen, they should.
I'd like to discuss various plot details, the meaning of some characters, etc. But in the end, who really cares what I think? Just go see the movie, it's really good.
Bill has references a professional review: NY Times reviews "Revenge of the Sith"
. (Oh, and to the comments
on there: This Star Wars movie is a whole 'nother galaxy from the Hitchhiker's.)[Read More
Some colleagues of mine who are into security have let me know about a pretty good security blog, Schneier on Security
: "A weblog covering security and security technology."
The blog is run by Bruce Schneier
, author of eight books including Beyond Fear: Thinking Sensibly about Security in an Uncertain World
. He's also authored Secrets & Lies: Digital Security in a Networked World
, which Bill reviews and recommends
. Bruce also has a Crypto-Gram Newsletter
you can subscribe to.
Recent interesting postings (to me, anyway) include:
Unfortunately, he doesn't seem to have any material that's Java- or J2EE-specific, but his stuff does seem to be a good way to learn about security in general.
I've been documenting my discoveries in WAS 6
. One issue is performance: Everyone wants it. How do you get it?
The WAS InfoCenter
has a page dedicated to this topic: Performance: Resources for learning
. One particularly noteworthy resource is "WebSphere Application Server Development Best Practices for Performance and Scalability
" (PDF) by IBM's Harvey Gunther. It's a bit old (Sept 2000), but organized around basic practices (patterns?) that are still applicable today.
Another resource is WebSphere Application Server V6: Scalability and Performance Handbook
(draft), one of the WebSphere Redbooks
. Among other topics, ISSW
's Robert Peterson discusses how the default messaging JMS provider in WAS 6 is actually super fast (even though Java is supposedly slow); see the comment on RAD 6: Listener Port vs. Activation Spec (Part 2)
Keep in mind a cardinal rule of performance tuning: The app has to work right, then fast. Performance optimizations that may sometimes cause incorrect application behavior or data corruption are detrimental, not advantageous, and need to be avoided. See Developing Code: Make it fast
, which assumes that the code already works correctly and is written well. Problem with Service Locator Pattern
shows what can go wrong.
Remember: If a performance optimization breaks the business logic, then all you've got is an application that fails really fast.
Had lunch with Bill
today (which is fun, BTW
; everyone should do it). It turns out that our separate food acquisition efforts demonstrate the difference between synchronous/sequential and asynchronous/concurrent processing.
(My apologies to readers who either never go to restaurants
or only eat at tableservice restaurants
. You may need a fast food patron
to explain this analogy
Bill likes burritos from Moe's Southwest Grill
, whereas I like a soup-and-sandwich from Panera Bread
. So sometimes we each get lunch from our preferred place, then meet at a shared table. I keep getting to the table first
; Panera is faster. (Sorry Moe's; don't shoot the messenger
.) This may in part be because sandwiches are faster to make than burritos, but that can't be the whole explanation.
A large part of Panera's advantage is that its process is asynchronous and concurrent. (Bill made this observation before I did.) You order and pay at one counter (several registers, a pooled resource
), then asynchronously receive your sandwich at a separate counter (they call your name as a correlation ID
). They make your sandwich while you're paying and getting a drink (concurrent processing
). Moe's, OTOH
, uses a sequential process: They line everyone up single file
, where you lockstep
place your order, follow your food as they prepare it, pay for it at the single register, then get your drink. So one person who takes longer than usual to order or pay holds up the whole line.
Not to pick on any one restaurant franchise
is sequential, Schlotzsky's Deli
is asynchronous and concurrent. The fast food granddaddy, McDonald's
, (which some of my Australian
friends refer to as "the American Embassy" (not these
)) is a mix: The food is prepared concurrently, but you still stand at the register, often blocking the patron behind you; kind of a pseudo-synchronous call
. Burger King
's single register is more sequential than McDonald's register pool, but its delivery-by-number is asynchronous whereas McDonald's order-taker-gets-food delivery is synchronous.
(BTW, for a real horror movie, skip The Amityville Horror
and The Texas Chainsaw Massacre
and see Super Size Me
, or read Fast Food Nation
. BTW, the NRA's (the National Restaurant Association
, not the gun people
) review of the book
: Hated it!
Moe's moves noticeably slower than Panera, and I think the sequential nature of Moe's workflow has a lot to do with it. Check it out at the next fast-serve, get-your-food-at-the-counter-before-finding-a-table restaurant you go to. Asynchronous-and-concurrent wins again!(Disclaimer: This blog posting does not constitute an official endorsement by IBM Corp. for or against any of the restaurants named. To this author's knowledge, said information technologies company has not acquired any of the named franchisers.)
The Apache Software Foundation
is considering starting a new project, Harmony, that is an effort to develop an open source implementation of J2SE 5.0
. The resulting project is planned to be fully compatible with J2SE, as proven by passing Sun's Technology Compatibility Kit
Since Harmony is not yet an approved project, there is no Harmony web site yet. So far, there are this Harmony proposal
, this Harmony FAQ
, and this Harmony wiki
. There's also this proposed Harmony architecture
. There's even this unofficial Harmony blog
(by Nick Lothian).
Since the name "Java" is a Sun trademark
, I assume Apache won't be able to use the word "Java" in Harmony's name (hence a new name like "Harmony"), but will be able to state that Harmony is Java compatible and has passed the Java compatibility test suite (once that's the case). Sun makes the TCK process available inexpensively for non-profits
through their TCK Scholarship Program
. The name "Harmony"--multiple parts working together to create a balanced and aesthetically pleasing whole--is bound to be more readily acceptable to Sun than, for example, has been the name "Eclipse"--the apparent darkening of the sun when the moon comes between the sun and the Earth (solar eclipse).
According to the FAQ, Harmony is not an attack on Sun, and the project expects to have Sun's support as another implementer of its Java specifications. In Thoughts on the Apache J2SE "Harmony" Project
, Sun VP and Fellow Graham Hamilton
seems to be saying that Sun isn't opposed to Harmony; he says:
- Sun will probably participate in the Harmony project in some way
- Sun supports Apache in general
- Sun appreciates Apache being part of the JCP
- the JCP rules have evolved to allow for open source implementations
- the J2SE license was specifically changed for 5.0 to allow for open source implementations (like the Harmony proposal says)
Apparently both IBM and BEA have their own J2SE implementations, but neither is open source, and neither can be open sourced because of licensing restrictions with Sun. I have not found any official comment by IBM on the company's reaction to the Harmony proposal. In the past, IBM has called for Sun to open source Java (see IBM Challenges Sun to Team on Open-Source Java
(eWeek; Feb 26, 2004)). Also, Gluecode Software
, part of the group behind the Harmony proposal (as well as one of the main contributors to Apache Geronimo
), has just been acquired by IBM
Here are some articles on Harmony:
Also, here are some blog hits:(Usual disclaimer: I don't speak on behalf of IBM. This information is my analysis based on public sources.)
I don't know how many local RTP
readers I have on this blog, or how many check daily, but for those that are and do: Gavin King
fame will be speaking at the Triangle Java Users Group meeting tonight
. Gavin is a member of the JSR-220
(EJB 3.0) committee.
and IBM have announced a deal
where Lawson will standardize its business applications to run on WebSphere
products. Lawson is doing this, in part, to adapt their apps to the whole SOA thing
. (See also The Two Parts of an SOA Application
.)But here's what I find more interesting
: Lawson was spending a lot of their development efforts on stuff like session management and transaction management--plumbing that didn't really provide business value to their customers. By migrating their apps to WAS
, Lawson will be able to get rid of a lot of this plumbing code they've developed over the years and delegate it to WAS. This makes their job easier and enables them to respond to their customers better.
Being able to simplify their code base and yet improve their performance by using an improved platform isn't as sexy for an article title as "SOA," but it's a key part (perhaps the main part) of the WAS value proposition (that whole ROI thing
) that's easy and reliable to realize. It's something more IT shops
should be doing, if not with WAS then with other J2EE app servers (GlueCode SE
?) or even .NET
.OTOH, you don't get WAS's advantages simply by dropping your J2SE code into WAS.
It's not just a matter of sticking your existing Java code into an EAR file
, deploying that into WAS, and getting all the WAS advantages. You'll get a fast and scalable Java VM
and, with WAS ND
, a managed JVM/app server at that (WAS ND automatically restarts app servers when they crash). But to really gain the advantages of WAS, you need to make sure your app is delegating to the J2EE APIs for session management, transactions, security, remoteness, messaging, database connectivity, etc., etc., etc. (See "1. Dance with who brung ya" in My (least) favorite anti-practices
.) That's the true value of WAS, but you have to make sure your app is actually using WAS, not just running in the JVM.Lawson is doing that. Are you?
Here are some articles on the partnership:
I've discussed the MA0C SupportPac
, one of the WebSphere messaging product options
for using WebSphere MQ
to perform publish/subscribe messaging
. It turns out there's also the MA0D SupportPac
: Getting started with MQSeries Publish/Subscribe. It explains pub/sub in general and discussed how to use the MA0C pub/sub broker in WMQ. So if you're going to use MA0C, you should check out MA0D as well.
The May 2005 issue of IBM WebSphere Developer Technical Journal
is now available.
Also, there's a really good article on configuring WAS 6 to use WMQ as a JMS provider
. Hey, I wrote that article; no wonder it's so good! :-)
Plus, next month's meet the expert
is Skyler Thomas talking about WebSphere Portal Server
, so go submit some questions
So, lots of good WebSphere info. Check it out.
IBM has acquired Gluecode Software
and their product, Gluecode SE
. Why? It's all about increasing the price/performance points that the WebSphere Application Server
configurations cover and helping customers maximize return on investment
(ROI).What is Gluecode SE?
It's an application server, until recently known as Gluecode JOE Standard Edition
, that's free to download and use. It's built from these open source Java projects:
Gluecode Software is a major contributor to the Geronimo project. While Gluecode SE is free to use, the company's revenues come from selling support and service for the product.
Why does the WAS family need this low-end product?
|Does Gluecode SE replace WAS? No, not by a long shot. It's going to expand the WAS family of product configurations, sort of "WAS lite" that will provide a new lower cost, lower quality point of entry.|
I suspect it and WAS Express will end up getting merged. IBM plans to use Gluecode SE to address customers who want a free app server, but also want service and support (and want it from IBM). Customers whose needs outgrow this product will have a simplified migration path to the more capable (and more expensive) WAS products.
Most current WAS customers want to deploy their apps in a very robust way, with high availability and high scalability. Therefore they use WAS ND
to deploy their apps in clusters and even WebSphere XD
to maximize hardware usage and still handle demand spikes. (See WebSphere Extended Deployment (XD)
.) But a lot of smaller businesses that wish to host their own J2EE applications don't want the complexity and expense of WAS ND; WAS Express
and WAS Base
address that market currently. Now Gluecode SE will address an even simpler market that wants to download and use their app server for free, but still have a commercial company to provide support. This broadens the range of customers that IBM and the WAS products can serve.Why all these different WAS configurations?
More and more, the WAS product configurations are becoming less about additional features and more about deployment quality of service: You've got a J2EE app (or apps); how best do you want to deploy it for the best total cost of ownership
? TCO depends not just on the cost of your app server, but cost of hardware, training, support, outages, etc. The more price/performance configurations the WAS family addresses, the more customers it can support, and the more easily customers can move between product configurations as their needs change.Does this acquisition mean that IBM is against open source?
No, the Gluecode acquisition continues IBM's support for open source projects. (See PHP, SourceForge, and Eclipse
and We Have a Patent Commons War
.) By embracing Gluecode SE, IBM puts its support behind Geronimo, describing it as "the open source application server of the future," which will help make that project much more successful. IBM is already the major contributor to the Derby project, which came from IBM's Cloudescape
product. IBM also started Eclipse
and is a major contributor to Linux
To learn more:
And some related technical stuff:
There's a fair amount of discussion and speculation about what will be in EJB 3.0, including by me (see Unnamed Persistence Specification (UPS)
and Persisting Domain Objects
). Here's some more.
As Roland explains in "Examining the EJB 3.0 Simplified API specification
," the EJB 3.0 spec consists of three parts:
- EJB 3.0 Simplified API
- Enterprise JavaBeans Core Contracts and Requirements
- Persistence API
The part that is creating the most interest and controversy is the persistence API, namely: How will entity beans work in EJB 3.0?
Will they be JDOs? Will they be like Hibernate? Will they be backwards compatible with entity beans in EJB 2.1?
As Wayne has pointed out
in his blog, Mike Keith has written a really interesting blog entry, The EJB 3.0 Hibernate Fallacy
, which explains that the EJB 3.0 persistence model is its own animal, not just a copy of Hibernate, JDO, or TopLink. And Mike should know what he's talking about: He works at Oracle, is an architect for TopLink, and is on the EJB 3.0 committee. So if you'd like to learn some fact and not so much fiction, check out his blog.
I've been documenting my discoveries in WAS 6
. Along the same lines, there's a good article now on developerWorks, "A quick guide for migrating to IBM WebSphere Application Server V6
If the title didn't tip you off, the article is about migrating your J2EE apps from previous versions of WAS--V4 and V5--to V6. The authors are a couple of IBM's WAS testers in charge of making sure that migration works, so they should know what they're talking about. The article talks about how to use the migration wizard and the migration command line tools, how to migrate a V4 multi-node or V5 cell to a V6 cell, and even how to rollback to V5 if need be.
Also check out the WebSphere Application Server V6 Migration Guide
(SG24-6369-00), one of the WebSphere Redbooks
. Two of it's co-authors are ISSW's own migration expert Wayne Beaton
and ISSW honorary member Tom Alcott
I've been talking about some of the new stuff in WAS 6
. I've also mentioned that one of the blogs I read is Billy Newport's blog
. There is now an interview with Billy Newport
on The Server Side.Billy Newport
is one of the main developers WebSphere Application Server
; lots of good stuff is in the product because he put it in there. And so he's also very knowledgable about how those parts work. He's one of the main developers behind WebSphere Extended Deployment (WXD)
as well as WebSphere 6.0 high availability with shared file systems
In the interview, Billy mostly talks about WXD:
Often when I'm talking to people (and it does happen), I mention "I have an article about that." (Some might say I mention this too frequently. Eh, let them get their own blog!) So then they ask: What all articles have you written?
(And, no, these aren't just people who owe me a favor.)Jerry Seinfeld has a bit
: Have you ever noticed that doctors are the most insecure people in the world? When you go into their office, on the wall behind their desk are all their diplomas. It's like they're saying, "Hey, I really did go to medical school, you know."
Anyway, I don't know why that story occurs to me just now, but let me show a list of articles I've written
Have I mentioned that I'm a co-author of two books
I've also written a few book chapters
My friend Don MacQueen
has even scanned most (all?) issues
of the Smalltalk Report
, including many (all?) of my articles (geez, this is like looking through your old high school yearbook
So, I hope you find something interesting in there somewhere.
I'm discussing the WebSphere messaging products
, specifically the basic WebSphere MQ topology
: a bunch of queue managers connected by a bunch of channels. A related issue is: How exactly does an application connect to the WebSphere MQ messaging system?
The application runs in one process while WebSphere MQ runs in a separate process (several of them, actually). So the application needs some way to connect to WMQ. What the application is actually connecting to is a queue manager (see Parts of WebSphere MQ
). There are two ways for an application to connect to a WMQ queue manager:
- Bindings transport mode -- The application connects to the queue manager by running MQ's C programs and DLLs directly. For WAS apps, this is implemented via JNI. For bindings mode to work, the app and the queue manager have to be running on the same server computer; an app cannot access a queue manager remotely.
- Client connection -- The app connects to the queue manager using a TCP/IP connection. The queue manager can be on the same server computer as the app (the TCP/IP localhost) or on a remote computer (as long as they're connected by a TCP/IP network).
A rule of thumb is that a bindings connection is at least 30% faster than a client connection, because of the overhead of TCP/IP. OTOH
, client connections can be secured; more on this in a future post.
For a WAS app, you specify the connection mode when configuring a JMS Connection Factory
in your WAS server; see the transport type
property in WebSphere MQ connection factory settings
. For a WAS 6
application using the default messaging provider of the service integration bus
, the messaging system is built into the app server, so the connection is always effectively bindings mode.
Client connections have their place. However, whenever possible/practical, I prefer to use binding connections
. I'll discuss/justify this blanket statement in my next posting.
I mentioned that the new Hitchhiker's Guide movie sucks
. This has lead me into a discussion of how good sci fi books often become lousy movies. (Sorry, no more WebSphere info again today.)
Fellow IBMer Bernie Margolis pointed me to a very extensive Hitchhiker's Guide movie review (long w/spoilers
, short w/o spoilers
). I didn't like the movie; this guy, MJ Simpson, hated the movie.
I have to say, MJ's review is more interesting than the movie was. Some of my favorites from the review:
Whatever your favourite line from Hitchhiker's, there's a good chance that it won't be in the film.
... the film also suffers by having an entirely nonsensical plot. It is driven by convenience and unexplained happenings. Characters just happen to be where they need to be and have what they need to have, even if it makes no sense for them to be there or to have that.
MJ seems to have memorized the books and compiled excrutiating detail on how the movie varies, pretty much always for the worse. I haven't seen a comparisson this detailed since the Lord of the Rings
Bernie and I discussed other good sci-fi books that have been made into movies. Hitchhiker's Guide reminds me of The Fifth Element
, in that it looks otherworldly, but it makes no sense, and the more you try to understand it, the worse it gets. But the second time I saw it, I just accepted it all as fact and had a good time; I don't see that helping Hitchhiker's Guide. Blade Runner
is very different from the book, but good in it's own right, especially the director's cut
Likewise, Starship Troopers
wasn't an adeptation of the book--they only had the title in common--but a cool movie if you could get Heinlein out of your head and enjoy the campiness of the movie (like the WWII-style propaganda reels where you could click on a Macintosh-style menu to learn more). It also shows the cutting edge of where CGI graphics
were at the time (post Terminator 2
and Jurassic Park
, and just before Titanic
And I already mentioned Dune
, widely regarded as perhaps the single best science fiction book of all time. Despite David Lynch's
best efforts, it still made for a pretty confusing movie, and one they didn't even have the budget to finish.
So it seems that I'm pretty forgiving of a movie based on an excellent book that isn't very true to the book, as long as it's a good movie in its own right. The problem with Hitchhiker's Guide is that not only is it not true to the book, it's just not a very interesting movie. It's not funny, ironic, or entertaining; it's just boring. Too bad they couldn't've made better use of the source material.
I haven't posted a movie review on this blog before, but I think the movie The Hitchhiker's Guide to the Galaxy
is probably of interest to many readers of this blog. I also apologize to any international readers in places where this movie has not been released yet (although, as you'll see, you're not missing much).
I like the five books in the trilogy
a lot and I really wanted to like this movie. Unfortunately, the movie is incredibly tedious; not awful or stupid or shockingly bad, like when a movie totally ruins a book, but just very very boring. Stuff which seemed clever and interesting and psudo-scientific in the book(s) repeatedly fell flat in the movie. It was like watching a standup comedian where every time he said the punch line to a joke and paused for laughter, there was none because it wasn't funny. I didn't hate the movie, I certainly didn't love it, I was just bored and wished I'd spent my afternoon doing something else.
For huge fans of the book, go ahead and see it anyway (if you haven't already) just to satisfy your curiosity. But go in with lowered expectations; they still won't be met. Think of it as a friend telling you about the book rather than you reading the book yourself. Remember Dune
? Yeah, like that.
To be fair, there were a handful of people in my theater who laughed out loud at key parts and really seemed to be enjoying themselves; I believe they would've liked anything. For the rest of us, don't go see the movie unless you have nothing else to do--or, alas, go with some friends to make fun of it MST3K
-style, which is hardly a compliment.
Ah well, like many good books, maybe the Hitchhiker's Guide series should just remain books.