Saturday, 28 March 2020

QGIS on Ubuntu 18.04

QGIS didn't work for me out of the box. Here's notes on what I had to do to get it going. Brief summary, out of the box the Open Street Map URL is missing. See 'Breakthrough' below for how to fix this. However, also, the version of qgis available from the Ubuntu package repository is at present quite out of date; alternative repositories are available but as yet I haven't tried them.

Firstly, if it isn't working and you've been tinkering to try to get it working, start by purging it completely:

sudo dpkg --purge qgis qgis-provider-grass qgis-plugin-grass
rm -rf ~/.qgis2/

Then reinstall it with all the extra bits that it actually needs - when I originally installed it, it did not automatically install saga, and I'm not sure whether it automatically installed the grass plugin.

sudo apt install python-qgis qgis-plugin-grass saga

This at the time of writing installs QGIS version 2.18.17.




Then start QGIS

qgis

QGIS, immediately on starting.
At this point the application window renders. I get one python warning in the 'Log Messages Panel':
2020-03-28T08:08:03 1 warning:/usr/lib/python2.7/dist-packages/qgis/utils.py:258: DeprecationWarning: This method will be removed in future versions. Use 'parser.read_file()' instead.
cp.readfp(f)

Because it's only a deprecation warning, I'm inclined to think this is not a significant issue.

I also get the following warnings in the console. Once again, they're only warnings:

