Samuel David Markham

I am overjoyed to announce the birth of our third son, Samuel David Markham, at 9.01am on the morning of 28th January 2015, weighing 8lb 0oz. Mother, father, baby and older brothers are all well :-)

He is called Samuel after:

  • The prophet and leader Samuel, who was called into God’s service at an early age, as recorded in the book of 1 Samuel;
  • Samuel Rutherford (1600 – 1661), a Scottish minister and representative at the Westminster Assembly, whose book Lex, Rex contains arguments foundational to a Christian understanding of good government;
  • Samuel Davies (1723 – 1761), American non-conformist preacher, evangelist and hymn writer, who showed we are all equal in God’s sight by welcoming black and white, slave and free to the same Communion table;
  • Samuel Crowther (1809 – 1891), the first black Anglican bishop in Africa, who persevered against unjust opposition and translated the Bible into Yoruba.

He is called David primarily after the King David in the Bible, who was “a man after God’s own heart” (a fact recorded in the book of 1 Samuel, 13:14).

“Interactive” Posters

Picture of advertising poster with sticker alongside with QR code and short URL

I saw this on a First Capital Connect train here in the UK. What could possibly go wrong?

Ignoring the horrible marketing-speak “Engage with this poster” header, several things can go wrong. I didn’t have NFC, so I couldn’t try that out. But scanning the QR code took me to which, at the time, was advertising for… Just Eat. Not Oops.

Similarly, texting “11518” to 78400 produced:

Thanks for your txt, please tap the link:

Std. msg&data rates may apply
Txt STOP to end
Txt HELP for help

which also produced content which did not match the displayed poster.

So clearly, the first risk is that the electronic interactive bits are not part of the posters themselves, and so the posters can be changed without the interactive parts being updated to match.

But also, there’s the secondary risk of QR codes – they are opaque to humans. Someone can easily make a sticker and paste a new QR code on top of the existing one, and no-one would see anything immediately amiss. But when you tried to “engage with this poster”, it would then take you to a website of the attacker’s choice.

Your Top 50 DOS Problems Solved

I was clearing out some cupboards at our family home when I came across a copy of “Your Top 50 DOS Problems Solved”, a booklet published free with “PC Answers” magazine in 1992 – 23 years ago. PC Answers has sadly not survived, closing in 2010, and its domain is now a linkfarm. However, the sort of problems people had in those days make fascinating reading.

Now I’ve finished blogging quotes from “Producing Open Source Software” (the updated version of which has, sadly, yet to hit our shelves), I think I’ll blog through these on an occasional basis. Expect the first one soon.

Credit as Currency

Credit is the primary currency of the free software world. Whatever people may say about their motivations for participating in a project, I don’t know any developers who would be happy doing all their work anonymously, or under someone else’s name. There are tangible reasons for this: one’s reputation in a project roughly governs how much influence one has, and participation in an open source project can also indirectly have monetary value, because some employers now look for it on resumés. There are also intangible reasons, perhaps even more powerful: people simply want to be appreciated, and instinctively look for signs that their work was recognized by others. The promise of credit is therefore one of best motivators the project has. When small contributions are acknowledged, people come back to do more.

— Karl Fogel, Producing Open Source Software

The Zeroth Human Freedom

We who lived in concentration camps can remember those who walked through the huts comforting others, giving away their last piece of bread. They may have been few in number, but they offer sufficient proof that everything can be taken from a person but the last of the human freedoms – to choose one’s attitude to any set of circumstances – to choose our own way.

This quote is from From Death-Camp to Existentialism (a.k.a. Man’s Search for Meaning) by Victor Frankl. Frankl was an Austrian Jew who spent four years in concentration camps, and afterwards wrote a book about his experiences which has sold over 10 million copies. This quote was part of a sermon yesterday (on contentment) but I share it here because it’s very powerful, and I think it’s also very relevant to how communities live together – with Mozilla being a case in point.

Choosing one’s attitude to a set of circumstances – of which “someone has written something I disagree with and I have become aware of it” is but a small example – is an ability we all have. If someone even in the unimaginable horror of a concentration camp can still retain it, we should all be able to exercise it too. We can choose to react with equanimity… or not. We can choose to be offended and outraged and angry… or not. To say that we cannot do this is to say that we have lost the most basic of human freedoms. No. We are all more than the sum of our circumstances.

The Oatmeal and Religion

I’m a fan of The Oatmeal, with the odd reservation. But one cartoon in particular gets pointed out to me a lot – “How to suck at your religion“.

The trouble with arguing with him is that he’s a popular cartoonist, and I’m not. Cartoons suffer from the Twitter/Facebook effect – a humourous pithy short attack or condemnation of something is far more interesting and retweetable than any nuanced response to it. And then, of course, you get accused of having no sense of humour. And if he ever reads this post and takes offence, there’ll be cartoons lampooning me. Still, Jesus had to endure being mocked, so that’s an OK risk to take.

