My first trip to Albania

Quite some time ago, I got the idea of going on holiday in Albania for the 25th anniversary of the fall of communism there. I looked up the date in Wikipedia, and booked holiday, flights, and hotel for a week, so I’d have a few days either side of the celebrations in case the main celebration wasn’t on the actual day but, perhaps, at the nearest weekend.

I was a little apprehensive, as it was to be the least westernized country I’d yet been to, and in particular I wasn’t expecting much English to be spoken, and hadn’t got very far with learning Albanian.

Mountains seen on the airport approach

Mountains seen on the airport approach

The flight gave me beautiful views of the Balkans (although my phone’s GPS wasn’t realistic about where I was; it put me much further out to sea than was visibly the case).

Definitely not Heathrow

Definitely not Heathrow

We landed on a beautiful clear day, with a view of the mountains inland from the airport.

At the airport, I drew some Lek at a cashpoint, and found the times for the bus to Tirana (they go every hour, on the hour) and to fill the time dodged the assertive taxi drivers hustling for my trade by getting a very rich hot chocolate in the airport cafe. The bus journey gave me my first glimpse into a slightly run-down, or very informal, looking country.

Arrival in Tirana

Between the bus stop and the hotel

A view on the walk from the bus stop to my hotel

The bus from the airport set me down a couple of streets from the hotel, and I found the city bustling and a little chaotic; and the climate warmer than I had expected.

The hotel I stayed in was a small, friendly one, which I can definitely recommend. There were clearly more luxurious ones around, but I wanted to be somewhere “local” rather than in an international chain.

Skanderbeg Square

Skanderbeg Square at dusk

The first place in Tirana I saw, apart from the route from the bus stop to the hotel, was Skanderbeg Square; not really a square, but an oblong of roads with a grass wabe around the statue of Skanderbeg.


A street view in Blokku

A street view in Blokku

Another street view in Blokku

Another street view in Blokku

I walked on to “Blokku” (“The Block”) also known as “Ish-Blokku” (“The ex-Block”), the area which under the communist regime had been reserved for party officials and their followers. It’s now the trendy district, although it still looks a little run-down (in a rather pleasant way). It’s also said to be the main are of café culture in Tirana, although in fact there were cafés all over the central area; quite good ones, it turned out, with decaf available at all (important to me).

The Grand Park

In the Grand Park

In the Grand Park

The lake by the park

The lake by the park

Further on from Blokku is Parku i Madh, The Grand Park, by the artificial lake. It’s beautiful, and I returned daily, for a walk and a short run. (A few weeks later I went to Brussels, and saw the shabby park outside the royal palace, with a couple of armed soldiers patrolling through it. Presented with pictures of the two, I wouldn’t have guessed correctly which was in a major modern western capital of a wealthy country and which was in the capital of a country struggling to recover, with very little assistance, from a Stalinist regime.)

I saw a couple of other parks, too, including Parku i Rinia (The Youth Park), where books were sold from improvised stalls along the parapet-style walls along one of the edges. I noticed that the tobacco stalls also sold books: I hadn’t realized that books would be a significant part of the culture.

I’d always thought of the former “Eastern bloc” as a place of cold weather, but although that seems to bWikipediae true of the parts with a continental climate (far from the sea), Albania is definitely Mediterranean.

The Teleferik

View from the cable car

View from the cable car

Looking in advance on openstreetmap, I had spotted an unfamiliar map symbol that I guessed would be some kind of railway, leading from the edge of the city out into the countryside. I turned on “map data” to find what the symbol meant, and found that it was a cable car, which I assumed would be industrial and perhaps connected with mining. It turned out to be a passenger one, though, known as the Teleferik, leading up to a hotel, restaurants and viewpoint up in the mountains. I got a taxi to the lower station, and took the cable car ride, which was spectacular, and lasted about quarter an hour. I wondered how a country without, as far as I knew, a major modern engineering tradition, had put up such a modern system; I found they had got the Austrians in, and mountain transport engineering is something that Austrians do.