Warning: loading of qgis translation failed [/usr/share/qgis/i18n//qgis_en_GB]
Warning: loading of qt translation failed [/usr/share/qt4/translations/qt_en_GB]
Warning: Object::connect: No such signal QgsMergedBookmarksTableModel::&QgsMergedBookmarksTableModel::selectItem( const QModelIndex &index )
Warning: Object::connect: (receiver name: 'QgsBookmarksBase')
Warning: QCss::Parser - Failed to load file "/style.qss"
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: No such file or directory
Warning: QFileSystemWatcher: failed to add paths: /home/simon/.qgis2//project_templates
Warning: QLayout: Attempting to add QLayout "" to QgsPanelWidgetStack "mWidgetStack", which already has a layout

I select, from the menus, Project -> New; the 'Recent Projects' heading disappears from the main pane, and it appears to be a map pane - but there's no map.

I type 'world' into the 'Coordinate' input and hit return, as directed by this tutorial, and still, no map. Comparing my screen to the screen shown in the tutorial, they are identical except that 
  1. No map is displayed, and
  2. Some icons in the second toolbar from the top which are coloured in the tutorial are greyed on my screen.
I take this to mean that not only can I not see the map, QGIS doesn't think there is a map from which I can make selections.

If I try to drag the 'osmraster' item from the 'Browser Panel' into the map area, I get a series of errors in the 'Log Messages Panel' of the general form:
2020-03-28T08:37:53 1 Tile request max retry error. Failed 3 requests for tile 11 of tileRequest 2 (url: https:/2/2/2.png)

Clearly, the URL is malformed. Clearly, there is something wrong with the template string from which the URL is being formed.

At this point I tried using the 'Getting Started' instructions from the manual. Once I had downloaded the sample data, I was able, following instructions, to get raster data to show on the map pane. Vector data, however, for example from the 'lakes.gml' file in the sample data, still did not render at all.

This made me suspicious of the error seen earlier in the console,

Warning: QCss::Parser - Failed to load file "/style.qss"

If the default style is white on white, then perhaps QGIS has been rendering a map, but rendering it invisibly. I find that there are indeed two files with this name in my file system:

simon@mason:~/qgis$ locate style.qss
/home/simon/.qgis2/themes/Night Mapping/style.qss
/home/simon/simon/.qgis2/themes/Night Mapping/style.qss
/usr/share/qgis/resources/themes/Night Mapping/style.qss

However, I can't find any way of selecting a stylesheet in any of the menus (there's a 'Style Manager' dialogue, available from the 'Project Properties' dialogue and from the 'Settings' menu, but it does not mention stylesheets and does not appear to allow you to set one. There's no reference to 'style.qss' in any file in my .qgis2 directory; nor is there any reference to it, or to a stylesheet at all, in a saved project file.

I experimentally copied one of these style.qss files into the root directory of my filesystem, and restarted QGIS. This time, the file was found, but its only effect was to render many dialogues unreadable; it did not change the blankness of the default map panel. Further browsing showed that a QSS stylesheet is a stylesheet used by the Qt tookit (which QGIS is built on), not used by QGIS itself, and, as the default styles render QGIS perfectly acceptably, this file is not needed and is not the problem.

At this point I noticed what looked like specks of dirt on the screen. I zoomed in and found a group of vector shapes which could well be lakes - but they didn't AT ALL align with the sample raster data. I checked the coordinate systems used and found that they were different. I changed the coordinate system for the lakes data to that used for the raster data, and they overlaid precisely. Progress!

The breakthrough

So I went back to trying to find why the Open Street Map data was not loading. I right clicked on 'Tile Server (XYZ)' in the 'Browser Panel' and got a dialogue asking for a URL. I entered 'https://c.tile.openstreetmap.org/{z}/{x}/{y}.png', chosen from an existing leaflet project, and was shown another dialogue asking for a name for the layer. I entered 'TestOSM'.

A 'TestOSM' entry appeared in the 'Browser Panel', and when I dragged this to the map pane, suddenly I had a map.

Epilogue

 
My takeaway from this catalogue of problems is that the QGIS package offered by Ubuntu is 
  1. Misconfigured, and
  2. Obsolete
I did get it working, and I've documented what I needed to do above; but it's clearly some way behind the current 'stable release', which is 3.10.4.

So I've spent a whole morning trying to install a more up-to-date version of QGIS. There are many repositories for more recent versions of QGIS out there on the Web, and many 'howto' articles explaining how to set them up and use them. I've tried many this morning, and my conclusion is that they're all, without exception, broken in one way or another. Some people do seem to have succeeded in getting a working install, but even their notes don't work. 
Furthermore, after doing that, it took an awful lot of work to sort out the mess and get back to a working 2.18.7. In summary, I believe it can be done, but it's not for the faint hearted.

Thursday, 27 February 2020

Putting data on the map

A couple of weeks ago, someone came to me with a problem. She had data in a spreadsheet. She wanted to display it as a map, on a website. And she wanted to be able to do that dynamically - that is to say, she wanted the map on the website to update as the spreadsheet changed.

So there were clear routes to several of the parts of this problem:

1. If you need maps on a web page, you need Leaflet - it's a simply wonderful library;
2. If you want a spreadsheet that is live on the Internet, Google Sheets are a very good way to go;
3. Google Sheets allows export as Comma-Separated Values, and CSV is a very easy format to parse.

I needed to do this quickly, so I started in my comfort zone, using Dmitri Sotnikov's Luminus framework and mixing in the Day8 re-frame framework, in order to have a lot of built-in functionality client side. The joy of the Clojure development tools is that getting a working system is as easy as typing

    lein new luminus geocsv +re-frame

And from that point on you can do your development with your system live, and can see the effects of every change you make immediately.

So within a couple of days I had a polished wee system which looked good and pulled live data from a Google Sheets spreadsheet to populate a map, with different graphical pins for her different classes of records. It was highly reusable, since you can specify the document id of any public Google sheet in the query part of the URL, and that sheet will be rendered. The map automatically pans and zooms to focus on the data provided. Was I pleased? Well, sort of.

Why was I not pleased? The deliverable component is an executable jar file, and it's 58 megabytes; in the browser, client-side, a page consumes 10 megabytes of memory. That seems huge for such a simple piece of functionality. I'd satisfied the requirement, but I hadn't satisfied myself. Also, of course, it needed you to be able to run a component on your web server, and many organisations with simple web hosting can't do that.

Doing it again, better

So I started again. This time I did it entirely client-side, just ClojureScript, with no heavyweight libraries. Having solved the problem once, it was pretty easy to do it again, and within a day I had a system working. Furthermore, I added flexibility: you can supply a URL, as before; or as the text of the document element that the map overlays; or passed as a string to the function. You can see it here.

Was I pleased?

No.

Three things about this solution don't satisfy me.

Firstly, the deliverable (jar archive, for direct comparison with the original) is still 2.9 megabytes. That's only 5% of the size of the original, and includes the whole of Leaflet, the whole of [Papaparse](https://www.papaparse.com/) - a client side CSV parser, and 398 different map pin images, but it still seems big. Page load - with the three maps on the demo page - costs around 5 megabytes in the browser.

Secondly, because it's client-side only, it cannot know what pin images are available on the server; so if there is a category value in the data for which no pin image is available on the server, you will get a 'broken image' appearing on the map, which is ugly.

Thirdly and most significantly, again because it's client side only, modern cross-site scripting protections mean that it cannot pull data from a spreadsheet hosted on another site - so it doesn't strictly meet the original requirement.

Iterating again

I decided to look at whether I could make it smaller by abandoning the comfort of the Clojure environment and writing pure JavaScript. This led to a third iteration, geocsv-js, which you can see in action here. The amount of 'my code' in this version is far lighter - the output of the ClojureScript compiler for geocsv-lite comes to 6.6 megabytes uncompressed, whereas the pure JavaScript version is one file of just 8.8 kilobytes in 296 source lines of code (for comparison, the ClojureScript solution, geocsv-lite, comes to 372 source lines of code). One reason for the slightly larger size of the ClojureScript solution is that it has a better algorithm for panning and zooming the map to display the data actually entered, which I didn't port to JavaScript.

But what is bizarre and I do not yet understand is that the deliverable is not smaller but bigger than the geocsv-lite deliverable, by almost twice - 4.7 megabytes - despite using identically the same libraries. Still more surprising, the memory consumption in the browser is also higher, at around 6 megabytes.

What are the lessons learned? Well, the overhead of using ClojureScript is not nearly as much as I thought it was. There is something clearly wrong about the discrepancy between the size of the packaged deliverables - the pure JavaScript variant must be including third party data which the ClojureScript variant doesn't, although I haven't yet tracked down what this is - but the in-browser memory footprint is actually smaller, and the page load time is, as best as I can measure, identical at about five seconds.

Was I satisfied now? Well, sort of.

Merits and demerits

All three variants have merits. The first pulls the data directly from Google Sheets, which was the original requirement, and served a default pin image for any record category for which it didn't have a matching image. That made it a lot slicker to use, and more forgiving of user error. The two client-side-only variants cannot do those things, for reasons which I have not found ways to solve. But they don't need any server-side functionality beyond the dumb serving of files, so they're much easier to deploy; they are also less greedy of client side resources.

One more time with feeling

One of the reasons why I kept on hammering at this problem was that I felt it would make a really useful extension for my wiki engine, Smeagol. I've integrated the JavaScript version, geocsv-js, and in doing that I've solved a number of problems. Firstly, the look and feel and content of Smeagol pages is flexible and easily configurable by the user, so it doesn't take a geek to set up a page with the content you want and a map of the data you want to show. Secondly, the Smeagol engine, because it sits server side, can pull data from remote sites, and because it doesn't interpret that data, there's no significant risk in doing that. Thirdly, again because it sits server side, it can deal with the issue of unknown images - and, because it's a wiki engine targeting less technical users, I've deliberately made it very graceful about how it does this.

So now, instead of just a map on a web page, you get a whole, richly editable website, with existing extensions to integrate sophisticated data visualisation and photograph galleries as well as maps. And the cost of this? Surprisingly little more. A Smeagol page with one map uses exactly the same memory on the client as a geocsv-js page with one map, because Smeagol now only loads JavaScript for extensions actually being used in the page, and almost all of its own functionality runs server side. But even server side, the cost is not very much greater than for the full fat geocsv implementation - the deliverable jar file, which offers far more functionality than geocsv, is only 88 megabytes. Considering how much more usability and flexibility this offers, this is the version of geocsv I'd now offer, if someone came to me with the same problem.

Wednesday, 25 December 2019

World enough, and Time

Orrery of the Long Now clock
Last night I listened to an episode of the Politics Galore podcast which utterly depressed me: not because the content was depressing (although it was), but because the analysis was so shallow. It analysed Scotland's current dilemma solely in terms of the Westminster political game played by Westminster's first past the post rules. It suggested that the next independence referendum could be, and tactically should be, delayed until the late 2020s, as though nothing in the world would change in the meantime.

Human beings are programmed to believe that nothing much in the world, on a macro scale, will change very much from one year to the next. We call this inductive reasoning, and over the past million years it's served us pretty well. On the whole, tomorrow has been more or less like yesterday; on the whole, next year has been more or less like last. And for most of that time, what lay over the horizon was literally unknowable: oncoming crises, no matter how inevitable, could not be predicted or prepared for.

This is no longer the case. Multiple interlocking crises — the changing climate, the mass extinction of species, the concentration of wealth and power — are changing the world rapidly. We can now see over the horizon; we do now have the tools.

Consequently, you can't now discuss Scotland's politics in isolation from our geopolitical context. I'd identify several key factors:
  1. There is a strong risk that the UK will diverge sharply from EU over the few months after December 2020;
  2. There is a strong risk that climate change is running substantially faster than IPCC have allowed for, and that action to mitigate is lagging far behind;
  3. The new digital propaganda tools by which well-funded actors can manipulate elections are rapidly maturing; and consequently
  4. There is a strong risk that the English-speaking world is sliding towards something resembling real fascism or at least oligarchy.
Both Scotland and the UK are bit-players in all this; we don't move the tides of history, we have to ride them. The attack by Russia on electoral processes in the UK is not primarily aimed at the UK so much as at creating chaos and turmoil across the West. In that sense the UK's only geopolitical significance is as a keystone in the defences of the European area of stable peace against chaos, and it's a keystone which no longer has any structural integrity.

For clarity, in saying 'the attack by Russia' I'm not saying that the attack is made solely by Russia, nor that the attack is in the long term interests of the Russian people or state. Rather, it's an attack by an emerging oligarchy, which currently controls Russia. Nor is this oligarchy monolithic; rather, it's made up of a class of ultra-rich individuals who very largely do not see themselves as a collectivity and who very largely do not coordinate their actions, but nevertheless each act 'rationally' to protect and enhance their accummulated wealth and influence.

They include, but are not limited to, those who profited from the ill-managed privatisations in the collapse of the Soviet Union; absolute rulers of oil states in the Arabian peninsula and elsewhere; the hereditary aristocracy of Great Britain, including the House of Windsor; 'tech entrepreneurs' including Gates, Ellison, Zuckerberg, Brin, Page; the financial services elite; and the controllers of major organised crime cartels. These groups, of course, socialise, intermarry, interpenetrate, overlap; that is the nature of a collectivity.

Surrounding the oligarchs themselves — who may or may not be consciously malign — there's a penumbra or Oort cloud of actors who clearly are malign: people like Murdoch, Bannon, Yiannopoulos, Rees Mogg. They are, in a sense, the intellectuals or ideologues of the oligarchy, forging an ideology which allows the oligarchs themselves to 'rationally protect and enhance their wealth and influence', by undermining and destroying the democratic institutions which would otherwise allow mass action to erode those accummulations. But they're not oligarchs themselves, although they may aspire to be; they're hangers on.

One very worrying thought made powerfully by Umair Haque, when he says "climate change accords perfectly with the foundational fascist belief that only the strong should survive, and the weak — the dirty, the impure, the foul — should perish", is that the oligarchs (or their ideologues), rather than putting their shoulders to the wheel to resist climate change, may consciously be seeking to accelerate it.

To say 'but we can't resist these forces' is probably true, but that way leads simply to despair. If human life on earth is to continue, people (including Scotland as a bit-player) must resist these forces, now. It isn't sufficient to go on playing the Westminster game, and, in particular, there isn't time to think about the long game. As John Maynard Keynes said, but with particular force now, in the long run we're all dead.

Pulling focus back to Scotland, what worries me is that the SNP's analysis is as shallow as Politics Galore's. Like the podcast, they believe that the future will be much like the past; like the podcast, they ignore the turbulent geopolitical forces which mean it won't be.

Salmond was a risk-taker; Sturgeon is not. She will play it safe. As the tides of history tear our society and our economy apart, she will wait irresolute for a 'perfect moment' which will never come. The merit of Angus MacNeil's 'Plan B' was not primarily that it actually was a strategy (Sturgeon's wistful hope that she can somehow extract a Section 30 order from a triumphant English Tory government is not), but that it gave us a fresh bite at the cherry with each successive Westminster election.

