Friday, October 30, 2009

Quick, Colorful and Collaborative TODO Lists

These days, I've been using the following recipe to track TODO items on projects. It's not a perfect solution, but it's quick and flexible.

  • Create a new Google Spreadsheet or add a new tab to an existing one
  • Create the columns Priority, Task and any other ones I'm tracking. Often I use at least one column to store the URL to the Gmail message that triggered the item in the first place.
  • Add some tasks to the list. In the priority column, choose a letter A - Z. In the task column, prefix the task with a tag such as Ben:, Urgent: or X: for completed
  • Highlight the task column and select Change formatting with rules. For each of the tags, select a color combination, like so:
  • Go under Share » Set Notification Rules to setup notification. That way, anytime someone adds an item to the list, you'll learn about it.
  • Share the spreadsheet with the rest of the team

Here's a sample spreadsheet in action:

Whenever the priority of a task changes, I just update the letter in the priority column and then resort the column. All the items will then snap into the correct location.

For bonus points, you can setup a form, which allows people to contribute to the TODO list without accessing the spreadsheet directly. For example, you might use this approach to collect up issues on a new application you're having the company play around with for the first time. Filling out a form is super easy, and you can even do it via e-mail.

Now, if I could only get Google Spreadsheets to actually do the items on the list, I'd be all set.

Thursday, October 29, 2009

Google Suggest API - Too cool not to use

I'm sorry, but the Google Suggest XML API is just too simple, and too amazing not to be used. Seriously, how cool is it that you can throw any phrase against Google and trivially get back its suggestions.

For example, here's how I query for "foo is":

Query: http://google.com/complete/search?output=toolbar&q=foo+is

Pretty slick, right?

The only problem I have is that I haven't found a use for it yet. But I will, it's too cool not to.

OhMyGov - A site with some sanity

I liked OhMyGov.com nearly the moment I finished scanning the home page. The concept is simple but brilliant: highlight both the successes and failures of government, not just one or the other. What I like about this approach is that it's just so dang sane, and not to mention, helpful.

If you spend all your time reading WhiteHouse.gov you may get a warm and fuzzy feeling, but you'll be ignoring the fact that there's definitely room for improvement in our government. On the other hand, if you're sole political source of news is from say weaslezippers.net, well, you're probably ready to secede by now.

Sure, sites on both extremes are fun to read (or amazingly wrong and unfair, depending on your views), they aren't always useful.

