an update

Sharon came over and made us lasagne as a belated birthday tea for me.

I have done a good amount of hacking; it was fun and got stuff done. Yay.

Later, we went to the park and walked by the river, and Riordon and I discussed high-voltage electricity transmission.

Metacity’s translation into Welsh has not been touched in almost two years. It is a shame. If one of you Welsh speakers who reads this would like to give it a shot (there are about 500 phrases, mostly short, about 80% of them already filled in, and most of them guessed by the computer from the others and you only have to make minor adjustments), I will show you how to do so and you will have your name all over the credits. If not, I am happy to try to do the work myself, but I would like it if someone would check my work since I’m hardly confident in my own fluency.

Oh, and I learned how to say “fish and chips” in Welsh. It’s “sgod a sglod”. Makes sense.

I think this does not sound like a very exciting entry. Sorry :(

Licensing of your holiday photos

Everyone seems to be talking about Facebook today, but it is rather amusing that half my friends are alarmed about the site because of the Scrabulous business, and half of them because of the question about licensing of user images, and only a few of them about both. Joe posted a link to a story about a supposed “rights grab” by Facebook of content such as pictures that its users upload. I thought a good deal about this and wrote up a summary of the things I thought and the things I wanted to know in the comments in Joe’s blog, and since it was contrary to the responses most people were giving, I thought I’d publish it again here.

Note that this just my opinion and ideas about the story, and is all “as I understand it” information; I’m not a lawyer, consult a lawyer if you do want to know about the law, may contain tree nuts, etc.

Why I’m interested about this:

1) BACKGROUND: Part of why Facebook is useful is that it lets you add photo albums. It has perhaps out-Flickred Flickr. But that would hardly be useful if it wasn’t integrated with the rest of the site, so it lets you use the photos in groups and as user icons and so on.

2) WHAT IT ISN’T. As the CBC article two away from Joe’s link points out, it doesn’t mean there’s a licence which allows random use of your images by anyone. I think this needs emphasis. The licence might, possibly, mean that Facebook could give or sell rights to use your photos to certain people. It does also mean that anything you’ve already uploaded has already been given away under this licence and deleting it doesn’t stop it in theory (although in practice I imagine it does).

3) WHY IT IS BASICALLY REASONABLE: Presumably Facebook think they need some kind of licence in order to make sure nobody sues them for reproducing an image that they themselves uploaded. (When you upload a video you are given many stern warnings about making sure you have the right to do so.) Presumably, also, they are concerned that if they ever sell or spin off facebook.com to a different company, reassigning this licence is going to be a trivial matter rather than requiring new permission from every person who has used the site (as KDE had to do for their entire codebase when they relicensed it, iirc). This much of the licence seems reasonable, and the ordinary cover-your-arse clause. I believe MySpace have pretty much the same. What is an interesting question is whether they intended to be able to give or sell away these rights for individual pictures when they wrote the licence, and whether they’re doing so now.

4) WHAT WE DON’T KNOW. We don’t know whether this has ever happened. What we know is that in the case of Stefanie Rengel, the Toronto PD and some newspapers published her Facebook picture, with credit given to Facebook. It is not terribly surprising that Facebook provided Rengel’s photo to the Toronto PD (they have a well-known history of cooperating with law enforcement). But we don’t know whether the Toronto PD had permission to publish it. We don’t know whether Facebook found that they had given themselves rights to assign rights to use the picture, and told the Toronto PD that they could do so to help the murder investigation. We further don’t know whether the CBC and the newspapers had permission from the Toronto PD *or* Facebook to use the photo. If the newspapers did have permission from the Toronto PD, we don’t know whether the Toronto PD had been given permission by Facebook to grant permission to use the photo. (That last sharealike point is one I think might be missed by people who don’t spend time thinking about licences.) It is particularly strange to see CBC reporting on CBC themselves exploiting an apparent loophole in the Facebook licensing, and also strange to see them silent on who exactly gave what permission to whom. We don’t know any of these things from the stories linked, and people are getting very excited on very little information.

