Wednesday, 8 May 2019

Baking the world

Devogilla's Bridge in Dumfries, early foourteenth century
In previous posts, I've described algorithms for dynamically populating and dynamically settling a game world. But at kilometre scale (and I think we need a higher resolution than that - something closer to hectare scale), settling the British Isles using my existing algorithms takes about 24 hours of continuous compute on an eight core, 3GHz machine. You cannot do that every time you launch a new game.

So the game development has to run in four phases: the first three phases happen during development, to create a satisfactory, already populated and settled, initial world for the game to start from. This is particularly necessary if hand-crafted buildings and environments are going to be added to the world; the designers of those buildings and environments have to be able to see the context into which their models must fit.

Phase one: proving - the procedural world

I'm going to call the initial phase of the game run - the phase which takes place before the quest team write their quests and the art department adds their hand-crafted models - 'proving', as when dough has been been made and set aside to rise.

Then, when the landscape has developed - the areas of forest, scrub, open meadow, moorland, savanah and desert are determined, the rivers plotted, the settlers moved in, their trades determined and their settlements allocated, the roadways which link settlements routed, river crossings and ports defined - the proving process ends, and the world is turned over to the plot-writers, quest builders and designers, for a process we can see as analogous to kneading.

But, before going there, to summarise the proving stage. The inputs are:
  1. A raster height map (although this could be randomly generated using any one of many fractal algorithms) - this probably uses ideas from tessellated multi-layer height map;
  2. Optionally, a raster rainfall map at 1km resolution (although my personal preference is that this should be generated procedurally from the height map).
The outputs are
  1. A vector drainage map (rivers);
  2. A raster biome map at roughly 1 km resolution (it might be anything between hectare resolution and 1Km resolution,  but obviously higher resolution takes more storage);
  3. A database of settlers and their settlements, such that the settlements have x,y co-ordinates;
  4. A vector road map.
In this sense, the 'biome map' is just the end state of a Microworld run. The 'biomes' include things like 'forest', 'scrub', 'heath', 'pasture', but they may also include human settlement, and even settlement by different cultural groups.

This gives us all we need to vegetate and furnish the world. When rendering each square metre we have
  1. The x,y coordinates, obviously;
  2. The altitude, taken from the height map;
  3. The biome, taken from the biome map;
  4. The biomes of adjacent cells in the biome map;
  5. The proximity of the nearest watercourse;
  6. The proximity of the nearest road or pathway;
  7. Whether we are inside, or outside, a settlement (where for these purposes, 'settlement' includes enclosed field), and if inside, what type of settlement it is.
Given these parameters, and using the x, y coordinates as seed of a deterministic pseudo-random number generator, we can generate appropriate vegetation and buildings to render a believable world. The reason for pulling adjacent biomes into the renderer is that sharp transitions from one biome to another - especially ones which align to a rectangular grid - rarely exist in nature, and that consequently most transitions from one biome to another should be gradual.

Note that proving, although extremely compute intensive, is not necessarily a one-time job. If the designers aren't satisfied with the first world to emerge from this process, they can run it again, and again, to generate a world with which they are satisfied. It's also possible to hand-edit the output of proving, if needed.

But now, designers and story-writers can see the world in which their creations will be set.

Phase two: kneading - making the world fit our needs

Enough of proving, let's get on to kneading.

Hand-designed buildings and environments are likely to be needed, or at least useful, for plot; also, particularly, very high status buildings are probably better hand designed. I'm inclined to think that less is more here, for two reasons:

You cannot hand design a very large world, it's just impossible. How CD Project Red managed with Witcher 3 I don't know, since I understand that is largely hand designed; but that was a very large team, and even so it isn't a world on the scale I'm envisaging.

Procedurally generated models take a wee bit of compute power to reify, but not a huge amount, and they're trivial to store - you need one single birch leaf model and one single birch-bark texture generator to make every birch tree in the game, and probably a single parameterised tree function can draw every tree of every species (and quite a lot of shrubs and ground-cover plants, too). But once reified, they take no longer to render than a manually crafted model.

By contrast, a manually crafted model will take a very great deal more space to store, such that being able to render a large world from hand crafted models, without excessive model re-use, isn't going to be possible.

So it's better in my opinion to put effort into good procedural generation functions, not just for foliage but also for buildings. My reason for using a picture of a medieval bridge at the head of the essay is to illustrate exactly this point: even in the medieval period, bridges comprise a series of repeating modules. Take one arch module and one ramp module from Devorgilla's bridge as models, add texture skins for several different stone types, stretch the modules a little in whatever dimension is needed, and repeat the arch module as many times as needed, and you can create a range of bridges to span many different rivers - which will all be visibly similar, but that's fine, that's the nature of a traditional culture - but each slightly different.

Take half a dozen sets of models - timber bridges for forested biomes, brick bridges for biomes without stone or timber - and you can build procedural bridges across a whole continent without ever exactly repeating yourself.

