Tuesday, 26 November 2013

The old Left, and the new Scotland

Unity and discussion: need for friendly criticism

One of the themes we heard repeatedly at the Radical Independence Conference this weekend was calls for nationalisation: nationalisation of the banks, of Grangemouth, of the oil industry. This makes me very cautious. Of course, conference speeches are not places for nuance, for detail. It's possible that those who urged nationalisation did not mean the statist, centralising nationalisation of 1945. So I'm cautious rather than hostile.

My intention in this essay is to set out the reasons that I'm cautious. This isn't to criticise anyone; it isn't to be hostile to anyone. As Dennis Canavan said, we must keep our eye on the ball; we must achieve independence, and to do that we must work together as a broad front. We don't need schisms, splits. I'm not seeking to promote those. I'm seeking to start a discussion.

Nationalisation provides new targets for elite capture

In this essay I use 'elite capture' as shorthand for the propensity of well-connected influential elites to establish themselves in positions of power and benefit in institutions and schemes set up for the public good, or for the good of specific minorities. For example, what is known as 'the quangocracy' or 'the great and the good' are well connected elite groups who establish themselves in positions of profit in many public bodies within Scotland and the UK generally.

Nationalisation - the concentration of the whole of an industry within a nation into a single unit owned by that nation - provides a target for elite capture. Western experience of industrial organisation is to have decision making power concentrated at the top, in 'the board'. Elites have many excellent and well-developed strategies for the capture of key concentrations of power. Creating large new top-down structures within society, with control over key economic assets, is just inviting elite capture.

Left elites and right elites

It's natural human behaviour - normal, obvious, we all do it - to advance people we know, people we trust, people like us. When this happens in recognised elites - the soi-disant aristocracy, or the 'old school tie' of the public school. But the same mechanisms operate on the left; and there are what I would describe as 'right elites' as well as 'left elites' in the British Labour movement.

Labour shadow cabinet composition

There are twenty-seven members of the current Westminster shadow cabinet, and actually, when you look at their records, they're a pretty impressive group of people. Jon Trickett is a plumber to trade, a long time peace campaigner, an anti-fascist, and came up through the trades union movement to become a councillor in his home town of Leeds before being elected to parliament. Steve Bassam, a social worker, founded a squatters union and campaigned for the rights of squatters and the homeless, before serving on his own local council and then in parliament. Ivan Lewis set up a learning difficulties support charity at the age of seventeen. He, too, served on his local council before being elected to parliament.

Many of them are clearly exceptionally bright. Mary Creagh, Andy Burnham and the twins Maria and Angela Eagle were all working class kids who went to Oxbridge. Rachel Reeves may also be - I don't have information on her background, but she was certainly educated at New College, Oxford.

Indeed, nine of the twenty-seven - one third - went to Oxford or Cambridge, and there's the first part of the rub. Four of them - through no fault of their own - had parents who were already members of the British elite. Six of them went to fee paying schools. Thirteen of them - almost half - have never worked outside politics and the Westminster village. Taking the intersection of those sets (oxbridge or elite parents or fee paying school or never worked outside politics), nineteen - two thirds - can be classified as elite. Admittedly, that's a crude score; admittedly, as I've said before, many of these - most of these - are pretty impressive people.

But what they are not is the labour movement. What they are not is 'workers'. True, the nature of work has changed over the past fifty years. Fifty years ago, the Labour front bench contained miners, steelworkers, shipbuilders. We can't expect to see such trades now, as industry has vanished from the landscape. But we have one plumber - one! One social worker, an administrative worker, a school teacher, a television journalist, a radio producer. Those, we can all accept are real jobs, and more, real work. Workers' jobs; labour, if you like. Six of them. For the rest, one economist; four academics; only five lawyers. All the rest are wonks.

I would argue that for the most part the Labour front bench are for the most part a 'right elite'. They have, like their Conservative opposite numbers, succeeded at least partly because they are members of old elite structures - inherited privilege (Hilary Benn, Ed Milliband, Hariet Harman, Yvette Cooper); oxbridge or private school; direct entry into politics.

Yes, they are polished, impressive people: elite education does that for you. Put them on a panel of potential parliamentary candidates alongside an engineering worker just off back-shift and of course they'll shine. But there's more to it. Those old elite structures have had hundreds of years to develop the - unwritten, unthought, even unconscious - practices of elite capture.

Flowers affair

Joyce McMillan is of course, perfectly right to argue that the Flowers affair has been blown out of proportion by the right in order to attack the left. However, the Flowers affair has recently highlighted a different sort of elite structure, one which is more clearly a matter of the left. Paul Flowers rose through the ranks of the Labour and Co-operative movements despite the fact that he was frequently discovered to be either useless or a liability. Like Buggins, he was simply shuffled sideways into other posts until he ended up in one in which he could do real damage. Paul Flowers represents a different sort of elite, a left elite, a consequence of the organic development of the left in Britain.

Democratic deficits on the left

What this reveals is the systematic democratic deficit in old British left structures. The left, although it claims to be (and, to be fair, largely aspires to be) democratic, grew up in the Victorian period when telecommunications either didn't exist or else were out of the economic reach of working people. It was natural in the Victorian period to develop a hierarchical system of organisation, with local chapels or branches at the bottom, sending delegates to regional committees which in turn sent delegates to the (national) executive committee. Not every trades union member, of course, makes it to branch meetings - when I was an apprentice printer and a member of the National Graphical Association, we were fined if we failed to attend chapel meetings (and the fines, like our union dues, were deducted from our pay before we got it), but we were not told when or where chapel meetings would take place. The only way to find out was either to be at the preceding meeting, or be told by a friend who had been.

But even ignoring such obvious abuses, the reasons why members may not attend branch meetings are not always just apathy. Union branch meetings tend to run to a formula, and are commonly pretty turgid affairs which take up a lot of an evening. They are often not designed to be inclusive, to be welcoming to the rank and file membership. They tend to select 'in groups'.

But it tends to be branch meetings, not the membership as a whole, who elect delegates to area committees. It tends to be only those delegates who have much contact with the delegates from other areas, so even in those unions where delegates do constitutionally take instruction from their branch on whom to vote for in elections to national committees, the opinion of the branch delegate is likely to be very influential in the branch's choice.

And so it goes. Most trades unions are not participatory democracies. They're not even representative democracies. They're multi-tiered representative democracies, and at each tier the electoral college gets smaller and more self selecting. Of course, in the Victorian period when these structures were established, most trades unions were small, with a few thousand members at most; the process of consolidation and amalgamation over the past hundred and fifty years has further concentrated power, further increased the separation between the people with power - the national executives and general secretaries - and the ordinary membership.

In an electronic age it doesn't have to be like this and increasingly unions do hold direct elections; but the very size of modern unions means that the candidates for office cannot be known to a significant proportion of the membership, so elections - like elections to parliament - have to be on the basis of leaflets of a few thousand words, and such exposure as the candidates can manage to get themselves in trade journals and in the national media.

Egos and personality cults

One of the things which has also badly affected democracy on the left in Scotland has been egos and personality cults. I haven't been directly involved in any of these and I don't really understand the dynamics of them so I won't attempt to analyse the problem but I think we can all accept that it has existed, and that it has tended to act in anti-democratic ways.

Decentralisation and democratic control

The EU has a concept - called subsidiarity - that decisions ought to be taken at the most local practical level of democratic control. Smaller, more local, is inherently more democratic. Of course there are risks of elite capture, petty corruption and cronyism in small local structures just as there are in large, national structures, but such issues cause less damage precisely because they are more local. So what I want to argue is that there are smaller, more local, forms of industrial organisation which democratise control far better than crude old-fashioned nationalisation.

Grangemouth and Govan

The petrochemical installation at Grangemouth, and the shipyards on the Clyde, present particular difficulties for the general solution I propose to the problem of concentration of power and of elite capture, so I'll attempt to characterise those problems before going on to talk about more general issues.

As I understand it the petrochemical installation, although currently divided into two separate functional units ('refinery' and 'chemicals plant') is essentially one integrated facility where the parts are largely dependent on the whole and cannot easily be operated or managed separately. Furthermore, it is as I understand it key to the mechanisms which drive the oil along the undersea pipelines which bring it ashore. It's a big deal, a big plant, and important to the nation. Furthermore, it can't reasonably be expected that its workers can, from their own resources, raise the price of new investments when they become necessary. So it depends inherently on outside sources of finance.

