Friday, January 29, 2010

A Meal To Sink Your Gums Into

We just finished a Well Baby Visit and were given the go ahead to give the boy solid food. Whooo!

We bought a variety of items for him to experiment with - from jarred food, to raw fruits and veggies - so I'm sure we're all in for an adventure.

Anyone have any first food suggestions?

Thursday, January 28, 2010

Running IE6 Under Windows 7 - Easier Than I Thought

I needed to test out a site on the dread Internet Explorer 6, and none of my laptops were old enough to do this. Back in the XP days, you could run multiple version of IE on your computer without an issue. With Vista, and Windows 7, this capability seemed lost.

Though, I learned this actually isn't the case with Windows 7.

Turns out, on the Start Menu of Windows 7 is an option to run Windows XP Mode. The first time you run it, you'll be asked to download two files here. After you've installed both files, running this shortcut kicks off a virtual PC.

After a fairly lengthy first boot, the PC comes and sure enough, by default, it's running IE6. Specifically, 6.0.2900.5522.xpsp_sp3_gdr.090206-1234. Got that?

So, IE6 testing on Windows 7 isn't the headache I thought it would be. Good to know.

Essential Android Apps

After I did my factory reset of my G1, I promised myself I'd be more selective about what apps I installed. The G1 is now an underpowered phone, and the surest way to make it even slower is to install lots of apps, some of which may be poorly written when it comes to conserving resources.

So here it is, my list of essential apps. I plan to keep it up to date as I install and uninstall items, keeping the list as lean as possible.

The main test here is: do I actually use the app. Sure, the Draw application was cool - but in the nearly 1 year I had it, I never once used it for anything remotely practical. Same goes for the compass, and most of the other apps I had installed on the phone.

Of course, what I really need is the new Nexus (or whatever comes after that) - which no doubt has a much faster processor, and can handle running whatever I throw at it. Until then, I'm going to try the frugal app lifestyle.

Wednesday, January 27, 2010

Using Textile for HTML E-mail Generation

These days, HTML e-mail is the norm for PHP apps I develop - which means I'm using PHPMailer instead of the old fashion built-in mail() function call. PHPMailer makes it easy to send HTML messages, you just set the Body property on the mailer object, and tell it that is in fact HTML:

 $mailer = new PHPMailer();
 $mailer->Body = "...HTML Formatted Message...";

All easy enough. Though, I was wondering if there was a more concise way to manage the HTML messages themselves. While playing with Perch, I re-remembered the joy of using Textile - a lightweight markup language that reads like text, yet can be turned into HTML. Then it hit me, why I don't I maintain my messages in my code in Textile and then convert them to HTML on the fly?

This turns out to be super easy to do. First, you write some Textile:

$subj = "Thanks For Signign Up For Foo!.com";
$body = <<<EOF
Hello _{$username}_,

Thanks so much for signing up for "Foo!.com":

Your account is just about ready for you to use. You just need to confirm the account.
You can do this by clicking "here":$confirmation_url or, you can click on the link below:

p=. "$confirmation_url":$confirmation_url

Thanks for joining up and have a Foo!tastic day.


Now, you can transform the Textile to HTML and store the value on the mailer:

$t = new Textile();
$mailer = new PHPMailer();
$mailer->Subject = $subj;
$mailer->Body = $t->TextileThis($body);
$mailer->AltBody = $body;

You can see, in the last line, I store the textile input as the text version of this mail message. While not perfect, the Textile version should at least be a readable version of the message for the few folks out there without HTML capability.

So there you have it, concise messages to maintain, pretty HTML formatted e-mails, and a passable alt-version of HTML all in about 3 lines of extra code.

Tuesday, January 26, 2010

A Basement Heating Hack

Today we had our furnace/heating system inspected for the first time since the house was built about 6 years ago. To Shira's credit, she arranged this before there was any kind of emergency - it just seemed like a sane thing to do (and probably overdue). Luckily, the guy found no issues. We had been wondering if something was amiss because our basement was feeling especially chilly and we wanted to make sure something wasn't off.

While asking the tech about options for warming the basement he suggested an idea, which in hindsight was obvious:

If you close vents on the first floor, then heat will take longer to reach upstairs thereby causing it to stay on longer, thereby heating the basement. Additionally, with the vents closed, the heat will escape that much slower.

On the other hand, if you want to save money, keep the vents open so that the upstairs can get to the right temperature faster, and turn off sooner.