However, in some places the designers and story writers will want, for plot reasons and to create iconic environments, to add models. I'm inclined not to over do this, both for reasons of development effort and for reasons of storage cost, but they will. Very high status buildings may need to be unique and distinctive, for example. These need to be designed and their locations and spatial dimensions added to the database, so that the models can be rendered in the right positions (and, critically, procedurally generated models can be omitted in those positions!)

Story and quest writers will also want characters for their plots. While there's no reason why writers cannot add entirely new characters to the database, there's no reason why they cannot incorporate characters generated in the settlement phase into the story; for this reason, characters need to be able to be tagged in the database as plot characters, and with what quests/elements of the plot they're associated.

This allows a mechanism to prevent a plot character from being killed by another non-player character, or dying of disease or starvation, before the plot elements in which they feature have been completed.

Phase three: baking - making it delicious

Once the world has been populated, settled, vegetated, the story has been written, the models built, the quests designed, there is probably a process of optimisation - stripping out things which aren't needed at play time, streamlining things that are - before you have a game ready to ship; but really I haven't yet given that much thought.

Phase four: eating!

At the end, though, you have a game, and a player plays it. How much of the dynamic, organic life that brought the game through proving continues on into the playing phase? If the gossip ideas are to work, if unscripted, non-plot-related events (as well as scripted, plot related events) are to happen while the player plays, if news of these events is to percolate through the world and reach the player in organic, unscripted ways, if a lot of the emergent gameplay I'm imagining is to work, then quite a lot of the dynamic things must be happening.

Of course, part of this depends on the length of 'game world time' is expected to elapse in the course of one play through of the game. If it's less than a year, then you don't need children dynamically being born, and characters dynamically growing older; but if more, then you do. Similarly, you don't need a real simulation of trading to dynamically drive prices in markets, but for a fun trading sub-game to emerge, you probably do, and if you are using merchants as news spreading agents the additional compute cost is not high.

And I understand that many game writers will shudder at the thought that a war might (or might not) start in the middle of their plot, that a battle might, one time in a thousand, take place right where they've plotted some significant encounter. Most modern video games are essentially just very complicated state machines: if you make this sequence of choices, this outcome will happen, guaranteed. Or else they're puddles of random soup, where everything that happens is more or less driven by a random number generator. What I'm envisaging is something quite different: a world in which traders gonna trade, robbers gonna rob, lovers gonna love, scandal-mongers gonna make scandal, organically and dynamically whether the player is there or not, and news of these events will filter through to the player through the gossip network also organically and dynamically.

A world, in short, through which no two runs will ever be the same, in which interesting bits of story will happen with no-one directing or scripting them. And for that to work, some of the same dynamic processes that drove the proving phase have to continue into the eating phase.

Thursday, 11 April 2019

The Changeling

My family in 1960; my father on the right, me next to him
I woke up in the middle of the night thinking about the 1962 Foot And Mouth outbreak, and its effect on my father; wondering to what extent his psychiatric crisis affected mine, and mine, his.