This being so one cannot realistically reorganise the plant into a collection of human-scale workers co-ops. Even if you divide it into one co-op for refinery operations, one co-op for chemical operations, one co-op for engineering and maintenance (for example), you still require overall co-ordination. And you require relationships with external investors/lenders, whether those investors/lenders be conventional venture capitalists, a national investment bank, or a collection of mutual banks. Whoever the lenders/investors are, they will need an effective input into top-level decision making. So you inevitably end up with something which looks very much like a top-down board of directors. If we are to maximise national income from the oil we choose to extract from the North Sea, we need Grangemouth. Making Grangemouth work is a bullet we have to bite.

The shipyards are similar, if not necessarily such an extreme case. A shipyard, like any other large industrial site, has a penumbra of sub-contractors, and those sub-contractors can in general easily be workers co-operatives. Ships are, these days, largely built of modules, and the group of workers who build a module is not necessarily very big. And, in any case, it's likely that in future we will put the marine engineering skills of the Clyde more into building offshore energy generating plant than into building large warships, so again the units of labour do not necessarily need to be as large.

But so long as we are building very large engineering systems on the Clyde, there does need to be some co-ordination. There also needs to be lending or investment. So the Clyde shipyard may need more organisational structure than simply loose associations of small and medium sized workers co-ops.

However, these are extreme cases, and we should not build our overall industrial strategy on extreme cases. Most industrial enterprises in Scotland have at most a few hundred workers; organising these as independent workers co-ops is not hard to imagine.

Banking

The United Kingdom has a small number of very large banks - banks which are deemed 'too big to fail'. We have had very few mutual banks, of which the largest - the Co-op Bank - has just failed. Germany by contrast has many Volksbanken - literally banking co-ops - and, additionally, 431 municipal savings banks and eight state-owned Landesbanks. This is in addition to private sector banks.

As several people at the Radical Independence Conference pointed out, the largest banks in Scotland already are publicly owned. They easily could be nationalised. Yes, indeed they could, but they'd still be too big to fail and they would still be targets for elite capture. Rather than centralising that power as national banks, they could be broken up into their individual branches and given to their account-holders as mutuals or to their workers as workers co-ops. Either way, both account holders and workers have clear common interest in ensuring the stability and profitability of the bank they directly own, so have a clear interest in making sure it is well run. And these individual, small banks would not be 'too big to fail'. Banking regulation would still be needed to monitor that not too many of these many small banks were choosing to run the same risks at the same time, but it could be fairly light touch because the consequence of individual banks failing would be manageable.

In particular these small mutual banks must be empowered to invest in Scottish industry, and, in order to make large investments where those are needed, they must be empowered to combine into associations to make particular large loans or investments.

Industry

Workers co-ops are already a well understood concept in Scotland and are supported as a matter of policy by the Scottish Government and more widely by voices on the left. Rather than nationalising industry, I would far rather see the state set up a series of workers co-ops, each of such a size that the members of the co-op can all know one another at least by sight and reputation - so not more than say one thousand members. Obviously, as I've suggested above with Grangemouth and Govan, for some key industries it may be necessary in some key industries to have some co-ordination between groups of co-ops to allow for efficient running of very large industrial assets, but this should be exceptional not normal. Big may be efficient but it is not always beautiful, and in my opinion there is some trade off between raw efficiency and democratic control. Less wealth spread more evenly may be better than more wealth captured by elites.

Further, I'm not proposing that private industry should be seized and collectivised overnight. I'm suggesting that key industrial assets in which the state has a strategic interest (e.g. Grangemouth, Govan) should be; and that generally, where the state has a controlling interest in an enterprise (for example Prestwick Airport) there should be a presumption that it will be reorganised as a workers co-operative.

Finally I think it would be a good thing if the state provided some systematic incentive for industries to re-organise themselves as workers co-ops; for example, there could be significantly lower levels of corporation tax for co-operatives.

Summary

I do understand why under current circumstances people are calling for nationalisation. Capitalism is out of control and a wholly unreasonable proportion of the common wealth is being captured by a few elite bankers and venture capitalists. But nationalisation not only isn't the only possible solution, it in its turn offers targets which elites - very likely the same elites - will capture.

The alternative which puts power right in the hands of the people most closely involved in it are loose federations of small mutuals and workers co-ops; and I believe it would be as easy to create these as monolithic nationalised industries.

Sunday, 10 November 2013

Implementing Milkwood in Java and Clojure

I was recently given, as a coding exercise by a potential employer, this problem.

It's an interesting problem, because the set of N-grams (the problem specification suggests N=3, so trigrams, but I'm sufficiently arrogant that I thought it would be more interesting to generalise it) forms, in effect, a two dimensional problem space. We have to extend the growing tip of the generated text, the meristem, as it were; but to do so we have to search sideways among the options available at each point. Finally, if we fail to find a way forward, we need to back up and try again. The problem seemed to me to indicate a depth-first search. What we're searching is not an 'optimal' solution; there is no 'best' solutions. All possible solutions are equally good, so once one solution is found, that's fine.


Data design

So the first issue is (as it often is in algorithmics) data design. Obviously the simpleminded solution would be to have an array of tuples, so the text:

I came, I saw, I conquered.

would be encoded as

I came I
came I saw
I saw I
saw I conquered

The first thing to note is these tuples are rules, with the first N-1 tokens acting as the left hand side of the rule, and the last token acting as the right hand side:

I came => I
came I => saw
I saw => I
saw I => conquered

To be interpreted as 'if the last N-1 tokens I emitted match the left hand side of a rule, the right hand side of that rule is a candidate for what to emit next.'
The next thing to note is that if we're seeking to reconstruct natural language text with at least a persuasive verisimilitude of sense, punctuation marks are tokens in their own right:

I came => COMMA
came COMMA => I
COMMA I => saw
I saw => COMMA
saw COMMA => I
COMMA I => conquered
I conquered => PERIOD

Now we notice something interesting. It's perfectly possible and legitimate to have two rules with the same left hand side, in this case {COMMA I}. So we could recast the two {COMMA I} rules as a single rule:

COMMA I => [saw | conquered]

This means that, in our table of rules, each left-hand-side tuple can be distinct, which makes searching easier. However, a system which searches a table of N-ary tuples for matches isn't especially easy or algorithmically efficient to implement. If we had single tokens, we could easily use maps, which can be efficient. One can see at a glance that two tokens occur repeatedly in the first position of the left hand side of the rules, 'I', and 'COMMA'.

'I' has three possible successors:

I [came | saw | conquered] 

However the right hand side is not the same for 'saw' as it is for conquered, so this composite rule becomes:

I => [came => [COMMA]| saw => [COMMA]| conquered => [PERIOD]]

This enables us to consider our rules as a recursive map of maps:

[
    I => [came => [COMMA]| saw => [COMMA]| conquered => [PERIOD]] |
    came => [COMMA => [I]] |
    COMMA => [I => [saw | conquered]] |
    saw => [COMMA => [I]]
]
And thus, essentially, as a tree that, given a path, we can walk. Matching becomes trivial and efficient.
Thus far we're almost language independent. I say almost, because in Prolog (which would be a very good implementation language for this problem) we'd simply assert all the N-grams as predicates and let the theorem solver sort them out. However, I've not (yet) tackled this problem in Prolog.

Implementation: Java

My Java implementation is milkwood-java.

I started in Java, because that's what I was asked to do. Java (or C#, which is to a very close approximation the same language) is pretty much the state of the art as far as imperative, procedural languages go. Yes, I know it's object oriented, and I know Java methods are in principal functions not procedures. But it is still an imperative, procedural language. I say so, so it must be true. What I hope makes this essay interesting is that I then went on to reimplement in Clojure, so I can (and shall) compare and contrast the experience. I'm not (yet) an experienced Clojure hacker; I'm an old Lisp hacker, but I'm rusty even in Lisp, and Clojure isn't really very Lisp-like, so my Clojure version is probably sub-optimal.