5) RIGHTS AND THINGS: This doesn’t appear to affect Rengel’s case, but most countries, including Canada, recognise the Berne Convention concept of “moral rights”:

“Independently of the author’s economic rights, and even after the transfer of the said rights, the author shall have the right to claim authorship of the work and to object to any distortion, mutilation or other modification of, or other derogatory action in relation to, the said work, which would be prejudicial to his honor or reputation.”

I believe that Canadian law does not allow these to be sold, but they may be waived. Facebook’s TOS is silent on the matter. And there’s also the separate issue of model release to consider (recall the case of Alison Chang), but I don’t know how that affects photos of the dead.

Towns

  1. Most towns are small, and have only one name.
  2. Larger towns often have names in multiple languages (Wien, Vienna, Vienne, Vídeň…; London, Llundain, Londres…)
  3. Generally, one of these names tends to be a default name for languages which don’t have a specific name for the town.
  4. The issue of how to represent the name of a town in a language which would use the default name, except that the default name is written in a different script, is an interesting one. It may be solvable programmatically. This needs investigation.
  5. Most large software projects eventually run into the need to show the names of towns to the user. libgweather has locations.xml, which is a real nuisance to translate because the strings get folded, so there’s no way to translate York in England differently from York in Nebraska or York in Pennsylvania. And there’s also marble, and whatever the KDE weather applet is using, and OpenStreetMap needs translation as well, and probably a bunch of others, and most or all of them are reinventing the wheel of name translations.
  6. Therefore: I would like to propose a standard database (in a standard decided format, maybe xml-based, maybe not) somewhere central, like freedesktop like the iso-codes package, under a free licence, which contained:
    • all the names of a town, by language
    • one of those names marked as default (the great majority of towns will have only a single name)
    • latitude, longitude, and if uncontroversial political superentity (country, or state+country)
    • possible extra data as necessary, such as airport ID
    • a unique ID code
  7. We can mostly generate this information from working backwards from the existing projects. This will also be a good demonstration of if and where the duplicated information is inconsistent.
  8. Various projects can then sync their data with this database, or use it directly. Clearly it’s not worth starting until we know people are likely to use it. Your feedback is requested.
  9. Towns which have more than one name in the same language and where using either name is a politically sensitive matter are beyond the scope of this document, but are a problem we will certainly run into.

Updates:

Feedback from KDE/Marble people: What is needed is:

  1. a simple way of mapping to other databases using unique keys, etc.
  2. it is DFSG-free, otherwise most projects can’t use it
  3. there is a simple and easy way for translators to change and contribute.

Feedback from Abigail Brady: http://geonames.org already exists and is almost exactly what is described above.

HOWEVER, geonames.org is cc-by, which is not DFSG-free, so it’s rather a dead end. (Of course OpenStreetMap is also cc-by-sa and hence also not DFSG-free.)

Epiphany (the feast, not the browser) and what came after it

Fin had a pretty good birthday, I think. Alex and I were going to make a cake for her, but her mother came over and made her a birthday tea which involved steak and ice-cream (but not both at once).

From Neil Gaiman’s blog we learn that the Uncle books are to be reprinted at last. Uncle is an elephant who wears a purple dressing-gown and lives in a castle as big as a city that has never been fully explored. The company which owns the publishing rights would not reprint them because they thought they were classist or something.

I had a strange dream where there was an orange ferret loose in our kitchen (but it wasn’t the kitchen of any house I know) and we had to chase it out. Later, in another dream, I was told there was an exciting adventure holiday that Rio and I could go on together, and it happened to be in Gwent. I went and looked at the details but they had a map of Glamorgan. (The only word I remember reading from the brochure now I’m awake is “Chwefror”, February, so possibly it would have been a rather cold holiday.)

Uruguay to be the first South American country to have civil unions.