But there (probably) isn't time. Measurements in Greenland and the Antarctic show that the Climate Emergency is moving much faster than predicted, and meantime the oligarchy and its ideologues are honing its anti-democratic toolkit.

Scotland alone cannot swing the UK back to a path of sanity. We're structurally weak, and, as Johnson gerrymanders the electoral system to lock in Tory majorities, we'll remain structurally weak. Our escape route is to bind ourselves to the European bloc (EFTA or EU), and then to work to strengthen — and radicalise — that bloc; but we cannot do that without independence.

We don't have, for reasons I've given above, much time. You would not have been wise, in 1935, to make any political plan for three electoral cycles hence: the tides of history would have washed it away. 2020 will be 1935 on steroids.

I still believe — and believe strongly — that an independent Scotland could be a positive actor on the world stage, both in seeking to build peace, justice and stability, and in seeking to resist climate change and slow the rate of extinctions. But time is short; the crises are urgent and rapidly becoming more so. If we cannot achieve independence within a very short time frame, it will be time to abandon indulgences like constitutional tinkering and seek to build alliances to defend our planet. Indeed, it may well be that time already.

An independent Scotland on a dead planet would be a very hollow victory.

Friday, 25 October 2019

Party Party

Let's start this essay with a confession that I may have been badly wrong. I have been saying for some time that I did not believe that Nicola Sturgeon would actually call a second independence referendum; rather, that she'd use Westminster's expected rejection of an Article 30 order to indefinitely postpone one. Well, possibly, I was wrong. I hope I was wrong. Both The National and the SNP now say that Sturgeon will announce a concrete date for IndyRef 2, in 2020, at a rally in Glasgow on Saturday 2nd November.

