Friday, May 30, 2008

A Scheme To Try: STklos

I'm thinking I should check out STklos. It has both "easy connection to the GTK+ Toolkit" and "an efficient and powerful object system based on CLOS."

I wonder if I could use it to put together prettier apps than MrEd?

Thanks to Grant for highlighting it.

Shoe Scent Hack

Dave tells me that sticking dryer sheets in your shoes keeps them dryer
and less smelly. Seems like a winner to me.

My standard way to deal with smelly running shoes is by leaving them on
the porch. Sure the neighbors, visitors and mail man just love that.

Thanks for the tip Dave!


Thursday, May 29, 2008

ColorScheme Gallery - 3000+ Swatches of Inspiration

Until I finally nail picking out colors, I'm going to be on the lookout for any color related resources that can help my plight.

Today I found the ColorSchemer Gallery.

It is what the name suggests - thousands of color combinations, named and tagged. Should be a great source of inspiration.

Whenever I create an admin section of a site, I like to pick a fairly random color scheme to play with. My theory being that I might surprise myself with what looks good. Usually, the results are pretty hideous, but of course, it's the admin section so who cares.

Perhaps next time I'll pick a random page of the gallery and "force" myself to use one of the schemes.

In fact, here's a bookmarklet to do just that:

Random Color Theme

Names, Lots of Names

I needed a whole bunch of sample last names for some bogus data for an app I'm working on. Thankfully, we have Google, and of course, this information is just a query away.

I quickly found the Top 1000 most common surnames in the US (as of the 1990 census).

This should be exactly what I need.

Little known fact - Simon is a more common last name than Frank and Clayton. Not to mention Lloyd and Boone. Heck, we just barely beat out Waters.

As a bonus, here's a little PLT-Scheme app I wrote up to grab and fix the case on the names. No claim that it's especially efficient or compact, it just is.

