The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Monday, September 01, 2008

Ridin' Gustav

I've known Marcus for a few years. We met on a mailing list, and we finally met in person when he dropped off a kitten on his way from Texas to a wedding in Key West.

Shortly after that, he pretty much dropped out of sight, and while still a member of the mailing list, hasn't said much over the past four years. So it was rather surprising to find the following message from him:

From
"mliviusii" <XXXXXXXXXXXXXXXXXXX>
To
XXXXXXXXXXXXXXXXXXXXXXXXX
Subject
[daveworld] Riding Gustav…
Date
Sun, 31 Aug 2008 08:08:30 -0000

Hello folks.

Still alive after all these years. I've been happier about that fact, but so it goes.

I'm in Nawlins, and riding out Gustav. Decided to liveblog it, if anyone is interested.

Not much else to do, really–curfews are going into effect, and the neighborhood is deserted.

Guess I'll practice my hunkering.

http://ridingustav.blogspot.com/

Marcus

My initial thoughts were Oh my … but Marcus was a Marine in an earlier life, and besides, as he says:

First, I'm prepared. I've got food and water for weeks, batteries, and all the stuff you need.

Second, I'm in a good place, though in a bad location. Well-built multi- story house, cinder block ground level, (for twisters) three stories plus an attic, (for floods). The house took about five feet of water during Katrina. It'd take a 30 ft. flood, minimum, to drown me.

Third, I've ridden out storms before, most notably Allen in '80. I'm former Marine infantry, first aid instructor certified, blah-blah-blah, so I feel as though I can pretty much handle whatever could happen. Only real likely Bad Thing I can forsee getting me would be a tornado with no warning. I feel safer here with my gear as opposed to huddling in a shelter somewhere.

I'd rather be on hand to help with the immediate aftermath if it's bad. Think of me as an unofficial First Responder. Rather be a sheepdog than a sheep.

So, I figured while I'm here, I might as well post an eyewitness account of the festivities. I've got still and video cameras, and will post what I can for as long as the power, and then my UPS, holds out.

Why Aren't You Gone?

I'm concerned for him, but I think he'll pull through this okay.

Good luck, Marcus. See you on the other side … and I hope there's a New Orleans left.

Tuesday, September 02, 2008

The Company is changing its name—it is no longer known as The Company. The new name of The Company is The Company

So, The Company's name is changing. Smirk wants to let our customer base know of the change in name, so he decides upon a mass emailing. This will do two things:

  1. lets us check the validity of the customers' email contact address;
  2. test the capability of “Project: Leaflet.

Yes, “Project: Leaflet” is a mass-emailing tool, but the designated use for this is a way for a company (like us) to easily send out an email to a large volume (for some unspecified value of “large”) of customers to inform them of new products, services or a change in name.

Stuff like that.

Anyway, Smirk did the first run last night.

Out of our large (for some unspecified value of “large”) customer base, only a few (for a very small value of “few”) emails actually got delivered. Smirk had me look into the situation.

Turns out “Project: Leaflet” was programmed to send, at most, ten emails. Guess I subconsciously hate spam so much, I deliberately limited “Project: Leaflet” (or didn't realize there was such a limit in place from the beginning).

Heh.

Wednesday, September 03, 2008

Owning more than you expect

A few years ago I set things up at The Company (formerly known as The Company) so that emails to root get sent to me, which means, I get all the emails the servers automatically generate as they're running. Prior to that, all email to root was slowly being accumulated on the various servers without being checked.

Needless to say, I get an inordinate amount of mail at work, I can scan it quickly (which is the reason why I switched to using mutt) and generally keep on top of things.

I've learned, for instance, that when I get an email like:

From
support@XXXXXXXXXXX
To
support@XXXXXXXXXXX
Subject
URGENT: MailQueueCleaner failure report
Date
Tue, 2 Sep 2008 19:37:45 -0400

This is a report generated by the hourly run of MailQueueCleaner. Some sites on this server have problems which prevent the processing of their email queues. UNTIL YOU RESOLVE THE PROBLEMS, THESE SITES WILL NOT BE ABLE TO RECEIVE EMAIL. A summary of the problems is included below.

XXXXXXXXXXXXXXXXXXXXXXXXX: over disk quota, usage: 648180K, quota: 614400K

I know that one of our customers has a catch-all email address that is never being checked and I can pretty much nuke emails to said address (actually, I don't—I empty the mailbox of all the emails, which are then backed up in case the customer actually does need them, but in the several years we've been doing this, the customer has never noticed nor asked to scan the email backups). This used to happen quite often, but since installing X-Grey this now happens rarely.

But for the past month now, I've been receiving a large amount of these emails all from the same account (in fact, the example above is one such email). When I first received it, I did what I always do in such situations, and yet, that didn't resolve the issue.

We've been poking into this, trying to find out where this customer's quota is going; it certainly isn't due to spam—their email is practically empty. Disk usage over their account shows nothing too outrageous and well within the limits.

Very puzzling indeed.

Until P did a very deep scan of the entire filesystem looking for files that might be owned by this customer, and found a metric-buttload of files in a rather unexpected location.

Earlier this year I wrote a Perl-wrapper to help track down some exploited sites. This Perl-wrapper records the script being run (it maintains a single copy), any files it may be using, and information about the script (which user is running it, working directory, environment, etc). And this happens for every Perl script on the system!

But when I wrote it, little did I realize that the files it created would be owned by the group the user that executed the script belonged to. And modern Linux usage tends to give each user their own private group.

Oh.

So that's what's blowing their quota.

Heh.

(Simple fix actually—change the user and group ownership of the files the Perl-wrapper creates to be something other than the user. In this case, that was two lines to fix the problem).

Thursday, September 04, 2008

Snippits from a conversation about the upcoming Presidential Election

“I hope they win with a landslide.”

“I just hope they win by more than twice the margin of error.”


A pathetic attempt at one of those Intarweb memes

I'm looking at the back of a cereal box (I will not mention which brand because I'm trying to beat the brand) and it has a list of “18 things to do before you're 18.”

