Month: February 2017

Amazon Web Service – Insufficient Capacity

Update 3/1/17: So it looks like Amazon was having trouble yesterday. Let’s assume my problems were related to that, not a problem in this service in general. Hopefully things go more smoothly moving forward.


I tried to jump into Amazon Web Services today to explore the possibility of a hosted application. Pretty cool stuff, I setup an instance to test some things out and setup a second instance for a client to look at things.

Then things started going wonky – I couldn’t get the Windows Start menu to come up in one instance. Tried rebooting it – no help. “I’ll just stop it,” I thought. And, being cheap, I thought “let’s shut down the other down as well, don’t want to get a $3 bill from Amazon if I go over hours”.

Then the client calls and wants to test things out. “No problem,” I say. This stuff is like magic. I just go to my cloud interface and start that baby back up. When I try, I then get this:


It’s been three hours now and I can’t restart either instance. The client is not impressed. I’m not impressed.

Stripe Metadata

Stripe is obviously good for charging credit cards. Subscriptions & Plans work great for SAAS. A feature that is not so obvious but I’m finding really useful is Stripe’s ability to add metadata to a client entry. Metadata can be any name/value pair and looks like this in the Stripe web interface:


So what can you use it for?

I have a software program I sell that comes with a free 30 day demo period. I put the expire date of the demo period in the Stripe metadata. I could hide that in the data of the program in one way or another, but what happens when a potential customer calls and says they’d like a little more time to test out the software? With the data in Stripe, I can easily go into the Stripe web interface, change the date, and they’re good to go.

I also put the version number of my software in Stripe metadata. When a tech support email comes in, I can easily check for myself what version of my software they are using.

Since it is demo software, I also store the last time the software was used. This let’s me see demos that are no longer being used.

On a simpler level, I can store name/phone number/email information in the metadata. Again, when that tech support email comes in, I can figure out what company it is and can call them back if need be.

Updating Stripe metadata is straight-forward using the StripeX library in VFPX:

* Create/Update the Stripe customer record
oStripe.AddMetaData("Last Update", TTOC(DATETIME()))
oStripe.AddMetaData("Expire", DTOC(lExpire))
oStripe.AddMetaData("Version", oVar.zAppDate + ": " + oVar.zAppVersion)
oStripe.AddMetaData("Active Count", TRANSFORM(lActiveCnt))
oStripe.AddMetaData("School", lName)

lCustID = oStripe.Customer(zsysvar("CustID"), lName)

Canva for Quick Graphics

As a computer programmer, I’m legally barred from having any artistic ability whatsoever. That was fine back in the days of punch cards, but it’s super inconvenient today because computers today come with screens. Screens that frequently need graphics. has been a huge help for me when I need to create some simple graphics – a banner, a business card, a button image, a Facebook ad, whatever. It’s mostly free (you can pay a couple bucks for graphics and such), easy to use and flexible.

Here’s a quick graphic I did for a business card for my local PTSA. I stole the graphic from the school website (thanks Snagit!) and combined it with some text using Canva:


And a banner I could slap into my Teamviewer client:


A skilled graphic artist would certainly do better, but for all my quick & free needs, Canva has been great.

Teamviewer – Two Places at Once

Last week I bit the bullet and bought the full version of Teamviewer and I already loving it. Having clients do Help > Start Remote Control from my app’s menu (and then my code is simply run / TeamView—-) is worlds easier than directing them to a website to download an EXE.

Today I had a client trying to move my app from one computer to another. They were having trouble as clients sometimes do. I was on the new computer, but needed files from the old computer. So I had the client start remote support on the old computer, while I was still connected to the new computer…. and it worked. I had two sessions of Teamviewer running connecting me to both computers at the same time.

I had them up and running in 10 minutes with no hassle. Pretty slick.