Friday, July 31, 2009

Accidental Entomologist

This morning I came across this stunning beetle, which of course this photo doesn't do justice to. It must have been a couple inches in length, and was minding its own business, so I left him alone.

OK, maybe you had to be there - it was an impressive specimen.

A Hoora-ific Museum and Good Time

Apologies to all members of the Marine Corps for the cheesy title. Couldn't resist.

My parents, Grandpa, the Wife and I had a wonderful trip to the US Marine Corps Museum located in Quantico, VA. It's been on my List of DC Sites To See for a while, and when I saw it got rated as one of the top 10 things to see in Northern VA, I was sold.

The museum itself is larger and more complete than I imagined. WW II, Korea and Vietnam are all covered in depth - with plenty of hardware to be impressed with. I even found the mannequins in the dioramas to be eerily lifelike.

Even if you're not a fan of the Marines or blowing stuff up, it's still worth checking out just for the interesting historical perspective.

It's also worth noting that it's both free, and with the wheelchair they provided for grandpa, quite senior friendly.

Thursday, July 30, 2009

The Trickiest Part Of The 9th Of Av

Today is the 9th day of the Hebrew month of Av, or Tisha B'Av, the saddest day in the Jewish calendar. All sorts of horrific events have happened on this day. To mark the day, Jews observe a whole series of limitations: no eating, no drinking, no washing, no wearing of leather shoes - heck, you're supposed to avoid all levity.

You might think that for me the hardest part is going 25 hours without eating or drinking. But you'd actually be incorrect. Sure, it's no fun be hungry throughout the day, and I get cranky something fearsome, but I'll make it through.

No, the hardest restriction I have on Tisha B'Av, is that you're not supposed to greet others. Here's why, as summarized on this handy Jewish Holiday cheat-sheet:

Greeting? An odd feature of Tisha B'Av is that it's traditional not to greet people during the fast. This comes from Jewish mourning practices. When one visits a house of mourning, it's not usual to greet people either. It's OK if you slip up and say hello by accident in either case--you'd be surprised how polite people are.

It's remarkably difficult to not say hello to people who very much enjoy seeing. And how do you resist not kvetching about how hungry you are and making light of the situation? It's just not how me, or other folks in my shul, are wired.

As noted in this wonderful article, Tisha B'av is a strangely lonely holiday. Besides not greeting with people, there's no marathon communal service (for Conservative Jews, anyway) throughout the day to commiserate with others. No, it's off to work, each person taking their thoughts and fast with them.

I can't help but think there's an important and powerful lesson here. We take one day where we actively deny ourselves the benefit of coming together as a joyful community, and thereby remind ourselves what a luxury it truly is. It may not appear like something we have to work for, but it most certainly is.

For another excellent read on the topic of Tisha B'av, may I suggest this article. And if you haven't read Eicha yet, I'd suggest that too.

Gotcha Of The Day: SSL website ignoring .htaccess file

I needed to put quick Apache RewriteRule fix in place on a website, so I decided to add the rules to the .htaccess file. For the life of me, I couldn't get the rules to take effect.

After much poking around, I realized that the rules were being observed for the http version of the site, but the https version was ignoring them.

After still more digging, I could find plenty of folks talking about how to limit rules to just non-https pages, but I couldn't find anyone suggesting that SSL version of the .htaccess file would normally be ignored.

Then it hit me - the VirtualHost definition for the SSL site is a totally separate configuration than the non-SSL site. And that was the key, I had:

<VirtualHost *:80>
    ServerName something.com
    DocumentRoot /var/www/vhosts/something
    ...
    <Directory /var/www/vhosts/something>
        AllowOverride All
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName something.com:443
    DocumentRoot /var/www/vhosts/something
    ...
</VirtualHost>

I had an AllowOverride clause in the non-SSL virtual host, but not in the SSL version. The result: the non-SSL version was observing the .htaccess file, the SSL version was ignoring it.

I added that clause in to the SSL version, restarted the server, and I was good to go.

Wednesday, July 29, 2009

Translation Needed - HR 3200 from Congresses to English

My friend Justin passed along an e-mail forward that's no-doubt been making the rounds. If my Goolging is correct, it was an e-mail version of this page, entitled: The HC Monstrosity-All 1,018 Pages. This blog post sets the stage with an introductory paragraph (the e-mail was missing this paragraph):

Since Congress doesn’t want to read the Health Care Bill and Obama, ACORN, Unions, Lawyers, & Special Interest Groups don’t want you to know whats in this monstrosity, I decided to do it myself. I’ve taken all my tweets on the HC bill and put them into one single place for your enjoyment. Additionally here is the link to the full bill

(ACORN? Really? Anyway, I digress)

The post, and e-mail, then go on to highlight dozens of sections of the bill, and what they mean for you as a citizen. So examples:

...
Pg 30 Sec 123 of HC bill – THERE WILL BE A GOVT COMMITTEE that decides what treatments/benes u get
...
PG 50 Section 152 in HC bill – HC will be provided 2 ALL non US citizens, illegal or otherwise ...

After reading this interpretation of the bill, how could you not be terrified of it?

One person did post a follow-up comment that attempted to refute most of the claims that were stated. For example, the above comments were addressed as:

Pg 30 Sec 123 of HC bill – THERE WILL BE A GOVT COMMITTEE that decides what treatments/benes u get

