Monday, 17 October 2016

Democracy - it doesn't work!

How many times have you been told (or told someone else) that tyranny is bad and democracy is good? Sometimes, it's glaringly obvious - the "Phantom" comics have explicitly said, on multiple occasions, that the solution to all your problems is to tip the monarch out and elect your own leader. This is particularly true in the US (where, granted, they did fight a bloody war to buy the right to democracy, so there's a bit of historical bias going on here). And we do have plenty of evidence that monarchic systems can go really, horribly bad. Granted. But democracy isn't the solution - it just shifts the problems around.

First off, let's dispose of any notion of pure democracy. In a pure democracy, every collective decision is made by equal votes from all members. Basically, that means a referendum on every trivial point of government - impractical even at small levels, and utterly impossible at the level of a country. Instead, we have representative democracy, where the governed people get to pick the person or people they want in charge. And in most Western countries, we really have party politics - you're not even picking the people, so much as picking the party they belong to. (And that's before even starting to look at crazy indirections like the US electoral college system, where people act like they're voting for a president based on his/her party, but are really voting someone into the electoral college, and those people get to vote.)

So the primary form of government used and recommended in most Western countries is some form of representative democracy. People get to submit their opinion on who should be given the power, and that person (or those people) get/s to rule for a few years, before everyone gets another big shuffle-up and we start over. In theory, it keeps leaders accountable, because they get tipped out of office if they do badly. Great. It has a few problems, it has significant costs, and unfortunately it ultimately comes down to which candidate has the best publicity, but it's alright in theory. The trouble is that people are stupid and/or evil. The people who elect people are stupid and/or evil. The people who get elected are usually evil, and often stupid as well. Thinking about long-term consequences means not being stupid. Thinking about the greater good means not being evil. We have a political system that is built on top of fundamentally inappropriate units of thought.

Does that mean we're doomed? Fortunately, no. There are ways to build a good system on imperfect materials. The internet is a dangerous place, and data can easily get lost or corrupted on the way to you, yet we have TCP that gives us reliability, and HTTPS that gives us dependability. All we need is to build a system that minimizes the problems, and - most importantly - gives us a way to get around them.

And monarchies give us that.

But what about those tyrannies? How do we make sure we don't get the wrong people in power? Let's look at how the internet works. Everyone who's using the internet is a part of it; there's no fundamental difference between "rulers" and "subjects". You connect your computer to the net, and you can talk to people, and people can talk to you. There are easy ways to block some traffic from getting to you, or from leaving your computer (firewalls). At this point, what I've described is basically anarchy - nobody has power of any kind. The trouble here is that everyone has to do all the work of firewalling, even though the person next to them is doing the exact same work - and not everyone has the skill (or inclination) to manage a firewall appropriately. If the internet were purely built on this basis, every non-technical person on it would be a target, all the time.

So people club together. In my family, I'm neither the head of the household nor the owner of the house, yet I've been given the job of protecting everyone from the nasty creatures that run amuck in the environs. I have authority over our network, and I get to choose which IP addresses and ports are off limits. For me, this is a responsibility to serve; but the exact same technologies and forms of control are what create the Great Firewall of China, a prime example of tyranny. Where's the boundary between "people clubbing together" and "totalitarian government"? Ultimately, that's the key here... and it is...

... the freedom to leave. At any time, anyone in my house could get hold of his/her own internet connection, the exact same way that I got mine. (In fact, anyone with a mobile phone already has one.) So if I start blocking sites against their will, they can all just ignore me and let me lord it over nobody. The same is true of any other platform on the internet. Don't like what Facebook's doing? Move to Google+ instead. Afraid that Google Search is tracking your every move? Give Duck Duck Go a try. Annoyed that your ISP blocks all incoming traffic on ports 25 and 80? Get another ISP. There will always be consequences - most notably, the network effect, in that people on Facebook are best reached via Facebook - but when the (perceived) costs of leaving exceed the (perceived) costs of staying, you have the option to leave.