But let's talk about Java. I made a tactical error early in my Java implementation which makes it less than optimal, too. We have an input file to analyse, and we don't know how big it is. So my first instinct wasn't to slurp it all into memory and then tokenise it there; my first instinct was to tokenise it from the stream, in passing. That should be much more conservative of store. And so I looked in the Java libraries, and there was a library class called StreamTokenizer. Obviously, that's what I should use, yes? Well, as I learned to my cost, no, actually. The class java.io.StreamTokenizer is actually part of the implementation of the Java compiler; it's not a general purpose tokeniser and adapting it to tokenise English wasn't wonderfully successful. That wasted a bit of time, and at the time of writing the Java implementation still depends on StreamTokenizer and consequently doesn't tokenise quite as I would like. If I backported the regex based tokeniser I used in the Clojure version to the Java version (which I easily could) it would be better.
So the first gotcha of Java was that the libraries now contain a lot of accreted crud.

The second point to note about Java is how extraordinarily prolix and bureaucratic it is. My Java implementation runs to almost a thousand lines, of which over 500 lines are actual code (317 comment lines, 107 blank lines, 36 lines of import directives). Now, there are two classes in my solution, Window and WordSequence, which could possibly be refactored into one, saving a little code. But fundamentally it's so large because Java is so prolix.

By contrast, the Clojure reimplementation, which actually does more, is a third the size - 320 lines, of which 47 are blank and 29 are inline comments. I don't yet have a tool which can analyse Clojure documentation comments, but at a guess there's at least fifty lines of those, so the Clojure solution is no more than two fifths of the size of the Java.

The Java implementation comprises eight classes:
  • Composer essentially the two mutually recursive functions which perform depth first search over the rule set, to compose output
  • Digester scans a stream of text and composes from it a tree of rules
  • Milkwood contains the main() method; parses command line arguments
  • RuleTreeNode a node in the tree of rules
  • Tokeniser a wrapper around StreamTokenizer, to try to get it to tokenise English; not very successful
  • Window a fixed length stack of tokens, used as a glance-back window in both scanning and composing
  • WordSequence a sequence of tokens implemented as a queue
  • Writer a wrapper around BufferedWriter which performs on-the-fly orthographic tricks to create a verisimilitude of natural English
One might argue that that's excessive decomposition for such a small problem, but actually small classes greatly increase the comprehensibility of the code.

There are things I'm not proud of in the Java implementation and I may at some stage go back and polish it more, but it isn't a bad Java implementation and is fairly representative of the use of Java in practice.

Clojure implementation

My Clojure implementation is milkwood-clj.

Some things to say about the Clojure implementation before I start. First, I implemented it in my own time, not under time pressure. Second, although I'm quite new to Clojure, I'm an old Lisp hacker, and even when I'm writing Java there are elements of Lisp-style in what I write. Thirdly, although I'm trying to write as idiomatic Clojure as I'm able, because that's what I'm trying to learn, I am a Lisp hacker at heart and consequently use cond far more than most Clojure people do - despite the horrible bastardised mess Clojure has made of cond. Finally, it was written after the Java implementation so I was able to avoid some of the mistakes I'd made earlier.

I used LightTable as my working environment. I really like the ideas behind LightTable and suspect that in time it will become my IDE of choice, but I haven't got it working for me yet. Particularly I haven't got its 'documentation at cursor' function working, which, given my current (lack of) familiarity with the Clojure, is a bit of a nuisance.

I tripped badly over one thing. Clojure, to my great surprise, does not support mutually recursive functions, and the algorithm I'd designed depends crucially on mutually recursive functions. However after a bit of flailing around, I remembered it does support dispatch in one function on different arities of arguments, and I was able to rewrite my two functions as different arity branches of the same function, which then compiled without difficulty.

The other trip was that map, in Clojure, is lazy. So when I tried to write my output using

(defn write-output
    "Write this output, doing little orthographic tricks to make it look superficially
     like real English text.

     output: a sequence of tokens to write."
    [output]
    (map write-token output))

nothing at all was printed, and I couldn't understand why not. The solution is that you have to wrap that map in a call to dorun to force it to evaluate.

Aside from that, writing in Clojure was a total joy. Being able to quickly test ideas in a repl ('Read Eval Print Loop') is a real benefit. But a clean functional language is so simple to write in, and data structures are so easy to build and walk.

Another thing Clojure makes much easier is unit tests. I got bogged down in the mutual recursion part of the Java problem and unit tests would have helped me - but I didn't write them because the bureaucratic superstructure is just so heavy. Writing unit tests should be a matter of a moment, and in Clojure it is.
I broke the Clojure implementation into four files/namespace:
  • analyse.clj read in the input and compile it into a rule tree; more or les Tokeniser and Digester in milkwood-java;
  • core.clj essentially replaces Milkwood in milkwood-java; parses command line arguments and kicks off the process;
  • synthesise.clj compose and emit the output; broadly equivalent to Composer and Writer in milkwood-java;
  • utils.clj small utility functions. Among other things, contains the equivalent of Window in milkwood-java.
Additionally there are two test files, one each for analyse and synthesise, containing in total seven tests with eight assertions. Obviously this is not full test coverage; I wrote tests to test specific functions which I was uncertain about.

Conclusion

Obviously, all Java's bureaucracy does buy you something. It's a very strongly typed language; you can't (or at least it's very hard to) just pass things around without committing to exactly what they will be at compile time. That means that many problems will be caught at compile time. By contrast, many of the functions in my Clojure implementation depend on being passed suitable values and will break at run time if the values passed do not conform.

Also, of course, the JVM is optimised for Java. I've blogged quite a bit about optimising the JVM for functional languages; but, in the meantime, my Java implementation executes about seven times as fast as my Clojure implementation (but I'm timing from the shell and I haven't yet instrumented how long the start up time is for Java vs Clojure). Also, of course, I'm not an experienced Clojure hacker and some of the things I'm doing are very inefficient; Alioth's Clojure/Java figures suggest much less of a performance deficit. But if peformance is what critically matters to you, it seems to me that probably the performance of Java is better, and you at least need to do some further investigation.

On the other hand, at bottom Java is fundamentally an Algol, which is to say it's fundamentally a bunch of hacks constructed around things people wanted to tell computers to do. It's a very developed Algol which has learned a great deal from the programming language experience over fifty years, but essentially it's just engineering. There's no profound underlying idea.

Clojure, on the other hand, is to a large extent pure Lambda calculus. It is much, much more elegant. It handles data much more elegantly. It is for me much more enjoyable to write.

Sunday, 3 November 2013

A paen in praise of my stove

 It's time to sing a paen in praise of my stove.

A stove is the heart of any home, particularly so at this time of year. A stove transmutes wood into heat. But heat comes in a number of forms, and we appreciate it in a number of ways. My stove provides me with toasty warm towels from my heated towel rail, when I step out of the bath. It provides me with the hot water for my bath. It provides me with my hot meals, my well cooked food. It heats my oven and bakes my cakes. And, most important of all, it keeps the whole of my house warm and comfortable. And all this for no fuel bills, save the labour of cutting the wood.

So what is this paragon, I hear you ask; how much, I hear you ask, does such a thing of wonder cost?

Well, for a start, it's not an Aga. Agas are, indeed, wonderful things (although I don't know how well they work on wood) but they're vastly out of my price league; an Aga would cost as much as my house. And, they're enormously heavy. Getting an Aga over the hill to my cabin would have been exceedingly difficult. So no, it's not an Aga. More surprisingly, it's not a Rayburn, either. I've installed second-hand Rayburns in every house I've owned until this one. Rayburns are indeed good, although they are not that good if you burn coal - it's too corrosive, and you end up having to replace the grate and firebricks every year. On wood, which is what I have, Rayburns are fine - a Rayburn would have been good. But at the time I built this house, even a second hand Rayburn was out of my budget.

Also, a Rayburn has a small hotplate - efficient, certainly, but small. A Rayburn oven does not have a window in its door, so you can't see how your cake is rising. A Rayburn's firebox is not adaptable. And, like the Aga, it's very heavy.

No, my stove is a thing called a 'Plamak', or 'Plamark' - it's Bulgarian, and in Bulgaria they use cyrillic script; it doesn't transliterate perfectly. Specifically, it's a Plamak B: B for boiler.

