A quick update on Land-Rover work

I haven’t been doing much work on my Land Rover recently, because of the cold weather and lack of available dry daylight hours. I’ve been doing some wiring (still in progress), but as you can see, there’s some tidying-up to do on that before I regard it as “done” for a while.

The ceiling switch panel, swung down for maintenance

The ceiling switch panel, swung down for maintenance

At least the ceiling switchpanel is reasonably modular; the backbone of it is what most needs tidying. All the wiring is documented in an org-mode file, with some purpose-written Emacs-Lisp for navigating it, so there isn’t a circuit diagram as such, but a list of connection groups, with the same name occurring at both ends of the same wire.

The back of the wiring hub

The back of the wiring hub

The wiring at the back of the central hub of the star-topology main wiring is on its second iteration, this time done with colour-coded wires (the original was all-white). The thinner wires on the left lead to some pieces of stripboard with edge-connectors on them (insulated by the thick bluish-looking tape); those will eventually connect to a board of LEDs to give me the status of almost all the wires, and also to voltage dividers feeding the GPIO pins of an Android Accessory Development Kit, a specialized version of the Arduino microcontroller that interfaces to an Android device, which I will connect to phablet that I will build into the ceiling panel.

In a classic piece of programmer’s yak-shaving, while designing the bezel to hold the phablet in place, I decided Inkscape wasn’t really my way of doing things, and started to write my own Emacs-Lisp CAD system, in which shapes can be described by easily-edited textual expressions (inspired by the pic drawing language, but improved by structuring as s-expressions). This is taking a while, but I’m sure it’ll be worth it.

Inside the dashboard

Inside the dashboard

I tidied up the gap in the dashboard, to make it easier to put the wiring hub in and out. At first, I dreaded this task, but it’s a lot easier now. Disconnecting and reconnecting it is easy; the cables that go in the top of the hub are all labelled with their positions in the 8×3 grid of sockets, and there are only four at the back (one earths, and three to the fusebox).

The new exhaust

The new exhaust

The old exhaust system, that I’d put together from two long-wheelbase Land Rover exhausts, with the help of my mechanic friend, fell apart on my way to EMF, and at last I got round to getting a custom one made, by Demand Engineering near Stowmarket. It’s very satisfactory, and the vehicle is quieter than it was, and the engine compartment doesn’t get so warm, so the old one probably had been leaking a little near the front as well as part-way back where the old end had fallen off.

By the way, the strips with holes in them, on the underside of the chassis longitudinal beams, are for bolting battery boxes to when I eventually get round to going hybrid by putting an electric motor on the third axle. The transverse tubes at the front and back of those strips are with a view to being able to slot removable crawler tracks in under the long section, so that rather than getting grounded on ridges or sliding over them, I can roll over them. Powered tracks would be even nicer, and screw drive would be really cool, but I basic tracks would be a good start.

Getting started with Android (and the Pebble)

My lovely N900 phone is showing signs of wear, and I’ve decided to move onto Android, and have bought myself an HTC One M8, on the grounds that I might as well do it properly. My main requirement before switching fully is to get Emacs running on it, with Org-mode, and to do that, I’ve installed the Android Debian Kit. I haven’t got as far as a cleanly-running Emacs, so I’m still carrying both phones with me. I’m thinking of going in at the deep end, and starting a native full port, compiling Emacs to use Android’s UI toolkit instead of X, but haven’t started on that yet (I’ve got quite a few projects to tidy up first). I also want to run a spreadsheet on it, as I record my financial transactions pretty much as they happen, and also my weight daily and some of my exercise routine.

As well as the phone, I’ve bought myself a Pebble Steel smartwatch; it’s not the most powerful smartwatch around, but it does look reasonably like a watch. I’d really like to run org-mode on that, but since running Emacs on it isn’t going to be possible, I’ve started to create zorg-mode, a somewhat compressed clone of parts of org-mode, that should be enough for managing my todo-list (synchronizing it with the phone).

I’m very impressed with the HTC One M8, and, despite its limitations, I’m beyond very impressed with the Pebble Steel. I’m less impressed with the effort it’s taking to get its development environment running on my Debian system, though, and, although I don’t like such things, I’ve started to use their cloud-hosted development system instead.

A longer fast

I’ve been doing intermittent fasting for some time now, a day at a time, and have found it very effective for losing weight, and probably for many other health improvements, not all which I’ve measured. I started off with 600 calories on the fasting days, and once I got used to it, found I could go under 100 calories (a tin of tomatos), and then tried some complete fasts (black coffee, green tea, etc, but nothing calorific) and they were easier than I expected. A bit over a year ago I tried some longer full fasts, 60 hours (two and half days) and 98 hours (just over four days, with the aim of reaching ketosis to find whether it felt any different for me), and they were much easier than I expected. I’d like to try a whole week sometime, and as I started writing this, I was embarking on the halfway mark between four days and a week: I’m aiming for five and a half days. This fitted in conveniently with my weekend routine being disrupted by the Cambridge half-marathon; instead of the early Eucharist, followed by a cafe breakfast, a walk, and a Quaker meeting, I’m going to stay at home, mostly tinkering with things. My next planned social eating after the fast was Wednesday lunchtime, when I go for a pub lunch with friends from a previous job, and so that’s the first eating occasion which people will notice if I miss. (I’m doing this fast a bit furtively, because when I did my four-day fast, friends I told in advance seemed to think I’d been in terrible danger, despite (or rather, because of) knowing nothing about fasting.)

A lot of precious, aren’t-I-special, must-be-careful stuff is written about fasting (and about eating, for that matter), and I simply don’t believe most of it; the bits I do believe are backed by scientific evidence or direct experience. But I do take some care; for example, I know that eating a full-size meal after a fast of more than a day is likely to cause indigestion (I tried it). And there’s a reasonably clearly established connection between eating red meat and an increased risk of cancer (and between eating vegetables and a reduced risk), so I didn’t want red meat to be sitting round in my digestive tract as the last thing I ate before the fast. So I forewent what I would have liked to eat just before the fast (a doner kebab), and instead stuffed myself with green salad with chicken and fish, so I’d be up-to-date on greens and on protein and fats beforehand. And to avoid a sugar rush after the fast, I got some bags of nuts to break it with, that I’ll probably follow with some yoghurt.

I was hungry intermittently for the first couple of days, but on the third day that had largely gone, as I had switched from running on sugars to running on fat reserves. I felt slightly different from how I normally do, but it wasn’t a problem; it did feel very strange not to feel hungry at all. I took my urinary ketone readings twice a day, and saw that I entered ketosis after two and a half days.

Towards the end of the fifth day, I went to a dancers’ club ball, and danced fairly energetically. Driving back, I did feel a bit odd, and very thirsty, so took a ketone reading when I got home, and it was twice what it had been before, so I decided to break the fast then, by eating nuts and a tin of creamed mushrooms (an odd late-night choice).

The next day, after having some yoghurt to start with, I ate normally from lunchtime onwards, which was probably a bad idea; I did feel more than full, and should have allowed more time to make the transition from fasting to normal eating.

The fast did get me down to what I had long thought would be my target weight, which I’d been persistently unable to reach. I realized I’ll have a little more to lose after that to get down to my actual lean weight (think six-pack) but it definitely brought me into range.

So, would I do it again? Will I ever go for a whole week? Yes, with some modifications. If I have a whole week clear of social eating occasions, and without any energetic events like dances, I’ll try it again, perhaps as an annual reset to my digestion, but given seven days available for it, I’d probably fast fully for the first four of them, then have three days of salad with fish and nuts, before returning to normal eating.

FOSDEM 2015

At the end of January, I went to my second FOSDEM; I went a few years ago, then for the intervening years, various things intervened, although I would have liked to have gone; this year, everything was clear for me to go.

The event was very well-attended, and covered a wide range of topics, with software itself at the centre but spreading to cover both intellectual property law and open-source hardware.

Notes taken during the event

My remarks added in italics.

No legacy (IPv4) connectivity, should work for everything except Android phones.
except for FOSDEM-legacy

Livestreaming available as rooms may be full, and everything is recorded and mostly livestreamed.
livestream.fosdem.org

