Export iPhoto Library to Folders

Just a quick update on my #noapple efforts.

I work on three main machines: a desktop at the office, a desktop at home and a Macbook Air.

A couple of months ago I started using Ubuntu (Naughty Nightnurse) at work, and I figured I’d wait until 11.10 Onanistic Oliphant was out before upgrading the other systems. I need to write a long post about my decision to use Ubuntu and what I like and dislike about it (no screensaver in 11.10, seriously?) but I’ll have to save that for later. This weekend I got my iMac at home to tri-boot OS X, Windows 7, and Ubuntu.

But for now I want to talk about an iPhoto replacement. I’ve looked at several and I’m leaning strongly toward Shotwell. However, this requires that the image files exist outside of the iPhoto database. I tried just selecting and exporting all of them, but it appears that since several photos have the same name (the default numeric name provided by the camera) the newer files were overwriting the older ones. Kind of a pain when you have around 10,000 images to export.

Through the magic of Google I managed to find a nice little script that will export the images from the iPhoto database into Folders based on events. You can find it on Github, but basically just run:

curl https://raw.github.com/BMorearty/exportiphoto/master/exportiphoto.py > exportiphoto.py

and then

python exportiphoto.py ~/Pictures/iPhoto Library/

I strongly recommend running it in test mode by adding a “-t”. I didn’t realize it, but my iPhoto database had some corruption, and yes, this was after all of the cleanup options available when starting iPhoto while holding down the Command and Option keys.

The problem was in the iPhoto AlbumData.xml XML file. Two of my images had a file type of “^@^@^@^@” instead of “JPEG”, but the real pain was that about 100 photos, around 1%, simply didn’t exist. While there was a thumbnail, there was no image file:


I hope they weren’t anything important.

Anyway, once I corrected the issues in the XML file, the script completed in test mode, and then it did it’s magic and exported all my photos into nice folders, all ready for Shotwell or whatever product I decide to use.

Training Announced in London

Just a quick note that we are delighted to be able to schedule our week-long OpenNMS training course for London, the week of 28 November.


Our host is the Girl Guiding Association, the UK version of Girl Scouts founded by Robert Baden-Powell, and also an OpenNMS user. The room we will be using for training is smaller than the one we had in Reading earlier this year, so space is limited. Hope to see you there.

Juniper Networks Includes OpenNMS in Junos Space

We’re very excited to be able to announce that Juniper Networks has licensed OpenNMS through the “Powered by OpenNMS” program to bring Fault and Performance Management to their Junos Space management application.

The full press release is now online. We met with them at Dev-Jam this year in Minnesota, and things progressed rapidly from there. The fact that a company with such a solid reputation as Juniper would choose to make OpenNMS part of its product suite should go a long way to validating the work we’ve done with the project, and I look forward to working with them for years to come.


I spent last week (the last of my three week trip to Europe) in the German city of Köln (Cologne). I’ll probably keep referring to it as “Köln” since I just figured out how to easily print special characters on my Ubuntu desktop. (grin)

I was working with a service provider called NetCologne, specifically on a project where they are rolling out a Fiber to the Building (FTTB) project. Ronny Trommer, one of our guys in the European office, did most of the heavy lifting, but I was there to help out (at least in the beer drinking capacity).

We needed to monitor and collect data from a growing number of remote devices, and when I last checked we were polling 26110 distinct devices and 51690 interfaces. One thing that came in handy with this deployment was the Instrumentation Log Reader.

If you haven’t seen this feature, you should check it out. Under Admin there is a menu item called the “Instrumentation Log Reader”. This will generate a very useful report from the instrumentation logs concerning how many devices are being scanned for data collection, how long it takes each scan to complete, the time period between scans and the number of failures.

At NetCologne with 300 threads (the default is 50) the system was not able to poll fast enough to provide five minute samples, so we needed to increase the number of threads. While it was not easy to do a weighted average, it seemed that a conservative estimate would be about 10 seconds per device to perform collection. There were some of them in the 20-30 second range, and quite a few below 5 seconds, but for calculation purposes 10 seemed like a good number.

This meant that each thread could collect on six devices a minute, or 30 devices per five minute period. Since we needed to collect on 26110 devices, that meant we needed a little over 870 threads. We made it 1000 just to be sure, and then data collection started performing well.

A lot of the time was spent integrating their internal systems with OpenNMS through the provisioner. Much like Towerstream, any service provider with this many devices needs to be able to automate adding and removing devices to their management system. I am certain that the strength of our provisioning system is the one major reasons large enterprises and carriers should consider switching to OpenNMS.

