Why I love digital photography

I was poking around in my Aperture library after importing the latest batch of game photos from Evan’s U5 soccer team today, and I realized that I’ve kept 2345 photos so far this year (on pace to keep well over 6000 in 2007). At the average ratio of keeps-per-deletes, that means I’ve shot well over 10,000 photos so far this year – and the year’s not even half over yet – I might conceivably shoot over 30K photos in 2007.

Prompted by this realization, I wondered about what trend might be shown in the number of photographs I’ve kept over the last few years. I mined my Aperture library for the numbers, and threw them into Keynote to make a pretty graph. It’s pretty obvious what happened when I switched from film to digital.

Photographs kept per year, as of 2007

As soon as I stopped worrying about film (what ASA is in the camera? how many shots left? how much is this going to cost me?) the number of photos I took shot up exponentially. It’s a little depressing to think of the awesome shots I missed out on from our wedding and honeymoon back in 1997, and the vacations and family stuff before the switch to digital. Even the first digital camera, although very low quality by 2007 standards, was a boon because it meant I could experiment and take more photos.

With that said, I’ve had my Canon EOS XT for almost a year now (got it for Father’s Day 2006) and am still having a blast with it. I’d be willing to bet that this graph will begin to plateau. It’s not feasible to be taking too many more photos while maintaining a day job and still seeing the family…

The last time I got all retrospective about my photographing habits was back in November 2006, when I realized that the number of “starred” images per month was rising dramatically, hinting that I’m becoming more happy with the shots I’m taking, or that I’m perceiving that I’m taking better photos, or that I’m taking so many more photos that I can delete most and be left with only good stuff.

Update: I added an estimated value for photos taken per year, as well as the number of photos “starred” per year and regenerated the graph.

Photographs taken, kept and starred per year, as of 2007

A better WordPress category selection UI?

I have a lot of categories in this blog. 542, to be exact. I use them like tags, rather than a rigid hierarchy.

The WordPress Categories panel in the “Write Post” interface sucks with this many categories/tags. Having to scroll through a verrrrry long list to hunt for keywords is tedious. Here’s a screenshot of Drupal’s autocompleting text-entry interface, which makes it easy peasy to select existing categories/keywords and to add new ones all in one fell swoop. As you type keywords, an ajax call is sent to the blog, returning any categories that match the characters that have been typed, making it easy to select matches from a potentially infinite set of terms. This pattern is also used by del.icio.us very effectively.

Drupal Categories

Compare with WordPress’ infinite list of keywords, which involves scrolling through a neverending list of alphabetically sorted categories:

WordPress Categories Selection UI

There has to be a way to replicate this in WordPress.

How to migrate from Drupal 5 to WordPress 2

I migrated my blog from Drupal 5 to WordPress 2 nearly 2 weeks ago. The process wasn’t as painful as I thought it would be, thanks to a handy howto via vrypan.net. Another resource I refer to every time I get into tweaking MySQL rows is UrbanMainframe’s MySQL search and replace tipsheet. Thanks to both of these great resources for helping me through the migration.

This guide is intended only to document what I did. It’s not a polished howto or manual. There is no warranty. If you blow up your database because you didn’t work with offline backup copies, I won’t be able to help you. Actually, if you’re that silly, I won’t be willing to help you, either. Your mileage may vary.

Use a backup copy of your Drupal database, and a fresh WordPress database.

The basic process I followed was:

  1. Work from offline copies of the databases. Dump your Drupal 5 database, import it into a fresh database (say “drupalmigration” or something creative). I did the migration on a separate machine from my “live” server – I used my desktop box, with local copies of MySQL and Apache. Anything with a decent version of MySQL on it will do.
  2. Install WordPress, (you don’t need to install Drupal for this migration) using the same database server containing the copy of your Drupal database (use “wordpress” as the name of the new WordPress database).
  3. Now that you’ve got WordPress and Drupal running on the same database server, in separate databases, run this MySQL script which I modified slightly after the file provided by vrypan.net. The script assumes the WordPress database is called “wordpress” and the Drupal database is called “drupalmigration” – feel free to modify the script to match the database names you need to use, if they differ.
  4. That should do it. Log into your WordPress site. You might have to hand tweak the usernames, but all posts and comments should be there…

One additional thing I had to do was fix the comment_ID values in the wp_comments table. After migration, they were too big for the data type, and things went poopy. I’m sure there’s an elegant way to renumber rows in MySQL. I used brute force, by dumping the table to a .sql file and opening that in a text editor to do a search-and-replace to lower the numbers used as primary keys. I then moved the old table out of the way (renaming it to “wp_comments_old“) and imported the new wp_comments table definition and content. It was a funky thing to have to do, but it solved all kinds of comment-related misbehaviour.

Test things out in the migrated database. If all seems well, go ahead and dump the wordpress database to a .sql file, and import it into a new database on your server. Install and configure WordPress on your server to use this new database. You may need to manually change the URL used by the blog, so that it matches the “live” server rather than whatever you used as a staging/migration server. The values are in the wp_options table, with option_name of “siteurl” and “home” – change those values to whatever matches the root URL for your blog.