So, then, a few thoughts in response:

So is judging people wrong, then? Because there seems to be plenty of judgement in this comic. If it is wrong, then who says so, and who died and made them king? It’s easy to mock the moral stance of others, but rather difficult (if your understanding of the world doesn’t include an omnipotent moral lawgiver) to figure out why the morality you are in favour of should apply to other people. Should I not judge because a “silly web cartoonist” (his words) tells me not to? Morality can’t be hung from skyhooks.

This is before we even talk about what Jesus actually meant, in context, by “Do not judge, or you too will be judged”.

The Galileo affair was not the best moment in the life of the church. But the second comic makes the error that so many bits of reporting on stem cells make that one would almost think people are trying to hide the truth. There are two main types of stem cells – adult, and embryonic. Adult stem cells come from, well, adults, and I’ve never heard of anyone who has any theological problem with them. Embryonic stem cells are harvested from embroyos, tiny people who are killed by the process. And that is a problem.

Thing is, which type of cells have been producing all the amazing treatments and treatment possibilities? Adult stem cells. A guy recently became able to walk again after they injected stem cells from his nose into his spine. That’s so awesome. By contrast, despite lots of positive talk, they can’t figure out how to stop the embryonic ones giving you cancer. And yet, every time there’s a “stem cell success” story, the church is castigated for “its opposition to stem cell research”, and people vow to continue the murder of microscopic human beings.

In the last panel, is he really asserting that anyone can make any old thing up, and the universe will bend to accommodate the wishes of the person concerned? Or just that it’s cool and righteous to affirm people in whatever rubbish they make up in their own minds? Also, no matter how politely phrased, “No-one really knows for sure” is dogma, plain and simple. All education is indoctrination – the question is simply “whose doctrine?”. What he is really saying is “don’t use your doctrine, use mine”.

I wonder if the Oatmeal had a kid, who was told “no-one really knows”, and who replied “well, I think God then decides who goes to heaven and who goes to hell, and I’m worried about your eternal soul”, he’d say “sure, sweetie”, or “NO. NO-ONE REALLY KNOWS FOR SURE AND THAT’S FINAL.” Given the rest of the comic’s antipathy towards Christianity…

My religion gives me no anxieties about my sexuality at all. However, what the Oatmeal is really saying is “any parameters religion puts around the correct use of sex are evil”. So is he in favour of no parameters at all (permitting every vile act one could imagine – you know I could list all the usual things which every country makes illegal) or does he just want to impose different parameters to the ones Christianity does? And if so, apart from the detail of what’s in and what’s out (ahem), how is his principle of imposing laws regarding the expression of sexuality any different from the principle that he mocks?

Christians who try and convince others that what they believe is true are not trying to “validate their beliefs”. There are no points from God for making more Christians. In fact, Christians can’t make more Christians – only God can do that. We don’t get any credit when it happens. Also, Christians are (or should be) specifically encouraged to avoid groupthink – the idea that if lots of people believe something, it must be true. (Incidentally, if you think Buddhists all leave people alone, read this and this.)

Fortunately, the real and true “awesome shit” is available to everyone. Including the Oatmeal.

Calling something ‘crazy’ is not an argument. It’s hard to refute a sneer. And, of course, his summary of what Christians believe is wrong in several places. If it’s such crazy nonsense, why not illustrate using the version Christianity teaches, rather than a straw man? Or is the real view not so crazy after all?

Amen to the general point here. Although the idea (which, I agree, is not his main point) that one should vote based on which policies are better for you personally is a sad, divisive and dangerous one. One should vote based on which policies are best for society as a whole. (For me, those are generally policies which make the law conform more closely to God’s law. YMMV.)

Yes, indeed. Je suis….

Yes, I would die for Jesus. Adam4d puts it well:

No, I would not kill for Jesus. However, the point of Christianity is not to “inspire people to help people” (although it does) or to make you happier (although it might) or to help you cope with the atheistic feeling of cosmic helplessness (although it does deal with it very effectively). Christianity is not utilitarian. The point is to have a real relationship with your Creator – to know Christ. Which is the most awesome thing in the world. Having experienced it, who would ever want to keep it to themselves?

Using Instantbird to Connect to IRC Servers Requiring a Username and Password

[Update 2014-01-16: A point of clarification. There are two possible ways to send a password for IRC. One is supported in the Instantbird UI – it’s the one that automatically identifies your nick with NickServ, the bot which makes sure people don’t steal other people’s nicks. The other, which is rarer but which I needed, involves sending a password to connect at all, using the PASS command in the IRC protocol. That is what is documented here.]