Like I said, this was obvious - though my first instinct was to make sure vents were open, rather than closed.

Besides getting a good heating tip I was reminded of an exceedingly important lesson: just because a system is big-and-unknown (say: your car or heating system in your house), doesn't mean you can't apply logic to the problem. I so totally should have been able to figure out the above strategy. Instead, I wrote the problem off as some mysterious issue that a trained tech would need to fix.

Monday, January 25, 2010

Conan Goes Out Like A Mensch

I haven't really been following the Conan/Leno/NBC debacle - but my brother David was kind enough to sit me down and watch Conan's parting address.

Go watch it here.

I have to say, I think Conan acted brilliantly. He had a chance to say anything he wanted, to let all the anger and disappointment bubble over - and instead he chose to take a step back, see the opportunities he's been given, and to appreciate that life isn't about fair.

I hope when I'm faced with these kind of disappointments, I'll have the piece of mind to behave like this.

Update: It's a crude video, and not as good as the whole speech - but if you just want a quick gist of what I'm talking about here's a sample of the above clip:

Sunday, January 24, 2010

Last Day With the Twins

The twins have gone home and the house is down to one baby, which makes it practically silent. We had such fun with the twins, and Mom, Dad and the au pair. We hope they come back and see us really soon. It was such a joy getting to spend the weekend with them. You can see from the pictures, that a great time was had by all.

Friday, January 22, 2010

Playing with babies

So... this is what running a daycare feels like? Yesterday and today have been baby crazy at the Simon household. The twins continue to amaze us with their newfound powers and our little one is such a champ taking it all in.

Here are some fun pics:

Dovid peruses the cookbooks, as he's thinking of his next meal, while Chana is getting a head start on acing Orgo.

They both love the swing Shira and David eating them up.

Friday Funny - Intergalactic Snack Tips

Just in time for the Super Bowl, Chad Vader has some most excellent snack tips. He even includes a hot dog recipe - oddly enough, it's one I haven't tried before.


Getting That Brand New Phone Feeling With The G1

Over the last few weeks, I've noticed my G1's call quality is amazingly bad. At least once per phone call the person on the other end of the line would fade out for a few seconds, and fade back in - with the critical information uttered those few seconds lost forever. Usually this would happen a couple times a call, and always at the most inopportune times. As if that wasn't bad enough, every few phone calls, I'd managed to just have the call dropped.

Combine this with the fact that my G1 seemed to be getting slower and slower, and I felt like I had to do something. I knew I had a real problem when I found myself browsing T-mobile's phone selection, and wondering if I could ditch all this fancy smart phone technology and just by something basic. I know, crazy, crazy thought.

The Solution: A Factory Reset

Before I ran out and either upgraded to a Nexus One, or downgraded to a Motorola F3, I decided I'd give my G1 another shot by doing a Factory Reset. This would zap all the data on the phone and leave me with an effectively brand new phone.

It's actually not as an extreme an option as it sounds, as the phone's contacts, e-mail and calendar are all sync'ed through your Google Account, which means that you don't lose this data.

The actual reset procedure is here, and is eerily fast to complete. Note, the instructions mention the End Key -- this is the red key you press to hang up a call.

Initial Reactions To The Reset

Luckily, I didn't have to hold my breath too long - after the phone reset, and I plugged in my Google Account info, it immediately started to restore contacts, e-mail, etc. The memory card was also left untouched, and while I haven't checked, the list of apps I had installed is supposed to still be there too.

Gone however are all the apps I had installed as well as personal settings (like screen brightness and such). The other big item that was gone was my SMS messages - but I had been using TreasureMyText, so technically this information wasn't lost.

I have to say, with the stock G1 background, and no extra apps - the phone really did feel fresh and new. It was also definitely faster to use, though still not lightning fast.

Getting Reacquainted With The G1

Doing the factory reset allowed me to get a fresh perspective on the G1. I've made two promises to myself. First, I'm going to try to explore the built in features of the phone more. I've already discovered the power widget which allows for super fast toggling of the GPS and WiFi. Second, I'm going to try to install only apps I'll use. Sure, the compass was neat, and Google Night sky is a model of software engineering greatness - but I never used these and other apps. That's not to say there isn't room on my phone for fun apps, they just need to be ones I use regularly.