I'm not sure if some of them are even possible before the age of 18, but it's a slow news day here, so I'm presenting the list with commentary.

  1. I'm not even sure what the world's biggest roller coaster is, but we have this here Intarwebs thang so we can look this up and make our own judgement about what constitutes the “world's biggest roller coaster.”

    Personally, I'm not a fan of roller coasters, and I'm disinclined to even ride the things, but I have ridden them before. Years ago, at a time when I was younger than 18, Mom and I were at Disney World. Mom, for whatever reason, decided she wanted to ride Space Mountain, which is a roller coaster in the dark.

    In the dark!

    Anyway, Mom had to drag me on the ride. I had to drag her off the ride. It wasn't an experience I want to repeat.

  2. I'm not even sure this is legal for anyone under 18.

    Oh wait, You can. Down to age 10 it seems.

    Ooooookaaaaaaaay.

    No.

    I've had friends that have jumped out of a perfectly good airplane, but not me.

  3. Nope. I wasn't one for sports as a kid.

  4. Yes. An experience I will never forget, despite forgetting what the actual award was for.

    It was horrible really. I was a Drama Geek in high school, and even though I liked working behind the scenes more than being on stage, I still ended up joining the Thespian Society and the initiation involved dressing up as a clown.

    I didn't expect it to be all that bad. The initiation was the same day the administration was handing out student awards and because of my experience in working the lights in the auditorium, I had permission to skip my classes that day to work lights for all the ceremonies. So I could hide in the light booth at the head of the auditorium.

    All was going well until during one of the ceremonies, my name was called.

    Nothing like walking across a stage in a clown outfit in front of all my peers to collect some brown-nose-esque award from a class I didn't even enjoy all that much (English, as I recall).

    So yes, I won an award while wearing a clown outfit!.

  5. I had two years of clarinet in middle school, and I can still remember some fingerings (especially the transition from A to B-flat which is a bitch on a B-flat clarinet).

  6. This one is hard to decide, but I came down on the side of “yes.”

    I was a Drama Geek in high school and worked backstage during many a performance, including a “battle-of-the-bands” type show. So I kind of squeak by on this.

    Post-18, definitely. In FAU I worked in the auditorium (not to be confused with the theater across campus) and there I worked quite a few gigs. Shirley Jones kept saying “partridge-what?” Buddy Hackett was a loud-mouthed jerk, and Hal Linden stole my pen.

    Yes, the auditorium mostly catered to the older crowd in Boca Raton.

  7. Nope.

    And even if I did, I would have no idea what to say.

  8. Haven't done this either.

    And unless you live in Los Angeles (or maybe Orlando for those that might want to go the Micky Mouse Club route) I can't see anyone under 18 doing this, unless they have an obnoxious stage mom to force the issue.

  9. Well, there's Sean, best friend and author.

    Then there's Sean, friend in college and lead vocalist for our fake band.

    And there seem to be quite a few Sean Conners out there, but I haven't met one of them.

  10. During the 11th grade, I thought I came up with a neat way to very quickly calculate the Mandelbrot Set which required the taking a logarithm of a complex number, but my math teacher at the time had no clue what I was talking about, and upon reflection, I don't think it would have worked.

    I also discovered that it was not a good idea to take the keys to the high school home with me, but that's not the type of discovery they're talking about here.

  11. Yes. Several in fact. But they were all done in college, after I turned 18. When I could be arrested.

    'Nuff said.

  12. Definitely yes.

    My grandparents (both sets) grew up during The Depression and from them, I inherited a “pack rat” gene. Even as a kid I used to joke about my “collection of collections.”

    Which I still have, for the most part (except for the “wall of computers”—after a few years that became really silly as it lead to “wall of really heavy dust collectors”).

  13. No. Not all of us are Shakespeare. Or even Anthony Burgess.

  14. This one I'm claiming, even if I haven't.

    At the end of 9th grade we had to select the classes we wanted for the following year. Even at that age, I knew that public speaking was among the biggest fears of most people (something I learned in 5th (or was it 6th?) grade when forced into Toastmasters) so I thought it might be a good idea (and this was solely my idea) to sign up for both Speech and Drama.

    I should also note that I was quite shy at the time.

    It worked—I have no fear of public speaking at all.

    Fear of heights however

  15. Nope.

    In fact, I found it traumatic enough selling candy in the 4th grade and magazine subscriptions in the 7th grade (I was told to lie to sell subscriptions) that I refused to do it ever again.

    My Drama teacher understood this, and whenever she had a candy sale, I never had to sell candy, but I did help her collect and count the money.

    My 11th grade civics teacher, on the other hand, wasn't so sympathetic. Then again, everyone in the 11th grade had to sell magazine subscriptions and the class that sold the most subscriptions would get a pizza party. I handed all my stuff to one of the more motivated students and didn't think about the situation again until the end of the magazine sale drive.

    Much to my horror, my class won.

    Sigh.

  16. I didn't get my learner's permit until I was 19 and absolutely needed a car to get to work.

    And even then, I failed the vision test (officially—unofficially, I proved the clerk had given me the wrong chart to read).

    And the less said about my first attempt at driving a car, the better (to this day, Dad still is leary of letting me drive).

  17. For loose values of “coast to coast.”

    As a kid, I spent my summers in Royal Oak, Michigan with my grandparents. When I lived in Brevard, North Carolina, my grandma would drive down to pick me up and then again to drop me off. When Mom and I moved to Florida, I started flying there instead.

    But one year, I drove back to Florida with my Mom's cousin and his two young kids (oldest was maybe five at the time). In a Camero.

    And people wonder why I hate trips …

    Anyway, I digress.

    While it's not from sea to shining sea it is from one “coast” (near enough to Lake St. Clair) to another (the Atlantic Ocean) and is over 1,200 miles. Close enough for me.

  18. Yup.

    Although I don't think I ever was 18, as Mom used to joke that I was 10 going on 40 …