It’s all a conspiracy that people won’t fix the bugs we ask for, for free, and it’s just because they disagree with us politically.” I don’t think I ever enquired as to the political leanings of anyone raising a bug before…

Riordon, Alex and I played Mao last night; it was Rio’s first time playing the game, and she got a bit frustrated, as anyone does their first time playing Mao. We decided by mutual agreement to call the game off after about ten minutes, but I overheard her saying to herself later, “Penalty cards aren’t penalties like at camp where you don’t get sweets or something, and it’s just really like Uno but you don’t talk.” Then she came over where I was working and asked me what you say during a point of order when you’re not allowed to say those words, and we had a discussion about how Mao is a formalised representation of learning anything– a way of learning about learning, really, in the form of a game, and how learning anything new can be a frustrating experience too.

I love PostSecret. This was my favourite card this week. I think anyone who is good enough to introduce you to Borges deserves really good beer, just as anyone who is good enough to introduce you to Nesbit deserves really good tea. But on that note, I was contacted the other day by Professor Christianson, who taught me years ago, telling me amongst other things about his new book, and when he heard about Riordon he is apparently sending her a copy. I will post more when it happens.

Answers to stupid questions

I commend Cecil Adams’s Straight Dope to you. For thirty-odd years they have been fielding difficult questions from the public with snarky answers. Reading the archives will probably teach you as much as a year in some schools.

There are, however, some questions they refuse to answer. In a spirit of homage, I’ll take my lunchbreak to answer them here.

Why do we need a hot water heater? If it’s hot it doesn’t need to be heated.

Your grasp on the concept of apposition is shaky. Apposition is the placing of two nouns or noun phrases together, so that the one tells you more about the other. In some cases they are simply two ways to describe the same entity, like “my sister Lucy”. You seem to be thinking that a “hot water heater” must be a heater to heat hot water, and that’s one option, but consider other examples like “sausage machine”, a machine to make sausages. A hot water heater is a heater which produces hot water.

How can we have jumbo shrimp?

This is a rather amusing question, because although the person asking it is presumably aware that “shrimp” is both the name of a creature and a description of size, they are possibly not aware that the same is true for “jumbo”. Jumbo was a famous elephant in London Zoo in the 1880s; if he had been a particularly small elephant we could have said he was a shrimp Jumbo. Use of his name to mean “very large” followed within ten years. Shrimp are in fact so called because of their smallness (the word is related to “shrink”) and we have records from the 1300s of using the term to describe people. So the fact that the adjectives in both cases are derived from comparing whatever it is to very large or very small animals is irrelevant; everyone knows you can have small elephants and big shrimp.

Why isn’t phonetic spelled the way it sounds?

1) It is. The word is not irregularly spelt at all. (There are other ways of spelling the sound which “ph” makes, but that is irrelevant; the point is that “ph” can make no other regular sounds.)

2) Even if it wasn’t, it is not necessary that a word should describe itself. This would lead us into shaving barber territory.

Why do our noses run and our feet smell?

This is a confusion about the two meanings of the verbs “run” and “smell”. “Run” is a word which, in various forms, has meant “flow” since Proto-Indo-European; its use in describing the flow of your feet in bipedal motion and the flow of mucus from your nostrils are two applications of the same idea. “Smell” is one of those interesting words which can mean both sides of an action (compare dialectal “itch” for scratch and “learn” for teach); it’s meant either to produce or notice an odour for almost a thousand years (probably longer, but we don’t have attestation). There is an untrue story that Samuel Johnson, on being told, “Sir, you smell!”, replied, “No, Sir, I stink, you smell.”

Why does quicksand work slowly?

“Quick” here has the original meaning of “alive”, as in “to judge the quick and the dead”, and not the newer sense of “fast” (which has only been around since the fourteenth century).

Why are boxing rings square?

