Tuesday, August 31, 2010

Picking Just One Toy

I caught this discussion on Amazon: If you could only buy one toy for your kids, what would it be?, and I have to say, it's been an interesting one to follow.

Sure, the premise is ridiculous. As one poster say so elegantly:

If you could only buy one food for your kids, what would it be? Now, that sounds ridiculous, doesn't it? Just as a child's body needs the nutrition from many different foods to grow up healthy and fit, so a child's mind desperately needs the stimulation and enrichment derived from many different toys and play experiences.

But still, the discussion has value. It's a source of useful ideas on what to get kids (a topic I'm always stumped on), as well as some fun ideas for play (a topic I'm always ready for more of).

Makes me wonder - if you had to pick your favorite toy to provide for your kid/niece/nephew/etc., what would it be?

How to feel fragile and small - The Pale Blue Dot

Just watch this, and tell me you don't feel just a little bit humbled.

I say, from now all, we be nice to each other.

Thanks to Gavin.

Monday, August 30, 2010

Small Business Quote Of The Day

From mnmal.org:

“If you think you are too small to be effective, you have never been in bed with a mosquito.”

— Betty Reese

Love it.

Friday, August 27, 2010

Phone Friday: uLoops Music Generation - More accessible than ever

A while back I mentioned how impressed I was with uLoops - a music generation app for the Android. Unfortunately, being a non-music guy, I found the interface cripplingly cryptic.

Well, I've checked back in on uloops.net, and I'm impressed with how they've made the system much more accessible:

  • There's a wonderful new tutorial video that takes you through how uLoops works
  • There's an onscreen tutorial you can walk through which impressively blends overlaid instructions with the application itself.
  • There's an active forum
  • You can import any uLoops song into the authoring environment to learn how it was created
  • Not only can you browse the website to listen to any song, but you can listen to individual loops within a song to see how it was composed.

I found that after I watched the video above I was actually able to get uLoops to make some nearly-pleasing sounds. Most importantly, it was a lot fun!

This app definitely belongs on my Things To Do While Waiting Around list.

Review: The Suvivors Club

After reading Ben Sherwood's book The Suvivors Club, I can tell you that in a crisis you probably won't panic. And that's a good thing. Nope, instead you'll probably freeze up and do nothing. This, of course, is just as bad as panicking, if not worse.

Sherwood explores this brain freeze issue, as well as many other topics of survival in his book. One explanation for why you'll probably lock up is that in a crisis your brain will go off searching for a comparable experience, only to not find one, which in turn kicks off the search again. The result is an infinite loop.

One way to combat this phenomenon then is go through training, which gives your brain some experiences with which to compare the current crisis too.

Using this line of logic, I think most valuable aspect of the The Survivor's Club is that the comprehensive list of stories can serve as sort of a starting point for dealing with emergencies.

And what a comprehensive list it is: from cancer and holocaust survivors, to a woman who fell 30,000 feet from an airplane (and lived), he's got it covered. From well known tragedies such as the Central Park Jogger to more private individual stories, such as a survivor of an attempted suicide from the Golden Gate Bridge. You've got to hand it Sherwood -- he's done amazing amount of research for this book.

While the stories are spellbinding, I did find the comprehensive nature of the book a bit tedious at times. Every angle of survival is explored, so I guess its only natural that some parts of this topic didn't interest me.

I almost didn't rent The Survivor's Club from the library. I thought listening day in and day out to disaster after disaster would be just too depressing (and not to mention fear inducing). I'm glad I ignored this instinct. The stories here, for the most part, are positive and having some reference point for the best way to survive a particular disaster is just too invaluable.

Thursday, August 26, 2010

Streaming Your Web Surfing Routine

If you use Google Reader already, you can skip this article. Nothing here for you.

1) Do you have a routine where you check more than one website throughout the day? Maybe you start your day by checking Knitting Daily then hop on over to PunkNews.org.

2) Do you use Google Reader yet?

If you answered Yes then No, then boy are you in for a treat.

