The Wedding Planned With Bugzilla

If things have been a little sparse around here over the last year or so it's because outside of work the bulk of my organizational and creative energies have been going into the planning of our wedding.

The wedding was this weekend, and everything was spectacular. Photos and details can be found on the wedding website.

I've come away from the wedding planning experience with this advice for guys: Don't bother helping; no one but your finance/wife will believe you've done anything, and she's already in love with you.

Kate and I got no end of comments and jokes predicated on the notion that the guy never does anything to help with the wedding, and despite her earnest protestations to the contrary, you could tell that people came away with a belief that at most I probably helped pick the cake or something.

That assumption was all the more maddening because, in fact, my tendency to over plan events was perfect for a wedding. I'd been waiting for just this sort of opportunity to plan a large event and in doing so to put a record keeping theory to the test. -- By now it should be obvious that Kate, my wife, is a very patient woman.

For years I'd watched an event planner who worked out of the same coffee shop I did practice her trade. So nearly as I could tell she lived entirely in a world of post-it notes and phone calls. On any given day I'd watch 500 different pieces of information flit before her mental windshield with no discernible organizational system I could recognize. It drove me crazy. I wanted to offer to help her come up with a computer based solution that would patch all the holes in her process I was sure had to plague her on every project.

Meanwhile, I was sitting next to her working on computer software, which for any project of reasonable size includes tracking thousands of details. Among those details are defects, bugs, and any team with any hope of success uses a bug tracker system to keep them documented. The most popular, but certainly not the most user-friendly, bug tracker is Bugzilla. I like it a great deal.

I became certain that more than a spreadsheet or calendar or MS project, event planning required a bug tracker. I was pretty sure that Bugzilla could be put to work to keep good logs of tasks, dependences, and details in exactly the right fashion.

As alluded to previously, Bugzilla has a user-interface that only a software developer could love. Kate's not a software developer, so there was some initial resistance, but she's a trouper and took to it eventually. File attachments held contracts, and comments included phone logs. We were planning the wedding long distance so most communications were electronic.

In the end it worked well -- no details fell through the cracks --, but it was probably overkill for a two-person project. Something like basecamp is probably a much better fit. Bugzilla does have some nearly useless charts that allowed me to produce the horrible dependency graph below:


Motion Lights and Silliness

We've got an old lighting fixture for our front porch, which we didn't want to replace with an ugly motion light. I tried putting a socket adapter in-line with the bulb, but it wouldn't fit in the globe.

More time spent staring at the lighting offerings at Home Depot turned up a workable, if convoluted, solution. An external motion detector sends a wireless signal to a replacement indoor light switch, which then turn on the external light. To make what should have been a ten minute project even sillier, I should be able to control the remote switch from the home link button in my car. Heh.

Home Repair and Misc.

When I don't post here in a while it either means I'm not building anything new or that I'm too busy to write about what I am doing. This time it's the later. Not that any of it's been exciting, but almost all of it involved using a saw, which totally counts.

Gwin, our eldest cat, has always kicked toys into the basement sump for the joy of watching humans pick them out later. Milo, on the other hand, likes running into the muddy sump and then running up stairs. To keep the cats and their toys out I built a little wooden frame to fit and covered it with chicken wire. It's ugly but functional.


At some point during Monday night's storm a 20' branch fell from the sky and broke our fence gate. Neither of us woke up. Sometimes I park my car right where it landed, and I'm glad Monday wasn't one of those times. Repair was just a matter of replacing a few pickets and fixing the latch. The latch has never worked well and still doesn't, but it's slightly better, which I keep telling Kate counts as fixing it.


Meager construction efforts aside I've been working on some big things at work and on our [ wedding invitations], which we hope to mail in the next week or two.

Ivy and Stucco

This weekend was full of discoveries involving ivy and stucco and removing the former from the later. Summarizing them we have:

  1. Don't. Keep them away from one another. If you have a stucco home and your neighbor plants ivy secretly poison it.
  2. If there is ivy on your stucco, just leave it there. Removing it is not worth the pain.
  3. If you do remove the ivy, remove it completely. If you pull it off and plan on getting the residual debris later, you're going to find it's dried to a state where it can no longer be pulled off in strands like it can be when green.
  4. If you've let residual ivy dry to the point where it's brittle, plan on a day full of power washers, long handled brushes, and ladders. Try to drink a lot. Expect to repaint.

