Beware audible.com free trials

I should have known better.  Having never used audible before, when they had a free trial running a while ago I thought I would give it a shot.  Turns out they didn’t have much in their catalog I wanted to listen to so I cancelled after an hour.

Or so I thought.  I was going through bank statements this morning and noticed they’ve been charging me $14.95/mo for months.. (My wife and I run just about everything through the same debit card, so it’s easy for us to miss things).  So I called their 800 number.
Me: “I’ve never used your service but my records show you’ve been billing me $14.95/mo for it.”
Audible: “Yes… Our records show you’ve never used the service and that you attempted to cancel it.  What happens when you go to cancel is our site tries to get you to confirm you want to cancel by offering you discounts on membership.  Did you actually get to the cancellation page?”
Me: “[Are you kidding?]  I remember you guys making it very difficult to actually cancel.  The option was hidden, I had to search your site to find it, and then after several pages finally getting a page that said something like ‘you’ve cancelled.'”
Audible: “Well… you probably just got one of the member retention pages. Did you receive an email confirming cancellation?”
Me: “No. In fact the only email I’ve ever gotten from you was spam.”
Audible: “I’m really sorry. We’ll cancel your account and issue a refund.”
To cancel their service, “for real,” call their customer service at 888-283-5051.

It gets better, trust me

The NY Times has article up today titled, “Why Science Majors Change Their Minds (It’s Just So Darn Hard)” that explores the reasons behind why an estimated 40% of science and engineering students change majors, or fail to complete their degrees.  Summary: classes can be difficult, boring, and feel irrelevant.

I can’t say I disagree.  From my own experience as an undergrad, there were plenty of courses I took that were either excruciatingly difficult, mind-numbingly boring, felt completely useless, or some combination of all three.

In my first few years as an undergrad I had a bad attitude about school, and my grades reflected it.  In my case changing majors wasn’t an option, I guess I was fortunate because I knew that whatever I ended up doing post-college (with or without a degree) it would have something to do with computers, so I never considered it.  But there were many occasions were I considered dropping out or “taking some time off.”  It was the beginning of the dot-com boom, and a few of my friends had already given up on school for Silicon Valley, Redmond, or their own startups.

I got lucky when I landed an internship at a local software shop.  It was my first exposure to a large group of professional engineers, doing professional engineering in a professional engineering environment.  As a programmer, I learned that “raw skill” certainly matters, but it only gets you so far.  Yes, there are fundamental theories and surveys of techniques that you’re forced to learn in college that you could pick up on your own, but what I observed was that these people thought differently than I did.  They had a way of approaching problems that was methodical, structured, and practiced.  I’m not talking about software engineering processes or anything like that–their brains functioned in a way that mine did not.

And that was the turning point.  I realized that college was not about being able to solve triple integrals or Laplace transformations, it was about training your brain to solve complex problems.  To rewire your neurons to study problems in an ordered manner.  When I began to approach my classes this way, it got easier.  I started putting in the hours, and my grades improved.

Not everyone is fortunate enough to have a good internship experience, or see their profession that they are studying for up close before they graduate.  These slots are competitive and space is limited.  To the article I referenced above, I would challenge industry to create more internships.

To students that are struggling through their first few years as an engineering undergrad: it gets better, trust me.  Courses become more relevant in your junior and senior years.  But also remember there’s nothing stopping you from reading ahead or practicing your trade in advance of these courses.  Find people to collaborate with, or stay up late working on your own projects. (You can sleep when you graduate).  Stick it out. Engineering is very rewarding.

Streaming mp3 server with NS-K330 NAS running SnakeOS

I just got a NS-K330 NAS off Deal Extreme, it’s a super cheap-o 3W network attached storage device.  Just add a USB powered HD and you’re ready to go.

The operating system that it comes installed with doesn’t do very much, so the good hackers over at SnakeOS have made a simple BusyBox-based distribution that you can use to replace it.  In 3 minutes you’ve got an embedded Linux server running ssh/sftp, ftp, samba, http.  Did I mention it only draws 3W?

Once I got SnakeOS installed I was disappointed to discover the embedded web server doesn’t support directory listings.  It does however support CGI scripting.  It took me a few minutes to put this together, but here are two scripts you can install in your web server /cgi-bin directory to enable directory browsing and automatic generation of m3u files for your mp3 collection:

#!/bin/sh
# Generates a directory listing, links directory to m3u generator
echo "Content-type: text/html"
echo ""
QUERY=`echo ${QUERY_STRING} \
| sed -r 's/%20/ /g' \ | sed -r "s/%27/'/" \
| sed -r 's/^\///'` echo "<h2><a href=\"/cgi-bin/m3u?$QUERY\">/$QUERY</a></h2>" ls -l "../$QUERY" | grep ^d \
| awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}' \ | sed -r 's/^[ ]+//' \ | sed -r "s/^(.*)$/<a href=\"?$QUERY\/\1\">\1<\/a><br>/" ls -l "../$QUERY" | grep -v ^d \
| awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}' \ | sed -r 's/^[ ]+//' \ | awk "{printf(\"<a href=\\\"/$QUERY/%s\\\">%s<br>\", \$0, \$0);}"
#!/bin/sh
# Generates m3u from query parameter
echo "Content-type: audio/mpegurl"
echo ""
QUERY=`echo ${QUERY_STRING} \
| sed -r 's/%20/ /g' \ | sed -r "s/%27/'/g" \
| sed -r 's/^\///'` find "../$QUERY" -name *.mp3 \
| sed -r 's/\.\./http:\/\/192.168.0.11:8080/' \ | sed -r 's/ /%20/g'

Not the cleanest of scripts, but it gets it done.  BusyBox doesn’t have a complete “find” implementation so this kinda limited what I could do.