Here's what you do: Sign up for Google Reader (it's free, so you've got no excuses). In the top right hand corner, there's a button labeled Add Subscription. Click it, and paste in the URL of a site you visit regularly. Now repeat this process with all the sites in your daily routine.

Now, instead of visiting a number of websites throughout the day, you can just visit your single Google Reader account. It's faster, more organized than trying to remember which sites you've visited.

There are a variety of other features you get with Google Reader: you can star articles that interest you, easily share articles, etc. But the real value in Google Reader is that it allows you to follow infrequently changing sites.

Suppose you find a site you really like, but go back to it every day for a week and it hasn't changed. Eventually, you'll just stop checking. With Google Reader, the site can remain dormant and as soon as new article is posted, it'll be there ready for you to read.

Wednesday, August 25, 2010

Bagless Travel - Publicity Stunt and Armchair Adventure

I stumbled across the No Baggage Travel Challenge and found it amusing. As I read what one packs for bagless travel, I thought it sounded awfully familiar. And it should: the adventurer behind this is none other than Rolf Potts, author of Vagabonding, a book I just finished.

The goal is simple: travel around the world without carrying any luggage.

Yes, it's a publicity stunt for Scottevest - but still, it seems like a novel challenge to follow along with. It doesn't hurt that I really like Rolf's writing.

The challenge, of course, brings up the question: is bagless travel even possible? So far, I think the answer is Technically, Yes. But, is it practical? Not so much. Heck, with our little one, I find I can't leave the house without bringing at least his diaper bag. Still, there are lessons about packing light to be learned here. And who knows, maybe I'll be sold by the end of the trip.

Here's Rolf explaining what he's bringing along. The one item I'm surprised he's not bringing along is some way to charge up his electronics. But, I guess he'll learn soon enough if that was a smart move or not.

Emacs Quickie: Adding up a column of numbers

The other day I wanted a quick way to sum up an emacs buffer full of numbers. Surely, there must be a function that does such a thing out there? Of course there is. And it's already installed. The answer is calc - one of the coolest parts of emacs.

Calc, as the name suggests is a calculator and one of gems of emacs. I like using it because it uses RPN notation, which makes it unambiguous to use. And the trail window makes it easy to see what numbers added up to what. And of course, not having to switch to another application, means I can do my math and get back to programming sooner (and without touching The Rodent)

But the way I use calc only lightly scratches the surface of its functionality. What I needed for solving the above conundrum was in the manual under grabbing from other buffers. Specifically:

  • calc-grab-region: Slurp in a set of numbers into a Vector structure in calc. And once you've got your vector of numbers you can do interesting things with it.
  • calc-grab-rectangle: Same as calc-grab-region but with rectangles. (You do use rectangles -- right?)
  • calc-grab-sum-down: Does just what the name suggests and just what I needed.

In classic emacs fashion, you can accomplish the same thing as calc-grab-sum-down by typing:

 M-# r V R : + 

Obvious, right?

Seriously, every once in a while I look at the calc manual and think to myself, I really need to do more math so I can play with more of these features.

Tuesday, August 24, 2010

Man Plans, God Laughs - Baby Edition

This morning, at 4:15am I finished up a wonderful late night session of computer programming. By 4:18am I was lying in bed, looking forward to 2-3 hours of the most delicious sleep of my life. And, you guessed it, at exactly 4:28am, our little one decided he wanted to get an early start on the day.

I trudged into his room. I'm not proud of it, but I'll admit it - I actually attempted to bargain with our 1 year old. I promised him he could have anything in the world he wanted if he would just roll over and go back to bed for a few hours.

Thing is, when one's own requirements are a clean diaper, a full tummy and free range of the house to explore, there really wasn't a lot I could offer him.

So, I got up and we had breakfast and some fun time playing.

I keep telling myself, it was more fun playing than sleeping anyway. Life's too short for sleeping.

As they say, Mentsch tracht, Gott lacht.

Make Gardens, Not War