You’ll also have to make sure all files are in the proper place, so URL references from the old Drupal content doesn’t point off to 404 error pages. That’s an exercise left to the reader. I just SSHed into my server and used a lot of cp -R drupal/directoryname wordpress/directoryname – being paranoidally careful to copy files rather than just moving them. Always keep backups.

Update: I’ve updated the SQL script to automatically set the comment and category counts, so it should appear to work better now.

Flocking Browsers.

I got really frustrated with how painfully slow Firefox gets when opening new tabs, so went through my seasonal try-every-browser-known-to-mankind phase last night and today. At the moment, I’m in Flock. It’s based on Firefox, but doesn’t seem to suffer from the glacially slow new tab/window creation problem I get in Firefox. I think I’ll try Flock for awhile. The integrated blog editor is nice, as well as built-in Flickr and del.icio.us love. I’ll stay with it at least until it pisses me off. I’m fickle that way.

wait. why doesn’t flock’s rich text editor in the blog post window NOT have an image button? I can drag images from Flickr right in there, but can’t modify the image HTML without switching to source view? Oy.

And Flock STILL doesn’t sort categories when posting a new entry? Seriously. WTF, Flock?

Update: Had to go in via the WordPress UI because Flock double-posted (the edit was sent as a new post, despite the “edit post” checkbox being checked). I think I might stick with the WordPress web UI for managing the blog…

Update 2: Gave up on Flock. It started showing the glacial-tabs-and-windows I see in Firefox. Makes it unusable when constantly opening new tabs and windows. Back to Safari for awhile. I’ll likely stay there until I get frustrated by lack of support for rich text editors like TinyMCE, which is used in every piece of software I use…

Update, the third: On to a nightly build of Camino. It’s got Gecko for compatibility, and it almost feels like a native MacOSX app. Close…

Taking Small Pieces for Granted?

I’m wondering (out loud) if I’m guilty of taking the Small Pieces Loosely Joined concept for granted. It’s one of those things that can be talked about at length, but isn’t really understood until a gulp of SPLJ Kool-Aid has been swallowed and the approach has been tried on. Conceptually, it makes sense to talk about using a set of small, directed, task-oriented tools, each doing what they do best, then integrating the various tools to produce an organic, dynamic system that resembles a custom-designed software platform.

I listened to the ETS Talk Podcast #24 on the way home on Friday, and it really hit me how the SPLJ epiphany really is an individual and personal thing. It’s not about comfort with “web 2.0″ or with technology at all – it’s more of a matter of being ready to start thinking about things in a different way. Cole and co. have been living the blog/Web2.0/open life for years now, but they reached their SPLJ epiphanies “on the air” during that podcast, when they were able to connect the concept to how it could impact what they do, and how they could approach things differently. It was actually pretty cool to hear them audibly change as the SPLJ Kool-Aid was swallowed.

I haven’t exactly been very successful at walking the SPLJ walk myself – doing most of my work in content management systems that extend rather than integrate. What I typically wind up with is a rather monolithic application, tailored for a specific set of users. When a new project comes along, the customization process begins anew. How could I better take advantage of the SPLJ approach?

SecondLife Avatars

It’s always bugged me a bit that my SL avatar was a plain-vanilla human. I mean, here’s this awesome metaverse, where the rules of physics don’t apply, and you can change your appearance at will. And I was walking around, looking much like I do in real life. How creative and interesting.

So, today while watching Stephen work his magic on a panel on SecondLife, in SecondLife (ooh. recursion!) I went shopping for a new avatar. I don’t have time to create an avatar at the moment, and for some reason have a few thousand Lindenbucks in my account. So I went hunting for a prefab avatar that I could live with. I was initially wanting to be a disembodied singularity or something entirely Other. But then I stumbled across the Battlestar Galactica Centurion, from the original 1978 classic series. Perfect.

Centurion in SL

After some help by CogDog (the canine in red pictured here), I was able to “wear” the new avatar (the trick: don’t click “wear” in the inventory. Drag the object out of the Inventory onto the ground, right click that, and click “wear” then. very intuitive). I made some modifications to myself after donning my new personna – lost all hair (it was poking out of the helmet) and I now have black metallic skin (not the odd pink flesh sticking out between the gaps in the gloves).

I suppose I might upgrade it if I find something from the current BSG series. A Cylon Raider? How about the Smoke Monster from Lost?

Uniquely extend cost effective meta-services whereas one-to-one outsourcing

Efficiently whiteboard dynamic content without cross-unit channels. Distinctively implement plug-and-play manufactured products with open-source innovation. Proactively integrate goal-oriented paradigms before best-of-breed internal or “organic” sources. Energistically network multimedia based markets rather than diverse convergence. Enthusiastically implement wireless web services without standards compliant platforms. Globally embrace enterprise-wide ROI rather than cross-unit applications.