So, good. Sometimes, it's nice to be wrong.

However, then we move onto the campaign. I expect the Scottish Government to produce a white paper, as they did in 2014, setting out a prospectus for independence. And I expect that prospectus to be, as it was in 2014, broadly a steady as she goes, don't rock the boat prospectus: a prospectus for a broadly technocratic, social democratic Scotland, more closely aligned to the interests of Andrew Wilson's clients than to those of the broad majority of Scots.

I do not believe the white paper was the critical vote winner in 2014. I think the broad vibrancy of the Yes campaign, the thousand flowers that bloomed, and in particular (for me, anyway; but I think for many others) the Radical Independence Campaign's slogan 'Britain is for the rich; Scotland can be ours' were more influential. Be that as it may...

Supposing there is a referendum, supposing Yes wins, supposing the UK government honours the result. There's a Holyrood election on 6 May 2021, which will undoubtedly happen before negotiations - with the UK, with the EU, with EFTA - are completed, and whose results will strongly influence the outcome of those elections. 

If, as the SNP assumes - the SNP is elected to govern, especially if it is elected to govern with a majority - we will see an independent Scotland built in the image of that white paper: which is to say, not very different from the United Kingdom we are leaving.

The Queen will, almost certainly, be the head of state. Lords will still lord it over us. The land will still belong to the rich. Our system of democratic governance will remain highly centralised, with enormous, profesionalised 'local government' units administering territories each larger than one sixth of all independent countries in the world. The capitalist system will remain entrenched, owning most of the nation's industry and infrastructure. We'll even keep the pound - for the time being, at any rate - and that will prevent us rejoining the EU.