Back in the days of the old Soviet Union one could buy Moskvitch and Lada cars; Ural motorcycles; Zenit cameras. They were sturdy but crude, by Western standards. Simple, but very cheap, and they worked. My first car was a Moskvitch van. The Plamak is a little bit like that: honestly made, a little crude in places, but it works. Unlike an Aga or a Rayburn it's made of pressed steel - very nicely enamelled, but just pressed steel. The handles on the ovens and firebox are made of something like Bakelite. The rail across the front on which one can hang teatowels to dry isn't very sturdy and it's a little too close to the body of the stove for convenience. The hotplate is just a plate of steel sheet, and will probably, over time, corrode and need to be replaced. There's no insulated cover for the hotplate. The oven doesn't have a built-in thermometer (but it does have a window in the door, so you can easily put a thermometer inside). Unlike an Aga or a Rayburn, it doesn't have a lot of thermal mass, so when the fire goes down it cools quickly - if you're cooking something that needs a consistent temperature you need to pay attention, and feed it small logs frequently.

But, it has real good points.

The fire box has an extra, removable grate. In summer you can put this grate in, and it halves the size of the firebox, allowing you to cook more economically. In winter, obviously, you take it out. The hotplate is enormous - it will easily take half a dozen pans. There's a very simple flue control which switches the smoke path from across under the hotplate and up the chimney, to round under the oven, depending on what sort of cooking you want to do. And cleaning out that flue path under the oven is absurdly easy - you just lift out the oven floor.

It also burns exceedingly well. Frankly it's too big a stove for this little house - until I installed the big radiator and my heated towel rail, I couldn't effectively use the oven because if I ran the stove hot enough to cook in the oven the hot water tank would boil. Now I can control that, by pumping heat out of the hot water circuit though the radiator (at cost, sometimes, of making the house too cosy - it can easily reach thirty degrees in the bedroom), and so I can bake. It does go through wood fairly quickly - two bucketfulls of logs in an evening - but in two hours it will heat enough hot water for two long, deep, hot baths.

All in all I'm enormously pleased with it. So, you ask, what does this paragon of a stove cost? Amazingly, three hundred and eighty pounds. Honestly, if you want a stove that cooks and heats water, get a Plamak B. It's a bargain.

Friday, 1 November 2013

Getting Jenkins CI running on Debian 6 under Tomcat

Today's job was to get a continuous integration server set up and integrated with my Redmine project management system. Since I run Debian 6 on my server, and I prefer where possible to install from the official Debian packages, the Redmine version I'm running is 1.1, which is somewhat behind the curve. I had a look around at which continuous integration server to use. I've tentatively picked Jenkins, the more purist-open-source variant of the Hudson/Jenkins project. Reasons include: it's available in the Debian 7 distribution (but sadly not in Debian 6), and it has a plugin for Leiningen, which is my favourite build tool.

So... on to install, and there the fun began.

Installing Jenkins

As I said, Jenkins is not available in the Debian 6 distribution. However, the Jenkins project had set up their own Debian repository, so after adding their key and link to my system I was able to apt-get it. You'd have thought that would be all, but sadly no.

The Jenkins package, as packaged by Jenkins, does not depend on either Tomcat or Jetty. Instead, it assumes you will be serving no other web-apps and tries to install its own servlet engine (I think Jetty, but to be honest I was too annoyed to check before taking it off again). Obviously, I do have other web-apps, so this didn't work for me. However, I copied the WAR file from the the Jenkins release into /var/lib/tomcat6/web-apps, and, of course, being a web-app, it just worked...

Except it didn't. Jenkins expects to have some space of its own to write to, outside the servlet engine sandbox. That is, in my opinion, bad behaviour. Specifically it expects to be able to create a directory /usr/share/tomcat6/.jenkins, which is bad in two ways: it writes to a directory to which, for security reasons, Tomcat damned well should NOT be able to write, and it creates a hidden file which a naive administrator might not notice and which consequently might not be backed up.

After some thought I decided to put Jenkins writable space in /var/local, so I executed:

root@goldsmith# mkdir -p /var/local/jenkins
root@goldsmith# chown tomcat6.tomcat6 /var/local/jenkins

(I also symlinked that back to /usr/share/tomcat6/.jenkins, but that seems safe enough to me). I then edited /etc/default/tomcat6 (a useful place to put pre-boot Tomcat stuff) and added

# Jenkins home directory: added by simon 20131101                               
JENKINS_HOME=/var/local/jenkins

I then restarted Tomcat:

root@goldsmith# /etc/init.d/tomcat6 restart
Stopping Tomcat servlet engine: tomcat6.
Starting Tomcat servlet engine: tomcat6.

... and all was well; by which I mean, Jenkins started.

Configuring Jenkins for even modest security, however, was a complete bitch.

Jenkins has five different authentication models:

  1. It can have authentication switched off entirely. Anyone can do anything... No. Not going to happen, on an Internet facing server.
  2. It can delegate authentication to the servlet engine. I'm not wonderfully happy about that, because administering Tomcat users is a bit of a pain. 
  3. It can use LDAP... if you have an LDAP server, which I don't.
  4. It can delegate authentication to the undelying UN*X system, but only if the servlet engine can read /etc/shadow! There's NO WAY I'm permitting that. 
  5. It can run its own internal authentication... you'd think that was the obvious one. But as soon as you've selected that option, you're locked out and cannot proceed further.

Fortunately, you can completely reinitialise Jenkins by deleting everything under its home directory and rebooting Tomcat.; it then proceeds to reinstall a default set of files, and you get a new, empty Jenkins.

But, you can't add people to Jenkins until you've configured 'enable security' and chosen one of the security models. So, first, configure 'Security Realm' to 'Jenkins's own user database', and remember to tick 'Allow users to sign up'.

Then, sign up. That bit's easy, it prompts you.

Then, you need an authorisation strategy. Of these, there are five:

  1. Anyone can do anything (aye, right!)
  2. 'Legacy mode' (only 'admin' can do anything)
  3. Logged-in users can do anything
  4. Matrix-based security
  5. Project-based Matrix Authorization Strategy

If you tick 'Matrix-based security' or 'Project-based Matrix Authorization Strategy' and click 'Save', you're locked out again and have to go back to deleting everything in the home directory, rebooting and starting again.

After ticking either 'Matrix-based security' or 'Project-based Matrix Authorization Strategy' (which are, frankly, the only authorisation strategies which make sense), you MUST tick the box which allows the group 'Anonymous' to 'Administer' BEFORE you do anything else. Otherwise, you're stuffed.

So then you try to add a security group, and, wait, you can't. You're stuffed. The 'internal' security model does not have groups, so you must add yourself - your own user ID - to the security matrix, give yourself permission to administer, and then save, and then revoke 'anonymous' permission to administer, and save. Otherwise any Johnny hacker out there in Netland can come along and pwn your server.

To be fair, there are plugins available to add a number of additional authentication methods, including OpenID. I haven't tried these.

Integrating with Redmine

Now, integrating Redmine with Jenkins. Recall that Jenkins is a fork of the Hudson project; they're still pretty similar, and although there isn't a Redmine plugin specifically for Jenkins, there is one for Hudson. I installed that, and on initial testing it appears to work. I wanted to do the integration from the Redmine end, because Redmine does work for me as a project management tool, and I don't yet know whether I shall stick to Jenkins. But the alternative would have been to install a Redmine plugin into Jenkins - that exists; and, indeed, I may install it, as well, since it seems to have some useful functionality.

However, all this still left one gaping hole. Both my Redmine installation and my Jenkins installation were running over plain old fashioned HTTP, which means I was passing passwords in plain text over HTTP, which is asking for trouble - a continuous integration server, simply in the nature of the beast, can do pretty extensive things and would be a wonderful tool for an attacker to control. So I set up HTTPS using a self-signed certificate - I know, but I don't need a better one - and configured Tomcat to communicate only locally over AJP; I then configured the Apache2 HTTP daemon to redirect appropriate requests received over HTTPS via AJP to Tomcat, using mod_jk.

So far so good.

Still to do

I need to integrate Jenkins with Git; I've downloaded the plugins (and downloading and installing plugins for Jenkins is extremely straightforward) but I've yet to configure them.

Sunday, 27 October 2013

Modelling river systems: first glimmer of success

