Photo management

Here’s a more genuine lazy-web request today: online photo management. But here’s the key: for internal use, not just for showing other people our photos.

At the moment, Andrew and I dump all our photos from our cameras into F-Spot. It’s an OK little program, but this is already a bit of a hacked together solution.

F-Spot is really designed to run on your desktop, suck photos from a camera, and store them on said desktop’s (or personal laptop’s) drive. This model doesn’t really work for us. Firstly, laptops get stolen. Andrew had his stolen in November 2005 and for a while we were worried we’d lost more than a year of photos. We hadn’t because at some point that neither of us clearly remembered but only dimly inferred, I’d bugged him until he dumped copies on our fileserver. So we want very regular backups onto another machine, or master copies stored there (with 15 GB of photos to date, 6 GB of which were taken in 2007, master copies is starting to make sense).

F-Spot has a per-user photo and tags database which is based on an assumption of each-photo-belongs-to-one-person just like my word processor’s equally false assumption regarding my documents, which has, I’m told, resulted in any number of variously buggy and expensive version control systems for Word. Only for code in plain text files has this problem really been solved well and often. Anyway we have a setup whereby we mount our photo disk on the fileserver over sshfs, and have symlinks to a shared photo database also on the photo disk, and F-Spot falls over and dies all the time and we kind of deal with it mostly.

F-Spot is also kind of difficult to use. It has tags, but you have to pick them from a huge drop-down list, meaning that to tag a single photo with all five of my family members in it can easily take me thirty seconds. (Or, yes, I could subcategorise them, but the Andrew and Mary tags then belong in about five categories each and it doesn’t allow that.) It doesn’t have albums either: you approximate that with tags, so you really do need a lot of tags… which means making the tag list even harder to use. I believe iPhoto, which is similar but more mature would be a bit better, but equally bad in the each-photo-belongs-to-one-person assumption, or possibly even worse because there might not be a workaround with mounts.

Anyway, if someone has a web service whereby we could dump all our photos onto it and manage the metadata there mor dynamically there, we’d probably use it, and pay for it (assuming that we got access to an acceptable backup mechanism). But the thing there is a whole different set of assumptions with online photo management: that we want to show someone the photos we upload. This is only true of about a tenth of our photos in reality, the rest of them suck even more than the ones we do end up uploading to show people. The rest of them we just have sitting around because, hey, they’re in focus and hard drive space is cheap. We need something that combines we’d like to show people some photos with we have a lot of photos we just store and annotate. And then there’s the lock-in (most people I know have photos on Flickr, and won’t see anything I post off Flickr), Plus Flickr at least also has more than a bit of a each-photo-belongs-to-one-person assumption behind it and also doesn’t seem to have a mechanism for this photo is a version of that one like the desktop apps do.

So, is there something that could do this for us? I suppose bonus points if I could occasionally cross-post to Flickr.

Measuring performance

James Gregory has an entry up called Metrics, on metrics as used to measure the performance of your software product: is it as fast as we need, as stable as we need, as tested as we need? He then goes on to talk about measuring the performance of your coders:

There’s other metrics you should watch as well: the deficit between a programmer’s estimate on time to fix a bug and actual time taken is honestly the only way to start getting good time-estimates. Which is another important point: metrics don’t just let you improve your product now, they help your staff get better at their jobs.

Similarly, it’s imperfect, but trends from time-lines of bugs open, and rates of bugs opened per unit time show interesting trends. I’ve found these to be good indicators of project completeness in the past, but these metrics are dangerous: it’s easy to be misled by this stuff, so treat such metrics with suitably large salt-grains.

He goes on to note Joel Spolsky’s objections to measuring programmer performance like this, which are in Spolsky’s article The Econ 101 Management Method. James says:

The example [Spolsky] gave was in reference to his company’s bug-tracking software, and he submitted that once you can measure the bugs-closed per unit time value, programmers will start artificially inflating their count by lying to the bug-tracker and to you. I frankly find this position a bit offensive, but if such situations exist it reflects poorly on management rather than the engineers. You need to be accepting of metrics that show problems, because if people hide the problems, you can’t solve them, but similarly: if you can’t measure, or, don’t look for the problems, you can’t solve them either.

