How to lose business, an example from Flickr

  1. Receive email from Flickr about Pro subscription due for renewal.
  2. Try to pay for it repeatedly over several days but always get some error message about a “bad panda” and they are aware of the problem and are fixing it soon. The problem persists over several days.
  3. Renewal deadline passes, check reminder email, it’s sent from a donotreply@ account.
  4. Find a support wizard, the problem isn’t listed after answering questions about it so I get an option to contact support.
  5. Fill in form saying what I’m trying to do, but notice there’s no field for an email address. They know my address though right? That’s where they sent the Flickr sub reminder?
  6. When I submit the form get a message “your response will be sent to xxxxxx@yahoo.com”, an address I’ve never signed up for or used.
  7. Attempt to find Yahoo support system to add a note to the ticket or update my email, can’t find it.
  8. Attempt to send new support ticket to Yahoo. The new support wizard I find seems to have different categories to the first one, none are relevant, there is no “other” category and there is no option to contact support.
  9. Decide not to pay for Flickr Pro

At the beginning of this process I figuratively had my hand extended with money for them to take. I’ve subscribed to Flickr Pro for years, I was just going to pay.

At every step of the way they made it hard. They made it a fight to hand over that money. If they had fixed the payment form after the first error message (like it promised) they’d have my money. If I’d been able to reply to the subscription reminder email and get through to support they’d get my money. If their support process had worked they’d likely have got my money soon.

I think the idea to just not bother came to me when I was forced into their badly designed error prone advert encrusted shoddy attempt at a webmail “portal” that not only do I not need or want, I actually resent, everything else just added weight to it.

Tagged

I got my pan tilt servos working

I’m making a simple camera gimbal and tonight I wired up the right analog stick on my xbox controller to control the pan/tilt servos:

Tomorrow I will print out a prototype gimbal structure.

Testing Github commit hook one liners

A couple of ruby one-liners for dumping out the content of a github commit hook payload:

For hooks that use type application/json:

$ ruby -rpp -rjson -rsinatra -e 'set :port, 8000; post "/*" do; pp JSON(request.body.read); end'

For hooks that use type application/x-www-form-urlencoded:

$ ruby -rpp -rjson -rsinatra -e 'set :port, 8000; post "/*" do; pp JSON(params[:payload]); end'
Tagged ,

AWS IAM Policy for allowing s3cmd to sync to an S3 bucket

It’s a good idea to set an IAM access policy for anything that accesses AWS using your account details, I wanted to do this for s3cmd syncing a local directory to an s3 bucket. There are a number of posts on setting up the IAM policy for s3cmd already but none of the examples worked, I got a 403 permission denied error when running the s3cmd sync command.

After some digging it turns out that s3cmd now tries to set an ACL on the files it uploads, and this needs to be specifically allowed in the ACL. I’m guessing that it didn’t in the past, hence the now incorrect IAM advice. So here is the new working IAM policy, complete with the s3:PutObjectAcl permission added:

(See jrantil’s comment below on wether s3:ListAllMyBuckets is needed in this instance)


{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1397834652000",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt1397834745000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}

view raw

iam.json

hosted with ❤ by GitHub

ping-pong press!

My robot was written about recently on the Raspberry Pi foundation blog, and now on the Pololu blog too, the place I originally got my tracks from!

Robot at RubyConf

I took my robot to RubyConf. It’s not really Ruby related, but I figured it would go down like a robot at a programmers conference… So I took the robot apart, packed it away and headed to Miami:

Miami

First job, putting the robot back together again. I was happy it made it through security. It was the first time I’d flown with a small toolkit.

The robot laid bare

I was carrying the robot around most of the first day, people constantly asking to try it out:

IMG_4482

It worked well on the shiny floor of the lobby. You can just about see the new 3d printed lifter arm:

IMG_4486

Totally coincidentally Ron Evans also did a great talk on Artoo and the newly announced Gobotio.

Programmers love robots!

Prototype lifter arm

I added a prototype lifter arm to my robot yesterday. It needs re-doing (it’s unreliable and heavy) but it works for now.

I’m using a new motor driver circuit for it as I burned out the SN754410 motor driver I was using, the lifter motor seems to peak briefly at about 1.5 amps when starting to lift the arm, and that’s out of the chips range. I stayed up late making a new motor control circuit with a L298N that can provide a lot more power.

Here is the robot picking up 12 ping-pong balls. I was driving, Morwenna was filming:

Here is the same run seen through the on-board camera. Almost all of the run was done watching the live feed rather than watching the robot itself:

Here is the paper strip-board design for the L298N circuit.

IMG_4442

Testing the circuit out on breadboard:

IMG_4440

The finished circuit. You can see it bolted to the back of the robot in the video.

IMG_4441

Tagged ,

First robot remote driving test

I programmed some remote control software using a Golang receiving program on the robot and a ruby control client using my gamepad ruby gem and an xbox1 controller. It worked OK. It was a bit jerky, there’s no PWM so no acceleration, it’s either go or stop; anything not totally rigid on the robot wobbles. Also the position of the camera doesn’t show enough of the robot so it’s hard to get a real idea of where the robot is.

I was filming, the robot was being controlled my my wife, Morwenna, from upstairs.

The robot is also prone to shed a track if the “half turn” is used too much, that is one track forwards or backwards, the other one stationary. I can fix this in software if I can work out a way to do PWM on the robot that doesn’t run the Raspberry Pi CPU.

Tagged ,

Rejects and prototypes

Prototypes and rejects from the 3d printer. All part of the design process for my robot:

IMG_4436

Tagged ,

New robot base design and completed prototype arm assembly

I spent all day at hacman Tuesday and Wednesday printing and tweaking robot parts. I put it all together when I got home. This is the front, the lifter arm has holes to allow me to screw in different attachments, I’ve still not designed that part of the robot yet:

IMG_4432

Here is the back view, you can see the lifter arm gear housing (the curved structure) and the motor that drives it, also the battery (underneath the ball hopper)

IMG_4433

The lifter arm gear system looking through where the hopper would be:

IMG_4434

I need to design an attachment for the end of the lifter arm. Here I’ve created a simple one using meccano. It’s too heavy, the bolts catch on the floor and it dumps the ping-pong balls short of the hopper. Other than that it’s perfect. You can see the camera with capped lens that I’ve just wedged into the structure temporarily:

IMG_4435

Next-up: better lifter attachment design, a couple of re-prints with tweaks and some software.

Tagged ,