mo.notono.us

Tuesday, April 28, 2009

Wrap-up: Amazon Payments responds. In English.

I finally received my first decent response from Amazon Payment Customer Support:

Amazon.com Customer Service to me

Hello again from Amazon Payments.

I apologize for our misunderstanding and delay in responding to your message.

We do have the ability to review your previous correspondence with us, and I see that you were notified April 25 that your account had been reinstated.

It appears that my colleague misunderstood your concern, and instead of recognizing your desire to simply have the account reinstated, he was checking into the specific transaction you were wanting to make. I'm sorry for the mix-up.

I'll also pass on your feedback concerning offering phone support.

Thank you for using Amazon Payments.

Please …. (standard footer followed)

Best regards,

JoEllen M.
Amazon.com
We're Building Earth's Most Customer-Centric Company
http://www.amazon.com/your-account

Thank you JoEllen M, for providing the very first email from Amazon Payment Customer Support that sounded like it was written by someone who had read the case history, and who was willing to take the time to write a non-form-letter reponse. If this had been done last week (or back in Oct/Nov when it first happened) you would have saved me and Amazon a lot of time (and bad blog-press).

Labels: , ,

Rant: Amazon Payments customer support still poor

I had to take a breath there, before I chose to go with the word “poor”. I was very tempted to go with an alliteration.

Got the following email from Amazon.Com Customer Service this morning, 3 days after the issue was resolved. Some numbers and addresses have been altered.

Greetings from Amazon.com.
Sometimes a credit card number will experience one or more failed attempts before a charge is ultimately successful. In this case, I've checked your Amazon Payments Business account affiliated with austxxxxx@gmail.com and found that your credit card was successfully charged on April 26, 2009, by Jungle Disk, Inc..
Transaction amount: $1.02
Transaction ID: 253FAROT22PMHJ3P5GJ1PABCDEF12345678
As always  please feel free to contact us should you have future questions or comments. If you need to contact us back, you can do so by using the secure form at the following specialized link to ensure we receive your next message:
https://payments.amazon.com/sdui/sdui/contactussend
Thank you for sending us your question to Amazon Payments.
Please let us know if this e-mail resolved your question:
If yes, click here:
http://www.amazon.com/rsvp-y?c=wyeewufg5555555555
If not, click here:
http://www.amazon.com/rsvp-n?c=wyeewufg5555555555
Please note: this e-mail was sent from an address that cannot accept incoming e-mail.
To contact us about an unrelated issue, please visit the Help section of our web site.
Best regards,
Donny
Amazon.com
We're Building Earth's Most Customer-Centric Company
http://www.amazon.com/your-account

This was in response to my rather angry request from Friday – 4 days ago (my account id has been changed for my protection):

*** DO NOT REPLY TO THIS EMAIL WITH THE "We have taken this action because it has come to our attention that this account is related to a previously closed account." FORM LETTER ***
Please review previous correspondence for Customer ID: B37NK34KABCDEFGH
I am writing this from my amazonpayments account, which shows in the header as an active business account.  I have no interest in this being a business account.  All I want is SOME account tied to austexxxx@gmail.com that can process payments to JungleDisk.
If I try to access this same account through JungleDisk's Amazon interface (https://www.amazon.com/gp/aws/ssop/index.html?....) I am told that "Access to Your Account Is Temporarily Disabled".

Gee, thanks for checking, Donny, and for not using a form letter response. But if you had bothered looking into the case history you would see that your response was a) not at all correct and b) three days too late.

As I said before, Amazon Payments customer support needs the permission to deal with customers directly by phone to avoid wasting everybody's time

PS! And in response to all the vendors who’re coming out of the woodwork suggesting their own alternatives to JungleDisk – this is not about JungleDisk – JungleDisk is great.  I’m happy with JungleDisk.  This is not even about Amazon (the store) which I  am also happy with.  This is about Amazon Payments Customer Support, which I am still unhappy with.

Labels: , ,

Monday, April 27, 2009

Rave/Rant: Good vs. Bad customer service

The other day, when I had trouble with JungleDisk and Amazon Payments, JungleDave (presumably a Human) responded within 15 minutes.  That’s good customer service.