To get started, I settled on these three absolute essentials:

  • PhoneFusion - I'm never going back to old school voice mail. Ever.
  • Google Maps Upgrade - The Turn-By-Turn directions are too important to live without, and I've already used it as a backup GPS when our main one is sitting in Shira's car.
  • Contact Owner - This tiny app puts up a message on your lock screen saying who should be called if the phone is found. This information could mean the difference between a lost and found G1, so it's in.

That's it. To keep the apps under control, I'm planning to install them when I need them and even then, incrementally, so I can tell if one is slowing down the works.

I'm sure I'll break down and go back to my mad-downloading days, but just for the next few days, I want to pretend like I can be disciplined about this.

And The Call Quality?

So far, on the handful of calls I've taken today, I've had zero issues. No more fading, no more dropping. I'm not sure the track record will hold, but so far, so good. Looks like the Factory Reset was the way to go to solve this issue.

I have the feeling that even if call quality wasn't an issue, doing a factory reset yearly or maybe even a bit more frequently may be a good idea. It really does give you that Brand-New-Phone Feeling without that Oy-How-Long-Does-The-Contract-I-Just-Signed-Last Feeling we all dread. Not to mention, it's free.

Wednesday, January 20, 2010

The Twins Come to Visit!

We are officially baby central! Besides our little one, Elana and Shmuel and the twins arrived tonight. What a treat! And my, how they've grown. Chana has teeth, Dovid is crawling at warp speeds and they both ate dinner at the table with us. We are so excited to have the weekend ahead to share with them. Here are a few pictures from tonight, and you know there will be many more to come in the next few days.

Gotcha Of The Day: Upgrading Old Versions of Joomla

One of my clients was running an especially old version of Joomla and wanted to upgrade to the latest version. While the instructions for doing so are clear, there's an off hand remark at the beginning that threw me off:

You will need a working Joomla! install, though using the latest available release of Joomla! 1.0 is always the best option.

Sounds reasonable enough. But, what's the latest 1.0 version? And more importantly, how do I get my old version of Joomla brought up to this version? The docs have nothing to say on either of these points. To add insult to injury, the Joomla download page only lists 1.5.x versions of Joomla.

After more Googling than I like to admit, I did find a recipe that works. Essentially, apply the various patches to go from say 1.0.3 to 1.0.13 and then apply the patch from 1.0.13 to 1.0.15. As far as I can tell, 1.0.15 is the most recent 1.0 release.

So, the files you need can be found here:

  • 1.0.13 Release - grab the appropriate patch to take your old release to 1.0.13
  • 1.0.15 Release - grab an the appropriate update from 1.0.13 to 1.0.15

Tuesday, January 19, 2010

Dinner For 3

Tonight was our first official dinner out for the three of us - Shira, Me and The Little Man. We all did well. The little one was remarkably quiet, and spent most of his time either taking in the scenery or chewing on his funky Sun toy (thanks Jerrie!). It helps that he's really enjoying the car seat that a friend lent us (thanks Erin!).

I love how a trip to Noodles and Company can be considered a real adventure. This parenting thing really does make you appreciate the little things.

Smallware - A Handy App List

I really like this list of software tools suggested by Mark Wieczorek. He classifies them as Smallware:

I use a lot of little programs to make my day-to-day life easier. Here are a few of them. Most of these programs are small, under a megabyte and don't require an install. I use some of them every day, and others I use only occasionally. Almost all of them are free.

While I use a handful of these tools, the majority I don't - and many of them I've never heard of. Heck, the section on security tools alone is worth reviewing just to find out which programs you can trust to clean your machine.

As a bonus, check out his comparison of outlining tools.

Think Globally, Innovate Locally

So I'm browsing through adrants, and come across this fairly clever marketing gimmick:

Arlington-based 3 Bar and Grill, with help from Bill Santry Design, hopes to alleviate those concerns [of who you met last night] with its napkins. They are helpfully branded with the name of the location and a space to fill in the name and number of that hot girl/guy...or that annoying bookie.

Here's what I mean:

Clever, no?

And the thing is, 3 Bar & Grill is located just down the street from me. Heck, I've almost gone in a couple times (but their menu just didn't do it for us).

My take away: innovation doesn't have to happen at some esoteric, far off company - it can happen right down the street. It just means investing the time and energy to do it.

Friday, January 15, 2010

Perch: A Lightweight, Inside-Out Content Management System

In a typical Content Management System, like WordPress or Joomla, the CMS itself is the one that runs the show. It stores all the content, and when asked, renders it for the user. This is usually a Good Thing, as it implements a whole lot of functionality that programmers would have had to write in the past. Now, the CMS does the heavy lifting, content editors write the content, and programmers can swoop in and write small plugins that run inside of the CMS's universe. For a content based site, it's an ideal setup.

