Category Archives: Uncategorized

Swimming Pool

We finally have a swimming pool. It’s been a long and frustrating saga.

Last Friday evening, after the kids went to bed, we rolled out the pool, which had been delivered by UPS on Thursday. We followed the instructions (most of them) and started filling it with water.

Turns out, that bit about “level ground” was pretty important, as I should have known, since I was a physics minor in college. About 1000 gallons later, we had a pool with about two feet in one end, and maybe 6 inches in the other end, tilting precariously. We knew this wasn’t going to work, but decided to let the kids play in it before starting over.

Saturday morning, they came out and were tickled pink, which was the desired effect, but after about 2 hours of playing, the edge finally dipped, and all that water went thundering down the hill, washing away our gravel path and generally wreaking havoc.

Being impatient, we went for the quick fix, and bought a bunch of sand bags to prop up the bottom end. As the water reached the top of the sand wall, it dragged the side over to the other side of the wall, and there it lay, until finally we couldn’t prop it up any more, and we lost another flood down the hill.

Now ready to follow the instructions, we started digging, and have been digging all week, a few hours a day, until about 8 last night when we deemed it done. In retrospect, we should have taken a few more steps to smooth the ground, but we decided it was good enough, and by about 11 last night, we had a serviceable pool. It still needs to fill a little bit, but it’s level now, and ready for the screaming kids.

Unfortunately, neither of the kids are with us this weekend. But at least we can enjoy a little time in the pool now, and try to recover from our aches from a week of digging.

Take back the beep

Dear Mr. Siegel,

I believe it was 1982 when we got our first answering machine. We had a recording on it that said something like “at the beep, please leave your message.”

So, 27 years ago.

On my cell phone, I have a message. I say something like “I can’t answer your call, please leave a message.” But even that is unnecessary. Folks know what to do.

Unfortunately, after that message, there’s another message, in a stranger’s voice, telling the caller to … leave a message after the beep. I already told them, and they already knew before that.

If I were cynical, I would think that the sole reason for this additional message is so that the cell phone company can bill me for that additional 15 seconds of non-information. Ok, I admit it, I’m cynical. This is a cheap way to run up my phone bill, in exchange for no services rendered.

I understand that you’re one of the folks that can do something about this. Is that right? David Pogue told me about his grass-roots effort, on Twitter, and then directed me to this write-up: http://www.nytimes.com/indexes/2009/07/30/technology/circuitsemail/index.html?8cir&emc=cir

Anyways, please drop the message. Nobody needs it. Nobody wants it. And I don’t want to hear that every time I call my wife to leave a quick message. It’s silly, unnecessary, and nobody believes that it’s there for our benefit.

Thanks.

[DPI]

The Apache Web Server version 2.2.12 released today, including the following nugget of joy:

‘discardpathinfo|DPI’ (discard PATH_INFO)

In per-directory context, the URI each RewriteRule compares against is the concatenation of the current values of the URI and PATH_INFO.

The current URI can be the initial URI as requested by the client, the result of a previous round of mod_rewrite processing, or the result of a prior rule in the current round of mod_rewrite processing.

In contrast, the PATH_INFO that is appended to the URI before each rule reflects only the value of PATH_INFO before this round of mod_rewrite processing. As a consequence, if large portions of the URI are matched and copied into a substitution in multiple RewriteRule directives, without regard for which parts of the URI came from the current PATH_INFO, the final URI may have multiple copies of PATH_INFO appended to it.

Use this flag on any substitution where the PATH_INFO that resulted from the previous mapping of this request to the filesystem is not of interest. This flag permanently forgets the PATH_INFO established before this round of mod_rewrite processing began. PATH_INFO will not be recalculated until the current round of mod_rewrite processing completes. Subsequent rules during this round of processing will see only the direct result of substitutions, without any PATH_INFO appended.

It might also be handy, some day, to have a [DQS] flag that discards the query string explicitly, rather than having to do silly tricks to make it disappear.

httpd.conf – the Apache Web Server conference

The Apache Software Foundation and the Apache Conference Committee are delighted to announce httpd.conf – the mini-conference focusing on the Apache Web Server, embedded into the larger ApacheCon conference.

httpd.conf consists of two days of talks focused on the Apache Web Server, as well as two days of pre-conference training classes.

On Monday, November 2, and Tuesday, November 3, JimJag and I will be teaching a two-day training class on the Apache Web Server for the beginner who wants to get up to speed on how to run the server.

On Wednesday, you can take a look around you at some of the other Apache technologies.

Then, on Thursday and Friday, there’s a full day of httpd talks. Thursday is primarily focused on the administrator, while Friday is focused mainly on the developer.

And, of course, there’s also a full schedule of other ApacheCon events and talks, including the 10th anniversary party for the Apache Software Foundation. So make plans to come to Oakland in November.

Review: PHP Programming with PEAR (Packt)

Packt recently sent me a copy of the book “PHP Programming with PEAR” to review. I rather wish they hadn’t, because it faces me with the dilemma of having to post a really negative review of a book, and potentially hurt the sales. On the other hand, it’s my obligation to tell you, the PHP programmer, that this book should be avoided at all costs.