If you've been following this blog, I've been writing about modelling a large game world for some time. Ideally I'd like that world to be largely procedural, so that I can have a lot of explorable environment without having a huge amount of painstakingly handcrafted models; but I also want it to look natural. And in making a landscape look natural, one of the first key things is to model how rain falls and how water drains.

So I've been playing with some experimental code to model this. It isn't yet doing even nearly what I want, but it's beginning to show the first hints of promise.

My assumptions are: my game area is in the northern hemisphere of it's planet, which spins eastward just as the Earth does; coriolis winds blow rain in from the west, and it falls mainly on rising slopes. From where it falls it drains downhill, and once it's joined with sufficient other water, it makes a watercourse, forming a dendral river system. Got all that? Good.

Here is a height-map - actually, the height-map I'm using for testing. A height-map is just like a contour map: darker colours have lower elevation,  with black representing sea level and white representing the highest mountain peaks.

As you can see, my continent has a mountain range running round its west and north; a large crater in its south-east corner; and a large area of fairly flat land, intended as steppe, in the centre. The expectation was that the western littoral should be wet and forested, the north and south littorals fertile, the steppe fairly arid, and that the crater should catch a certain amount of rain water - enough to make it reasonably fertile. The eastern littoral was expected to be dry.

You'll note that, as a hack on the map, there's a little black spot - literally a plughole - in the south-western corner of the steppe, to let the water out.

Now, here's the terrain map from the first sort-of successful run of the irrigate process:
In this map, white represents permanent snow. Blue represents water. Pale green represents grassland and dark green represents forest. Red represents bare rock or desert - land on which vegetation simply will not grow.

Now, let me be first to confess there's a lot wrong with this map, and where it is working it's partly for reasons of artifice. Also, there are some artefacts which I simply don't understand.

Firstly, it's too wet in the west. There are huge lakes which are not draining and I don't know why. The littoral is fairly flat (you can see this from the height-map) but lakes should not be forming on flat land. I need to understand why my drainage algorithm is not working there. Similarly, the east is too dry - it's intended to be drier, but not wholly arid. The crater had a hand-drawn valley system, and it's unsurprising that rivers are forming in those hand-drawn valleys. I don't understand what has caused the two visible dykes which extend out to see from the south-western corner of the continent. There is too strong a tendency for rivers to follow diagonals - it's a very visible artefact, and again I'm not sure why.

However, I'm really pleased with the drainage of the steppe, and on the southern littoral. It's a (good) start. I'm not yet prepared to publish the code that does this, because it is still much too messy. But I am feeling encouraged.

Having said that I'm not yet doing nearly as well as people who generate landscapes entirely procedurally without any attempt to model real physical processes.

Extraordinary renderings of Stuart London

OK, I know when I blog about game worlds it's usually procedural ones, and it's probably no secret that I'm trying to put together a toolkit which will render believable (largely) procedurally generated worlds. But to put together a believable world you have to understand how real world environments work, and these extraordinary models of London from just before the Great Fire strike me as extraordinary and inspirational.

These have been produced by teams from De Monfort University - formerly Leicester School of Art and then Leicester Polytechnic - for a British Library competition called 'Off the Map'; and they are built, literally, from contemporary maps. First, here's the entry by a team calling themselves Pudding Lane Productions:
This has a very grungy feel, similar to CD Projekt Red's beautiful Vizima from the original Witcher game; but (obviously) it's a much bigger and more complex environment than that.

Next, this one from the Optimistic Pessimists:


This is cleaner and crisper, not quite so realistic to my eye; but the flow from exterior to interior, and the interior detailing, is, again, inspirational.

And finally, the Triumphant Goat entry, which, frankly, I find most inspirational of the lot:


The actual competition was won by the first of these - Pudding Lane Productions - but they're all very good, especially in view of the quite small teams involved.

All of these models were built using the CryEngine, developed for the Crysis video game; it's a free download, although it's closed source and you have to pay royalties if you use it for any commercial purpose. As far as I can see, none of the teams have made their work available for download - which is understandable but disappointing. It would have been nice to be able to learn from them.

These maps, of course, represent a real city, and there are reasons why a video game environment should not too closely model a real city. It's awkward to navigate very narrow alleys in a video game; it's easier, in a video game environment, to get disoriented than in a real environment - because you have, in fact, many fewer spacial orientation cues.

So what I'm trying to build is algorithms to create environments which have convincing verisimilitude without being real reproductions of real world environments - but nevertheless these environments inspire me.

Saturday, 26 October 2013

'The Heresy Within' - surprisingly good dark fantasy

[This is a review of The Heresy Within, a novel by Rob J Hayes]

Let's get the basic criticisms out of the way first. This book is under-edited; it's under proof-read. There are few actual spelling errors but a lot of homonym errors, and (for me) that's irritating.

This is fantasy without a lot of magic and without a lot of monsters: fantasy, in fact, about human beings and how they interact. Which is to say, frankly, fantasy as I like it. But it's nevertheless extremely dystopian fantasy. The civilised empire (in which the narrative spends very little time) is a theocracy where orthodoxy is policed by an all powerful inquisition; what precisely constitutes heresy isn't clear, at least from this book, but it has to do with the use of magic. Which is odd, because the inquisition are, for most of the narrative, the only people with the power to use magic. The principle protagonist is an officer of this inquisition.

The bulk of the narrative, however, is set in 'the wild', a very large area of lawless steppe nominally ruled by nine aristocratic families. In this lawless, chaotic and wartorn region, outlawry is rife. The novel follows a band of outlaws who ally with the protagonist to help him complete his quest - they have a contract to assassinate the aristocrat whom he has been sent to question.

Most first books of new trilogies spend a lot of time world building. In this book the world building is done very lightly, in the course of the narrative, never interrupting the flow; and it's done by showing, not telling. We learn only broad brushstrokes about parts of the world this narrative doesn't visit, and we learn them en passant; the parts the narrative does visit we see as the protagonists encounter them, through their eyes and from their viewpoint.

Characters are strongly drawn, and, despite the fact that all the key characters have profound moral flaws, are interesting and engaging; as a reader it's not hard to engage with them, ride with them, root for them. The magical physics are well explained and consistent, and although there is a mild Deus ex Machina moment, it is consistent with magical physics which has already been established.


All in all this is definitely writing on a par with authors like, for example, Joe Abercrombie, who have been much more extensively promoted. I recommend it!

Tuesday, 22 October 2013

Draft submission to the English parliament's enquiry anent Scottish land reform

Summary

In this submission I seek to argue that land in Scotland is grossly inequitably distributed, which is a public policy problem in its own right; and that, partly as a consequence of the inequitable distribution of land, our uplands have been catastrophically mismanaged, leading to a nexus of other public policy concerns. I seek to show that a progressive land tax would significantly address the first of these problems and should contribute to remedy of the remainder. However, some change in planning law is also required.

Introduction: on the basis for private land ownership

The lands which now comprise Scotland did not come into existence private. No god gave out property deeds graven on tablets of stone. Rather, over the past four thousand years, successive peoples have come into Scotland and taken land more or less by force from its previous occupiers. There can be no square inch of Scotland now, which has been passed down peacefully within the family from generation to generation from its original settlers. On the contrary, all land in Scotland has changed hands by murder, theft, extortion or deceit, most of it many times. There is no land-holding in Scotland now which is not based at some remove on malfeasance.

The most iniquitous malfeasance has been in the enclosure of commons. Until the eighteenth century, most of Scotland's land was not enclosed; rather, local people had rights of common across it. The legal theory under which land 'owners' were able to arbitrarily extinguish those rights was, to say the least of it, novel. In this part of Scotland at least, the enclosure was fiercely resisted by 'levellers', which is to say, the dispossessed majority. Enclosure progressed across Scotland slowly, and by the time the far north west was enclosed, the public mood had begun to swing against the 'right' of enclosure. So instead of 'the Highland Enclosures' we now speak of 'the Highland Clearances', but in fact the process, whether called 'clearance' or called 'enclosure', has been the same. The people of Galloway were just as deprived of ancient rights and livelihood, just as driven off the land, as the people of Caithness. It's just, for us, the process happened earlier.

Having said this, land in Scotland is (by and large) now held privately and that is established political fact. While one may argue about the outcomes for which farming is optimised, by and large lowland Scotland is farmed productively. A revolution which made our farming significantly less productive would not be a good thing.