Aw heck, since this is a pathetic attempt to start one of those Intarweb memes, I tag anyone and everyone to check off what they've done by age 18 …


Notes from a trip to an office store

I gave Wlofie a ride over to the local Office Depot as he needed a new office chair. Once there, I wandered off while Wlofie negotiated with one of the sales clerks wandering about the store.

In the laptop section, I spied a unit that claimed to have a wireless connection to the Internet. I fire up the only browser available, Internet Explorer, and I'm impressed at the security feature, which is preventing the Office Depot Web Site from doing nasty things to the laptop.

[Office Depot has determined that the Office Depot Web Site is dangerous and can't be used]

Nice to know that Office Depot, in conjunction with Internet Explorer, is keeping those dangerous Office Depot Web Sites from damaging the laptop for sale at Office Depot. Although viewing /. is A-OK. Nice to know.

My interests soon turn to seeing what garbage is being foisted off as keyboards this year, and yet again, I'm not disapointed, with over a dozen crappy keyboards that induced carpal tunnel syndrome the second my hands got near. There was one special keyboard though, that looked like a cheap metal tray with a cheap photograph of keys laminated on top that surprisingly enough, was not a cheap metal tray with a cheap photograph of keys laminated on top, but was in fact, a cheap metal tray with cheap plastic keys with about a millimeter of travel.

[I think I'd prefer typing on a paper replica than this thing]

Having had my fill of pain-inducing keyboards, I then wandered over to the cell phone isle. Such tiny things they are now-a-days, and as I was examining a particularly small example, I noticed that the cell phone (which had no battery and a paper insert inside the screen poorly simulating a working phone) appeared to be attached to the display case via an actual phone cable, much like the type that goes from your phone (or base station if you have a cordless phone) to the wall.

How odd, I thought. I thought they locked these things down. I wonder if I can unplug this—

And yes, you can unplug the cord easily enough.

I wouldn't do it though, unless you enjoy listening to an ear-piercing alarm system blaring throughout the entire store which the employees blindly ignore because this is the umpteenth time this day it's gone off.

Thankfully, Wlofie was pretty much done with negotiations and we were able to leave the store without further incidents.


I hate Heisenbugs

I noticed some odd behavior with mod_blog today. When I make editing changes to entries (mostly spelling corrections) I usually regenerate the static pages (the main page, the various feeds) by hand with the following command:

% ./boston.cgi --config boston.cnf --regen

But today I kept getting the dreaded “Segmentation fault (core dumped)” error. It's always worked before, and the timestamp on the executable was March 13th, so it's not like I made any recent changes to the program.

But, even odder, if I run:

% ./boston.cgi --config ./boston.cnf --regen

it runs without a hitch. Specify the config file without the leading “./” and the program crashes.

And now, fifteen minutes later, I can't reproduce the issue.

Aaaaaaaaaaaaaaaaaaaarg!

Friday, September 05, 2008

Yet even more stupid benchmarks

Yet another silly optimization problem. This time, from a silly coding challenge to find the number of integers expressible with unique digits (that is, no single digit repeats) in a base-10 representation up to the value 10,000,000,000 (there are 8,877,690 such numbers, by the way).

The neatest and fastest solution was final program on this page, written in C#. It generates only such numbers; it doesn't try to test each number. Since I don't use C#, I decided to translate the code in C to play around with it. Wasn't all that hard:

#include <stdio.h>
#include <stdlib.h>

int total = 0;
const int pre[(1 << 10) + 1] /* = { ... } */ ;

void generate2(
        int maxlen,
        int currentlen,
        int availabledigits,
        int currentvalue
)
{
  int last = (currentlen == maxlen - 1);
  int x    = availabledigits;
 
  while(x != 0)
  {
    int digit = pre[x ^ (x & (x - 1))];
    x &= (x - 1);
   
    if (digit == 0 && currentvalue == 0)
      continue;
   
    if (last)
      ++total;
    else
      generate2(
        maxlen,
        currentlen + 1,
        availabledigits & ~(1 << digit),
        (currentvalue * 10) + digit
      );
  }
}

int main(int argc,char *argv[])
{
  int len;
 
  for (len = 1 ; len <= 10 ; len++)
    generate2(len,0,0xFFF >> 2,0);

  printf("total: %d\n",total);
  return EXIT_SUCCESS;
}

I pregenerated the pre[] array since I wanted this to run as fast as possible. The code used to generate the array:

for (i = 0 ; i <= 10 ; i++)
  pre[1 << i] = i;

Anyway, once written and compiled (gcc -O4 -fomit-frame-pointer f.c) it ran in about 0.2 seconds (average run) on a 2.6GHz machine. Fast, but I could go faster by running it across the two CPUs in the box. I was expecting about half the runtime, since this is easily parallelizable.

It ran in about 0.16 seconds, a rather disappointing ¾ time. I commented out the code in generate2() just to test the overhead of threading and syncronization and that isn't a factor (program ran in 0.001 seconds).

Undaunted, I decided to try one of the quad-core boxes at The Office. Reworked the code a bit to split the load between four CPUs as evenly as possible, and ran some tests.

0.13 seconds on average. Still not quite half the speed.

Hmmm …

Saturday, September 06, 2008

Memoirs of a baggage handler

Today is my last day of work at the best job I ever had. I was a ramp worker for a major airline in Las Vegas. I am being laid off in the Great Purge of 2008: the massive airline cutbacks triggered by astronomical fuel prices.

Before you cry for me, I assure you that losing the best job I ever had is one of the best things that ever happened to me. One of the perks of working for an airline is that you get to fly free (or nearly free) wherever your airline goes. The only downer is that they also make you “work” on a regular schedule, which severely cuts into ones vacation time. Now, thanks to the negotiations of my union, I get to keep my basic flight benefits during my furlough period—for up to three years or until I am rehired—without the inconvenience of work. My only burden now is not having any money to travel with, but it still feels like I have won the lottery.

Zen and the Art of Baggage Handling

A long but interesting look at baggage handling and the perks of being on, and off, the job.

Monday, September 08, 2008

I wonder what's actually worse—going nuclear or going postal?

It was supposed to be a simple task. Take The Company (formerly known as The Company>) trouble ticket system, move it to a new server (so it's not running on the same server as the main website) and upgrade to the latest version of the trouble ticket system. The thing was—I already did this a few weeks ago, although it ended up on the same physical server as the new company website. I expected the whole operation to take maybe an hour at the most (which included installing and configuring a new server install).

Only it didn't go as expected. The simple operation of changing the IP address of support.XXXXXXXXXXXXXXXX wasn't so simple. Of the approximately 1,000 domains we have, one one uses dynamic DNS. And of course it's the new Company domain, which uses a completely different mechanism for updating domain information. Our knowledge base wasn't quite clear on the whole process (it left out that as of then, you could only dynamically update the site from certain servers, which excludes the actual DNS server).

I ended up going quite nuclear, which isn't all that rare for me actually. It was just another case in a long line of cases where something which should be rather simple and straightforward wasn't and I get sidetracked on some wild goose chase solving issues that have little to do with what I was trying to do in the first place. It's that whole “for want of a nail we all died a horrible death” thing.

That was pretty much my Friday right there.

Fast forward to Sunday.

For no particular reason, other than “because I can” I decided to set up my webserver to authenticate users via signed certificates. This is something that is a bit more involved than just moving a website from one server to another. Let's see … I had to set up a certificate authority that could sign certificates, generate two certificates to be signed (one for the web server, another for me as a user), get them signed, and install the various signed certificates in the appropriate places (one for use by the web server, and one in Firefox).

The whole process took probably just as long as the mess on Friday, maybe even longer. It was more complex, as I had to reconcile the instructions in Network Security with OpenSSL with an online guide and had to start over several times, as well as revoke several certificates (hey, if I messed one up, why not learn how to revoke signed certificates while I'm at it?).

But not once did I go nuclear (and I got the user authentication via signed certificates working; I also learned how to install the certificate for my own certificate authority for Firefox, Lynx and Apache).

I think I finally realized why I didn't go nuclear—one, I had no time frame for this and I knew it would take several hours. I might not even get it working, so my mindset going in was I've never done this before, I have no idea what I'm doing, this might not be easy, and it might take a long time. And two, no one was relying upon my getting this done and consequently, there was little pressure to actually get this done. So even though I had setbacks and had to restart several times over, I felt no pressure and could “enjoy” the process.

Which, when I get right down to it, is another data point on the “Sean doesn't handle stress well at all” graph.

Another thing, mostly for Smirk, is that when I call in a panic that I can't get something done or something isn't working right, that I'm really just looking for a cardboard programmer who will just listen to my rantings ravings just long enough for me to realize the solution.

Oh, and to blow off steam when I'm going nuclear.


Notes on a conversation over the weekly grocery list

“Cookie dough?”

“Yes, about that. I put that on the list.”

“Cookie dough?”

“It's for The Younger. No, it's not for him! He wants to bake cookies for Ms. XXXXX.”

“And it's a special type of cookie dough—with mint chocolate chips!”

“Cookie dough?”

“Just get the cookie dough.”


Cookie dough? Cooooooookie dough? Coooooooooooookie dough.

Turns out the grocery store didn't have the cookie dough The Younger requested. Instead, I bought two boxes of Andes mints and froze them. They were then broken up and placed into home made cookie dough.

Store bought cookie dough indeed!

Tuesday, September 09, 2008

Confusion

When using my laptop to fix a switch, I don't know if I should be relieved or annoyed that it took longer to boot the laptop than it did to fix the issue.

Wednesday, September 10, 2008

Notes on an overseen Instant Message conversation wherein names have been changed to protect the guilty and to promote plausible deniability so no one (specifically the intrepid person reporting said Instant Message conversation) can be reprimanded

(18:17:33) Bob
hmmmm …
(18:17:42) Alice
hmmmmmmm?
(18:17:57) Bob
i will never begin to understand the minds of some of our users
(18:18:02) Bob
get this …
(18:18:12) Alice
I probably won't, but go ahead anyway
(18:18:12) Bob
kid you not …
(18:18:21) Bob
this is an email reply i received …
(18:18:32) Bob
Hi Bob,
Thank you … I did log in and change the password to XXXXXXXXXX to match the username.
(18:18:56) Bob
WHY WOULD YOU WANT THE PASSWD TO MATCH THE USERNAME ?!?!?!?!?!?!?!?!?!
(18:19:16) Bob
doesn't that kind of defeat the idea of having a passwd?
(18:19:37) Alice
so that you speed up the password cracker. Heaven forbid it runs in .01 seconds when you can have it run for .001 seconds.

Monday, September 15, 2008

Notes on an overheard conversation on vampire slaying

“One way to kill a vampire is to drive a stake through its heart, then cut off its head and stuff the mouth with garlic.”

“And the reason for the decapitation and garlic dinner?”

“Because otherwise, if the stake comes out, the vampire comes back to life.”

“True, but not always. A stake made of hawthorne wood will kill a vampire, and can be removed without the vampire coming back to life.”

“Well, I never did like Hawthorne as an author, so I guess he makes a better stake.”

“Just because he's a bad author doesn't make him a bad cook.”

Tuesday, September 16, 2008

“The time has come. You know it in your soul.”

Back in the mid-1980s, young comics genius Frank Miller used a unique sort of mental alchemy to tell a story that would become legend.

The story of an aging warrior, dragging himself from a restful retirement to fight once more: possibly senile, definitely psychotic, obsessed with reclaiming past glories with no thought to the consequences.

Due to political pressure, Miller was forced to subvert his own dream, applying his astonishing sense of realpolitik to the debased literature of comic books.

We are proud to at last bring his staggering vision to full and revolutionary life.

A testament to the man and his times, McCain: Mavericking Maverick Mavericks More was a terrifying look at obsession—what happens when a man far past his prime is pushed far beyond his breaking point. It is a testament to Miller's consummate skill that life has, in the end, imitated his vision.

Via theferrett, McCain: The Mavericking Maverick Mavericks More

Visit the link and see how prophetic Frank Miller's words (from The Dark Knight Returns) are when applied to the current Presidential Campaign.

Chilling.

But I do have to wonder—could Batman be a Republican icon? It does seem to be popular meme these days …

Wednesday, September 17, 2008

Reason #13 I hate PHP

I'm making sure that the various branches of “Project: Leaflet” are consistent when I notice that configuration.php, which allows one to change various settings, is not displaying at all. There are no errors, just a blank webpage. Usually, I just run the page at the command line to see what might be up:

[spc]XXXXXXXXX:~/projects/nlm/htdocs/nlm>php configuration.php 
Content-type: text/html
X-Powered-By: PHP/4.3.9

[spc]XXXXXXXXX:~/projects/nlm/htdocs/nlm>

Okay, nothing there. Let's see if there's an option to PHP to tell me more:

[spc]XXXXXXXXX:~/projects/nlm/htdocs/nlm>php -h
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>] 
       php <file> [args...]
  -a               Run interactively
  -C               Do not chdir to the script's directory
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse <file>.  Implies '-q'
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -q               Quiet-mode.  Suppress HTTP Header output.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

Hmm … that “lint” option seems promising. Let's try that.

[spc]XXXXXXXXX:~/projects/nlm/htdocs/nlm>php -l configuration.php 
Errors parsing configuration.php
[spc]XXXXXXXXX:~/projects/nlm/htdocs/nlm>

Well, that was spectacularly informative. Why even bother with the option if you aren't going to give any useful information?

Sigh.

Sunday, September 21, 2008

Notes from a ★★★★★ restaurant …

I have this theory about gourmet food, which is partially derived from the book Class: A Guide Through the American Status System, and partially derived from watching countless episodes of Iron Chef America (“Today's secret ingredient … squid eyeballs!”).

The food in a four or five star restaurant is of course going to be the best example of whatever it is you are getting, whether its Beef Wellington or pan seared squid eyeballs in a lemon-butter sauce. If it weren't the best example it wouldn't be a four or five star restaurant, now would it?

Now, to frequent such a place, you have to either be rich, or have access to a fantastic expense account. And I'm sure that after your twelfth perfectly cooked Beef Wellington, you'll get bored. So maybe that pan seared squid eyeball in a lemon-butter sauce sounds interesting. I mean, it'll be the best squid eyeballs you've ever had because this is, you know, a four or five star restaurant. And there's only so much Beef Wellington you can eat.

And that is why I'm convinced that is the only reason chefs cook such odd dishes as squid eyeballs in a lemon-butter sauce, lest their clientele become bored with Black-and-white truffle pizza with Mozzarella di Bufala Campana, heirloom tomatoes and fresh lemon basil drizzled lightly with extra virgin olive oil from the Azienda Agricola Librandi region of Italy, again.

Back in November of 2000, I had Thanksgiving Dinner with John, the paper millionaire of a dot-com at his house in an exclusive neighborhood of Boca Raton, Florida. During dinner, we were served an acorn squash soup.

I hate squash. Doesn't matter which kind of squash, I hate squash (and pumpkins—can't stand pumpkin pie in fact). But since I was a gracious guest, I decided to at least try the acorn squash soup.

It was the best acorn squash soup I ever had. Sure, I hate squash but it was so good I wish I had seconds.

Yes, five star food is incredibly good, even if you don't like it (and yes, I still hate squash and squash soups).

But it's not everyday I get to dine at a four or five star restaurant.

Unlike today.

Today, Bunny and I dined at Chef Allen's, a five-star restaurant in Aventura. She had been invited to a retirement dinner for a friend, and Chef Allen happened to be this friend's brother-in-law.

[I think this is the first time I've ever worn a jacket]

Once inside, we found our seats and checked the menu for the night's dinner.

Zucchini & Ricotta Ravioli
Brown Butter and Spinach

Or

Blue Crab Cake
Pineapple Tzatiki, Summer Kimchee

******** ******** ********

Organic Green Salad
Herbs, Nuts and Berries

******

Pan Seared Grouper
Giant Peruvian Lima Bean Sofrito

Or

Herb Grilled Medallion of Beef
Scallion Mashed Golden Yukons, Wild Mushroom Port Sauce

While I love crab cakes, I'm not a fan of sauerkraut (and by extension, kimchee, acorn squash soups aside), therefore I decided to try the ravioli. My only complaint about this dish was the toughness of the pasta, but I was advised by Bunny (and later on, by Wlofie) that the rather firm al dente I encountered was the proper way to serve pasta. Outside of that (and I will admit I tend to like my pasta a bit softer) it was very good; Bunny found the crab cake a bit on the hot (spicy) side (due, no doubt, to the kimchee) but still, very good.

This was followed by the salad. If there was a dressing, it was so light it wasn't noticeable, but even so, it was excellent (and I tend like dressing with a little bit of salad). The toasted walnuts may have been a bit too toasted for my liking, but at this point, even I will say I'm being too nitpicky.

This was followed by a small scoop of raspberry sorbet with a fresh mint leaf to cleanse the palate. I heard from some people around me that the raspberry sorbet was too tart, but the intent was to eat the sorbet and the mint leaf at the same time; the mint counter-balanced the tartness of the raspberry to make for a refreshing palate cleanser prior to the main course.

And it's here I think I've watched one too many episodes of Iron Chef America—“counter-balanced the tartness” indeed.

I'm not a real big fan of seafood, so I skipped the surf and went for the turf—the herb grilled medallion of beef, which was as tender as butter. The knife didn't so much as cut as it fell through effortlessly. I was relieved that the scallion mashed golden yukons were indeed, mashed and not the trendy “smashed” but again, that's a personal preference on my part. And they were delicious. So was the asparagus, crisp and not at all mushy.

The whole meal was excellent (personal preferences aside) but that's to be expected, because this is a five-star restaurant. Why wouldn't it be excellent?

Monday, September 22, 2008

“I can't see the forest! There's too many trees in the way!”

See Sean.

See Sean mad.

See Sean hit desk with head.

Bam.

Bam.

Bam.

See Sean fall over unconscious. Can you say “unconscious?” I knew you could.

Silliness aside, I just spent the past five hours trying to solve what ended up being a non-issue, and right now, being unconscious sounds appealling.

I was trying to install our second PostgreSQL version of “Project: Leaflet” and was not having an easy time of it. The MySQL version? Trivial, if only because every Linux distribution pretty much supports the LAMP stack and it Just Works™; not so much the LAPP stack.

In fact, our setup is rather custom in nature and was missing a key ingredient—PHP support for PostgreSQL. Only after that was installed did the five hour non-problem start. When installing “Project: Leaflet” (by running install.php) Smirk, P and I kept getting the following error:

Error in query: CREATE TABLE leaflet_ban ( id serial not null, address varchar(50) NOT NULL default ”, note varchar(75) NOT NULL default ”, status smallint NOT NULL default '1', PRIMARY KEY (id, address) ); Table 'mmpro_ban' already exists (Error #: 1050)

Further compounding the issue—when I reinstalled over our working PostgreSQL version, it worked. Let's see—it works under PostgreSQL 8.2.4, but fails under PostgreSQL 8.2.9. That was the only difference (as it turned out) between the two systems. Apache and PHP were the same.

Only with Wlofie's help (or rather, he sat there as I ranted, and then asked a few pointed questions) did I realize what the problem was all along—when I installed the PHP/PostreSQL module, I forgot to restart the webserver.

D'oh!


Reason #√-1 I hate PHP

So Smirk has me installing the PayPal module for osCommerce on behalf of one of our customers. I download the appropriate archive, extract the files, and start reading on how to install this puppy. That's when I read:

To install this module, back up your existing installation to a safe place and then just copy the included catalog/ directory over your existing osCommerce files. This will replace the modified files and add the new files. However, if you have modified your osCommerce installation, you will need to manually compare the new files with your existing ones, and possible manually merge the changes.

Oh bloody hell.

This installation of osCommerce I'm installing into has been in production use for several years now. Of course it has been modified! You can't help but modify it if you want to change the layouts or the verbiage. There have been countless modules added over the course of several years. Heck, I hate touching the thing because it's 88,067 lines of PHP code across 999 source files in 154 directories.

And this module from Paypal? It's 39,765 lines of code across 199 source files in 29 directories.

And Paypal expects me to manually compare the new files with the existing files … heh. Heh. Heh. Heh heh heh. Oh! It is to laugh!

Thursday, September 25, 2008

THE INFOCAPALYPSE IS NIGH UPON YOU!

I swear, I want to take a clue-by-four to some of these so-called “computer network security consultants.”

One of our clients just received an audit from these people, and just like the last time (although last time it was some other company) this audit report is just inane, if not shorter (thankfully).

For instance, this lovely bit (not the full table):

Attackers use a port scan to find out what programs are running on your computer. Most programs have known security weaknesses. Disable any unnecessary programs listed below.
Protocol Port Program Status Summary
ICMP Ping   Accepting Your computer is answering ping requests. Hackers use Ping to scan the Internet to see if computers will answer. If your computer answers then a hacker will know your computer exists and your computer could become a hacker target. You should install a firewall or turn off Ping requests.

Really?

Hackers can use ping to target my computer?

THIS IS A XXXXXXX WEBSERVER YOU MORONS! DISABLING ping WON'T “HIDE” THIS COMPUTER FROM HACKERS!

XXXXX XXXXXXX XXXXXX IS THIS STUPID!

Okay.

I'm calming down now.

And to be fair, it may be that these so called “computer network security consultants” had no idea what the computer was tasked to do and erred on the side of Armageddon.

But generally, I feel such reports are, at best, worthless and at worst, scaremongering tactics to extract a lot of money (link picked at random) for what you get, which is nothing more than a list of open ports that may “help a hacker to gather information about what is running on this machine and what kind of machine you have.” Have these people not heard that security through obscurity doesn't work? That if I have to hide what I'm actually using I've already lost? That a false sense of security is bad because you're deluding yourself that you are safe?

Sheesh.

In fact, the entire report can be boiled down to:

We found a computer at this IP address. This is bad because then “hackers” can break into the computer and do bad “hacker” things. Cut the network cable, yank the power cord, smash the computer to bits, embed in concrete, dump into the middle of the Pacific ocean, and nuke the site from orbit, just to make sure everything is secure.


“I'm refusing to run this program and you don't like it!”

And while I'm on the subject of security through annoyances, if you ever find yourself trying to use FastCGI under Apache using suEXEC, keep in mind that suEXEC is very fussy and won't run any program unless it passes a 20 point inspection test.

Friday, September 26, 2008

1973

In this video about our current economic crisis (via spin the cat) it's mentioned that legislation passed in 1995, in order to make “mortgages more affordable”, set us up for this major fall.

But just prior to viewing that, I read What (Really) Happened in 1995? (via New Mogul) which stated that in 1995, legislation was passed dropping the fractional reserve that banks have to keep on hand, while at the same time, Federal Reserve chairman Alan Greenspan dropped his previous course of setting the interest rate per the price of gold, possibly because another faction of the government was attempting to manipulate the gold market (read the paper, it's absolutely fascinating), thus setting up the entire fiasco we're in now.

Interesting …

I wonder what else happened in 1995 …

Monday, September 29, 2008

And best of all, it doesn't require a time machine

“You must try Alain Ducasse,” declared my editor. At first, I thought this was a cruel joke. The press was buzzing about the new restaurant from France's maestro-chef that boasts a $2 million interior, a $160 tasting menu, and a bill for four approaching $1,500. Although the phone lines weren't yet open, the word on the street was that the 65 seats a night were already booked for six months, with a 2,700-person waiting list. According to The New York Times, “Ordinary diners have less than a snowball's chance of landing a table at Ducasse.”

I was clearly in another league of exclusivity. Lay eaters wouldn't dream of trying to enter a restaurant where if you order verbena tea they bring the plant to your table and a white-gloved waiter snips the leaves with silver shears.

Still, I had no choice.

Via Hacker News Pocketful of Dough

The author explains a technique that will get you into exclusive restaurants quickly, even those that require a reservation. It isn't cheap, and takes a certain nerve to do, but amazingly, it does seem to work wonders.

I just wish I knew about this earlier, if only to ask Mom just how pervasive this technique was.


No wonder economics is called the “dismal science”

For starters, Fannie Mae and Freddie Mac are "government sponsored enterprises". Though technically privately owned, they have particular privileges granted by the government, they are overseen by Congress, and, most importantly, they have operated with a clear promise that if they failed, they would be bailed out. Hardly a "free market." All the players in the mortgage market knew this from early on. In the early 1990s, Congress eased Fannie and Freddie's lending requirements (to 1/4th the capital required by regular commercial banks) so as to increase their ability to lend to poor areas. Congress also created a regulatory agency to oversee them, but this agency also had to reapply to Congress for its budget each year (no other financial regulator must do so), assuring that it would tell Congress exactly what it wanted to hear: "things are fine." In 1995, Fannie and Freddie were given permission to enter the subprime market and regulators began to crack down on banks who were not lending enough to distressed areas. Several attempts were made to rein in Fannie and Freddie, but Congress didn't have the votes to do so, especially with both organizations making significant campaign contributions to members of both parties. Even the New York Times as far back as 1999 saw exactly what might happen thanks to this very unfree market, warning of a need to bailout Fannie and Freddie if the housing market dropped.

Complicating matters further was the 1994 renewal/revision of the Community Reinvestment Act of 1977. The CRA requires banks to to make a certain percentage of their loans within their local communities, especially when those communities are economically disadvantaged. In addition, Congress explicitly directed Fannie and Freddie to expand their lending to borrowers with marginal credit as a way of expanding homeownership. What all of these did together was to create an enormous profit and political incentives for banks and Fannie and Freddie to lend more to riskier low-income borrowers. However well-intentioned the attempts were to extend homeownership to more Americans, forcing banks to do so and artificially lowering the costs of doing so are a huge part of the problem we now find ourselves in.

An Open Letter to my Friends on the Left (emphasis added)

I want to quote the whole thing as this explains my thoughts behind the recent financial markets, but really, why should I quote the entire thing when I can just point to it and say “read the entire thing”?

So … read the entire thing already!

Obligatory Picture

[The future's so bright, I gotta wear shades]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: https://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

https://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2024 by Sean Conner. All Rights Reserved.