The government committee will not decide what treatment or benefits you get. The panel, which is mandated to represent both the medical field and employers, will recommend (i.e. not mandate) two things: an ”essential benefits package” (that is, minimum coverage), and cost-sharing levels for “enhanced plans and premium plans” (which would ensure a maximum individual medical expense). Not only would this committee not mandate the coverages in those plans, it would not mandate which plan is offered or which plan a person must buy. This in no way effects choice of the individual, only attempts to ensure standards under which an individual is guaranteed a certain level of care.
PG 50 Section 152 in HC bill – HC will be provided 2 ALL non US citizens, illegal or otherwise
Talk about grasping at straws. Here’s the exact verbiage of the text: “Except as otherwise explicitly permitted by this Act and by subsequent regulations consistent with this Act, all health care and related services (including insurance coverage and public health activities) covered by this Act shall be provided without regard to personal characteristics extraneous to the provision of high quality health care or related service.” Oh my God! Those evil bastards!!

Accurate or not, the issue raised by this blog post is a good one. HR 3200, heck most (all?) bills in congress are hundreds of pages of difficult to read text. It's awesome that they are available online, but the text is so hard to understand there's enormous room confusion.

When I checked out congress' version of the bill, I was impressed to find that they allowed people to comment and link to any section of it. Cool! But, the comments were surprisingly sparse and not especially helpful. Take these two comments on section 123, on the Health Benefits Advisory Committee:

So all of the members of the "Committee" are appointed by the president, since the comptroller is a position not yet filled permanently, and that position is appointed by the president.

Yes - and these few people will decide what health care coverage you will receive. Had enough Socialism yet?

Congress gets big points for offering a way to comment and permalink any section of any bill. But, they lose points for not engaging people in conversation and using their own comments to further explain what was intended.

If you ask me (and nobody does), I think a bill like HR 3200 should be accompanied by an English version. You should then be able to read a side-by-side translation. The English version should include the following:

  • A plain English description
  • What the intent of the section is
  • Where possible, a concrete example
  • Limitations on when the section applies
  • Frequently asked questions

Ideally, this translation would be "certified" by a bipartisan group of some kind.

Yes, an English translation would be a huge amount of effort to put together. But, I think everyone would benefit from it in a big way.

Tuesday, July 28, 2009

A 2 Second Google Spreadsheet Tip

Here's a quick tip that took a second to learn, and has saved me immense amount of time:

In a Google Spreadsheet, type Control+<Arrow Key> to quickly jump to the end of the row or column. Try it, it makes getting around an online spreadsheet a breeze.

I use Google Spreadsheets to track everything from incoming business leads to my running progress, and scrolling around a 400+ row spreadsheet can be a pain. That's why this one key combination is such a hit.

Here are even more handy key shortcuts.

Bonus Tip: If you create a bookmark on your browser toolbar to the URL http://spreadsheets.google.com/ccc?new, you can visit to create a new spreadsheet with just a single click.

Monday, July 27, 2009

Sarah, Promise me this isn't goodbye

Check out Sarah Palin's exit speech from office:

While not quite as winding as her resignation speech , and lacking the cool wardrobe selection of her media interviews, she still managed to not disappoint me. In a single speech, she:

  • Explain what a fantastic job she did as governor and all the wonderful things she accomplished
  • Explain that government is the problem and not the solution
  • Reiterate that it's obvious why she's stepping down: a lame duck Governor is powerless
  • She's going to fight harder than ever for Alaska

The contradictions between these statements seems so obvious to me, that when I try to write them out, my head actually begins to hurt. I just can't reconcile them. If you want to fight for Alaska, what better job than Governor? Aren't you only a lame duck Governor because you decided you wanted to be one? If you did such wonderful things as Governor isn't that proof that government can do good things?

The logical part of me thinks that John Feehery is right, it's time for us to move on past Sarah. But oh, the guilty pleasure I'd miss by not keeping up with her. I can only hope she keeps tweet'ing away!

Ball Game Vegetarian Options

Shira and I have really been enjoying our trips to the ballgame. And the fact that they have Kosher food options is huge. But, I had no idea they also had some many vegetarian options - as this Washington Post Article explains.

There's veggie burritos, tacos and chili. Heck, you can even get a veggie hot dog (got to say, I've never been a fan of these).

Unfortunately, while the food options are there, the article doesn't always rank them very high. We actually tried one of Noah's pretzels yesterday, and were surprised that it wasn't as tasty as a typical Auntie Ann's pretzel was. Of course, once I learned the back story behind Noah's Pretzels, I could give them a break on the taste and will continue to buy them.

Ballpark food is is meant for the masses, so I give the vendors at the Nats stadium credit for at least offering interesting options. And besides, there's always beer.

Sunday, July 26, 2009

The Nats and The Boys, An Excellent Combination

We had an excellent time going to yet another Nats game today, this time The Boys (well, most of the boys - Spencer, we missed you!). While the game was pretty well matched, we did manage to pull out a win in the 10th inning. Even the weather was in our favor, and we were spared the predicted thunderstorms.
Some photos from our fun day below.
Just about the whole gang;
The boys and the bobble head George:
Ben takes his Rock Band signing up a notch by performing for those unlucky enough to be in the gaming pavilion. Sorry all.
Forrest scores an autograph:
The boys pose for one more photo - they are such a patient bunch when I have my camera!
Us!