However, ownership of land is both a good and a monopoly. That it is a good is demonstrable in that people both desire it and defend it; that it is a monopoly is simply demonstrated in that if one person owns a piece of land, another cannot also own it. Goods, and especially monopolies, are not normally subsidised. Goods, and especially monopolies, are normally taxed. There is no obvious reason why land should be different.

Finally, land is a critical national asset. It is in the interests of the community of Scotland that the community has effective oversight of the management of that asset.

Natural justice

Birthright: land area per head

Scotland has a land area of 78,000 square kilometres and a population of five million, which equates to 67 people per square kilometre or one and a half hectares per person. In natural justice it seems hard to assert that one person has more right to the enjoyment of the land than any other. Yet Richard Walter John Montagu Douglas Scott monopolises 111,369 hectares, arrogates the birthright of 74,000 Scots. The landed lobby complain that redistribution of land would be 'theft' which, they claim, would violate their 'right to property'. But, as I shall argue below, redistribution can be achieved not by compulsory purchase but by the simple processes of ordinary taxation. Land which the owners voluntarily vacate because the burden of taxation is too onerous is not stolen, it is given up.

In any case, however redistribution is achieved, achieved it must be. As this shocking graph produced by Andy Wightman from figures supplied by the Office of National Statistics shows, 1% of the population own more property by value than the other 99% put together. A community built on such gross inequity cannot stand.

House prices and the local economy

Much has been made of the depopulation and social disruption that has afflicted the 'crofting areas' - the Highlands and Islands. I do not wish to minimise that in the least. But depopulation and social disruption has affected areas of Galloway on an equally devastating scale. My home village of Auchencairn had, in the 1880 census, around 2400 inhabitants; it now has 180. That raw figure sounds devastating, and it is; but the truth is worse. Of the eighty or so stone built houses which make up the core of the village, only three are now occupied by people born in the village, and they are all in their seventies and eighties. The price of even a modest house is now of the order of two hundred thousand pounds, and local wages are depressed: the average working wage in the region is £20,800. So it simply isn't possible for people earning their living in the local economy to buy a house.

The reason for this is that people retiring from the cities, with the proceeds of selling an urban house, can outbid local people, and have done so. Most of these people are resident - only about 10% of houses stand empty - and many of them make a positive contribution to the community. But nevertheless their interests are different from the interests of people who need to earn a living in the local economy, and that does skew communal decision making away from economic development.

Furthermore, with the local private housing monopolised by incomers, what 'native' - second or third generation, or more - villagers remain are corralled into a bantustan of 'social housing' on the other side of the burn, leading to a community divided between white settlers in the increasingly gentrified village and natives in the social housing. This is not a good thing.

And finally, it's even worse than that. The people of my generation born in the village who remain in the village are the children of farmers who inherited the family farm, and those families who have subsisted largely on social benefits, and who therefore qualify for social housing. There's virtually no-one in between. Everyone else went away to university and never came back. There are no jobs for them, and there is no housing they can afford.

I'm painting a bleak picture. Driving through, you'd see a pretty village, and a vibrant village, with its own newly built, community owned post office, with its recently renovated village hall, with new community allotments, with its generally well kept and pretty houses. It's true that, by comparison with many other villages in Galloway, Auchencairn is doing well. Nevertheless, my picture is also a true one, and it is a picture of depopulation and social disruption every bit as bad as that experienced in the West Highlands. It's just less visible.

Auchencairn, of course, is by no means unique. In villages throughout remote rural Scotland this pattern is repeated. A second clearance is being perpetrated; local people with real knowledge of and investment in the locality and its landscape are being progressively driven out, to be replaced by a population of incomers who, because of their age when they arrive, are active and effective members of the community for only a few years before being replaced in their turn with new strangers. These are not social conditions in which community can be sustained.

Subsidy of the rich by the poor

It is an accepted fact that the primary cause of the French revolution was the subsidy of the very rich by the poor and middle classes. Yet we are repeating this mistake, generally throughout modern British society but especially in remote rural areas. For example, the subsidy granted to the owner of the Auch and Inchmurran estate, currently for sale, is stated by the selling agents to amount to £12,000 every single week - two thirds of a million pounds every year. That equates to the income of thirty ordinary rural folk working full time and paying their due income tax; or, alternatively, to the entire income tax take from one hundred and fifty of those ordinary hard working rural folk. There is no way this can be considered either equitable or tolerable.

Furthermore, in addition to subsidies received directly from the state, the landowning rich benefit from many other subsidies paid indirectly by the poor. They receive payments for electricity transmission across the land and from wind turbines erected on the land, which come ultimately from the energy bills of ordinary folk. And this is particularly galling, because the ownership of the hilltops on which many turbines are erected is particularly hard, historically and legally, to justify. This is, largely, stolen common land, stolen from those very ordinary folk whose energy bills are now inflated.

Holding Size

Quite apart from the issue of large estates, the average agricultural holding in Scotland is very large, much larger than comparable countries in Europe. The average holding in Scotland is 101 hectares, as compared to 62.9 in Denmark, 43.1 in Sweden, 25.9 in the Netherlands or 21.6 in Norway.
TerritoryAverage holding size (Ha)SourceNotes
USA181US Department of AgricultureQuoted as 449 acres
Czech Republic152.4European Commission
Scotland101Scottish Government2010 data
UK70.8European Commission2007 data
Denmark62.9European Commission
Germany55.8European Commission
Sweden43.1European Commission
Netherlands25.9European Commission
Norway21.6European Commission
Italy7.9European Commission
The smaller the average holding, the more families are settled on the land, and consequently the more vibrant the local communities. If a farmer in Norway or the Netherlands can feed a family on fewer than thirty hectares, a farmer in Scotland can do so as well. While the farming lobby will doubtless argue that they cannot maintain the lifestyle to which they have become accustomed on such small holdings, their interests should not be the only concern.

I believe that there is a public interest in more people having an active engagement with the land. I believe there are many people who would like to own and manage their own land if they could afford to do so, and that many of them could do so very productively.

Conservation and biodiversity

Forest cover and species poverty

No part of Scotland is naturally treeless. The natural treeline is above the summits of all but the very highest hills - boreal forest in Norway extends to above 1200 metres in altitude. There are no natural moorlands in Scotland, and extremely few natural bare hilltops. There is nothing 'natural' about a grouse moor: it is just as much a man-made environment as an open-cast mine - and almost as depleted of wildlife. To quote Shaw and Thomson 
"wooded habitats in the Cairngorms are about 13 times richer than heather moorland and 11 times richer than grassland, in terms of nationally important species. These disparities are even more pronounced when the extent of each habitat is considered. Despite being the main habitat for some 39% of important species, woodlands cover only about 17% of the land area of the Cairngorms. In contrast, moorland appears to support only 3% of the Cairngorms’ important species, but covers some 42% of its area."
The stripping of forest is partly due to unsustainable logging in earlier centuries, but is mainly due to the hunting to extinction of all our natural climax predators, leading to uncontrolled expansion of herbivore populations particularly deer - and, of course, greatly aggravated by the grazing of sheep. Deer and sheep, uncontrolled, will graze out all shoots and saplings, preventing the natural regeneration of forest and leading to total deforestation in only two or three centuries.

Without the durable and deep root systems of forests, fertile topsoil is easily scoured off steep hillsides, leading to impoverished soils and open screes which will not sustain even sheep. Our overgrazed, barren uplands are a man-made wet desert, a testament to generations of catastrophic land management.

Environment, global warming and sustainability

There's another problem with overgrazing our uplands. All that good, fertile topsoil that's scoured off the slopes and hilltops has to go somewhere, and it does. The rich organic matter which supported life on the high slopes is lost to the sea, and the mineral part - the gravels and sands and silts - are laid down in beds of our streams and rivers and estuaries, gradually strangling them.

Flooding

And in winter, now there is no longer forest and moss on the high lands to hold and buffer the rain, to release it slowly through the turning of the seasons, all that good revivifying rain has to go somewhere, and it does, too: rushing uncontrolled down those fragile hillsides into our choked rivers, and then, with an impatient shrug, rolling on over our flood defences into our homes and workplaces. Floods are not natural disasters. They're man made disasters. They're made by deforesting hillsides just as surely as they're made by building on floodplains.

Landslips