Compellingly expedite prospective imperatives and worldwide results. Efficiently aggregate pandemic partnerships via client-centered e-services. Professionally matrix high-payoff methods of empowerment via out-of-the-box niche markets. Compellingly scale ubiquitous opportunities after customer directed benefits. Enthusiastically foster principle-centered sources without economically sound technologies. Continually disintermediate resource maximizing testing procedures whereas low-risk high-yield mindshare. Enthusiastically architect just in time ROI before ubiquitous core competencies. Assertively provide access to interdependent intellectual capital through 24/365 benefits. Assertively create wireless initiatives vis-a-vis accurate information.

Dynamically revolutionize value-added human capital and exceptional technologies. Monotonectally matrix frictionless e-markets via ubiquitous architectures. Completely network distributed networks vis-a-vis go forward data. Intrinsicly reintermediate principle-centered architectures vis-a-vis leading-edge solutions. Energistically plagiarize visionary quality vectors for exceptional networks. Synergistically unleash mission-critical paradigms through integrated models. Proactively evolve fully tested meta-services without enterprise-wide testing procedures.

Switched back to WordPress

I’ve been using Drupal for my blog for just over a year now, and it’s been a really great platform to work in. I use it pretty much all day for projects at the U of C as well. But it just feels a bit lacking in the area of managing a personal blog, compared with WordPress which is built solely for that purpose.

I’ve been missing things like email subscriptions to comments, and some of the other niceties that WordPress has had nailed for a long time, but are missing in Drupal.

So, if you can read this, it worked. But things are going to be messy for awhile while I finish tweaking stuff. If anyone knows the quick easy SQL to run to recount all comments for posts, to properly set the value of wp_posts.comment_count I’d appreciate it. All comments are properly in place, but they don’t show up in the comment count indicator until/unless someone posts a new comment on the blog entry.

In the meantime, all static pages (including About, Contact, Links, etc…) are borked. I’ll fix them up as I have time.

Update: Lovely. Looks like new comments are being rejected here. wtf. worked fine in staging before moving here… A blog without comments. Good thing I left Drupal…

Update 2: Things are pretty much up and running. I’ve added a bunch of modules, and will start playing when I have/make time. Overall, I’m pretty happy with it. I miss some of the power of Drupal, but am liking the simplicity of WordPress.

MediaWiki as a presentation application

I gave a presentation this morning as part of Faculty Technology Days 2007. I was asked a few weeks ago if I'd like to talk about weblogs and wikis, and I couldn't come up a reason why not, so they slotted me in. In the meantime, I've been doing a lot of thinking about weblogs, wikis, academic publishing, and being Open, Connected and Social. So I decided to try to subvert my presentation slightly, into a more open-content-is-good kind of talk (but still based on blogs and wikis for much of it). What better way to do that, than to present directly from a wiki? It's worked very well for Brian Lamb – all of his presentations are wiki-driven.

Yesterday, I came across a link to some Firefox Greasemonkey scripts for use with Mediawiki. (aside: I'd thought I'd seen the link via Twitter, but can't seem to find who said it there – I remembered it being from Scott Leslie, but it could have been through del.icio.us, or via a comment he made on a blog somewhere…)

Anyway, on scanning through the list, one jumped out at me. Not literally, but that would have been cool. The "Wikipedia Presentation" script sounded very cool. I'm a big fan of the wiki-as-presentation style, and this mashed up a Mediawiki page with the awesome S5 html presentation engine. By installing this script, it automatically enables viewing any Mediawiki page as a full-screen slideware presentation.

So, I installed it.

And it failed. The current version of the script has been updated for the current version of Mediawiki. I'm using an older version (because my server doesn't have the latest PHP bits to run the latest MediaWiki). Older Mediawiki pages use div elements to mark sections of a page, while newer versions use spans. After some extremely complicated editing of the Greasemonkey script (changing the 3 instances of "span" to say "div" instead) I was off and running. My modified (i.e., reverted) version of the Greasemonkey script is available here.

The cool thing, if you're using a Mac (and, really, what ISN'T cooler if you're using a Mac) is that you can install an application called Mira to enable using the Apple Remote to control Firefox. I bound the back/forward buttons on the remote to the left/right arrow keys, and I was navigating through a Mediawiki page as a full-screen presentation, using a wireless remote.

With the script installed, the wiki/presentation page for this presentation should show a "Start Presentation" link right beneath the article title.

There was one minor tweak I needed to make. By default, the content of the slide starts too far down the screen. When using a projector, you may be stuck at 800×600, and a bunch of that was sucked up by empty space at the top. So, I overrode one of the styles to make it start higher up. There are a couple of ways you can do this. If you have the Web Developer extension installed, just add a new User Style Sheet containing the style below. Otherwise, edit your Mediawiki skin (in my case, the file at /skins/monobook/main.css ) to add this:

#wikipedia_presentation {
margin-top: 0 !important;