But how you ask? Easy, make all your bombs seed bombs:

Luckily, seed bombs exist! They are the perfect way to secretly, sneakily beautify all those empty lots and highway embankments that are part of the urban landscape. And they're crazy easy to make!

I followed the directions that I found here. Alls you need is dirt, some hardy, native seeds and some air-dry clay (which is available in the craft aisle of any big discount or craft store). If you've ever made dumplings, raviolis or truffles, you'll be a seed bomb master. And if not? No worries! It's a pretty low learning curve.

Now that I've got twenty five of these little beauties drying on my kitchen table, I can't stop thinking of all the places that I'm going to throw them.

It's all about Guerrilla Gardening. And if you want to get in on the action you can roll your own or just buy one from Amazon.

Is this actually a good idea? Not sure yet. I'd want to do some research before I started reeking havoc throughout the neighborhood. It's probably best to work with the local authorities rather than against them.

Still, it's a clever idea and could make from some Sunday morning fun.

Hertz Rent-a-Car - Surprinsingly Family Friendly

We just got back from a trip to Boston, where we yet again rented from Hertz. The rental went well - we got a free upgrade to a larger car (not something I'm usually excited about, but with car seat and stroller in hand, it was I have to admin, awesome) and the car seat we rented was clean and in perfect working order.

But, the real winner is that for the second time in a row, at drop off, a Hertz employee has driven us in the rental car, to the airport terminal. No unloading the car, loading the bus, waiting with an active/crying/chattering little boy, and then hurriedly unloading the bus. Nope, just door to door service.

Previously, Hertz offered the service to us and we were just blown away. This time we timidly asked if they'd give us a ride, and there were more than glad to oblige.

So: (a) if you've got children consider Hertz. And (b) if you're in business, never forget the power of going above and beyond. What may cost you being down a team member for a few minutes, may make a customer's day.

Monday, August 23, 2010

Weekend with the twins: 17 months

We headed up to Boston last weekend to see the twins and their parents. The visit was short, but we had a great time. The highlight of Friday was making it to Drumlin Farm . This farm on the outskirts of Boston offers animals to view and pet and wonderful grounds to explore.

The twins and our little one got along great. Of course running after the three of them was exhausting, but they made it well worth it. It is amazing to watch them grow and develop their personalities. Chana's all smiles and Dovid is content as can be. And our little one didn't stop exploring the whole weekend, taking off just a little time to sleep.

The photos below don't really capture the cuteness of the weekend. Can't wait to see them soon.

Friday, August 20, 2010

Phone Friday: Tracking My Jogging

I'm not usually a fan of gyms - but I've got say, Bally's has totally won me over recently. No, it's not a new machine or class. It's one magic word: Babysitting!. Our little one now qualifies for their child care, and we've started taking advantage of it.

This means I'm freed up to start running again! Whoo!

While I really liked my Google Spreadsheet for tracking my runs, I was curious if there was an existing Android app that would automate the whole data entry side of things.

Of course there is -- I give you: Handy Runner. The nice thing about Handy Runner is it does just what it's supposed to do, and not much more. It allows you to start a run, stop it, and have it automatically published to a tracking service. It calculates more stats than I care about, and records my GPS track which is a nice bonus, but that stuff stays out of the way.

Along with simplicity, the other key feature it brings is integration with RunningAHEAD.com. RunningAHEAD is a free platform for storing your workouts. While it can track all sorts of sophisticated aspects of your workout, it appears to do just fine with the data Handy Runner will automatically feed it.

As a bonus, it provides a public view of your workouts you can share with the world, as widgets for embedding in your blog:

Here's a key tip before you go for your first jog. Make sure Handy Runner is in your ignore list of your Task Killer. Otherwise, like me, you'll finish the run and find that it didn't record a thing. Whoops. Lesson learned.

Happy Running!

Thursday, August 19, 2010

A Simple Guide To Simple Living

I keep tripping over this whole Living Simple movement, and I thought a book on the topic might make for a good next read.

While researching books to take out from the library* I came across this wonderful comment by EternalSeeker:

Simplify, simplify! I am afraid as an old practitioner of voluntary simplicity I was confused and depressed by this book, which seems to offer very little in the way of true simplification and much in the way of things-I-didn't-know-I-should-be-worrying-about.

She then goes on to define Simplicity:

  • Get rid of anything you haven't used within the past year.
  • Pay off your credit cards and just keep one or two for real emergencies.
  • Be monogamous.
  • Give your time instead of money to those you love.
  • Turn off the TV.
  • Think about how to live with only half of the possessions you have and then DO IT.
  • Eat fresh, simple, whole [organic] foods. Drink water.
  • Create a garden and spend time in it (instead of watching TV).
  • Let other people worry about "getting ahead", status trips, newer cars and bigger houses, trendy clothing.
  • Read: How To Make Your House Do The Housework.
  • Read 'Walden' By Henry David Thoreau - often

What a wonderfully concise list! I think I'll skip the book, find a blog or two and just mull over the above list.

Simple enough, eh?

*I'm definitely amused by the irony of convincing people to buy a book on how to live with fewer possessions in their life. The library is a nice fix to avoid this silliness.

Update: I forgot to mention -- even the music I was listening to last night was encouraging the Simple Living philosophy.

Wednesday, August 18, 2010

Gotcha of the Day: Forcing PHP to Cough Up Syntax Error Information

I ran into an especially annoying problem with PHP this morning. I was working on a server that had display_errors set to false. That's good. But, the server gave me no way to view the HTTP error log. The result was that when I published a page with a syntax error, the browser screen was blank, leaving me no hint as to where the actual error was.

I tried forcing the display of errors, but that didn't work.

Next up, I thought I'd try ssh'ing to the server and manually running php there. Just running:

bash-3.2$ php foo.php

produced no output. This makes sense, as it's essentially what the web server was doing, and it wasn't generating output.

After running php -h, I learned there was a syntax checking mode (lint - whoo!) that I could use. I figured this would be perfect. Here's the output of that attempt:

bash-3.2$ php -l foo.php 
Errors parsing foo.php

This confirmed my hunch that syntax errors were causing the problem, though for the life of me, I couldn't get the -l flag to actually tell me the errors it found.

Finally I came up with this recipe:

bash-3.2$ php -d display_errors=Yes \
 -r "error_reporting(E_ALL); require('foo.php');"

Sure enough, PHP finally hollered back at me:

PHP Parse error: syntax error, unexpected T_VARIABLE in /var/www/vhosts/bar.net/httpdocs/foo.php on line 608

This was just enough info to let me fix the problem.

There's almost certainly an easier way to accomplish this. But still, it worked and that works for me.

Update: As soon as I hit the publish button on this post, an easier solution popped into my head. I realized, I could simulate the same command line as above using PHP files.

Suppose I suspect foo.php of having a syntax error. I can create another file, error-shell.php that reads:

<?
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once('foo.php');
?>

When I access error-shell.php it has a chance to correctly load up, set the correct verbose error settings and then do the include of foo.php. In a quick test I ran, it did show me the syntax error that was hidden if I attempted to access foo.php directly.

I suppose I could extend this further by looping through a list of .php files to syntax check a whole bunch of them at one time.

Tuesday, August 17, 2010

Mind Bending Exercise: The Jug Knot

I came across this discussion about the best way carry a water bottle, and thought the suggestion of using a Jug Knot was an especially clever solution.

Of course, I don't know how to tie the knot -- yet. There's all sorts of resources out there, to learn it though: a PDF, an Instructables, and of course YouTube.

I think it's going to take some practice, but I'll get it. Boy, does this bring back some pleasant memories of Scouts and learning to tie knots. (One handed bowline anyone? How about a dragon bowline?)

Personally, I love the original poster's parting words: it's much simpler than it looks, trust me .... You all can tie this knot.

Tool of the Day: sar and bsdsar

Tools like uptime and free (or freecolor on FreeBSD) are terrific. But, what if you want to get stats from the past few hours or days? You could rig up a shell script to capture these tools to a log file.

Or, you could use the almost-magical sar or bsdsar tools.

These commands efficiently maintain a history of your server performance and allow you to get to the stats after the fact. This is wonderful when you think you've got a server performance issue, but don't have much in the way of stats to back up your hunch.

My suggestion: make sure the sar command is installed *before* you need it.

On Linux I run:

 yum install sysstat

To get access to the sar command. On FreeBSD I followed the helpful instructions here.

Monday, August 16, 2010

Review: Vagabonding

I wanted to like Vagabonding by Rolf Potts even before I started reading it - it's wonderfully skinny. And fortunately, the text lived up to the promise of such a slim volume. As travel-howto style books, this has to be one of the best I've ever read.

First off, the book is fundamentally optimistic. Want to travel the world? Excellent - you don't have to wait till some far off milestone to do so, you can do it now! (OK, well, maybe you'll need a few months of prep - but still, travel isn't a far off dream).

Next up, the book tries to help you capture what's important about travel - things like beauty and adventure. And as I've learned through the years, and as the book underscores, these aren't necessarily found where the brochures point you to.

Finally, I love the lessons of simplicity emphasized in the book. For example, the entire packing list for a multi-month trip is outlined in a single paragraph of prose. It's beautiful.

Perhaps, most surprisingly, I found that this book didn't give me the long term travel bug. I was expecting that I'd long for a 3 month trek through Asia. But alas, I found myself quite content to either apply advice to my relatively short trips, or enjoyed reading it from an armchair adventure perspective.

In many respects, author has you covered in this department too. As he explains, the principles that work for long term travel can work in your own home town. And I believe he's absolutely right. Within an hours drive there are no doubt breathtaking views, colorful natives and untapped adventures. One only need to take the time to seek them out.

This may be the most valuable point in the whole book.

Friday, August 13, 2010

Phone Friday: 5 Apps I'm Loving

Ever since I've put some thought into how I could use my phone to make better use of waiting-around-time, I've managed to discover a number of apps that I'm really impressed with.

  • AK Notepad - I was actually using AK Notepad back on my G1 for a number of years, and then slimmed down to just using jotter (which is still a super cool idea). I've reloaded it on my myTouch for one key feature - it sychronizes with Snaptic.com. This means my notes aren't locked in my handset. I love that I can publish a document through Snaptic and easily edit it on my handset. In many ways, I'd preferred to use Gdocs to get this sync/publishing effect, but alas, Swype wasn't working when I installed Gdocs for some reason.
  • DC Transit Info - Back in my G1 days I downloaded the Metro map to my phone and felt cool. Only, it wasn't that handy. Not so with the DC Transit Info app. It tells me up to the minute info about when trains are arriving. I'm a programmer, and even I'm amazed at how accurate and real time this bad boy is. If you use the DC metro system, this is a winner.
  • AppBrain.com and/or Uninstaller - I've been using Uninstaller for a while, and just started using AppBrain today. Both solve the problem that it's easy to install apps on the phone, but a hassle to uninstall them. Uninstaller makes evaluating software easy - install as much as you want, and then blow away what you don't need. AppBrain is an amazing concept, and one that's got potential beyond just pain install/uninstall of programs. If you find yourself playing with lots of apps, these will be essential.

  • Task Manager - If you had told me that the secret to both good battery life, and not having your phone slow down when you install lots of apps was Task Manager, I'd think you were crazy. And I'd be wrong. The Task Manager automatically kills off any process you haven't put in an ignore list. The result is that the phone stays a lot less busy. Less busy means more responsive and better battery life.
  • Apps Organizer - With all these apps, and a relatively small desktop space (just 3 screens worth on my myTouch), I was finding it harder and hard to quickly launch apps. With Apps Organizer you can essentially create folders for apps that are accessible from the main screens. It's a clever solution that blends nicely with the now aging UI of the myTouch. The hardest part is figuring out the best way to organize my apps. I suppose that's a good problem to have.

Thursday, August 12, 2010

Google Calendar Find: Event time can include a time zone

I've known that when you enter a new task in Google Calendar you can prefix it with a time to schedule it for the day. That is, I can say:

 12:30pm, Write up that blog post I was thinking about

My discovery today: if I add a timezone abbreviation to the time, it'll not only add the event, but convert it to my timezone. So, I can say:

 12:30pm PST, Talk with my surfer friend

This automatically gets added as an appointment at 3:30 PM my time.

Add to this the World Clock Labs option, and my Google Calendar makes coordinating with folks across multiple timezones much easier.

Tuesday, August 10, 2010

A United Airlines Customer Service Suprise

The Story

The other day I'm making flight reservations over at United.com and the most amazing incident happened. I brought up a fair of $150/ticket on my screen, but for reasons not worth getting into, I had to make the actual ticket purchase over the phone. So, I dialed up the good people over at United Airlines. The customer service rep explained to me that fare I was looking at was actually $375/ticket.

How the heck could this be? To make a long story shorter, it turned out that on the next step of the web process there was fine print explaining that the fare was no longer available. While I thought I could get the tickets for $150 each, they were actually $375.

I'm a programmer. I can appreciate how data gets stale and an index may be out of sync.

Annoyed, I listened to the customer service agent read off a closing script. I was told there was going to be a survey at the end of the call (which I was in mood to take), and one of the questions was to rate my overall satisfaction, and would I mind telling him now the answer to this. Well, I explained, at the moment you guys are ranking at about a 2 out of 5. To my amazement, he responded, that he'd like me to talk to his supervisor to see what we could do about this.

After a few minutes on hold, he came back and explained that his supervisor was glad to give me the tickets at $150 each.

He then recited, in the same robotic voice, the spiel about the survey and how did I rank them. I had no choice, I had to give them a 5 out of 5.

The Lessons

This really has been an eye opening experience. Who knew that the price of a ticket could be overridden from what the computer demanded it be? And who knew that a low level support rep could take a proactive role and get his supervisor involved without me asking?

But the really clever lesson I'm taking away from this is how United Airlines has managed to take a detached force of phone jockeys and turn them into customer pleasing machines. Sure, they could have attempted to hire only the most empathetic, sympathetic and independent thinking reps. Or, they could hire the same staff, but give them a simple litmus test to run at the end of a call. It's wonderfully simple, yet surprisingly powerful.

Monday, August 09, 2010

Gotcha of the Month: Windows 7 Network Apps Failing

Over the last month or so, various apps have stopped working on my Windows 7 laptop. They included:

  • Chrome with the error: Error 102 (net::ERR_CONNECTION_REFUSED): Unknown error.
  • Skype with the error: unable to connect (during the login stage)
  • Trillian: unable to connect to any connections
  • Adobe AIR: Adobe Error #2032 (error while streaming)

I knew that all these apps couldn't be breaking randomly - there had to be an underlying network issue. I tried updating the Windows Firewall and just plain turning it off. I tried disable spyware and anti-virus. I tried rebooting. Oh, did I ever try rebooting.

Finally, today, I was yet again at the end of my rope and noticed that my Norton subscription wasn't active. So, on a whim, I decided to resign up for Norton Anti-Virus. After yet another reboot, all my services came back to me.

If I wanted to take the conspiracy theory route on this, I'd suggest that perhaps Norton Anti-Virus purposely left my machine in a broken state so I'd have to upgrade. But, that's probably be too kind.

More likely, it's just the result of Windows and Norton getting out of sync - that's what you get for having lots of moving parts and allowing really low level access to a 3rd party, expiring application.

Now I'm back on AIM and Skype - which of course means that my productivity will be going down. But, whatever.

Legg Mason Tennis: Still Fun, Still Hot

Last year, we had so much fun at the Legg Mason Tennis Classic, that we knew we'd have to make it back again. And so we did. And sure enough, this year didn't disappoint.

Of course, it was hot. Maybe not quite as hot as last year, but still, sitting in the sun cooking for 5 hours is going to leave you a bit toasty. Of course, it's hard to complain when there are athletes actually running around in front of you. How they do this, I can't imagine.

Both the Doubles and Singles matches were a thrill to watch. In both cases, one player or team came out dominant against the other. In the case of the double match, though, Fish and Knowles managed to pull out the win. In the singles, Nalbandian managed to keep his early lead, but not without Baghdatis really making him work for it.

I suppose that's the part about tennis that I'm really beginning to appreciate. So often, it seems like it's going to be a blow out - and yet that's just not the case. Like baseball, the game effectively has no clock, so there's always a chance for the underdog to prevail.

As for the event itself, it didn't quite seem as crowded as last year - but what the heck do I know. This year they were handing out small over-the-ear radios that broadcast live commentary about the game. I guess I could be a tennis snob and say that I preferred just viewing the game minus any chit-chat, but that's not the case. The banter definitely helped me appreciate the game and all its nuance.

What a treat it is that we can see tennis stars play for relatively cheap tickets and a 45 minute metro ride.

Some photos of the event. Alas, unlike last year, we didn't catch any shirtless warmup time. Sorry babe.

Friday, August 06, 2010

10 Android Strategies To Make The Most Of Waiting Around Time

Yesterday, I had a doctor's appointment - and of course, the doctor was running late. After an hour of waiting, I realized I needed some fresh strategies for dealing with these kinds of delays.

So here it is, 10 ways I plan to make the most out of my waiting room time using my Android based myTouch.

  1. Use the market app Aldiko to read a classic book. I've since loaded Thoreau's Walden and Civil Disobedience.
  2. Use the market app Knot Guide to learn and practice new knots. I've got to remember to carry around a short length of rope to use this one.
  3. Use the mobile version of Google Reader to find cool content on the web. I've since updated my Google Reader account to have a variety of high volume, high quality sites like LifeHacker so I'll always have something to read.
  4. Use the market app MorseCoder to learn and practice Morse Code. I should remember to bring along headphones so I can get the full dit and dat effect.
  5. Watch full TV episodes using TV.com's market app. Surely one episode of TV can't rot my brain?
  6. Create a fresh twitter account and use it to publish One Sentence Stories, Twitter Fiction or if I'm feeling especially creative Twitter Poetry. I've got to be especially careful, though, cause this can get out of control.
  7. Use the market app Factbook, a version of the CIA World Factbook, to plan our next exotic getaway. Really, I mean it.
  8. Use the SAT Vocabulary market app to learn a few new words. This should also make a fun trivia game if I'm waiting with a friend.
  9. Use one of the many Chess market apps to finally learn how to play the game. I'm told it's a game that you can pick up relatively quickly - so let's find out.
  10. Use the Audiobooks market app to seamlessly download and listen to audio books. This is an especially handy because after sitting around a waiting room, you can continue listening to the book on the way home.
  11. Bonus: Use the Sketcher app to practice drawing. This is my chance to bring out my inner Leonardo Da Vinci.

OK, I'm feeling a lot more prepared. Go ahead life, throw some delays at me -- I'm ready for 'em! (Of course, if you could make sure my phone was fully charged up and had a fast Internet connection, that'd be great.)