But what if you don't have a content based site? What if you have a web app, and the marketing department would like to be able to edit the content? It sounds like a job for CMS, but you'll run into two main issues: (1) in order to fit into the CMS's word, you'll need to effectively embed your application inside of it (or perform some other contortions to use it) and (2) in order to be able to edit a few paragraphs of text and there, you'll end up incurring the cost of an entire CMS framework. Which in the case of WordPress or Joomla, can lead to performance issues.

What's a programmer to do?

An Inside-Out Solution

This is the dilemma I've faced in the past, and again this morning. Always on the lookout for a better solution, I managed to Google my way to Perch. Perch is essentially an inside-out solution: instead of assuming that the CMS runs the show, it assumes you've already got a working application. Instead of being the boss, it wants to just pitch in where it can. Which in its case, means tweaking your code anywhere you want custom text to show up, ever so slightly.

Integrating in Perch is as easy as saying:

 <? require_once('perch/runtime.php'); ?>
 ...your page's code...
 <? perch_content('Home Page')? >
 ...more code...

Once you've done this, you've just about made your web application CMS accessible. Now you need to log into the Perch back end UI, and tell Perch what kind of content should live there (1 line of text, multiple lines, an image, or something fancier). Once you've done that, you can tell the folks in marketing to log into the Perch UI and edit the content as frequently as they want.

My description doesn't really do it justice, I'd suggest taking a few minutes and watching the intro video.

As you can see, Perch is not only operates inversely than most CMS systems, it's also really lightweight. It's not free, but at $60.00, it's pretty dang close.

Lots To Like

I've only been playing with Perch for the last couple hours, but I've already found a bunch of features I really like about it:

It gets the workflow right. The dual roles (admin and editors) is simple, and powerful. The people who need to change content can do so, without having to worry about making system changes they shouldn't.

It's programmer friendly. The call to perch_content is flexible enough that you can use it in more than the simplistic context. For example, you can include the following at the top of every page:

  perch_content(get_current_page_name() . " Meta Tags");

This will automatically define Home Meta Tags, About Meta Tags and any other page that is called. There's no need to hand code any the pages.