Can this be done in world politics? I believe it probably can. There are some issues to be worked out, and it would be hard to start this system now, but there are possibilities here. The first requirement would be to drop all forms of border control apart from quarantine. We're moving toward that as regards tourism (as an Australian, I can visit any Commonwealth country very easily, and other countries like the US with reasonable ease), but we'd need to remove all barriers to migration. That would also eliminate a lot of issues regarding asylum seekers; you want to come here? No problem, just come. The second requirement would be to have some actual benefits to citizenship, else nobody would bother.

The biggest issue, though, is land ownership. As was discussed in The Valley Of Fear, it doesn't matter who owns a piece of land, as it can't be carried out of the country it's a part of. One solution would be to eliminate the ownership of land as a concept, but I don't like that. In any case, this falls under the heading of "consequences of leaving"; it would make it harder, but not impossible, for a land owner to change citizenship.

But the benefits would be huge. With open borders, governments would be forced to be genuinely beneficial to their people. They'd have to demonstrate that the tax money they collect is being put to good (enough) use, that their policies are worth living under. Instead of a system of collective irresponsibility created by massive committees and frequent rotation of incumbents, you have a system of small states that are headed by the same people long-term - people who have to own their decisions. All those people who say they'll move to Canada if so-and-so becomes president of the US? Let 'em. And they can move right back again if they find that Canada just isn't the utopia they thought (or if they miss their old friends too much - the network effect again).

Power comes from one of two sources. Either you create it, or it's given to you. If you create a country, you are in charge of it; and if someone chooses to live in your country, s/he gives you that power. The system works because power is hierarchical, and all the power in this world is ultimately owned by the One who created it. He made this world, He gave us control over it, and He is the one we'll be accountable to in the end.

Sunday, 2 October 2016

What would happen if driver's licences weren't government-issued?

As of 2016, it's pretty normal for most people in most Western countries to seek a driver's license as soon as it's legal. Each country (or in some cases, each state within a federation) issues its own licenses, but they all represent broadly the same concept: the bearer of this card, identified by name and photograph and some sort of ID number, has demonstrated the competence to command a ton or two of motorized metal. But why should those cards be issued by "the government"?

A government is a body of people; usually, notably, ungoverned. -- Shepherd Book

There's no such thing as a "mail server licence", without which one may not operate a mail server on the internet. There's no "web browser licensing board" that decides who is and isn't allowed to publish a browser. How do you decide which web browser to use, which mail servers to talk to? (And web browsers crash about as often as cars do.)

With government-issued licences, you either have one, or not. Corrupt officials could issue or deny based on nepotism, bribery, laziness, or any other criterion, without people having any real recourse. There's no competing licensing board, and no legal option to drive unlicensed. There is an alternative, though...

Suppose driving schools and automotive clubs took responsibility for this. Instead of a Victorian Government Driver's Licence, you would carry an RACV Membership Card with a certification of driving skill. Traffic offence statistics could be easily divided according to which certification you carry (including a category for "None"; if you're pulled over and don't have any recognized card to present, you'll be more stringently checked and charged), and over time, there'd be an automatic sorting into "bands" - the best driving schools are the ones that produce the best drivers, and rather than lose their high status, they would decertify problem drivers (they would, in effect, lose their licences). Certify every man and his dog, and your card becomes worthless, and nobody wants it.

All this requires no legislation beyond the existing provisions for copyright and trademark protection. Remove the requirement to carry a card, and make it simply a tool of convenience. Put responsibility back on individual people.

Bonus: Self-driving cars automatically get the same treatment. You buy one based on the ratings and reputation of its manufacturer, and it stands or falls on its merits.

Monday, 29 August 2016

Rapunzel's front-row seat

"Best day of your life? l figured you should have a decent seat." - Flynn Rider, 'Tangled'