But there's another man-made disaster that's made by overgrazing hillsides. As the earth is scoured off the hillside, everything that is built on that earth is scoured off with it. The road builders of the Rest and be Thankful can never rest, whether thankfully or not, while the sheep are killing the plants whose roots once bound the hillside.

Biomass/carbon capture and storage

And there's a third issue, which is carbon. Millions of pounds are being invested in developing technologies for carbon capture and storage, but they don't work yet. Meantime, the Earth has its own mechanisms for carbon capture and storage. Principal among them are the ones called 'trees' and 'bogs'. The deforestation of Scotland's hills has released two trillion metric tons of carbon, and that's before we count the bogs that we've lost (30,000 tons per Km^2 x 78,000 Km^2 x 83% (because 27% is still forest) = 1942200000 tons). Or to count it another way, the forest we've lost - just the forest - is equal to 23 years of our current total carbon footprint.

Reforesting our hillsides and uplands would recapture much of that - far more than pumping the output from Longannet under the North Sea ever could - and at the same time those forests could be managed sustainably for fuelwood, providing carbon neutral heating for very large numbers of homes, or burned in biomass power stations to generate electricity (and, hopefully, integrated local area heating).

Remedy

I believe that a great deal of the remedy both to the problem of the inequitable distribution of property and to the ecological catastrophe of our uplands can be achieved through simple measures: the removal of subsidies, and the imposition of tax. Obviously, nothing in life is this simple. There will inevitably be need to be policy tweaks. But in this section I intend to argue that land tax is the place to start.

Flat land tax vs land value tax

The first thing to say is that while the idea of a land tax is undoubtedly good, the right land tax is better. At present, in Scotland, it is proponents of land reform who are promoting land value tax. And they shouldn't be; it is at best a distraction, at worst actively counter-productive. Land should be taxed. Ownership of land is a good, and it's a monopoly, since only one owner can own any piece of land. Land owners, just by owning land, exclude others from the full enjoyment of that land. Of course it should be taxed. But land value tax goes about it in precisely - diametrically - the wrong way.

Land value tax does not address the issues of the inequitable distribution of land, nor of the exploitation of marginal land. The land value tax on ten thousand hectares of remote highland estate is precisely nil. There is no incentive provided by the land value tax for the estate owner to divest themselves, to break up their estate into smaller holdings. Land value tax essentially subisidises grouse moors and deer 'forests'.

Land value tax on a thousand hectares of lowland arable is the same whether that land is held as one holding or as ten; but as one holding, there will be economies of scale, so again the land value tax militates against the breaking up of larger holdings into smaller ones.

Land value tax discourages the use of the land on which the public has invested infrastructure. If oil refineries are to be built, it's in the public interest that they should be built near deep water ports and railways. If factories and warehouses are to be built it's in the public interest that they should be built near transport infrastructure. If the land which is appropriately serviced for industrial development is so taxed that there's no incentive for industrialists to use it, they'll build their factories elsewhere; which means the public expenditure on infrastructure will be wasted, and the overall efficiency of the economy will be reduced, benefiting no-one.

But it's worse than that. Under land value tax, valley lands, closer to public roads, will be taxed more, and hill lands taxed less, giving an incentive to farmers to move from lands which are suitable and convenient for grazing, but are taxed, to lands which are less suitable and less convenient but are not. In other words, land value tax will inevitably contribute to the further over-exploitation of marginal lands.

Finally, Land Value Tax does not tax land. Nor does it tax the value of land. It taxes a notional, uncertain element of the value of only some land - it imposes no tax on marginal lands distant from public infrastructure. And because that element of the value which is to be taxed is notional, it requires sophisticated assessment and is open to contest by people who by definition have access to the best, most devious accountants and lawyers in the land. In short, it would be an extraordinarily expensive and inefficient tax to collect, and would be the cause of interminable court-room battles fought at cost to the public purse.

So is there a better solution? Of course there is. A flat land tax - the same tax levied on every hectare of Scotland - would make it uneconomic to own marginal land.

Progressive land tax

However, the flat land tax does not address the issue of large holdings. Fortunately, income tax already provides us with a model for how to deal with this. If you have a small amount of income, you currently pay a small proportion of tax on it. If you have larger income, you pay proportionately more. The same principle should apply to land tax: a larger holding should be taxed more per hectare than a smaller one. I've suggested, as a mechanism for this, an exponential land tax, because I think having a continuous scale (rather than the stepped one we currently have with income tax) produces fewer quirks and anomalies. But in any case, if larger holdings are proportionally more heavily taxed than smaller ones, there's a positive fiscal incentive to break up larger holdings into smaller units, and that's precisely what land reform ought to be setting out to achieve.

Explicitly, the progressive scaling of land tax should be aimed at making the ownership of large holdings, especially of marginal land, unaffordable.

All holdings with common beneficial ownership taxed as one

What large landowners, faced with this scheme, will do, of course, is to set up hundreds of separate limited companies each holding a small amount of land, and the scheme will not work unless this evasion is explicitly designed around. Therefore, two or more holdings which are found to have substantially the same beneficial owner will be counted for the purposes of the exponential land tax as the same holding. This must be so whether or not the holdings are contiguous; every beneficial owner must be taxed on the entirety of their holding. Where a land-owner, through anonymous overseas trusts or however, manages to evade tax for a number of years, the tax authorities must be empowered to levy back tax when the evasion is discovered. As the back tax on large holdings would bankrupt any entity on Earth, no-one is going to take the risk of doing this, so avoidance should not be very much of a problem.

Title defaults to common

Obviously, the question arises what happens if the land tax is not paid. My answer is this: after a reasonable grace period - say a year - title in the land on which tax is unpaid should lapse, and the land should revert to common. Title in buildings and other permanent structures on land which reverts to common should also revert to common.

It should be open to the landowner to negotiate with the tax authority, to say 'I will pay tax on only this part of my lands, and allow the remainder to revert'. But of course one consequence of that in these days of wind turbines and similar infrastructure is that landowners will seek to pay tax on only ten square metres around the base of each turbine, so it ought to be open to the tax authority to refuse such an offer.

Benefits from land should be local

So who - what public body - should benefit from the proceeds of the land value tax, and who should manage the common lands?

Size of local government areas

To answer that I'd like to make reference to the size of Scottish 'local' government areas. They are by far the largest in the Western world. They're (by population) on average thirty-six times the size of average Icelandic local government units; twelve times the size of Norwegian ones; four times the size of Swedish or Dutch; three times the size of Danish. Or, startlingly, eighty four times the size of French communes. This isn't local government at all. Fully one sixth of the independent countries in the world have smaller populations than Dumfries and Galloway.

So I would propose that land tax should be levied - by a central authority, perhaps - on behalf of community councils. Where tax is unpaid and land reverts to common, the common lands should be managed by the local community council, or, if the local community council is unable or unwilling, by a Common Lands Factor on behalf of the community council. This would, of course, imply a significant switch in discretionary public money from the existing local authorities to community councils, and inevitably some or all of the duties and responsibilities of the local authorities should switch too. That is a reform which is separate from land reform, of course, and one which should be considered separately- but it is one which I believe would benefit much of Scotland.

Of course it is by no means inevitable that local community councils would choose to reforest their upland commons; they might even choose to manage them as common grazing or for deer stalking, which would not improve the ecological situation in the least (although it is now in most places so bad that it could not, at least, be made much worse). To a degree this is a matter of local democracy: local people ought to be empowered to make their own decisions, even if to outsiders these look wrong. However, central government might seek to advise and encourage community councils to reforest.

Planning policy

Redistribution of land into smaller holdings is of no benefit if people cannot live on the land. The issue of house pricing is a very thorny one, since people with money are mobile. To ban urban people from retiring to the countryside would make a mockery of a free society, but as long as they do, with a fixed housing stock, it's inevitable that they will continue to raise the price of rural housing to a level which the rural economy cannot sustain.

Planning policy must be revised to address this problem. The Rural Housing Burden goes a considerable way towards this. However, the size of an agricultural holding on which a dwelling for the family of the owner of the property can be built also needs to be substantially reduced, although it is reasonable to impose the condition (as is frequently done now) that the dwelling should not be sold separately from the holding.

Monday, 14 October 2013

Modelling rural to urban, take two

