One of my web hosting providers, Bluehost, upgraded their cPanel software over the weekend. (cPanel is software that configures the computers, “servers,” that run websites.) At about the same time they changed spam filters from Postini, a filtering service run by Google, to Spam Experts.

I’m not sure which of these changes was the one that messed up the outgoing email. All I know is that since Sunday morning, email sent from mailboxes on that server don’t make it to their final destinations. They don’t bounce back. They sail off into the void. We get mail alright. We just can’t send any.

I’ve gone three rounds with their support team. They keep saying my mail program is misconfigured. “What are your settings?” they ask. I tell them. They write back, “What mail program are you using and what are your settings?”

It’s not my settings. I logged into their mail program with their settings on webmail. I sent a message to myself at another account. It never arrived.

I get that they deal with people all the time who don’t have a clue what they’re doing. I get that they have to ask the obvious questions. It’s their protocol.

But I try to help them by telling them precisely what’s happening on my end, and I still can’t get past the “You must have screwed up your settings” stage.

I get the same runaround from tech support everywhere, it seems. The first line always implies, “You’ve screwed it up.”

All I want is a little respect.

10 Reasons I Live Here

When you’re clearing the driveway of 7 inches of wet, heavy snow on March 30, you have to remind yourself why you live where you do.

Here’s my top 10:

  1. The school our kid goes to is really, really good. And he loves it. And he has good friends there.
  2. We have a porch-side view of the AuSable River. When the weather finally does improve, sitting on the deck watching the river go by is the best therapy for just about anything.
  3. We live in a good neighborhood. There aren’t a lot of people here, but it’s a know-your-neighbor kind of place.
  4. There is a park one block down the street where you can listen to music for free every Friday night in the summers.
  5. There is a community center right next to the park that offers dance lessons, summer theater for kids, and lots of other neat stuff.
  6. We’re on the Lake Placid Ironman route. We meet a lot of world-class athletes.
  7. We live in a comfortable house with a really nice kitchen.
  8. We’re far enough away from populated areas that it’s quiet. But close enough that we can get to world class cities (Montreal) and regional cities (Burlington, Glens Falls, Saratoga, Albany) without too much trouble.
  9. Brooke’s job is attached to this place. And it’s a pretty good gig as small church gigs go.
  10. Did I mention, the school our kid goes to is really, really good.

That’s my list. You may not be digging out from a March 30 snow storm, but every now and then you might want to remember your list, too.

How Many Blades Does a Guy Need?

I joined the Dollar Shave Club last month.

For a dollar a month (plus shipping — so actually $3 a month) you get a pack of 5 new blades delivered automatically in the mail every month.

The “Humble Twin” blade is $1/month. You can upgrade to the “4x” blade for $6 or the “Executive” for $9.

It’s a twin blade like they used to have back in the 80s. It gets the job done. Use it for a week and replace. It’s always sharp.

Back in the day, the ads were all about how great an innovation the twin blade was. “The first one lifts, the second one cuts, giving you the closest shave….”

Then, sometime in the 90s I think, they decided that, “three blades are better than two.”

I’m not sure when they started making razors with 4 blades. I tried one once. It was just too wide to fit between my nose and mouth. I ended up with a little strip of thin moustache under my nose that had a disturbing Hitleresque quality to it.

Now in the skin care aisle, I see razors with 5 blades.

The Dollar Shave Club Executive has 6 blades. I’m not sure why. It just does.

Somewhere in the dark recesses of the Gillette company compound there’s probably a guy in a dark room trying to come up with the next razor innovation. His face is lined with concentration. He’s muttering, “I wonder what comes after 6….”

The basic twin is plenty if they’re sharp. The Dollar Shave Club’s twin is cheaper than buying them at the grocery store.

If you shave and you’re tired of using dulled quintuple blades I recommend it.

Notes from the Far Reaches of Insanity: Standardized Tests

Across New York State next week kids will be taking standardized tests.

They’re the “new tests” required for the new Common Core Curriculum.