Friday, July 24, 2009

Some Design Inspiration

Looking for some design inspiration? Check out these 50 blog designs. Wow.



Thanks to @SeanMalarkey for the tweet that included the URL.

Dev Site Of The Day: php-date.com

Need to know how to format an HTTP header date in PHP? How about for an RSS date field? php-date.com has you covered. Besides date formats, it gives hints on parsing dates and doing date math.

It's part reference material, part cheat sheet and all goodness.

If you PHP and don't happen to have photographic memory for the various specs out there - you'll want to keep this site handy.

Thursday, July 23, 2009

Another Gotcha Of The Day: empty Zip file generated by PHP

I wanted to use the Zip library offered by PHP to generate a .zip file. The API is nice and simple, you just do something like:

$zip = new ZipArchive();
$filename = "test.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
    user_error("cannot open <$filename>\n");
}
$zip->addFile("/usr/local/foo.gif","/foo.gif");
$zip->addFile("/usr/local/baz.gif","/bar.gif");
$zip->close();

For the life of me, though, I couldn't figure out why my code was generating an empty (0 byte) zip file. I could see the temporary files I was added to the zip file were on disk, but for some reason they wouldn't end up in my Zip archive.

To add insult to injury, the methods on the ZipArchive object just return back true or false, and don't say why they failed.

Eventually I narrowed down my woes to $zip->close() failing. But why? It would not say.

Finally, I put even more checks in place and realized that of the 20 files or so I was adding to the ZipArchive, one of them did not exist. The call to addFile() worked fine, but apparently later on when I called close() the archive was corrupted.

To avoid this type of issue in the future, I wrote a quick wrapper class around ZipArchive. Calling addFile on a non-existent or non-readable file will immediately raise an error. Here it is - enjoy!

<?php
/*
 * An extension to ZipArchive that's more verbose about 
 * issues that may cause things to break
 */

class SafeZipArchive extends ZipArchive {

  function open($file, $mode) {
    $result = parent::open($file, $mode);
    if($result !== true) {
      user_error("Failed to open the zip file $file ($mode)");
    }
    return true;
  }

  function addFile($path, $local) {
    if(!file_exists($path)) {
      user_error("Can't add |$path| to zip file, the path does not exist");
    }
    if(!is_readable($path)) {
      user_error("Can't add |$path| to zip file, the file is not readable");
    }

    $result = parent::addFile($path, $local);
    if($result !== true) {
      user_error("Unexpected error while adding the file |$path| as |$local|");
    }
    return $result;
  }

  function close() {
    $result = parent::close();
    if($result !== true) {
      user_error("Failed to close (and build) the zip archive");
    }
    return $result;
  }
}
?>

Gotcha Of The Day: fopen(...) failed to open stream: Success

I'm updating a PHP app to generate a bunch of temporary files on the fly and ran into the oddest of error messages. I was basically saying:

  $stuff_name = tempnam("/tmp", "stuff-");
  $stuff_handle = fopen($stuff_name, "+w");

And was getting the error message:

Error Message: fopen(/tmp/stuff-K6Y5qv) [function.fopen]: failed to open stream: Success

Let me get this straight, there's an error, and yet the detail is Success. Huh?

Googling didn't help. So I went back and trip checked my work. And of course, there was an error. I said +w when I meant to say w+. D'oh! This code works:

  $stuff_name = tempnam("/tmp", "stuff-");
  $stuff_handle = fopen($stuff_name, "w+");

Wednesday, July 22, 2009

The Anatomy of A Blogger Gadget

Blogger gives you the ability to add gadgets to your blog to extend its functionality. While there are hundreds many (what the heck - the big list of gadgets seems to be gone?!) available, earlier today I had an idea for gadget that I couldn't find implemented. No problem, I thought I'd whip up my own. I clicked on the Add your own link and...

...got totally stumped. In all my poking around the Blogger help site, I couldn't find any documentation as to how you actually code the gadget. I found this promising article - but it just explains how you can put code on your website that allows people to add specific content with a single click. While useful, it's not what a gadget is.

Finally I found this announcement which solved the mystery: to create your own Gadget, use the Google Gadget API. Well, duh.

Also in my search, I found these real life examples which are especially helpful.

I'm quite impressed with the API, it seems really complete.

Next up - finding time to actually write the gadget. But, now that I know the API they use, that should be infinitely easier to do.

HTTP Caching Headers Explained

I always get confused about which HTTP caching header does what, and what the expected effect of each one is. So, I'm glad I found this caching tutorial which it explains it all remarkably clearly. If you're looking for a way to speed up your site, HTTP caching is big win - so check out the above tutorial.

I also found these articles valuable:

The last article is especially handy because it suggests changes that you can make in a .htaccess file, which is available to you even if you can't change the Apache global configuration.

Tuesday, July 21, 2009

Some Coding History

Google mentioned today that the source code for the Command Module and Lunar Module have been made available in digital form. You can actually read the source code that landed a man on the moon.

Wow, now that's some impressive programming. Not only were the computers incredibly limited, the programming bare bones, and science/art of developing software in its infancy - but one misplaced keystroke could easily cost people their lives. No 5 year beta testing period for this code. It had to absolutely work every time.