How did Rapunzel and her guide manage to find themselves in such a perfect position to look at the lanterns? Why were there no boats anywhere nearby, despite there being quite a few elsewhere? Wouldn't someone else want to get that kind of view? The cry was "To the boats!", but we see no boats other than the one our heroes are on.

I think this image largely explains it. The tiny rowboat is in a cloud of lanterns that have floated this direction, and are grazing the water's surface before moving on upward into the sky. Imagine if there were lots of boats, sailboats included, on this patch of water - it would be extremely risky for the lanterns (easy for them to crash and splash), and possibly also risky for the boats themselves (flammables near flames? No thanks). Flynn has taken his date to the quietest place around by the simple method of violating the kingdom's safety rule: No boats downwind of the island!

It makes sense. The weather report would tell them which way the wind's most likely to be blowing that evening. Some of the lanterns will rise straight into the air; others will climb for a bit, then settle down, and finally make their rise toward the sky, once the air inside them warms a bit more. (Some will be duds, of course, and won't get into the air. They'll catch the water and sink.) Anyone upwind or crosswind of the island will get a great view of the lanterns flying off into the distance, without any risks; downwind, all you need is a small exclusion zone, and everyone's safe. When the royal lantern comes down almost to the water, Rapunzel helps it on its way, but if she (and the boat) hadn't been there, it would have had enough room to catch the air on its own.

And isn't it perfectly appropriate for the thief ("lovable rogue", I mean, of course) to break the rules and get himself into the perfect, if risky, spot?

Monday, 18 April 2016

Falsehoods Programmers Believe About PEP 8

We're computer programmers. We spend our days warping reality to our purposes, and then leaving behind a textual representation of the exact type of warping so the next person can use our modified reality. Over the years, many MANY Python programmers have looked at a document called PEP 8 and misunderstood it, just as many programmers misunderstand time, or people's names. The same PEP 8 misconceptions crop up over and over again, and after some discussion on python-list, I've collected these commonly-held fallacies.

Remember, all of these assumptions are wrong.

  1. All Python code should follow PEP 8.
  2. If you use a tool named pep8, your code will be PEP 8 compliant.
  3. If your code is PEP 8 compliant, a tool named pep8 will accept it.
  4. The Python Standard Library is PEP 8 compliant.
  5. Okay, at least the new parts of the standard library are PEP 8 compliant.
  6. PEP 8 compliant code is inherently better than non-compliant code.
  7. PEP8-ing existing code will improve it.
  8. Once code is PEP 8 compliant, it can easily be kept that way through subsequent edits.
  9. PEP 8 never changes.
  10. Well, it never materially changes.
  11. I mean, new advice, sure, but it'll never actually go back on a rule.
  12. The line length limit is obsolete in an age of high-resolution displays.
  13. Okay, but if you disregard side-by-side windows, lines of code can be arbitrarily long without hurting readability.
  14. Well, maybe not several hundred characters, but surely 120 characters of code on a line is easy enough to read.
  15. The only valid white space is line breaks and U+0020 SPACE.
  16. Okay, U+0009 TAB when lining up columns, but no other white space.
  17. Oh, come on, no-one would use U+000C FORM FEED in source code.
  18. Everyone uses the same sort of tools (visual text editors) to read and write code.
  19. Ignoring the few weirdos who can cope with their own bizarre choices, every NORMAL person uses the same sort of tools.
  20. Alright, everyone at my organization will use the same tools. I can mandate that, so it must be true.
  21. Readability is an inherent quality of code. It doesn't matter who reads it, good code is good code.
  22. Avoiding the "Names to Avoid" is a sure and simple way to make sure your identifiers aren't confusable.
  23. Unicode is good for identifiers.
  24. Unicode is bad for identifiers.
  25. Unicode is optional for identifiers.
  26. You know what I mean. I'm talking about *non-ASCII* characters. And you shouldn't use them.
  27. PEP 8 is a tool for denying patches/pull requests that you should reject.