Saturday

Keynote: Are we who we say we are? (Karen Sandler)

Was an engineer before she was a lawyer; pro bono counsel for various open software organizations.

Thinking about representing someone (as a lawyer). Legal ethics for free software, very different from what lawyers from other backgrounds expect, e.g. openness instead of confidentiality.

We say “we” a lot, meaning a lot of different things (even in the same sentence), so who is the lawyer’s client? Employees of companies in open source can have multiple affiliations. Charities and trade associations are different. Some open source conferences are run by trade associations; FOSDEM limits what sponsors can do. Companies co-opt “making the world better by…” “Open source” on IRS application scrutiny watchlist! Our own perception of what is a FLOSS community is varied. Why do people contribute to ubuntu (thus sublicensing to Canonical)? “This is where my friends are”. People can move jobs while on the same project, and it can be unclear when they’re in a professional context. Conservancy publishes everything e.g. travel policies.

Trademarks are identity, and messaging from a particular source. Example: public support for getting Groupon to stop using the name Gnome for a product. That may have needed the gnome foundation to coordinate it.

c-mera: lisp syntax for c

Pretty obvious; just about time someone got round to it. Lisp-style macros would be nice in all languages.

Introduction to freeRTOS

Small useful programs in emacs-lisp

A good way of getting people programming?

Some example programs (talk wasn’t very good, and someone disrupted it a bit)

Upstreaming and downstreaming

Running Linux on Android devices(extremely well-attended)

By David Greaves.

mer, sailfish (focussing on its open parts), jolla, inherited from maemo.

Sailfish for android-focused devices.

The technology: mer is the core of sailfish, opening up the code of the core distribution (about 400 packages, no applications) Trying to make it easy for manufacturers to build devices, not aimed at end-user hacking. Qt: not java! QML is good: declarative design. Qt has become quite big, but is modular.

Mersk is a chroot running Mer under any distro, plus some tools.

Android has binary blobs, and we have to route around the breakage, while hoping for better open hardware. Pressure on manufacturers does work eventually. Shim between glibc and bionic libc: libhybris enables use of glibc on top of Android BSP.

Andriod linker code: dlopen, dlsym, dfclose: renamed to android_dlopen etc, and can then run Linux and Android in the same address space. Some patches to bionic, e..g. threaded local storage.

Working alongside cyanogen mod where available. HADK. Minimal Ubuntu provided.

Install habuild and repo inside the chroot, download a repo to build.

There’s a manifest defining what to build. Then need to build hybris and the drivers. Then make a filesystem image that you can put onto the device, using adb.

You can write error messages into the device serial number, for retrieving adb debugging.

Runs emacs :-)

About 25 active developers. Devices include N900.

bit.ly port-devices-status

Multirom (multiboot).

Core and some MW is there.

Put on watches too?

Code is not enough.

Jolla discount code FOSDEM2015 will work to 8th feb

CHDK: Canon Hack Development Kit

By Steven Goodwin.

Can use cheap second-hand cameras, which may be more capable than the manufacturers’ software makes available.

Aimed at the cheap point and shoot cameras on most DIGIC chipsets. It’s a temporary upgrade: augments existing firmware (does not touch ROM firmware) and respects hardware limits, adds functionality such as scripting, increases control of existing parameters (can effectively upgrade to a more expensive model in the range) e.g. exposure, flash power, adds controllable elements such as grids, add export as raw.

Compatibility test with /mount/sdcardroot/ver.req put in the camera and put in playback mode; or various tools. The chipset doesn’t change as often as the other parts of a camera range.

Stick tool looks at a jpeg from the camera to decide what it is. Cross-compilation: ARM compiler.

Copy onto SD card and boot the camera. Firmware update; tells it to run things from card memory. SD card lock switch tells the camera to do an update, and then ignores the switch as it’s advisory.

Everything is in ALT mode gives an extra OSD with different menu. Exposes all parameters.

Scripting: load the script, set the parameters, shoot. Meta-code at start of script says which parameters to expose. Has BASIC and Lua interpreters. Motion detection. Scripts can simulate buttons.

Grids: overlay on the display drawn with drawing commands; can make custom ones such as for passport photo alignment. Can put a hard-to-remove “this camera is stolen” display on it!

Writing modules. People write games on them, too: base it on the snake game that comes with it. Mandelbrot generator!

Debug: can use LED (via memory location). Can crash it and use romlog (will need a map). ShowCameraLog, Printf, LogPrintf.

(Really bizarrely, the guy next to me seems to be copying what’s on my screen rather than making his own notes.)

Tool called Dagger for debugging, intercepts ???

Motion detection hacks: has parameters to say how much of scene has to change, how much dynamic range must change, etc.

Can make your own shutter release cable this way, using the USB connection.

You can make a bullet time rig, triggering many cameras in sync, e.g. simultaneous elements for a panorama.

Kite aerial photography. HAB (with a GPS phone too so you can find it again).

The emacs of distributions: Guix

See Stallman 1981: When large numbers of non-technical workers are using a programmable editor, they will be tempted constantly to begin programming in the course of their day-to-day lives. This should contribute greatly to computer literacy.

What are the barriers to distribution hacking?
– packaging, ability to extend
– package management tools
– esoteric configuration
– implementation language barriers

Demonstration:
$ guix package -i guile
You don’t need to be root to do it
$ guix package -i guile-1.8.8 python
tells you about environment variables you may need to set
$ guix package –roll-back
$ guix package –list-installed
There is an emacs mode to do this for you; it gives access to the package profile from the package list, and to the source code from the package profile. You can make generations of a package, and ask for diffs between them. Uses geyser to talk to guile underneath to get docstrings etc.

Packages can inherit to add, remove, and replace parts.

Package recipes are in declarative scheme. # constructs in it are deferred until run time. guix can be set to build locally instead of pulling central builds. No single point of trust.

Reproducible builds: guix build will store the hash of all the dependencies. Binaries should be nearly identical bitwise. Builds are done in chroots with separate UIDs. The build daemon creates these, with guile inside them and the interface in emacs talks to the daemon.

There is also a web interface.

A similar approach to OS configuration, using declarative scheme to define things like which file systems are mounted by default, what services are to be run, etc. Produces a directory which is effectively a closure. Likewise for virtual machines, which you can start with the defined operating systems on them.

initrd has guile in it, as does PID 1 (dmd).

Installable available from 2014-07

Now ported to ARM v7

Recognized at FSF ? compliant.

Dogfood: 1200 packages, 4 platforms Guix System Distribution is standalone, binaries at http://hydra.gnu.org/

Tooling.

l10n into 8 languages.

Quite active: 2448 commits from 36 contributors.

Porting Emacs to Chromebooks and the web (Pete Williamson, from the Google Chrome team)

Why? Chromebooks are selling very well, and he did it as a 20% project.

NaCl (Native Client) is a project to compile chrome webapps to run in sandboxes.

The web emacs is a chrome web app wrapping Emacs. Chrome apps are downloaded absolutely, so can be used offline.

They download emacs from fsf, apply a patch, configure, build temacs.nexe then run that in a emulator on the parent linux environment to complete the build. Not yet building the elisp inside it, but including it as a compressed directory, which was already allowed for in emacs.

NaCl uses a partial glibc. Found some bugs in emacs and its makefiles (which are quite advanced). Choice between implementations. PiNaCl uses LLVM code and JITs after download.

You can use gdb with NaCl. Debugging Lisp without the display is harder.

Various small things needed fixing, including some temporary hacks such as saying all files are executable and writable.

Emacs has been ported to so many systems that the makefiles already have many workrounds for things.

Demo of various things (not all working yet). Still some things to do; pipes not provided by NaCl. Want to be able to mount cloud drives to chrome. Want to build as a web page too, so you can run real emacs on a web site. Want to upstream back to FSF.

Software patents

Cannot patent vague things.

Extending Python

By Francisco Fernandez Castano.

Writing native code to work with python. Why write in C? Binding libraries, for example; or for speed, or connecting up legacy code in other languages, or integrating python as a scripting language for another program.

