May 2007

img_7368.jpgI’m taking two weeks of holidays from my regular job to work on this, well, irregular one.  And the daily routine isn’t too shabby!  I get up a bit later than usual, around 6.  Get a couple of hours of work in while the rest of the house is sleeping.  Join the family for breakfast, then back to work for a good three- or four-hour chunk.  Another break for lunch and to stretch, then Helen goes down for her nap (yes, that’s my wife, not my daughter) while the kids and I hang out, do some dishes, play in the yard.  Then I put Kenan down for his nap and get another three or four hours of work in before supper. 

All in all I’m still getting in an eight-hour work day but it’s more split up, with family time every couple of hours to remind me what’s important in life.




So it’s Sunday morning, and since Nate was up late playing on the computer, he slept in while I made breakfast for everyone, including the cat, and generally took care of everything.  When it comes time to leave for church everyone is ready except I’m still in my bathrobe.  I suggest to Nate that I drive separately, then I can run an errand as well after church and not have to drag evryone along.  Yes, Luke, I know it uses unnecessary gas, and gas prices are higher than they have ever been, ever, but our church is pretty close.  Great idea, Nate says, and takes the kids to church.  I finish getting dressed and prepare to leave…but I can’t find my keys.  I look everywhere I could have left them, and look again.  Think, Helen, think!  Where did you go yesterday?  Nowhere.  Friday?  Everywhere!  I could have left them at Stephanie’s birthday party Friday night, lost among the 30 shoes at the door.  We were at Butterfield Acres on Friday, maybe the goats ate them.  Hmmm…maybe they are in the diaper bag with Nate at church!  I call Nate on his cell, no answer.  My cell, no answer.  I wait a half hour and try again, Nate is in the lobby looking for me.  What a nice guy!  Yup, there they are, under Kenan’s extra underwear.  We decide it’s not worth coming back to get me and I am happy to enjoy a couple hours of peace and quiet, all by myself.  That errand can wait until this afternoon, after I recover my identity. 

I was originally planning on taking on this web project the way I’ve always done them, with Notepad, ftp, a hope and a prayer.  That approach involves debugging the “old fashioned way” as I described a few months ago: adding many lines of code that just spit out the values of certain key variables so I can get a feel for what the code is doing.  A far cry from my office setup where all the latest and greatest debuggers and servers and virtual servers are at my fingertips (and my three monitors).  I was going to settle for this painful approach because the ISP that will host the site runs a Unix variant (as opposed to Microsoft Windows), which means I’ll do my programming in PHP, a programming language developed on Unix.  I knew PHP had been ported to Windows, but last I heard those Windows ports were dubiously maintained and typically a few versions behind the main code stream.

Lo and behold, after a bit of digging I was pleased to discover that PHP has become mainstream in the Windows world too.  In fact one PHP developer blogged that most PHP programmers develop on Windows.  As a result, there are a plethora of tools I can use.  Not the same ones I use at work, but just as powerful, and with prices ranging from free to hundreds of dollars (and feature lists in the same range).

I’m still using trial versions of some of the commercial packages, until I can settle on the best one, but here’s my software toolkit at this point:

  • Apache – open source web server that has been around for millenia and is still the de facto standard.
  • PHP – open source programming language that has gained in popularity in the last 5 years or so.  Any self-respecting web application programmer will have at least played with it.
  • MySQL – open source database that used to be for only very simple web tasks, but now competes with the big guys.
  • CodeIgniter – open source PHP web application framework.  I only heard of this code library recently, and am using it mostly because of it simplicity, good documentation, and active peer support forums.  A framework like this should help me avoid having to reinvent the wheel–all the typical “gruntwork” code that every web site needs gets wrapped up in the framework’s worker classes so I can concentrate on the “real” code, on what makes this web site different from the next one.
  • I’m still looking for the perfect IDE (an IDE is an editor and debugger).  A good IDE is a huge time saver mainly because of the debugger, letting you step through code line by line, examining variables, changing them, changing the code and running it through again.  Unfortunately, CodeIgniter messes with the URLs, making them look nice to the user but confusing the debugger.  At this point I’m using NuSphere PhpED as a code editor but I’ve given up on its debugger and am back to the “old fashioned way” again.  If I can’t get its debugger working before my 14 day evaluation period is up I’ll likely switch to a different application rather than pay the $300 USD price tag.  I’m also trying WaterProof PHPEdit, but it seems to be aimed at PHP 5, whereas my ISP only supports PHP 4.  (The PHPEdit forums seem to indicate you can debug PHP 4 as well, but there seem to be a few hoops to jump through, and I’m still not sure what it will think of the CodeIgniter URL mangling.)

Despite the frustration of still not having settled on an IDE, I’m moving ahead with coding (I can register new users and log them in now!), and it really feels good to have a full web server and database running on my little home PC! 🙂

Here’s a new experience for me:  web programming for pay!

Well, my day job involves a good amount of web programming, but all my other web projects have been selfless gifts to mankind., the RVA e-directory,, Scrabble-Master (in English and Polish), Equate-Master,, Share It Around (which never got shared around)…  Yesterday I set up my home office, today I started developing the next best thing since sliced bread.  But for confidentiality reasons I suppose I can’t actually say what it is.