As with the articles I'm riffing off, every one of these is false, and I can give examples. And this is far from an exhaustive list. If you want to avoid the worst of the errors, start by reading the actual document (not some tool that borrows its name), particularly the section entitled "A Foolish Consistency is the Hobgoblin of Little Minds".

With thanks to Ben Finney and Dan Sommers for contributions to the above list.

Tuesday, 25 August 2015

Stop kissing Crystal and find Grandpabbie!

Surround Sound allows some neat effects, like hearing that creepily dangerous sound from behind you instead of from the screen... but sometimes there can be additional words hidden in the other channels that you otherwise mightn't be able to hear. When Kristoff brings Anna to meet his friends (well, they're more like family), he greets them all, in several cases by name. But since the audience's attention is on Olaf and Anna ("He's cray zee!"), the actual lines are easily lost. Here's what Kristoff is actually saying...

Hey, guys.
You are a sight for sore eyes.
Hey look, Magma's back from vacation!
Rocko's looking sharp, as usual.
Clay, whoa... I don't even recognize you. You lost so much weight!
Didn't realize how much I missed you guys.
Guys, I've got so much to tell you.
Stop kissing Crystal and find Grandpabbie!

So now you know. And knowing, as they say...

Sunday, 3 May 2015

Upgrading Ubuntu Karmic to Debian Jessie

My server had been running an ancient release of Ubuntu for far too long, and I was getting weary of manually patching things and hoping that I could stay on top of everything. So, with Debian Jessie freshly stable, I figured it's high time to upgrade. My options were to wipe the computer and start over, or attempt an upgrade; being certifiably insane, I chose the latter. Herein is notes from what took place this weekend... as a cautionary tale, perhaps!

First and foremost, try it out on a lesser system. (I wasn't quite insane enough - or maybe stupid enough - to just dive in and start fiddling with a live server.) Upgrading Ubuntu Maverick (10.10) to Debian Jessie (8.0) worked out fairly well, with just a few messinesses and complications, all of which also happened with the full upgrade. But there were rather more problems on the live system.

  1. Replace /etc/apt/sources.list with Jessie content. Easy enough. Don't forget to check /etc/apt/sources.list.d/ for any that are now redundant.
  2. Grab the new GPG keys from https://ftp-master.debian.org/keys.html so apt can check signatures.
  3. apt-get update, find out about a few more keys needing to be imported. Grab them with gpg --recv-keys 64481591B98321F9; gpg --armor --export 64481591B98321F9|sudo apt-key add - (after checking their validity in whatever way satisfies your level of paranoia).
  4. Due to some major bootstrapping problems, I couldn't simply apt-get dist-upgrade to do the upgrade. For everything to work, I actually had to do several steps: first, grab the Squeeze (Debian 6) repos, and install a somewhat newer kernel; then reboot into that, and finish the upgrade in single-user mode with broken mounts.
  5. STRONG recommendation: Use apt-get -d dist-upgrade to download all packages into the cache. This operation will complete quite happily, and is not bothered by package conflicts. After that, even if the network connection is broken, package upgrading can continue. At very worst, this just lets you leave the download chugging for a while, and then come back when it's done - saves quite a bit of time when you aren't doing this on a high-bandwidth server, like my first test.

  6. In order to complete the upgrade, I had to first upgrade udev, and then only afterward install a new Linux kernel... which udev requires. This meant a big fat warning about how this was very dangerous, but that I could touch a particular file to override the warning and do the installation - with the proviso that it might trash the system if I rebooted into the running kernel. Fortunately, such did not happen, as I was able to subsequently install a recent kernel, but it was cause to pause.

  7. Above all, this change MUST be done by someone prepared to take responsibility. This can't be managed by a script, it might cause downtime, and you need to have a fail-over ready in case something breaks badly. But hey. What's life without a little adventure... Some people go mountain climbing, I go upgrade climbing.


The part I was most impressed by was how much could be done on a running system. Upgrading a 2010 release of one distro to a 2015 release of a different distro, with no outage until the reboot at the end? Rather not bad, I think. Apt is a great tool.