Spolsky has an argument from psychology too, which I’ll get to, but first I thought it was worth noting that while James who is (let’s stipulate) a good manager needs to work with, optimise around or fire bad engineers occasionally, we as (let’s stipulate) good engineers need to defend ourselves against bad managers. I can come up with all kinds of amusing or horrifying stories about managers who’ve gotten bees in their bonnet about various metrics or other ‘signs’ that a project is going well or badly, or that they’re being undermined or are about to get a bonus or whatever. For every manager who is trying to notice patterns like every time you tell me a bug fix is going to take a day, it actually takes a month there’s one who is roaming around reminding people triumphantly that all version control commit messages must have at least 100 words in them. [I should note that this example is hypothetical: no actual crazy managers were harmed in the making of this blog entry. That said, I’m sure there’s some manager out there doing this right now.]

That’s a bad manager! isn’t much consolation when you work under said manager.

Anyway, as far as it goes, I suppose Spolsky’s point is that programmer performance is unlikely to be measured by a single metric any more than product quality is in James’s post, with increases in speed needing to be balanced against security, stability and maintainability metrics. But, if you do make the mistake of relying on a single metric for product quality, as James notes, you get a very fast piece of software which barely works. That’s one thing. But Spolsky is arguing that if you rely on a single metric for programmer quality, you not only get say, a low bug count at the expense of tests, you also get worse programmers:

Intrinsic motivation is your own, natural desire to do things well… Extrinsic motivation is a motivation that comes from outside, like when you’re paid to achieve something specific.

Intrinsic motivation is much stronger than extrinsic motivation. People work much harder at things that they actually want to do. That’s not very controversial.

But when you offer people money to do things that they wanted to do, anyway, they suffer from something called the Overjustification Effect. “I must be writing bug-free code because I like the money I get for it,” they think, and the extrinsic motivation displaces the intrinsic motivation. Since extrinsic motivation is a much weaker effect, the net result is that you’ve actually reduced their desire to do a good job.

So Spolsky has a point beyond you’ve got to be careful that you don’t mistake the metric for what it’s measuring, although that’s part of his point. This is a point that scientific method training hammers into you: you need metrics to help you decide what reality is doing, but the metric is not the same thing as reality, it is only ever an approximation to it, and is only good insofar as it is a useful approximation.

Spolsky’s other point is that regardless of whether you, the stipulated good manager, mistake the metric for reality, the people judged based on the metric will: they’ll even start mistaking the metric for their conscience. This, I think, is a point James hasn’t addressed yet.

Buying a laptop from the US: not impossible, just whine-worthy

Russell Coker interpreted my post about how laptops are expensive in Australia as a lazy-web request for instructions on how to buy a laptop from the US, and posted accordingly. His blog is down, so I thought I’d clear it up here: I know how to buy a laptop from another country.

It can even be much easier than he suggests: some US sellers will happily post or courier a laptop to me directly, without the need for me to find a friend about to visit Australia. And I can also get someone in the US to take the delivery and re-post it, if I need to. In any event, it comes to Australia, it gets held by Customs, I pay import duties, and it still ends up being much cheaper than buying it from an Australian importer (import duties will be 10% of the purchase price, give or take, but Australian markup for pre-imported laptops over US sale price is closer to 100%).

So why a post at all then? It wasn’t a lazy-web request, it was just a complaint. There’s a cheap method of buying a laptop, in which I shop on US websites after finding one that will take a non-US billing address, bother my friends, spend a lot of time researching the minutiae of warranties (I’m at a loss, for example, for how I check Russell’s claim that ThinkPads have international warranties unless I already own one), spend a bunch more time on Customs paperwork with which I’m utterly unfamiliar and then receive it. There’s an easy method of buying a laptop, in which I walk into an Australian store, give them money and receive a laptop. One takes many hours of my time, one involves twice as much money. And thus a whiny blog post was born.