On my last night in Köln I was taken out to a brewery near the Cologne Cathedral, or Dom, to partake in large amounts of the local brew called kölsch.

I found out on Google Plus that a number of people have very strong opinions about the quality of that particular beer, but I liked it. It was very light and clean, which was helpful in that we drank quite a bit of it. It came to our table in a “ring” of glasses:

and we went through several rings (I lost count).

No matter what you may think of kölsch, I don’t think anyone can deny the beauty of the cathedral:

Even at night covered in part by scaffolding, it is a gothic, fractal masterpiece.

I had fun, and I look forward to the opportunity to go back as this project progresses.

Here In My Car, I Feel Safest of All

This week I doubled the number of countries outside of the US in which I’ve driven a car.

Previously, I had driven in Canada and New Zealand. Canada doesn’t really count. Sorry to sound like a bigoted American, but the experience was no different than driving in the US. New Zealand was a much different story, since they drive on the opposite side of the road.

This trip I added Austria and Germany to the list.

As I’ve mentioned, I spent this week working with Antonio. He flew up for Uwe’s wedding and we drove down to Italy to do a Greenlight+ project. His flight back was at 06:00 Saturday morning, so we needed to leave Vipiteno and get him back to Germany Friday night. Considering that it was at least six hours and we were leaving at 16:00, I offered to drive so he could relax and maybe sleep.

Plus, I would get to drive on the autobahn.

Antonio drove for the first hour, getting us out of Italy and halfway through Austria. The weather was grey and wet, and as we climbed into higher elevations it started to snow.

Before we left, I asked for a few CDRs to burn some music. For some reason that escapes me, modern car manufacturers are still reluctant to put an AUX jack in their stereos. With so many people carrying portable music devices and being able to play music from a phone, you would think this would be a common practice. The reason I bring this up is that Antonio surprised me several years ago by breaking into song. This isn’t unusual for an Italian, but the song he was singing was “Supper’s Ready” by Genesis. It’s over 23 minutes long.

So that is how I found myself riding through the Austrian Alps in the snow while listening to that prog-rock classic “A Lamb Lies Down on Broadway“. Antonio also had to suffer through me singing along with James Taylor on his “Greatest Hits” album – one that I know every lyric, pause and breath having listened to it endlessly in high school.

Anyway, we were lucky that we left early enough that the temperature was above freezing and nothing was sticking on the roads.

When we crossed into Germany, I was finally driving on the fabled German highway without speed limits. This had almost mythical significance to me, as at one time in my life I was really into cars, so much so that I read Autoweek, and my friend John and I used to race to the mailbox so that we could read the Satch Carlson column.

Note: For those of you who have never heard of Satch Carlson, he is one of the best auto sports writers I’ve ever read. I would literally choke from laughing so hard at his stories. Unfortunately, he was involved in a scandal involving one of his students, and he pretty much disappeared after that. There is still an ancient website that is worth checking out if you want to see what was cool in websites 20 years ago.

Back to the autobahn. The experience did not live up to my expectations.

First, you have to understand that in most places the autobahn is two lanes. The right lane is where the trucks are, and they have a legal top speed of 80 kph. The left lane is where you can pass and go as fast as you want.

Or should a say “as fast as you can”. I wanted to go a lot faster.

Second, I was in a rented Mercedes A160. The car I usually drive is a supercharged C230, which is much faster than this car, so moving from the right lane to the left was not without a little risk.

If you look up the “0 to 60 mph” specification for the A160, Mercedes has written in the word “yes”.

Often I’d move over to pass only to see a set of headlights magically appear in my rearview mirror, prompting me to get back over as quickly as possible to avoid getting squashed. I swear some of those headlights were tinted blue.

Third, around the time we got to Ulm (birthplace of Albert Einstein) the amount of traffic had increased greatly and we were all forced to slow down. By Stuttgart, it was “stop and go”, or should I say “stop and go like hell”. There was a lot of construction, and coupled with the weekend traffic it was pretty high stress.

The way I dealt with it was the way I deal with any unusual situation in which I find myself. I find someone who looks like they know what they are doing and mimic them. So I’d get behind a car and do what they did – speed up when they sped, move over when they moved. Worked pretty well as long as I could keep up.