A lot of people seem to want to know this, for some reason. I think if you imagine a real fight between exactly two people, without all the formalised rules and layouts of boxing, the other people in the bar or marketplace or wherever tend to fall back into an approximate circle; people were using squares to fight in at least by 1743, when Jack Broughton’s seminal rulebook on the conduct of bareknuckle fighting was published. I suspect it’s simply easier to draw up a square on the floor, and it’s easier to say that you start from opposite sides after a fall than saying you have to start from 180° from your opponent, but that’s just a guess.

Why, when lights are out, they are invisible, but when the stars are out, they are visible?

“Out” is a word with a number of meanings, few of which can be descriptions of the same objects. You might as well ask whether Jodie Foster coming out meant she became more or less visible based on stellar or light analogies. If I still had access to the OED, I would tell you when the word came to mean “extinguished” when applied to flames (and hence electric light), but I don’t.

[Update: Jonathan Jarrett, who does have OED access, shows me that the earliest record of the word being so used was by John Trevisa in his 1398 translation of De Proprietatibus Rerum: “For þat þe wynde schulde nouȝt blowe out þe light”. You rock. Thanks.]

Why do we call them apartments when they are all together?

This question makes no sense because it is backwards. If you take a house and put all the parts together, it is precisely then when it is not apartments. If you split it apart into separate pieces, you have apartments.

If cows laughed, would milk come out of their noses?

I do rather find it hard to understand what kind of mental confusion would produce this question even as a joke. Firstly, when humans produce milk (or coffee, or whatever) from their nose when they laugh, it is because they were drinking it. Cows drink milk only in calfhood; the rest of their lives they drink water (around six gallons a day, although it varies by temperature). So only a baby cow would even be drinking the milk to start with. Secondly, why a cow? All mammals from mice to giraffes produce milk. Furthermore there is no connection between the mammary and the respiratory system. Finally, as far as I am aware, cows cannot laugh in the first place. Some zoologists have recently reported laughter in non-human primates, but not in other mammals.

Why does Denny’s have locks on the door if it’s open 24 hours?

A moment’s thought should show you that the problems which would result from not being able to close the restaurant in an emergency, or in leaving it empty but unlocked, would far outweigh the few tens of dollars it costs to add locks to the door. Imagine, for example, closing the restaurant while refitting after a fire, or not being able to scrape enough staff together to run the place at 4am during a flu epidemic. (In addition, some jurisdictions may require that restaurants close on certain days or nights of the year.)

[Updates: rethought points out that a building may not have been open twenty-four hours a day in the past; shaunm points out that even buildings which are generally permanently open often close for a few hours a few times a year to have a cleaning crew do a thorough pass rather than the incremental cleaning that happens day-to-day.]

Why do ships carry cargoes and cars carry shipments?

“Car” (a Norman word which they took from the Celts) and “cargo” (a Spanish word that comes from Latin) are unrelated. Incidentally, it is interesting that people assume that the Welsh word for car, “car”, is a loan-word from English, but its irregular plural belies this.

When will a building actually become a built?

The -ing on the end of “building” is not the “-ing” on the end of “singing”; it is another ending which was once “-ung” but merged. (The word in Scots is “biggin”.)

Nargery: How to write an Epiphany extension with both hands tied behind your back

Disclaimer: I am nothing to do with the Epiphany project.
Disclaimer: Do not actually tie both hands behind your back without supervision.

Epiphany is the official browser of the GNOME project. Today I want to ramble at you about how easy it is to write extensions for it, because it is crazy easy. I started writing this about two person-hours ago and now it’s working, and the hardest part was getting the GTK stuff to cooperate.

So let’s write an extension. I fancy the idea of colouring the tabs according to which domain you’re looking at. There’s a nonfree extension to do this in Firefox, so let’s build our own free one. (Disclaimer: It will be pretty crap because I’m throwing it together in a few hours.)