(module name-grabber mzscheme
  (require (lib "" "net")
           (prefix l: (lib "" "srfi"))
           (prefix s: (lib "" "srfi"))
           (planet "" ("lizorkin" "sxml.plt" 1 4))
           (planet "" ("neil" "htmlprag.plt" 1 3))
           (lib "" "srfi"))

  (provide get-names)

  (define (fix-case word)
    (string-append (string-upcase (substring word 0 1)) 
                   (string-downcase (substring word 1))))
  (define (get-names)
    (let* ((url (string->url ""))
           (in-port (get-pure-port url))
           (doc (html->sxml in-port)))
      (close-input-port in-port)
      (let ((name-rows ((sxpath '("//table[@style = 'boldtable']/tr")) doc)))
        (l:drop (map (lambda (row)
                     (let ((cols ((sxpath '(// td *text*)) row)))
                       (if (not (null? cols))
                           (fix-case (l:first cols))
                   name-rows) 1))))

Update: Added a provide clause, thanks Grant!

Kid Friendly Internet Find: Dr Suess On YouTube

There's plenty of crud on, but it turns out, there's even some fun kids oriented stuff. Case in point, this collection of Dr Seuss videos I stumbled on while searching for some place holder content.

Here's one to get you started:

Careful - you're only a click away from plenty of non-kid friendly videos. So, I'd only try this one supervised.

Wednesday, May 28, 2008

Getting Spoiled

Usually, when Shira comes home from work, and I emerge from my laptop - we scrounge around looking for something resembling dinner. But not with my brother Dave here. He made an impressive spread of turkey burgers (tasty, and good for us), corn and other fix'ins.

Man, I could get used to this whole personal chef thing. Too bad he's going to be starting a job and moving out.

But while we got him, I'll be enjoying it.

Tuesday, May 27, 2008

Hacking Filled Polygon Support into FPDF

My preferred way to generate PDFs with PHP is by using the FPDF Library. The library is: free, doesn't require any add ons to run, has a terrific set of tutorials and a clear user manual. It turned out to be a great way to generate official looking PDF documents with a minimum of fuss.

Today, I needed to generate a specific chart type, and ran into a problem using FPDF. Turns out, FPDF doesn't support arbitrarily filled polygon shapes - only rectangles. D'oh.

This, however, turned out to be a great excuse to dig a little deeper into both FPDF and the PDF standard itself. From a review of the FPDF source code, I realized that most of what it was doing was emitting the right PDF operators into a text stream and letting the PDF viewer worry about the details.

I busted out the old PDF Reference Manual and learned that the operators it used were very similar to PostScript. If you've never looked into PostScript, it's a wonderfully fun language to learn.

Using my knowledge of PostScript, and reviewing the source code of FPDF I was able to hack the FPDF source to include:

function Poly($points, $close = false, $style = '') {
 if($style == 'F') {
   $op = 'f';
 } else if($style == 'FD' || $style == 'DF') {
   $op = 'B';
 } else {
   $op = 'S';
 $buffer = sprintf("%.2f %.2f m\n", $points[0][0], $this->h - $points[0][1]);
 for($i = 1; $i <>h - $points[$i][1]);
 if($close) {
   $buffer .= " h\n";
 $buffer .= " $op\n";

Here's a sample usage:


$inch = 72;
$fpdf = new FPDF('L','pt','letter');
$fpdf->SetDrawColor(0xA4, 0x17, 0x17);
$fpdf->SetFillColor(0x63, 0x8F, 0xC9);
$fpdf->SetFont('Helvetica', '', 12);

$fpdf->Text($inch, $inch, "Test of the Poly(...) method:");
$fpdf->SetXY($inch, 4 * $inch);

// Build up a set of points
$points = array();
$points[] = array($inch, 4 * $inch);
for($x = 1; $x <>Poly($points, true, 'FD');


And here's how it looks in the PDF viewer:

The Two Approaches To Gardening

First, there's the right way: plant the proper plants, at the proper depth, at the proper time of year, in the proper manner, feeding and watering at the proper intervals.

And then there's the way I've adopted: see pretty flowers at Home Depot, buy, stick in ground, get wet. Repeat.

What's the worst that could possibly happen? They die. Well, chances are, they were going to die anyway. Now I've just invested a whole lot less effort into the process.

I don't think I'd use this approach for running a business, or writing code - but I think it'll work fine for gardening.


Monday, May 26, 2008

Rotor To The Rescue

Usually, I'd insist on finding a local / small business plumber to help us with our latest plumbing crisis. But today, it was the National Rotor Rooter that won our business (the locals got called first, but were too slow in calling back). They got a competent plumber here reasonably quickly, and with only a small holiday fee.

Patrick, our plumber, couldn't have been nicer. He figured out the problem was with our sewer line in our second floor. He used pretty basic debugging technqiues to do this.

At the end of the day, he needed to use his big 'ol electric snake to degunk our sewer line. I felt a little better that he didn't use equipment I owned or could have easily bought. Turns out, it was worth calling in the big guns.

It's so easy to take your home's plumbing for granted - but today I was reminded that every flush and every shower is a little miracle in and of itself.


Know when you're outgunned

A stopped up toilet I can handle. A stopped up toilet that results in
water dripping from the dinning room ceiling - well, that's out of my
pay grade.

I've shut the water off in the house, and Shira grabbed the phone book
to call a plumber.

Memorial day, can you think of a worse day to have to call a plumber? I

Wish us luck with this one...


Messages From Mom

Here's another entertianing site I just stumbled upon:

It's a glimpse into what mom's are writing in e-mail these days. Got to say, some of them felt awfully familiar.

Actually, I consider myself quite lucky - not only does my mom do e-mail, but she reads this blog (hi Mom!) and keeps in touch via text messaging.

Man, if I could convince her to start twittering...that'd be precious.

What the cell phone companies really need to offer is a way to record all your incoming and outgoing SMSs and archive them for you. That way, you could look back in a few years and read some of the chatter you had between family and friends. Most of it would probably be junk, but I'm some of it would be precious. It would be very much like a private, time delayed, version of twitter. Hmmm, I'm not sure that's a good thing.

Regardless, lots of fun stuff here.

Thanks to Gavin for blogging about the site.

Sunday, May 25, 2008

Moving Gear List

We had great time moving a friend today. But, it did occur to me that with a bit more preparation, it could have gone even smoother.

Next move, I should make sure to bring:

. Tools for taking furniture apart

. Pads or blankets for padding

. Beer

. Snacks - lots of snacks

. Water and Soda

. A measuring tape

. Tape & rope

. Ziploc bags for assorted screws, nuts from taking things apart

. A couple of door stops

. Permanent markers

Did I miss anything?

Update: It's also a good idea to bring a Dry Erase marker - this is an easy way to mark up glass items (like glass shelves), to say what they belong to.

Friday, May 23, 2008

Another Way To Lose Time On The Internet

Special thanks to Shaun of for this time waster entertaining game. I give you: The Age Project.

Yet another thing for me not be good at, but it is oddly fun.

Stopwatch Bookmarklet

I'm still a big fan of Yesterday, I wanted a little window with the stopwatch running that wasn't too obtrusive. So, I visited the full screen online stopwatch in a new browser window, and then resized the window so it was tiny, but big enough that I could read the dial. (The photo below is actual size)

I liked the effect enough that I decided I would rig up a bookmarklet so I could get a tiny stopwatch at a click of a button.

Here's what I came up with:

Mini Stop Watch

Just drag the link above to your link toolbar, or right mouse click on it and say "Add To Favorites." Either way, you should now one click access to a little stopwatch.

Worst. UI. Ever.

It looks like a normal clock radio - it's got a snooze button, and dial to set the stations. It's got the standard LED display and black plastic case.

It is, in fact, the user interface from hell.

For the life of me, I can't figure out how to disable the alarm from going off. If you plug in the alarm, set it to alarm at 8am, as far as I can tell, for the rest of its life, it will do so.

And every time it does this (go off, when I don't want it to) I spend 20 minutes pressing different combinations of buttons. I think, if I hold down 'cancel' and 'sleep' at the same time, it'll work. It never does. I always give up and pull the plug.

It turns out, innovative user experiences aren't always a good thing. If this clock used the same approach every other clock radio had used, it would be just fine.

What on Earth were the designers of this clock thinking? And did they ever test it out first?

Moral of the story: even the simplest user experience can be broken if you aren't careful.


Update: Specifics about this device:

 Brand: GE
 Model: 7-4837B
 Frustration Level: Very High

Thanks Nick for suggesting I provide this info.

Thursday, May 22, 2008

Embeddable Slideshow Widget -- Simpleviewer

I needed a clean way to display a handful of photos in a new app I'm working on. In the past, I've rigged up a simple click on the thumbnail to load it into the main image area slideshow in JavaScript. And it works OK, but I thought I'd look for something a bit sexier this time.

Yesterday, I found simpleviewer, and today I dropped it in place.

I'm actually quite pleased with it. I like it, because:

  • There's a fully functioning free version available. That way, I can play with it, and if I like it, have my client buy it.
  • It's basic functionality is what I need - show a main image, allow users to pick another image from a thumbnail
  • It was easy to wire into my app. Instead of embedding as they suggest:
      fo.addVariable("xmlDataPath", "gallerydata.xml");  
    I pointed the xmlDataPath to a PHP script which dynamically generates the gallery:
      fo.addVariable("xmlDataPath", "gallery_gen.php?id=298848&xcache=1");
  • It was customizable in the ways I need it to be, including: controlling the paths where the images and thumbnails were found, the color and size of the frames around the images and other tweaks.
  • The image transitions provide the more polished look I was going for

There seem to be quite a few other options out there for components like this - but so far, this one was the most straightforward to use. It's certainly worth a look.

Wednesday, May 21, 2008

Murphy's Law Strikes Again

Today, after a breakfast meeting, I hit Microcenter to pick up a
wireless keyboard. I bought the cheapest one they had ($20.00) as I
couldn't tell a difference between it and the more expensive models.

I get it home and had trouble getting it all to work. I finally read
the instructions and what do you know, it all sync'ed up great.

It's now 11:15am and I have a call starting any second. My client IMs
me and says: "ready to talk?"

Using my ultimate keyboard setup, I type back: "all st"

Huh? I then type "ys."


The "e" key is broken. ARGH!

That's what I get for cheaping out, I suppose.

Now it's back to Microcenter for another keyboard purchase. Murphy,
you're killing me here.

--Ben - A Discount Hosting Recommendation

Lately, when my clients have been asking me where they should host their smaller web apps, I've been sending them to


  • Their shared hosting includes: MySQL 5.0, PHP 5 and Postgres. I've found Postgres to often be missing from discount hosting services.
  • The service is dirt cheap - for about $47.00, you can get a year's worth of hosting. My clients love that their monthly fee for hosting their application is $3.95.
  • The response to questions / issues has always been fast. On more than one occasion, I've needed to open up a ticket with them, and they got back to me in a totally reasonable amount of time. I even used their Live Help to ask about a policy question (can I move my server from MySQL 4.x to 5.x) - and got my question answered that way too.
  • They offer a near instant installation of WordPress, if you need it. True, WordPress is pretty dang easy to install - but why bother with having to FTP all the files, and create the database, when you can just use their fast setup?

The highly discounted price won't work for everyone - as they limit you to a single database. However, for about $8.00 month, you get unlimited databases, shell access and lots of other goodies - which probably covers the bases for most small web apps and websites.

I have yet to try them out for a bigger app that requires either full server access or multiple servers, so I can't vouch for that sort of configuration. But for smaller apps, I find that my clients are quite satisfied with them.

Thanks to Jason, of TextCall fame, for searching them out and using them as his hosting provider.

Tuesday, May 20, 2008

The Grillmaster Is in

So my bro Dave (well, technically Dr. Dave) has officially moved to DC!
Until he gets settled, he'll be staying with us.

Dave has a multitude of skills - and one of his primary ones that we'll
be putting to use is his grilling ability. I have it on good authority
this boy knows how to do some serious grilling.

So much for microwaved soy burgers - for the immediate future it's real
(and tasty!) meat.

Dave's cooking for the first time for us for tonight, so we're really
putting him the test. So far he's playing the part spot on.

Welcome to the household Dave, we're psyched to have you with us! (And
not just for dietary reasons.)


Monday, May 19, 2008

E-Book Tip - The Elements Of Style

Here's something useful I just learned: William Strunk and E.B. White's classic Elements Of Style is available in full text form online here.

It even looks great formatted on my Sidekick Slide:


(That's me practicing the Omit Needless Words recommendation)

Incremental Programming - Another Approach To Software Development Success

This weekend I had a chance to read the paper Incremental Programming with Extensible Decisions by Doug Orleans. In it, it discusses a prototype framework that implements a variant of AOP and Predicate Dispatching.

The paper was though provoking and definitely convinced me that I need to be looking into trying to AOP or related approaches in my production work. But what I found really interesting, and what's been on my mind for the last few days is in the very first sentence of the introduction:

Incremental programming is defined by Cook and Palsberg as the construction of new program components by specifying how they differ from existing components

Doug goes on to explain that OOP fits the definition of incremental programming:

Object-oriented programming (OOP) languages typically support incremental programming with inheritance and dynamic dispatch features. Whenever a message is sent, a decision occurs, but the branches of the decision can be specified in separate components,

I suppose this is all fairly obvious in retrospect, but I tend to think of OO as more of a packing mechanism. If I want an authentication framework I could create it procedurally by outlining various functions, and passing the state in explicitly. Such as:

  $data = lookup_user($username);
  if(is_authenticated($data, $some_password)) { ... }

If I wanted to do this in OO, I could bundle the state and functionality together. Such as:

  $obj = new AuthModule($username);
  if($obj->is_authenticated()) { ... }

Obviously, there are pros and cons to using OO or procedural approaches, and of course, at some level, they are equivalent.

Doug's comments suggest that OO can be more than organizational technique, or a helpful modeling tool. Imagine if you built a system completely by bending and shmooshing together existing components. Inheritance based OO isn't powerful alone enough to do this, but with AOP and other approaches, perhaps you could.

The goal of a programming language and frameworks, I think, is pretty simple: allow you to get a job done by writing as little code as possible. Perhaps, incremental programming is a way to do that.

It would be an interesting exercise to try to develop a fairly sophisticated application built purely incrementally. Of course, you'd need to define the ground rules of what that would mean. But once you had the rules of the game established, it would be interesting to see what came from it.

Sunday, May 18, 2008

The Running Crew

Race complete, and endorphins flowing - life is good.

Here's me and Dave's graduate school buddies. What a fun group.



5. K. Done. Out. Of. Breath. But. Alive.


What a way to start the day

David roped, uh I mean, recommended I join him for the Lilac 5k race. Right now I'm dressed in my $10 shoes. I paid my $20 entry fee, and I'm trying not to get psyced out by all these runners in coordinated outfits.

I'm going for slow and steady and not fast and passed out.

Wish me luck.


Saturday, May 17, 2008

Wal-Mart Saves The Day

David's running a 5k tomorrow and I thought I would join him. I brought
shorts home with me. I can borrow a t-shirt from dad.

Then it hit me - I didn't bring home sneakers.

No problem, we hit the Wal-Mart for some quick shopping.

I picked up a pair of knock off running shoes for, get this, $10.00.
Amazing. No wonder Wal-Mart is doing so well in this economy - people
can actually afford the stuff here.

Best of all, if I run poory tomorrow, I can always blame the shoes.


Friday, May 16, 2008

The Real Deal

At David's graduation party - he's saying hi to folks, introducing us
to his professors and giving random girls hugs.

He's either a major player, or he really is graduating.



At the airport

We'll I'll be, I'm at the airport and through security and it's 1 hour
to my flight.

This is just too easy.


Short Gadget Memory

I was browsing through back issues of wired, and came across this
classic November 05 cover. The banner reads:

"You call this the phone of the future? Inside the quest to build the
ultimate music phone and why Apple fell short?"

The article talks about the Rockr - Apple's first pass at an iPod +

I think there are some great lessons from this:

- Even Apple can produce crap

- No company is guaranteed success - just because they revplutionized
the mobile music world, didn't give them a free ride in the phone

- Just because your first product was a flop isn't an excuse to not try

- People have incredibly short memories - with all the iPhone hype, was
the Rockr even mentioned?

- When you screw up, at least learn from your mistakes. I'd say Apple

Hard to believe they went from that headline to essentially
revolutionizing the mobile platform.


Planes, Trains and Automobiles

I'm starting my latest travel adventure - I'm heading back to Rochester
for my brother's Ph.D. Graduation (whoooo Dave!). Rather than just
driving to the airport and getting on a plane, I decided that would be
way too easy. Instead, I'm doing: dropoff at metro, metro to train,
train to bus, bus to airport, airport to Rochester.

With all those moving parts, what could possibly go wrong?

Oh, let me count the ways.

Actually, I'm fairly impressed that I can (in theory) use public
transportation to get from my doorstep to BWI airport with a minimum of

Hmmm, maybe I should hold off on celebrating this accomplishment till
*after* I'm in Rochester.


Thursday, May 15, 2008

10 Years Of Crap - Recycled

I finally did it. Shira will be thrilled. I recycled 10 years of dead computer hardware - from Shira's first college computer (which had the iMac form factor years before Apple invented it), to gigantic Gateway towers (remember those? What a terrible idea those were) to obscure SUN hardware. All of it was delivered to the Arlington Household HazMat Program.

Check out this overhead view of all the crap I got rid of:

This probably raises a few good questions...

How does one manage to accumulate so much electronic flotsam?

Here are some reasons: (1) I Run Linux - Linux does well on hold hardware. Have a slow PC that can't run windows lying around? You can always throw Linux on it. Or, you can say that you're going to throw Linux on it and never do. (2) I worked for a startup that went under - when a startup starts to die, inevitably, it will move to a smaller location. When this happens, the System Administrators will gladly give away free crap rather than move it themselves. This is a fun and effective way to inherit obscure, pricey hardware. (3) I can never turn down a good deal - when someone is offering free computer hardware, who can say no?

Why hold on to it so long and let it accumulate?

Some of it is pure laziness. But, honestly, I'd love to have played with the hardware I just chucked. I just haven't found time. If I haven't had time in the last 10 years, I doubt I'll have time any time soon.

Was it hard to recycle?

This was the big surprise - not at all! Arlington has a terrific program to help their residents get rid of stuff like this. I called (703-228-6832) and easily made an appointment. A guy met me at the drop-off point and helped me unload my car. He couldn't have been nicer. He explained to me that all the recycling happens domestically and that the older hardware I was giving to him was especially rich in precious metals - so they were happen to take it. The service is free accept for the monitors I recycled - those were $15.00 a piece. He explained to me that the fee covers the labor it takes to disassemble and deal with all the hazardous stuff in a monitor. And besides, he said, we are a water treatment facility - we can't be polluting the water by taking short-cuts, can we?

Why recycle it, why not sell it on eBay?

The stuff I recycled was absolutely ancient, and much of it barely working. On the working stuff, the cost of shipping alone makes it a crazy thought to try to sell. I could have put an ad in craiglist, but even then, there would be more hassle than just recycling it. If folks want crappy hardware, there's plenty on eBay.

Did you really fit all this stuff in your small Acura?

I did! And here's proof:

Are you really out of the ancient hardware business?

Not at all. I didn't recycle any of the half working laptops I have. So there's still plenty to tinker with if I ever do get the time.

So, with that task done, I think we can go to the next stage of the plan - fill the hardware void with new hardware. Hmmm, time to go shopping...

Wednesday, May 14, 2008

Marketing Hack - Getting The Word Out With Evite

I just got an Evite to Arrow Bicycle's Grand Opening. While it came from a friend of mine, it was clearly advertising a business and not some weekend shindig. Inn this case, my friend is buddies with the store owners, and so she's helping them to spread the word.

My first thought was, of course, what an interesting guerrilla marketing technique* - as it mixes the personal invite with a definite marketing message.

In this case, the marketing flavor of the Evite actually worked - it was well done and quite clever. The Evite is informative and really emphasizes the event (the grand opening) rather than just the business. Only as a footnote does it include If you can't join us this weekend, keep us in mind for all your bicycling needs! - which is more than reasonable.

I also like the that the Evite includes responses from people who said they were coming. These turn out to be little testimonials, bits of humor and encouragement - all good things to have associated with your business.

Hmmm, wonder if I could use Evite to do an online launch party for apps my customers release...

Oh, if you're a biker here's the info to attend - sounds like it'll be a great time:

ARROW Bicycle's
Grand Opening 
May 17th & 18th

10% off store wide (in stock items only), 
Prizes, and Great Times All Weekend Long!

Location:  ARROW bicycle
5108 Baltimore Ave., Hyattsville, MD 20781

*I doubt my friend thinks of this as marketing - that's just me putting my small business goggles on. Sorry Caron if I'm taking this evite too seriously.

Gimp Tool of The Day: Rotate Colors

I needed to convert an icon from one color to another*. I couldn't use the simple bucket fill tool The Gimp has (at least, I don't think I can) because the icon contained a variety of shades of color.

A little poking around The Gimp manual brought me to Rotate Colors. Here's the screen that pops up when you select that option:

Turns out to be a pretty intuitive UI - I just dragged around the various selectors until I had the color substitutions I needed. Here's the finished product :

Have to say, The Gimp saves the day again. This can't be the only way to get this effect - what other ways are there to do this?

Thanks to for providing a sample icon I could plug into this example.

Tuesday, May 13, 2008

A Logo In A Hurry

Today I had my first successful attempt at building a site logo. I'm still not convinced that it'll be the logo permanently, but it's a good start.

The secret turned out to be and their Illustration Search ability.

My client suggested an object he wanted in the logo, like a Dump Truck and I did a search for it in the Illustration section. The results included a variety of options that I could drop in as a simple logo.

Also, I discovered that has plenty of icons too, which are always a pain to find.

Have to say, I really think their Illustration search is going to come in handy.

As A Rule Of Thumb... is a fun site that gives you handy shortcuts you can use. Some are setup like classic rules of thumb:

Ten people will raise the temperature of a medium-size room one degree per hour.

Others are a bit more creative:

As a rule of thumb, the more satellite TV dishes per row home in a given block, the more dangerous that block is.

Fun and useful stuff.

Also, it's worth noting that the popular story about the phrase Rule Of Thumb coming from "maximum thickness of a stick with which it was permissible for a man to beat his wife" is false:

The term is thought to originate with wood workers who used the length of their thumbs rather than rulers for measuring things, cementing its modern use as an inaccurate, but reliable and convenient standard.

It is often claimed that the term originally referred to a law that limited the maximum thickness of a stick with which it was permissible for a man to beat his wife, but this has been fully discredited as a hoax.

Monday, May 12, 2008

6 Month Checkup

It's hard to believe that just a short six months ago today, I started doing Ideas2Executables full time.

Wow, what an absolute adventure it's been.

Before I started, I made a mental list of reasons why doing i2x was a no brainer:

  • I'd get to work with a wide variety of technology - check. I've done web apps, desktop apps, and just recently a telephony app. I've become vastly more comfortable with CSS, WordPress, PHP, MySQL, Postgres and quite a few others. From a learning perspective, there's nothing like jumping into the deep end.
  • I'd get to work with a wide variety of people - check. This has been more fun than I could have imagined. Every day I get to talk to people who are passionate about small business and their next big idea. In just 6 months I've written software in the following topics: Technology News, Telecom, First Responders, Travel, Small Business, Executive Coaching, Advertising, Gambling, Sports, Real Estate, Dating, Watches, Consumer Advocacy, Mobile Phones, Education and Language Translation.
  • I'd be a financial fool not to start my own business - Uh, what the heck was I thinking here? Never again will I take for granted the notion that a pay check just shows up in my account regardless of, well, of pretty much anything. It's the sweetest deal known to man. If you have it, cherish it. Sure, you can do OK financially - but I was an idiot for thinking it was going to be even remotely easy.
  • I'd have more free time - and what the heck was I thinking here? Seriously. I wish I had written down the math for this one. I love ideas2executables - and I better. When you own a small business, it becomes pretty much everything you talk and think about.
  • Shira will help out here and there - Boy, did I underestimate this one. Shira's financial skills have been beyond essential. If I don't have her sending out and tracking invoices, and 1000 other financial matters (I think we sent off business taxes? Maybe?) I don't have a business. This is definitely a two person gig. I'd be lost without her.

Overall, this has been awesome. At least once a day I turn to Shira and say - "please don't make me get a real job!"

So, if all goes to plan, there'll be many, many, many months more of Ideas2Executables to come. Thanks so very much to my customers who made this happen. Without you guys, I'd have a commute and no doubt a job that requires I get out of my pajamas.

Sunday, May 11, 2008

5 Business Lessons From Mom

While pondering my Mom on this Mother's Day it occurred to me that long before I was reading business books and working at start-ups I was witnessing her successfully run a small business. My Mom was an Avon Lady for years (20'ish?) and for many of those years was the top salesperson in her district. Turns out, she was an excellent teacher in what it takes to run a business. And now, I'm using those lessons every day in my own business.

Here are 5 lessons she taught me:

  • Delegate - Know your strengths and how you can use other's skills to the fullest. OK, so she made use of a bit of child labor by having us help her deliver Avon books - but hey, we got paid (I think it was $1.00 for helping). It was a brilliant move.
  • Don't make up people's mind's for them - She'd give all her customers the special seasonal inserts to the books, not just those that Avon were targeting. She told me on more than one occasion, why should she make up her minds for her customers? For example, Jewish customers had Non-Jewish friends to buy Christmas gifts for, why make assumptions about who would buy what?
  • Never underestimate the power of the referral - My Mom taught me quite young that a woman could buy a $3.00 lipstick, and bring the book into her work place where hundred dollar orders could be made. Never, ever, underestimate the power of word of mouth.
  • It's all about service - My recollection is that Avon had a 100% satisfaction guarantee, and my Mom enforced that. If someone used half a product and wasn't happy, she took it back, no questions asked. She understood that giving people excellent service is the first goal, and the sales will follow behind.
  • It's all about growing your customer base - My Mom wasn't in this Avon thing for a quick buck. She spent years building up loyal customers who loved her products and loved her service. She was only going to be successful through careful growth, not gimmicks.
  • Bonus: Take pride in your work - As a kid, having a Mom who was an Avon Lady wasn't exactly the most glamorous job. But my Mom taught me that she was giving her customers a service they truly loved. They bought her products because they worked and worked well. And they bought from her because she delivered the service they could be proud of. She truly took pride in her work, and taught me to as well.

Thanks Mom - not only for being a great Mom and doing all the things a great Mom should, but for teaching me how to be a business mensch. If I have success with i2x, there's no doubt a big chunk of that is because of all the lessons you taught me.

Answering The Important Aviation Questions

We hit the very cool Udvar-Hazy Air and Space Museum today and was able to ponder the import questions of aviation, like - where the heck is my jet pack?


Saturday, May 10, 2008

Bash Shell Hack: Picking a random set of files from a directory

I needed to test out some work just completed, and to do so, I needed to run some files against a process. Problem is, there are 1000 files to choose from, and I only want to test a handful.

But which handful? Ideally, it would be random.

So here's my quick shell hack to give me 15 random files from a given directory:

 ls | while read x; do echo "`expr $RANDOM % 1000`:$x"; done \
     | sort -n| sed 's/[0-9]*://' | head -15

This works by:

  • Generating a list of every file in the directory
  • Reading in each file into the variable x
  • I prepend a random number (thanks to the magic $RANDOM variable in bash
  • I then sort that listing numerically - which means sorting based on the random number
  • I then strip off the random number
  • I show only 15 items from the stream

Of course, this isn't efficient - but it doesn't need to be. Heck, it took longer to write up the blog post describing it, then it did to actually write the code.

I so love Unix. And I'm running this under cygwin on a Windows box. See, there's no excuse for not using Unix.

Friday, May 09, 2008

Gotcha Of The Day - Image Maps In RSS

A client of mine wanted to include an image map in his RSS feed. So, I added in the following code:

  <map name="foo">
    <area shape="rect" href="..." coords="1,2,367,28"/>
    <area shape="rect" href="..." coords="384,10,453,23"/>
  <img usemap="foo" border="0" src="..."/>

This worked fine in IE, and it worked fine in a regular HTML page in Firefox - but for some reason, the image map wasn't clickable in the preview page of the feed in Firefox. The problem turned out to be a missing id attribute. I changed the above to:

  <map name="foo" id="foo">
    <area shape="rect" href="..." coords="1,2,367,28"/>
    <area shape="rect" href="..." coords="384,10,453,23"/>
  <img usemap="foo" border="0" src="..."/>

And I was good to go.

Caption Me

I'll get us started...

Caption: Either it's a mixed marriage or someone really hates to be


Thursday, May 08, 2008

MySQL Foreign Key Tip

If you use MySQL Foreign Keys long enough, eventually you'll get the error:

 MySQL Error Number 1005 Can’t create table  ‘.\XXX\YYY.frm’ (errno: 150) 

I fairly quickly learned that this error specifically means there's a problem with your foreign key constraint. The problem is, this is a totally generic error message - there could be any number of things wrong , and this message won't help you figure out what the problem is. (Like when you wife you gives you That Look, yet you have no idea which of the dozens of things you may or may not have done wrong, are the cause of said look.)

While trying to debug an especially tricky case of the Error Number 1005's (the problem: the ID type in the foreign table was INT, the constraint tried to match it up to a BIGINT column - d'oh!) - I learned the following:

If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to errno 150, table creation failed because a foreign key constraint was not correctly formed. Similarly, if an ALTER TABLE fails and it refers to errno 150, that means a foreign key definition would be incorrectly formed for the altered table. You can use SHOW ENGINE INNODB STATUS to display a detailed explanation of the most recent InnoDB foreign key error in the server.

So, to figure out my issue, I just needed to run:


Hmmm, reading the manual - that's just crazy enough to work!

More Quote PMA

I did some more work on a coaching related website today, and was again inspired to some Google searching for some PMA.

The site called for the inclusion of the following quote:

"When a man sets out to do something great in the world, a thousand demons are released from hell to try to stop him." - Old Hindu adage

This reminded me of a more PMA oriented quote from the Talmud:

Every blade of grass has its angel that bends over it and whispers, "Grow, grow."

I happen to the like more positive one myself, but that may just be me.

This quote is one of many listed on the WikiQuote page for The Talmud. Some other of my favorites:

Despise no man and consider nothing impossible, for there is no man who does not have his hour and there is no thing that does not have its place.

Examine the contents, not the bottle.

He who loves money will not be satisfied with money.

If silence be good for the wise, how much better for fools.

If one man says to thee, "Thou art a donkey", pay no heed. If two speak thus, purchase a saddle.

Lots more here.

Wednesday, May 07, 2008

Painless Form Filling On Internet Explorer

A while back I discovered Firefox Form Saver - which, as the name suggests, automagically fills out a web form for you once you've filled it out previously.

To say that it's an incredible time saver is an understatement.

But, I've mostly switched to IE for web development, and while I searched around, I couldn't find an equivalent plugin for IE.

That is, until last night.

Turns out, it was under my nose the whole time. The super useful and well implemented IE7Pro plugin has just the functionality I'm looking for. It's too bad they don't make more noise about it, as it's one slick feature.

To use the form saver, install latest IE7Pro Plugin. Visit a form of your choice and hit:

  Control + [

Name the form and save it. Now, anytime you need to reload the form for that page, hit:

  Control + ]

Couldn't be easier and couldn't be more useful.

Tuesday, May 06, 2008

Low Budget Publishing From A High Budget Source

Personally, I'd think the last place learn about how to get your message published on the cheap would be from a guy who gets a $20 million paycheck. But, alas, I was wrong.

Consider Tom Hanks' endorsement of Barack Obama.

Did he do it by holding some sort of press conference? Or how about some elaborate PR campaign? Did he hire a design firm for 10's of thousands of dollars to put together just the right website to match his every nuance, and announce it there? Nope, nope and nope.

He did the very same thing you or I could do - he shot a simple home video, with a script he wrote himself and then posted it on his MySpace page. And what's best of all, is that it totally works.

Heck, I didn't even know a MySpace page could be so effective - but he's managed to carve himself out a nice little niche there.

I think this is a wonderful example of how we have remarkable (free!) tools at our disposal. Think about it, you and Tom Hanks have the same publishing power? Awesome.

I think this, along with Brendan's work show that you don't need a big budget to have a big impact.

Dealing With Dell Issues - Some Lessons Learned

So my new monitor has been acting up these last few days. I'd plug it into my Dell Windows Vista laptop and it would do this whole flashing thing - go black, give me a glimpse of the screen - go black again. It would repeat this till I finally yanked the cord.

Sometimes it worked. It always annoyed me.

So I decided to do something about it. I started off by calling Acer - the maker of the monitor. That wasn't very useful - the kid on the phone was nice, but all he basically did was blame Dell.

So I finally called Dell. Tyler, my support rep, couldn't have been nicer and more effective. He did not, as I feared, send me back to Acer. Instead, he got a view into my laptop using dellconnect and troubleshot away.

The solution? Update the NVidia driver and the problem resolved itself.

But, better than a single solution, I learned:

  • Under the start menu there's Problem Reports and Solutions option. And from there, there's a View Problem History. This gave Tyler a general idea of what's been breaking recently on my computer.
  • Under the start menu there's Reliability and Performance Monitor. From there, you can click on Performance Monitor. You'll get a nice graph of issues you've been having. Again, useful to see what's breaking on your system. My favorite message is the pithy OS Stopped Working. That's code for Blue Screen Of Death.
  • On the bottom of my Dell laptop is a short Service Tag. When I want to check for driver updates I just need to visit Dell's Support Site, Drivers and Downloads and click on Enter Tag. I can then enter in this short code and get a full list of drivers that match my specific machine. I find that to be really slick.
  • Dell phone support is a really nice feature - I'm glad I have it, and I'm impressed with the support they offered.

Monday, May 05, 2008

Leveraging YouTube For Your Business

While virtually meeting my newest cousin Angus (born just days ago, whoo!) I discovered that his daddy, a real estate agent, has quite an collection of YouTube videos for his business.

People often talk about leveraging video and YouTube for their small businesses, but I've never seen it done so well. Here's a sample of his work, which explains some steps you can take to improve your credit:

There are plenty more, too.

The videos are clean, relatively short, informative and in general, well done. They take an educational tone, without being preachy or too transparently salesly.

If you're interested in finding a real estate agent in Baltimore, give Brendan Cooke a call (remember, he's my cousin - so if he gives you any trouble, you let me know. I'll tell his wife.). If you have a small business, definitely watch these videos for some great inspiration.

Sunday, May 04, 2008

Being Handy For The Day

Turns out, our projects for today all went off pretty much without a hitch.

One major goal was to tame our out-of-control rosebush - see how we did?



We also needed to replace the hand rails on our porch, which involved buying new pieces of wood, painting them and fastening them into place. Shira was a trooper here, and pretty much did all the work - from the prep work and painting, to drilling the holes:

There's just something about a woman with power tools. Man, I'm a lucky guy.

And other than getting pricked by the rosebush, there were no casualties. All in all, the projects went better than expected.

Sunday In A Cart

We just survived a trip to Home Depot.

We are now loaded up for a Sunday of working on the front of our house.
The plan: new railings for the steps, weed removal in the garden and new

If we make it through the day with no significant injuries, I'll call it
a success.

Wish us luck!


Review: Endo Sushi

For years now, I've been driving by Endo Sushi (3000 Washington Blvd, Arlington, VA 22201, 703-243-7799) and been thinking, we really should try them. Well, a few weeks ago we did and last night we went back again.

It's official, we like and highly recommend them.

They do the standard sushi well that we normally enjoy, including Shira's typical favorite - Shitaki Mushroom Rolls. But they go beyond that with their stick-to-your ribs tempura fried rolls done up fancier than usual.

I had the smoked salmon tempura roll last night and was very impressed with it. Of course, it's deep fried lox - what's not to love?

Another area they surprised us with was with their side salad. It seems that a side salad in a Japanese restaurant usually consists of two pieces of lettuce, a slice of tomato and yummy ginger dressing. They kept the dressing, but changed the trend by delivering a surprisingly large (OK, normal size, really) salad. Not a huge deal, but yet another sign these guys are different.

Our first visit there, the service was awful. They put us in a remote corner (good) and then promptly forgot about us (bad). Last night's service wasn't great service, but it was totally passable.

The real down side of Endo Sushi is their lack of parking. Though, that didn't keep them from being quite busy last night. Besides, the walk back to the car helped me work off some of that deep fried goodness.

Looking for sushi in Arlington? Check them out.


Friday, May 02, 2008

Like A Time Machine For Blogging

I'm writing this post on Thursday night, but it's not scheduled to show up until Friday morning. Spooky, I know?

Yeah, this was a nice add on by the good folks at Blogger. This should come in especially handy for Blogging while on vacation, Jewish Holidays, etc.

In honor of this disruption of the space time continuum, here's a Back To The Future spoof.

See you in the future!

Thursday, May 01, 2008

Signs Of Life

It's nice to see some signs of life from our garden1. Well, signs of life that don't include weeds. The weeds always seem to be healthy.

This is one of the first flowers of the season from our rosebush. Glad it's back for another season!

1Can you consider a handful of plants thrown in the ground by our contractor a garden? Luckily, we had Teresa help us out to improve matters.

A Source For Gift Ideas

I've built up quite a hefty Amazon wishlist (about 332 items at last count), so usually, when folks ask me what I want for my birthday or other occasion, I have a pretty solid answer for them.

Still, I like to add the wishlist on a regular basis so that there's always a variety of interesting items on it.

And a great source for finding these items? Kevin Kelly's Cool Tools. A Cool Tool is defined as:

Cool tools really work. A cool tool can be any book, gadget, software, video, map, hardware, material, or website that is tried and true. All reviews on this site are written by readers who have actually used the tool and others like it. Items can be either old or new as long as they are wonderful.

A quick visit to Kelly Tools, and you'll find all sorts of useful gadgets to ask for. And best of all, if you get them, you know they'll be useful.

What sites do you get your best gift ideas from?

Running Santity Hack

For me, running is more about problem solving than it is about exercise. The problem is, the more fatigued I get, and the more excited I am about the solution I've got in my head, the more likely my thinking process starts turning into a verbal one. By the end of my run, I'm carrying on a full blown debate match with myself.

This simply can't look good.

And on today's run, I came up with the hack to fix it.

Next time I go for a long run, I'll simply put in an old hands free headphone for my cell phone. I'll just tuck the end of the wire into my shorts.

Now, when I'm running down the street people will think: "Man, look how efficient he is, multi tasking as he runs" instead of "Man, that guy is nuts."

See, an idea this clever had to take a run to find.

A DC Memorial List and Some Oddities

Turns out, Wikipedia has a neat list of most of (all?) the monuments in D.C..

Before you next visit to the area, it's probably worth checking out.

For example, I had no idea that we had...

Who knew?

If I had any free time, it would be fun to visit them all. For now, I'll have to be satisfied with a virtual visit.

Like Watching A Train Wreck, Only Bigger

There's just something amazing about watching a skyscraper get flattened in a matter of seconds.

I can't imagine what the guy in charge of the demolition is thinking a few seconds before hitting the button.

What's your best guess?