I don't believe that's the Scotland Scotland wants to be. I don't believe it's even the Scotland most members of the SNP want to see. Independence which changes nothing is worth nothing.

So what do we do about it?

Lesley Riddoch, at a fringe event of the SNP conference, suggested she'd start a new party to challenge the SNP from the decentralist left. She slightly rowed back from that in her column later that week, but the idea is a sound one. In order to challenge the SNP's corporatist, technocratic vision at the 2021 election, we will need a new party. 

If it's a brand new party, of course, it's ridiculous to suppose that it can sweep to power in one bound. But that is not the point, as Lesley has said: the point is that the SNP is vulnerable from the left, and it knows it. The party has triangulated right so far and so fast in the past six years that it's left most of its members, let alone its supporters, behind.

A clear challenge from the left will push the SNP leftward. A strong challenge from localism should cause the SNP to at least reconsider its centralist bias.

The Holyrood electoral system - which I'm assuming we'll still use in 2021, since there is no current strong pressure to change it, and there isn't much time - gives space for small with broad support across Scotland. That 2021 government will be critical to the shape of Scotland for a generation at least, since it will supervise the process of agreeing a constitution. It is critically important to have influence in it.

A government of all the talents in which Lesley joined Andy Wightman, John Finnie, Maggie Chapman from the Greens, Tommy Sheppard, Alison Thewlis, Mhari Black, Mairi Gougeon, Jeanne Freeman and Mike Russell from the SNP would build a far more interesting Scotland than our current SNP cabinet.

And if we're to have such a party in place - if a new party is, indeed, needed, because it may be that what we should do is join the Greens - we can't wait, as Lesley suggested, until after independence. We need to start putting a platform together now. Yes, we can lift a great deal from work already done by Lesley herself, by Common Weal, Radical Independence and others, but we would need a clear, coherent platform, and that would need to be constructed.

I think it's time to party.

Wednesday, 14 August 2019

Eagles, and governance

Young eagle flying with trap clamped to its leg
Here is the text of my letter to the First Minister regarding the wildlife persecution on grouse moors crisis. I strongly suggest you write to her too, but please write your own letter - copy/pasted letters tend to get ignored.
Dear First Minister

The SNP's craven inability to face down landed interests has always disappointed and puzzled me, but the developing crisis over the behaviour of grouse moor managers and the failure of your government to intervene in it is reaching the stage where it risks undermining the whole independence project.

You will (I hope) be aware of the illegal slaughter of Scotland's iconic wildlife on the grouse moors, from eagles to wildcats. You will (I hope) be aware that there is today a young eagle flying in Aberdeenshire with an illegal trap clamped to its leg.

Now, we have a petition, addressed to the Westminster parliament, asking it to intervene in a devolved matter. which in less than one day has gathered more than 16,000 signatures, and which is highly likely to gather several hundred thousand. You will see from the map that a very large proportion of these signatures have come from remote rural Scotland - where you cannot afford to lose votes.

In these febrile times, do you really want Westminster holding a debate on the failure of your goverment? Do you want grandstanding Tory ministers - the fragrant Alister Jack - having a popular excuse to take powers back from Holyrood because of Holyrood's failure to legislate effectively?

We have left an open goal, and in the run up to the next trial of strength on independence we do not want the Unionists to be able to say, "well, we trusted them to care for their own woldlife but they wouldn't do it; why should they be trusted with independence?"

It's a good question, and one which will be hard to deal with on the doorsteps.

Please act now, by enacting a bill which places a duty of care on estate owners to prevent wildlife crime on their land, with penal sentences on the beneficial owner if they fail to do so.

Yours sincerely

Saturday, 8 June 2019

The quest for Zireael

Ciri draws her sword Zireael for the first time
Over the past six weeks I've completed my second full run through of the The Witcher 3: Wild Hunt, and I want to record my thoughts about it.

I set out with three main goals: to follow the 'Triss' path rather than the 'Yennefer' path; to rescue the Bloody Baron's wife, and generally explore that story more fully; and to win as many allies as possible for the battle at Kaer Morhen.

Regarding Triss versus Yennefer: these are the only two major love interests for Geralt in Witcher 3. In many ways they're similar: both sorceresses, both ambitious, both powerful politically, both manipulative, both prepared to use intimacy - and sex, although I'd like to draw a distinction here between the two - transactionally to achieve their objectives. And they're friends. In the previous Witcher games, Yennefer has not been present as a character, but in the novels, she is clearly Geralt's primary (but not exclusive) sexual partner, and it was mainly for that reason that I followed her path on my first run through. By the end of it I was pretty confident that this was a mistake, and, having now played through the Triss path, I more than ever satisfied that she is the better of the two choices.