I'm humbled.

I wonder if the source code will be worked into the whole we-never-landed-on-the-moon conspiracy - as either proof against or for.

NSA for Kids - Huh?

I have to admit, I was quite surprised when I learned that the NSA - the organization that has a reputation for listening in on us - had a kid oriented site.

And the thing is, it's well done. If you want to teach your kid about ciphers and codes - this seems like a fun way to do it.

Look at that, who knew a government agency that at one point was denied to even exist, could be so warm and fuzzy?

McCain sinks to a new level

This just fires me up. I can't believe McCain has gone the route he has with this health care survey he's running. The e-mail I just got on the topic starts off innocuous enough:

Last week, I sent you an email asking for your voice on healthcare through Country First's Future of America's Healthcare Survey. I'm happy to tell you that over 30,000 people have filled out the survey online in less than a week. I'd like to share some of the early results:

You want to do the whole grassroots thing, excellent. More power to you.

The results are a bit troubling. Like:

90% of survey respondents believe America's healthcare system is the finest in the world, but still needs some reform.

Uh, who the heck cares what the perception of the Unite State's health care system is? In a case like this, the Senator should be looking at actual data, not what people think they think.

And then there's this whacky one:

80% of survey respondents believe the Federal Government should have no role at all in deciding an individual's healthcare.

I'm actually amazed it's only 80% and not 100%. Who, I'd like to know, is arguing for the federal government to make health care decisions for individuals? That's certainly not Obama's plan or anyone else's that I've heard of.

And then there's the survey itself. Calling it a survey is being generous - it's more like a fire-folks-up-so-I-can-get-the-data-I-want form.

And finally there's this gem:

As you know, right now, President Obama, Democrats in Congress, powerful special interests and influential lobbyists are hard at work in Washington, D.C. trying to drastically change our current health care system. They seek to replace it with a nationalized system where the politicians and government officials will dictate the kind of medical services you and your family receive and the rules under which you access care and coverage.

I don't know of a pretty way of saying this - this paragraph is a lie. If you want know what Obama's plan is for health care, then just watch one of the endless speeches he's given on the topic.

Two things tick me off about this e-mail: First, it's not helping us to have a constructive debate. Rather than talking about matters of substance, like how we can ensure the public plan and private plans have a level playing field, we're stuck debating imaginary ghosts.

Second, both Obama and Republicans appear to want the same thing: an incremental change to health care, not a massive overhaul; more choice for folks; and a financially responsible solution. Why do we have to behave as though we are on opposite sides of the spectrum, when we're really working off the same playbook.

I'll include my usual disclaimer here - I'm not picking on McCain or the Republicans. I'm just seeing devise chaff that's getting in the way of an important decision we are making as a country, and it ticks me off. If Obama pulled these same kind of shenanigans (and perhaps he is?) I'd be just as critical.

Can't we try acting like adults here?

Monday, July 20, 2009

The Uniform Project: 1 outfit, 365 days

Fashion has to be one of those topics that I know nearly nothing about - but even I can appreciate the challenge and creativity behind TheUniformProject.com. Here's how it works:

Starting May 2009, I have pledged to wear one dress for one year as an exercise in sustainable fashion. Here’s how it works: There are 7 identical dresses, one for each day of the week. Every day I will reinvent the dress with layers, accessories and all kinds of accouterments, the majority of which will be vintage, hand-made, or hand-me-down goodies. Think of it as wearing a daily uniform with enough creative license to make it look like I just crawled out of the Marquis de Sade's boudoir1.

And she's pulling it off:

What a fun example of how you can take your cause global with just a good idea and the web.

1Marquis de what? - ah hell, what do I know.

Sunday, July 19, 2009

Parting Shots

A few parting shots, as we had to say good bye to the twins this morning and head back home. We had a great time with them and their parents. We hope they all had fun, too!

I am really going to miss my work partner. Productivity may increase, but it won't be nearly as much fun. In this shot, I'm explaining to Chana the main key combinations she'll need when she's using Emacs. Helmy, as you can see, I start recruiting them young.

So, there's no blood relation, but tell me there isn't a resemblance!

Is that Shira with the twins again? It's amazing we didn't miss our flight home!

Kosher Is Back At The Ball Park

What a pleasant surprise to find National's Stadium once again has a Kosher vendor. I'm about to chow down on a schwarma...mmm...kosher meat.

Finally, I can eat just as unhealthy as my seat neighbors.

Now, if the Cubbies win, this game will be complete.

Friday, July 17, 2009

More smiles

As you will see, the twins are having fun showing off their smiles. We took them for a walk today (one of our favorite together activities) and as usual, they had a great time and were very well behaved. They even managed to sit still for a twin-together photo op.

From Mobile Phones To A Poverty Debate

The folks over at MobileCrunch highlighted an interesting plan proposed by Colorado:

Thousands of low-income Coloradans reliant on public assistance could get a free cellphone under a plan before the state Public Utilities Commission.

If approved, the plan by TracFone Wireless in Miami would make Colorado the 17th state it has settled into with free cell service for the indigent, a form of wireless welfare that proponents say taps into one of the last untapped markets for the telecom technology.
...
TracFone's subsidized program, called Safelink Wireless, gives users at least 68 minutes of free cell service each month — in Colorado, it would be 83 minutes — and unlimited access to 911 service even if the minutes are used up.