(My father wes then the Ministry of Agriculture's Regional Controller for the North of England; among his responsibilities was deciding which herds were condemned. He insisted on visiting every affected farm, talking to every vet and every farmer. He didn't have to do that. It's because of him that we now know that the disease can be carried on the tyres of cars - specifically our car. He carried the disease from farm to farm with him, infecting farms which had not previously been infected).

To what extent did he undertand the Foot and Mouth outbreak as a punishment for his sin in divorcing his first wife to marry my mother? Or for other sins of his of which I'm unaware? To what extent did both my parents understand my own collapse into a psychiatric basket case - which had started earlier, but got much worse during this period - as a punishment?

Of course, there's no-one else left alive who I can check these thoughts out with, with the exception of my sister who was also only a child at the time. The last of my parents' contemporary friends died last year.

I now know and understand that my father's childhood must have been traumatic, and that the first half of his war - the half he never spoke about - must also have been traumatic. How damaged had he been by these experiences?

As a small child, your own parents are god-like, solid, immutable, the foundations of your existence. It's hard to see them as damaged. Later, in my teens, my psychiatrists saw my own trouble as in part an expression of the conflicts in my parents' marriage, but I now realised that my then understanding of that understanding was shallow.

Both my parents' fathers were in there own way monsters; which is another way of saying both my parents's fathers were in their own way very damaged individuals - but I only dimly understand the causes of their damage. A further generation back, I understand a little of my mother's grandfather's damage, but nothing beyond that. If I had children, they - or their children - would see me as a monster; and they'd be right, of course, in many ways I am one.

Slobodan Milošević was a monster; but his parents marriage failed while he was a small child, and both of his parents committed suicide before he was thirty. I've always seen evil in the world as a consequence of evil, damage resulting from damage, feeding on and reinfecting itself from generation to generation.

This isn't to say my father was a bad man. He wasn't. He was a very brilliant, very troubled man who sincerely strove to be a good man - as I do. But each of his children were badly scarred, as mine would be if I had any, as those to whom I have acted in loco parentis have been.

But so - what? How do we act against evil, if its perpetrators are also its victims?

I have long felt that the appropriate, kind, caring response to children with psychiatric trauma would be to kill them. To put them out of their misery, because you don't recover, because no-one should be forced to live like this. But in saying that I was thinking it simply for the child's sake, to spare the child (and the adult they would grow into) suffering.

What if one should kill children who suffer psychiatric trauma in order to prevent the evil that they may - that they are likely to - cause? Hold onto that thought for a moment. It's a very dark one.

There are folk beliefs about changelings, demon children, cursed children. Does this reflect a traditional practice to driving out or killing very troubled children, and, if so, did that practice have survival benefits for the herd in cauterising evil and limiting its intergenerational spread?

Dark thoughts. I should sleep.

Sunday, 7 April 2019

About taxing the car

My niece and I, in happier times long ago
This is an account of my descent into yet another psyciatric crisis this weekend. It's a bit confusing, mainly because my memory is so scrambled I can't be clear about the order of events; and, of course, it isn't really of interest to anyone else. But writing it down at least lets me get it out. Like talking to a psychiatrist who isn't there, and doesn't answer. Because that's how it is.

Taxing the car

This weekend I had to tax the car. I should have taxed it last weekend, but I hadn't; so it was out of tax, so it was urgent, so I had to do it. The modern system for taxing a car in Britain is very simple and very efficient; the things about bureaucratic websites which usually put me into meltdowns aren't an issue.

What is an issue is I actually can't afford to do this, and in looking at the extent to which I can't afford to I'm forced to face up to just how bad the mess I've spiralled into over the winter has become. My cash income comes from work I do for a wee software company in Scotland. They need me less and less, so the amount I make from it is getting less; now it averages about £500 a month. The software tools I need to do their work cost about £100 a month, and running the office, which I need to do because I don't reliably have enough electricity at home, costs about another £100; so my net income is now around £300 a month. To put it another way, in 1988 I was charging £750 for a day of my time (and getting it); now, ignoring inflation, I'm earning less than that a month.

I like working for these people; they're easy going and don't hassle me, rarely initiate a phone call unless I invite them to, and what they're building isn't in the least evil. Having something regular to do has given me grounding, steadyness, something I have to do for other people. But they don't have enough work for me for this to be viable any longer.

So, I could go out and look for other work. But
  1. I don't have the confidence that I'm any use to anyone. My mental state is so unreliable, and a lot of the time I just can't focus. When I can focus, I'm still quite good, if not as good as I once was. But a lot of the time I can't, and when I get anxious about not being able to deliver work then my focus goes even worse. I can work effectively, on long term average, about fifteen hours a week. But that's long term average, and in the short term I can't guarantee even that.
  2. I really don't cope well with strangers, or, actually, with interacting with people at all - even people I know well and like. Trying to sell myself to people I don't know when I can't honestly claim to be able to deliver for them is something I cannot do.
  3. I cannot claim social security benefits. The degree of stress and humiliation involved is just beyond me. I honestly would rather die.

The phone and the cattle shed

Normally, I refuse to borrow. I know damn fine my sanity is so poor that debts are a strain I just can't deal with. I broke that rule twice last autumn; both times it seemed sensible at the time.

The plan for my croft has been that I keep cattle; to be able to store winter fodder for the cattle, and to be able to feed them easily through the winter, I planned to build a cattle shed. It hadn't made much progress for a couple of years mostly because I lacked the money. Last summer, a friend offered to lend me some money to help getting ahead with it. Initially I refused, but in the autumn when I was really struggling with suicide I thought that if I did borrow some money, I couldn't die until I'd paid it back, and that would act as motivation to keep going. So I borrowed £1,000, and used it to buy concrete blocks and timber. I thought, at the time, I would be able to repay this over a year or so fairly easily.

Then my niece killed herself. She was an orphan, and for complicated reasons she and I were close; we had more of a parent/child relationship than an uncle/niece one. I had to organise the clearing of her flat and her funeral. My phone was broken and I needed a new one urgently to just communicate with people; so I bought one. And between that and the travel and paying for the funeral I went into overdraft.

Which at the time felt justified and also manageable, because my neice left me most of what she had, which isn't a lot but it is something. But I can't get probate on her will until the inquest has been held, and it keeps getting delayed.

I checked my bank account before taxing the car. Usually I pay a year's tax at one go, and that's what I planned to do. But that was impossible; it's obvious to me that there is nothing I can do which will prevent me going over my overdraft limit this month.

Of course, one day the inquest will be held and the death certificate will be issued and I'll be able to get probate on the will and that will, actually, clear my current debts. Except that, it costs money to go on living. I actually can't afford to. Sometime within the next year, even if I get my niece's money, I will run out hard.

Fletcher and the cement mixer

Software is what I do, what I used to be good at, what I use to validate myself. Building software, like any other trade, needs tools, and one of my important tools is Fletcher, my 'big computer', a home built beast with eight processor cores, 16Gb of RAM, and 3Tb of disk, of which 1Tb is SSD. It's not state of the art any more, but it's still pretty fast and provides a really nice working environment; except it also has a relatively high specification video card, and the video card has failed. I think the basic machine, other than the video subsystem, is fine; but I have the security on the mean set up so that you cannot login over the network, which means, without a video subsystem, I cannot log in at all. Which means I cannot really work on the software project I want to work on (even if I had the focus, which I don't).

To do any further work on the cattle shed, I need a cement mixer. Well, I have a cement mixer; but I broke a universal joint on it last autumn. Some day last week I dismantled the drive on the cement mixer to get the universal joint out so that it can be worked on. I think that's when the crash started: I looked at the disassembled parts and thought, OK, that's fine, but I can't take it to an engineer to get it fixed because I can't pay for it.

Project Hope

So, supposing I can go on earning £300 a month, can I survive on that? Well, probably. I spend much more than I need to on telecommunications, I realise it amounts to an addiction. I spend £60 a month on my satellite link, nearly £70 on mobile, and £30 on the landline in the office that hardly works at all. I don't know if I can do the full cold turkey thing and cut myself off from the Internet all together; I've had network comms into my home since before there even was an Internet, back to 300 baud dialup modems, VT100 emulation and JANET addressing. Like software engineering, network comms is part of my identity. The landline in the office ought to go, since it really doesn't work. And, if it goes, for the summer at least the office can go. And that would save a lot.

If I terminate my satellite connection but not my mobile connection, then I'll just end up using more mobile bandwidth, which is really expensive. So it makes more sense, actually, to terminate the mobile - which does of course mean I wouldn't have a phone. But one or other could, and really has to, go.

I spend £30 a month on charity and another about £30 on various Yes movement and news things - Bella, BroadcastScot, Newsnet, the Ferret, Common Weal. Those could go.

But the one that really hurts is Project Hope. Project Hope is the canvassing voter-intention system I built for IndyRef2. It isn't finished and it doesn't work, and I've stopped working on it partly because Fletcher is broken and partly because I no longer believe that independence is going to happen. But it's still sitting there on a server out on one of Linode's web farms which is costing me £40 a month to rent. There's no point in it sitting there. It doesn't work. If Nicola Sturgeon called IndyRef2 tomorrow, it wouldn't be ready and couldn't be finished in time. But switching it off would mean I'd given up, and that all the time and effort I've put into it would be wasted.

Which, actually, it already is, but... knowing it is and facing up to the fact that it is are different.

Facing facts

Intellectually, I know my life is over, just as, intellectually, I know Project Hope has failed. Knowing it and facing it are different.

Any form of suicide takes a certain amount of courage. I used to think about a car crash, but modern cars are much too protective to make that a reliable way out. Two years ago I just stopped taking warfarin, which probably would eventually kill me (but which might just end up with a stroke, which would be even worse). I have various bladed tools with which I could easily kill myself, but I don't think I have the courage for that.

When my lover died last July, I woke up the following morning alone in her house, and spent some time tidying up. In doing so, I took a supply of morphine. I'm not proud of that; it is essentially theft. But I did it, and I have it. It has about a year of shelf-life; if I'm going to use it I'll need to do it soon.

I do not want to die with debts unpaid. But if I continue to live, the debts will accumulate.

I don't really see another alternative.

Friday, 29 March 2019

Brexit: selfishness, short-termism, rent seeking, and hereditary privilege

selfishness, short-termism, rent seeking, and hereditary privilege
Brexit: We got into this mess because some Conservatives couldn't cope with the fact that we weren't the top power in Europe: because, while we won almost all of the votes Europe ever had, it wasn't quite totally all. They couldn't cope with the fact that Germany was more influential than us - because Germany outperforms us at manufacturing, finance, exports, and, critically, diplomacy.

After Brexit, Germany will still outperform us at manufacturing, finance, exports, and, critically, diplomacy - and Germany will be part of the most powerful trading block in the world while we will have NO FRIENDS AT ALL.

The extent of the own goal here is staggering. Brexit will not only not fix any of the things the Brexiteers were upset about, it will make all of them MUCH worse.

The Brexiteers will still blame the same boggarts: they'll blame the EU, they'll blame Germany. But the problems aren't in the EU or Germany, they're in our own disfunctional constitution and our own disfunctional economy. Nobody in Britain wants to face this. We all know it's true, it glares us in the face. Our national governance doesn't work. Our commercial governance doesn't work. Our industrial governance doesn't work. And the reasons are all pretty much the same across all three sectors: selfishness, short-termism, rent seeking, and hereditary privilege.

Our elites don't want to fix these things, because they benefit from them; so they direct the blame outwards. And so the problems don't get fixed. And so the whole British project becomes more creaky, more inefficient, more decrepit, more disfunctional. And we all suffer, including those bloody elites.

Wednesday, 20 March 2019

Kickstarting a hydrogen economy

Battering batteries

There's a lot of interest in battery electric vehicles at present; they're popularly viewed as the future of transport. But there are several problems with the widespread adoption of battery electric vehicles.

  1. The battery techologies required (currently) rely on large quantities of rare minerals, involving substantial environmental and social costs in their extraction;
  2. The batteries themselves are quite heavy, leading to heavier vehicles which have more kinetic energy in a collision and therefore higher propensity for injuries and damage, and, additionally, cause more damage to road surfaces leading to increased need for maintenance (although to be fair battery vehicles are no worse in this regard than conventional SUVs);
  3. Batteries have limited range and take longer to recharge than petrol or diesel vehicles to refuel;
  4. Batteries are inherently quite expensive (although the vehicles have many fewer moving parts and consequently lower manufacturing and maintenance costs than conventional vehicles);
  5. To distribute electrical power to the many charging stations which widespread adoption of battery vehicles would require would need substantial and expensive new grid infrastructure.
But, we urgently need to decarbonise transport (as well as the rest of our economy), so we need to adopt them... but what if there was another technology which would equally decarbonise transport and had none of these problems?

Well, there is.

But before we get to it, let's have a wee digression on Scotland's energy economy, and a glaring inefficiency in it.

Blow wind, and crack your cheeks

Scotland has wind. Scotland has a lot of wind. After only Patagonia, Scotland has the second highest average windspeed in the world. Capturing energy from that glorious surplus of wind should be a no-brainer.

Scotland's electricity grid, which forms part of the UK national grid, was designed essentially as a collection of interconnected hub and spoke networks. Generation was expected to be at the hubs, consumption at the periphery. The revolution in wind power turns that on its head, putting generation at the periphery, and the grid cannot cope. Also, wind blows inconsistently and inconveniently, generating power when it's not needed and not generating power when it is. So in practice, the average Scottish wind turbine spends a lot of its time 'curtailed', which is to say, switched off; chiefly because the radial grid connections which would take its power to consumers are overloaded.

So, in times of strong winds, turbines are often not generating, the energy that they could have generated is being wasted, and the return on the investment which built them is not being returned. But, what if there was a way to embody that energy into something physical which could be conveniently stored and transported?

Well, there is.

The maker of water

Scotland has water. Scotland has a lot of water. After only Norway, Scotland has the second highest average rainfall in Europe.

Take a bucket of water (other containers are available), stick an anode and a cathode into it (these are fancy names for copper rods, although you can use other things), put an electrical potential difference across the anode and cathode, and hydrogen will bubble off at the anode, oxygen at the cathode. Obviously it's desirable to put separate cans over the anode and cathode to collect the gasses separately, since left to themselves they tend to go with a bang, but that's simple, too. If you have surplus electricity and surplus water, you can electrolyse hydrogen virtually for free (you could also make use of the oxygen as a by-product, but I'm assuming for now you simply vent it off to the atmosphere).

Hydrogen can be stored, fairly easily, in fairly inexpensive tanks. Those tanks can be transported. It is flammable, of course, just as petrol is flammable; but industries which have experience of transporting and storing petrol should be able fairly easily to adapt to transporting and storing hydrogen.

This is all simple plant; consequently, it's relatively cheap to make and Scottish engineering industry can easily make it.

Hydrogen passed through a tetraflouroethylene membrane doped with platinum recombines with oxygen from the atmosphere to make pure water, and in the process generates an electric current; the device in which this happens is called a fuel cell. This is, literally, rocket science, but it's not beyond the wit of Scottish manufacturing.

We can dae this.

So, why don't we?

The kicker

There's no market for hydrogen as a fuel, because there are no vehicles on the roads which use it. There's no vehicles on the roads to use it, because you can't conveniently get hydrogen as a fuel. And meantime, most of our wind turbines spend an awful lot of their time doing nothing.

What policy intervention could kickstart this?

A potential answer seems to me very simple. The government could mandate that planning permission would only be given to new windfarms above a given size, provided that the installation included a hydrogen electrolysis plant capable of capturing the entire output of the farm when it would otherwise be curtailed.

Suddenly, windfarm owners would have a lot of hydrogen which they'd want to market; and because there was a lot of it (and it didn't cost much to make - simple plant and otherwise-waste energy) it would be extremely cheap fuel.

The availability of extremely cheap, zero carbon fuel would encourage people and businesses to invest in vehicles which could make use of that fuel (and some government intervention would help here). Such vehicles exist; Honda, Hyundai and Toyota will happily sell you one here in Scotland right now. River simple, from Wales, will lease you one (although at present this is still a prototype scheme).

As adoption of fuel cell vehicles ramped up, the market for hydrogen would expand, motivating owners of existing windfarms to install electrolysis plant.

So what's the downside?

To go back to the beginning:
  1. Batteries require rare minerals. Fuel cells require platinum, which is rare; but not more platinum than is currently used in existing motor vehicle exhausts, and the platinum is easily recyclable. So adoption of fuel cells does not create an additional demand for rare minerals.
  2. Fuel cells are relatively light. Hydrogen storage tanks may be relatively heavy, but not to the extent that it makes the whole vehicle heavier; a fuel cell car should be lighter than an otherwise equivalent battery car.
  3. Hydrogen is a gas, and refuelling should take no longer than LPG refuelling and very little longer than liquid fuel refuelling.
  4. Fuel cells should be very substantially cheaper than batteries.
  5. Hydrogen does not need complex new infrastructure to distribute; on the contrary it can be distributed in tankers just as petrol or LPG are at present.
Obviously, we need to move away from widespread use of private cars. Obviously, we need to move more journeys onto public transport, and to replace much existing physical commuting with tele-commuting. Replacing all existing cars with fuel cell cars would substantially reduce our carbon emissions, but it needs to be part of a much wider revolution.

But in so far as we do still need vehicles, I honestly cannot see a downside to hydrogen.

Nevertheless, this is an area where Scotland is uniquely placed to make a lead.

We can dae this.

Friday, 1 March 2019

We'll not go

Ships leaving the Broomielaw
We’ll not go; we’ll not send back nae letters fae onywhaur -
The ships of migration can ruist on the Clyde.
We’ll not go, we will ficht here, we’ll staun or be buried here,
Lik the floors o the forest on the Broomielaw’s side

Enclosure nae mair,
Eviction nae mair,
Clearance nae mair,
Lairdship nae mair

Dunbar nae mair,
Flodden nae mair,
Pinkie nae mair,
Culloden nae mair.

We’ll not go; we’ll not send back nae letters fae onywhaur -
The time for acceptance has left on the tide
Tak a luik doon the lang road
Fae Caithness tae Gallowa’

Last nicht I lay restless, whiles I wis speirin oan
Whit th Proclaimers hae sang o oor grief an oor pain
For the savour o strawberries that hae grown in thon saut sea
O the tears we hae gret, we hae let faa lik rain.

We’ll not go; we’ll not send back nae letters fae onywhaur -
These times are passed noo, but noo we sall rise
We’ll not go; we sall scrieve here a Claim o Richt for ilkane -
There’s a nacion tae big here, an here we sall bide.

Mundell nae mair,
Carmichael nae mair,
Murray nay mair,
May nae mair.

Province nae mair,
Region nae mair,
Devolution nae mair,
Union nae mair.

Dunbar nae mair,
Flodden nae mair,
Pinkie nae mair,
Culloden nae mair.

Enclosure nae mair,
Eviction nae mair,
Clearance nae mair,
Lairdship nae mair

We’ll not go, we sall bide here, at hame here wi freedom
Whaur the roses an geans noo aa gailie blume
In this yird we will welcome the bairns o auld Adam
Tae aa dance a reel tae a bonnie new tune.

Wednesday, 23 January 2019

Mad software

I was listening to Eric Normand's podcast this morning, as I was making breakfast and tidying my room; he was talking about semantics and data. It started a train of thought which I shall try to unroll.

I have blogged a lot in the past about madness and about software, but I don't think I've ever blogged about madness and software in the same essay. But the reasons I'm mad and the reasons I'm (sometimes) very good at software are related; both have their roots in autism and dyslexia, or, to put it differently, how my brain is wired.

I first wrote about post scarcity software thirteen years ago. It was a thought about how software environments should be designed if were weren't held back by the cruft of the past, by tradition and by a lack, frankly, of anything much in the way of new creative thought. And seeing that the core of the system I described is a Lisp, which is to say it builds on a software architecture which is almost as old as I am, perhaps it is infected by my own take on tradition and my own lack of creativity, but let's, for the purposes of this essay, assume not.

I started actually writing the post scarcity software environment on the second of January 2017, which is to say two years ago. It's been an extremely low priority task, because I don't have enough faith in either my vision or my skill to think that it will ever be of use to anyone. Nevertheless, it does now actually work, in as much as you can write software in it. It's not at all easy yet, and I wouldn't recommend anyone try, but you can check out the master branch from Github, compile it, and it works.

As my mental health has deteriorated, I have been working on it more over the past couple of months, partly because I have lost faith in my ability to deliver the more practical projects I've been working on, and partly because doing something which is genuinely intellectually hard helps subdue the chaos in my mind.

Having said that, it is hard and I am not sharp, and so progress is slow. I started work on big number arithmetic a three weeks ago, and where I'm up to at this point is:
  • addition seems to work up to at least the second bignum boundary;
  • multiplication doesn't work beyond the first bignum boundary;
  • subraction doesn't work, and turns out not to be as easy as just inverting addition;
  • division sort of trivially works, but only in the sense that we can create a rational number out of arbitrary bignums;
  • reading works beyond the first bignum boundary, but not up to the second (because multiplication doesn't work);
  • printing doesn't work beyond the first bignum boundary.
I knew bignums were going to be a challenge, and I could have studied other people's bignum code and have consciously chosen not to do so; but this is not fast progress.

(I should point out that in those three weeks I've also done four days of customer work, which is .Net and boring but it's done, spent two days seeing my sister, spent several days so depressed I didn't actually do anything at all, and done a bit or practical work around the croft. But still!)

In a sense, it wasn't expected to be. Writing the underpinnings of a software environment which is conceptually without limits has challenge after challenge after challenge.

But there are ideas in post scarcity which may have wider utility than this mad idea in itself. Layering homogeneities and regularities onto Clojure maps might - perhaps would - make a useful library, might would make a very useful component for exactly the sort of data wrangling Eric Normand was talking about. Yes, you can use a map - raw data soup - to represent a company. But if this map is a member of a homogeneity, 'Companies', then we know every member of it has employees, and that every employee has a salary and an email address. Regularities and homogeneities form the building blocks of APIs; to use the example Eric discussed in his podcast, the salary is the property of the employee, but the payroll is a property of the company. So in the notation I'm using for post scarcity, you'd get the payroll figure for a company by using a method on the 'Companies' homogeneity. How it computes that value is part of the general doctrine of 'Don't Know, Don't Care': the principal that people writing software at any layer in the system do not need to know, and should not need to care, about how things are implemented in the layers below them.

So, the user needing to find the payroll value for a company would enter something like this:

    (with ((companies . ::shared:pool:companies)
           (acme . companies:acme-widgets-plc))
        (companies:methods:payroll acme))

In practice, in post scarcity notation, the payroll method probably looks something like this:

    (λ (company)
        (reduce + 
            (map ::shared:pool:employees:methods:salary 
                (:employees company))))

There are issues that I haven't resolved yet about the mutability of regularities and homogeneities; obviously, in order to provide multi-user visibility of current values of shared data, some regularities must be mutable. But mutability has potentially very serious perfomance issues for the hypercube architecture, so I think that in general they should not be.

However, that's detail, and not what I'm trying to talk about here.

What I'm trying to talk about here is the fact that if I were confident that these ideas were any good, and that I had the ability to persuade others that they were any good, it would make far more sense to implement them in Clojure and promote them as a library.

But the problem with depression is that you cannot evaluate whether your ideas are any good. The black dog tells me that I'm shit, and that my ideas are shit, and that I don't really know enough to be worth listening to, and that I'm an old tramp who lives in a hut in the woods, and probably smells, and that in any case interaction with other people quickly makes me shaky and confused, and that I can never get my act together, and that I never finish anything.

And all that is objectively true, and I know that it is true. But I also know that I can (or at least have in the past been able to) build really good software, and that I can (or have been able, in the past, to) present ideas really well.

These two collections of statements about me are both true at the same time. But the difference is that I believe the first and I don't believe the second.

And behind all this is the fact that bignum arithmetic is a solved problem. I could dig out the SBCL source code and crib from that. I could read Muhammad ibn Musa al-Khwarizmi, who wrote down the algorithms (the word is a europeanisation of his name) for the general problems of long addition, multiplication and division in around 820AD. I could reread section 4.3 in Knuth.

I am bashing my head against bignum arithmetic and trying to solve it myself, not because it's the most efficient way to produce good code quickly, but because what I'm really trying to do is just distract myself and waste time while I can get on with dying.

And the reason beyond that that I'm working on a software system I know I'll never finish, which is designed to run on computers which don't even exist yet - and although I'm very confident that enormously parallel hardware will be used in future, I'm not at all sure it will look anything like what I'm envisaging - the reason I'm building this mad software is that, because it will never be finished, no-one will ever use it except me, and no-one will say how crap it is and how easily it could have been done better.

Because the other thing that I'm doing in writing this stuff, apart from distracting from the swirling chaos and rage in my head, apart from waiting to die, the other thing I'm doing is trying to give myself a feeling of mastery, of competence, of ability to face problems and solve them. And, to an extent, it works. But I have so little confidence that I actually have that mastery, that competence, that I don't want to expose it to criticism. I don't want my few fragile rags of self worth stripped away.

And so I work, and work, and work at something which is so arcane, so obscure, so damned pointless that no-one will ever use it.

Not because I'm even enjoying it, but just to burn the time.

This is mad.

I am mad.

I hate, hate, hate being mad.

Postscript: just writing this essay has made me tearful, headachey, sick, shaky. It's very hard to face up to the irrationalities and self-deceptions in one's own behaviour.

Wednesday, 2 January 2019

Flodden Field, revisited

Nicola Sturgeon
Scotland has history of meddling in English affairs in the interests of continental friends. It doesn't end well.

In 1513, James IV, quite possibly the best governor Scotland has ever had, tried by diplomacy to persuade England's Henry VIII to make peace with France; and failed. So he sent his navy to France in support of the French, and invaded the north of Northumberland, taking three castles but not much land.

On 4th September, at a council of war with the much larger English army closing and a field of battle agreed, the Earl of Angus - yet another Archibald Douglas - argued that Scotland had done enough for France, it wasn't our fight, and the army should come home. James, annoyed, sent Archie home, with quite a portion of the army. But he then, sensibly, moved the remainder of his army to a very strong position on Flodden Edge, from where the powerful and modern Scottish artillery would have devastating fire over the battlefield.

On the 7th of September the English general, Thomas Howard, Earl of Surrey, wrote to James saying this wisnae fair - in the words of his letter, the Scots position was a fortress. His message was 'come down and fight on the flat, like decent chaps', while carefully preventing the Scots from getting sight of the size of his own army.

So what did James do? He moved his whole army, including those precious guns, to a much weaker position on Branxton Hill; and on Friday the 9th, the English closed. As they did so they brought their own artillery and much of their army in over the Twizell Bridge, within range of the Scottish guns. The Scots did not open fire; chroniclers say that this was because James ordered them not to.

Twizell Bridge, photo By Kirsty Smith, CC BY-SA 2.0
And if you look at the site and it just screams at you. The bridge is still there. It's a single span bridge, extremely vulnerable to heavy artillery, which the Scots army had in position. If the bridge had been destroyed with the English army half across, it would have made a huge difference to the outcome. The Scots would probably have won.

They did not open fire.

Instead, James marched his army down from their position on the hill to meet the English in a marsh; and in that marsh the Scots were butchered.

There were so few Scots survivors from that battle that we do not have good accounts from the Scottish side. James himself, of course, was killed. But we know from the instructions sent to the Scots ambassador in Denmark that the surviving government in Edinburgh saw James' inexperience and folly, rather than any great generalship on the part of the English, as the cause of the disaster, and from what records we have, it's hard to disagree.

But that's not what I came to talk about. I came to talk about the People's Vote.

In March 2017, Nicola Sturgeon, certainly the best governor Scotland has had in modern times, tried by diplomacy to persuade England's Theresa May not to drag Scotland out of the EU against Scotland's will. Like James Stewart before her, she was rebuffed. She had a strong position; Scotland had voted overwhelmingly to remain, she held 56 of the 59 Scottish Westminster seats, she had a clear mandate for an independence referendum.

But Theresa May, like Thomas Howard before her, said it wisnae fair. "Now," she said, "is not the time." And instead she held a general election. The SNP's powerful and modern electoral machine was in a strong position; by standing on an 'Independence Now' manifesto it would have won a majority of Scottish seats and achieved independence while Scotland was still entirely within the EU Aquis Communautaire, making our accession to full membership a formailty.

She did not write that manifesto.

Instead, Nicola marched down off the heights and engaged the Conservatives on their own ground, seeking to keep the entire United Kingdom within the Single Market. As Archibald Douglas said, Scotland had already done our part, by voting remain. England's position in the Single Market or out of it is not our fight.

All Under One Banner, Edinburgh, 6th October.
Of course, she still won a majority of Scottish Westminster seats, but from the position of strength she started from she was bound to; the subsequent eighteen months have shown us how little that majority is worth, without decisive leadership from the top.

Nevertheless, there was still time for an independence referendum before Brexit. Of coourse we couldn't expect a Section 30 letter from Westminster, but that is a technicallity which we could have dealt with in the campaign. The Yes movement was all pepped up and ready to go, the SNP membership was at an all time high.

But no. No, you may not open fire on that exposed bridge, while the English are engaged in complex manouvres. No, we shall meet the English on their own chosen ground, by campaigning on a people's vote.

What is this nonsense? It isn't Scotland's fight! Scotland has voted. It has voted to remain in the EU, and it has voted three solid times in three years to give Nicola Sturgeon the mandate to call a referendum on independence.

Say there's a people's vote. Say Remain wins. How does that help us win independence? It does the opposite. It gives the No campaign the chance to argue once again that the quickest way to lose European citizenship is to vote Yes. So winning this 'people's vote' does not help us.

But that if, as is virtually certain to happen, Scotland again votes Remain, and England again votes Leave? Why, then, we get a reinvigorated right wing government in London ready to repeat the mantra "now is not the time" ad nauseam, and we are at their mercy as they do trade deals with America which will devastate our agriculture, our food and drink industry, our environmental standards and our health service.

Those who will not learn the lessons of history are doomed to repeat them. Just as James Stewart marched down off the hill to the total destruction of his army, his hopes, his nation, over a fight that was never Scotland's to fight, so Nicola Sturgeon is doing once again. The first time is tragedy, agreed, but the second time is too dark to truly be considered farce.

Scotland needs to be better than this. Scotland needs to grow up. Scotland needs to acknowledge that England is different from us, has different needs and priorities to us. Scotland has to learn that we cannot - and should not try to - impose our ways on our bigger neighbour. We have to fight our own battles for our own national interests. And that means, being independent in Europe.

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