First off, you need to declare the extension, which you do in a file ending with .ephy-extension which you put in a directory called ~/.gnome2/epiphany/extensions (it’s not rocket science, folks). Let’s call it colour-tabs.ephy-extension (because I’m British, okay)? It looks like this:

[Epiphany Extension]
Name=Colour tabs
Description=I like colour tabs
Version=0
URL=http://www.gnome.org/projects/epiphany/extensions.html

[Loader]
Type=python
Module=colour-tabs

I would go through this line by line, but I think you are clever enough that I don’t need to. The last line, though, is the name of a Python file. Create this in the same directory, as colour-tabs.py. Now, you can add functions which get called, according to their names, when various things happen in the browser. What we want to do is to be called when tabs are created (“attach_tab”) and removed (“detach_tab”):

def attach_tab(window, tab):
   embed = tab.get_embed()
   tab._colour_tab_handler = embed.connect(“net_stop”, _colour_the_tab, tab)
   # we don’t call through like this when things are loaded
   # and we should

def detach_tab(window, tab):
   if ‘_colour_tab_handler’ in tab:
      tab.get_embed().disconnect(tab._colour_tab_handler)
      del tab._colour_tab_handler

“embed” in attach_tab is the actual web page rendering engine in that tab; we are asking it to do something when an event occurs. In this case the event is “net_stop”, i.e. when the page has loaded (because let’s assume we can’t know what colour to colour the tab before the page has loaded). When that happens, we call a function to deal with the situation, which I’ll call _colour_the_tab because that’s what it does.

All detach_tab has to do, then, is look to see whether we are already waiting on this and tell it not to bother.

I added the extra comment because it would be nice to call _colour_the_tab directly if a tab is attached when a page is already loaded (this does happen occasionally, but in situations which are too complicated to go into in such a simple example).

So what do we do when the page HAS loaded? Well, that’s _colour_the_tab’s job, as I said. (Conventionally, you add a leading underscore in case it clashes with a name that Epiphany might be calling.) _colour_the_tab has three jobs:

1) the trivial job of taking the URL and finding the domain; in real life it would be better if people could specify particular colours for particular domains, etc.
2) the job of turning the domain into a colour (we just use the last six hex digits of the md5 here, which is a bad idea because it could be black!)
3) the rather fiddly job of changing the background colour of the label (this is difficult in GTK for boring reasons)

I won’t bother you with any more details here, but here’s a place you can get the code I wrote above, and I thought you might like a screenshot:

Thanks to the folks on #pygtk who helped me figure out how to set the background colour of a GtkLabel.

Update: Oh, something I forgot to mention: If you run Ephy from a terminal, and your extension uses “print”, it will go to that terminal. This makes debugging a snap compared to Firefox. Also, you almost never have to restart Epiphany. Just drop your extension in the extensions directory, turn it on from the extensions dialogue, and off you go. If you change the extension, just turn the extension off and on again and it will be reloaded. It is deeply awesome.

Really basic project tracking

Lazyweb: I currently do this with a notebook (yeah, an actual paper one; I’m not sure why I don’t just write things into a text file; I have in the past). But is there a program in existence which will let me do this?

$ whatever --list-my-current-projects
metacity
fusa
workproject1
workproject2

$ whatever --start-working-on fusa

(does some work)

$ whatever --log "working on consolekit integration"

(time passes)

(gets interrupted)

$ whatever --what-the-heck-was-i-doing
working on consolekit integration

(time passes)

$ whatever --log "fixing GetWomble()"

(time passes)

$ whatever --stop-working-on fusa

$ whatever --what-have-i-worked-on-today
2007-12-22: 18:00-18:30 - fusa (30 minutes)

I know it would be pretty trivial to write; I just wondered whether it existed already so that I didn’t have to. (If it exists many times over, do you have recommendations?)

(Beyond that, it would be good to have sub-projects/sub-goals which you could mark done and so on.)

(Commit message and twitter integration would be further fun extensions.)

(Many responses received, which are getting their own post.)