Kirkcudbright high street, showing development of closes
and pends on runrig.
In an earlier post, I wrote about modelling the change from rural to urban, and I did so in the context of what was a grid based landscape. And that really does not work for me, because artefacts of the grid are bound to show up in the final settled landscape model, and it won't look natural. So although for height-maps I may continue to have an underlying grid - mainly because there's so much code of other people's I can re-use - I'm going back to thinking that for rivers, roads and boundaries and for point features like buildings I need to overlay what is essentially a vector map.

So, going back to populating a game world, the first generation of settlers wander the landscape moderately randomly until they find good farmland. Then they reserve themselves a long quadrilateral, not necessarily perfectly rectangular. The width of that quadrilateral is the approximate width of two building units. Why? It will become clear. The length will be approximately eight to ten building units. The quadrilateral, like a div in HTML, will be laid out with a certain padding, more at the ends, less at the sides, into which other plots may not intrude. The padding at the ends of two facing plots will naturally become a street - actors will traverse it because they may not traverse actual plots. Similarly, padding to the sides of plots will naturally become closes, wynds or alleys.

Settlers will prefer to settle near existing settlements. So a second settler will reserve a similar long quadrilateral either facing or alongside the first, and so on. This gives us a runrig settlement. I was worried about the position of buildings for a while, but I've seen a solution: one does not actually assign building positions until the landscape is rendered; instead, you assign plots 'building scores' - simple numerical values - which are incremented as the occupant of the plot gets more prosperous over time.

When, finally, the landscape is rendered, buildings are constructed as follows. Each plot constructs one building unit at a plot end adjacent to a street. Then, iteratively, for as long as there are remaining building scores, each plot which has remaining building score constructs a new building unit and decrements its building score.

The rules for positioning new units are as follows:
  • Street frontage (at either end of the plot, provided there is a street there) is used first. Recall that a plot is the approximate width of two units.
  • If a building is not already taller than its immediate neighbours, a unit may be added 'upstairs' (up to an absolute limit of N stories, where N is probably four).
  • Where an upstairs unit is on a street frontage and adjacent to a building on a different plot (long side to long side), the unit will extend over the side padding to form a pend.
  • If it's impossible to build up because neighbouring buildings are not yet tall enough, a new ground floor unit will be built behind the street frontage, alongside the close. If one neighbouring plot already has a building on a close, that side of the plot will be favoured.
  • Buildings on a plot behind the street frontage will always be on the same side of the plot.
  • Buildings on a plot behind the street frontage will never be taller than the buildings on that plot on the street frontage.
The rendering of building units will be as described in my note settling a game world - i.e. the materials and details will be related to the local geography, and the materials which would be 'naturally available' in it.

This means that for any plot we need only store the vertices of the plot, and the building score. The first vertice of the plot provided the seed for a random number generator which informs the construction of the building, guaranteeing that it will always be rendered the same. If the economy model continues to be run while the game is in progress, a prosperous non-player character may add additional building units to their plot during the course of the game, but the procedural algorithm sketched above ought to make this natural.

There's an implication that, to allow for non-player characters becoming less prosperous, whether due to action of the market or war or pestilence, buildings ought to be able to fall into ruin, so for each cell model of a 'complete' building there ought to be at least two models of that cell in states of dilapidation, and some form of 'negative building score' to drive that; but this is getting a long way ahead of myself.

Sunday, 6 October 2013

The attack burden

I have, it won't surprise you to know, a server out there on the Internet. And occasionally I do a little sweep to check its security and general health, because it is out there on the Internet, and the Internet is a pretty nasty place with lots of pretty nasty people.

Now, on my server there is only one valid login. That login requires a certificate - you cannot login with a password alone. Even once you have logged in, you cannot do anything significant in the account to which you have logged in, unless you also know the root password (although, of course, once you have logged in, brute-force guessing of the root password could be attempted). So I'm reasonably safe from attacks such as the Hail Mary Cloud.

But two things are interesting. The first is the sheer number of attempted logins. Last week I had 8322, or an average of 49 an hour, or not far shy of one a minute.

The top twenty usernames tried were as follows:

root@goldsmith:/var/log# grep 'Invalid user' auth.log* | awk '{print $8}' | sort | uniq -c | sort -rn | head -20
    185 oracle
    130 web
    123 test
     88 admin
     75 tester
     70 testing
     69 testuser
     62 test1
     56 ftpuser
     54 userftp
     51 test3
     51 test2
     50 test4
     48 test123
     40 user
     37 guest
     35 webmaster
     27 administrator
     25 info
     23 minecraft

One assumes (at least, this one does) that the account names most often tried are the names the attackers most often find give them useful access to interesting things. Which argues that Oracle installations tend to have significantly weak passwords. But notice that many systems appear to be vulnerable to logins on the 'web' user account. Surely, for any sakes, if you have such an account it ought not to be login enabled (and ought to have very minimal privilege anyway)? The fact that that's an attack target is worrying. That 'admin' and 'administrator' are attack targets isn't surprising - all sorts of systems, including many small appliances based on either Linux or *BSD, have 'admin' accounts with substantial privilege, and a lot of people coming from Windows backgrounds use 'administrator' as the name of a significant account.

'ftpuser' isn't so worrying. Yes, a lot of machines will have them, but they should be able to do little.

Which leaves the remarkable prevalence of variants on 'test'. In fact, if you look at all variants on test, there are almost 100 attempts a day:

root@goldsmith:/var/log# grep 'Invalid user' auth.log* | awk '{print $8}' | grep test | wc -l
681

So the next question is, how often was 'root' tried? After all, root is the account which you have to break in order to get total control of a UN*X machine. Five years ago, it would have been far and away the most common target. The answer now?

root@goldsmith:/var/log# grep 'Invalid user' auth.log* | awk '{print $8}' | sort | uniq -c | grep root
      1 anonftproot
      3 cvsroot
      1 ftproot
      1 nfsroot
      1 root001
      1 root01
      1 root02
      1 rootkloots
      1 sroot
      1 testroot
      1 vroot
      1 webroot
      1 wwwroot

Never. Not even once. Which is sort-of good news, and implies that people who keep UN*X machines out there in netland have learned the lesson of not allowing root login.

So, next question is, am I seeing distributed, Hail Mary Cloud style attacks? The answer is I'm not. Of my 8322 probes last week, 89% came from a single host:

root@goldsmith:/var/log# grep 'Invalid user' auth.log.1 | awk '{print $10}' | sort | uniq -c | sort -rn | head -10
   7445 190.52.65.170
    424 223.4.208.188
    259 218.108.85.245
     67 199.187.123.84
     47 46.165.220.24
     43 36.39.246.121
     12 
      7 59.124.124.9
      5 218.108.169.180
      4 112.78.3.234

So, where is that host?

root@goldsmith:/var/log# dig -x 190.52.65.170

; <<>> DiG 9.7.3 <<>> -x 190.52.65.170
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- 34849="" font="" id:="" noerror="" opcode:="" query="" status:="">
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0

;; QUESTION SECTION:
;170.65.52.190.in-addr.arpa. IN PTR

;; ANSWER SECTION:
170.65.52.190.in-addr.arpa. 43200 IN PTR static-host65N170.sls.espoltel.net.

and who's that?

root@engraver:/var/log# whois espoltel.net
Registrant:
ESPOLTEL S.A.
   ESPOL CAMPUS GUSTAVO GALINDO KM 30.5
   PERIMETRAL
   Guayaquil, Guayas 99999
   EC

   Domain Name: ESPOLTEL.NET

So my very prolific attacker is a machine hosted by (but not necessarily operated by) a small ISP in Ecuador. The machine hosts the website of the local water company. It is almost certainly a machine which has itself been successfully attacked and compromised. But there's nothing specifically Ecuadorian about the attack; my second most prolific attacker is in Hong Kong.

The point of this post is that if you host a server on the Internet, or any other device attached to the Internet, it is being attacked, all the time. Most of those attacks are fairly simple-minded. There have been no attacks I'm not familiar with, and no attacks which I think have any chance to succeed.

But the morals of this story is, first, if you have an internet-facing device which is secured only by password, don't. It will be compromised sooner rather than later. Client certificates are very much more secure. And second, keep wary. Sooner or later, a new and more effective attack will come along.

Creative Commons Licence
The fool on the hill by Simon Brooke is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License