See, I really like the whole idea of weighing the merits of what government does, rather than say reflexively taking the opposite opinion under any circumstances (yes, I'm looking at you guys DNC and RNC). I think we'd be a lot better off if folks on both side of the isle had the courage to agree and even praise each other more often.

Now, go read OhMyGov.com.

Wednesday, October 28, 2009

ColorCombos.com - A lightweight color pallete toolkit

I love color tools of all kinds, but one simple one that I keep coming back to these days is colorcombos.com. Specifically, I really like their Combo Testing tool.

The concept is really simple, you can easily load up a bunch of colors side by side for comparison:

What I've found is that the tool works well for capturing and sharing different color pallets. Here are some specific cases I've been using it for:

  • At the start of a project I'll capture all design colors with a tool, and then paste the link the color scheme in my main CSS file. That way, I won't forget which shade of blue the designer actually called for.
  • I can work up a quick pallet of similar colors and send it off to a customer to tell me which one they want. This way, the client can ask to make the text "blue" and I can respond with a set of choices, to which they can tell me the exact blue they want to use.
  • For technical clients of mine, I can have them use the tool directly to work up the specific color selections they had in mind and send me a link to them

As you can tell, I'm a big fan of the site. That's not to say that there aren't a few things I'd love to see tweaked about it. First, it would be nice if under the get link section they actually showed you the plain URL as an option. And secondly, it would be nice if the instructions could be a little more user friendly, so that not technical users could also use the tool to tell me which colors they wanted go with.

Still, even with those areas of improvement, it's a simple and powerful tool that makes something nice and visual like colors much easier to communicate about.

Another Reason To Use PhoneFusion Voice Mail

Some time ago I wrote about how PhoneFusion voice mail, was voice mail done right. Well, today I found another reason I'm glad I depend on them.

At about 8:30am I reached for my cell phone to call a client. Hmmm, it wasn't at my desk. Nor was it upstairs attached to its charger. In fact, it was nowhere to be found. D'oh - I had given it to Shira to hold on to it while I went for a run in the rain. Of course I never asked for it back, and so it's safely sitting in her purse at her office.

I don't get a whole lot of calls, but the ones I do get are from clients and are more often than not critical. So what the heck was I going to do? Well, it occurred to me that I could just log into PhoneFusion.com and see any new voice mail there.

And sure enough, the strategy works perfectly. I can not only get to new voice mails, but can also listen to ones that have already been downloaded to my phone.

A Bonus For Forgetting My Phone

While poking around the PhoneFusion site I realized they offer a free notification service. I dropped in my e-mail address, and called my cell phone. Sure enough, a minute later I got e-mail telling me the voice mail had been received and even included the .wav file attached to the message.

This is actually an especially useful feature. It means a couple of things:

  1. I can archive and tag voice mails clients leave me right along with their e-mail messages. I'm a huge fan of having a paper trail for everything I do, and having voice mail e-mails will contribute to this.
  2. I can easily pickup messages while traveling internationally, when my cell phone is normally off
  3. I can pickup messages when I may have internet access, but no cell signal or access - like in some rural areas or when my cell phone battery dies.

Boy am I glad I forgot to take back my cell phone, look at what I got to learn today.

Tuesday, October 27, 2009

USB to SD Card Adapter - The Geek Swiss Army Knife of Computer

It's hard to believe that I can get so excited about a tiny SD card to USB adapter, but it's true. I love this little chunk of plastic.

Instead of carrying around a regular USB thumb drive, I've gone to carry around one of these adapters with an 4Gig SD card in it. Combine this with the fact that my camera takes SD cards, and you can appreciate why this device is so handy. Consider:

  • It's dirt cheap - costing about $3.00. I just lost the cap for mine, and bought two more to replace it.
  • It's tiny and durable, so I can carry it in my pocket without worry
  • It works great as replacement for the camera cable that inevitably I don't have with me when I want to transfer photos
  • I can pop the SD card out of that I normally use as a thumb drive, and use it as a backup to my camera's SD card, should it fail or fill up.
  • It's extensible - I can swap in a new, larger, SD card whenever I, effectively making it a larger thumb drive

Why can't all computer hardware be this simple and versatile?

Health Checkpoint

So I had a regular o'l physical today, and of course the doctor asked me about my history. Is my tetanus up to date? When did I last have my cholesterol checked? Of course, I kind of hemmed and hawed, not really knowing the answers.

So, this time I figure I'll log that info, and in another few years when I look back, I'll be able to refer here. Sound like a plan, eh?

  • Got tetanus shot
  • Did blood work, including fasting cholesterol
  • Blood pressure was normal (110/80 - I think)
  • Physical exam was normal
  • BMI was 22.5 - which was in the normal range

Maybe it's time to start using Google Health?

Well, it sure was nice getting a clean bill of health.

Monday, October 26, 2009

Adventures in babysitting, NJ edition

Yesterday, we drove 4 hours to Lakewood, NJ. We then spent 4 hours in Lakewood, NJ. After that, we turned around, and drove 4 hours home. This doesn't sound very pleasant (or sane), does it? And yet, to get 4 hours to see The Twins (and Elana and Shmuel), it was more than worth it. Throw in Ben's happiness at getting a kosher dinner out of the deal, and it was a superb evening.

We hadn't seen the twins in 3 months, and boy have they gotten big. As you'll see from the photos, they are getting to be real people! We were slightly limited in what we could do with them, as the park we were going to walk around with closed 2 minutes before we got there, and we were lacking a home base other than Elana's minivan, but we made the most of it, and all had a great time.

The best part is, we're going to see everyone again in 2 weeks when we all celebrate Grandpa Irv's 90th birthday!

And now, the photos, that you knew were coming!

Friday, October 23, 2009

Radio Station Of The Day: Cinemix

I was poking around Shoutcast and found Cinemix - a station that plays movie soundtracks (or, I suppose if you want to sound highfalutin you'd say "film scores").

There's just something invigorating about programming to the theme of Indian Jones.

Give it a listen

Health Care Stories Without An Agenda

When you talk about something as complicated as health care, it makes sense that we try to simplify matters by trying to find someone, anyone, to blame. It's the insurance companies fault; it's government's fault; it's the doctor's fault; it's the lawyer's faults; and on and on. Of course it's not that simple, and that's why I really enjoyed this week's This American Life episode which discussed various health care topics.

The stories covered the perspectives of doctors, insurance companies, patients, drug makers and more - and did a good job shedding light on why each is acting the way they are, and how each is not intending to act evil. The same goes for the story on how our health care system came together - it's not that it's godo or bad (OK, it's bad), but it just is.

Seriously, give it a listen. And if you miss out on the free download period you can get the story from NPR here, here and here (the stories are a co-production of This American life and Planet Money).

My spirits weren't exactly lifted from listening to these broadcasts - but I do feel more educated, and have a better appreciation for the complexity of the problem.

Thursday, October 22, 2009

Add a "Who Links To Me Widget" in Blogger

Some time ago, I added a feed to my blog that showed what comments had recently been posted. It was a nice addition because: (1) it shows visitors what people are chatting about and (2) it gives me a simple way to check on comments visitors have left.

Turns out, you can do the same thing with external links to your blog. That is, add a feed to your site of articles from people who mention your blog in their post. Here's how you add this feed using Blogger:

Step 1: Search for linking sites. Head over to blogsearch.google.com and search for:

link:<yoursite.blogspot.com>

In my case, I searched for:

link:benjisimon.blogspot.com

Step 2: Grab the RSS feed URL. You'll want to copy and paste the URL marked RSS. Mine happens to be:

http://blogsearch.google.com/blogsearch_feeds?hl=en&q=link:benjisimon.blogspot.com&ie=utf-8&num=10&output=rss

Step 3: Add a new Feed Gadget to your blog. Log into your blogger account and click on Layout » Add Gadget. Then select the Feed gadget. Paste the URL you've copied from Step 2. Customize the title of the gadget and save it.

That should do it - now, whenever your visitors check out your site they'll see other blogs that are linking to you. Slick, eh?

Etz Hayim Rennovations Take Center Stage

Our shul is undergoing major renovations - when it's all said and done, the building should be completely revamped. Up to know though, they've been working mostly in the basement and other out of the way places. Well, not anymore - today at minyan I was greeted with a temporary wall in the main sanctuary where the bimah used to be.

I have to say, it's pretty dang sweet to see them moving full speed ahead with these changes.

Sure, it's an inconvenience - but a minor one, all things considered. It actually reminded me of a classic story attributed to Dr. Velvl Greene:

Decades ago, an imaginative Jewish microbiologist named Dr. Velvl Green told a story of a world where some irresponsible nuclear testing has initiated a meltdown of the polar cap. The entire world has three weeks before all inhabitable land will be submerged by the oceans. Muslims gather in Mecca, Catholics in Rome, and atheists just party. Meanwhile, Jews gather to hear the wise words of a revered rabbi. After concluding the afternoon prayer, the rabbi turns to the microphones and announces, "Jews! We have three weeks to learn how to live under water!"

So, nu, we'll learn to live with a little dust and noise while the project is going on.

Looking for a Minyan in the Pentagon/DC area?

I guess I should also insert a plug here: if you're in the DC area, Etz Hayim (get directions) has a small minyan that meets every Thursday at 7:00am (and 9:30am on federal holidays). We're just minutes from the Pentagon and Crystal City, so it shouldn't be much of a schlep. We don't always hit 10 people, so if you're in the area, you'd make a real impact by joining us. All are welcome!

Wednesday, October 21, 2009

Skyped In Cuteness

Tonight we got a super treat - we got to Skype with the twins. While they weren't all that talkative, they were quite active. Both Dovid and Chana are figuring out how to crawl and haven't quite mastered it yet. Chana's more focused on sitting and Dovid seems to move backwards no matter how hard he tries to move forward.

What wonderful technology that allows us to get a glimpse into these fun moments from so far away. It's been way too long since we've seen the twins, and we can't wait to see them do all their new tricks in person.

Blogging at 55Mph

I have yet to get my new T-Mobile USB WebConnect Stick to work with my laptop. But, it seamlessly worked with Shira's. And here I am, blogging away while she's driving.

I have to say, I'm completely impressed. The speed of the connection of remarkably fast - and I've been able to use it for web surfing and ssh without a hitch.

The service even detects when you're near a compatible (read: Free) hotspot, and asks if you want to switch over to it. This is a clever way to reduce the usage of limited cellular bandwidth.

If I can get this working with my laptop I'm going to be one immensely satisfied customer.

Recovery Through Retrofit - Smarter Government In Action?

I think the Recovery Through Retrofit is a really slick idea. You can watch an introduction of it here. But, to briefly summarize:

  • The government is going to derive standards for energy efficiency of homes (like they do for cars and appliances)
  • Neighborhoods are going to be encouraged to band together to have their homes upgraded for energy efficiency
  • The upgrades will be paid for by the individuals via financing. The efficiency standards should insure that more money saved on a regular basis will be more than that which is spent in financing charges
  • Local small businesses will do the the retrofitting, hiring and training as needed

From a green perspective, the outcome is equivalent to getting millions of cars off of the road; from a business perspective it's a boom to local entrepreneurs; from a financial perspective it's a stimulus for both the home owner and the community in general. And it's all done not through some big faceless government program, but through neighbors working together.

Obama has talked about how we don't need bigger government or smaller government - we need smarter government. And this kind of program strikes me as just that. I sure hope they can pull this one off.

Read more about it here.

Deeds v. McDonnell - A Debate That Didn't Settle Much

The Virginia Gubernatorial Election is fast approaching, and I really haven't made up my mind on the question of who to vote for. I was pleased to see that C-SPAN has covered one of the debates between the candidates. I was hoping this would shed some light on who to pick. Alas, it didn't.

Let's see...

  • Transportation wise, I couldn't decipher what each was actually promising. Both seem to have a plan, and both seem clear that the plan of their opponent won't work.
  • Socially, they both align themselves with Obama - mentioning that they agree with the social policies he has put forth
  • In terms of health care, both candidates are against the public option, and if the states get to decide whether to have one or not, both will vote against it
  • Both are against the federal cap and trade plan
  • Neither had a good answer as to how they are going to fund all the cool initiatives they want to offer, other than to providing the usual cliche responses
  • Both spoke reasonably well, taking what appeared to be about the same number of swipes at each other

In some ways, I'm pleased to see that these guys aren't just carrying the national Democrat and Republican debating points to the local level. That shows to me that they are doing some independent thinking. On other hand, I do wish there was a clearer distinction between them to base a choice on.

Oh well. Watch the debate and see what I mean.

Have any suggestions for telling these guys apart?

Tuesday, October 20, 2009

What Non-Partisian Politics Should Look Like

You've really got to check out George H. Bush and Barack Obama talking about the importance of service.

Here are two political heavyweights, and rather than tearing each other down, they're complimenting each other. It's really an inspiring sight to see. Personally, I think we need more of this (along with plenty of healthy debate).

Unfortunately, I can't find an embeddable version of their speeches - so you'll have to click here.

Tool Of The Day: PHP Simple HTML DOM Parser

I needed to update some code that was responsible for tweaking the output of HTML content. What no doubt started off as a few quick regular expression replacements turned into a bowl of spaghetti code.

Today, I was lucky enough to find the PHP Simple HTML DOM Parser, which allowed me to untangle the mess. Rather than working with HTML as a string, it does as the name suggests and allows you to treat it as a DOM tree. You can access the elements using CSS selectors like you would in jquery.

The API is simple, and the underlying parser is tolerant of HTML errors.

If you're working with PHP and HTML this is a must have tool in your toolbox.

Monday, October 19, 2009

They're Growing Up

One of the perks of this weekend was getting to see some good friends who happen to be in the NY area. We had a lot of fun with them at brunch - their daughters are truly precious. My, have they grown since we last saw them!

As you can tell, Ben had a good time getting educated about cell phones from the girls and learned about a new kids show, Max and Ruby. Shira and the girls had a fun time (not shown) experimenting with buoyancy and other science projects that could be done with everyday diner equipment.

We can't wait to see them again -- maybe they'll come visit DC and we can take them to the Air and Space Museum (hint, hint!).

Internet Explorer 8 - 1 Click JavaScript Debugging

I was down right elated today when I learned that by simply hitting F12 in IE8, I could get access to a whole bunch of developer tools.

For my needs, all I wanted was a JavaScript console - which the dev tools provided a nice version of. I was able to click a button and be jumped right to the JavaScript error in question.

There appear to be other JavaScript, CSS and HTML goodies in this toolset too.

I think I just found a reason for upgrading my main laptop to IE8. Buh-bye IE7.

Rejoicing With Rachel and Ralph

Mazel Tov to Rachel and Ralph on their most wonderful wedding! We had an amazing time last night as we celebrated the occasion. Their smiles alone lit up the whole room.

It's been a long time coming (OK, enough Ralph and Rachel took forever to get married jokes...), so I'm glad we could finally make it official.

Ralph and Rachel, we wish you guys happiness and joy as you continue your journey together.

Here are some photos from the big event.

Saturday, October 17, 2009

Ralph and Rachel Rehearse

Shira and I are in New York City for my cousin Rachel's wedding, and the festivities got under way tonight with the rehearsal dinner. And boy, was it an awesome start to the weekend!

It was such a pleasure seeing the whole fam, and we're all so excited for Ralph and Rachel. Mazel Tov, guys, we can't wait for it to be official tomorrow.

Here are some photos from tonight:

Friday, October 16, 2009

Broadband Frustrations

I had this brilliant plan to make my road trip to New York City this weekend a productive one: I would buy T-mobile's webConnect laptop stick in the morning and use it to make the 4 hours in the car Net connected.

Surprisingly, I was able to buy the device this morning with minimal fuss. I mean, the transaction did take an hour and a half (closing on house was easier), but to T-mobile's credit they did keep all the discounts on my account and other goodies.

I was promised the device was "Plug n' Play" and would be ready to use in 15 minutes.

We got on the road, and I decided to plug the sucker in. The install process was fine, and a reboot later I was to connect to the internet while cruising up route 95.

It was a big no-go. I got some error about the connection being in use.

I called my buddies at T-mo tech support. They were kind enough to fix that error. But now I get error 633: the modem (or other connecting device) is already in use or not configured properly.

Two hours of fiddling later, the connection still doesn't work and work that I could have done on my laptop unconnected remains incomplete.

Ugh.

T-mobile tells me I need to give them 24 hours to let the service get fully in sync with my account and then I should call them back.

Argh. What a pain.

Thursday, October 15, 2009

ShockingBarack - Road Trip Marketing

Seriously, what's not to like about the Shocking Barack project? They've got slick technology on their site, an underdog marketing positioning, a road trip adventure, an entrepreneurial spirit and a green message. Heck, even the domain name is cool. Oh, and they've got motorcycles.

OK, so what are they about?

Our plan is to retrace the route of the automotive CEOs who went to Washington DC asking for government loans. But instead of looking for aid, we'd like to present President Obama with a homegrown solution to the transportation crisis. And instead of flying in a corporate jet, we're riding Brammo Enertia powercycles. We're just a couple of guys who work for Brammo, but we want to show that there's a better way to get from Point A to Point B.

That's right, from Detroit to DC be electric motorcycle.

Naturally, you can follow their journey like via twitter or on their website.

Good luck guys!

Thanks AdRants.

Jewish Point-of-View YouTube Series

Curious about what the Jewish faith may have to say about a particular topic? Check out the Jewish POV series on YouTube. I just stumbled upon it, and it seems like it's filled with solid info.

The videos are a bit on the basic side (and still far better than what I could do) - but don't let that fool you, the information is great.

For example, here's the Jewish take on Original Sin:

Wednesday, October 14, 2009

My Latest Todo List Strategy

So here's how I've been tracking and managing tasks lately. I toss it out there in case it inspires anyone in their pursuit of workflow-sanity. I'd also love to hear how what you're doing to manage tasks, as I'm always looking to improve my system (if you can call what I'm doing below a system).

Step 1: Maintain an online todo list

These days, I'm using a personal wiki to keep track of my todo list. I like that it's online and accessible from any device with a web browser. A wiki is also handy because I can create additional pages to track specific details about tasks. You can set one of these up at pbwiki.com, or, you can take a lighter-weight approach and use a writeboard. I usually organize tasks by day of the week, or other major headings, like so:

I find organizing tasks by the day of the week allows me to plan a couple days ahead. Tasks that have to be done after the week time frame either go in a special category on the todo list, or get added to my Google Calendar.

You'll notice some of the tasks have gmail links. These are URLs to the specific e-mail message that contains details of the task. I've found these links to be invaluable, as they allow me to keep the todo list relatively short.

Step 2: Planning the day

At the beginning of each day, I write out the tasks I'm going to work on in a notepad (one with real paper, not the computer kind) and go through the exercise of associating times with when each tasks will end. So, I might have a list like so:

  - Finish reading e-mail - 7:30am
  - Check facebook, respond to personal e-mail - 8:00am
  - Work on foo.com, adding new features  - 11:00am
  - Lunch - 11:45am
  - Return calls from prospects - 1:30pm
  - Write up proposal for bar.com - 3:00pm
  - Blog - 3:30pm
  - Make more tweaks to zap.com - 4:30pm

I try to be as detailed as possible, attempting to account for as much of my day as I can.

As you can imagine, within about 2 hours into the day, my "schedule" is usually shot. But still, I've found it to be a beneficial exercise. The schedule serves as a sort of mental boost to show me that I can in fact accomplish my day. Rather than stressing about how I'm going to get it done, I can just focus on doing it.

Whenever I complete a task, I get the joy of vigorously scratching it out with a pen.

If my day gets really off track, I may re-work another schedule. It's all done in a little notepad, and takes just a few seconds to throw together.

And that's pretty much all there is to it.

So now it's your turn - how do you manage your todo list?

Anderson Cooper's Travel Tips

I found this article, 28 things I wish I’d known before I started traveling by Anderson Cooper to be really informative.

Here's a little sample:

23. Be careful with all hand gestures, including the “thumbs-up” sign and the “a-OK” sign. Both of these are highly provocative in some places.

24. Never make promises you don’t intend to keep. Don’t tell vendors you’ll buy from them tomorrow, don’t offer to help anyone visit your country, don’t say you’ll write to someone later if you won’t really do it, and so on.

It's a nice mix of generic and specific things to remember about traveling internationally.

Update: Thanks to a friend on Facebook (thanks Hayden!), I've learned that wasn't written by Anderson Cooper, but was actually authored by Chris Guillebeau. You can read the article here. Chris's site appears to be a wonderful collection of articles, which I can see I'm going to really enjoy reading. You should check it out.

Tuesday, October 13, 2009

Political Chatter Worth Your Attention

Here's some political chatter from around the net I've found to be worth my time:

From the Left: Rachel Maddow explains Obama's Nobel Peace Prize. I'm not sure I completely buy her arguments, but I certainly found them educational and insighful.

From the Right: David Brooks talks about the Baucus Bill. He raises some excellent points, and provides a conservative opinion that goes beyond the usual outrageous claims of government takeover of health care. He even laments the fact that what we're going to end up with is Health Insurance Reform instead of Health Care Reform. That's a bold and positive stance to take.

From the funny: Jon Stewart takes CNN to task over their fact checking. While the clip (as you can see below) is funny stuff, I did find an interesting insight between the wisecracks.

One of the fundamental problems with cable news is that they have too much time to fill - they've got to find the next controversy to put in front of viewers, and they've got to do it now. They've got to bring on anyone and everyone who in some way might be an expert, to beat a topic absolutely to death. And because they've got to do it all day and night, the cycle just never takes a breath.

Jon brings up an excellent point: if you've got all this time, why can't you use it to have a complete and comprehensive debate. Why can't they use it to not just allow every opinion to be aired, but also to be thoroughly fact checked and refuted on air.

We can't put the genie back in the bottle on 24 hour news - it's a fact of life. But, perhaps we could demand more from our news stations, in terms of the quality of news prestented.

Your Big Idea - To share or not to share, that is the question

One common question I get asked is: should I share my software ideas with others? There's no one-size-fits-all answer this question, but I do have an opinion I regularly share with customers.

NOTE: Curious about how discussing your idea with others impacts patents and other legal matters? Make sure to discuss this with a qualified attorney, don't just take the advice below.

To see if it's smart to share your idea let's consider what the different outcomes from doing so are. Broadly, they are:

  1. You'll get feedback
  2. The person you tell may steal your idea and become a competitor
  3. The person you tell may consider stealing your idea, but won't.

From my experience option #1 is most likely, option #2 is most feared and option #3 is most often overlooked.

Let's look a little closer at these options.

Option #3 - A person you tell attempts your idea, but fails. That's actually a pretty reasonable outcome. Why? Because ideas are easy, it's doing that's hard. Your idea is just the start: you need to raise money to fund it, hire a team to build it, tweak it when flaws in it are discovered, and do about a million other things with it before it turns into a business. It takes real passion and hard work to execute an idea, this is something you'll have and that a casual listener won't.

Option #2 - A person rips your idea off. Knowing that you contributed to the competition is a painful thought. But here's the thing, no business can expect to survive if it can't live with competition. If that's your plan - to be the only the only choice in the marketplace - you've got a serious issue. And don't think being first to market is the solution either. Remember, the iPod wasn't the first mp3 player to market, but that didn't stop it from crushing the competition. Love it or hate it, competition is a fact of life.

Option #1 - Getting feedback. OK, feedback isn't always the gold mine it may appear to be. Chances are, if you tell your mom your idea she'll say it's great, even if it's not. So, yes, you need to calibrate the feedback you get. Still, feedback, both positive and negative, can be wonderfully helpful. And you may get especially appreciated feedback like: "hey, I love the idea, where can I send the check to support the idea?"

So, should you share your ideas with others? When I compare the chances of getting useful feedback with the unlikelihood of earning a competitor, the feedback side nearly always wins out. So I say, share a way.

One final word of caution though: before you share anything, you should identify any parts of your business that should remain secret, and keep them that way. Have an especially cheap source of labor? Or a software app that can do the same job someone else does in an a tenth of the time? Good, that doesn't need to be shared. Keep it that way.

Update: One of my friends on facebook (thanks Smitty!) mentioned an important legal document: the NDA or non-disclosure agreement. These are one of the easiest ways to protect your idea, and I recommend using them (though I'm not a lawyer). I still think the above advice is relevant because: (a) how easy are you going to be able to enforce an NDA? And (b) there may be times when an NDA may not be easy to get signed (think: talking to you buddies at a bar, or your mom). But still, if you can get one signed, by all means, do so.

A Life Is Fragile Moment

A few days ago Shira and I were shocked and deeply saddened to learn that one of our healthy, active, 30 year old, friends had a stroke. Yes, you read that right - a stroke. He woke up in the morning and apparently was struggling to do basic cognitive tasks, like setting the alarm and recalling his schedule of meetings.

He ended up leaving the office and heading to the doctor more out of frustration than anything else. By the afternoon, they had confirmed he had a stroke.

There was apparently no paralysis involved, so he didn't experience some of the more common signs of stroke, such as weakness on one side.

But even if he had, who would have imagined that this healthy guy could be having a stroke?

Our friend is now on the road to recovery, and they expect him to make a fully recovery. It's not going to be an easy path, but I know that his family, friends and faith our strong, and if anyone can beat this, it's him.

The lessons from this episode are the ones you'd expect:

  • It's important to learn the signs of a stroke, such as: trouble walking, weakness on one side, trouble seeing and trouble speaking. And understand that stroke doesn't discriminate based on age, gender or any other criteria.
  • I know its cliche, but it has to be said: appreciate that every day, every minute, every second is a gift, and that there are no guarantees in life. Make every moment count, because, when it comes down to it, life is incredibly fragile.

My urge to take action found me the National Stroke Association and their donation form.

Friday, October 09, 2009

Feature Of The Day: The WordPress Shortcode API

I'm officially a huge fan of the WordPress Shortcode API. A short code is just what the name suggests - some abbreviated phrase that expands to a bunch of HTML. A classic example is the video plugin that allows you to say:

 [youtube id="Yu_moia-oVI"]

Versus having to enter in:

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/KT--CsBh5TM&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KT--CsBh5TM&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

Short codes have been around in WordPress forever, and they've always been fairly easy to write. But the Shortcode API, makes them even easier to author, reduces chances you'll have to reinvent the wheel, and allows all your short codes to be consistent.

If you're thinking about learning how to author WordPress plugins, using the Shortcode API is an excellent place to start.

As a bonus, I learned about the extract function, which takes an associative array and ads them to your local namespace. So you can say:

 extract(array('foo' => 100, 'bar' => 'Hello World'));
 echo "$foo//$bar";

This is definitely a powerful function - it could either be an excellent way to do destructuring, or a terrific way to include a massive security hole in your application. Either way, it's big.

Thursday, October 08, 2009

Parallelizing MapReduce

I was curious how hard it would be to take the MapReduce example I posted earlier and have it operate in parallel. Turns out, thanks to Google, not very hard at all.

First, I needed some sort of for-each function that operated in parallel. I could write my own, but instead, was fortunate enough to find make-pool-for-each, which does exactly what I was looking for.

I then used an existing hashtable implementation, and was basically there. Here's what my code looks like:

#lang scheme
;;
;; A trivial implementation of MapReduce
;; Inspired by: http://programmingpraxis.com/2009/10/06/mapreduce/
;; Parallelized by: http://groups.google.com/group/plt-scheme/browse_thread/thread/8fe42711304e831f?pli=1
;;
(require "parallel.ss")

(define mapper/c (-> any/c any/c))
(define reducer/c (-> any/c any/c any/c any/c))

(provide/contract
 [map-reduce-worker-pool-size (parameter/c number?)]
 [map-reduce (-> mapper/c reducer/c list? hash?)])

(define map-reduce-worker-pool-size (make-parameter 100))

(define (map-reduce mapper reducer items)
  (let ([p-for-each (make-pool-for-each (map-reduce-worker-pool-size))]
        [store (make-hash)])
    (p-for-each (lambda (item)
                  (let-values ([(k v) (mapper item)])
                    (hash-update! store k (lambda (found)
                                            (reducer k found v))
                                  v)))
                items)
    store))
    

And here's an example to show it works:

(define (stall)
  (sleep (random 5)))

;;
;; XXX - I really need to add in some timing code that shows the time
;; taken for this example is (max stall1 stall2 ...) and not
;; (+ stall1 stall2 ...)
;;
(define (example)
  (map-reduce (lambda (x) (stall) (values x 1))
              (lambda (k v1 v2) (+ v1 v2))
              (string->list "bananana")))
              
(example)

I think this is also a good example of the power of parameters. For the above code I needed a value for the pool size. I didn't want to have it explicitly passed in, as I wanted that hidden from the average user. I didn't want to use a global variable, as that's a programming nightmare. And finally, I didn't want to leave it non-configurable. By using a parameter, the interested programmer can set the pool size at the start of their application or for an individual call, all without worrying about global-variable headaches.

I wonder what it would take to extend this to operate over the network. Hmm....

It's Electric

So, I'm listening to this podcast about the power of books and somehow we end up on the topic of growing up on the prairie. Specifically, does interviewee recall when she first got electricity installed? The following excerpt is taken from 49:44 of that recording:

Narrator: Do you remember when you first got electricity and water?

Interviewee: Oh, it was just lovely...electricity came in '48...finally the lines were all in and they were all hooked up we were just waiting for the major flow of energy. And then the electricity was on. And I remember that night when it got dark, I remember my father and mother and my sister and one of my older brothers we stood there and looked because suddenly it wasn't a black country anymore. We could see our neighbors lights. It made it seem a lot less lonesome; a lot less isolated.

Wow. In the age of cell phones, twitter and 24hr cable news, it's hard to believe that not too long ago we were literally in the dark. And then, one day, just like that, it was light.

I'm not sure what lesson is out of all this, but I'm impressed. I guess it's kind of like that moment I blogged about a while back.

Wednesday, October 07, 2009

Humor in a 178x178 pixel package

I just love browsing through snorgtees.com - a site full of clever t-shirts. It's pretty remarkable to think how much can be communicated in a single t-shirt, or on the web, a 178x178 preview image

With the size constraints the pictures are essentially visual poetry. Clever stuff.

Really Understanding the MapReduce Model

If you're a programmer, you really should understand the MapReduce model. On some level, it's a simple model, but it's also remarkably powerful:

Programs written in [MapReduce] functional style are automatically parallelized and executed on a large cluster of commodity machines. The run-time system takes care of the details of partitioning the input data, scheduling the program's execution across a set of machines, handling machine failures, and managing the required inter-machine communication. This allows programmers without any experience with parallel and distributed systems to easily utilize the resources of a large distributed system.

Our implementation of MapReduce runs on a large cluster of commodity machines and is highly scalable: a typical MapReduce computation processes many terabytes of data on thousands of machines. Programmers find the system easy to use: hundreds of MapReduce programs have been implemented and upwards of one thousand MapReduce jobs are executed on Google's clusters every day.

Thankfully, ProgrammingPraxis has taken up the challenge of coding a tiny MapReduce implementation, and have made the code available here. It's a wonderful read, and helps turn an abstract concept into something concrete (with useful examples, too).

It would be a fun little challenge to write a MapReduce implementation that also made use of message passing and threads so that it could be distributed among machines.

Gotcha Of The Day: Diagnosing PHP Mail_Queue Errors

I find the PEAR Mail_Queue package to be an effective way to send out hundreds of messages from PHP. It works just like you'd want it to: your code just adds messages to the queue, and then a standard cron job like the code below runs and processes the queue:

 $queue = the_mail_queue(); // properly create the mail queue
 $queue->sendMailsInQueue(200);

This package is especially handy for testing out new code, as you can disable the cron job that empties the queue, run the new code, and then review the mail queue manually for errors and malformed messages.

I love that mail queue is so transparently stored in the database. It means that I can easily examine and tweak the mail queue without using any special tools. A few trivial SQL statements are all it takes.

My problem this morning was that the updated code I wrote added messages to the queue that looked perfect, yet the sending process was failing. The messages weren't leaving the queue, and the retry count was maxing out at 25.

I needed to find a way to diagnose the specific error that was causing these messages to fail. Turns out, this was easy to do - I just needed to use the >sendMailById function. This function does exactly the same thing as emptying the queue, but: (a) operates on a single message and (b) returns any errors it may have. I tweaked the above script to say:

$queue = the_mail_queue();
$xx = $queue->sendMailById(665248);
var_dump($xx);

And sure enough, I got a detailed message dumped to my screen.

The problem? I had chosen a From: address for these messages that didn't exist, and then message was failing as a result. I deleted the queue, and re-ran my code. Now when I attempted to send the messages they went through without a hitch.

Tuesday, October 06, 2009

A Facebook Security Low Point, or Joke?

OK, I understand that random groups on Facebook are a fun fact of life. In a lot of ways, they're really quite fun to surf around.

But, explain this one: I got in the hot tub w/ my phone in my pocket...now I need ur number :(.

The premise: this poor fellow got into a hot tub and lost all the phone numbers in his phone (man, that must bite!). So now, he's asked people to post their phone numbers so he can follow up with them.

And here's the thing - people do!

Huh? Is this a joke? Or, are these people so confused about Facebook security that they don't realize this information is public? Or do these people really want me to know what their phone numbers are?

And here's the thing - after a few minutes of looking, I found two groups with the same purpose, and yes, still more phone numbers.

If I were Facebook, I'd take this as a hint that their doing something wrong. Folks are expecting a level of privacy that you're not providing by default.

Or, maybe, I'm just missing the joke...

Monday, October 05, 2009

Walking Tall, A Lesson From Grandma

There's not a lot of good things one can say about going to a funeral. One could argue, though, that one nice thing about funerals is the dress code. I mean really, what could be easier? Wear a dark suit. Poof, you're done. How can you mess that up?

This morning, as I parked my car at Dulles Airport and walked to my US Air flight, which would deliver me to Los Angeles, and my grandmother's funeral, I was noting just how nicely everything was coming together. My grandmother had passed away on Friday, and yet Shira had managed to get me a non-stop ticket (at an amazing price) to California with almost zero notice.

As I walked to the terminal though, I noticed something was off. Uh oh. Oh dear. I checked the black suit I was wearing. Oh my. It had a satin strip running down the leg. Oh crap. I wasn't wearing my dark suit at all, but my tuxedo. Crap, crap, crap. How does one make this mistake? Seriously. I'm going to show up at my grandmother's funeral wearing a frigg'in tuxedo. Argh. Who knows, maybe she would have wanted it to be black tie? Don't think so.

And you know what my grandmother would have said to all this? What's the big deal? Who cares what other people think. Be yourself. Be proud to be yourself. And if I may be so bold, screw the rest. This, after all, was the woman who wore the famous umbrella hat - which managed to embarrass not only us grandchildren, by my parents - who to my knowledge were impervious to that emotion.

Yeah, my grandmother really wouldn't see the big deal in all this. She was a confident, reliant and tough lady - not usually qualities you associate with a 4ft something grandma. But, that was her. And that's how she taught me to be.

So I wear this tux proudly, and I wear it for you Grandma. Here's to walking tall while doing our own thing, regardless of what the rules say.

Friday, October 02, 2009

DC Activity Hack

With my mother-in-law in town, we wanted to do something fun around DC, but (as usual) weren't quite sure what to do. While we ended up finding a fun activity, I thought my suggestion for what we do had enough merit to get blogged about.

Here's what I suggested:

  1. Visit the What's New section of the Smithsonian website
  2. Have each person in the group choose one exhibit that interests them - and there's no doubling up, everyone has to contribute a single exhibit they'd like to see.
  3. Print out a hard copy of the What's New Page, and mark down everyone's suggestions
  4. Head into DC, and as a group, visit each selection in turn.

If all goes to plan, you'll get a unique taste of what the Smithsonian has to offer, and you may even learn something about your group members.

Throw in stopping for some grub, and I think you've got a fun day with plenty of fresh sites to see.

The National Air And Space Museum - Still A Blast

Sure, I've been to the National Air & Space Museum Steven F. Udvar-Hazy Center before, but every time I go I really enjoy myself. With Shira's mom and boyfriend in town we needed something fun to do in the area, and so the Air and Space museum came up. When we learned that Shira's Mom's Boyfriend hadn't been - well, that sealed the deal.

While I've been there before, this was the first time I've made it up to the observation deck and the first time we watched an imax there.

The observation deck was nice, though nothing beats watching planes take off and land at Gravelly Point next to Reagan National Airport.

On the other hand, the Imax completely blew away my expectations. The movie we saw was Figher Pilot: Operation Red Flag, and it was genuinely impressive. The photography was amazing, and so was the action. OK, the story got a bit cheesy - but still, impressive stuff.

As always, just wandering among the planes was a thrill.

Thursday, October 01, 2009

DC United In Action

Last night I had a first with my buddy Greg - seeing the local Major League Soccer team, DC United, play. They took on San Juan Jabloteh, and kicked their butts with a score of 5-1.

Last night didn't exactly undo the stereotype that soccer isn't that popular in the US. The match was held at RFK stadium, which is now quite run down, and as Greg noted, they didn't even have the front gate open. The attendance may have been in the low thousands, but given the size of the stadium felt in the hundreds.

With that said, though, I did have an excellent time. Greg promised me 90 minutes of standing on my feet cheering and singing, and that's exactly what I did. We were just a few rows from the field, and was no doubt closer to professional athletes at play than I've been in my life.

All in all, it's a DC experience I highly recommend. Here are a few photos I snapped:


OK, to be fair I shot these photos below about 30 minutes before the game, that is before the place "filled" up.

The soccer was actually quite impressive to watch. It's even more impressive when you think that these guys were running more or less continuously for 90 minutes. Try that yourself, and see how you do.

Greg was kind enough to bring me an extra jersey to where. What a difference it made to be dressed for the part!

Whoooo! We won!!!!