I was trying to do this; turns out it currently requires about:config manipulation and is not documented anywhere I can find.

Using about:config (type /about config in a message window, or access via Preferences), set the following prefs:


to the obvious values. Other useful tip: if the IRC server uses a self-signed cert, connect to it on the right port using Firefox and HTTPS, and you can save the cert out of the warning/exception dialog you get. You can then import it into Instantbird using the deeply-buried Certificate section of the Advanced Preferences and it will trust the cert and connect. (I think this is what I did, although memory is hazy.)

Avoid Mystery Process

Although the discussions around adding any particular new committer must be confidential, the rules and procedures themselves need not be secret. In fact, it’s best to publish them, so people realize that the committers are not some mysterious Star Chamber, closed off to mere mortals, but that anyone can join simply by posting good patches and knowing how to handle herself in the community. In the Subversion project, we put this information right in the developer guidelines document, since the people most likely to be interested in how commit access is granted are those thinking of contributing code to the project.

— Karl Fogel, Producing Open Source Software

Consumer Security Advice

Here’s an attempt at consumer security advice that I saw at a railway station recently. Apparently, secure sites are denoted by “https//” (sic). And it conflates a secure connection with trustworthiness. It’s good that people are trying, but we have a way to go…

Je Suis…

When Muhammad is mocked, Islamic extremism kills and says:

We have avenged the Prophet Muhammad!

When Jesus is mocked, Christianity hopes and says:

And so Jesus also suffered outside the city gate to make the people holy through his own blood. Let us, then, go to him outside the camp, bearing the disgrace he bore. For here we do not have an enduring city, but we are looking for the city that is to come.

We are called not to avenge him, but to identify with him and accept the same disgrace.

Je Suis Charlie. Et Je Suis Jésus.

slic 1.0.0 Released

I’ve just released version 1.0 of some new software called slic, which I’ve been using to do license analysis on Firefox OS. From the README:

This is slic, the Speedy LIcense Checker. It scans a codebase and identifies the license of each file. It can also optionally extract the license text and a list of copyright holders – this is very useful for meeting the obligations of licenses which require reproduction of license text. It outputs data in a JSON structure (by default) which can then be further processed by other tools.

It runs at about 120 files per second on a single core of a 3GHz Intel I7 (it’s CPU-bound, at least on a machine with an SSD). So you can do 100,000 files in less than 15 minutes. Parallel invocation is left as an exercise for the reader, but could easily be bolted on the side by dividing up the inputs.

The code is Python, and it uses a multi-stage regexp-based classifier, so that with families of licenses it starts with a more generic classification and then refines it via checking various sub-possibilities. Future potential enhancements include a hash-based cache to avoid doing the same work more than once, and integration with a popular online spreadsheet tool to help manage exceptions and manual license determinations.

Responsibility without Monopoly

[No role] requires exclusive control over the domain in question. The issue manager does not prevent other people from making changes in the issues database, the FAQ manager does not insist on being the only person to edit the FAQ, and so on. These roles are all about responsibility without monopoly. An important part of each domain manager’s job is to notice when other people are working in that domain, and train them to do the things the way the manager does, so that the multiple efforts reinforce rather than conflict. Domain managers should also document the processes by which they do their work, so that when one leaves, someone else can pick up the slack right away.

— Karl Fogel, Producing Open Source Software

Test Driven Discouragement

Some projects go even further, requiring that a new test accompany every bugfix or new feature. Whether this is a good idea or not depends on many factors: the nature of the software, the makeup of the development team, and the difficulty of writing new tests. The CVS ( project has long had such a rule. It is a good policy in theory, since CVS is version control software and therefore very risk-averse about the possibility of munging or mishandling the user’s data. The problem in practice is that CVS’s regression test suite is a single huge shell script (amusingly named, hard to read and hard to modify or extend. The difficulty of adding new tests, combined with the requirement that patches be accompanied by new tests, means that CVS effectively discourages patches. When I used to work on CVS, I sometimes saw people start on and even complete a patch to CVS’s own code, but give up when told of the requirement to add a new test to

It is normal to spend more time writing a new regression test than on fixing the original bug. But CVS carried this phenomenon to an extreme: one might spend hours trying to design one’s test properly, and still get it wrong, because there are just too many unpredictable complexities involved in changing a 35,000-line Bourne shell script. Even longtime CVS developers often grumbled when they had to add a new test. … It is true that switching to a real test framework—whether custom-built or off-the-shelf—would have been a major effort. But neglecting to do so has cost the project much more, over the years. How many bugfixes and new features are not in CVS today, because of the impediment of an awkward test suite?

— Karl Fogel, Producing Open Source Software