Oh, and I'd love to hear your favorite tricks for making the most of wait time -- please share them in the comments of this post.

Update: The wife read this list and suggested a good activity would be to send her a romantic e-mail or SMS. Nick suggested Andoku app, writing Twitter Haiku and Overdrive to listen into free audio book. All great suggestions - I've added them to a new master list here (or you can use the QR code below).

Wednesday, August 04, 2010

Artist of the Day: Sade

Dave gave me an odd look when he heard me hacking away to Soma FM's Lush station. With a description like Lush: Sensuous and mellow vocals, mostly female, with an electronic influence, I suppose I can't blame him.

I explained that it was an entire channel that sounded like Sade - to which he asked, who's Sade?

I thought everyone knew Sade. Her quintessential song, No Ordinary Love sums her up:

As you can imagine, if you're in the right mood, nothing beats Sade. What that mood is exactly, I can't really explain. But she should be in every listener's toolbox, if you ask me.

Tuesday, August 03, 2010

Handy Emacs Function: url-decode-region

Every once in a while I get the need to URL decode some text while hacking away in emacs. I always spend a few moments looking for a way to do this, but usually give up. Tonight, I dug just a little deeper and learned about url-uhex-string.

This function does the URL encoding, but isn't interactive by default. So here's a quick elisp function I wrote up to make it so:

(defun url-decode-region (start end)
  "Replace a region with the same contents, only URL decoded."
  (interactive "r")
  (let ((text (url-unhex-string (buffer-substring start end))))
    (delete-region start end)
    (insert text)))

Now, I can highlight a region, and type M-x url-decode-region, which is what my fingers wanted to do all along, anyway.

If the need arises, or anyone is interested, I can write up url-encode-region.

Gotcha of the Day: ProFTP server claims password is wrong when it isn't

I was trying to do something really simple: add a new FTP user to a server. Everything went great, except, I couldn't actually FTP using the new user credentials.

Whenever I did, I got the following error in /var/log/auth.log:

Aug  3 09:28:30 XXX proftpd[7352]: a.b.c.d (a.b.c.d[a.b.c.d]) - USER foo (Login failed): Incorrect password. 
Aug  3 09:28:30 XXX proftpd[7352]: a.b.c.d (a.b.c.d[a.b.c.d]) - FTP session closed. 

I tried resetting the password, ssh'ing as the new user, and su'ing as the new user -- these all worked, yet I kept getting the above Incorrect password message.

Poking around on the web, I was inspired by this article to check the PAM configuration. I opened up /etc/pam.d/ftpd and my problem immediately became obvious:

# PAM configuration for the "ftpd" service
#
auth            required        pam_group.so            group=xftp
auth            required        pam_nologin.so          no_warn
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            required        pam_unix.so             no_warn try_first_pass
account         required        pam_unix.so
session         required        pam_permit.so