Unfortunately, it probably also means that Packt will stop sending me free books to review. But I gotta do what I gotta do.

1) The book is about PEAR. However, nowhere does it tell me what PEAR is, other than a short paragraph in the preface, which nobody will read. Much more importantly, there’s nothing whatever in the book that tells me how to locate, download, and INSTALL a Pear module. So when it jumps right into a chapter on one of the more obscure of the Pear modules, almost without telling me what it is, what it’s for, or why I would consider using it in preference to PDO, I’m completely at sea. Where do I obtain this module? How would I install it once I had obtained it?

If you type ‘pear help’ at the command line, you get more information than is contained in this entire book about the pear command line utility. It isn’t once mentioned, as far as I could tell.

Chapter 1 is missing, entirely. Chapter 1 should be “What is PEAR?” Chapter 2 should be “Using the pear command line utility” Those two chapters would be what most buyers of your book would actually be looking for. Without those chapters, the current book is an exercise in frustration. Yes, this stuff looks cool, but where the heck do I find Pear::DateTime? It’s not installed on my server.

I see that Packt has a separate book called The PEAR Installer. Presumably that book answers these questions. The problem is that if I go to the store to buy a book about PEAR, I’m going to buy one or the other, not both. A chapter on the pear command line utility is essential for this book.

2) The code examples are almost always there without showing the output. In the few cases where the output is shown, it’s almost always difficult to ascertain which code example led to it. The worst example of this I found was in the calendar chapter, where an example is shown of a HTML table rendering of a month calendar, complete with a description of what color the various dates were. I was unable to find the code that generated this output. Since this is one of the things that I’d actually like to do today at work, I find that very frustrating. This was the rule, rather than the exception.

I have found, in years of writing and presenting at conferences, that examples carry 100 times more weight than pages of exposition. Showing a line of code, and the output that it produces, communicates more than discussing the function and its uses. This book shows a lot of functions, and very seldom really shows what they do.

3) The book assumes that you already know what OO syntax looks like, and almost never shows it to you. One reason that PEAR developed was that with the transition of PHP from 4 to 5, nobody knew about OO syntax, or how to build objects, and PEAR was a way to provide these object models to people to get them started. Showing them how to use PHP objects is critical to success. CPAN did this really well with Perl, and PEAR has done it less well with PHP. I’m not real sure why so few PHP programmers know about or use the stuff on PEAR, while Perl programmers universally use CPAN. This book, and others like it, are an opportunity to tell people about the great stuff on PEAR. Reusable code is a really big deal, and PEAR is, and should be, the place for that code to live. Unfortunately, this book doesn’t communicate that.

4) The selection of modules to cover was, to be charitable, random. There are (as of today) 534 packages on PEAR. (See http://pear.php.net/packages.php for details.) This book chooses, at random, 5 of them, and covers them in a rather haphazard manner. Now, I don’t claim that I know which modules should have been covered. But I can assure you that if I wrote this book, I would do some research into which ones were most popular, and which ones seemed neglected, but amazingly useful, and which ones nobody uses because they’re not useful.

5) This book completely overlooks what I consider to be almost the most important topic, after “what is PEAR” and “How do I install a module”. Specifically, “How do I write a PEAR module?” And the related question of, once I’ve written a really useful module, and I’d like to share it with the world, how do I go about contributing this to PEAR. CPAN has done a wonderful job of answering that question, and, as a consequence, I have something like a dozen modules on CPAN that are used by thousands of people. I don’t know how to contribute my code to PEAR, and have some that I’d like to contribute. I was hoping that this book would answer this question.

6) I’m a huge calendar geek. I was looking forward to the calendaring chapter, because I figured it would give me the same charge that the calendaring stuff in Perl does. Calendars are a lot of fun, and PHP has put a LOT of effort into datetime code in the last few versions. A lot of brilliant people have devoted hundreds and hundreds of hours to making the datetime implementation respectable.

The calendar chapter was a huge disappointment. It focused largely around a code example to generate a HTML table rendering of a calendar, although early in the chapter it hinted at the fact that you can do this with a single function call in the Tabular class. But it didn’t tell me what that function is, which just pissed me off for the rest of the chapter. And since I was at the pool when I was reading it, I couldn’t look anything up, or try any code examples.

So ….

all of that to say, I think that this book is significantly below the standard that I have come to expect from Packt books. I was very, very disappointed. I think that this book is really important – that is, a book in this space – and it’s frustrating that it wasn’t done well. It felt like someone’s first writing experience. We’ve all been there. My first book was an embarrassment, and I’m glad that it’s out of print. I hope that these gentlemen progress in their career enough to feel the same way about this one. I felt a number of times that I could have written the book better.

50% of writing a book like this is research. Another 25% is experimentation – writing code with the stuff learned from the research, getting a feel of how it actually works, and coming up with interesting examples. A poorly written book on a topic like this is just a rehash of the documentation. However, I don’t think that this even goes that far.

Straight to the source