Apparently they’re a big deal.

On Wednesday we got an email with a letter and testing schedule attached from the principal. Yesterday a paper copy of the same letter and schedule came home.

The letter explained that the tests were very, very, very important. “Every child in school in New York State must be tested,” it said. “Every child in New York State will be tested on these days. There will be no exceptions, as in the past.”

In other words, parents cannot “opt out.” You have no rights in this matter. Your child will be tested.


I took standardized tests when I was in grade school, too.

When I was in elementary school I was compliant. I took the tests as directed. Somewhere, in a shoebox in a closet I still have the standardized result sheets from those tests. I was above average, of course.

In Junior High I stopped being compliant.

In 7th or 8th grade I realized that filling in little dots with a #2 pencil on a computer form was stupid. I gave the standardized test people a failing grade for their sheer stupidity.

Instructions for the standardized tests in those days was read over the P.A. system. Teachers, who were otherwise fairly reasonable human beings, were required to suspend their humanity, stop teaching, and hover around the room making sure everyone complied with instructions being read mechanically from a packaged script over the speaker. The instructions at the beginning of each exam were the same. How to fill in little dots on a computer form with a #2 pencil. Step by step. How to fill in the dots representing the letters of your first name. Then your last name. Your grade. On it went. It took 10 minutes to fill in your name and grade.

At the time I guessed that people who couldn’t figure out how to fill in the dots with the letters of their name were probably the people they were really looking for. So I started filling in random dots. Then I started filling in whichever dots on the grid made a little spaceship pattern. Then I started filling in the whole exam form with dots that made pictures.

It didn’t matter. The computer was too stupid to figure out what my name was. I don’t have any results sheets in my closet for those years.

For the past week, homework has been practice problems for the test. Any school administrator who says “Yes we have standardized tests, but we don’t teach to the test” — that is bullshit. They teach to the test. It’s not their fault. They’re required to. And they’re required to lie about it to keep their jobs. Don’t hold it against them.

The letter that came home was full of advise to parents about how to minimize the stress of these tests. It gave the impression that people at school are pretty stressed about them. “The lady doth protest too much, methinks.”

I asked Silas, “Are people at school pretty stressed out about these tests?”

“Yes,” he said.

“Well,” I told him. “You don’t have to worry about it. Just do the best you can. It’s no big deal. It’s more about the teachers than about you.”

Mark Twain was on the right track. “God made idiots first,” he said. “That was for practice. Then he made school boards.”

Twain wasn’t around to see that even school boards were only practice for standardized test companies.

When It Rains, It Pours

For a long time, things have gone along slowly.

All of a sudden this week, I have more to do than I can handle. Not because of procrastination. Several projects just cropped up all at the same time.

I’m not complaining. I like the work.

This will last a month or two, I expect. Then things will probably go back to slow again.

There must be a happy medium.

I have yet to find it.

If only I could save a few of the hours during the slow times to use during the fast ones.

More Bridge

I’ve been invited back for Bridge the next two Fridays. One of the ladies had hip surgery. I’m her substitute.

I must not have done so badly last time, in spite of not having played at all in 12 years. Turns out, it is a little like riding a bicycle. More came back than I thought would. I came in 3rd (out of 4).

The snacks are good, too.

Puzzle Obsession

I got so wound up in coding today I almost forgot to post.

Magento, an open-source e-commerce platform, is one puzzle after the next.

Or maybe more like a code labyrinth. Stuff is hidden in a thousand different places.

More puzzling tomorrow.

Magento 1.3 on php 5.5

After I got Git working last week, I had to get Magento 1.3 up and running on my development server.

Magento 1.3 was released in March, 2009. A lot has changed since then. (The current version of Magento is 1.8.)

My development server runs php 5.5.5. Magento 1.3 runs on php 5.2.

I didn’t want to roll my development server back to php 5.2. I’ve got other things I need to develop that aren’t stuck in 2009.