The first line was the critical one -- it says that any user logging in is required to be in the xftp group.

I edited /etc/group and added the new user to the xftp group - and bam! it was working. Just like that.

So the lesson of the day: when in doubt check the PAM configuration.

Monday, August 02, 2010

Gotcha of the Day: Punching a Hole Through Apache Authentication

When I setup a dev site, I like to throw up .htaccess authentication on it. That way, search engine bots won't crawl and index it, and end users won't discover it and get confused.

But, last night, I ran into a classic problem with this configuration which is that there are times when anonymous access to the site is needed. Last night, this anonymous access was needed by the PayPal IPN architecture. But, this same sort of issue comes up with any sort of asynchronous notification is involved (like with webthumb's notify requests).

It's tempting to simply drop the authentication requirement from the dev site, but that's problematic because the reasons it exists are essential ones.

After mulling this over, I decided I'd try a different strategy. I'd go ahead and leave the site as password protected, but put the scripts that need anonymous access in their own unprotected directory.

That is, assuming the webroot is public_html, I'd put my IPN notification script in the following directory:

 /public_html/async/ipn-handler.php

I knew I needed to put some sort of special configuration in async/ipn-handler.php, but what. I read through the Apache docs and arrived at the following:

Allow from all
Satisfy Any 

The first line says that any host can access this directory. That is, there are now host or IP address limits on this directory. But, that line alone doesn't really help matters - because the .htaccess authentication at the root level requires a valid user.

The second line, the satisfy directive, says that either user authentication or host authentication are acceptable. Because all hosts are welcome, anyone can get in.

The result is a private site, but with a single publicly accessible directory. The scripts within this directory are written with this in mind, can gracefully be invoked by a search engine bot or curious user without harm (though, how'd they guess the name of the script or directory is beyond me.).