Abandoned hotel

Abandoned hotel

At the top, as well as the modern Belvedere hotel and a restaurant, there was an abandoned larger hotel, with a big archway under the front of it. This was used for communist Young Pioneer camps, and was also designed as a potential refuge for the government in the case of invasion. The big arch, I was told, was the opening of a tunnel, which was said to lead all the way to the communist leader’s house. (I doubt this was true; it seems a bit far for that, but he was quite into emergency tunnels, so it’s possible.) I had a look around, but was chased off by some loose dogs. I’m not sure they were really feral; they looked too well-fed for that, and I suspect they were put there, perhaps by the military (who have a base nearby), to keep people out.

The hackerspace

The mixed-use building containing the hackerspace; its entrance is round the side

The mixed-use building containing the hackerspace; its entrance is round the side

Before travelling, I looked online for a local hackerspace, and found OpenLabs, and made contact with them. They invited me to come round and give a talk, so I told them about my local hackerspace, and also talked about openstreetmap.

They have very little equipment there, and seem to be more into open data than code; lots of Mozilla and Wikipedia activity. To my surprise, unlike most hackerspaces, there were more female members than male, although it’s not set up as a specifically founded as a female-oriented space.


Urban Persimmons (and Escape)

Urban Persimmons (and Escape)

I tried some unfamiliar fruit from a street market: pomegranate (which I’d only ever had as juice before), and persimmon (which seems to be the national fruit). I only found out afterwards how I should have opened the pomegranate!

Some of the menu entries in restaurants didn’t appeal to me; “Trip of lamb internals” is clearly a classic.

The white (feta) cheese is fantastic. Pies are popular (and cheap); meat, cheese, and spinach. The local ice cream is a bit disappointing: clearly artificial colouring and flavouring. The time is probably about right for an artisan ice cream maker to start up, probably in Blokku; also perhaps time for a craft brewery?

Inside a cafe

Inside a cafe

Outside a cafe

Outside a cafe

There are some excellent cafes, some in local chains. I took a liking to the Mulliri Vjeter cafes.


A mountainous view from Kruje castle

A mountainous view from Kruje castle

I had a day trip to the historic town of Kruje, arranged by the hotel. The “castle” there is a modern re-build, containing a museum.


The amphitheatre

The amphitheatre

The mosaic in the chapel

The mosaic in the chapel

I took a day trip to Durrës. The bus for it starts some distance from the city centre, so I took a local bus out to there. There are two kinds of bus in Albania: ones which run to a timetable, and “furgons”, which are mostly minibuses, which run when they have enough passengers to be worth moving for. I wandered around a bit, finding a live poultry market on the street, a Roman amphitheatre (into which later Romans had built a Christian chapel, with a mosaic of saints), and a newish museum.

Some more

I looked round the National Museum; it was surprisingly Zogist.

I found that the celebrations (of the fall of communism) that I had gone in the hope of finding, had happened while I was on the plane; but there was triumphal music being played from a government building, so I took that as a token form of having caught them.

I found Albania more westernized than I had expected, but not completely. The standard of English, at least among the younger people, was the best I’ve heard from any south European country (I may have had an unrepresentative sample, as a high proportion of the people I got to chat with were from the hackerspace!)

I’m certainly going to go back — in fact, I’ve just pushed myself to complete this “report” a week before going for my second visit! Plans for this visit include attending OSCAL (Open Source Conference Albania), looking at the museum of surveillance, and visiting the National Puppet Theatre, which is in the building previous used for the puppet parliament under King Zog!

The rest of my shoulder repair episode

The rest of my shoulder episode.

My shoulder just after the rotator cuff repair operation

My shoulder just after the rotator cuff repair operation

This is what my shoulder looked like soon after the surgery.

For the first few weeks I was on a gradually decreasing intake of painkillers, as I built up my shoulder flexibility with physiotherapy. I could neither drive nor cycle, and there aren’t many buses near where I live, so I walked a lot more than I usually do.