I used to marvel at the fact that when I asked a question on IRC, or a mailing list, I would, as often as not, get a response from the very person who wrote the software I was asking about.

That was a long time ago. The internet has gotten bigger, and, with that, the probability or ease of going straight to the source has diminished. Nowadays, not only are you likely to not be talking to the author, you’re also less likely to be talking to someone who knows anything at all. Often they tell you something that simply isn’t true, or is half-true or misleading. Usually this isn’t out of maliciousness, but just out of ignorance, and the imperfect transfer of knowledge in the form of tutorials written by people who themselves weren’t quite sure.

The same is true in the business world, of course. The larger a company gets, the less informed the tech support tends to be, until you get to a point where the front-line customer support are nothing more than note-takers for the folks who actually know something.

Unfortunately, being the hot-head that I am, this leads me to say unkind things about the entire company, because, to those of us who may our monthly dues and use your product, your customer support is the entire company.

You can have the most marvelous product in the world, but if your customer support reps are ignorant, belligerent, or even have bad grammar, we, your customers, make assumptions about your entire company based on that interaction.

I was very pleased to get a direct response from Jim Wong about my above-referenced posting. It’s fascinating to me that the very best way to get someone’s attention on today’s internet is to make a comment on MY site, or on Twitter, rather than on the site of the person I want to contact. I suppose this shouldn’t be unexpected — it’s much the same in the real world. An letter to the editor of the local newspaper gets more attention than a letter directly to the mayor’s office, when I’m disgruntled about city policy.

Fortunately, my opinion of a company can often be turned around by being contacted by the folks who *do* know something. It means a lot to me that the head of a company is aware of what’s being said about his company, and takes a proactive role in correcting misconceptions. It also helps when his answers make sense, and actually show an understanding of my questions.

Now, while I’m not sure that I feel the answer was the one that I want, I at least think that Jim understood the question, and had thought through the implications of his answer.

Sugarsync Customer Support

It’s amazing how much difference good customer support can make.

SugarSync has a good product. It could be better, but for the most part it’s really good. However, their customer support is rapidly turning me from being a fan to wondering if I made a mistake.

Sugarsync is basically a fancy front-end to rsync. This is what I expected, and wanted. They also have a web front end where you can browse your files. As expected, this interface is accessible only via SSL. So far so good.

However, it also has a feature where it detects that a directory contains images, and creates an album/gallery view of that directory. This content, for some reason, is accessible over http, and can’t be accessed over https.

Now, if you’ve ever been somewhere with an open wireless network (conference, airport, coffee shop) and experimented with a program like Etherpeg, you’ll immediately see the problem with this. Not that my photos are confidential, or blackmail material, or whatever, but they’re my photos. If I wanted them to be public, I’d put them on Flickr. Until I choose to put then on Flickr, I want them treated as though they were confidential.

So I opened a ticket, asking for SSL on the gallery view. I received a response that said that SSL isn’t necessary, because they use cookies for authentication, and so nobody can log in to get my content.

Um … huh?

I wrote back saying that I was well aware of what SSL is, and what cookie auth is. I didn’t wave my HTTPD credentials – perhaps I should have. But you can’t pretend that cookies substitute for SSL with a straight face.

I received a response back saying that my ticket had been closed, because it had been dealt with in a satisfactory manner. I wrote back once more asking that they consider what I had asked for a little more carefully, and that they take a look at Etherpeg.

No response.

Later on, I was trying to manage files on the server. They have this gallery preview, but in that view, you can’t rename or delete files. They have the file browser view, but there you can’t see which photo you’re looking at. I asked if they could either add the filename to the gallery view, so that I could at least know which files to delete, or add a delete option to the gallery view.

I got a rapid response saying “Our product doesn’t have that feature.” And the ticket was closed.

Seriously? That’s the response I get?

So, I guess that the feature set that’s there is the one that I get, and their feature request form on their website isn’t actually treated seriously.

Or, maybe they just use it as the inbox, and they have another issue tracking system behind the curtain somewhere.

One can hope.

Ode to the GPS

Ode to the GPS
July 11, 2009

It’s difficult to think of inventions
that don’t in the long run,
make life worse, rather than better.

Sure, I suppose they’re used
to call down missile strikes,
so it’s not all roses and ponies.

Since the invention of the road,
men have been plagued by the terror
of getting lost.
Being lost, itself, isn’t so bad,
at least not from the vantage point
of being found again, laughing
about it over a pint of ale.
But while you’re there,
it’s pretty awful.

Yes, because you have to admit
that you don’t know.

Now, with this marvel,
this chunk of metal and plastic,
smaller than a breadbox,
talking to the stars,
I am freed —
liberated to get lost
without having to admit to it.
Freed to wander far from
the so-called-free-way,
which binds you to the path
most travelled.
Free to explore those roads
where one might imagine
real people living,
sitting on their porches,
sipping lemonade while the stars
come out and the crickets
scream into the night.

Drive past corn and soy,
soy and corn,
more corn, more soy,
interspersed by fields where
someone’s parents are planted
deep in the earth,
driving slowly enough
to read their names.