Yesterday, when a piece was broken on my kid’s Fisher Price toy, I called their 800 number, went through a short automated phone system which then told me I could talk to a human after a 4 minute hold.  After 3-4 minutes a HUMAN came on the phone, who assessed my problem, quickly transferred me (with less than 10 seconds hold) and the second HUMAN solved my problem by sending a UPS ticket for the return of the broken part and a promise of a replacement.  Total time on the phone was less than 10 minutes.  That’s good customer service.

And Saturday, when I tweeted to @amazonpayments about my lack of Human response from their customer service, he/she responded, and kicked the necessary chair to get things done.  That’s also good customer service.

What’s BAD customer service is this email that caused me to tweet @amazonpayments in the first place:

Amazon.com Customer Service to me Apr 25 (2 days ago)

Greetings from Amazon Payments.

I'm sorry, we don't provide phone assistance. If you have questions or concerns, please contact us from the below link to make sure we receive your message:

https://payments.amazon.com/sdui/sdui/contactussend

Amazon Payments allows you to use the payment methods that you already use on Amazon.com to pay for goods and services online wherever Amazon Payments is accepted. With an Amazon Payments Account, you can make secure purchases from 3rd party (i.e. non-Amazon) web sites that accept Amazon Payments, without having to re-enter your payment information. Also, there is no cost to you when you make a purchase using Amazon Payments.

Amazon Payments keeps your payment information private from 3rd parties, and you are not required to disclose your payment information stored in your Amazon.com account when you make a purchase. Amazon Payments provides you with the same trusted payment experience available on Amazon today, leveraging proven fraud detection and risk management capabilities. Learn more about Amazon Payments at:

https://payments.amazon.com/sdui/sdui/about?help

Thank you for your interest in Amazon Payments.

Customer Support that does not allow human to human contact and instead relies on repeated form letter responses are like badly designed low-flow toilets.  They’re intended to save, but end up requiring far more effort to get anything through, and typically they just stink.

Labels: , , , ,

Friday, April 24, 2009

Rant: Amazon Payments Woes

I use JungleDisk to backup my home computer, and it works well, with one exception.  I also signed up for JungleDisk Plus, which has various enhancements, and costs $1/month.  All is well with the backups, except JungleDisk/Amazon Payments can’t process the JungleDisk Plus payments.

When I go to My Account on Jungle Disk and try to Change Payment Type or update payment authorization, I get:

image 

but when I  log in I get this:

image

Hrrrmph.

Meanwhile, if I go to Amazon Payments directly I get this:

image 

I contacted JungleDisk – 13 minutes later they said (rightfully) that I needed to resolve the issues with Amazon Payments.

For the issue with your account, you will need to contact Amazon Payments at:
https://payments.amazon.com/sdui/sdui/contactus

Amazon Payments (which took 2 DAYS to respond) gave me the following oh-so-NOT-helpful form letter in response:

Greetings from Amazon Payments,

This message is to inform you that we are unable to process your Amazon Payments Account transactions.

We have taken this action because it has come to our attention that this account is related to a previously closed account.

While we do not provide detailed information on how we link related accounts, we have thoroughly reviewed our records and confirmed that we have significant evidence that this account is related to another account previously closed.

Thank you for your interest in Amazon Payments!

Sincerely,

Account Specialist
Amazon Payments
https://payments.amazon.com
===========================

I have no idea what previously closed account this is referring to, and apparently Amazon is not going to tell me.

So I had Amazon call me through their Call Me feature – and after being on hold for 20 minutes, and explaining the situation to two equally helpless call center operators (nice, just without clue as to how to do anything about Amazon Payment issues) I finally resorted to this blog post instead.  Hey, ranting makes me feel a LITTLE better at least.

PS! Oh, here’s what you get if you google for amazon’s customer support phone number – did you know that Amazon Customer support can be shipped for free? ;-)

Contact Amazon at Amazon!  Free Shipping!

 

UPDATE:  This post + tweet to @amazonpayments seems to have done the trick – my account now works again.  I have yet to get any human response from Amazon Payments customer support, however.  Still BAD customer service.