A large pustule of Propionibacterium Acnes

A large pustule of Propionibacterium Acnes

After about four weeks, an obvious abcess appeared on one of the incision sites. This looks alarming, but in the long run was a blessing in disguise, as the type of infection I had normally festers asymptomatically inside the joint for a couple of years, then manifests as arthritis; so I’m glad that it presented in such an obvious form.

The abcess looking even worse

The abcess looking even worse

It swelled rapidly, and I went round to the local GP, who sent me in to Accident and Emergency, who sent me on to Orthopaedics, where the surgeon who did the original operation took a look at it, and booked me in for revision surgery the next day.

The second surgery was to wash the wound out (“lavage”; the surgeon said he put 14 litres of fluid through it) and inspect it. Fortunately, the infection appeared to be superficial.

The hole in my shoulder, after the lavage operation, when I and the hospital realized it wasn't healing properly

The hole in my shoulder, after the lavage operation, when I and the hospital realized it wasn’t healing properly

However, the wound took a long time to heal, leaving a hole like this, and a couple of weeks after the revision surgery, a lab culture came through showing infection with Propionibacterium Acnes, the bacterium that causes acne. In about 3% of male shoulder surgery patients, and about 1% of female patients, matter from a sebaceous gland gets pushed into the body by a surgical incision, and causes an infection.

The time they told me this I was expecting it to be just a checkup, but the hospital kept me in a for a week of intravenous vancomycin, followed by five weeks of intravenous teicoplanin. This was mostly a precaution, in case the infection had got into the shoulder capsule, where it can cause arthritis; however, in the lavage operation, the surgeon observed it appeared to be more superficial.

A Peripherally Inserted Central Catheter in my arm

A Peripherally Inserted Central Catheter in my arm

The first few doses were given through a normal cannula into an arm vein, but for the longer treatment, they put a PICC line into me: a Peripherally Inserted Central Catheter. This ran from my arm, through the veins, to just above my heart. This way, the drugs (which could cause irritation to the vein linings) are mixed into the circulation as widely as possible.

My teicoplanin setup: one day's supply

My teicoplanin setup: one day’s supply

I didn’t have to stay in hospital for the whole six weeks of treatment; I was taught to prepare and connect a daily teicoplanin drip myself. It was slightly scary, knowing that I was handling stuff going straight into my circulation; so I was very systematic about the hygeine. In fact, it was all quite straightforward, and became very routine.

The hole, getting smaller

The hole, getting smaller

The wound healed rather gradually, so for many weeks I was applying iodinized dressings.

The hole almost closed over

The hole almost closed over

Eventually, it closed up.

Continued healing

Continued healing

Almost fully healed

Almost fully healed

The invagination (groove) suddenly changed, in two days or less, to a hypertrophic (protruding) scar, which I gather will eventually disappear but it could take a year or so.

The scar eventually became hypertrophic

The scar eventually became hypertrophic

Now the basic healing is done, and it’s a matter of rebuilding strength, trying to do it steadily. Of course, in practice I tend to alternate between bursts of enthusiasm and having to take it more cautiously. I’ve been given a second set of exercises by a physio, and I think I should eventually be able to return to doing Krav Maga, perhaps this summer or autumn. I think most of my restriction now is from the scar tissue from the infection, rather than from the original tendon repair.

My first surgery since childhood: left rotator cuff tendon repair

Over the past year or so, I’ve been getting shoulder problems, and it got to the stage where I got referred to a specialist, who, having taken an MRI scan, recommended arthroscopic (keyhole) rotator cuff repair surgery. Having had the options explained, I agreed, with some trepidation.