It's an interesting concept and one that I think could have some serious merit. I've often wondered if there was value in having a completely connected community, one where the city or town could reliably broadcast text messages to everyone (like we do with Arlington Alert - except you would know that everyone had a cell phone). Heck, everyone in the town - rich and poor - could use tools like twitter to engage in a civic conversation.

While the original article is interesting, it's the comments that are truly revealing. A good chunk of them are quite angry about this proposal, and chalk it up as yet another luxury give-away to the poor, all part of the Obama philosophy.

My response to these people are two fold:

  • I think this notion expressed in the comments that people who are on welfare are simply too lazy to work is way too simplistic. Sure, there are people who abuse the system - but life is way more complicated than that. People fall on hard times, that's why we have a social safety net in the first place.
  • What if the program works? For example, what if giving folks phones makes it easier for them to get a job? In other words, we should make decisions about whether to have a program like this not based on some emotion reaction, but based on its efficacy. Let's model the program out - does it seem like it will be of value? If so, try it and measure it. If it's proving to be successful, keep it - otherwise ditch it.

I think this comment sums up my point pretty well:

I sought work while homeless in the 1980s. I had a friend with a phone who posed as a roommate and if not for that I would have stayed living in my car much longer than six months. And I was employed, part time, just couldn't get move-in cash raised. Employers don't typically hire homeless folks over people with a stable address, or at least stable looking. Not for a job you'd want for more than a day.
Having a real phone gets that person into a job, paying taxes, contributing, and off welfare.

Isn't that the goal? a phone is a tool, and in this case a tool to get people off the dole.

But I guess it is easier to hate on the poor and your assumptions of how they wound up in bad situations.

Thursday, July 16, 2009

My How They've Grown!

It is so hard to believe, but the twins are 4 months old! Boy, have they gotten big! We got into town last night, and have been having a ball watching all the changes in their development since we last saw them.

And, of course, I had to take some photos with the new camera!

Here are just a few photos to show you how big they've gotten. They sure have come a long way!

Wednesday, July 15, 2009

Carpal Tunnel and The Exit Row

Earlier today I was officially diagnosed with Carpal Tunnel Syndrom and given braces I can wear on my wrists when I use the computer to ease the effects.

Just now, on a flight from DC to Boston, I was lucky enough to get put in the exit row. As we hit cruising altitude I busted out my laptop and my new accessories. As I'm working away, the flight attendent comes over and tells me that when we land I need to *not* be sitting in the exit row.

Oh, the braces - I explained those were just for typing comfort. When we landed, I wouldn't have them on.

He didn't care. He said he had seen me use them and that was that.

And sure enough, when we started the landing process, he had me switch seats.

The logic of this is a bit baffling - when we were flying and you could argue I didn't have full dexterity in my hands, I could sit in the exit row. But, when I had the braces off, and we were landing - well, that was off limits.

I guess the airline is just being better-safe-than-sorry, but still, it seems a bit whacky.

This is America, so I should be suing someone for this, shouldn't I?

Just What I Need, More Braces

So, even with my new ergonomic setup, I was still feeling random pain in my hands and elbows. It wasn't too intense, but this being my livelihood, it seemed worthwhile to talk to a doctor about.

Well, the doctor gave me the diagnosis I expected: carpal tunnel syndrome. She says it should be treatable with a good ergonomic setup, heat, ibruprofen and you guessed it, hand braces.

Geesh, what is it with me and braces these days?

The good news is that the doctor thinks I have a good chance of getting this under control and my days as a programmer should continue.

Now, about these braces - what's the in color these days?

vark.com - Your dynamic advice network

Aardvark - or vark.com is an interesting concept. You sign up, express some interests, and then become part of an amorphous advice network.

The user experience happens via instant messenger (IM) (or, at least that's how I'm setup) - which is actually quite natural. You participate by both asking and answering questions about any topic of interest. So far, I've answered two questions:

if i am trying to learn programming, should i start with ruby or objective-c? i want to build iphone apps, but i am wondering if it is better to learn ruby first and then graduate to objective-c.

and

How should I get the attention of my husband? He is workaholic.

It's an excellent concept, and the interactive experience is done quite well. The Aardvark bot senses when you're too busy to answer questions, gives you the opportunity to skip questions, and even tries to expand your interest set - for example, asking me about marriage and taxes because I mentioned I'd offer answers about marriage1.

Give it a try, you might just find it the right venue for answering that pressing question. If nothing else, it's a fun exercise trying to codify your advice in tiny-IM sized bites.

Thanks Manoj for suggesting the service!

1You'll be pleased to know that I made it abundantly clear, I don't have any advice about marriage and taxes to offer. Well, I have one bit of advice: don't piss off your wife, if she does taxes.

Abstract Hackery

I found myself intrigued by the security protocols failures outlined in the paper Programming Satan's Computer. The case studies are written in such a way that you don't need to be a security guru to appreciate the approach used to defeat what appears to be a secure system.

Consider this example:

A simple protocol failure allowed criminals to attack the automatic teller ma- chine systems of one of Britain's largest banks. This bank wished to o ffer an online service, so that customers could still get a limited amount of money when its mainframes were doing overnight batch processing. It therefore had the customer's personal identi cation number (PIN) encrypted and written to the magnetic strip on the card. The teller machines had a copy of the key, and so could check the PINs which customers entered.