Finally, once the traffic started to thin, there were these road projects that would cause the entire highway to shift over to the left. Southbound traffic was limited to two lanes, while we took over the shoulder and one of their lanes. Separating our leftmost lane from theirs was a little temporary wall that stood about two feet high and looked like you could push it over with a finger. It was only as wide as the line drawn on the road, which meant that you were always perilously close to the oncoming cars as well as not having much room between that wall and the cars on your right. Seriously, the A160 is not a big car but at times it felt like I was driving a Winnebago. I wouldn’t have felt much more comfortable on a motorcycle.

Anyway, according to the GPS, Antonio had hit a top speed of 169 kph on the way down, so I was determined to top that. After driving for about a mile on a nice, flat stretch of highway with the pedal completely pressed to the floor, I managed a measly 170 kph, or a little over 105 mph. I was hoping to hit at least 200 kph, which is close to the highest speed I’ve ever driven (and that was on a motorcycle), but unless I was going to get a head start coming down a mountain with a decent tail wind, it wasn’t going to happen in an A160.

The Leitner Group

It worked out that after the training week in Fulda, a new client of ours wanted to start the first week of their Greenlight Plus project, so I just stayed in Europe another week.

Headquartered in Vipiteno, Italy, the Leitner Group is one of the two largest producers of “ropeways”, what we would probably call ski lifts and gondolas. Through a number of mergers, their products have grown to include snow grooming equipment, other passenger transport (through their Sigma subsidiary, they built the cabins for the London Eye), as well as small wind turbines (with the awesome name of Leitwind).

It was because of this recent growth that OpenNMS was needed to replace their Nagios instance that just couldn’t be used to manage the 600 devices spread out across 60 or so locations. It was a fun project, made even more so by the fact that Antonio Russo, our go-to man in Italy, worked on it with me.

I am planning on writing up a more detailed post on the transition, but it was pretty straightforward. OpenNMS was used to replace Nagios, Cacti and Smokeping, and with only two exceptions we were able to replace the Nagios “check scripts” with built-in OpenNMS monitors. For the ones we couldn’t migrate we just used the General Purpose monitor and ran them as external programs. Since Nagios runs all of its checks as scripts, it must fork-exec each one which severely limits its scale. All of the OpenNMS monitors run inside the OpenNMS process itself (well, with the exception of the GpMonitor), and the fact that you can also do data collection and event management without extra integration steps was a bonus. Antonio took the Nagios configuration files and ran them through a script which automated moving the devices into OpenNMS using the provisioner, so it was pretty simple to get the nodes into our application.

Working at Leitner was fun for a number of reasons. First, the technology is cool. If you have ever been on a ski lift you know that the speed of the cabin changes when it reaches the ends so that people can get on and off, and this is usually accomplished by having the cabin disconnect and then reconnect from the main cable (which moves at a constant speed). The equipment that does this is pretty complex, not only due to the size and weight of the components involved, but also due to the safety concerns (don’t want to be dropping your paying customers).

Second, working with the client, Michele, was a lot of fun. I’ve often bragged about the fact that OpenNMS users are self-selecting. We don’t go out of our way to market the application, so the people who find it, download it, install it and decide that they want to spend money on services are pretty special. They are all amazingly bright people, friendly and witty, and without exception tend to be very good looking.


Third, Vipiteno is an incredibly beautiful place. Nestled in the Italian Alps, it is a very clean and walkable town. It has a split personality, since for much of its history it was located in a German speaking country. Like Canada, almost all of the signs are in two languages, and when I am talking about it to Germans I have to refer to it by its German name of Sterzing.

The whole week I had to keep reminding myself that I was actually at work – getting paid to have this much fun seems criminal.

On Wednesday, Antonio drove us down to Bolzano to visit some of his friends. As you cruise down the highway, it was not unusual to see castles – old school, Holy Grail, storybook castles.

Whenever you saw one, you often could look across the valley and see another. I keep wondering if they ever went “Game of Thrones” on each other, and thought about the logistics of waging war in this terrain.

Yes, I’m a bit odd, I realize that.

Unfortunately, it got dark so I couldn’t enjoy much of the countryside. Most of the castles were illuminated with exterior lights, however, so they seemed to float in the air as we sped past.

Bolzano was a cool place – a much larger city than Vipiteno. One of Antonio’s friends works for the hockey team, so we got to see them practice.

According to Wikipedia, the Bolzano-Bozen Foxes “is the most successful team in the history of the Italian ice hockey league, with 18 championships.”

It was a fun visit, although we stayed out so late that it made getting up on Thursday a lot harder.

Thursday night we visited another city, Trento, about 50 kilometers further away than Bolzano. It was a business meeting with a potential client, and I hope to be able to talk about that project soon. Driving back it started to rain, and thus we woke up on Friday to see snow on the mountains.