Labels: , , ,

Friday, April 10, 2009

Future: I'm waiting for my HD contact lenses...

...with built in camera, and associated 7 channel cochlear implants:

I've got to find a way to attend Ted one year.

Labels: ,

Thursday, April 09, 2009

SharePoint Bug: Send Welcome Email for External Users Points to Internal Url

If you have extended a web application to an extranet or internet zone, and you add an external user to a group while logged in to the internal zone, then elect  to send the standard welcome email (see below), the resulting email will send links to the internal zone url, not the external zone that the users will need.

This is a BUG, or at best a VERY poorly designed feature...

The problem exists in Microsoft.SharePoint.ApplicationPages.AclInv.SendEmailInvitation()*

One of the lines read:

string urlToEncode = base.Web.Url + "/_layouts/people.aspx?MembershipGroupId=" 
  + SPHttpUtility.UrlKeyValueEncode(byID.ID.ToString());

The problem, of course is that base.Web will be the web that the current user is in, not the web that the extranet user will have rights to.

Other than replacing/editing the AclInv.aspx page in Layouts I don't see any way this can be fixed.  Given that this thread has been out here for more than two years I hold little hope that MS will fix the issue any time soon...

(*locate the dll in C:\inetpub\wwwroot\wss\Virtual Directories\<your site>\_app_bin and reflect away...)

Labels: , , , , ,

C#: Generate Readable Passwords