However, a villain who had access to a card encoding machine discovered that he could alter the account number of his own card to someone else's, and then use his own PIN to withdraw money from the victim's account. He taught other villains how to do this trick; in due course the fraud led to at least two criminal trials, and to bad publicity which forced the bank to move to fully online processing [Lewi93].

It's a fun read, and the examples are abstract enough that there's room to apply them to problems you may be working on now.

Thanks to Lambda-the-Ultimate for the pointer.

Monday, July 13, 2009

Ben vs The Sampler

Not being a beer drinker, I'm pretty proud of myself for ordering and *finishing* the beer sampler at Sweet Water Tavern.

It was the ideal way to compare the different beer options, and to consume my month's (probably more like quarter's) intake of beer.

I highly recommend it.

Mmmm...beer....

Tutorial Of The Day: Moving SSL Certs from IIS to Apache

One of my clients is migrating from a Windows hosting provider we're unimpressed with (slow with tech support and offering a very limited feature set) to a flexible Linux provider and I needed to port over the SSL certificate.

To my surprise, and joy, the Windows hosting people didn't look at me like I was crazy when I asked for our certificate with the intention of migrating servers. Instead, they provided me with a .pfx file.

Great, now what the heck do I do with a .pfx file? I opened it up and found binary gibberish. Turns out, there an excellent tutorial on exactly this topic. I followed the steps there and ended up with a certificate file (cert.pem) and a private key (server.key). I then plugged them into my virtual host definition as:

<VirtualHost *:443>
    ServerName host.domain.com:443
    RewriteEngine On
    DocumentRoot /var/www/vhosts/host.domain.com
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/pki/tls/certs/cert.pem
    SSLCertificateKeyFile /etc/pki/tls/private/server.key
</VirtualHost>

With the above configuration in place, and a restart of Apache, the certificate was served up just like I expected and I was off and running.

Sunday, July 12, 2009

Batch-o-Movie Reviews

Here are some quick thoughts on some movies I've seen of late...

  • Inkheart - I wanted very much to like this movie. It's all about the power of books and imagination. Instead, I found myself unimpressed with plot and how the story was resolved. It was a great concept, but executed way too simplistically.
  • Monsters vs. Aliens - What a fun movie. The action, the underlying message, the characters - pretty much all of it made it exceedingly fun to watch. Pixar continues to knock them out of the park. My only complaint: did they really need to make the main female character so absolutely skinny? I mean, I know cartoons work best when the characters are exaggerated, but still. I fear for all the little girls who watch this movie and think that a concave body shape is normal and ideal.
  • Gran Torino - My gosh Client Eastwood plays one heck of a grumpy old man. I really liked this movie - the character development, action, the ending, the whole ball of wax. It was a bit heavy, but showed what a good film can do: give you a glimpse into a world that's normally hidden from you.
  • Knowing - I rented this movie after seeing the trailer play in a bar, with the sound off. So I knew next to nothing about. I stuff blowing up, and Nick Cage and thought this would be a fun one. I enjoyed the unfolding of the story, and generally liked the action (it sure is fun to watch Hollywood blow stuff up!). At first I was disappointed about the ending, but upon further reflection, I've warmed up to it. It wasn't the cheesy Hollywood finish I wanted to see (well, it was in some ways), but maybe in the end, that made it a better movie. Of all the movies, this is one I might go back and rent again to see if I could pick up some of the subtler clues of the movie.

What movies have you seen lately that you'd recommend?

Friday, July 10, 2009

Finally, A Microsoft Product That Doesn't Crash (yet)

Lately, my wrists have started to bother me a bit, and I decided to blame my laptop's keyboard for this. I figured I would experiment with an external keyboard and see if that helped. I ended up spending a bit more than I wanted to, and went with the Microsoft Natural Ergonomic Keyboard. I'm glad I did.

So far, I'm impressed. The shape does seem comfortable than a typical keyboard, and the elevated positioning of the front of the keyboard is more natural than it looked in the store. Even the wrist wrest is comfortable.

The inner geek in me is pleased too. There are plenty of buttons that I can map to applications and such, along with a rocker to simulate a mouse wheel and easily accessible forward and back buttons. Of course, the customizable keys aren't within home row striking distance, so I'll probably never use them. But, it's good to have them there should I ever need them.

I have to save, of all the Microsoft products I use throughout the day, I'm thinking this may be my new favorite.

One of these days, I'm going to setup the ultimate in ergonomic and comfortable work spaces. Any suggestions on getting there?

Video: A Website with E-Commerce In 5 Minutes

I found myself mesmerized by this tutorial: Create an eCommerce Website With WordPress In Under 5 Minutes.

Sure, the site is far from perfect - but it does highlight just how far and fast you can go with existing free tools out there.

This tutorial just reinforces the advice I often give folks who are first timers to having a web presence: skip the fancy shmancy website and use an off the shelf blogging engine to get started. I usually recommend Blogger because it's drop dead easy, but as you can see, using WordPress gives you access to some powerful tools (like being able to sell your stuff from the site). The result will be time and energy saved on the development and design process which you can pour into copy and marketing.

After some time, you'll outgrow this solution. At this point, you'll have a whole bunch of knowledge and experience under your belt that you can use to create an awesome website.