Caching In My Moving Karma

There's a purchase agreement in place for the condo, and it's time to organize the moving extravaganza. Saturday, June 17th at 11am moving helpers generous with their time will find everything pre-boxed, wrapped, stacked, and ready. Half the stuff will be going to Salvation Army down the street and half will be moving from 580 N 2nd St. #120 to 330 E 50th St. I'm renting a large truck (and possibly selling off a good fraction of the furniture in advance), so with luck we'll be on to the beer and lots of food portion of the afternoon after just one short trip.

Please let me know if you think you can make it so I can plan food supply and figure out if I need to start trying to call up moving karma chits by name.



Yay! We'll finally have a sofa for people to sit on.

Meager Home Improvements

After moving into the house I started a series of small home improvement tasks. Some of them have genuine safety reasons but many happened only because changing things demonstrates residence. Here's an incomplete list of things I've done:

  • added a ceiling fan to the bedroom
  • rewired the doorbell with modern wire so it doesn't ring everytime you walk past the dining room heat register
  • added shelving, a phone jack and power outlets to create a server corner
  • added appliance-grade outlets behind the stove and fridge (rather than the ungrounded lamp-grade extension cords running through holes in the floor they previously had)
  • added a motion light to the break-in-ariffic back yard
  • cleaned out the gutters (I knew there's a reason I got that condo)
  • replaced the rotting wiring for the basement lighting

|| ||

Display Google Calendars with PHP iCalendar

Google has a new calendar service, and it's great. I really try to avoid hosted data solutions, but this one's just too good to pass up. My one gripe is that there's no easy way for non google calendar users to view the calendars. They're available live as both ical and rss/xml files, but the average home web user doesn't know what to do with either of those.

There are plenty of services out there that will display an ical file as a web page, but none of them I tested rendered the google ical output well, and all of them were packed with ads. Previously, I'd used software called phpicalendar to display ical files created by my old calendaring solution on the web, so I started there. It didn't parse the google output well either. However, with a little tweaking (see the patch in the zip file below) and some Apache trickery (see the README in the zip file) I can now get good phpicalendar output from google.

Update: Looks like now google offers a good way to do this.


Hey man I really want to get my php iCalendar working with my new Google Calendar as you have, but my server is not a Linux box, so I don't have a good way to patch the diff file you included in the zip. I was wondering if you would be willing to upload the actual files that you changed, or would you be willing to email them to me. I would really appreciate it.

Hrm, not to be unhelpful, but if you read the patch file you'll see I just commented out one block and added a simple if test somewhere else. It should be very easy to do by hand on the two files. The unified diff format is nice in that it's quite human readable despite being ready for machine processing. -- Ry4an

I'm not familiar with php icalendar, but (stupid question...) if using your work around, and I keep making new events in the google calendar, will they show up in the icalendar, or will some kind of cron job be required? (maybe I should just use the icalendar... but the google site is so seductive....) --Rebecca,

Yes, my phpicalendar hack does a live display of the google data. One could use phpicalendar all by itself, but I like the invites, access controls, and UI from google calendar well enough that I though it was worth trying to have phpicalendar do a live display of data I keep in google calendar. -- Ry4an

I was all excited to work on this little project. Then I realized I don't have the ability to apply patches (or if I do, I haven't a clue how to). Thanks for sharing though, it looks super cool on your site! --Rebecca,