I like that you can get perch_content to return the text instead of editing it. It allows you to say something like:

  $meta = perch_content(get_current_page_name() . " Meta Tags", true);
  if(preg_match("/Undefined content/", $meta)) {
     $meta = default_meta_tags();

Templates allow for more sophisticated text replacements. When you define a perch_content area, you associate a template with it. This template forces the content editors to enter particular information (say: a title and body), and then says how those entered items should be rendered (say: within <h1> and <div> tags). Combine this with the fact that you can mark items as being shared across all pages, and have multiple entries, and you end up with some really cool functionality.

For example, I defined the Sidebar template as:

  <h2><perch:content id="title" type="text" label="Title" required="true"/></h2>
  <p><perch:content id="body" html="true" type="textarea" label="Body"/></p>

Inside of my web app, I embedded a call to the sidebar as:

 <? perch_content('Main Sidebar'); ?>

Inside of the Perch UI, I marked the Main Sidebar as shared and supporting multiple items. A content editor can then add as many text items to the sidebar as he'd like (including HTML), so this includes YouTube videos and other embedded content.

The CMS content is generated once and served from static files. This means that adding Perch CMS functionality won't impact your performance in meaningful way. It does mean that template changes aren't shown to you on the fly, but this seems like a small price to pay for rock solid performance.

It's Keeper

As you can see, I'm pretty much sold on it. Of course, I'll really know how well it works if I end up using it on a production project or two. But so far, I'm sold.

Thursday, January 14, 2010

The Really Easy Way To Donate To Haiti Disaster Relief

Andrew Sullivan highlighted what has to be among the easiest ways to donate to the Haiti relief effort:

Text "HAITI" To "90999"
The State Department offers the simplest way to donate ($10) to the relief effort.

The State Department expands a little more:

text "HAITI" to "90999" and a donation of $10 will be given automatically to the Red Cross to help with relief efforts, charged to your cell phone bill;

Impressive, no? And it appears to work, as I had no problem donating over SMS.

SMS may be simple, but boy is it powerful. I hope the program can do some serious good.

Wednesday, January 13, 2010

Sites To Help Businesses Connect

My brother sent me this list of 20 Social Networking Sites for Business Professionals earlier today. While I find the buzzword Social Networking (heck, anything with the world Social in it) to be overused - there does appear to be value in the sites listed here. The whole concept of connecting up with others to help run your business well is a key idea, and if these sites can help with that I'm sold.

Any sites on list you especially like and think are worth participating? Any sites missing from the list?

Of course, you could always create your own community site, if the perfect one didn't exist.

A Little Baby Monitor Advice

So we went baby supply shopping in a bit of a hurry. One item that we weren't quite sure we'd even need was a baby monitor. We quickly realized that between our inexperience and our apparently sound proof house, a baby monitor would be a Good Thing.

As a side note (and to earn a few geek points here) - we initially worked around the problem of not having a baby monitor by putting a laptop in the kid's room and starting a Google Talk voice call. We muted the microphone on the laptop we were using to listen in on. The setup actually worked pretty well, and with a bit of an equipment change, we could have had video too.

Anyway, we realized we needed a baby monitor. I was the first one out at the store, and standing in the baby monitor isle I was a bit overwhelmed. So I got Shira on the line.

My instinct was to go with the bare-bones model. Heck, they all do the same thing, right? Thankfully, Shira convinced (told?) me to go with the slightly fancier Fisher-Price Sounds 'n Lights Monitor. The bonus here was the extra receiver, which we thought we could leave strategically in the basement next to the TV.

The fact that the monitor had pretty flashing lights seemed to be a total gimmick.

Turns out, I was actually wrong about the lights. When I'm working at night, and Shira's trying to catch a little shut-eye, I often have my headphones on. The result is that I'm not going to hear the baby monitor. Those little lights, on the other hand give me a visual clue that the little one is asking for a bit of attention.

Is the Fisher Price monitor the best one to get? I have no idea, as we didn't really do any research. But I can tell you, those lights are actually useful and far more than just some pretty decoration.

Note: the monitor gets terrible reviews on Amazon. We haven't had any issues with static yet, so maybe we got an updated model or something.

Tuesday, January 12, 2010

Terror Ball - Capturing The Craziness

I thought this segment on the Daily Show was absolutely hilarious, and captured the wackiness of the Washington pundits so well. If half the energy that goes into shaping the political landscape went into the actual business of problem solving - well, just think where we'd be?

Review: The Little Legal Companion

I was walking through the library when this little book caught my eye. How awesome, I thought, all the legal advice I'd ever need from a tiny little book. I was tempted to call our company lawyer and tell him his services would no longer be needed - but I figured I should take it home and actually browse the book before I made that call.

I guess I'm glad I did, because, calling this a Legal Companion is a bit of a misnomer. It should really be titled:A Collection of 10-Item Lists On A Wide Range Of Topics, With No Legal Advice Provided. In fairness, I can see how Legal Companion is more pithy. The book really is really nothing more than a series of mostly common sense Top 10 lists. There's nothing particularly legal about it. Heck, it's more blog than book.

So yeah, I was disappointed that it was so very shallow on content. But here's the thing, the book is so easy to read, and covers such a breadth of situations, that there's probably at least a handful of things in here you wouldn't have thought of.

I wouldn't go out of my way to read it, but it does make a great little bathroom knowledge book. I give it a 5/10 for being-kinda-sorta-but-not-really useful.

Monday, January 11, 2010

An Instant Web 2.0 Look

Earlier today I wanted to flag new feature on a demo site and was looking around for graphical ways to do this. I stumbled across, and while it's a bit on the cheesy side, it was basically just what I was looking for.

Using the site you can trivially generate badges which can help give your website that shiny web 2.0 look (which is no doubt over used and now out of style.).

I whipped up this one in a few seconds:

It's a fun site, and if nothing else, it makes generating placeholder graphics a breeze.

Caption Me - Baby Edition

Oh, the adventure continues!. Technically the first photo is Shira and the boy heading out into the chilly DC weather, and the second is Me trying to figure out the MobyWrap (only the most ridiculously invented baby product ever).

But I'm sure y'all can come up with better captions than that!

Saturday, January 09, 2010

The Adventure Begins - We get our first foster care placement!

So we got The Call. The call from Arlington County, where the foster coordinator gently asked "So...are you and Shira ready?" And so, at 9:00am this morning, we welcomed a beautiful baby boy into the Simon household. Mother and child are resting comfortably.

We're getting a crash course in baby preparation. We got in 1 visit to Target before the placement happened, where I debated if purchasing 10 bibs was excessive. Since 9am, we've gone through 11 bibs and 4 outfits. Apparently, 10 bibs is not excessive in the least.

While I can't post a photo of our newest family member, I can tell you that he's wonderfully cute and we're super excited we have him.

As is typical in a foster scenario, we have no idea how long he'll be with us - could be weeks, could be months, could be a year.

Finally, I've got to give a huge thanks to friends who have both offered and provided baby goodies. It's made the start to this adventure much easier.

OK, I'm going to try to get a bit of shuteye before we get our first baby wake-up call. With my luck, that will happen about the time I hit Publish on this blog entry.

I can't resist posting just a few photos...

Here's Uncle David setting up the baby monitor. While we obviously couldn't have planned to have my parents in town for our first placement, they've been a huge help. Even grandpa has chipped in and has been having fun.

You can't really appreciate the scale of this photo - but here it is, 1 days worth of dirty clothes. How on earth can a cute little baby produce so much dirty laundry?

Friday, January 08, 2010

Gotcha Of The Day: Convincing Subversion To Pull All Directories From The Server

Subversion has an interesting operating philosophy:

One of the fundamental rules of Subversion is that a “push” action does not cause a “pull”, nor the other way around. Just because you're ready to submit new changes to the repository doesn't mean you're ready to receive changes from other people. And if you have new changes still in progress, then svn update should gracefully merge repository changes into your own, rather than forcing you to publish them.

One of the side effects of this is that you can have a repository with the structure:

  +-- images
  +-- js
  +-- huge-dir

You can say:

  svn update -N webapp      #pull down webapp and no subdirs
  cd webapp
  svn update images js
  # ... stuff happens ...
  svn update

The result is that you can pull down the images and js subdirectory, but not huge-dir. When you do the svn update to pull in changes, subversion does not automatically pull down huge-dir.

This can be a good thing, as it allows you to run a svn update without pulling in stuff you don't want.

But, yesterday, I wanted to pull down all the directories - in other words, I wanted:

  svn update

To grab huge-dir. I read up on Subversion, but couldn't find the right incantation to do this.

My hack?

  svn update `svn ls`

svn ls gets a list of all the files in current directory from the server, and svn update explicitly updates them. I'm sure there's a cleaner way to do this, though in a hurry, this worked.

The svn ls is also a nice reminder that Subversion isn't just about commits and updates - it's actually a remote filesystem that you can play with as needed.

Thursday, January 07, 2010

Spending The Day With Grandpa

Today, my parents went off and hit museums while my brother and I got to hang out with Grandpa. We had a blast, though I'm not exactly sure my parents love the fact that I took my granpda out for a lunch that is completely not allowed in his diet (apparently, corned beef and sauerkraut is not low sodium - who knew?).

Still, lots of fun was had. After an excellent meal at Bus Boys and Poets (the vegan quesadillas are a hit!), we took a trip down to the massive George Washington Masonic Memorial (we just stayed on the outside, we'll have do to a tour another day).

After that, we attempted to listen to a little bit of Mark Twain - that started off well enough, but before I knew it, we were both asleep on the couch.

Then David arrived home, and we busted out booze to mix up some drinks at Grandpa's request (like I said, my parents won't be leaving him with us anytime soon). Got to love the photo of me pouring over the G1's 10001 Cocktails app.

And here's the end of the night - Mom and Dad made it back in one piece, and as usual, the men are on the couch laptops at the ready.

What an awesome day!

Going Bananas With The Family

The family arrived last night, and after excellent pizza from Siena's, we busted out the Bananagrams Game my Mom gave us for Chanukah.

While the game appears to a version of Scrabble, and was a bit overwhelming at first - we all got into it in a hurry. As far as I comprehend the rules, each player is playing his sequence of letters individually, so game play happens in parallel. This makes it nice and quick.

My Dad has a reputation for kicking butt at games like these, and last night was no exception. Though, it was my legally blind, 90 year old grandfather, who was most impressive - he managed to keep up with all of us, cranking out words even though just seeing an individual letter was a challenge. Ahf mir gezogt!.

So yes, the Bananagrams is a winner - it's a game everyone can get involved in, moves quickly, is portable, and requires almost no setup.

Wednesday, January 06, 2010

A (Really) Brief Introduction To WordPress

Earlier this morning, I finished setting up WordPress for a client, and it occurred to me that I wasn't sure about the ideal first document for him to read. I could point him to WordPress for Beginners page on, but that seemed overwhelming. While I'm sure there are tons of tutorials out there, I wanted to give him something simple to start off with - so I put together my own little intro.

Feel free to check it out here (or below). It's definitely not meant to be a complete introduction, it's just supposed to give you a few places to start experimenting with making WordPress your own.

Another article I've already suggested to my client was Addicott Web's Why Your Business Website Should Have a Blog. It gives concrete tips for starting and maintaining a business blog.

Tuesday, January 05, 2010

Review: Let The Baby Drive

My first thought when reading Let the Baby Drive by Lu Hanessian was that I have no business reading this book. I had thought it was going to be a parenting philosophy book, but instead, seemed like it was targeted towards new moms. It just didn't feel right. There was only one problem, the writing was just too dang good - I couldn't put the book down.

Hanessian did an amazing job of putting you in her story - the pure exhaustion from dealing with a colicky baby, the elation of hearing Mommy for the first time, and every emotion in between.

By about half way through the book, though, I realized that I was reading a philosophy book after all. See, Nicholas, the baby and star of our story, is never the Good Baby. While other mothers brag at the pool about how much their children eat, sleep, love long car rides and are generally happy, Nicholas does none of these things well. Hanessian's story then becomes a lead-by-example strategy for dealing with a child who doesn't go along with society's norms.

Of course, I have no evidence as to whether her strategies are good or bad. Though, I can say that most of what she talks about agrees with the training class I took.

Philosophy aside, Hanessian's book is just an absolute fun read. She manages to bring you on the roller coaster of raising a child - all without having to change a single diaper. I give the book a 9/10.

I assume there are bad parenting books out there, though so far, I guess I've gotten really lucky with my picks. Hmmm, maybe you can judge a book by its cover, after all?

Monday, January 04, 2010

A Verdict On Quickbooks Support: It's Broken

The other day I had a 141 minute call with QuickBooks to get something sorted out. The call left me wondering if this was a good thing (what a dedicated staff!) or a bad (my lord, how long does it take to setup a product that they are selling?!). After today's call - which started at 9:30am and finished a few moments ago at 1:45pm, I have my answer: the system is broken.

That's right, I just spent 4hrs and 15 minutes - the vast majority of it on hold, trying to get a seemingly simple answer: whenever I attempt to log in to the Quickbooks Time Tracker Gadget I get the error message Company ID not found!. Obviously, my account is improperly configured - or something is out of sync. Either way, for the person with the right database access, this should take just a few minutes to analyze (what is the customer's company ID?) and fix (oh let me set it for him. Done.).