Friday was my last day at the office (we had to drive back to Frankfurt that afternoon), so we spent the morning finishing up the migration. When it came time for lunch, I was expecting that we would take Michele out to a restaurant, but he had a surprise for us. We walked over to his house and met his family, and his wife cooked me the best meal I’ve had in Italy this trip.

Michele speaks at least three languages, his wife is fluent in five, and even his oldest son (who I think is around four or five) can speak three. I had a very nice conversation with him in English. Michele’s youngest son was sleeping, so I didn’t get to spend much time with him, but even at two he’s probably studying ancient Greek and Relativity. (grin)

It was a great ending to a wonderful week.

As I’ve mentioned before, there is something about the Open Source Way that brings vendors and clients closer than usual. I have even grown hate that term “vendor”, as I much prefer the term “partner”.

Or better yet, “friend”.

Steve Jobs

I’m in Europe at the moment. I love visiting here, but the lack of easily accessible Internet access outside of my clients’ offices is frustrating. For example, this week I have the option of paying 5€ per hour for crappy hotel wi-fi limited to ports 80 and 443, or, thanks to my client, a somewhat okay connection via a Vodafone UMTS USB modem. Since I want to limit the amount of traffic that they get billed for, I only use it to check e-mail, and sporadically at that.

I just arrived at the office and learned that Steve Jobs has died.

I am saddened, of course. He was only 56, eleven years older than I am now.

I figured I’d try to capture my feelings while they are still fresh.

My first computer was a TRS-80 (model 1, ‘natch) which put me squarely in the camp opposite the Apple ][ fans. The reason I had a TRS-80 over an Apple was simple – there was a Radio Shack in my small town. I did have some exposure the the machine, and I especially liked the fact that the cover popped open and you could see inside it. While I spent a lot of time inside my TRS-80, I immediately voided the warranty when I did it.

My path did not cross Apple’s again for several years, when a friend of mine bought a Mac Plus. This would have been around 1986. He taught me how to use the interface, and I was impressed by the quality of the documents I could output from the machine. However, being a DOS/Windows user, I was often frustrated by the lack of a command line interface.

In 1988 I started working for Northern Telecom, which was a Mac shop. I think I had a Mac IIcx on my desk, but I forget the exact model. This was one of the first machines I used that was networked – not quite to the Internet but definitely to other machines within the company.

These were the twilight years for Apple. The machines were pretty, but they were expensive and prone to viruses. A friend of a friend was the Apple rep for Nortel, and I can remember that Terry came in one day to demo some new machines and he spent two hours disinfecting them.

Once I left Nortel, I didn’t work with Apple for a long while. I did date a woman with a (at the time) screamin’ SE/30, but I used it mainly to play games (Fool’s Errand, etc.).

Flash forward to January of 2003, and I started seeing all of these things called “Powerbooks” showing up at the local LUG. My company was doing well, so when the 12″ Powerbook was announced, I bought one along with an iPod.

I was hooked.

Here was a machine with a strong Unix base but an easy to use interface. Here was a machine that I could use to run all of my favorite open source software but I could also get a decent printer driver from the vendor. It even made me nostalgic for that old, original Mac, so when I saw one on its way to the dumpster, I rescued it and made it whole again.

Since then, I’ve been a Mac user and fanboy. None of this would have been possible without Steve Jobs.

He created great things, but what I like the most is that he showed it was possible for one person to make a difference. While my team doesn’t work along the dictatorial style he was known for, we are much smaller than the companies with which we compete. Steve showed that it was possible to successfully compete against giants. He took a company on the verge of bankruptcy and turned it in to the most profitable company in the world.

I couldn’t be honest with myself if I didn’t remind my three readers that I am parting ways with Apple. With its amazing success, Apple is moving in a direction that I don’t agree with. I am much more excited at the moment about the pending release of Ubuntu 11.10 (Onanistic Olifant) than I am about the iPhone 4S. I don’t like where Apple is going, but that should not take away from where they have been.

The best comment I’ve read so far is that Steve Jobs made it possible to have an emotional connection to technology. As I write this on a Macbook Air, I am not thinking about OS X or licensing, but I am imagining I am having a conversation with a few old, good friends about the passing of another. Steve, in part, made that possible.

I admire Steve Jobs, but despite his success, I would not have wanted to be him. Fifty-six is way too young. To quote Woody Allen, I don’t was to achieve immortality through my work, I want to achieve it through not dying.

So long Steve, and thanks for all the tech.