On a recent project I found it necessary to replace the Forms Based Authentication Membership provider generated passwords with some of my own choosing, in order to make the passwords actually readable and typeable.  Call me a usability-nut, but I consider passwords like t7(N4(Jm9{]M@@ and |NxXl&^ah;z4]- (both actual ResetPassword() result examples) to be neither readable nor typeable.

So I followed Mark Fitzpatrick's approach, which essentially is to take the output of the ResetPassword method and use it as the old password input for the ChangePassword method. But now I still needed a new password, so since nothing came out of a cursory Google search, I concocted the utility method below. Note that this is neither rocket surgery nor particularly brainy science and it may not suit your purpose, but it generates a random 9-10 character password from a set of 1.5+ million, which did the trick for me:

UPDATE: The random number generator in .NET isn’t all that random, unless you force it to be – see  GetRandomIndex method at the bottom.

UPDATE 2: Silly me – you have to apply the .Next() method of the SAME random instance, otherwise you end up with very recognizable patterns.  Removed the GetRandomIndex method and added _randomInstance member variable.

 

//Create a static instance of the Random class, on which to operate
private static Random _randomInstance = new Random();

/// <summary>
/// Generates a random, but readable, password, at least 8 characters and containing one or more 
/// lowercase and uppercase letters, numbers, and symbols.
/// </summary>
/// <returns>The random password</returns>
internal static string GenerateReadablePassword()
{
  //simple short words
  string[] words = new string[40] {
"Rocket", "Ship", "Plane", "Train", "Boat",
"Space", "Earth", "Venus", "Mars", "Moon",
"Valley", "Water", "Land", "Beach", "Field",
"Puppy", "Kitten", "Tiger", "Turtle", "Bird",
"Texas", "Maine", "Kansas", "Florida", "Alaska",
"Hand", "Head", "Foot", "Wrist", "Elbow",
"Happy", "Smile", "Grin", "Humor", "Spirit",
"Soccer", "Cricket", "Tennis", "Bowling", "Yummy"
};
  //alphabets: don't include those that can be misinterpreted for another letter/number
  string alphabets = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXY";
  //numbers: exclude 0 (~= O or o), 1 (~= I, or l) and 2 (~= z)
  string numbers = "3456789";
  //common symbols: no brackets, parentheses or slashes
  string symbols = "!@#$+=&*?";

  //put the elements together in a random format, but don't stick an alphabet immediately after a word
  string[] formats = new string[18] {
"{1}{2}{3}{0}", 
"{1}{2}{0}{3}", "{2}{3}{1}{0}", "{3}{0}{2}{1}",
"{0}{2}{3}{1}", "{1}{3}{0}{2}", "{3}{1}{2}{0}",
"{0}{2}{1}{3}", "{1}{3}{2}{0}", "{2}{0}{3}{1}", "{3}{1}{0}{2}",
"{0}{3}{1}{2}", "{1}{0}{2}{3}", "{2}{1}{3}{0}", 
"{0}{3}{2}{1}", "{1}{0}{3}{2}", "{2}{1}{0}{3}", "{3}{2}{1}{0}"
};

  //combine the elements
  string password = string.Format(GetRandomString(formats), //random format
    GetRandomString(words), //0
    GetRandomStringCharacter(alphabets), //1
    GetRandomStringCharacter(numbers), //2
    GetRandomStringCharacter(symbols) //3
  );

  //post fill the password with numbers as necessary
  while (password.Length < 8)
  {
    password += GetRandomStringCharacter(numbers);
  }

  return password;
}

/// <summary>
/// Gets the random string character.
/// </summary>
/// <param name="inputString">The input string.</param>
/// <returns></returns>
private static char GetRandomStringCharacter(string inputString)
{
  return inputString[_randomInstance.Next(0, inputString.Length)];
}

/// <summary>
/// Gets the random string.
/// </summary>
/// <param name="inputStringArray">The input string array.</param>
/// <returns></returns>
private static string GetRandomString(string[] inputStringArray)
{
  return inputStringArray[_randomInstance.Next(0, inputStringArray.Length)];
}

Labels: , , , , ,

Wednesday, April 01, 2009

AIM’s FishBots a.k.a. project upstream

Annoying/Amusing – take your pick: I have received random IMs from “(SomeWord)Coho” (fronting for some actual real person using AIM) on and off the past few months – the latest was earlier today and went like this:

(3:55:43 PM) complexcoho Have you ever been diagnosed with a mental illness?
(3:56:04 PM) (My AIM name) ah, ComplexCoho, you strike again
(3:56:21 PM) complexcoho ?
(3:56:27 PM) complexcoho yellow on yellow?
(3:56:35 PM) complexcoho into golden showers or something?
(3:57:21 PM) (My AIM name) as enticing as that sounds your im wires are crossed - best of luck with whomever you're trying to get with: http://www.pogiako.net/blog/?p=498
(3:58:00 PM) complexcoho just wondering why you are messaging me
(3:58:03 PM) complexcoho in all yellow
(3:58:06 PM) complexcoho hard to read
(3:58:10 PM) complexcoho and random

A previous conversation:

(2:46:53 PM) ironedcoho So... trebuchets.
(2:47:20 PM) (My AIM name) yes, quite nice in medieval warfare
(2:47:26 PM) (My AIM name) not so useful anymore
(2:48:06 PM) ironedcoho Not true. I get medieval at least twice a week
(2:48:15 PM) ironedcoho do you like goats btw?
(2:48:29 PM) (My AIM name) depends on their attitude

Thoughts:

  1. Somewhere out there someone is quite proud of themselves for increasing the entropy of the universe.
  2. It’s amazing how quickly sexual references pop up when two strangers converse anonymously – note that I did not initiate either one…

More info on the Fishbots:

Labels: , , , , ,

Introducing la.vala.mp

So, in the spirit of trying everything new, I signed up with chi.mp*.  Not sure if I’ll use the service, but something to note for would-be Chi.mpers – Third (and Fourth and Fifth and Nth) Level Domains work with your free .mp domain: this is not being advertised.  So in mo.notono.us fashion, I grabbed the rather incomprehensible (but short) vala.mp – which I from now on will (or won’t) use as http://la.vala.mp (or http://I.Want.A.La.VaLa.mp).

*via Tech Crunch.  Of course.

Labels: , , ,

Hey VCs - if Bit.ly is worth $8 mill, I'll resurrect the dead squrl.us for pennies

So TechCrunch has the story of bit.ly raising $2 milionl in funding for a valuation of $8 million (as in 800,000,000 pennies).  Considering the breadth of bit.ly’s offering (or lack thereof), that is just insane.

If any VC or angel investor is out there desperate to throw money at Web2.0 ideas, I’ll resurrect squrl.us for, let’s say, $500,000 (or 50,000,000 pennies)…

Labels: , , , , ,