C API to python: PyObject type. PyArg_ParseTuple to get arguments. Py_BuildValue to construct something e.g. to return. Define a module to put your functions in.

distutils module provides a setup function. dlopen in C to load shared libraries.

Manage memory manually, use reference counting macros. To throw an exception, register it and return NULL. Some differences between Python 2 and Python 3.

CTypes is an advanced FFI for Python; allowing Python to describe C structs and convert things to C to use.

CFFI is another advanced FFI. Gives API and ABI access. Recommended by PyPy. Give it fragments of C declarations as strings. Can also put the C functions in as strings, and CFFI will compile it for us.

Three ways, same principles, varying in portability and ease of use.

In Q&A: mentioned SWIG

PyPy and the future of the Python ecosystem

By Romain Guillebert.

How can we get better implementations, without throwing away language features and libraries?

CPython is most popular, but has poor performance, and cannot use multiple cores in a single process. PyPy has a smaller marketshare but better performance. Other implementations are almost unused. Comparing with other languages: Go is quite fast and great at concurrency; JavaScript is pretty fast, even PHP is quite fast these days. So we have no excuse. C extensions make it hard to switch implementations and so Python can’t evolve because of them: a lock-in. More competition between implementations would benefit everyone, particularly users. Libraries use more than the official API; official API makes assumptions on how the virtual machine is written; the C API is against performance and concurrency, e.g. reference counting.

C APIs in other languages: JNI/V8 and Lua/Julia. We could learn from them. Can we implement something similar? Yes! Designing it to make everyone happy is harder than implementing it.

PyPy is the most flexible implementation, and is written in RPython. 6.9 x faster than CPython. Competes against other fast languages. JIT: Pay the cost of what you use (e.g. introspection).

STM: working on removing the GIL without having to deal with threads and locks.

Short term extension support.

We can do better than we are. PyPy is working on it. Making an alternative, portability-friendly, extension ecosystem would be hard but worthwhile.

Python lightning talks

eGenix pyrun

python runtime environment in a single file, with easy installation by a shell script.

ZeroServices: micro-services f***ing easy

Starting a project: the API debate; the missing debate.
Example in 33 lines of python!

Skink (like a snake with legs)

Web developer wall between server and browser.
Some approaches: brython, nodewebkit, pythonium, websockets…
Aim for simplicity. Would like callbacks.
Generates JS on the fly.

Easybuild

for building and installing scientific software
e.g. “Please install QIIME” which has a mass of dependencies, and is picky about versions. Can now install that on an HPC cluster with a single command.

xalt

for seeing what software is actually being used.
It hijacks the linker and mpirun.

Sunday

Supporting accessibility in your distribution

Don’t focus on one technology.

Why not just use text? Some applications assume graphics, e.g. real javascript support; non-technical people don’t like text applications and there are fewer people they can ask for help.

edbrowse, a blind-oriented editor/browser etc are generally a bad idea — too specialized and limited manpower, and compatibility problems. Better to make existing applications accessible.

Synchronized work between sighted and blind people, rather than separate views. Should be pervasive without having to ask for installation.

Status of FLOSS: text mode is quite accessible but not suited to beginners. Gnome is quite accessible, some stick to Gnome 2. Late compared with Windows, stone age compared with Apple which has integrated screen reading.

Generic methodology: connect abstract representation part of app to accessibility bus as well as to visual rendering. For example, for gedit, the representation is in GTK, which communicates with Orca. This shows the logical structure of the application. So technically speaking, a lot of applications are accessible: console, GTK, KDE/Qt4/5 soon, Acrobat reader. KDE Qt3 and xt and self-drawn are generally not accessible. evince may have improved recently.

Text applications usually work well for braille; always provide such equivalent of graphics, also useful for ssh to servers. Putting the cursor in the right place is useful. Keep it simple, making it easier for screen readers and everyone else. Use standard widgets.

This is all about Freedom #0, Stallman only mentioned a11y as just a “desirable feature” and assumed people could modify the program (not realistic). Vint Cerf asked “why is accessibility so hard?” Issues are social more than technical. Should be prioritized, like i18n has been for a while. Who is doing it? Concerns only a small fraction of the population; almost no-one in that community, or aware of it, also has the programming skills. So support has to be integrated into the main software.

Should not be specialized distributions; it should be orthogonal to everything else. Specialized distributions tend to be too specialized, too. Such distros can be interesting testbeds, but things should then be pushed to the mainstream.

Graal: accessibility everywhere, installed by default. Requires close integration, e.g. in debian installer.

Please keep text-based distributions. Please keep packaging text equivalents, such as ogg123. Accessibility packages: Brltty, at-spi, orca, speech synthesis, magnification etc. Test it. /dev/vcsa, TIOCSTI, uinput should be included. at-spi-bus-launcher, at-spi2-registryd must be running as the proper user “dm” then the actually user. check the bus with dbus-send –session –dest-org.a11y.Bus –print-reply /org/a11y….

It needs to be enabled: no standard shortcut for this. Also install various other bits such as gtk frontend for libreoffice, xbrlapi to simulate keypresses from the braille keyboard, java-atk-wrapper but doesn’t work with multi-threading yet. If you have 32-bit applications on a 64-bit system, you need 32-bit a11y libraries etc.

Bootstrapping e.g. entering a cybercafe: usb braille device; shortcuts to start synthesis should be standardized; accessibility panel must be accessible. It should be installed by default (e.g. library computers). GPII project aims at a device that will indicate to a connected/nearby computer that a11y is needed, e.g. a usb key with a file that indicates using speech synthesis with certain settings.

New computer, let’s install linux… all debian forks should inherit a11y in the installer. Installer todo details on brl.thefreecat.org. The installed system should inherit the a11y characteristics used in the installer. Qemu has a virtual braille device, useful for testing. What about the bootloader? Not good so far.

About bugs: take users’ suggestions in, maybe as an option, e.g. bracketed links in text browsers. Be patient, blind users may describe the application in different terms e.g. “braille doesn’t follow” means the application hasn’t left the cursor in the right place; and may not mention visual symptoms of bugs. Discussions: separate mailing lists will mean that mainstream maintainers will not be aware.

Remember blind people want to re-install their system at 2 a.m. too!

OpenStack infrastructure tools you will want to borrow

Openstack is a collection of open components for building infrastructure for a cloud. The infrastructure team provides code review systems, continuous integration etc for the development of openstack. Two main characteristics: daily 1000 patchsets proposed, 7500 gerrit comments and votes, 16000 test jobs, 250 changes merged. All done with open tools. Everything displayed using puppet: fully automated. They also open-source their puppet configuration. This talk focuses on the tools they had to develop for it. This was largely for scalability.

Zuul: a scalable gate system. The github way (human) is not. Use automated tests to decide on merging changes. Handles cross-project dependencies. A traditional gate system is serial, testing changes on top of previous changes that have passed. Tests can take too long for this, so tests have to be done in parallel, which can’t handle regressions on previous tests. Zuul uses speculative gating. It’s still strict overall. Optimized for speed, not resources. At best, as fast as full parallel, at worst, as serial. Main problem is false negatives. Quite hard to visualize it. check, gate and post queues. It is written in python.

Backend is configurable, so can run in clusters other than OpenStack too.

Jenkins-job-builder (JJB)

Makes handling thousands of jobs easier: write YAML descriptions which are converted to XML for sending to Jenkins API. Macros and job descriptions, and job templates, in the yaml.

Jeepyb: a collection of tools for gerrit

yaml description of things
periodic tasks:
– manage-projects includes github mirroring
– close-pull-requests diverts github
– expire-old-reviews
just do a review on the control file
Commit hooks
– update-bug, update-blueprint integrates with launchpad
– notify-impact sends emails to security, docs etc
– trivial-rebase detects trivial rebase and reapplies votes

Sharpening development tools

git-review: a helper for git-gerrit remote setup
rebases on master by default
support hooks
done as “git review” i.e. just a git plugin
can compare patchsets

gertty

CLI (ncurses?) version of gerrit web frontend
email/newsgroup style workflow
can download material to review offline

Co-ordinating developers and tasks