Getting this to work isn’t obvious. It took a bit of searching and trial and error. All of what follows is available on the Magento Forums. It’s not all together in one place, though. This post is so I’ll remember how to do it next time, and for the next person (if there ever is one) who needs to get Magento 1.3 going with a more up-to-date php version. It worked for me. It doesn’t come with any warrantee that it’ll work for you.

  • Step 1. Fix the Fatal Error.

When you first install Magento 1.3 and try to run it (go to your installation’s URL), you’ll get a fatal error:

Fatal error: Method Varien_Object::__tostring() cannot take arguments in /path/to/magento/lib/Varien/Object.php on line 488

Why? Because php 5.2 (and lower) allowed you (and Magento) to pass arguments to __toString(). Starting with php 5.3, you can’t do that. Fortunately, you don’t have to know or care what __toString() is to fix the problem. You’ll need to change two files.

In the lib/Varien/Object.php file, find the line (around 484) that reads

public function __toString(array $arrAttributes = array(), $valueSeparator=’,’)

Change __toString to __invoke, (that’s two underscores before the word) leaving the rest of the line the same.

(Note: __invoke() is not available before php 5.3, so if you save this back to a server still on 5.2 or lower, it’s going to bork. See the Extra Bonus Tip below about not transferring configuration files back to your staging/production servers.)

Next, in  /app/code/core/Mage/Core/Controller/Request/Http.php, find the line that reads

$host = split(‘:’, $_SERVER[’HTTP_HOST’]);

Change split to explode, leaving the rest of the line the same.

  • Step 2. Fix the “Can’t retrieve entity” Error.

Now, if you try to load your magento installation in your browser you’re going to get another error:

Can't retrieve entity config: core/store_group

This error is caused by some library files that aren’t compatible with newer versions (5.3 or higher) of php.

To fix this, download a more recent version of Magento here.

Unzip the file and then go to the /lib/Varien directory of the new magento files. From that directory copy the entire Simplexml directory and use it to replace the /lib/Varien/Simplexml directory in the Magento 1.3 files. (Word to the wise: You might want to back up your 1.3 version of the Simplexml directory before you do this, just in case.)

  • Step 3. Clear the Cache.

Magento’s cache is in the /var/cache directory. There will be a bunch of subdirectories in there: Mage--0, Mage--1, etc. Delete them all. Don’t worry about it.

That should do it. Now you should get your Magento site’s home page when you load it in your browser.

Bonus fix. Database Error.

As it turns out, I had a third error come up:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '16267977' for key 'PRIMARY'

Simply running repair table (use phpMyAdmin or whatever) on all the tables in the database (Again, make a backup, right!) fixed this for me.

Extra Bonus Tip. Ignore Configuration File Changes.

If you’re developing on Git (or anywhere else), you probably don’t want to commit all these configuration changes or push them back to the staging or production servers. (They’re probably still running php 5.2 or lower.)

You can’t make Git ignore them because they’re already being tracked. What you can do is tell Git to assume that they haven’t been updated.

For each file you want to ignore:

git update-index --assume-unchanged path/to/file.txt

If you ever need to change them back:

git update-index --no-assume-unchanged path/to/file.txt

Good luck.

School Newsletter Needs Editor

Every week a school newsletter comes home. Every week I’m astonished by the writing.

We love Silas’s school. Silas loves it. It’s the best public school you could ask for. Except the newsletter.

The principal’s letter is always at the top. It’s always ¾ of a column in a small fancy script font. They should print it in a 15 point simple serif font. The most important parts — calendar changes — are always buried in the middle somewhere.

Mr. M— is a nice, nice guy. His heart is in the right place. Somewhere in graduate school, though (probably writing his master’s thesis), clarity gave way to verbosity.

Here’s the text from the letter in Friday’s edition:

Dear Parents and Community:

This was a busy week due to the two snow days we had last week! Play rehearsals and baseball and softball practice are in full swing. Our students wear multiple hats at times, so their schedules can get quite overwhelming for them. This is one of those times. This next week will be filled with play preparation as the ShowTime is swiftly approaching. For our older students, sports and drama will take up a lot of their time. Our senior class is preparing for their trip. Our Juniors are looking at college plans, many are also involved in fundraising activities for upcoming trips. For our younger students, grades 3-8 testing is approaching (April 1st) so preparation for that is taking place as well. As parents, we do our best to be sure that our children get the nutrition and rest they need while fulfilling responsibilities they have at home and at school. Our children learn from watching us, so our patience is valuable and helps our children to keep things in perspective. Thank you for your support!

A reminder that we will have school on Friday, April 11th and Thursday, April 22nd. Our International Night that was scheduled for March 13th has been moved to Thursday, April 3rd beginning at 5:30. Please be sure this update is included on your calendar.

Our next Budget Meeting is on Tuesday, March 25! This process is a lengthy one with many decisions to make that will impact us all. Please attend the meeting so you can be informed as the process moves forward for our 2014/15 school year budget. We have two Board Member terms expiring this year. If you are interested in being on the KCS Board of Education, please contact school to get the information you need to become a candidate.

The weather is always a topic as we begin to hope for some warmth and sunshine after this long period of ice and snow. We wish you a happy weekend regardless of the temperature!!

Mr. M—

342 words. Here’s my edit:

 Dear Parents and Community:

Because we had two snow days last week, we have several calendar adjustments. We will now have school on Friday, April 11 and Thursday, April 22. International Night will be on April 3 at 5:30pm. Please mark your calendars.

The next budget meeting for the 2014/15 year is on Tuesday, March 25. Decisions about the budget affect everyone. We hope you will be involved and stay informed.

Two positions on the Board of Education are up for election this year. If you want to be a candidate, please contact the school for information.

This is a busy time. Students’ schedules are packed. Play rehearsal and practice for baseball and softball, preparation and fundraising for class trips, and state testing for grades 3-8. Sometimes it can seem overwhelming to them, and to their parents. Please remember that students take their cues from the adults around them. Adequate rest and nutrition are essential. Perspective and patience go a long way.

As always, thank you for your support. We wish you a happy weekend regardless of the temperature!

Mr. M—

185 words.


Git over ssh on Mac/Linux. Private Key. No Password.

I spent a lot of time last week getting Git to work over ssh.

(Git is a software version control tool. It’s a software developer thing. Feel free not to read this if you don’t care about Git or software. I’m putting this up for the next poor yuck who’s got this problem and is praying to the Google gods for an answer.)

Here’s the problem.

I’m working on a web project. The web hosting service gives us access to the project on Git over an ssh (secure) connection.

The hosting company created and installed the ssh keys and gave us a copy of the private key. Then they disappeared. (Not really. They’re still there. But they live in India where there was a big holiday this week, so they weren’t answering email.)

I put my private key in the ~/.ssh directory. I fire up a terminal window. I type:

git pull ssh://git@git.hostingservice.com/projectname.git

The server asks for a password.

I don’t have a password. All I have is this key file. And they’re off the hook in India.

Here’s what you have to do.

In your ~/.ssh directory, look for a file called config. If you don’t have one, fire up your text editor and make a new one.

Along with whatever may already be there, add:

Host git.hostingservice.com
  Hostname git.hostingservice.com
  User git
  IdentityFile ~/.ssh/privateKeyFile

Technically, you can call the host (on the first line) anything you want. Call it george if you want. I’ve made it the same as the hostname because I use SublimeText with SublimeGit as my IDE, and SublimeGit always calls the Git Host by the Hostname. But if you’re just using the command line, anything goes.

One last thing. You have to check the permissions on the key file. When I first just dropped it into the ~/.ssh directory, it inherited the 0644 permissions of everything else. Ssh hates that. It will ignore keys that are open to the public. Set the key file’s permissions to 0600.

Now you’re good to go. From the command line, you can call Git and ssh into whatever you called the host:

git pull ssh://george/projectname.git

And you’re off and running.

At least, that’s what worked for me.