Monday, November 30, 2009

Joshua Tree Hike: Cottonwood Springs to Lost Palm Oasis - Day 4

Today's adventure consisted of a 7.6 mile hike from Cottonwood Springs to Lost Palms Oasis, with a 2 mile chunk of the Mastodon loop trail thrown in for good measure.

The Lost Palms Oasis, as the name suggests is a real oasis - after 3.5 miles of hiking through the desert, you come upon these large palm trees that just don't belong in the burnt landscape.

I was a bit nervous from the route description that the trek to Lost Palms was going to be a single, unchanging landscape. This turned out to be the farthest thing from the truth. We walked among impossible heaps of rocks, groves of desert trees, small canyons and other desert features. All along the way we were treated to amazing views of the mountains in the distance. It's amazing how frequently the terrain could change in just a few miles.

By including the Mastodon trail we even came across the remains of an old mine. I'm going count that as my historic encounter for the day.

All in all, I can't recommend this trail enough. Even though it was in a part of the park without Joshua Trees, it was still an excellent way to see the area. It probably helped that the weather cooperated - the sun kept us warm through the day, the a chilly breeze kept us from overheating.

After two days of traipsing through the park, I so owe Shira a day of relaxation. I have a feeling she's going to collect tomorrow.

Sunday, November 29, 2009

Visting Joshua Tree - Day 3

Today, Shira and I made our first visit to Joshua Tree National Park. In a word: Wow. I'm not quite sure what I expected to see in this desert park, but it wasn't what we found.

The park is made up of amazing features: there's the stunning Joshua Trees, groves of cuddly looking cacti, rock formations that sprout seemingly randomly from the ground, breathtaking vistas and lots of wide open spaces.

Today we spent most of our time traversing the park in our car, though we took some short side hikes. Tomorrow we will be back for more hiking. Not only is the geography remarkable, but it changes so quickly - one minute you're in a Joshua Tree forest, and the next you're surrounded by cacti with not a Joshua Tree in sight.

Our pictures can't even begin to capture the beauty here. Put it on your list of places to come see for yourself.

Morning In Palm Springs

Here was the view this morning from our hotel window. Thanks to the joys of jetlag, we caught the sunrise. As you can see, it was gorgeous:

Saturday, November 28, 2009

Hiking the Palm Springs Mountains

What a treat we had today! Our family from nearby California made the schlep out to spend the day with us. We weren't quite sure what Palm Springs would offer to keep us all busy, but the town really came through.

We managed to take in an interesting art show; have lunch outside at a booth that was setup to have a rocking-chair type movement to it; managed to hike around some of the mountains near by; had excellent ice cream and even dropped by the casino. It was definitely a fun packed day.

Friday, November 27, 2009

California Adventure - Day 1

Shira and I have decided to squeeze in one more little vacation before 2009 comes to a close. Between our frequent flyer miles, and what each of us finds ideal in a vacation (Ben: hiking, Shira: relaxing), we settled on a week trip to Palm Springs, CA. We flew into LAX last night, and today made our way to Palm Springs.

Around DC, anytime there's a historic momument or site to see, there's a brown sign on the highway that announces it. I have this dream that one day we'll leisurely drive from point A to point B and stop at all the Brown Signs along the way. Of course it never works that way - we're always driving with some purpose in mind, and never have time to pull off and see the random site being mentioned on the sign.

But this trip from LA to Palm Springs was going to be different. We were going to go with no specific plans, and just stopped at whatever random sites we saw.

After driving for some time, the GPS announced we were going to be passing the Mission Inn Museum. That seemed like a random enough site to stop at, so we routed our way there.

The museum turned out to be a tiny 2-room affair in the town's famous Mission Inn. So while it wasn't that exciting, it did allow us to find a nice place to stop for lunch. We also drove by a park with an impressive looking mountain, equipped with gigantic Flag and Cross at the summit. After lunch, we made our way back to the park to poke around.

Turns out, the park was actually at the base of Mt Rubidoux. And while we didn't realize it at the start of our little exploration, there was actually quite a bit to see on this hill. Sure enough, you can make it to the top where the flag and cross are. There's also a host of plaques as well as a world-peace monument and a couple of bridges. It turned out to be a huge treat.

So I got my random site seeing in. Now it's time to head to the hotel and try this whole relaxation thing. It's not my strong suite, but I've been informed that this vacation I should plan to do quite a bit of it.

[More Photos Coming Soon]

Traveling with the Sony Vaio VGN-SR520G/B

I took my first flight with my new Sony Vaio VGN-SR520G/B last night and had a few pleasant surprises:

  • As expected, the size and weight of the laptop did well in a traveling context. The laptop fit well on either my lap or airplane tray table. Though, I was lucky enough to be an Emergency Exit row, so I did have a bit of extra space.
  • The battery lasted longer than I did. I got 3 1/2 hours out of it before I was wiped out, and it claimed there was another 45 minutes of power left. I'm done complaining about the battery life of this laptop. The battery meter may suck, but the actual device can go for 4'ish hours on a single charge which is fine by me.
  • I usually charge my cell phone by plugging the USB cable into the laptop, rather than carrying along an extra AC adapter. With laptops past, the laptop would have to be open and awake for the cell phone to charge. Not so with the Vaio - even though the screen was closed and the laptop asleep, my G1 kept charging throughout the night. This was a nice surprise.

All in all, I continue to be impressed with the laptop.

Wednesday, November 25, 2009

Shira's Blackberry Bold 9700 Review