How I caused the injury was related to a major improvement in my health; having lost 26kg by Intermittent Fasting, I bought a weight vest, and loaded it to take me up to my old weight (for doing squats and pull-ups); it was practising hefting it up to get it over my shoulders that probably caused the tear, and learning gun disarms in Krav Maga brought it to the level where I asked for referral to a specialist (the gross movement of a gun disarm is like a punch, although at an unfamiliar angle, and with nothing to absorb the energy at the end of the travel). However, the consultant said it’s general ageing-related wear and tear, and if it hadn’t gone then, it would have gone soon anyway. Apparently 50% of people of age 50 (e.g. me) have at least one shoulder tendon tear, 60% of people aged 60, and so on.

The previous time I had anything done under general anaesthetic was when I had a blocked lung lobe when I was about 9, and it wasn’t pleasant, as back then bronchoscopes were rigid tubes that they manoeuvred down your throat and into the appropriate branch of the bronchi; I had a very rough throat after that. (Modern bronchoscopes are flexible, although rigid ones are still used for retrieving obstructions.) It did get me written into a research paper, as one of the first five children they’d found to have a lung blocked with something other than a peanut; mine was blocked with phlegm following bronchitis.

So, I didn’t feel keen on the idea, but it clearly made sense, from the logical point of view, and so I signed the consent form, and they induced the anaesthesia while still asking whether I wanted the nerve block to be administered before or after the anaesthetic. (They clearly reckoned “after” was the sensible choice, and perhaps the insensible one too, as that’s how I was by then.)

I don’t really remember the recovery room (I guess the amnesia-inducing parts of the medication were working) and my shoulder was pretty sore as the nerve block wore off, but I had just enough painkillers. The procedure took a bit longer than planned, but when he did his ward round afterwards, the surgeon told me I should only need the sling for four weeks (it could have been up to six weeks). I was kept in overnight, and given vancomycin intravenously (which seems to be largely a precaution against MRSA) — I looked it up, and it seems it’s quite caustic, hence injecting it slowly; a doctor friend described it as “intravenous [bleach brand name]”!

Now, a bit over a week later, I’m pretty much off the painkillers, and doing the physiotherapy exercises that are an inherent part of the treatment. I should expect to be able to return to work around four weeks after the surgery; I suspect that car gearchanges may take longer, but I should probably be able to ride the recumbent (trike) pretty much one-handedly; fortunately, the main gearchange and two of the three brakes of the trike are on my un-operated side. I suspect locking the trike one-handedly may be harder than riding it that way.

WNBR 2015

Last year, I took part in the World Naked Bike Ride in London for the fourth time, and this year I did the London ride again, and the (new) Cambridge one. With five rides, I guess I’m a regular now.

As usual, it was great fun, and I definitely recommend trying it! However, I think it could have been better in a couple of ways.

In London, as before, I started at the Hyde Park start, which is convenient for me to get to from somewhere where I can park the Land Rover with its trike carrier. The sad ghoulish photographers were out in ever greater quantities. People joke about my Land Rover looking like it’s ready for the zombie apocalypse; the Hyde Park start is getting ever more like such an event, with ugly people looking dead inside trying to get a shot of the life force from the participants. I feel I should be kinder to them (I even thought maybe I should have blanked out their faces in the photos I put on flickr, because it would be so embarrassing to be one of them) as I wouldn’t be surprised if quite a few of them have no close friends and no warmth in their lives, but they do get annoying, and it’s difficult to be sympathetic when they’re so pushy and so desperate. I don’t think there’s really any way to improve this without making restrictive arrangements (such as fencing off an area which you can only enter with a bike and on condition of taking part, but that would involve the cost of hiring temporary fencing; and such restrictive arrangements would be against the spirit of the event). My way of dealing with it for myself is to regard taking part in the ride as a rather condescending act of charity towards these people.

The format of the London ride had changed a bit this year, with timed rolling merges rather than stops for groups to join together. I felt that aspect wasn’t as good as previous years; the stops were a good chance for participants to chat without the start-line voyeurs. (The photographers along the ride aren’t creepy like the ones at the start.) I know that that’s not the point of the ride, but in practice it is a naturist occasion as well as a protest ride.  Still, it was an enjoyable occasion, and I’m glad I took part and I’m sure I’ll be there again next year.