Instead, I had to spend a good 45 minutes actually getting to talk to a human. And then I had to spend hours getting to level 2 support. Finally, after a hour or so trying to connect to level 3 support, they decided to take my phone number and have them call me tomorrow.

And that's precisely what's broken about their support: not that they couldn't fix the issue in 10 minutes, it's that they couldn't identify this as something a senior person needed to look at, and then arrange a callback. That's all this would have taken to keep me happy. Sure we got there, it just took half a day to do.

Note to tech support managers out there: have a protocol for calling folks back, it'll make all the difference.

Using Coroutines to go from Imperative to Functional

I really enjoyed Steve Sinclair's discussion of creating a functional interface to the GLUT UI Library. The approach he takes is to setup a coroutine between the GLUT library and the Scheme system he's developing. It's a great example of hiding the ugly details of a library behind a nice interface. In this case, ugly part is the traditional callback based state handling of GLUT, and the clean interface is a lazy infinite stream of events.

So here you can see that the GLUT callbacks are simply used to grab events, and put them on the event-list, which is then processed in parallel by the main program. Co-routines are sort of like threads that must explicitly yield to each other, but their state is maintained within themselves, not globally. Only a tiny bit of global information is needed to pass continuations back and forth. In this way, GLUT sort of takes a back seat to the main program, which from its point of view remains “purely” functional. It's nice how this technique lets you invert the way GLUT usually takes over and becomes the main driver for your program, and instead flips it over and turns it into something that your main program requests events from. This idea of turning push into pull and vice-versa seems to be a common theme in functional programming.

