Farragut Post Office Pilots “Triple-A” Customer Service Initiative for USPS

I rarely have an opportunity to visit the Post Office, so I was really excited when selling a pair fish-tail exhaust pipes on eBay gave me an excuse to drop in on my favorite bunch of happy-go-lucky government employees at he Farragut Post Office at 1800 M. St. in Washington, DC . They truly exhibit the United States Postal Service “Triple-A” customer service philosophy: Antipathy, Aggravation, Abuse.

My mission to the Post Office in DC was so memorable, I just had to go to USPS.gov and find out how to give the workers there the credit they deserve. Rather than calling the USPS customer service line and using up the last few thousand minutes I have on mobile plan holding for a representative, I decided to give the USPS.gov email contact form a try.

It’s worth noting that even the USPS.gov contact form works to keep things positive: they’ve substituted the ubiquitous “Complaint” form with a “Compliment” form. I did explore the “Problem” form, the “Suggestion” form, and even the ambiguous “Information” form, but each option’s sub-options remained focused on positive feedback. After all, why would anyone want to complain about the United States Postal Service?

Since I had received such wonderful service at the Farragut Post Office, I chose the “Compliment” option. Here is what I submitted to the USPS:

This compliment is in regards to the two postal service employees working behind the counter at the Farragut Post Office at 1800 M. St. in Washington, DC.

I really appreciate that the two postal employees behind the counter took the time to stop listening to the radio and chatting about what to do for lunch and help me instead. I was the only tax payer, um, customer, in the Post Office, and it was 9:30 in the morning, and the Post Office had been open for a whole half hour, so I understand how pressed they were to make a decision about lunch, and I appreciate that they let me interrupt them.

I also appreciate that the worker who did help me decided to only talk to me in a condescending manner, rather than just beat me over the head for asking stupid questions about the package I was trying to ship.

I also appreciate that, rather than punching me in the nose when I told her that I found the answer on the USPS.gov FAQ using my iPhone, she just turned around in the middle of the conversation and walked behind a closed door.

But her co-worker also deserves accolades as well. I watched in awe as another customer walked in and asked if special packaging was required for international shipments, and without even looking up, she was able to give an answer. The answer was more along the lines of “yes, special packaging is required.” After a brief exchange, the not-so bright customer realized that she needed to ask WHERE to find that special packaging.

But where the real customer service initiative was exemplified was when the customer returned with the incorrect packaging, and the postal worker took the time to stop what she was doing, and to deliver a firm lecture on how the customer should pay attention. It was much like that lecture one would give a four-year-old who consistently misbehaves, and whom you wish you had drowned at birth, which the customer’s parents apparently should have done since she came into the world not knowing how to ship a package to Brazil.

So kudos to the Farragut Post Office in Washington, DC!

And kudos to the USPS Web team for leaving out “complaint” in the “Inquiry Type” select menu on the USPS.gov Email Us form. This is pure genius! I imagine that your ratio of positive to negative online customer service reports increased significantly with this simple change.

In retrospect, my Farragut Post Office experience may not have been one hundred percent positive, but one thing I’ve learned from this is that good customer service is really a subjective standard. Some people may like spending their tax dollars to they can be verbally abused, harassed and humiliated by angry men an women. In many parts of the world, you have to go to a red light district and pay good money for that kind of experience. In the US, it’s just the cost of postage. And dignity.

Replacing Long Strings In SQL Exports and Other Large Text Files

I’m migrating a web forum from one MySQL server to another, and it’s usually a straight-forward task consisting of exporting the data from one server importing an other server using phpMyAdmin.  This forum has been particularly active, so the SQL dump file containing the discussion table is almost two gigabytes. This wouldn’t be such a big deal if I were just importing into an identical database, but “business requirements” dictate that I change the name of the database.