Conference networking software

A lot of the time when I hear about new social software I wrinkle my nose. Take this post hoping that people will take up Dopplr, which is apparently a site where you enter your travel details and it tells you if you’re going to be in the vicinity of friends while travelling. Why did I wrinkle my nose? Because the beneficiaries of this kind of site are people who travel a hell of a lot. The rest of us are just being harangued into entered our very occasional trips in order to provide the pool of people that our well-travelled friends might or might not hang out with. The chances of me personally finding someone to hang out with when travelling are much higher if I just post an itinerary to my blog and hope someone sends me an email saying huh, I’ll be in town that weekend!. (Speaking of which, anyone I know going to be in Iaşi, Romania, between July 22 and August 6? Thought not. Let me know if you want a postcard though.)

Be that as it may, here’s a social software idea that sounds useful: Crowdvine + Pathable, a combo which FOO Camp people used to hook up people with similar interests. Conferences should indeed do more of this stuff: you and him, you guys need to talk! There are meet ups and BOFs and such things of course, but it does sound like it’s possible to develop the matching a lot if you can persuade people that it’s worth their while to do up a decent profile.

The pain and the agony

Kirrily Robert discusses The Tyranny of Distance: Why it sucks to be an Australian geek, prominently featuring the price of bandwidth, the price of books and the price of electronics.

This bears highlighting, because I need a new laptop fairly urgently. The Lenovo T60, when purchased in the United States, costs AUD 1300 or a bit less at the current exchange rate. When purchased in Australia, it costs about AUD 2500, that is, around about double the US cost. (Memo to USians whose major exposure to the Australian dollar was a few years ago: it buys USD 0.80, roughly, not USD 0.50 as you may have become accustomed to assuming, which means that doubling the US cost to get a price in AUD is no longer just a function of the exchange rate.)

A few other models at current actual sale prices on the official websites (not RRP, which the US models are typically discounted from):

  • Dell XPS M1210: 1050 AUD in the US, 1400 AUD in Australia, about a third more expensive
  • Dell Latitude D630: 990 AUD in the US, 1900 AUD in Australia, a bit less than double
  • HP Compaq nc2400: AUD 1800 in the US, AUD 3000 in Australia, a bit less than double

It’s not clear to me what one does from here. I bought my recently deceased Fujitsu Lifebook S6120 in the US, but I never had to exercise the warranty, so I don’t know whether or not I could have had it serviced in Australia. I don’t know if there are any manufacturers who will honour warranties locally on self-imported laptops. And of course, I have to put it through Customs myself.

Wii games I’m excited about

  • Mario Strikers Charged, because it sounds hugely crazy. And it’s online multiplayer. And it’s actually been released. Wow!
  • My Sims, because it looks like the absolute purest crack.
  • Guitar Hero III, even though Harmonix won’t be doing the development because, hell, we’ve been waiting a long time. A looooong time.

Also, for those of you who have Jedi mind powers, a push for Wii versions of Rock Band (Harmonix made encouraging sounds) and Spore (hell, it’s going to be on the DS!) wouldn’t go astray.

Canon EOS Beginners’ FAQ

I’ve pointed this out to enough people recently that I might as well make a blanket recommendation: if you are about to be or are a relatively new owner of a Canon SLR, digital or film, specifically an EOS (that’s Canon’s SLR series since 1987 right up to the new models), you’re interested enough to do a fair bit of reading beyond the manual and you don’t already know a lot about the technical details of photography, have a look at the Canon EOS Beginners’ FAQ by NK Guy.

Photography is a complex field, and it can be difficult getting started. There’s a lot of material out there aimed at beginners, but much of it is quite general and doesn’t get into a lot of the specifics of a given camera maker’s product lineup… There’s more specific material to be had, but a lot of it is quite advanced in nature. For example, Bob Atkins has an excellent Canon FAQ available, but it has little beginner material and has not been recently updated.