StoryBoard
need for cross-teams coordination
API server / webclient design
Complex priorities

The story of Rust

by Steve Klabnik from the Rust core team

Nearing the 1.0 release

Rust is a programming language, which has been in development for a long time.

Getting a bit meta first: why the story of it matters. Stories imply history, which is in epochs, defined by the predominant paradigm of the time. Totally not Marx: the history of 1.0 shipping struggles.

Four epochs:
– The personal years 2006-2010
– The Graydon years 2010-2012
– The typesystem years 2012-2014
– The release year

“It took a long time to figure out how Rust ought to work” — Niko
It’s completely different from eight years ago if you compare it by features, but exactly the same by goals.

Rust and Servo are both implemented in Rust. Have experimented with features, many of which were then thrown out. Rust has lost more features than many languages have in the first place.

Graydon’s original aim: a compiled, concurrent, safe, systems programming language. “Many older languages better than new ones. We keep forgetting already-learned lessons.” “Technology from the past come to save the future from itself.” So all the features are a little rusty.

Syntax between ML and C. Easy to parse, to tool for, and to grep. The semantics is the interesting part. Syntax is less important.
– memory safety, no wild pointers
– typestate system
– mutability control
– side-effect control
– you can break the rules if you specify where and how
– in a standard way, that’s integrated into the language
– multiparadigm
– not “everything is an object”
Four years ago, 90% of features working, 70% of runtime, 38kloc Ocaml compiler.

As the team grew, the typesystem grew, and more moved from the language to the libraries, and Graydon stepped down from the project. Now, no one person has control: eight people on the core team.

Non-typesystem things: cargo project packaging system; don’t need makefiles and autoconf. Common patterns can be built into the cargo workflow. .toml package description file, the least bad format for this. Finds and fetches headers etc.

Three camps of users:
— ex-C / C++
— ex scripting languages
— ex functional programmers
In some ways, Rust is a combination of these three things.

RFC process, inspired by Python’s PEP. Even the core team goes through this process, and everything now is logged.

Some code examples.

librmaa

Gives /dev access to microcontrollers’ pins etc (I think this is for SBCs running Linux on them; might be user-space linux?), abstracts out some low-level detail; in userspace, so less fiddly.

Supports various boards.

Various APIs e.g. I2C, some via SWIG.

Concepts of pin ownership, to avoid clashes. Has contexts for keeping track of this. But can still get conflicts between processes over pins.

Showed an example.

Probably shouldn’t be trying to do bit-banging from Linux userspace!

Raw mode using GPIO numbers directly, instead of via our usual sensible translation map.

Why not use the Arduino API? Keep track of pins; support more languages; more systematic names. More like mBed API.

Extra APIs provided on top (UPM = Useful Packages from Mraa) in various languages, e.g. LCD driver. Works on top of any mraa system.
Uses C++ API to make it easier to use SWIG on top. MIT licence.

Packages provided for various distros.

High-level open and free FPGA design tools from OHR (OPEN HARDWARE REPOSITORY)

(Some lead-in talking about comparing verilog and others e.g. run time of simulation)

OHR and FPGA

A place on the web for experimental physics facilities to colaborate on designs, started and maintained by CERN; not only for that community.

HDLMake a command line python program for agile management and reuse of HDL cores, defining hierarchy using python manifests
Supports synthesis of xilinx, altera, microsemi, lattice; proprietary and free/open simulation.

Some examples. Generates makefile. gtkwave used.

libre-FDATool helps anaysis of hdl filters from high level specs. Non-recurring engineering (NRE). Needs a scientific python package (original FDATool needs matlab). Integrates with simulation engines.

The simple PCIx FMC carrier, which is fully open hardware. Need several building blocks to get a whole SPEC product running: hardware, gateware, software (user libraries and device drivers).

yocto / OE projects. Python-based. Is HDL just a kind of software? We can handle it just like a linux package!

Stable, for production. Python is the glue.

Mobile map technology

MMT: The multi-platform mobile advanced visualization framework.

An open-source library. An API to build native applications for 3D visualization to run on any device.

Problems: fragmentation (particularly OS), performance (large data), usability (maps largely targeted for web use), ease of coding (easy starting to use it).

Target iOS, Android, GWT, whatever, from C++; translated to Java for Android and GWT.

Globe view, scenario, “flat”. Any kind of data. Can develop offline/online applications; real-time; cache. Camera and models animations. Utilities: tasks, HUD, tools data transformation.

Symbology: non-overlapping markers.

Vector — tiles, e.g. on open layers 3.

Point clouds: point-cloud.glob3mobile, serving only the points you need to show for your zoom level etc.

Various examples (showing good performance from Android, its lowest-performance platform).

Showing synthesized views of / below an aircraft.

Linino technology

Virtualizing MCU peripherals.

Having an MPU (big processor(s) with full OS e.g. Linux) talk to one or more MCUs (rich peripherals)). Integrate the MCU peripherals as though they were standard Linux peripherals (including interrupts). Written using OpenWRT linux distro and THOS. Arduino Yun. Can optionally drive it using javascript. Arduino shields. Interrupts.

Basic idea: poor man’s PCI: let the MPU see MCU peripherals like “local” devices. bus/device/function/offset addressing, through memory-mapped registers. Makes it look like a memory-mapped peripheral, but over any transport. Can have multiple busses and multiple devices on each bus. There is a standard memory map independent of MCU, making standardized virtual peripherals. Poor man’s PCI Function Descriptor, for plug and play. Frame size is fixed (16 bytes = size of a standard UART’s buffer). Smaller than PCI’s equivalent: 8 bytes at start give the description. Also convenient if DMA is available.

Linux implementation: the mcuio bus. (bus is a software layer, the foundation of linux device management). Allows matching drivers to devices according to some criteria. A line discpline based HC, talking over a serial port to the MCU, but it could also be a socket to some other form of communication.

Next steps: MCU support, typically uses I2C which is not plug-and-play. Shield drivers. BLE/ipv6 support, 802.15.4 support. Possibly loading programs from the MPU to the MCU for realtime work; would need more complex resource management.

Plenty still to be done, please volunteer! Code is on github.

Keynote: introducing SILE: a new typesetting system.

Written accidentally. Needed covers for books of various sizes; printing company sends a template; we’d rather do that from a simple text spec file. Blurb on the back, needs to be nicely justified. PDF2 library adjusts letter proportions to justify! TeX’s justification algorithm is 30 pages of dense 1970s Pascal. This has been translated to javascript, so he translated that into Perl; found that someone else has put TeX’s hyphenation algorithm into CPAN too. These made much better blurbs! Just need to add some more stuff from TeX e.g. the page-breaking algorithm. Note: Sile is not TeX!

Intermission about TeX. It’s older than him! When it was designed, many things we now know had not been invented, e.g. vector fonts, PostScript, PDF. Brilliant design decisions way ahead of their time. Then PS fonts and PS then PDF came along, so some changes were made in TeX. Then XeTeX to use system font library. Then luaTeX for macros. So, gradually, design decisions have been removed, although the core Pascal is still there.

Should throw each project away at least once, especially in perl. Now writing it in javascript, as some has already been written in that. Use cairo and pango, and XML (at that stage) as parsers were already available. Assumed few people write documents in text editors. Then Martin at SIL came along, on the mailing list for some software called Graphite that chooses fonts for multilingual documents. Looked for a standard format for multilingual dictionaries in XML. Then “signwriting” via unicode, by the same person. He’s in SIL typesetting team, gets the hard typesetting problems no-one else will take. Is pushing TeX beyond its limit, has written his own version.

Examples: Arabic typesetting. Unicode has not solved all the problems! harfbuzz, graphite, some versions of TeX. Each language has specific typesetting conventions, e.g. Japanese paragraphs, very different from western paragraphs (TeX can do a bit of this). Bible typesetting: produced on thin paper, so must mesh lines on the two sides of the page. ConTeXt can do this a bit. But footnotes and sidenotes are difficult too. Two columns, but with some material across both columns e.g. headings and footers… all across both sides of the page, and TeX just cannot do this: 35 years ago, you didn’t have enough memory to have more than one page in memory at once.