Yennefer is more powerful and more glamorous, but has much more ambiguous morality. She willingly uses necromancy, and is unashamed at destroying treasured and ancient religious sites to draw power for her magical workings. I can think of no occasions either in the novels or in the books where Yennefer behaves in a way that is unambiguously generous. Even her care for Geralt's stepdaughter Ciri is at least plausibly an attempt to gain influence over Ciri's very substantial power.  By contrast, Triss refuses to use necromancy, and doesn't destroy other people's artifacts in the use of her power (that I can remember); she behaves with genuine generosity at least some of the time, including towards people there's no reasonable reason to expect will ever be able to repay it.

But both in the novels and in the games, there's a third choice of someone who seems better (and a better fit for Geralt's character, at least as I interpret it) than either, and that's Shani. Shani is not a sorceress, and not powerful. Instead she's a doctor of medicine, highly altruistic, extremely brave, tolerant of and generous to everyone. But in the Witcher 3 she appears only as a bit part - a potential casual shag - in the Hearts of Stone extension. That seems to me a waste of a good character, frankly, who could have made the main plot much more interesting and thus thrown light on the characters of the other two.

Whatever: when your choice is Yennefer or Triss, Triss is the warmer, the more supportive, the more caring, possibly the more sensual; although arguably Yennefer is the more glamourous, more challenging, the more exciting, the more acerbic, possibly the more sexual. My choice is Triss. I think it's the better choice.

The Bloody Baron is probably the most developed and the most narratively interesting side-quest in The Witcher 3. In my previous play through I had left his wife living with the witches in the bog, clearly mad, but caring for the children and having, it seemed to me, some quality of life. I took the view that while it wasn't a good situation, it was better than the other available alternatives. This run through, I decided to try to see whether I could reconcile the Baron with his wife, and I sort-of succeeded. The Baron and his wife (and to my great surprise, also his daughter) were reconciled after the crones were defeated; however, it didn't end well. Because I had released the spirit of the forest, Anna was cursed, and died. The Baron later killed himself. There is apparently at least one more, and significantly better, ending to this story, but I haven't found it yet.

As I said above, I set out to recruit as many allies as possible for the fight at Kaer Morhen. The Nilfgardian cavalry didn't actually appear, but had been despatched; otherwise, I had Keira Metz, Hjalmar an Craite, Ermion the druid, Letho the Kingslayer, both Triss and Yennefer, Zoltan Chivay (of course), and Vernon Roche and Ves. What I hadn't thought through was that there were bound to be very considerable tensions in that group, notably between the Kingslayer and the Temerian resistance - that was an interesting touch, and shows how carefully thought through the whole game is!

A pleasing moment was that, after the battle, Keira (who in my previous run through had been burned at the stake in Novigrad as a heretic), went off with the witcher Lambert on a quest, and we later hear that they'd married. While I hadn't previously felt particularly responsible for Keira's death, this definitely seems a better ending (for both characters).

However, related to that was one of my unexpected failures in this run: I didn't get into the narrative sequence in which Radovid is killed, and I didn't succeed in suppressing the religious intolerance in Novigrad; consequently, when Nilfgard was essentially defeated (which I had been intending), the Redanian army swept into Velen with their witch hunters and wreaked even worse desolation than I remember from before.

Whether there's any relatively 'good' geopolitical ending to the story I doubt: Nilfgard winning (as in my first run through) and Redania winning (as in this one) are both pretty appalling, but if there's a way - I don't know whether there is, and I don't want to be told because I shall make another attempt some day - of defeating both Redania and Nilgard, then I suspect that Velen, Temeria and probably Redania as well would become a seething mass of competing robber barons and warlords, with conditions for the peasantry as bad as ever.

It occurs to me that I have not explored what would happen if one encouraged Ciri to reconcile with her father, and thus possibly become empress; this might make for a better ending, geopolitically, for the world as a whole, perhaps; but it doesn't seem to me that it would be a better ending for Ciri.