I could not get your method to work so I had to rework the ical_parser.php. I recreated the $cal_filelist array with my google calendar urls. Then so the names of the calendars were not "basic" I created another array called $cal_names. Here maybe some source code will make this more clear. At about line 102 of ical_parser.php
$cal_filelist = array ("http://calendar url 1", "http://calendar url 2");
$cal_names = array ("Calendar Name 1","Calendar Name 2");
$counter = 0;
foreach ($cal_filelist as $cal_key=>$filename) {

        // Find the real name of the calendar.
        //$actual_calname = getCalendarName($filename); original code commented out
        $actual_calname = $cal_names[$counter];

-- Psycho Whale

That's a more general solution than my quick hack. You might want to submit your code changes back to the phpicalendar project using their patch tracker. I'm sure they're getting all sorts of "support google calendar" requests and yours is a good step toward that. -- Ry4an

I applied your patch... no problem. But when I did the .htaccess edit, it would not redirect the .ics file to the google calendar. I then edited the to allow webcal's and added the exact patch of the .ics (which would be redirected) in the "$list_webcals[] = *;" area. No dice. It would then give me an error (which is strange since the file actually existed in that spot). Any idea what I'm doing wrong? Do I need to edit the "$default_path" in the to show the patch to the redirected .ics file also? I'd love to get this thing to work but doesn't seem to be happening. Tried Pycho Whale's solution also but that worked even less. Not sure if he was editing the ical_parser.php before or after your patch or if that even was relevent. Lot's a questions. Any help? -- RSmith423

If the .htacces file is ignoring your Redirect line it's because your httpd.conf file isn't set to allow Redirect lines in .htaccess files. You can either edit httpd.conf to allow Redirect lines in .htaccess files or you can just put the Redirect line directly into the httpd.conf file. Instructions for both can be found in the Apache online help. -- Ry4an

I noticed that recurring events don't display correctly. If you have a recurring event the start time and end time is always the same.

Here is my hack to PHP iCalendar to make it work:

in ical_parser.php:

my code:

ereg('^PT([0-9]+)S', $data, $duration);
$the_duration = $duration[1];

replaces this original code:

ereg ('^P([0-9]{1,2}[W])?([0-9]{1,2}[D])?([T]{0,1})?([0-9]{1,2}[H])?\([0-9]{1,2}[M])?([0-9]{1,2}[S])?', $data, $duration);
$weeks                  = str_replace('W', '', $duration[1]);
$days                   = str_replace('D', '', $duration[2]);
$hours                  = str_replace('H', '', $duration[4]);
$minutes                = str_replace('M', '', $duration[5]);
$seconds                = str_replace('S', '', $duration[6]);
$the_duration   = ($weeks * 60 * 60 * 24 * 7) + ($days * 60 * 60 * 2\4) + ($hours * 60 * 60) + ($minutes * 60) + ($seconds);

Apparently Google uses seconds to specify the duration of the event, but PHP iCalendar expects the duration in hour minute second format.

Thanks for the patch!


The only thing I had to do to get GoogleCalendar to work was the following:

phpicalendar/ $allow_webcals = 'yes';
phpicalendar/ $timezone = 'Europe/Paris';
php.ini: allow_url_fopen = On

And it worked right out of the box ...*

http:// YOUR-SITE /phpicalendar/month.php?cal= YOUR-GMAIL /public/basic&getdate=20060518


Excellent, maybe they've updated. I kept having it refuse to display any webcal URL that didn't end in '.ics', pehaps that's been fixed. Also, I found I needed to add some link text to the blank free/busy view entries for them to be clickable, but that would only be required if you use the free/busy (rather than full detail) view gcalendar provides. --* Ry4an

Condo on the Market

After a lot of cleaning, painting, and decorating my condo is finally on the market. Thanks to Kate and Natz for all their help. We've priced it very aggressively in hopes of not having this process drag on, so if we're lucky we'll be bidding a fond farewell to MLS 3165642 soon.

If you ever came by and admired the place, tell your house hunting friends.

Yet More Staging

Last week Kate, Natz, and I painted a few more rooms, added handles to the cabinets, added some bookshelves, and did a lot of minor repairs around the condo in preparation for selling it. I also cut up the throw pillows and sewed some arm covers for the couch. They look as cheesy as arm covers always do, but they hide the cat damage.

front-view.jpg top-view.jpg

A Very IKEA Sunday

I'm finally tackling all the little projects I always meant to do around the house in preparation for selling it. Today I installed some simple roller shades downstairs and built a fairly complex multi-panel window covering system thing in the bedroom using the ridiculously modular KVADRANT stuff.

I've never had serious problems with IKEA stuff before, and these weren't any worse than usual, but one really is constantly beset by low-level disappointment at the quality of the pieces, their fit and finish, and the meager guidance the instructions offer when working with IKEA stuff. Still it's cheap and looks nice, which is exactly what one wants when staging for a sale.