Then diglot and parallel Bibles… only SILE does this.

Let people look at an early version, then replaced JavaScript by Lua, and added another input handler as well as XML. Implementing things multiple times helps to separate concerns. Now uses harfbuzz and fontconfig (almost undocumented). libtexpdf, cairo, podofo output.

Frames, in which you write things, are an important concept in SILE. How do we declare frames? Use cassowary constraint solver. Drop caps are easy! Embedded programming language. People want to use their LaTeX packages… no you can’t, and that’s a feature. The macro facility is deliberately limited, to force you to write Lua code. There’s already a LuaTeX community.

The core of SILE is about 3000 lines of Lua, most of which is the justification algorithm. Much of what is in the core in TeX is in packages in SILE. You can subclass the typesetter object, overriding methods. You can have two typesetter objects on the page (for two columns) talking to each other. Examples: various multi-column Bibles, an automatically-generated Greek dictionary.

Things he learnt

When he translated from JavaScript to Lua, it was more a change of notation than a rewrite. The libraries are interesting. Lua is a good base for a really good programming language. All PDF libraries suck; TeX’s is least bad, and he’s trying to make it stand-alone. A system which can be extended in multiple dimensions cannot prevent conflict between extensions. Hacker News gets a lot if interest to the project, but only got one pull request. Avoid buses…. good community is important, he’s still important for building the community.

Technical goals

The core is largely there
– vertical typesetting
– pdf outline features
– split off libtexpdf

Many things to do in packages. Need to talk about community goals. Wants to see five packages by other people before he does another release — see github wiki.

Leihs, the leading free equipment booking system

Originally in German in the code, and used a changing platform.

Internationalize things from the start, not later!

Tried rspec, then rspec story runner, then rspec + cucumber, then just cucumber. Parallel testing took 9 hours down to 23 minutes that one of the team wrote (cider CI).

Next mistake: not having a UI person on the team. Got one later, improved things. Another mistake: building specifics into the system.

Should write a glossary defining an agreed meaning of each term you use in writing the system. Make sure management understands what free software is. Get authorization for time talking to community. For public sector: point out the taxpayers have paid for it, so should get it. Learn to say no. But first have an idea of where you want the project to go, otherwise you’re just being a jerk.

Data about your favourite community

Tracking: the Grimoire library.

Open projects produce massive data; how can we take advantage of this. Is it useful to analyze my community?

Transparency db layer for metrics grimoire. Based on grimoire output SQL ddbb) Reuse code. Developed in R, migrated to python.

Metrics: source code: commits, authors, branches, companies etc; then demographics, demographic changes, timezone; code review (gerrit, github), merges, abandons, people, time to close, etc; mailing lists: who asks, who replies, what are the longest threads, etc; Q&A e.g. stackoverflow; downloads, wiki use, etc.

Filters for the metrics. API with four methods e.g. aggregated numbers.

OpenMotics: Open source home automation

(Very well-attended.)

Integrated lighting, switching, heating and cooling per-room, power measurements, automation with sensors. Open software and hardware. Started as someone’s hobby project, open sourced two years ago as they think the integrated (expensive) and off-the-shelf systems (hard to integrate) are a broken arrangement.

All about choice: DIY: schematics and PCBs online; buy modules: open hardware forces fair prices, easy to calculate what it actually costs.

Integrated systems maintenance by a professional with a special device.

Manuals for installation by DIY users or electricians; easy-to-use web interface to configure.

Customization of closed systems is limited. We have customization on all levels, e.g. python plugins, or can modify the main software, or even the firmware of the IO modules. Can create your own hardware.

Modules have bootloaders so they can all be updated.

Can interface to other devices over serial ports or ethernet.

Keynote: Living on Mars: can we open-source a society?

By a physicist candidate for the project.

What has open source software to do with a mission to Mars? The project has open source firmly at its heart, to make sure there are no technology problems.

TOC:
– the apollo effect
– why mars?
– how do we reach Mars?
– the Mars One mission
– open sourcing a society: martian society’s implications for earth society
– questions

The Martian day is just right for people! Temperatures can get into the earth range. There seems to have once been an ocean and more atmosphere, but lost the core heat and magnetism. Terraforming? About 8 months to get there by Hoffman transfer orbit. You can take a lot less if you want to have enough fuel for a return trip. Selecting the right people (who will stay sane and not fall out with each other) is all-important.

At last, I go to the Taizé meeting in Prague

Soon after I heard of the Taizé movement, I saw a notice about the New Year’s meeting in Prague in 1990. Unfortunately, the local contact was someone in my parish who didn’t like me (OK, I fancied her, and she didn’t fancy me back and didn’t want me to be able to go) and she didn’t put the notice anywhere where I’d see it until it was too late, and I felt very hurt, and as I was at a vulnerable point then (I had fairly deep depression at the time), it became something of a formative experience; leaving someone out of a privately-invited event is one thing, but taking on yourself to decide who can go to a public event is quite another. I went to the next couple of New Year Taizé meetings to try to make up for what I had missed, and after I recovered from the depression, I did visit Prague some time later, when a good friend of mine was there learning Czech, and that healed some of the old hurt, but something in me still hankered after going to the Taizé meeting in Prague if it ever happened there again. I did get an interesting chain of connections from that visit, too: I made a new friend on the coach from Brno to Prague; a few years later an old friend living in Lisbon invited me to the Taizé meeting there, but I was unable to go that time; then my new friend from Prague moved to Lisbon, and invited me to visit her there (which I did); a pleasant aside to the main story of going to the Taizé meeting in Prague.

So, when last year I spotted that the meeting was returning to Prague, I was delighted, and of course wanted to sign up for it, only to find that there was now an age limit, which I was by now some way over. But local people, and group leaders, of any age would be allowed to attend, and I decided to book myself a holiday in Prague at that time, and try to slip in to at least one service of the meeting, hoping I wouldn’t be noticed and ejected, so I could feel I’d made at least a token attendance at last. (No reason for the age limit was given; I guessed it was probably that people often get more confident as they get older, and might take over the discussions, not letting the young adults (who the meeting is aimed at) get a word in edgeways; or possibly to prevent the development of a group who come back every year for life. I wasn’t expecting to join in any discussion groups anyway, nor was I planning to go any other years, and, thinking about it, I became aware that my concerns are probably no longer the same as those of younger adults.) I booked travel and a room at a guesthouse, somewhat worried that I might not be able to take even a token part, but feeling that I owed trying it to that very upset 20-something who someone so pointedly left out all those years ago.

The guesthouse

The guesthouse

I found my way to the guesthouse and checked in in the evening, and the owners were very welcoming and helpful.

The square, where the bookshop is

The square, where the bookshop is

I arrived the day before the meeting started, and my first trip to the city centre included an aim of heading straight for a clothing shop to get myself a warmer hat. Going directly to the clothes shop from the metro station didn’t work out, as Central Europe’s largest bookshop was lying in wait between the two, so I came back from that morning with a Czech-English dictionary and a warm hat.

The basilica

The basilica

The notice in the Basilica

The notice in the Basilica

Wandering around that afternoon, I looked around Vyšehrad (which was in easy walking distance of the guesthouse) and saw that the Basilica (large church) had notices about the Taizé meeting, so I noted down the times, and decided to try turning up there for the first service.

When I arrived at the church the next morning, I was relieved to find they hadn’t introduced anything like festival wristbands, and I could just slip in quietly. It was wonderful to take part in something in some way equivalent to what I had been left out of so long ago. (Not of course that this was logical; it was not equivalent to that person having chosen to include me, but emotions aren’t rational, and this was a good step in closure.)

The first service of the meeting

The first service of the meeting

After the service, the parish priest started to arrange people into groups for discussions, and I thought of slipping out then, to avoid rubbing in that I wasn’t actually part of it and was officially excluded, but I’m glad I didn’t, because at the end he made arrangements for “anyone else”, and so I found I could join a discussion group after all and nobody minded, and I did in fact feel I was fully taking part in it.

Walking down to the discussion

Walking down to the discussion