Today Was Special

Did you know that today was special? Not exactly a happy day in history, but still an important one to remember.

Thursday, July 09, 2009

Video: The Power Of The REPL

I just love the video clip below. In it, jlongster demonstrates how he's able to interactively remotely debug an iPhone app in scheme.

While I'm eager to rig up a hack like this for my G1, I've already had great success embedding REPLs in web apps. SISC Web comes with this functionality built in, and I've used it for everything from debugging and testing a system, to adding new functionality on the fly. There's just something incredibly powerful about being able to manipulate a live system like this. Dangerous, yes, but equally as powerful.

Wednesday, July 08, 2009

A Sushi Eye View

I remember the first time I saw a Conveyor Belt Sushi restaurant - what pure genius, I thought. Though, it hadn't occurred to me that the conveyor belt would also make a neat device for creating a unique video. See what I mean?

What an excellent reminder that unique perspectives are available all around us, if we just open up our eyes and see them.

The New Camera and The Air Force Memorial

On a walk last night, we happened to pass the US Air Force Memorial and I had my new camera with me, so it was time to grab some snapshots.

You can see pasts photos I've taken of the memorial here. I think it's a beautiful monument that I can never seem capture in all its glory.

Tuesday, July 07, 2009

A US Army Code Name List

OK, I'm not at all sure why this this of US Army Operation Code Names fascinates me, but it does. Here's a few samples:

BLOCKBUSTER World War II plan for Canadian II Corps offensive in the Calcar-Udem-Xanten area

BLUE SPOON United States Southern Command complex of operational plans 1988-1989 covering various contingencies in Panama

BLUEHEARTS Korean War draft plan for amphibious landing; abandoned 10 July 1950 and replaced by CHROMITE

BOLERO World War II (1942) plan for offensive operations against Germany on the European mainland and for the build-up of US forces and supplies in the United Kingdom for the cross-Channel attack

