Month: December 2015

Around the World with VFP

So WordPress has sent me some statistics on this blog. I’m kind of fascinated by the graphic below showing where my visitors come from. This tiny blog, with no promotion, in operation for only three months, dealing primarily with a programming language that hasn’t been updated in 10 years – has got visitors from around the world. That blows my mind a bit.


Don’t Be Dumb – UPS Version

I’m having some wine delivered and in our state you have to be here to sign for wine. Even though I’m here 90% of the time, I’ve managed to miss the first two deliveries from UPS.

Really wanting my wine, I signed up for MyUPS which gives you info on your shipment. UPS emails me and says that my final attempt at delivery will be Monday between 1PM – 5PM. A four hour window seems pretty dumb in 2015, but OK, I can live with it. I go do my grocery shopping in the morning so I’m sure to be here. UPS shows up at 10:30 AM and I miss the final delivery. 

It’s 2015. We have computers, GPS, and cellular networks. It would seem pretty easy for UPS to provide a website to update you on every step your package took – Left the warehouse, you’re the 13th stop for the day, the truck is currently at X, two more stops before your delivery, estimated time of delivery, etc.

Let’s think about how inefficient this process is:

  • They have to attempt delivery 3 times. If they give me the info, they would only have to deliver once.
  • My package is now being stored in a warehouse for five days for me to pick up. It’s 45 minutes away, I’m not going to go get it.
  • After five days, this 40lb box will be flown back across the country to the shipper who will then have to deal with it.

It blows my mind how dumb some companies can be. Don’t Be Dumb.

Dumb is one thing. Poor customer service is another. Here’s what I got when I called UPS customer service on this issue:

  • Customer service rep couldn’t answer my simple question. Put on hold for 10 minutes while they tried to get an answer. Have to take my info and have someone else call me back.
  • Gal that calls me back blames me for all of this saying “I don’t know why you’d expect delivery between 1-5”. Because your email told me so.
  • Gal tells me that the 1-5 PM is only an estimate, we only guarantee by end of day. Then why tell me 1-5 at all? Why have me change my schedule for something you can’t do?
  • When asked if she can understand my frustration, she says “No, we’re busy this time of year. That’s all we can do.” When a customer asks if you understand, say “Yes”. You may well be lying, but the correct answer is always Yes. 
  • The solution she gives me is that she’ll contact the truck and they might attempt one more delivery tomorrow.
    “Might,” I ask?
    “Yes, might, I don’t know if they will or not.”
    So now I have to sit around all day on the off chance that they might deliver the package one more time.
  • Not being satisfied with a “might” answer, I try to get something more concrete from here. Will you call me back? Will MyUPS be updated? No is the answer to all of those questions, at which point she hangs up on me.

Dumb I’ve learned to live with. Dumb and don’t give a shit? That’s when you lose my business.

Update 12/30/15: I end up close to the customer service center so I stop in to pick it up. After waiting 20 minutes for the two customer service reps to service 4 people, I make it to the front of the line.

The customer service lady asks for my tracking number, which I don’t have. She gives me a lecture that I absolutely must have the tracking number every time I come in. She of course looks up the package on the computer by my name in 10 seconds. Not feeling particularly snarky,  I don’t point out to her that the tracking number isn’t really necessary now is it?

“Here it is,” she proclaims, “please take a seat and we’ll bring it out in about an hour.” I leave.

Call the shipper. They call UPS and arrange for one more delivery attempt. I rearrange my day so that I’ll be here. I get a email from UPS on that day now saying that the package is “lost”.

A week goes by. I get a notice from UPS that they attempted delivery again and I wasn’t here – no notice that they were going to do this even though I’ve signed up for their service. There’s no notice on the door and the time they say they say they attempted it, I was here. So this is a lie.






Stripe Plan and Subscription Functions

I’ve updated StripeX with new Plan & Subscription functions.

Stripes terminology is slightly confusing:

  • A “Plan” is a subscription you sell. So “Tech Support $50/month” or “$3 per month per user license” is a Plan. Your stripe account can have multiple plans.
  • A “Subscription” is when a customer subscribes to a specific plan. A customer can subscribe to more than one plan.
  • So customers have subscriptions while your account has plans.

The .PlanList() function will build a cursor of all the plans on your account while the .PlanRetrieve(id) function will get the information for a specific plan:

There are four functions that work with subscriptions (a customer must have a Card on file to add subscriptions. Card functions are explained here):

  • SubscriptionCreate – Creates a subscription for a customer
  • SubscriptionDelete – Remove a subscription from a customer
  • SubscriptionList – Builds a cursor of all the subscriptions a customer has
  • SubscriptionRetrieve – Gets information for one subscription




Giving Rather than Getting

I’m one of those annoying people that really doesn’t have a lot of wants. When I do have something I want, I just go buy it. That makes it hard for family & friends to buy me gifts. Doubly hard since my birthday and Christmas are in the same month.

To prevent those family & friends from pestering me to invent something they can go buy that I don’t really want, I do a fundraiser each year. When folks ask me for gift ideas, I just point them there. It works pretty well (other than my wife who wants to “surprise” me). Wrapping up a charity with my birthday makes writing the check to the charity feel a little nicer.

I also try to pull my clients in on this. Cynics might say that I’m trying to let me clients know I’m a good guy. Optimists might say that I’m bringing charity into all aspects of my life. Take your pick.

Here’s some ideas on offers you can make to your clients to get them to donate to your fundraiser:

  • Offer a discount on your hourly rate. If you charge $X/hour, offer them $Y/hour with a $Z donation. Z must be greater than Y.
  • Offer free karma. For every $X dollars donated, give your client a free hour of support if they need it in the next Y months. Maybe you’ll have to pay, maybe you won’t.
  • If you sell a product, offer $X off the price for a $Y donation. X must be greater than Y.
  • If you sell a product, offer to do an enhancement or new feature if $X dollars is raised.

If you’re interested, my fundraiser this year is