The Cambridge ride was a new one, with one start point, on Parkers’s Piece. Unfortunately, it rained for almost all the ride, but that didn’t seem to put people off (it was quite warm rain anyway), and there was a good atmosphere to it, and I think it was a good start to a new venue. Next year’s Cambridge ride should apparently be longer, which would be good (especially if it’s sunny).

I would have liked to do one of the other rides this year, but other events, including my shoulder surgery, got in the way.

I’ve put my photos from the London ride and from the Cambridge ride on flickr.

Building a recumbent carrier

Sometimes I go on trips where I want to use my recumbent trike, that are further from home than I can reasonably cycle to. The trike can fit inside my Land Rover’s loadspace, but getting it in and out is cumbersome (particularly now that I have started to develop rotator cuff problems), and for some time I’ve been thinking about how to carry it more conveniently.

The first idea I came up with was a rear platform, cantilevered out from the rear cross-member (back bumper), and perhaps tiltable downward, and so I bought a used “Hi-Cap” rear tub to adapt. Once it arrived, I realized it would be too heavy, and I also looked up the regulations on rear overhangs of vehicles, and found it would be too long. I’ve still got it; I’m planning to turn it into a trailer.

The main structure, tacked

The main structure, tacked

So I re-thought it, and decided to carry the trike on a framework hinged onto the back of the vehicle, that I could load it on the ground and then swing it up into place behind the back door. I went with steel for cheapness and ease of welding, rather than aluminium for lightness, and used my rather basic welding skills to tack the main parts of it together. It’s in two parts, one fixed relative to the vehicle, and the other attached to that by a hinge. The fixed part is held on by the pin that normally holds the adjustable towing bracket onto the drop plate, and stabilized by tubes going into the jacking points in the rear cross-member.

The support

The support

The hinge is two diameters of round tube, that nest reasonably well together, with the outer tube cut into sections and alternate sections welded to the stationary and moving parts. The part that is fixed onto the vehicle could potentially be used for attaching other things to the back of the vehicle (for example, a tray to hold things that wouldn’t fit through the door), by making a matching piece of tubular hinge. I had to shorten the vertical part of it, as in the form shown it caught on the slope of my driveway. I had originally made it that deep in the expectation of using it to cantilever a platform onto the back.

Built, and in place

Built, and in place

Having completed working out the design, I took it to a local metalwork company who completed it.

Painted, for visibility

Painted, for visibility

I thought drivers behind me might get a bit confused by the extra metalwork and collide with it, so I painted wasp stripes onto it. It probably still confuses people, but I think they’ll be less likely to bump into it.

I mounted a small winch on the front of the roofrack, which lets me pull the carrier and trike up into position with less risk of injury and damage. It’ll also be useful for opening the tent cover (which is quite heavy, being made from a Land Rover roof), and the bonnet (with heavy spare tyre on it), as I have a shoulder injury and don’t want to risk making it worse. I’ve already started to rewire the winch, so that instead of its hand-held control pendant on short thickish wires, it will be controlled by a couple of relays arranged in an H-bridge, with lighter control wires from buttons in various places.

Learning street layouts: London

I don’t often go to London (capital cities are generally too large for such a lover of peace and quiet) but when I have been there, I haven’t really known my way around. I’ve decided to do something about that: systematic learning of the major streets. I feel a bit silly constructing silly mnemonics publically, but since that’ll be part of how I do it, I might as well share them to save others the effort.

There are a few other cities I go to from time to time, that I’ll also learn, and will probably put notes on those here too.

Since my most regular London activity is an annual bike ride, one of my aims will be to have a feel for where I am during the ride. The ride starts from Hyde Park, so that’s one of my base points for learning routes; and other landmarks I’ll mark in bold will mostly be places I remember from the ride from past years. I bring the bike by Land Rover, and have found an area is suitable for parking in and cycling from, so I’ll include that. And the Shoreditch area, where I go for tattoos.

