phpLDAPadmin and Kerberos
I’ve been experimenting with phpLDAPadmin for browsing/searching LDAP directories over the web and found it to be a wonderful tool. I’m currently working with LDAP in a central authentication system together with Kerberos and wanted to have a nice web interface for managing user information within the LDAP directory. phpLDAPadmin provides a very nice interface for browsing, searching, and updating entries which makes it a bit easier than working with the ldap* command line tools. Here’s my basic setup of phpLDAPadmin using Kerberos for authentication. This assumes you already have an LDAP/Kerberos setup working and are using Apache as your web server.
First step is to make sure you have SASL support compiled into the LDAP PHP extension --with-ldap-sasl. Check out phpinfo() and make sure you see SASL Support Enabled under the LDAP extension. If not re-compile PHP.
Read the rest of this entry »
Adventures in a Penske
My family and I recently decided to take a journey across the country. We’re relocating to the snow belt so we wanted to be sure and have one last adventure before we go without seeing the sun for most of the year. The only way to travel when taking a trip across country is to rent a nice big Penske truck, throw everything you own in the back, and take lots of pictures because you probably won’t be doing it ever again.
Our journey starts off in a small town in Sonoma county California. The weather is sunny 70 degrees, truck is all packed, and we just finished up checking out of our place. Only one small problem.

To the untrained eye this picture looks like a normal packed truck ready to head out on a trip. But deep inside that nicely packed truck happens to be the keys to the shiny new pad lock which is securing the truck door shut. Not the best way to start off a trip. After the initial rounds of yelling from the wife I started to think to myself “Why didn’t I just hire that moving company again”? Luckily, Sebastopol California is filled with all kinds of interesting people and my next door neighbor happened to be out doing yard work that day. After he saw my wife slapping me upside the head a few times he inquired about our situation. After chatting with him for a bit he explains how he was a locksmith for 30 years. He had our lock picked in under 30 seconds and we were on our way.
We ended up taking the southern route along interstate 40 to try and avoid most of the unstable early spring weather. The first leg of our trip took us south down interstate 5 to L.A. where we stopped and spent some time with friends. We then picked up interstate 40 and headed for the Grand Canyon. Watching the sunrise in the Grand Canyon was absolutely breath taking. We stayed about 1/4 mile from the rim at Maswik Lodge which turned out to be a great place to stay.

After leaving the Canyon we headed east on interstate 40 through Arizona and New Mexico. One of the coolest places we stopped along the highway was Meteor Crater. It’s about 5 miles off 40 down a small country road.

Before leaving Arizona we stopped off for a picnic lunch at the Petrified Forest National Parkwhich had some wonderful views of the Painted Desert.

After we got out of New Mexico we kicked into high gear to get through the pan handle of Texas and Oklahoma. It was interesting to find Texas having the cheapest gas prices at around $2.30 a gallon. We also passed by some very interesting signs throughout the deep south.

Arkansas was a very pretty state to drive through along with Tennessee and Kentucky. I wish we would have stopped off in Memphis for a bit longer. It looked like a great place to visit being right on the Mississippi.

Ohio, Pennsylvania, and finally New York made up the last leg of our trip and by this time we were just anxious to get home so only stopped to gas up.

And of course once we pulled up to our destination we order up some pizza and wings which was the motivating factor that helped us get through all those miles.

I picked up a GPS for the trip which turned out to be a wise investment and a cool toy to play with to help pass the miles by. Here’s some quick stats I gathered throughout the trip:
Total Miles: 3500
Max Speed: 88.1 mph
Moving Time: 1 day 20 hours 43 minutes
Total Time: 7 days
Farewell to an old friend
I had to say goodbye to one of my dearest friends a few weeks ago. I sold my bus stella and will no longer be able to see wine country through that big bay window anymore. We had some great adventures together but the time has come for us to part our ways. Farewell old friend.

My last day at O’Reilly
I recently finished up my last day as an O’Reilly employee. I decided it was time to take the next step in my career and have accepted a position at the Center for Computational Research. My last day at O’Reilly was an emotional one and it was sad saying goodbye to the wonderful relationships I had built throughout my time there. I had the opportunity to work with some amazing people and wish them all well in the future.

Creating iCalendar Files in Ruby
I recently came across a great ruby module called icalendar for working with iCalendar files. For a quick example here’s some code that generates the Buffalo Sabres 06/07 schedule in iCalendar format. The source data comes from the Excel spreadsheet available here which gets converted to CSV before running through the script.
require 'rubygems'
require 'icalendar'
require 'csv'
if ARGV.size != 1
puts "usage: ruby sabres_ical [schedule.csv]"
exit;
end
cal = Icalendar::Calendar.new
CSV.open(ARGV[0], 'r') do |row|
event = cal.event
event.timestamp = DateTime.now
event.summary = row[0]
event.description = row[0]
event.location = row[16]
start_date = Date.parse(row[1])
end_date = Date.parse(row[3])
game_time = row[2]
event.start = DateTime.parse(start_date.to_s + " " + game_time)
# Games usually last about 3 hours
(h,m,s) = game_time.split(":")
endTime = [h.to_i + 3,m,s].join(":")
event.end = DateTime.parse(end_date.to_s + " " + endTime)
end
puts cal.to_ical
Here’s an example of the output which is sent to stdout:
BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:iCalendar-Ruby BEGIN:VEVENT DTEND:20061006T223000 UID:2007-01-16T17:59:38-0800_408345411@sugaree DESCRIPTION:Sabres vs. Montreal SUMMARY:Sabres vs. Montreal DTSTART:20061006T193000 DTSTAMP:20070116T175938 SEQ:0 LOCATION:HOME END:VEVENT BEGIN:VEVENT DTEND:20061014T220000 UID:2007-01-16T17:59:38-0800_606587692@sugaree DESCRIPTION:Sabres vs. NY Rangers SUMMARY:Sabres vs. NY Rangers DTSTART:20061014T190000 DTSTAMP:20070116T175938 SEQ:0 LOCATION:HOME END:VEVENT
If you’re a Sabres fan and not able to run ruby scripts you can download the iCal version of the Sabres 06/07 schedule here for importing into your favorite calendaring program. For some reason there are some games missing in the source Excel spreadsheet so unfortunately they will also be missing in the iCalendar version. I don’t make any guarantees to it’s correctness so if you find an error or miss a game you’ve been warned.