The centre for the meeting was at an exhibition centre on the edge of the city, and I went for evening prayer there one evening, but didn’t return the next evening; the great crowding in the transport partly cancelled out the peace from the destination; and (perhaps showing my age, or years of annual retreat weeks in a silent monastery and attendance at a particularly quiet Quaker meeting) many people’s idea of silence before and in the service was rather laxer than mine.

I went to some of talks that were on the programme; I noticed at one that the risk of older adults being insensitive and taking over the discussion was a real one, so took extra care not to do likewise.

A shiny piano, after the concert

A shiny piano, after the concert

I also went to some events that were not part of the Taizé meeting, including a concert (with a very shiny piano).

Before the celebrations

Before the celebrations

On New Year’s Day, I looked at the preparations for celebrations in the city centre (lots of police and ambulances on standby) then went up to Letenské sady (Letná Park) for the city fireworks (it was also the location used instead of the exhibition centre, for the original Taizé meeting in Prague).

In the cathedral before the service

In the cathedral before the service

The quiet after the service

The quiet after the service

After that, I walked to the Cathedral for the service there, which was very well-attended. The atmosphere was wonderful, with a sense of expectation that encompassed both calm and excitement.

In the cathedral after the service

In the cathedral after the service

I stayed for some time after the service, joining in the quiet prayer, before walking through the Castle area down to a tram stop, and travelled back by tram and metro to Vyšehrad to join the Taizé groups I had been with for watching the later fireworks, and a celebration in the local centre for the meeting.

On the way to the final service

On the way to the final service

After the final service

After the final service

At the final service of the meeting, someone gave me a spare booklet of the songs (he had one in English, and one in his own language), and that somehow meant a lot to me; it filled the rest of my feeling of having taken part (no matter how unofficially).

After the Mass

After the Mass

The parish priest of the basilica put on an extra service after the end of the official meeting, for those who didn’t have to rush for their journeys home: a Mass, in the Rotunda (a small circular church) — and for the first time, someone offered me her chair, which stung very slightly for a moment, in the sense of making me feel older, but then I realized it was a very appropriate way to step into being seen as older (or at least, not young by some standards) and into another stage of my life: one in which being pointedly left out of having gone to a Taizé meeting in Prague no longer applied.

River, bridge, castle, cathedral

River, bridge, castle, cathedral

I had some time to explore parts of Prague after the meeting, as my flight home was the following morning.