It's an excellent read, and shows how a bunch of concepts like coroutines and lazy streams, can be leveraged in real-life programming. I hope he has chance to continue to flesh this out further.

Hmmm, I wonder if the model he has setup would grown into a world style programming environment? Seems like that it might be a nice interface to sit on top of the lazy streams he has constructed.

David Brooks - The Makings of a Resliant Nation

As I said yesterday, the general handling of the Christmas Bomber incident has been less than stellar. David Brooks' latest NY Times column captures this absurdity really well.

Much of the criticism has been contemptuous and hysterical. Various experts have gathered bits of Umar Farouk Abdulmutallab’s biography. Since they can string the facts together to accurately predict the past, they thunder, the intelligence services should have been able to connect the dots to predict the future.

Dick Cheney argues that the error was caused by some ideological choice. Arlen Specter screams for more technology — full-body examining devices. “We thought that had been remedied,” said Senator Kit Bond, as if omniscience could be accomplished with legislation.
In a mature nation, President Obama could go on TV and say, “Listen, we’re doing the best we can, but some terrorists are bound to get through.” But this is apparently a country that must be spoken to in childish ways. The original line out of the White House was that the system worked. Don’t worry, little Johnny.

When that didn’t work the official line went to the other extreme. “I consider that totally unacceptable,” Obama said. I’m really mad, Johnny. But don’t worry, I’ll make it all better.