So that’s the purpose of this document. It’s information on Canon EOS SLR cameras and related products, aimed at the beginner and packed with a lot of typical questions that beginners actually ask.

Introduction to the Canon EOS Beginners’ FAQ by NK Guy.

Note that even if you already have a firmish notion of what aperture settings, shutter speed etc can do for you there’s still good material in this article on specific lenses and such that you probably don’t know unless you’re a Canon hound. It’s also written for a technically minded audience: I didn’t feel talked down to. It did start me wanting the Canon 100mm f/2.8 macro though (or perhaps the Tamron 90mm f/2.8 macro with the Canon mount), so it has downsides.

Tedious public service announcement: enrol to vote

As of, I think, yesterday, John Howard can go to the Governor General and call an Australian Federal election at any time, although he has until January sometime and is unlikely to do so right away with the polls against him.

As Australians may or may not know, the laws have changed since the last Federal election, and the rolls will close pretty much as soon as the election is called (rather than just before the election itself). So, if you’re a bored Australian citizen today, it’s a good day to check that you’re enrolled to vote, rather than being locked out when the election is called (especially what with voting being compulsory for most adult resident citizens).

Things to check:

Software recommendations and jMemorize

Andrew and I seem to constitute a test of software design in almost everything we do, because we share so much stuff. Not just computers, which is already sort of an edge case for desktop Linux these days (or so I gather from how likely it is that the friendly ‘Switch User’ functionality will freeze most laptops; users must be assumed not to share them). We share data. Scads of it. Not just code. All kinds of data.

We share cameras to the point of not always being sure who took which photo. Does f-spot want us to maintain two separate databases, descriptions and tagsets over our 14GB collection of digital photos? Does it want us to each have a copy of the collection on our laptops? Yes it does! (We get around this with sshfs which has many downsides, but at least we can share data and won’t lose everything the next time Andrew’s laptop gets stolen at work.) We share music collections and one good set of speakers. MPD is actually designed for that use case and some day the clients for it will vaguely approximate sensible user interfaces per Rhythmbox and Quod Libet and whatever Apple application they’re based on, instead of assuming that we’d like to browse the filesystem tree rather than, say, by artist or similar.

Today’s unsharable piece of data is, alas, jMemorize flash card decks. We’re both learning Spanish and would like to build a joint flash card deck. It took me a few weeks to give jMemorize a go at all because it was recommended to Andrew on the basis of having lots of cards ready for language learning and turned out to have lots of cards ready for learning Hebrew and New Testament Greek, so we have to do our own cards, contra the sales pitch. I was kind of cross about that.

Naturally though, we’d prefer to share the cards. I initially thought that, well, if the save format is text, I’d put it in version control and we’d both add to the deck. So I tried, and here are the options:

  • Share the full XML jMemorize data files, which means that the number of times you’ve seen this card and number of times you got the answer right statistics would, instead of being modelled to each of us, be modelled on the sum of our performance (in fact this is the ideal case, in actual fact the presence of this data in the file looks like it would result in a stupendous number of conflicts). Entirely unhelpful, since we’re learning exactly the same materials but can’t be assumed to be equally bad at every question. (This is all important because jMemorize adapts how many times you see a card based on how many times you get it right.)
  • Export to CSV. This basically doesn’t work at all for a repeated add some more cards, import some cards Andrew designed, export my cards to him, around we go exercise, because it doesn’t merge. If I export my cards to CSV, and then re-import them, they’re assumed to be all new, so I get a duplicate of any card I happened to have in the deck already.

Andrew points out that I could hand roll some kind of more easily mergeable file format that doesn’t include the user-specific how well am I, Mary, learning this fact? data, then have some kind of commit scripts that converts the XML to that format and commits that to the version control and then when I update, takes that format and stuffs it back into the XML (creating new cards only when it needs to). It’s not even a hard problem, unless I’m missing something crucial, but it’s, as usual, more time than I wanted to spend on this, given that I need to actually learn Spanish and I’m pretty much up to scratch on how that kind of hideous data munging is done.