North of the Thames

East-West roads

Working from north to south. London is nothing like a grid, so some of these aren’t that close to east-west.

  • A bit north of Hyde Park, Marylebone Road comes down from its flyover, then passes south of Regent’s Park, then becomes:
    • Euston Road, which passes Euston Station, St Pancras Station, and Kings Cross Station
    • Pentonville Road
    • City Road, which curves south and crosses Old Street
  • From the north-east corner of Hyde Park, which is called Marble Arch, we have Oxford Street going east, leading onto these, for which I have the mnemonic of an “Old, Oxford-educated clerk called Theobald Bloomsbury“:
    • Bloomsbury Way
    • Theobalds Road
    • Clerkenwell Road
    • Old Street
  • Another string of streets, of which Holborn is the main one, splits off Oxford Street to the south:
    • Earnshaw Street
    • St Giles High Street
    • High Holborn
    • Holborn
    • Holborn Viaduct
    • Newgate Street
    • passes St Paul’s Cathedral
    • Cheapside
    • Poultry
    • Cornhill
  • From the south-east corner of Hyde Park, which is called Wellington Arch, we have Piccadilly going east (and a bit north), to Piccadilly Circus. It then continues as:
    • Coventry Street, Swiss Court, Leicester Square
    • Cranbourn Street, Long Acre
    • Great Queen Street
    • Crosses Kingsway
    • Remnant Street
    • Joins Lincolns Inn Fields
  • Also from Wellington Arch, Constitution Hill goes directly east, to Buckingham Palace and The Mall, then to Trafalgar Square

North-south roads

  • Edgeware Road comes in from the north, and passes Kilburn, and changes names several times, and back again
    • At Marble Arch, it becomes Park Lane
    • At Wellington Arch, it becomes Grosvenor Place
    • At Victoria, where there is a coach station I’ve used in the past
    • Not quite as a direct continuation, Vauxhall Bridge Road leads on from Victoria
  • From Regent’s Park, Portland Place goes south, and becomes Regent Street, which leads to Piccadilly Circus
  • Camden High Street comes in from the north, and:
    • becomes Hampstead Road at Mornington Crescent
    • crosses Euston Road a bit west of Euston Station
    • becomes Tottenham Court Road
    • crosses Oxford Street
    • becomes Charing Cross Road
    • passes Trafalgar Square
    • becomes Whitehall, and Parliament Street
    • runs to Parliament Square and Westminster Abbey, where Westminster Bridge almost joins it
    • continues as Old Palace Yard, Abingdon Street, and Millbank
    • Lambeth Bridge joins it
    • then Vauxhall Bridge
    • then it heads west, as Grosvenor Road
  • Gower Street parallels Tottenham Court Road
  • Eversholt Street splits from Hampstead Road at Mornington Crescent
    • at Euston Road, it becomes Upper Woburn Place, then Tavistock Square, Woburn Place, Russell Square, Southampton Row
    • at Holborn, it becomes Kingsway, which passes near Lincoln’s Inn Fields and runs to Aldwych
  • Gray’s Inn Road starts from King’s Cross, and runs to Holborn

South of the Thames

I can’t make this into anything like a grid.

Radially from Elephant and Castle

  • St George’s Road goes west-north-west, and merges with Westminster Bridge Road, to Westminster Place, which is near Forum Magnum Square and near Waterloo Station, and from where Westminster Bridge heads west
  • London Road goes north-west, to St George’s Circus, where it splits:
    • Waterloo Road goes to Waterloo Bridge
    • Blackfriars Road goes to Blackfriars Bridge
  • Newington Causeway goes north and slightly east
    • It becomes Borough High Street, and goes over London Bridge
    • Southward Bridge Road leads off it, and goes over Southwark Bridge

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.


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.


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. 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

$ 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


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.


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.


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


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 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


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

Co-ordinating developers and tasks

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.


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)


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.

– 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.


Get every new post delivered to your Inbox.