Perhaps it's a fun way to learn about history? Or maybe inspiration for naming a product or concept? Or maybe it would be a source of useful place holder text? Or maybe it's just useful to sound snobby at parties (you do know operation Vulcan, don't you?).

Luckily, things on the Internet don't need to justify their existence. If they did, we'd have a whole lot less content out there.

What do you think, could this list have a use?

More T-Shirts From Web Content

A while back I noted that CNN had got into the T-shirt business and was allowing you to get their headlines on a shirt. I just learned Threadless is doing something similar - only with Twitter content:

Rather than use the same layout for each shirt like CNN, Threadless is picking a few Twitter shirts and making them each laid out differently. Cleverly, they are using a public voting scheme to figure out which ones people will buy:

Will these actually sell? Not sure. But I do think, just like the CNN example, that it's quite a clever idea. In this case, you've got nearly endless amount of free content to pick through, and people who are glad to narrow down and rank it for you. I'm not sure there's a model here to replicate, but it's certainly worth thinking through.

6 Android Apps That Turn Your Phone Into Something More

Here are 6 apps that I've been using to turn T-mobile G1 into more than a typical phone. They are all free, and can be installed by going to the Market application and searching by the name mentioned below.

  • A Online Radio - Turn your phone into a jukebox with unlimited, free music. This app works this magic by giving you access to ShoutCast.com and other radio streams.
  • GeoBeagle - Turn your phone into a GeoCaching tool. Using this app, you can get outside and do some treasure hunting.
  • Sky Map - Turn your phone into an astronomy assistant. This app leverages Google Sky, plus the built in compass and GPS to easily help you find the constellations in your area.
  • Stumble Upon Video - Turn your phone into a channel surfing good time. StumbleUpon is a remarkable service that will recommend surprisingly interesting web content. This app on your phone, does the same thing for video. From gnarly crashes, to French cooking tips, you can see a bit of everything here. And if you don't like what you see, you're just a single click from more content.
  • TuneWiki - Turn your phone into a karaoke machine. I'm not quite sure I completely get this app, but I can tell you that it's possible to type in a song name, and have it and the lyrics pop up in a few seconds. Finally, I can belt out country music and get the words right.
  • Qik - Turn your phone into a TV station. Just sign up with Qik.com and in a few seconds, you can be broadcasting content from your cell phone to the rest of the world. It's all live and in real time. Anyone can visit your personal page and see what you're broadcasting.

Monday, July 06, 2009

Sources For WordPress Themes

I'm often helping customers find just the right theme for their WordPress install. I've been compiling a list of places where quality (or sometimes large quantities of) themes can be found. The list is below, but I'm sure it's woefully incomplete. Can you suggest some other places I should be looking?

So, what theme sites and creators am I missing? Thanks for the suggestions in advance.

Macros and OO Programming

Earlier today I had a pretty typical OO problem. I had a single object which I wanted to replace with a collection of objects. If I had done my programming correctly, all I needed was a simple delegator that would pass on the top level method call to a list of objects. Effectively, turning:

 class Robot {
   void turn(degrees) { 
    // do the actual turning
   }
 }

Into:

 class Gang {
   void turn(degrees) {
     foreach(robot r) {
       r.turn(degrees);
     }
   }
 }

I could have hand written each method in such a delegator, but I'm too lazy for that.

If I were programming in Java and performance wasn't a concern, I'd probably make use of introspection to help get me part of the way there. If this were PHP, or any other language with magic methods, I could have just implemented the delegator as a dynamic function.

But, in this case I'm programming in PLT Scheme, so macros seemed like the right way to go. In no time, I whipped up:

(define-syntax delegator
  (syntax-rules ()
    [(_ (method ...) target ...)
     (make-object (class object%
                    (super-new)
                    (define targets (list target ...))
                    (define/public (method . args)
                      (for-each (lambda (t)
                                  (send/apply t method args))
                                targets))
                    ...))]))

It's used as follows:

 (define gang (delegator [turn forward] (new robot%) (new robot%) (new robot%)))

This reads as: create a new object gang which will delegate the methods turn and forward to the robot% instances passed into it.

I'm sure there are more advanced things this macro could do, but for my purposes, it worked quite well.

Of course, this is really nothing more than doing on the fly code generation effectively creating just the right class with just the right methods to delegate to. Which is what makes macros so valuable, they aren't some esoteric concept - they're simple: they are code that generates code for you. They should be, and often are, a programmer's best friend.

Sunday, July 05, 2009

A Little Historical Perspective, Please

Every once in a while I stumble on an article like this one where the author laments the existence of some modern technology - in this case, Twitter and Facebook.

The author's argument seems to be broken down into two points: (1) he can't keep up with technology, as it's just whizzing by too fast. And (2) think of all the wasted time spent on this junk?

The first point I can appreciate - I was definitely late to the Facebook game, and still don't understand MySpace. Heck, the last video game I truly mastered was Doom, which is so antiquated I can now play it on my cell phone. I think it's perfectly reasonable to accept that some technology will pass you by - that's just life.

The second point, though, really gets me going. Enough so, that I end up writing blog posts like this one. Consider this quote from the article:

Imagine what could have been accomplished by the world’s Facebook population if they used their 13.9 billion minutes in April to plant a garden, go for a walk or accomplish something else a tad more constructive than commenting on someone’s cliche self-portrait photo.

Essentially, the author is saying that technology up to a certain point - in his case, E-mail, was useful. But, after that point, it's turned people's brains to mush. But is really possible to draw a line in the sand when it comes to technology?

Consider e-mail. Were all those silly forwards that used to clog up peoples inboxes a good thing? Or what about the hours people spent on the phone gabbing with their friends that wouldn't have been possible before the land line? Or how about a postcard, how much information can you really write on the back of a postcard - shouldn't you be writing a real letter? And sure, the telegraph could deliver news quicker, but do you really need news at the speed of electricity?

The thing is, all technology can be used for good or bad. That's just how it works. In 1776, you could use the printing press to publish smut, or to create pamphlets to inspire a revolution. In 2009, you can use Twitter for exactly the same purpose.

The fact is, twitter is helping people go for a walk and garden. It's just technology, like all the other advances that have come before it. It's got the possibility for good and evil and it's up to us to find a way to put it to work for good.

There, I feel much better.

Making LinkedIn More Active

I typically think of LinkedIn as a sort of glorified address book. I know it's a safe place to keep all my contacts, and should I ever need to find new and interesting people (read: help me or a friend get a job), I can do so.

Though, poking around today I found two useful features that I think will make LinkedIn a little more active for me.

Personal RSS Feed

Under Account & Settings » RSS Settings you'll find Your Private RSS Feed. This is, as the name suggests, a feed of all the activity that's going on relative to your connections. You can find out who your friends are connecting to and what their up to. It's essentially another event stream, but one more work related than the usual Facebook and Twitter feed.

I think this feed will work well in the Gmail Web Clips area, as the feed isn't essential. With web clips, you get access to these nuggets of information every so often, and if they useful, you can follow up. Otherwise, you can just ignore them.

Status Updates

Apparently, LinkedIn got on the status updates bandwagon, allowing users to tell their contacts what they are currently working on.

I've been using Twitter for exactly this purposes for some time now. Using a site like ping.fm, it's possible to post onto both Twitter and LinkedIn at the same time. The result is that it's now possible to get the status updates out to yet another group of people - those who are paying more attention to LinkedIn than to say Twitter.

In other words, just like Facebook can be used as a distribution network, so can LinkedIn.

Friday, July 03, 2009

A Todo List Tackling Strategy

So I'm back from vacation, unpacked, house a bit cleaned up and fairly well rested. Come Monday, the real fun will begin: getting back to work.

Since I've got back, I've been thinking about the best way to tackle my hefty TODO list. Here's the approach I think I'm going to try: give each item on the list exactly 1 hour of attention (unless I finish it, in which case, I'll move on to the next item). Once I've taken a pass through the list this way, prioritize and schedule the tasks with larger blocks of time over the next week or two.

I don't expect to get a lot completed over the couple days it takes me to go through the list the first time, but I do hope to swap in a great many tasks from my TODO list to my brain.

With all these tasks in my head, I should be able to make better planning decisions. If I'm really lucky, my subconscious will even work on some of the tasks when I'm not paying attention.

Either that, or my head will just explode.

What's you're preferred way to tackle a big TODO list after a vacation?

Thursday, July 02, 2009

Back in the USA

And we're back in the states. Whew. The flight was nice and easy thanks to Shira getting us an exit row.

Now we just need to clear customs and we can make this official.