Of course the first thing a man’s got to do when he has a new project is buy new tools.  And when the new tools are things he’s been wanting anyway, and will have a use after this project is done, but can be bought with before-tax money, he can tend to go a bit crazy!  Computer geek though I may be, I have not had a proper backup solution in place at home, so the first thing I did was drive on down to Memory Express and pick myself up a D-Link DNS-323 2-Bay Network Storage Enclosure and a 320 GB Seagate SATA hard drive.

My new fileserver

This sexy unit can take two drives and write the data to them in such a way that if one drive fails, the data can still be recovered (that’s called RAID 1), but since I’m only using it for backups, not for my real original data, I stuck with a single drive.  It sits anywhere on the network so mine is in my basement rather than cluttering up my desk.  It was a breeze to install and configure. 

The DNS-323 also comes with a Memeo license.  I’d never heard of Memeo before, and I hate to gush about a product when I’ve only used it a day, but I really do like it!  Memeo is a backup solution that is the simplest I’ve seen.  I told it what directories to back up, where to back them up to, and how many versions of each file to keep, and I was done.  Now it watches my hard drive and any time one of those files changes it’s immediately backed up to that new drive in the basement.  It’s a fantastic solution for a desktop, and I think it would be good for a laptop too:  if you’re on the road, it will just remember which files you change, and next time you plug in to your home network (or your backup USB drive) it will back them up.  It even has the option of backing up to a server on the Internet (for a monthly fee), so any time you have a network connection you can backup or restore.  Ah, I said it:  restore.  That’s the true test of a backup solution, isn’t it?  You don’t know if it’s working until you need to restore something.  I’d better give that a try and report back…

So I’ve got my backup solution.  Then I moved our computer up from the kitchen where we normally keep it, up into our office on the second floor so I can work without being disturbed.  And it’s not ’til I start plugging cables back in that it hits me:  we have no network connection upstairs. 

Big oops.  I’ve got ethernet wired into the kitchen and living room, but previously we used wireless with our laptop upstairs.  The laptop is dead and our desktop doesn’t have wireless.  I started knocking on walls thinking of pulling cable, and pricing out wireless network cards, and then remembered that a buddy at work recently bought some SlingLinks, which use your AC power outlets to transmit network signals around the house.  I called him up to ask what he thought of them after a few months of real-life use, and he had nothing but good things to say.  Another visit to Memory Express and I came home with two D-Link DHP-301 PowerLine Ethernet units. 

Two powerline units - they talk to each other through your electrical wiring.

In concept they couldn’t be simpler.  I plugged one into a power outlet near my computer, and my computer’s network cable into it.  Then I went down to the basement and plugged the other one in near the router/firewall and plugged the router’s network cable into it.  Within seconds an LED turns green indicating that the one unit found the other and they’re talking.  They talk to each other by adding waves on top of the 60 Hz cycle the power line has, but these data waves are small enough that normal household appliances don’t notice them.

Unfortunately the powerline units were not as easy to get going as I’d hoped (I still don’t understand why sometimes I’d have no network, even though the units could see each other–I think it had to do with which order I plugged them in), but it wasn’t too long before I had my network purring again and Memeo was working in the background copying 50 GB of photos through my electrical outlets to the drive in the basement.  Beautiful!

Those were the “hard” tools.  After that I turned my mind to the “soft” tools, the software to turn my home computer into the same efficient programming machine I’m spoiled with at the office.  That wasn’t as easy as I’d hoped either!  But it’s after 10 pm so I’ll save that story for tomorrow.

Good night.  I’ll be dreaming of ones and zeros.


Next in our series of inviting you to our kitchen table is a perrennial favorite, we call it Tofu Mollie.  (Nate calls it Tofu Mali, because he says it tastes African.)  It is from Mollie Katzen’s “Vegetable Heaven” cookbook, titled ‘Green Beans and Tofu in a Crunchy Thai Peanut Sauce.’ You can read the recipe here on Mollie’s cool website.  Below I’ll give you the Helen-ized version. 

2 TBSP minced fresh ginger (or to taste)
1TBSP minced garlic
1/2 tsp lemon zest
1 lb firm tofu, cubed
1 lb fresh green beans, cut into 1/2 inch pieces,
or frozen green beans (fresh is best, when in season!)
red pepper flakes to taste

Serve with brown basmati rice, start the rice cooking first. 

Mollie says to roast and then grind up your own peanuts to make the sauce… but I just use almond butter.  I’m into doing things from scratch but really, that does seem to go a bit far!

Saute ginger and garlic in oil for a few minutes.  Add tofu cubes and lemon zest and brown for 10-15 minutes on high heat.

While tofu is browning, make a sauce:

Almond butter, about 2 heaping TBSP
Honey, about 1 heaping TBSP, or to taste
Soy sauce, about 1 tsp or to taste
1 tsp salt (or to taste)
1 TBSP fresh lemon juice

Stir sauce until combined.  When tofu is browned, add sauce to pan and stir to combine.  If using frozen green beans, add them right on top, cover, and let steam until cooked through.

If using fresh green beans, you may want to stir fry them in a bit of oil in their own pan first, then add to the tofu mixture.

Stir the green beans and sauce thoroughly, taste, and adjust salt or honey as necessary.  Voila!

This might be good with beef instead of the tofu.  Someone try it and let me know!

Next Page »