Brooks claims that it's this maturity - the allowance for risks, the understanding that the government is made up of people and will never be perfect - that makes a nation resilient. Alas, most of our leaders would rather get fired up and blame each other, rather than accepting this plain reality.

Would a Republican administration handle a failed terrorist attempt like this any better? They didn't, really. Not because they were evil, or incompetent - but because these stopping terrorists, while letting people remain free, is a fundamentally difficult (impossible?) problem to solve.

Sunday, January 03, 2010

Review: Under Armour Cold Gear Hood

I do believe I official have a new favorite cold weather item: the Under Amrour Cold Gear Hood. I spotted it over at Amazon where it gets high reviews, and then picked one up at REI a couple days ago.

So far, I've worn it on our 8 mile New Years Day schlep hike, and then yesterday morning to shul in a feels like of 14° F. In both cases, the hood made the activity much more comfortable. It's kind of like wearing a scarf, though more convenient and snuggly.

There's actually a lot to like about this one item:

  • It's really lightweight, so tossing it into a pocket is easy
  • It converts to from a full mask to a partial mask to a neck-gaiter naturally - so repositioning it for comfort is easy
  • It fits well under a typical knit hat, making the hat quite a bit warmer than it normally would be
  • The material is supposed to wick away moisture, which is a plus
  • It could very well be the missing piece to your next Halloween's Ninja costume

The hood is a bit pricy at $25.00 - but given the size to warmth ratio, it's worth it.

Airline Security Lessons From Israel

Ever since the Christmas Bombing attempt, there has been a whole lot of finger pointing and not very much substance in the news. I found this article about lessons the US could learn from Israel to be among the latter.

My sense is that guaranteeing the safety of the approximately 37,000 flights that happen every day is an impossible problem to solve - but that doesn't mean that we can be taking every opportunity to improve the system.

We need less finger pointing, and more analysis and smart action.

Saturday, January 02, 2010

L'Shana Tovah!

The boys drink hot sake to a good new year! This was Ben's first go round with sake - I think it falls into the Acquired Taste category for him.

A New Years Day Hike - From Turkey Run to Theodore Roosevelt Island

During our last visit to Turkey Run park, I noticed a trail sign for Theodore Roosevelt Island, which was only a mere 8 miles away. Every since that day, I've been nagging Shira to do that hike with me. On News Year Day, with the temperature in the low 40's, I somehow convinced her today was the day (I know, I know, she's an amazing wife!).

And so, around noon - after a quick trip to REI to pick up some last minute gear - David, Shira and I set off on this 8 mile adventure.

The small section of Turkey Run that we did previously was flat and traveled next to the Potomac, making for relatively easy going. I expected we were in for 8 miles of the same. And for the first mile and a half or so, this is what we got. And then curiously, the route ascended sharply in-land, till we were essentially walking along the George Washington Memorial Parkway.

By now, I figured the rest of the hike was going to be along the road and wasn't exactly excited about this. However, after a few more miles, we again turned into the woods and things interesting again in a hurry. In fact, the trail got quite technical at times - with a fair amount of scurrying over rocks.

Overall, the hike was excellent - with enough difficultly to keep things interesting. I could have done without some of the car noise from the Parkway at times, but this is a small price to pay for having such a cool hike, that's still very close to DC.

If you're in the area, you should definitely check it out. Some photos below.