Normally I would use Find/Replace in Dreamweaver, but being the bloated application it is, it kept throwing “out of memory” errors at me each time it hit the discussion export file. I suspected Notepad++ wouldn’t fare much better, so I started to Google for a solution.

A lot of options came up for Linux and Perl (which has always been awesome at parsing text), but I really didn’t want to have to move the file off my Windows 7 workstation over to the LAMP virtual server and just add more complexity to the confusion.

So I hit Google again with with a modified search (I just added Windows). I popped open a few tabs and browsed through a couple of options that would require yet-another GUI program installed on my machine. Some looked promising, but shareware always comes with a price, so I started digging into some of the more “hardcore” alternatives.

StackOverflow is one of my absolution favorite developer resources, and when I saw the link to “How can you find and replace text in a file using the Windows command-line environment?“, I knew my chances were good for finding a solution. StackOverflow contributor Mile Schall proposed a solution using Windows Power Shell, which proved to work extremely well.

First, anyone who isn’t familiar with Windows PowerShell should get familiar fast. It’s major upgrade over the old command prompt, gives access to some nifty .NET functionality, and will generally make life easier for anyone working with Windows Servers and Clients.

Following the StackOverflow advice, I launched PowerShell on my Windows 7 machine by going to:

START > All Programs > Accessories > Power Shell > Power Shell

I then navigated to the directory containing my SQL dump file, and entered the following command (of course the target text strings and file names have been changed for privacy):

   Get-Content SQLexport.sql | ForEach-Object { $_ -replace "replace this string", "with this string" } | Set-Content SQLexport2.sql

After a few minutes, the PowerShell prompt returned a new “SQLexport2.sql” file appeared in the directory.

This snippet has worked great for my large SQL files, and I suspect it will also work well for other large text-based files.

Now, the next trick is to get by the 2 MB file limit in phpMyAdmin so I can import the updated 2 gigabyte SQL dump file back into MySQL.

One Mile at a Time

After losing the past three months to a back injury, I’m getting started again on my 1000 Miles project, the purpose of which is to raise money to help cover the cost of my friend Sasha’s leukemia treatment.

I really don’t know how this kid does it. He’s only three-and-a-haf years old, and he’s going through brutal cycles of chemotherapy every few weeks. Every time I seem, even if he’s weak from chemo, he’s enthusiastic and inquisitive. He loves to come over an look at my motorcycle, honk the horn, and dig in the saddle bags. When he’s big enough, maybe his parents will let me take him for a ride.

So, Sasha is a big inspiration to me, yet after all these months of physical therapy, I still didn’t have the courage to get back on the elliptical machine and start walking again. I saw he and his mother walking home from the grocery store yesterday, and I decided that if he could walk a quarter of a mile in the August heat, I could at least go a round on an exercise machine in a comfortably air conditioned gym.

Hurricane ISAAC prevented me from jumping on last night: part of my work at National Business Aviation Association (DISCLAIMER: opinions are my own) is posting critical news updates for our members, regardless of the time of night. But tonight, I didn’t have any excuses.

I warmed up by walking several laps in a rather cool pool while my daughter hung on to my neck, yelling “Giddy-up, seahorse! I’m a mermaid cowgirl. She’s four-and-a-half, and this was great excitement for her, and the wiggling made it a fairly intensive workout for me.

After fifteen minutes of seahorse duty, I dried off (somewhat) and headed into the gym. I hopped on my favorite elliptical machine and started marching up an imaginary mountain. Pretty quickly, I decided to imagine a flat road, since the mountain was mentally kicking my rear. My physical rear was also feeling it.

Perhaps the most interesting thing I notices was that I was averaging about 5.7 miles an hour, and I wasn’t getting winded. My heart rate was steady, between 140 and 142 (a good zone for me), and my stamina wasn’t giving out.

At half I mile, the ache in my hip told me this was only going to be a one mile day at best. I stuck with it and managed to finish one mile in ten minutes and thirty seconds, which is excellent time for me. I’m not sure if I could maintain that over five miles, but I’m determined to find out in the months ahead.