I’m very glad I went; it provided good overall healing of one of the things that hurt me most of all in my life, and a lot more healing has come since then. This is of course all very much a matter of emotions and not rationality; it was not, for example, the same as going back in time and this time being included by the `friend’ who left me out, nor the same as her having been minded to include me; but as well as the direct healing, it did also reinforce my realization that there was only one person who didn’t want me there, and had I managed to get there the first time, no-one else would have not wanted me to be there.

The one thing that remains is that I would still like to go to a newly-freed country, but that could yet happen — I hoped there would be an echo of the celebrations of 25 years of independence, but that had all been done in November; I may have missed the Czech celebrations but I’ll still in time for the Albanian 25th anniversary of independence; and there are still two countries not freed from communism, and several nearer natural states that would like to be freed from the larger states that they have been forced into being part of, and when the first of those gets its freedom, I’ll head there as soon as I reasonably can!

More Land Rover work: the tandem wheelarches

With a bit of subcontracting (for TIG-welding of aluminium, as well as the folding of it in a brake press), I’ve got Marmalade’s treadplate wheelarches built, and a lot of treadplate rivetted onto the sides of the vehicle and welded to the arches to stabilize them. With a bit of brachiation, it’s now possible to get from any door to any other door or to the roofrack, without stepping on the ground; potentially useful if I park or camp somewhere prone to flooding or mud.

A wheelarch, still shiny

A wheelarch, still shiny. This is too blingy for me; I’ll have to paint it soon.

Of course, I painted them to match.

A painted wheelarch

A wheelarch, painted to an approximate match (well, red, anyway).

I’ve also been doing some work on the tent cover, which is made from a short wheelbase Land-Rover roof that I shortened further and widened. I’m partway through wiring it up; it has a brace of solar panels, one for the main battery and one for the camping battery; and it has an LED strip on the underside (because, LED strip). I’ve changed the support legs, so they’re now all solid box-section steel (originally some of the were just metal pipes); and the rear ones are now guided on the way up, to help stabilize the cover. When I’ve got the lift handle done (another TIG-welding aluminium job), I’ll put a camera (built as a reversing camera) into the end of it, facing forwards, as that’s the highest point of the vehicle, so that I can see whether I can fit under an obstacle such as a low bridge or a garage door; it should also be useful for checking that roofrack loads aren’t shifting too much.

Inside the cab, I’ve at last fitted the Raptor Console I bought a while back, and shortened some of the wires behind it. I’ve still got to shorten the wires between it and the fusebox, before I can finish enclosing that part of the works; once I’ve done that, I can then put the fusebox cover back on, along with the little litter bin that slides onto it.

EMFcamp (and some geek clothing)

I attended my first geek festival earlier this year: EMFcamp. I really enjoyed it, and will definitely go again.

As I was travelling, and camping, in Marmalade, my six-wheeled Land Rover, I helped Makespace (the hackerspace of which I am a member) by transporting several people and lots of stuff there, including a marquee. Only one thing went wrong on the journey: the improvised rearward extension to the exhaust fell off. (Since then, I have had the whole exhaust system replaced with a custom stainless steel one.)

Marmalade at EMF

Marmalade at EMF

There are many good things about an event like this, the main things being meeting interesting people, seeing interesting things, picking up and sharing interesting ideas, and trying new things.

I’m not usually comfortable with crowds, but that applies most strongly to general public crowds. It’s not so bad when I’m with people I have a common cause with (although still there can simply be too many people for me); this is probably connected with the kinds of people I most typically have common cause with, that is, more likely to be fellow introverts.

The hackerspace community, of which events like this are part, is one in which I tend to be comfortable with the people (although there are some creepy ones who I avoid or am sufficiently curt with that they realize that I’m not choosing to continue the contact). In fact, although the deepest priority in my life is religious, I’m typically more comfortable in a specifically geeky group than in a specifically Christian group.

One of the taster sessions I tried for learning new skills was lock-picking (hosted by The Open Organisation of Lockpickers, which turned out to be alarmingly easy, even with my co-ordination, which isn’t the best around. It changed my perception of locks; I still lock things that matter to me, and I still check that I have locked things before leaving them, but I don’t think of them as secure as I once did. I bought a set of picks at the event, and have since bought a set of practice locks, and have practiced with them a bit, and introduced some friends to it, and following tutorials on more kinds of lock is now on my queue of things to do (which of course is held in [org-mode]),

I also tried my hand at blacksmithing, making a straight bar of iron into a simple spiral. Not that difficult, although I’m sure a lot of other blacksmithing techniques are harder to learn than that.

There were more talks about politics than I had expected, but it makes sense, as this community has come up with new ways of doing things, that could be applied more widely. (I think these new ways could also tie in with the ways developed over the last few centuries by the Quaker community.) I’ve made some separate notes about [my speculations on society and politics]

I’ve bought a couple of items of geeky clothing recently: a Scottevest Quest vest, which has 42 pockets, and a Utilikilt (only 4 pockets, but really solid ones, and a hammer loop and a tape measure loop). I wear the vest most of the time, and at EMFcamp also wore the Utilikilt, thinking it was a good place to start while still expecting some odd looks. I didn’t get any odd looks at all; the commonest response was “Is that a real Utilikilt?”, so people there were quite clearly used to them — and that is clearly a well-known brand. Some time I’ll try wearing it in other situations, and seeing what people’s reactions are.

Having lots of pockets is great, and I can squirrel quite a lot of stuff away (I’ve stopped losing things in it now, as I’ve chosen and remembered specific places for things). I’ve now got: two phones, a bluetooth headset, a bluetooth keyboard, a wallet and a separate card-holder, USB memory, penknife, voltmeter, oscilloscope, torch, lock-picking set, ballpoints, Moo cards, and the inevitable Ventolin inhaler! Sometimes I also have a USB power pack, a 7″ tablet, and my netbook; they all fit reasonably well, although I can feel when I’ve got the netbook there, and sometimes the tablet too. I’d like to have a conventional “gent’s” jacket with a similar range of pockets; as a maker, I know what I can do about that: I’m planning to unsew the lining of an ordinary jacket I’ve already bought, and use it as the pattern for making a new lining with layers of pockets in it. (I’ll blog the details as I do it, or afterwards as a project report.)

EMF Camp happens at two-year intervals, and in the intervening years similar events are held alternately in Germany and in the Netherlands. I’m already planning to go to the corresponding event next year, which will be Chaos Communications Camp in Germany.

Exploring some social and political issues

My politics don’t seem to fit neatly into classifications such as “right” or “left”, or indeed “centre”; I tend to think of myself as small-c conservative, but this is probably either an illusion, or just referring to an earlier stage of my development. But my lack of simple scalar political alignment isn’t a matter of being in the middle; more like being so far in each direction that my views curve right round and meet behind my back.

Direct democracy

One area in which my views probably align more to the liberal side is that of political decision-making. I support “Liquid democracy”, that is, making all decisions by referendum but with rapidly changeable proxying to save effort. There are various flavours of proposed details floating around: my version is to have proxying divided into broad areas such as health, the environment, defence, planning, transport, and education, with calls for voting being tagged with which areas they affect; people can proxy their votes separately in separate areas. Each vote would be taken twice: a preliminary one, in which proxies indicate to those who have proxied to them which way they are voting, and a count is taken and the provisional result announced; then the binding one, two weeks later, to give time for reflection and for changing or over-riding of proxies.

Supporters of the present system (plenipotentiary representatives, i.e. they’re elected, but once they’re in, they can vote as they like (or, even worse, according to the Party line) without regard for the wishes of those who voted them in) sometimes claim that the politicians are better informed, and better able to make decisisons, than those who voted them in. I’ve never seen any evidence put forward to support this claim. Others (particularly European integrationist bureaucrats) support a claim (implicitly or explicitly) that neither the people nor anyone they might elect are sufficiently informed and trained to make decisions, and that the decisions should be made by appointed “technocrats” (I think the European Commission, given the chance, would move towards the Chinese model as soon as possible; remember also that the instigators of the EU wanted to eventually form a post-democratic socialist superstate).

It is, of course, true that half of the people may have below-average decision-making ability, but there’s no guarantee the “leaders”, whether elected or appointed, will be any better; they may simply have low cunning and good deception skills, and there are good arguments for believing that they may be worse than the average, as you will quickly realized if you’ve seen televized parliamentary debates.

What most western countries have, plenipotentiary “representative” democracy, is a low point between real democracy and Chinese-style authoritarianism.

The balance is between giving direct power to a stupid trend-following population, and separating a specific group as being in charge, who will then work the system to their own unfair advantage.

There are some workrounds, mentioned below, for some of the problems of giving direct power to the people as a whole.

Citizens’ Income

Another of my ideas to the left of the current mainstream is “Citizens’ Income” or “Basic Income”: an income paid to everyone.

Some politicians in the UK are pressing for a “living wage” for all those in work, but I don’t think that goes far enough for a humane society. Although some less-specialized work could be distributed more widely, there simply isn’t enough work to go round. Some people simply don’t want to work anyway; I wouldn’t mind those of them who have the ability being required to do a “citizen’s job” in return for a “citizen’s income”, but apparently they’re a small part of the population anyway, and the work-round I have in mind for getting the laziest and stupidest out of the voting system might help here too.

And what happened to the SciFi paradise of everything being done by machines, anyway? I suspect that started with some weak assumptions (or swept some unpleasant hypothetical history under the carpet) as it shows people at leisure who are capable of good leisure, but who are also highly capable of good work. Unfortunately, the first to be put out of work seem to be those poorly equipped for a life of leisure either. And that brings up the point that it’s time we should face up to full employment as unrealistic, and start to educate people (or at least, some people) for a life of leisure — but in such a way that does not condemn them to such a life.

Unfortunately, as we have lost a lot of manual labour and have invented bureaucratic jobs to fill the vacuum with dignity, we now have a way of evaluating fields of work (such as teaching) that can be done by those who don’t know what they’re doing, and so we now have a race to the bottom in education, as colleges try to raise their position in the league tables by getting the maximum points for a given level of ability (and exam boards compete to sell to colleges by trying to give the highest pass rate). So now we have an increasing number of people who aren’t properly educated or trained, although they may well be thoroughly and meaninglessly qualified.

An alternative to paying Citizens’ Income in money is to supply goods and services in set quantities (rations) directly, to avoid “misuse” such as drink and drugs; but some people will want to use their resources for chemical escape from reality, and given the nature of their reality, perhaps it is reasonable to let them do so; I will cover that later in this essay, along with some feedback to other parts of these suggestions.

Setting the level of Citizens’ Income involves working out what basic standard of living is reasonable, and although there are absolutes here, it will also vary with cultural factors, and so I suggest it should be set on a national scale, rather than world-wide, so that a culture with a laid-back tradition and low material expectations doesn’t take advantage of cultures with a stronger work ethic and higher standards (yes, I’m thinking of Greece and Germany in 2015 as a specific example).

Now to my controversial work-rounds for some of the problems, where the right-wing end of my personal political spectrum shows more clearly.

Real Adulthood

Many legal systems have settled on adulthood by age. Is this a formalization of an approximation to actual adulthood (an approximation which I think it is clear has failed badly) — or is it a deliberate way of being kind to those who don’t reach actual adulthood?

It would be hard to shift to this from where we are now, but I suggest the ideal is to grant legal adulthood (e.g. voting rights) following observation of actual adulthood, and not by years elapsed since leaving the womb.

This immediately takes the least responsible out of the voting pool, and so optimizes direct or liquid democracy. It also has gentle eugenic aspects, in that sex with a minor will still be an offence, but the definition of a minor will have changed, with irresponsible people staying minors for a lot longer than they do now, and so having less opportunity to reproduce and raise children. (This will work regardless of the relative importance of nature, nurture and the surroundings, in producing responsible people who contribute positively to society. I’m taking it as given that each successive generation being more responsible is a good thing, and increasingly so as the population increases.) The characteristics defining legal majority would be such that people who reach legal majority earlier than they do now would be the ones with more self-control and ability to plan their lives anyway — and ability to recognize inappropriate and manipulative approaches to them would be a prerequisite to adulthood anyway, so this wouldn’t allow abuse of the faster mental developers.

Thinking about this area raises the question of quite what we mean by equality: equality on what basis? Given that, both in existing systems and in the one described here, social privileges are graded relative to a control variable, which control variable gives meaningful equality: age or maturity?

Such a change would also, to some extent, push aside the concept of mental handicap: the people now treated as “different” adults would be treated as older (or permanent) children, which I hope would be less of a stigma. It would also change the motivation to grow up, as distinct from just playing grown-up.

In many (probably most) countries, some things are granted by licence rather than by right; driving, and firearm use, being common examples. Also, some “rights” are granted at particular ages. This proposed change would move everything from the latter category to the former, which could be seen as modifying Article 16 part 1 of the International Declaration of Human Rights: “Men and women of full age, without any limitation due to race, nationality or religion, have the right to marry and to found a family” to ”Men and women who have been found to be suitably responsible, without any limitation due to race, nationality or religion, have the right to marry and to found a family.”

Medicalization and normalization of addiction

We can’t make everyone happy in the real world; should we give chemical happiness for those for whom there is no hope (because they have declined hope, or want someone to do for them what they have to do inside themselves)? But in a world of increasingly short resources, we have to watch the population, and in particular the non-contributory population; and so I suggest we should consider having the state supply “recreational” drugs to registered users, in return for arrangements not to reproduce for the period in which they’re taking the drugs, and losing their voting rights (and driving licences, and firearm licences) for that period, as these are the things that should be done with a clear head. I’m not sure that I support this, but I’m sure it should be examined.

Conveniently, this takes the least responsible and most self-centred out of the voting pool, and so optimizes direct or liquid democracy, and reduces their contribution to subsequent generations, whether by nature or by nurture.

No-one would forced to do anything (if addicts really can give it up any time, as some of them claim), and the people who would not exist because of this scheme would never have started to exist anyway.

I wonder how much of the population would take up this option? In countries which have long campaigned to discourage smoking, it has fallen to about one-fifth of the population, and a similar proportion are reckoned to have tried “recreational” drugs at some time, which may give a guideline.

That’s enough for one post; I shall tackle international relations separately.

My annual day of extraversion

For most of the time, I’m fairly introverted, and tend to guard my personal space quite strongly, and am slow to contact strangers, and get uncomfortable in crowds of strangers, particularly when I have little in common with them.

However, I can be more outgoing, even with a lot of people around, at least if the people have some kind of interest or purpose in common with me, and on the whole don’t seem to be trying to get something out of me.

For the last three years, this has had a peak (increasing each year) in the form of taking part in the World Naked Bike Ride in London, and I’ve done it in the appropriate style: completely naked. This doesn’t embarrass me at all: I get embarrassed about making mistakes, not about having a human body. The first year I did it, I was still fairly reserved (and still fairly overweight, and a bit self-conscious about that). The second year, I got more confident (partly through being greeted with an enthusiastic hug at the start by a lady I met the previous time, and partly through having improved my appearance by intermittent fasting; I had been quite overweight before). This year, I was fully confident, and decided to clown around a bit, and be a complete tart and ask lots of ladies (some clothed, some nude, some in-between) to pose for photos with me; I didn’t keep a count but counting from the photos I have, there were at least 30! Actually, I didn’t really feel particularly naked; it was more like that I’d changed into a naked clown suit, rather than that I’d not got anything on. It’s quite crowd of people, but there’s a feeling of something in common, and people who’re used to public nudity generally seem to have more respect for personal space than the general public, so I didn’t find the numbers of people unpleasant (although I’m not personally keen on the music tastes played through the boomboxes; I’d rather have classics or folk, or how about the Ride of the Valkyries?).

I won’t use prim terms such as “life-affirming” that I’ve heard used by some people not involved in it; the day is simply a real blast. But it’s the sort of thing that description can’t really get across; the only way to find out what it’s like is to take part yourself.

Some people tell me I must be brave to do take part, but I don’t think there’s anything to fear about it. In fact, in terms of feelings, I’m no longer aware what there is about it that’s supposed to be frightening: I have to reconstruct that from other peoples’ obsessions about what others will think of them, including from body image.

The only downside is creepy male photographers, particularly at the start, but I see them as more pathetic than anything else, and there’s a real contrast between how much life and joy and confidence there is in almost all of the participants, and how needy the non-participant photographers come across as. They seem to be rather sad people, perhaps lacking any human warmth in their lives, and I guess that they’re using their photographs as a substitute for that. So it’s not a matter of bravery to take part, but perhaps more one of kindness, albeit perhaps a rather condescending kindness, by people who have something to give, towards those who only have a gap to fill. I hope that some of them will make a bit of progress, and eventually become lively people who can join in and contribute, rather than parasitize. There’s always hope.

There were plenty of female photographers, particularly photographing the naked men, but they didn’t seem as creepy; typically joyful, and not needy. Perhaps it’s something to do with it being easier for women to find a relationship with a man (if they’re not too fussy) than for men to find one with a woman? It’s interesting to reflect on what creepiness is; a topic that I’ve given a blog post of its own, but I’ll delve briefly here too. Part of it, I think, is wanting to use other people (and your interactions with them) to make yourself feel better about yourself despite this not being a free choice of the others concerned, and when you’re aware that from their normal actions, you can see that they don’t see you they way you want to pretend they see you. In the context of taking photographs of naked strangers, it’s a fairly simple and blatant case of it: using their subjects’ photographability as a substitute for them offering the intimacy they associate with nudity. So the complement of this is, the reason I think of participation in events like WNBR having an element of generosity to it, is that you’re kindly putting aside an opportunity to classify people into “worthy of seeing you naked” and “not worthy of seeing you naked”. Or perhaps that’s too sophisticated an analysis, and it’s all just their hormones, poor things.

Sometimes people see nakedness as a sign of vulnerability and powerlessness, but that’s certainly not the case here; it was the naked people who were very much in charge.

But that’s a small aspect of it; celebrating body freedom is a lot more than that. For those brought up in the old-fashioned British culture of the body being in some way bad, particularly the parts of it that aren’t usually shown, it’s a celebration of the body (including all parts) not actually being in any way bad. (Good and evil are characteristics of the soul or personality, not of the body.)

As well as being about body freedom, it’s also an ecological protest about transport. I doubt it’s had any directly attributable effects, but it must be doing something to raise awareness of cycling.

I made a montage of photos, that I considered putting on this blog, but decided I didn’t want to have to flag the whole blog for `nudity’, `adult content’, etc for the sake of one picture. (I might put it up on my flickr feed later, and add a link here.)

I can definitely recommend joining in with this to anyone; I think it’s the most enjoyable day of my year. (I get deep pleasure from walking alone or with a thoughtful friend by a quiet mountain lake, too; I have scope for both kinds of enjoyment.) And if you’re not sure that you’re got the confidence to try, “feel the fear and do it anyway”; you get confidence by trying things, more than try things by getting confidence first. The event is in early or mid June each year, and details of starting points are published on the WNBR web site, and on Facebook pages for each individual ride, some time in advance.

As a little side observation, I noticed that, although undressing in public is something women are traditionally seen as not very keen on, they make a proportionately larger (and, I think, faster-growing) part of the naked cycling community than they do of the Free / Libre / Open Source Software programming community.

What is creepiness?

What is creepiness?

We recognize it when we see it (in others, at any rate; creepy people don’t seem to recognize it in themselves, and that ties in with other aspects of creepiness), but it’s less easy to describe quite what it is.

In this essay, I’ll be describing what I see as creepiness; others may have different definitions, which I’d be interested to hear about. The particular type, or aspect, of creepiness I’m writing about overlaps with neediness, or can be a reaction to need (or to loneliness, or depression).

Creepy people are those who perceive that others see them as less desirable than others, and try to force situations to be such that they can see others’ reactions as affirming them as desirable. There’s an inherent falseness to it, because at some level they have perceived that people don’t like them, and they’re trying to trick people into doing things that make it look like they like them, and are then pushing themselves to believe the lie they have rigged.

There’s something horrible about having someone be creepy towards you, but it’s difficult to pin down what this is. Sometimes I have to remind myself of Jesus’ saying that uncleanness cannot come into someone from outside (Mark 7:15), as a way to cut myself off from feeling contaminated (which I know is an ungenerous response to human neeed).

Another aspect to creepiness is trying to treat effect (e.g. chatting with someone) as coming from the nominal cause (wanting to chat).

Creepy people often show an unconfident or forced approach to the people they’re trying to get something out of, which makes those people avoid them. [Link to “sexual harassment and you” video on youtube]

Often it seems that when someone is looking for company, others avoid them.

I think the reason behind this is that people don’t like being sought to fulfil a role in someone’s life. When someone is deliberately looking for company (rather than taking what company they naturally get), they are looking for someone to perform some function or service towards them. This is often referred to as objectification; I don’t like this term, as the “object” is being used specifically because “it” is a human; the important point is that he or she is being used. I prefer a term such as “`being used to provide personal contact as a service”, but I’m pretty sure that it’s the same thing that some, particularly feminists, refer to as objectification.

This is part of a wider group of false behaviours: in general, people trying to adjust their relative status as seen by those those around them: clothing and image obsession, ridiculous exaggerations of masculinity or femininity, status symbols. Presumably they work on some people, but to others, the status looks silly and the neediness is apparent.

Although I’m writing negatively about creepy people, I’m aware it would be charitable to show them some charity, but the problem with this is that it’s likely to be seized as what they wanted, rather than what you offered.

Fortunately, human development is possible, and some people grow out of these behaviours; it can be just a phase before certain realizations occur. (I certainly went through a lonely and needy stage myself, and I guess I may well have come across as creepy to some at the time.) Unfortunately, not all do.

Follow

Get every new post delivered to your Inbox.