I have to say here that from the point of the Battle of Kaer Morhen on, the whole story was radically different from what I remember from my previous playthrough - and I saw the beginnings of (but didn't complete) still further loops in the plot which it would be really interesting to explore some day. There is quite extraordinary richness in this storytelling.

I don't know whether there's any narrative link between the choice between Triss and Yennefer (of course you don't have to choose; you could play as a chaste witcher and bed neither) and the choice between Redania and Nilfgard. And, as I say, in this run through I didn't in any sense side with Redania - I didn't avoid the quests which would lead into the area of the story where that choice would be made, but that wasn't because I was consciously avoiding it.

On Skellige, I sided with Cerys an Craite, as I had before. To my mind, she is just a much better candidate for the throne than her brother. Consequently, I still haven't seen how, if at all, choosing Hjalmar would alter the story.

At each point where I had an opportunity to influence Ciri's choices, I chose to support her in making her own choice. That, I think, is similar to what I did before; it feels natural to me, and it also feels to me to be what Geralt would naturally do. But in the ending, Ciri went into the locked tower to bring an end to the white frost, something I don't remember from my previous run through, and in that scene I saw her recall all the times in the story when I'd taken her side and backed her up. That seemed to me extraordinarily poignant and positive, and very sensitively done. Bravo! Afterwards, when I told her father that she was dead, I genuinely believed it was so, genuinely mourned it, and genuinely wondered what misstep I'd taken; so the very end, where I was reunited with her and gave her her witcher's sword (something which definitely didn't happen on the last run) was a wonderful surprise.

To criticise - for no work of art is perfect - as I've written before many times before, the poverty of repertoire of the characters is, to me, very disappointing, and it does not seem impossible given the current state of the art that they could be given far greater depth of narrative. Whether that would take you into an uncanny valley I don't know, but I would like to see it tried.

The other major criticism I have is that - given that I play for story, not 'to win' - the big set piece fights really don't work for me. They are, for me, just boring. I'd much rather see the climax of the story through interaction with characters than just by great slash fests.

However, these are details; and they're details from the point of view of my personal taste.

So, once again: The Witcher games collectively, but especially The Witcher 3, are quite extraordinary works of cultural achievement, story tale on an epic scale which I don't believe is surpassed anywhere in any medium. If you have not experienced it, you have missed yourself.

Friday, 31 May 2019

No-one here gets out alive

Avis (left) and Zoe (right) taken on Christmas Eve 2017.
My mental health, which had already been poor before my lover Avis died of cancer in July last year, has collapsed utterly since the suicide of my niece Zoe in November. Somehow I have to find my way back (or die, which would be easier). This essay is an attempt to plot a plan for the first option.

Partly as a consequence of my mental health collapse, my last remaining work contract is looking very shaky, and may not continue. I don't even really want it to continue, even though without it I have no income at all. And I don't believe I am now well enough to seek new paying work; I don't believe it's reasonable to expect that I will be well enough in the even moderately near future. But when I do seek new paying work, I need to have some story about what I was doing this year.

Finally, I'm not currently receiving any benefits, and I'm not well enough to apply for benefits. Zoe (before she died) started an application on my behalf, and my community psychiatric nurse has continued that application, but I have no faith in anything actually being paid. Fortunately, I shall inherit what little Zoe had, and I may be able to sell about £1,000 worth of cattle this autumn (if I'm well enough) but that isn't enough to keep me alive for a year.

What I need to recover health is a series of successful challenges, gradually increasing in difficulty. If I overface myself and fail, I end up further down the slope; things get worse. So it's important to pick challenges I can succeed at. So far so good.

Survey of the battlefield

Cattle

I have cattle. As I've had three calves born in the past fortnight, I now have ten cattle. Of these, one is ready for slaughter but because his paperwork is not in order cannot be sold. Three are last year's calves, and their paperwork is in order, so potentially they can be sold, but they're hybrids and not worth much except as meat, and they won't be ready for slaughter until this autumn at earliest. One of them, Draeg, is male and has not been castrated, so I urgently need to separate him from my cows (and, ideally, get him castrated). I do not want any of my three cows to get pregnant this year - lovely as calves are, I have too many cattle and could do with a year without them.
So the overall plan is
  1. to slaughter Beelzebub this winter (or when I have sufficient freezer space, whichever is the earlier) - this I'm fairly confident I can do;
  2. sell the three yearlings this autumn, either for slaughter or for fattening; they'll be worth at best a very few hundred each (and could fetch much less);
  3. keep the three cows and their calves-at-heel.
Selling cattle is something I have not yet done, and I am not at all confident I can do it.

The Cattle Shed

For the past four years at least, I've been planning to build a cattle shed, and the plan has always been to get it finished before mid July of each of those years, so that I can put the year's hay harvest into its hay loft. The current state of play is that most of the materials are bought and paid for, the foundations and floor are in place, and most of the blocks for the lower walls are on site. Getting the blockwork up is probably about a fortnight's work, and it's something I can now definitely do: the last things blocking it were resolved yesterday.

But sawing the timber for the superstructure is not done, and building the frame can't happen until the timber is sawn. I cannot saw the timber alone, and the sawmill I'd assumed I'd be able to borrow I now probably can't borrow. So there are two options: one, abandon the timber I've already bought and buy new, sawn timber; or two, hire someone to mill the timber. I definitely cannot afford either of these. Even if I can get timber really soon, building the frame is at least a month's work, and completing the build at least another's. It's now the very end of May. So there's no way I can now get the shed finished in time for hay harvest this year. It isn't impossible that I could have it finished for winter, and having it finished for winter actually would make life easier even if the hayloft were empty (or even unfinished).

Hay

I've currently got my cattle in my bottom park; this leaves the middle and upper parks clear to grow hay. However, I'm not confident they've really got enough grass, and in any case I need to get Draeg away from the cows (or castrated) before they come into season again, which is pretty damn soon. So either I need to move my male cattle into the upper park, or else onto my neighbour Alice's land, with her permission - she has the grass. If I move the male cattle into my upper park, it makes work on the cattle shed building site vastly more difficult.

If all I am keeping over next winter is the three cows and their calves at heel, then the middle park should produce enough hay for that, assuming the winter is not too bad. But I'd really like to be able to mow the upper park as well, just as insurance.

All my hay making equipment needs quite a lot of maintenance, which I had planned to do over the winter and just have not been well enough to. If it is to be used there is at least a fortnight's work on that. However, the baler is almost ready to go, and if I can bale for James, I can get him to mow for me as a trade.

If I don't have the cattle shed up in time (and that is now virtually impossible), I can store hay in the old byre, although that's increasingly decrepit and in any case a hassle. So hay actually can be done. But also, in the last analysis, enough hay for three cows for the winter would not be enormously expensive to buy. Hay is not a major problem.

Software

Being someone who is reasonably good at writing complex software is an important part of my identity. At present I am not that person, because my attention span and concentration are mince. I feel that I need to gradually build back to the point where I am that person. One of the problems are that I have too many projects on the go, and am much better at starting new projects than at working steadily and consistently on existing ones. The current projects are:
  1. Outlook add-in for SalesAgility's SuiteCRM product; this is the only paying work I currently have (and it doesn't pay much);
  2. Project Hope, a voter intention/canvassing system for Indyref2, which is more than half finished;
  3. The Great Game, a very large open world game project;
  4. Post Scarcity, a software environment for the massively parallel computers which must, I believe, be the future of computing.
Taking these one by one:

The SuiteCRM Outlook add-in is not something I enjoy working on or would choose to work on, although I do appreciate working with the folk at SalesAgility I work with on it. However, I am increasingly not well enough to do it, and the strains of the project are not contributing to my mental health. Also, there are quite considerable costs in terms of software subscriptions involved in working on it; it is the only paid work I have, but even so it barely washes its face. If SalesAgility do not decide to drop the project, I probably ought to withdraw from it.

I have no confidence a second independence referendum will ever be held; it seems to me unlikely. The SNP will not go ahead without a Section 30 order from Westminster, and I can see no prospect at all of Westminster ever granting such an order. So Project Hope is probably useless. Even if it were useful, it is no use having such a system if the only person who can support it is an unreliable madman. So if the project is to continue, it needs help which in my present state I can't recruit: it needs a project manager, at least one additional developer, at least one evangelist, and, ultimately, a group of people to train canvassers and analysts to use it.

Nevertheless, if Project Hope could be finished, it would have real benefits:
  1. It would help win a second independence referendum, if one were held;
  2. Even if another independence referendum is never held, it would help with canvassing in other referenda and elections for any organisation which chose to use it;
  3. It would be a solid and impressive piece of work which would form a key part of my CV when next I am well enough to seek paid work.
This is work in my core competences, in a software environment in which I am extremely comfortable, which could be genuinely useful in the real world. Rationally, it is probably the best candidate. But, without help, I cannot do it.

The Great Game is a fairly sketchy plan to build a game which would address what I perceive as many of the failings in modern computer games. It is vast and far beyond the capability of any one person to build. However, potentially, subsystems of it, especially the merchant subsystem and the gossip subsystem, could become libraries which could be sold to other game developers for use in their games; in other words, despite the overall project being ludicrous in scope, there is a potential here for a commercial business.

However, for that to be the case these modules would have to be broken out into libraries which could be called efficiently from C++ or similar code, and ideally integrated with one or more of the more common game engines.

The work which I've done on it so far is prototype work on algorithms for merchants and gossip.

Post Scarcity is even more ludicrously ambitious: to design a software environment - an operating system, if you like - which would make as yet undeveloped computers of unprecedented power tractable and useful. It's necessarily being done in very low level languages which are not my forte, and its present state is bogged down in hard-to-trace bugs. It would make a great PhD project for someone, but possibly not me. However, if I could focus on it, it would be very good mental exercise, and like eating an elephant, it can be done in teaspoonfuls.

In summary I need to focus on one project and largely abandon the others. Project Hope is rationally probably the best choice, but I can't make progress on my own and don't know how to recruit help. The Great Game (or, more specifically, its marketable subsystems) has the benefit of being something I can make progress on without outside help.

Plan for the campaign?

So it looks to me as though my best plan is
  1. To erect the blockwork for the cattle shed as soon as possible, without worrying about when the superstructure can be completed: feasible, needs no outside support, can be achieved, will have some value as shelter and as a hard feeding pen even if the shed is never finished;
  2. To separate the male cattle and move them at least to the upper park (but to ask Alice if I can move them into hers);
  3. To procede with maintenance on the baler as soon as possible, with the rake and mower as stretch goals - if working in the Void is too stressful, fetch them down here to be worked on;
  4. To ask friends for support on Project Hope, but, if I don't get that soon, to abandon it and focus software on The Great Game;
  5. To not worry about anything else for the time being.
Comments?

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.

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