It's been almost three years since I got my Blackberry Pearl. Since then, I've used multiple Blackberries for work, and also had the Blackberry Curve (for which I did no review). Being a slight Blackberry junkie (who somehow managed to let the Curve 8900 come out without buying it), I was compelled to go out and buy the new Blackberry Bold 9700 just a few days after T-Mobile released it. While in some ways, the Bold is not a giant leap from my Curve, there are some highlights I'd like to mention given regarding my initial thoughts on the device.
  • First of all, Blackberry continues to impress me with how easy it is to transfer from one BB device to another. I simply had both devices plugged into my laptop and the Blackberry Desktop Manager software transferred my data/settings (including to the browser history level) from my Curve to the Bold. Outstanding.
  • They replaced the trackball with a touchpad for movement. This works very well. The only downside is that for someone (like Ben) used to a touchscreen phone, he may be inclined to also think that the screen is a touchscreen, and I did have to wipe off an ugly fingerprint from the bright, gorgeous screen.
  • Battery life is fabulous. Giving into some old wives tale, I still run down the battery a time or two when a phone is new. Well, it took me 5 days of medium usage to run this battery down.
  • There is a 3.2 megapixel camera which takes nice photos (haven't tried the video yet).
  • While Blackberry still gets a bum rap for its browser capabilities, running this phone over 3G has definitely increased my browser usage, and I think they have made some slight browswer improvements.
  • While Blackberry's operating system/menus/applications remain somewhat primitive, there are certain improvements such as the number of choices you have in constructing profiles, and visual improvements to make the applications and interactions look a little (very little) less stark.
  • All in all, it's a slimmed down, souped up, upgraded version of the Curve. It runs faster, it's sleeker and remains true to its Blackberry roots to provide a great messenging phone.

After only 6 days of use, my only negative comment so far is that they changed the USB adapter size from the standard that all of my past Blackberries have had. Thus, while I would have had a dozen extra adapters lying around, I am currently beholden to the one that came with the phone.

Will the Bold 9700 rock your world? No. Will it prove to be a good upgrade? I'm hoping so.

Gifts and Geography - Two Wired Finds

Man I love Wired Magazine. Here are two finds from the latest issue that I thought were worth sharing:

  • Playlist: perpetualkid.com. This month issue recommends the site perpetualkid.com as a clever gift site:
    Early adopters can be tough to shop for — they already have what’s hot. Fortunately, Perpetual Kid helps out stymied gifters. Amusing and occasionally useful items like corn-dog-flavored lip balm, a Robot Sniffle tissue holder, and a saw-shaped cake knife will neither break the bank nor duplicate what’s already on the giftee’s desk.

    And sure enough, if you check out the site you'll see they deliver: From vampire pacifiers to clocky, the motoring clock - they've got it all. It's sort of like thinkgeek, minus the practicality.

  • Netscapes: Tracing the Journey of a Single Bit. Next time someone complains to me about a slow website or delayed e-mail, I'm going to send them over this article. In it, it shows you a sampling of the the physical locations your data has to pass through before it can arrive. When you think about all the cables and devices that a single bit of data has to pass through, it's a miracle the Internet functions at all. Consider the shot from Kansas City, Missouri:
    The men who built the transcontinental railroad didn’t know it, but they were clearing the way for the Web. Global Crossing uses the old Iron Horse’s right-of-way as the main vein for its long-haul data pipes. Keeping information humming across a 3,000-mile-wide landmass requires utility huts like this one (on left) every 50 miles — even the highest-grade optical fiber has imperfections that cause the signal to weaken as the countryside flashes by. Filled with dense wave-division multiplex amplifiers, these sheds goose the pulses of light and keep bits flowing alongside our amber waves of grain.

    Think about that - every 50 miles there's a structure that has to be there, and be in perfect working order for your data to arrive (OK, not exactly true - the joy of the Internet is that it can theoretically re-route data around trouble spots. But still). Like I said, it's mind blowing.

Tuesday, November 24, 2009

Adventures in Manscaping

First, let me say that I very much like where I get my hair cut usually. They're courteous, fast, reasonably priced and get the job done. Heck, they're even a local business, so I can feel good that I'm not going to some chain.

But, it's also no secret that Shira's far from impressed with my usual doo: a #2 trimmer on the sides, and a #4 on top. So, for some time, she's been suggesting I try her usual stylist, Redouane, of Salon Anu.

My natural first, second and third reaction were all: are you kidding me? Me, get a fancy shmancy haircut - but why? And I'd probably end up having to do some absurd avocado treatment to my hair on a daily basis. And besides, I'm a guy, guys need trimmers, not stylists.

I'm also up for trying new things and little adventures, so I finally let her make me an appointment.

OK, some of the experience felt a bit too froo-froo for me (the offer of wine while I waited, or 10 minute shampoo-conditioning-massage thingy), but overall, I was really impressed. Redouane actually used significant amounts of logic to figure out how he was going to cut my hair (my opinion in these matters really never came up) and he was definitely a man on a mission as he did more than just hack off hair like I'm used to. I definitely made the man work tonight.

He even left me with a haircut that wouldn't require gel or other special maintenance (like, say, combing).

Shira was witness to all this (I suppose to keep me from chickening out), and got her biggest thrill as Redouane asked me if I wouldn't mind if he trimmed my eyebrows. Again, I don't think he was really asking to get my opinion, so much as to warn me not to move, so as to avoid a Best Friend's Wedding moment.

Redouane also made it clear to me that he wasn't going to be able to make Shira's dreams of having a perfectly hair-styled husband come true in one session. This was going to be a long term project. I was under strict instructions to return in 2-3 weeks for a little cleanup. Yikes. It looks like this adventure is just getting started.

Before

After

What The Heck? Moment

And you're doing what to my eyebrows?

This whole experience has been a fun reminder that it's nice to hurl your preconceived notions out the door every once and while, and just try something new. Especially if said new thing will grow back in just a few weeks.

The Onion and The Constitution

I found this article in The Onion to remarkably funny. The headline says it all: Area Man Passionate Defender Of What He Imagines Constitution To Be.

"Our very way of life is under siege," said Mortensen, whose understanding of the Constitution derives not from a close reading of the document but from talk-show pundits, books by television personalities, and the limitless expanse of his own colorful imagination. "It's time for true Americans to stand up and protect the values that make us who we are."
...
Right there in the preamble, the authors make their priorities clear: 'one nation under God,'" said Mortensen, attributing to the Constitution a line from the Pledge of Allegiance, which itself did not include any reference to a deity until 1954. "Well, there's a reason they put that right at the top."

"Men like Madison and Jefferson were moved by the ideals of Christianity, and wanted the United States to reflect those values as a Christian nation," continued Mortensen, referring to the "Father of the Constitution," James Madison, considered by many historians to be an atheist, and Thomas Jefferson, an Enlightenment-era thinker who rejected the divinity of Christ and was in France at the time the document was written. "The words on the page speak for themselves."

I suppose it's only funny because it's true.

More, More Space Place

Continuing on our cleanup theme, Shira and I decided we'd redo the closet in upstairs 2nd bedroom. The HomeDepot style wire-shelving was beginning to look fragile, and more importantly the configuration of the closet was more storage based rather than people based. In other words, it was holding our crap, but it wasn't working as a guest room closet.

So we returned to our friends at More Space Place, and had them whip up a closet configuration that would work for us. We've been so happy with the work they did previously, that it was a no brainer to go back. After years of use, I can say that the closets they install are solid and hold up to wear and tear.

They were just as happy to design our basic bedroom closet as they were our large walk in one in the bedroom. In fact, they may have even liked the smaller one better, as space is their specialty.

The crew that installed the closet did a good job too, being efficient and clean.

Now if only the closets would sort our stuff, recycle, toss and save, the right items and put it all away neatly, then I'd truly be happy.

Before

After

As you can see, the bias of the closet is more towards storage than hanging clothes. But, at least there's that option now.

Monday, November 23, 2009

Man Tip

Usually you should ignore anything resembling relationship advice that comes myself. But this time, I know what I'm doing...

Bailey Banks and Biddle (http://www.baileybanksandbiddle.com/), the jewelry chain, is going out of business and their stock is 50'ish percent off. I hit one of the local stores here and confirm it's really so.

So here's the tip: find out if there's a location near you (http://www.baileybanksandbiddle.com/stores.htm), and if there is stop, by and get you significant other something. And if you have no good reason to buy her something, even better. Chicks dig that, though don't ask me to explain why that is.

Like I said, I stopped by and the selection was pretty picked through, but still worth the trip.

Thanks to our friend Jenna for the original tip!

Sunday, November 22, 2009

Two More Laptop Indifference Strategies

Continuing on my theme of laptop indifference, here are two more strategies I plan to implement:

  • Rotate among laptops - typically, I have my "main" laptop plugged into an external monitor and keyboard, and my older laptop would sit around collecting dust. My plan is to switch off which laptop is the "main" one on a weekly basis (plugging it into the monitor and keyboard), and use the other for mobile tasks.

    This should keep both of my current laptops in sync, and will make grabbing a laptop a little less of a hassle as I won't need to disconnect it from the monitor and keyboard.

  • Use both laptops simultaneously - Using synergy it's possible to use one keyboard and monitor among a number of different machines. Synergy is really remarkable software and every time I use it I'm blow away. I'm especially amazed that it works so smoothly between my Vista laptop and Windows 7 laptop. And it hasn't been updated since 2006!

In hindsight, both of these strategies seem so obvious. Yet, once you get into a rythym of working a certain way, it's never easy to break it. But this effort, I think, is worth it.

Friday, November 20, 2009

The Path To Laptop Indifference

I'm really loving my new laptop, and I'm pleased with the relative ease in which I've been able to switch to it. Thanks to packages like Xampp, what used to be days of configuration to get a development environment up and running, can now take a few minutes.

This experience has got me thinking more and more, that I one of my real goals as a business should be laptop indifference. That is, I shouldn't be anchored to one or more pieces of hardware.

This is an admirable goal, as it serves as both catastrophe planning (think: laptop gets stolen, dropped, etc.) as well as increases my mobility options (think: can fix issues from an internet cafe, or over a cell phone). But getting there isn't easy. Here's the current approach I'm using to attain this - so techniques here on tried and true, others are new for me.

Got any suggestions for achieving complete hardware indifference? I'd love to hear them!

TaskHardware SpecificLaptop Indifferent ToolProsCons
Document creationMicrosoft OfficeGoogle Docs Collaboration ability; Access from anywhere - including mobile Functionality is still basic
NotesText files and hand written notesPersonal Wiki Access from anywhere; Version control; Well organized Loss of convenience
Project files (including source code) Local subversion repository Remote Subversion Allows for development on multiple machines Requires a remote server of some kind
General programs and tools Installed locally Installed locally, and software a master list maintained List helps to speed up install process by allowing for setup up front, rather than as each tool is needed Crude solution and one that needs to be improved upon
Browser Bookmarks bookmarks local to browser Use Xmarks to remotely synchronize bookmarks Convenience of local bookmarks, with remote sync ability None?

So far, I've found that by sticking to the above tools, I'm actually able to jump fairly easily between my older and new laptops.

So what tools and practices should I add to the above list?

Thursday, November 19, 2009

Could the pragmatists win on health care?

I had a chance to skim the letter from the CBO to Harry Reid on the spending impact of Patient Protection and Affordable Care Act. While I won't claim to fully comprehend the numbers, I will say I was pleased to see the following discussion (on page 4) about the so called public option:

The options available in the insurance exchanges would include private health insurance plans and could also include a public plan that would be administered by the Secretary of Health and Human Services (HHS). The public plan would negotiate payment rates with all providers and suppliers of health care goods and services; providers would not be required to participate in the public plan in order to participate in Medicare. The public plan would have to charge premiums that covered its costs, including the costs of paying back start-up funding that the government would provide. State governments could elect not to make the public plan available in their state. The legislation also would provide start-up funds to encourage the creation of cooperative insurance plans (co-ops) that could be offered through the exchanges; existing insurers could not be approved as co-ops.

In other words, for the debates: Should there be a public option? and Should there be co-ops instead of the public option? the answer is a resounding it depends. And I like that.

I think it would be cool to see the different approaches states take. If all goes exceptionally well, over time, some consensus should be found.

I also found it interesting that the letter, on page 10, notes:

The proposed co-ops had very little effect on the estimates of total enrollment in the exchanges or federal costs because, as they are described in the legislation, they seemed unlikely to establish a significant market presence in many areas of the country or to noticeably affect federal subsidy payments

If I'm reading that right, the CBO doesn't think the co-ops will have that big an impact. That's OK, and I'm still glad to see them in the mix. What, if after all, they turn out to be a better option than the so called Public Option? By having them as an option, we should get to see this.

Sure, by leaving the choice up to states, the debate on these issues continues. And that's also a good thing. The whole notion that we will get this 100% perfect, the first time around, is a down right silly goal.

The Garmin 855's Maiden Voyage

This is a crude photo of our brand new Garmin nuvi 855 GPS in action. For the less than 1 mile trip to the gym it performed wonderfully.

The real accomplishment in my mind though, was the setup. To full appreciate how incredible it was you have to consider the good old days of GPS setup.

Thinking back to our first GPS, I recall setup went something like this: (1) charge the device for 24 hours before doing anything. (2) Turn it on, outside and in the wide open, and wait the 20+ minutes for the device to scan the globe and find your location. (3) Using special mapping software on your desktop, select the parts of the country you wanted on the device (naturally, the memory card wasn't big enough to select it all). (4) Wait while a master map file was compiled and copied to the device via some cable that was always being misplaced. Finally the device was ready to use.

The Garmin 855's setup went like so: open up box, put in battery, turn on, answer some basic questions, and we ready to use it. While answering the setup questions, the satellite homed in on our location, even though we were inside.

I noticed the package came with an extra do-dad*. I checked the manual, and apparently it was a hands free voice activated trigger. I pulled the plastic tab from the batter compartment, pressed the button and the GPS chirped. I said: Go Home and it kindly told me I needed to set my home address on the device. A fair point.

At this point I'm thinking, holy smokes, I've got the computer from the USS Enterprise in my hand.

To be completely truthful, the speech recognition isn't perfect. When we ask for a route to Bally's it gladly responded it would get us to a deli. How nice of it. But still, it was impressive none the less.

This all has me wondering - in another year or two, when we buy another GPS new features will be added then? If they can keep the pace they've been setting so far, they're going to be something really impressive.

It's probably also worth noting that we bought the GPS off of eBay from yourelectroniczone. The device was sold as refurbished, but appears by all accounts to be brand new. From a shopping perspective, we couldn't ask for anything more than what we got. This turned out to be a good reminder that eBay is still an excellent way to save money on electronics.

*For the record, Shira was the one who shopped for and purchased the GPS, so she knew about the voice activated features

Wednesday, November 18, 2009

NuGram - an architecture worth pondering

Dominique Boucher was kind enough to document the architecture of the NuGram web service. It's an interesting mixture of Scheme and Erlang, and serves as an excellent reminder that there's more approaches to developing scalable software than just Apache + MVC (aka: PHP, Ruby, Java, etc.).

The part that really got my attention, though was:

Most requests to the RESTful API are done in the context of a session. Each session is associated with an Erlang process and the application keeps a mapping between the session ID and the process for the session in the Mnesia database (it is rather cool to store things like process IDs in a database!). So when the application receives a request, it extracts the session ID from the request URI, finds the corresponding process in the database, and simply forwards the request to that process.

Think about that: a request comes in, and you find the running process that is sitting around, ready to serve it. No process yet? Then create a fresh one. And when a session expires, you kill the process.

What a remarkable architecture (and so perfect for Erlang)! It provides an usual level of modularity, as you can effectively program a single process for a single interaction, and then let Erlang scale it all up.

From a scalability perspective, this is huge, as the system is designed from the ground up to work with individual processes - whether those processes are running on a single machine, or spread out among machines, I assume could be transparent.

As an experiment, it would be interesting to compare traditional session programming, versus 1-session-per-process (like above), versus web continuations. I wonder if one of those models is easier to program with than the other. And I wonder if one scales better than the other.

If nothing else, it makes for an excellent thought experiment.

Thanks Dominique!

Update: Dominique was kind enough to address the thoughts above on his blog. So check it out, he's got some excellent points.

Mesh Potato - One Yummy Project

The Linux Journal ran a neat little article on the Mesh Potato project. I have to say, as projects go, I'm really impressed.

First, what's a Mesh Potato?

As we were debating the options, someone grabbed an ATA (Analog Telephone Adaptor) and an OpenMesh AP and held them together and said, what we need is these two devices in one. And thus the idea for a Mesh Potato was born. The name Mesh Potato came from combining Mesh [as in Mesh networking] with POTS (Plain Old Telephone Service) and ATA. Patata is Spanish for potato and Alberto Escudero-Pascual made the link…. The Mesh Potato…. a Mesh enabled WiFi device with an RJ11 port to connect an inexpensive regular phone and an RJ45 to connect any IP device.

In other words, a Mesh Potato is a bridge between an ordinary phone line and a WiFi computer network.

And why would need such a thing? The current use is to develop a Villege Telco - a cheap telephone company that can easily be setup in a remote location. Like I said, I'm impressed by the effort - and here's why:

The software is slick. I love the whole mesh networking model. It's actually one of the cool features from the OLPC project that I haven't seen mainstreamed yet. Why, when I'm at a hotel or airport, can't I just become a mesh point and join forces with those around me to build up an instant and free network? OK, it's a security nightmare, but still - seems like it could be really useful.

The social impact is impressive. Think about it, how hard is it to build infrastructure without a large central authority behind the task? And here's evidence that you don't need to build infrastructure that way. I also wonder if the technology has a life beyond the third-world? What about using the Mesh Potato in a Katrina type situation. How valuable would it be to have the ability to establish a communications grid by simply walking through neighborhoods and dropping off devices?

The technology is open to all. The project not only makes use of open source software, but also open source hardware. There's a trend taking shape that suggests you don't need to start with off the shelf hardware - and that seems really promising. I'm not a hardware geek, so this is all conceptual to me. But, I love the idea of being able to make a device that does just what it's supposed to - rather than having to put up with a totally general purpose one. Think the difference between a TiVo and running television software on your PC.

As if that all wasn't enough, I think they nailed the name too.

Tuesday, November 17, 2009

Gotcha Of The Day: More PHP Malformed MIME Mail Issues

What is it with me and PHP MIME mail? The Mail_Mime package couldn't be easier to use, and has a straightforward tutorial that sums up everything you need to know.

Why then, today, when I wanted to attach a file to a mail message, were my messages consistently coming in malformed? Specifically, messages came in the following shape:

Date: Tue, 17 Nov 2009 14:26:12 -0500  « Headers start here
Message-Id: 
To: foo@bar.com
Subject: Foo needs some bar
MIME-Version: 1.0
From: bar@foo.com


--=_4817ceeae1593a82dcfe475697feb180 « Body starts here
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="ISO-8859-1"

In other words, the body MIME content delimiter was considered as though it was part of the body.

My code was essentially right from the tutorial:

  $mime = new Mail_mime("\r\n");

  $send_to = 'foo@bar.com';
  $from    = 'bar@foo.com;
  $subject = "Need more Foo!";
  $message = "Please <b>send foo's</b> immediately";

  $mime->setHTMLBody($message);
  $mime->setTXTBody(strip_tags($message));
  $mime->addAttachment(file_get_contents($path), 
                       'application/octet-stream',"My Data.xls", false);
                         

  $headers = array('From' => $from,
                   'Subject' => $subject);

  $headers = $mime->headers($headers);
  $body    = $mime->get();

  $mail =& Mail::factory('mail');

What I eventually determined was the headers generated by $mime->headers(...) was missing critical ones like Content-Type.

But why?!

And then I realized one key difference between my code and the docs. I made the following switch:

  $mime = new Mail_mime("\r\n");

  $send_to = 'foo@bar.com';
  $from    = 'bar@foo.com;
  $subject = "Need more Foo!";
  $message = "Please <b>send foo's</b> immediately";

  $mime->setHTMLBody($message);
  $mime->setTXTBody(strip_tags($message));
  $mime->addAttachment(file_get_contents($path), 
                       'application/octet-stream',"My Data.xls", false);
                         

  $headers = array('From' => $from,
                   'Subject' => $subject);

  $body    = $mime->get();             // <- Must be first!
  $headers = $mime->headers($headers); // <- Must be second

  $mail =& Mail::factory('mail');

Sure enough, the call to $mime->get() has side effects, which make $mime->headers(...); properly function.

Man, that strikes me as poor style. Chalk this up to another vote for side effect free programming, will you?

OK, I think I've now had every issue I can have with PHP and MIME e-mail. It's time for a new gotcha.

Monday, November 16, 2009

Gotcha Of The Day: junctions don't work on Windows 7

I was setting up my dev environment on my new laptop and I ran into some strange file access issues with junction points I have in my web tree.

Both cygwin and cmd.exe showed the junction points I created as valid, yet PHP's require_once couldn't read them.

I did notice some strange output in the DOS listing of the junction point which got me concerned:

11/16/2009  05:47 PM         foo [\??\C:\Users\ben\bar]

After a bit of poking around, I learned something amazing - Windows 7 now comes with soft and hard links built in. The right command to use is mklink.

I replaced my old call of:

  junction target existing-dir

with:

 mklink /J target existing-dir

And now the link was created correctly - PHP, cmd.exe and Cygwin were all happy.

I'm amazed. Finally, Windows gets file links. Look at that, baby's growing up.

Saying Goodbye

Yesterday, we did a through cleaning of one of our 2nd bedrooms, which meant saying goodbye to a whole bunch of computer hardware I was never going to use. No, it wasn't easy - but I had both Shira and David on hand to keep me focused on my task. Here's a random sampling of a few items that are now no longer with us (sigh.)

Goodbye ISA cards I can barely identify. Besides not knowing your purpose, I no longer have a computer to fit you into: Goodbye Syquest cartridges and drive. I know that at one point being able to store 1GB of data on you was a big deal. Alas, you've been superseded by the thumb drive. Life is hardly fair. Goodbye mess of cables under my desk. Sure, you inspired a Halloween costume, but it was time to say goodbye.

Goodbye dipper - my last desktop in the house. Yes, you ran Linux reliably for years, and for that I'm forever greatful. But you've been superseded by our wireless router, which does everything you were doing but is the size of a hardback book.

Goodbye 6.4Gig hard drive. I know in your day, you were something special. Sorry that you've been syquested, as were also superseded by a thumb drive. It was fun while it lasted. Goodbye my 300/1200/2400 baud modem. It has been years since you've been the top of the line, but it's true, you were once something really special. Alas, my children and grandchildren will hear stories about you, and about how good they have it because you are but a memory.

The most exciting part about yesterday was that at 4:00pm we put about 6 items on our curb with a big FREE sign and by 5:00pm one of them was gone. By 6:30am, the rest were too. It's the best form of recycling one could ask for.

Sony Vaio VGN-SR520G/B Battery Life

One of my biggest concerns about my new Sony Vaio VGN-SR520G/B was the poor battery life. After fully charging and fully discharging the laptop 3 times, I ran a test where I timed exactly how much time I could get out of a single 100% full battery. This did include putting the laptop top sleep a couple times. It also included me turning down the screen as much as possible.

The answer: 3hours, 27 minutes.

That's not going to set any sort of records, but is certainly respectable. When you consider it doesn't have a monster battery in it, that's all the more impressive.

The battery meter on the laptop was pretty unreliable - at 100% it claimed I was going to get 2.5hours of batter life. I guess I'd rather it underestimated, rather than over.

With this little experiment behind me, I think I'll stop worry about the battery, and will just do what I always do - plug it in.

Saturday, November 14, 2009

Review: Mexicali Blues

I very much wanted to like Mexicali Blues in Clarendon(2933 Wilson Boulevard, Arlington, VA). It's a local place, that seemed like an excellent alternative to the chains. They even have some interesting vegetarian choices on their menu, like Jauna's Tamales.

Alas, it just wasn't meant to be. The food was delivered quickly enough, but otherwise the service was non-existent. The salsa had a smokey flavor which some must love, but I found to be blah. The chips were nothing special, and may have even been - dare I say it - stale. Juana's Tamales was nothing special, and the fish tacos were just OK (Shira actually liked these).

So, it looks like Mexicali Blues won't become our new local choice for Mexican food.

Even with my lackluster visit, I still do suggest you try the place out. The very flavors I found to be nothing special may be exactly what you're looking for.

Wine Lovers Unite (in Washington DC)

A friend of ours has a business where they offer cool wine related services. They just started a Meet-Up group in the DC area. Their description:

This Meetup group is intended for anyone who wants to join a community of people who love tasting and learning about wine in a fun, interactive, and innovative environment. Our philosophy is that wine is best enjoyed with friends, in an environment that is not pretentious, unassuming, and open to everyone seeking to learn more about wine. There are no dues and no commitment to make it to an event every month. We will attempt to hold Meetups in a variety of locations around the DC metro region, in order to truly include as many interested participants as possible.

If you're in the DC area and you're a wine aficionado (or better yet, want to become one!) you should check it out. I'm sure you'll have a great time.

Friday, November 13, 2009

Thinking Outside The Web

I found this story enlightening. Here's the question it raises: What's the fatest way to move 120 Terabytes of data from Point A to Point B?

FTP? BitTorrent?

The answer: Fedex it.

GO that route, and all that data would be moved in 24 hours, rather than the 2,664 (4 months) it would take over a (relatively fast) web connection.

What an excellent reminder that innovation and problem solving doesn't always mean using the most technically advanced solution.

Firefox Profiles: Separating Work and Play in Firefox

I'm setting up my new laptop, and one practice I plan to carry over there is the creation of multiple Firefox profiles.

But Why?

While Firefox is immensely helpful for work (Google docs, "researching" stuff on the web, example) and development (Firebug, and other dev plugins), all these uses can result in painful performance. It's not unusual to have Firefox using over half a gig of memory, and to be responsible for bogging down my system.

To help manage this pain, I've been using multiple profiles. This allows me to have one Firefox setup for development and one for other tasks. My regular tasks don't need to be bogged down with plugins and such used by my development instance; and my development instance can be shut down without losing access to mail or docs. Incidentally, having multiple profiles allow me to have separate bookmarks, which has also been handy.

Setting It Up

To setup multiple profiles, go to: Start » Run and enter Firefox -ProfileManager. This should bring up a window like so:

You can create as many profiles as you'd like. My main two are surfer and developer.

Next, right mouse click on your desktop and go to New » Short Cut. Browse to the location of Firefox.exe (probably in: c:\Program Files\Mozilla Firefox\ or something). Then name the shortcut something clever like Dev or Surf.

OK, you're just about done. Once the shortcut is created, right click on it and select properties. You should see:

Change the target from:

  "C:\Program Files\Mozilla Firefox\firefox.exe"

to:

  "C:\Program Files\Mozilla Firefox\firefox.exe" -p PROFILENAME -no-remote

Where PROFILENAME is the name of a specific profile you created above. You can also right click on the shortcut and click Pin to Start Menu, which will give you another quick way to access a specific profile.

There you have it - different, configurable instances of Firefox. Happy surfing!

Thursday, November 12, 2009

Gotcha Of The Day: Getting Postfix and Google Apps to play nice

Here's the situation I was in: I had a Linux box running postfix sitting on domain foo.com. I wanted to setup Google Apps to handle mail for the domain, rather than the Postfix and the other standard Unix tools.

Once I changed the MX address for foo.com, the public's e-mail was routed correctly to Google Apps.

But, e-mail sent from the foo.com server itself was being handled locally, as postfix didn't bother checking the MX server and such.

I looked around, and found a variety of Google Apps + Postfix solutions, but none seemed to do quite what I wanted. It doesn't help that I'm not exactly sure I know what I want.

The solution I arrived at does have the value of being simple - though I'm not entirely confident about it. I went into my /etc/postfix/main.cf and changed:

 mydestination = $myhostname, localhost.$mydomain, localhost

To:

 mydestination = localhost

In other words, I told the postfix mail server that messages sent to bob@foo.com weren't his to handle.

The result is that messages are properly routed to Google Apps instead of being dealt with by the local postfix install.

My big concern, of course, is SPAM. The postfix server is sending outgoing mail, and I'm concerned that it's not MX handler that's doing it. I did get a bit of a warm and fuzzy feeling because I see messages sent by postfix had the headers:

Received-SPF: pass (google.com: domain of bob@foo.com designates x.y.z.k as permitted sender) client-ip=x.y.z.k;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of bob@foo.com designates x.y.z.k as permitted sender) smtp.mail=bob@foo.com

It looks like I'll be keeping a close eye on the mail log to ensure that mail's being routed just like I hope.

If you've got an opinion on this solution - good or bad - I'd sure love to hear it.

Sony Vaio VGN-SR520G/B First Impressions

Earlier today Shira walked into my office with a pleasant surprise: she had bought me the Sony Vaio VGN-SR520G/B laptop I had been eyeing. She knows how long I can dwell on a decision like this, so she doesn't even bother getting me involved in this kind of purchase.

So far, everything I've heard about the laptop seems to pan out: it's lightweight, has a beautiful screen, isn't cluttered with trialware, and has an overall clean feel to it. The main downside appears to be the battery life - which it reported as having 2-3hrs of, instead of the store promised 6.

Personally, I'm finding the keyboard to be quite usable. I like how they have fewer physical keys, yet have spread them out generously. I'm also digging this SD card slot.

With an hour or so of minor web surfing under my belt, I guess it's safe to say I would recommend this laptop. Though I'm eager to get my development tools on it to see how it really performs.

I found my list of essential software to be handy to getting the laptop setup. I figured I might as well update the list with my current list of essentials, and surprisingly, the list got smaller not larger.

The laptop comes with Windows 7, and so far, I'm cool with that. I'd actually like to find some tutorials on what's new in Windows 7, as I'd like to actually make use of the newest goodies, rather than to rely on the same tricks I've been using since Windows 95 (yes, I'm looking at you Alt-Tab). Heck, I found the Windows Key + Arrow Keys repositions in the current window on the screen, which might be handy. Yeah, I've got plenty to learn.

Anyone have any Windows 7 tutorials they'd like to suggest? Or perhaps tools I should consider installing?

Wednesday, November 11, 2009

Finding My Way On FreeBSD

I recently landed a client who's hosting environment wasn't the usual Linux or Windows - it was FreeBSD. Even though FreeBSD and Linux share a common philosophy, I still found myself quite disoriented after logging in. Here are a few items I managed to figure out in a hurry:

  • I wanted to install GNU screen, and figured there had to be an equivalent to yum on FreeBSD. And of course there is, it's pkg_add. I ran the command:
    sudo pkg_add -r screen 
    
    and a few seconds later, screen was installed.
  • The find command kept error'ing out on me when I ran it. Turns out the syntax is just a bit pickier on FreeBSD than Linux. For example, I was entering:
    find -name 'foo'
    
    but should have been entering:
    find . -name 'foo'
    
    The starting path, which is optional on Linux is required on FreeBSD. This cheatsheet proved useful for untangling this one.
  • I went to restart apache and realized the /etc/ tree was significantly different on FreeBSD than on Linux. Apparently the preferred way to restart apache is:
    /usr/local/sbin/apachectl stop
    /usr/local/sbin/apachectl start
    
    I found this howto to be just what I needed to resolve this issue. In fact, freebsddiary.com looks like it might be a handy resource going forward.
  • Bonus: While not FreeBSD specific, I did need to figure out how to run PHP4 and PHP5 on the same box at the same time. Unfortunately, simply loading both modules doesn't work. I ended up keeping PHP4 as a module, and kicking off PHP5 via CGI. The solution is outlined here. I'm not in love with performance ramifications of running PHP5 out of cgi-bin, but all things considered, it's a clean solution.

It's amazing how the littlest things can make working in a new server environment feel like your only limping along. Luckily, the leap from Linux to FreeBSD is painless enough that I was jogging in no time.

Monday, November 09, 2009

Rochester Meets the Twins

While in Rochester, celebrating my Grandpa's 90th birthday, we got the extreme pleasure of getting to take care of the twins for a bunch of time, as they came in for the festivities. Have we mentioned lately how cute they are? They are 7 1/2 months old now, and are starting to learn how to crawl, albeit most of the time they wind up in reverse. It was also fun to have our other niece and nephew and other family members get to meet the twins for the first time, as this was their first Rochester appearance. Oh how they were spoiled this trip!

We can't thank their parents enough for the time we got to spend with them, and hope that they enjoyed some quiet time. Enjoy the photos, we tried to limit them to just the essentials, but it was hard to pick and choose!

Celebrating Grandpa's 90th

This past weekend we celebrated my Grandpa Irv's 90th Birthday. My Grandpa is a truly amazing man. Even at 90 years old and blind from macular-degeneration - he's still the life of the party. Man, can he tell a story. And some of them are even partially true. Like the one about the time when they went fishing, and my dad fell off the pier; or the time his dad made bathtub gin - in their bathtub; or the time as a child he took a joy ride with another kid in a friend's parent's model-T.

It's no surprise then, that so many showed up to celebrate with him - from California, Las Vegas, DC, Chicago, Philly and Boston. He had his 4 great grand-children there and lots of friends.

He's a remarkable guy, and one that I'm so blessed to have in my life.

As you can imagine, we took just a few photos of the weekend...

Sunday, November 08, 2009

Tool of the day: CrossLoop

My Mother-in-Law got a shiny new HP laptop and naturally I was glad to tweak and tune it for her. We were in town at the time, so I had physical access to the machine. However, my time with the physical computer would end up being relatively short, as we were head out on a flight later tonight.

So, rather than attempt to fully configure her laptop, I thought I would instead focus on installing a remote access solution. That way, I could tweak things from the comfort of Washington, DC - all without having repeatedly ask: "OK, now read me what's on the screen..."

In the past, I've used - and loved - showmypc.com. It's one of the easiest and streamlined ways I know of to get access to a remote user's desktop.

I was considering signing up for their $5/month remote solution, which would allow me to access my Mother-in-Law's computer without her needing to do anything (and yes, I would completely behave myself). But, I thought that may be overkill.

Instead, I installed CrossLoop on her system. CrossLoop is actually a marketplace where you can find folks to help you with your computer. I have yet to use their service. Though, they offer free remote access software, which you can use even if you don't use the marketplace.

I've found their remote solution to be lightweight, and nice and easy to use. To use it, all my Mother-in-Law will need to do is click on the desktop icon I put in place for her, and select the share option.

As an added bonus, the CrossLoop community may actually come in handy for her, serving to tackle issues that are over my head.

Anybody have any CrossLoop experiences they'd like to share? If their service is anywhere near as good as their tools, then they're really on to something.

Friday, November 06, 2009

Trivial Pursuit - Bring Honor To Your Gender

Trivial Pursuit has this slick advergame: TrivialPursuitExperiment.com that's make the rounds. The concept is simple - you answer questions, and earn points for your gender. I suppose, in theory, showing which is the smarter sex (who spends more time on the Internet).

The game play is really well done, and worth checking out for that reason alone. The integration with YouTube videos showing one gender or the other in a bad way, is a nice bonus.

Alas, I didn't help the men's side out much, as the questions I tried I both got wrong. But that just means I need to focus more on playing more, and working less, right?

House Call On Washington - Chutzpah Meets Health Care

I caught a snippit of the House Call on Washington, the GOP rally against the Health Care bill, on the radio today and I figured I'd check C-Span to see if they had the whole shindig. And fortunately, they did.

I figured I'd listen to it in the background while I hacked away on some code. But wow, the speakers were so extreme, I couldn't help but listen intently. In fact, I only made it through 20'sh minutes of it before I realized I was just listening and not actually programming.

Here are some choice quotes from Jon Voight, an actor (apparently, not all of Hollywood is in the bag for the Dems) at around 21:02:

"President Obama has his own obsession with trying to ram this health care bill through to create a socialist America."


"[Obama's] only success has been taking apart America piece by piece."

"Could it be that he's had 20 years of subconscious programming by Reverend Wright to damn America?"

He also connected Obama to the corrupt Acorn and his corrupt czars.

Look, I'm all for disagreeing with the president. Heck, don't like him as a person, if you want. But, "obsession" to create a socialist America through health care. Really? And 20 years of "subconscious programming?"

Wow.

I also caught the actor who played Cliff from Cheers chatting (this is from 18:00). He told a story about how the Democrats in power are really Woodstock Democrats. And what did he mean by that? Well, that they were like the folks at Woodstock, which, when it started to rain and the whole place went to hell, were railing against the National Guard who were coming to save them.

What this story has to do with health care reform, I'm not exactly sure. But here's the thing - the national guard, in that context, was providing disaster relief. Isn't that an example of government coming in to save the people, and isn't that counter the philosophy that government is the problem, and not the solution?

Like I said, after about 20 minutes I realized I wasn't going to get anything done so I had to turn it off.

Perhaps what struck me the most wasn't what was being said, but that there are high ranking Republican representatives present that apparently buy into this talk. That amazes me.

Give it a watch and let me know what you think.

Wednesday, November 04, 2009

Blog of the day: post.a.card.

What started as an interesting article about the secret life of cloud computing, landing me on post.a.card.. And what a find it was.

post.a.card. seems to be a sort of travel'ish/peronsonal'ish blog. The articles are short, and wonderfully written. The photos are eye catching.

Besides being a fun read, it's an excellent reminder about the simple power of blogging. It's not about widgets, or fancy design, or tricks to drive traffic - it's about making stuff people will enjoy consuming.

Speaking of which, what blogs are you enjoying reading these days?

Gotcha Of The Day: PHP Mail_Queue Generates Broken E-mails

Earlier today I was making use of PHP's Mail_Queue package. I've always found it to be a simple and reliable way to queue up and send batches of messages. But today, for some reason, the HTML (MIME) messages I was sending were coming out corrupted.

What was especially funky was that when I ran a test and queued up a message to just myself, it worked perfectly. But, if I also sent it to the customer, I'd get a fine version, but his version would be corrupt.

At first I thought it was an issue with the customer's mail system, but after further testing I realized that if I queue'd up multiple messages (using mailinator, naturally), the majority of them would be corrupted.

The corruption, it turned out was due to the fact that an extra blank line was being inserted between the Date header and the Content-Type header. The result: was that the Content-Type was being ignored. Here's effectively what the Mail_Queue package was generating in terms of headers:

Received: from localhost (localhost [127.0.0.1])
 by XXX
 for ; Wed,  4 Nov 2009 08:10:46 -0500 (EST)
MIME-Version: 1.0
From: XXXXX
Subject: YYYYYY
To: baz@mailinator.com
Date: Wed,  4 Nov 2009 08:10:46 -0500 (EST)
     «I'm a blank line that's hosing everything up
Content-Type: multipart/alternative;
 boundary="=_046216cf95b659c74f70aa33d3b4b6a2"

--=_046216cf95b659c74f70aa33d3b4b6a2
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="ISO-8859-1"

The question, of course, is how would that blank line get in there?

I Googled around, and didn't find anyone with a similar issue. I also poked around the source code for Mail_Queue (one of the joys of having an open source library!) and found nothing. I did notice that there's a debug option you can set.

I sent ahead and set it, and when sending mail, the screen filled up with the SMTP traffic.

After about 10 seconds of looking at the output, it hit me what was going on.

The blank being injected into the header stream wasn't from the Date: header - it was from the To: header. Looking back at my code, I had taken the list of e-mails from an HTML textarea and split them like so:

  $addrs = preg_split('/[\n\t;, ]/', $data['emails'])

The problem is that every address except for one, still had a \r associated with it. So, depending on the order I put the e-mails in the test message, one user would get a valid e-mail, and the rest would get corrupt ones.

I changed:

    $mime =& new Mail_mime();
    $mime->setTXTBody(strip_tags($message_html));
    $mime->setHTMLBody($message_html);
    $body = $mime->get();
    $hdrs = $mime->headers(array('From' => $from,
                                 'Subject' => $subj,
                                 'To' => $to));

To:

    $mime =& new Mail_mime();
    $mime->setTXTBody(strip_tags($message_html));
    $mime->setHTMLBody($message_html);
    $body = $mime->get();
    $hdrs = $mime->headers(array('From' => trim($from),
                                 'Subject' => trim($subj),
                                 'To' => trim($to)));

And the nasty bug was gone.

Man, that was a fun one to debug.

Anyone Have Any Sony Vaio Advice?

I'm in the market to buy a new I2X laptop, and happen to be fairly impressed with this Sony over at Best Buy. It's cleverly named: VGN-SR520G/B (and I thought car makes and models were annoying)

It seems to be have a good balance of power (duo core CPU, 4gig with 8gig upgradable RAM, 500GB hard drive) with mobility (13" screen, 4.3lbs). According to the card at Best Buy, it gets 6 hours of battery life - a number I can't imagine is real, but even if it gets close to that, it's a good start.

The problem is, try as I may, I can't seem to find any real reviews of this laptop. Perhaps it's a model just carried by Best Buy? Who knows. Anyone have any experience with this laptop, or know of any comparable ones that have reviews?

I usually write off Sony's as being too flashy for their price, but this one has me wondering if it's time to re-think that stance.

Oh, and if you've got another suggestion of a powerful but light laptop, I'd love to hear it.

Update See this post which talks about battery life. The short answer: the battery should last 3.5 hours if you're careful.

Needed: OneMinuteCandidate.com

So I voted today (with how dead the polling place was, I kind of felt like I was only the only one) - and as usual, I felt uninformed about all the races going on. Even the debate I watched didn't really help much.

It occurs to me, what I need is OneMinuteCandidate.com - a site that doesn't exist, but should.

The idea would be that you could go to this site and quickly (say, in about 1 minute) read up about a candidate to have an at least half way decent chance of picking someone you'd feel comfortable supporting.

The site would have a few key features:

  • Candidate profiles would be visually comparable (think the feature comparison grid for a car or digital camera)
  • Candidate profiles would be based on answering a standard set of questions. They would be short, I'm thinking 5 questions with each answer being 140 characters or less
  • The questions would be a key advantage of the site, as they would be written up by knowledgeable folks who would know what to ask. Does it matter if your school board member is pro-life or pro-choice? Probably not. Does it matter how they would allocate budget funds, or what program they would cut if they had to? Yeah, probably.
  • The model would work for big races (congress, the president) as well as tiny ones (school board, parks board, etc.), making it a resources that you can consistently turn to.
  • Answers to questions would come from the candidates, and as mentioned above would be brief, with the option of providing a learn more URL.
  • Content from the site could be turned into hard copy, and distributed door-to-door where net access may be limited

I have to think there are a lot of reasons for low voter turn out. And one of the big ones has to be that people aren't knowledgeable about the races. With the right snippits of information folks could not only be educated that a particular race is important, but that they have enough information to choose a candidate they would actually want to support.

2010 is right around the corner - anyone want to get started building the site?

Monday, November 02, 2009

Winter has arrived

Winter has come to Arlington - the ice skating rink is up, the pretty lights are out and it's pitch dark at 5:30pm. Burrrr.

You'll have to ignore the fact that I'm running in shorts and a t-shirt.

TechnoBuffalo.com - fun and eductional

The site TechnoBuffalo.com launched today, and already has some high quality content on it.

On the educational side, I've found their tutorials about putting together your own little space on TechnoBuffalo to be very informative. They cover topics such as appearing confident on camera (for video reviews and such) and how to actually get goodies to review. This is useful whether you plan to carve out your niche on the web at TechnoBuffalo, or if you have a blog already.

On the fun side, I enjoyed their Five Awesome Sites for Tech Enthusiasts. Specifically, I found the You Suck At Photoshop tutorials to be hilarious. They aren't exactly family friendly, but are a blast to watch.

Google Docs API - Now with OCR capability

I do believe I'm going to have to add the Google Docs API to the list of APIs to cool to not use.

The docs API provides a sort of file manager API, which isn't that exciting. And the fact that you can easily export to PDF and .doc is cool. But what really got my imagination going was the fact that you can use Optical Character Recognition (OCR) to generate a document.

I'm not sure how I'd use this, but it seems like a very powerful feature just waiting to be mashed up with some other service.

Thanks to Download Squad who I first saw mentioned the new capability.

Sunday, November 01, 2009

The Best Kind of Moving Day

Today was the best kind of moving day - the kind where I'm not the guy who's actually doing the moving. This time, the poor shmoe relocating was my brother Dave. With the help of our buddy Nick, we moved him without any hitches. Nick gets serious points for packing the truck so perfectly.

Here's the before picture:

And here's the after:

Beautiful, no?

I found my moving checklist to be quite useful, as I would have forgotten - and needed - most of the items on it.

Halloween 2009 - Ben dresses up for a change

Every year, as Halloween approaches, I mull over what I'm going to dress up as. And for the last few years, the answer has always been the same: nothing. I just seem to draw a complete blank as the 31st approaches.

But not this year - thanks to some suggestions by Shira I finally found a costume that was 100% me. So here's my costume - can you tell what it is?

Of course you can't. I was dressed up as the Internet. I finally got to put the spare Ethernet cable, ISA Ethernet cards and other random hardware to good use.

Here's my brother David and our friend Adam dressed up in a little bit more classic fashion. Note how Adam has the silly string, and isn't afraid to use it on Dave:

All in all, it was a great time and it felt good to not be the guy who couldn't think of a costume idea.