As I’m writing this it does not appear this system is the most robust of web servers… Both WinAMP and Windows Media Player are seizing up part way through songs and reporting network errors. Hmm. I guess for $40 I can’t complain.

GridOS

FusionGarage is trying to make a comeback after their JooJoo debacle, it’s called GridOS.  They have a few videos of it in use on their website.

When I used to work in games people would say to me, “hey I have this great idea for a game…” and then I’d have to gently explain that either the idea had already been tried or probably wouldn’t be fun for xyz reasons.  Or I would just smile and nod.  Watching the GridOS videos they have on their website brought that feeling back.  I cringed watching them.  I imagined this dude telling some poor programmer, “hey I have this great idea for a user interface…”

“The desktop should never end! It should just go on and on…” Great idea, genius.  So you want people to get lost finding their apps?  Or worse, lose their apps?

“Oh well then we’ll have this map in the top corner so you don’t get lost!”  How about you just don’t let people get lost in the first place.  Confine the apps to as small an area as possible.

“Grids are cool! Everything should be in a grid with massive blocks of dead space between groups.”  So, you want people to get tired of scrolling?  You want to not use the available screen real estate to convey useful information?

“There should be this gadget for your left thumb that acts like a jog dial, and have scroll momentum and do this neat little shaking of the items attached to the wheel!”  So you want to violate your grid design and rigid fade-in/fade-out visual semantics for this one different UI element. O.. K.. And you also want things to not actually be visible until they stop shaking / stabilize?  And you want this under the user’s thumb, so they can’t actually see what they’re controlling? Right.

“But the right thumb should be like a context menu, and have this grid pop-out with context sensitive options, (and all the options should be on the same background with single-color icons).”  Is there any rhyme or reason to how these icons are arranged?  “Sure! Arrange them based on the distance your thumb has to travel, so commonly used items are closed to the edge.. you know, like Dvorák and stuff.”  Alright, I guess people will have a hard time finding where things are the first time, but maybe they’ll develop a muscle memory for where things are.  Oh wait. This is a tablet.  There is no physical feedback mechanism.  They’ll have to use visual feedback and get lost every time.

“We’ll have the coolest UI for playing music!”  Uhh, yea, isn’t that kind-of a solved problem?  Plus, you don’t really need much of a UI for listening to music on a portable device.  Unless you’re developing a great UI for managing music–and sync’ing that management with wherever your music library is stored–then you might be onto something.  But I suspect you’re not.

Too harsh?

Reporting country of origin should be required for online sales

I find it frustrating that there is no requirement to inform the customer of the country of origin of a product when it is purchased online. I often times have no idea what country something was made in until it arrives at my doorstep and I open the box.

According to the Customs and Border Protection document “Marking of Country of Origin on U.S. Imports” the purpose of this marking is:

To inform the ultimate purchaser in the United States of the country in which the imported article was made… The ultimate purchaser is generally the last person in the United States who will receive the article in the form in which it was imported.

When you buy something from an online retailer you don’t get to see this marking until you’ve already made the purchase.

The intent of this law is not being met.

We did it.

24 hours later I’m still at a loss for words. The best I can do right now is attempt to capture what I was thinking yesterday. During the mission I remember thinking:

“OK, we cleared the tower. Awesome. F9 cleared the tower twice.”

“Alright, MECO1. Code still works! Nice.”

“OK, MECO2, very nice. 1st stage worked twice in a row.”

“Sep worked twice?! What?”

“2nd stage lit?”

“We’re not spinning up! OK great, we nailed the roll control issue.”

“Nosecone deployed!”

“Dragon separated?”

When I turned around and saw the video of Dragon drifting away from 2nd stage my eyes were so full of tears I couldn’t see my console anymore. I quickly tried to shake it off and put my face 10″ away from the monitor that indicated Dragon’s orientation.

Then Dragon started slowly slewing towards its first TDRSS satellite. I thought, “Oh my God… it works, it’s working!” and tears filled my eyes a second time. I put my hands on my face, my elbows on the desk and tried to regain my composure. I was so thankful. To see F9 work flawlessly, and then Dragon kick off and do autonomous attitude control… I was done. At that point I could have gone home happy; the mission was a complete success in my mind.

But as the day progressed things kept getting more and more surreal. Dragon did everything it was supposed to do. Attitude control worked. Comm worked. The deorbit burned worked. Entry worked. Parachutes deployed. Water landing worked. When they got it back on the boat I didn’t know what to think anymore. I reflected on my perceptions of what was achievable and the reality that was confronting me and for a few seconds it made me nauseous. I had to make a conscious effort the rest of the day not to think about it.

So there it is. We did it. What an incredible team. It’s been a real honor working on this project.

Webcast video link

Minivan retail prices, Honda vs. Toyota


Honda leads Toyota in value retention back through model year 2005. In model year 2004 Toyota retains more of it’s value. “Outstanding condition” adds between $900-1000 to the retail value of the vehicle on all models in all model years.

Fiorina running for Senate

As a former HP employee I was a little confused when I first heard Carly Fiorina was running for a US Senate seat.  I didn’t think it was real–I turned up the radio and sure enough, it was real.  My next reaction was, “she won’t last…” but somehow she has.

I’m totally baffled that she is still in the race.  She significantly damaged Hewlett-Packard, and somehow this qualifies her to run the country?  I don’t say that lightly.  Some facts: HP’s shares fell by more than 60% over the 6 years she was CEO.  She halved HP’s R&D budget, dropping it well below IBM, Apple, and similar competitors.  She sold off HP’s meat-and-potatoes (Agilent) and forced an acquisition no one wanted (Compaq).

Who knows, she might make a great politician.  After all, she has a good track record for brokering deals.  But will she push for deals that people want?