This time, I plan on taking a bit more slowly: rather than jumping right into five miles a day, every day, I’m planning on starting with one mile every other day for the next week, then bump it up to every day for a week or two. I’ll add an additional mile every couple of weeks until I’m back up to doing five comfortably.

Being under the care of the physical therapists at Jackson Clinic gives me a lot of confidence that I can do this. I can already feel where they helped me strengthen by back and core, and I think I can back to five miles a day before the end of 2012 without hurting myself.

So, add another mile for Sasha.

  • PROGRESS: 83 miles
  • REMAINING: 917 miles

Make A Donation to Help Pay for Sasha’s Chemo

Formatting PHP Date() Time Strings with AP Style

While developing an event management application, I ran into an interesting challenge: we use Associated Press (AP) Style for our Web publications, but PHP’s date() function only support time suffixes “am / pm” or “AM / PM”. AP Style calls for times to be formatted with “a.m. / p.m.”

To solve the problem, I came up with the following function:



function APtime($timestring){

$APstyleTime = (str_replace(array(“am”,”pm”,”AM”,”PM”), array(“a.m.”, “p.m.”,”a.m.”, “p.m.”), $timestring));
return $APstyleTime;

$myTime = ’12:04 pm’;

echo APtime(date(“g:i a”, strtotime(“$myTime”)));




12:04 p.m.

I’m not a big fan of PHP’s support of date/time formats and masks, but at least this is a simple (and reusable) solution to an annoying problem.


Too Much of a Good Thing

It’s been a while since my last post, but I want to assure everyone that I haven’t given up on my effort to walk 1000 miles. As it turns out, five miles a day on the elliptical is apparently a bit aggressive, and I wound up hurting my lower back pretty badly. Walking, bending, sitting, and even laying on my back caused serious paid (let’s say seven out of ten on the pain scale). My legs would crap and go weak with certain movements, and ibuprofen stopped working.

After a relaxing, yet uncomfortable vacation in Myrtle Bead, I decided I could put off the pain any longer, and when I got back to Alexandria, I set up an appointment with an orthopedist. After a physical evaluation and X-rays, my doctor confirmed that my back was in the best shape: the disks in my lower back were being compressed and interfering with the nerves there. Fortunately, I didn’t have to have surgery, steroid epidurals, or highly addictive pain killers, but my orthopedist did send me to physical therapy.

When I started physical therapy last month, I could barely walk due to the pain in my lower back and legs. Filling out the evaluation form in the physical therapist office made me realize just how much this pain was limiting me: I couldn’t stand in one place for more than two minutes; I couldn’t sit in a chair for five minutes; I wasn’t sleeping through the night; I was avoiding household chores (even more than usual); and I was no longer able to walk the distances I needed to walk to make real progress towards my 1000 mile goal.

Krista (whom I affectionately call “Mistress Krista”), Anthony, and the rest of the physical therapy team at the Jackson Clinic in Alexandria have done a great job getting me back on my feet and moving again. They put me through the gauntlet twice a week, but after every session, I feel stronger and have greater mobility. More importantly, they are giving me valuable knowledge to help understand how my body moves an works, and they’re giving me exercises I can do on my own to help strengthen my “core” and better support my back.

For anyone having difficulty moving, I strongly recommend an orthopedic evaluation followed by physical therapy. Ant-inflammatories and pain killers may mask symptoms enough to allow a person to keep exercising, but   as I discovered, sometimes this just allows more damage to occur.

I still have at least another month of physical therapy to go, but I’ve made enough progress to begin walking again. Despite the heat in DC, I’m even trying to get out an walk the city during lunch (I managed about a mile and a half last week). When I’m finally released from physical therapy, I expect to be substantially more fit than when I started.

This evening I’m working through the exercises Mistress Krista and Anthony have taught me, and tomorrow, I’m getting back on the elliptical for the first time in more than a month. I know I won’t do five miles; I may not be able to do three; but I’m getting back on it, and by the end of the day, I’ll be a few steps closer to 1000 miles.


Five Tips to Jump-start Vanilla Forums Theme Development

Quite a bit of my work over the past year has been integrating ListServ (the grand-daddy of email discussion lists) with a modern web forum. I built the initial prototype from the ground up, but performance issues and lack of bells and whistles most users expect these days led me to evaluate several open source platform. After some research, a couple of false starts, and one near-disaster, I settled on Vanilla Forums.

Vanilla Forums is a mature open source forum platform with an active community in which the developers actively participate and listen to the ideas, wishes and rants of its community members. The Vanilla team has been working hard to develop formal Documentation for the platform, and while I would consider the forum administrator and user documentation complete, the developer documentation is only half way there.

I think part of the challenge in documenting Vanilla Forums stems from the developers us of Model-View-Controller (MVC) design pattern. MVC helps developers produce high-performance, reusable code, but it’s easy for an a developer unfamiliar with working with Object Oriented MVC code to get lost in layers of abstraction.

I found myself in this situation as I neared completion of my ListServ integration project. Much of my work over the past decade has been refactoring spaghetti code into some semblance of structure, and I’ve had a good bit of experience working with object oriented PHP, but I’ve never seen anyone drink the MVC Kool-Aid like the developers at Vanilla. Their code is tight, clean and performs extremely well, but it isn’t always clear what classes, methods and functions to use.

In future posts, I’ll try to dig down deeper in how to make Vanilla Forums behave, but for now, I’ll share my quick and dirty tips on where developers can get started building their own Vanilla Forums Themes.

Take advantage of Open Source themes.
If you’re building your own theme, don’t. Steal, borrow, or exercise some Open Source license on a theme you like that’s structurally close to what you want to do. Use Find/Replace (at least in Dreamweaver) to change all instances of the theme name. And don’t forget to rename any files that contain the them name. Oh, don’t forget to give yourself credit for your new awesome theme in the “about.php”.
Don’t be a Smarty-pants.
Smarty is a templating engine built to run on top of a PHP application. Unfortunately, Vanilla has only implemented a few “Smarty tags”, so using the Smarty theme templates (you can recognize them by their .tpl extension) is a bit painful for PHP developers familiar with using PHP at the presentation layer. To prove you’re smarter than Smarty, and to make building your own custom theme significantly less frustrating, delete “deafault.master.tpl” from your theme’s “views” directory and replace it with a copy of default.master.php (found in the “/[your-vanilla-root]/applications/dashboard/views” directory)
Do it with Style(s).
Vanilla’s stylesheet “strategy” can get messy fast. Create a “custom.css” in the “[your-theme]/design/” directory. As you modify classes, copy the whole class you want to use from “/[your-vanilla-root]/applications/dashboard/design/style.css”. You can often achieve everything you want out of a custom template just by modifying the stylesheet.
Get plugged in.
Plugins are relatively easy to use in Vanilla. If you want some special functionality out of your theme, look for a plugin that does something similar, and then make it your own. If you can, try to take advantage of Vanilla’s built-in modules and classes, but if you’re trying to build a simple plugin on a tight deadline, sometimes it’s easier just use ten lines of PHP to query the database and echo the results where your want them, rather than using a few hundred lines across several files to build to MVC design patterns.
Do whatever it takes.
If you can’t figure out where Vanilla is adding a particular element (usually it’s embedded deep within a module, inside of an enigma, wrapped in a mystery), don’t be afraid to commit CSS assassination (visibility: hidden !important). Just remember to come back to it once you’ve done your product demo.

Hardcore Vanilla developers will probably flame me over these five tips, but sometimes it’s better to be a pragmatist rather than a perfectionist.

After all, if the client is happy with the job, then it’s a job well done.