Build your own CPU with RISC-V and a Lattice ICE40 FPGA

I’m giving a workshop next week on how to build your own RISC-V CPU within a Lattice iCE40 series FPGA using the awesome Icestorm framework by Clifford Wolf. We need two toolchains here in order to create both the processor and the code to run on it, and we will build EVERYTHING here from source. You can download the VM here– which obviously you do at your own risk, you should abide by all the relevant license terms, and you should really use only for educational purposes.


Stage 1: Create a VM

The main issue with running up your own RISC-V cores is having the toolchain ready to go. So I’ve created an Ubuntu VM, based on 18.04 minimal and running within Oracle VirtualBox. I chose minimal because it’s lightweight, small and will have a reasonably manageable footprint when putting the VM on a USB stick, and because Ubuntu is my native Linux distro. The choice of VirtualBox was down to it’s cross-platform compatibility and the fact that it’s free to use. The VM is configured for 4Gb RAM and 30Gb HDD, AMD64 CPU, with nothing fancy on top. In order to facilitate cross platform compatibility and carrying it round on a USB drive, I’ve also set the HDD to be split across 2Gb files, since some file systems have a restriction on the maximum size of a single file. The total size of the VM comes to >17Gb, so make sure you have plenty of hard drive free!

I created the username “risc” with the password “Lattice”. I don’t generally advocate writing your username and password on a blog, but this is a special case. Evidently don’t leave this VM running, or give it open ports to the outside world when you are using it!

Stage 2: Configure the VM

Once the VM has been setup, it’ll need the icestorm toolchain installing in order to program the FPGA. This comprises a number of things in more or less the following order:

stack for fpga

1. FTDI drivers from here. It’s a .tar file, so you’ll need to unzip it a couple of times and then follow the instructions for how to copy the driver files in to your system directories as a super-user.

tar xfvz libftd2xx-x86_64-1.4.8.gz
cd release
cd build
sudo -s 
cp libftd2xx.* /usr/local/lib
chmod 0755 /usr/local/lib/
ln -sf /usr/local/lib/ /usr/local/lib/

2. Packages to make everything work in Ubuntu (note I’ve added libeigen3-dev, not included on Clifford Wolf’s page, since I needed it):

sudo apt-get install build-essential clang bison flex libreadline-dev \
                     gawk tcl-dev libffi-dev git mercurial graphviz   \
                     xdot pkg-config python python3 libftdi-dev \
                     qt5-default python3-dev libboost-all-dev cmake libeigen3-dev

3. The Icestorm toolchain components from here:

4. A sample program to check we’ve got the FPGA compilation working, before we move to RISC-V compilation, from here. I cloned this code into a directory called flash, compiled it and uploaded it to my device to make it flash the leds in sequence. It worked first time, after I connected the USB device to the VM.

It’s worth noting at this point that I haven’t installed Icarus Verilog, since it isn’t strictly required to compile to the target, but would be needed if we wanted to test things! If I get time I’ll add it to the VM. Thanks to Oliver for pointing out this nice FPGA toolchain installation script.

UPDATE: I just added Icarus Verilog (V10) built from source and the Icicle repo for some better Upduino support. The Icicle serial output doesn’t seem to be working when flashed to target, but it does make the LEDs light up on the iCE40HX8K and Upduino boards. I also added minicom and picocom for serial monitoring.

Stage 3: RISC-V

Now that we’ve got a working toolchain for the FPGA, we need to build a working RISC-V compiler in order to have code to run on our chip. I installed Clifford Wolf’s Picorv32 from here. This basically takes you to the RISC-V mainline toolchain and picks out a particular revision and only the compiler required for smaller/less capable cores. When compiling it for the first time, I was stuck for a few hours on the ../configure line pre-compile to insure that the /opt/riscv32i toolset is used (the other toolsets are not compatible with the iCE40HX8K FPGA due to size restrictions), but eventually figured it out.

What we are actually building in this stage is an add on for GCC that will enable us to compile binaries for execution on our soon to be created RISC-V core. There’s no point having a CPU if we can’t aslo compile code for it from a high level language.


RISC-V implementation on iCE40-HX8K, image taken from the PicoSoC presentation given by Tim Edwards, Mohamed Kassem and Clifford Wolf at the 7th RISC-V Workshop, November 2017.

I followed the instructions in the picorv32 repo as follows:

git clone picorv32

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev \
        libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo \
    gperf libtool patchutils bc zlib1g-dev git libexpat1-dev

sudo mkdir /opt/riscv32i
sudo chown $USER /opt/riscv32i

git clone riscv-gnu-toolchain-rv32i
cd riscv-gnu-toolchain-rv32i
git checkout 411d134
git submodule update --init --recursive

mkdir build; cd build
../configure --with-arch=rv32i --prefix=/opt/riscv32i
make -j$(nproc)

Stage 4: Hardware

Now the software is all ready to go, we just need a hardware platform to run it on.

This tutorial is designed to run on one of the following demo boards:


The Lattice iCE40-HX8K evaluation board, available from Digikey.


The UpDuino, available from GnaryGrey.


And the BlackIce II designed by a couple of awesome guys in the UK!

Stage 5: Compile and upload

Everything is very nearly finished. Except it doesn’t work just yet. We also need to install the VirtualBox expansion pack in order to access USB2 devices. We can download it here and add it via the GUI.

Then we need to ensure that we can find the compiler for RISC-V, which we can do by adding it to the PATH environmental variable:

export PATH="$PATH":/opt/riscv32i/bin

If you fail to do this, you’ll get a tonne of “riscv32-unknown-elf-gcc command not found” errors until you correct it. Make sure you don’t wipe out the path variable in the process!

And just to make sure we can access the device, let’s add our user to the dialout group:

sudo usermod -a -G dialout risc

With all of this in the bag, we need to ensure that our VM is connected to the USB hardware, which we can do via the menu or the USB attachment icon in the bottom right of our VM window. We should enable the Lattice device, and then we can complete our build and upload with the following commands:

cd /picorv32/picosoc
make hx8kprog

If everything works as it should you’ll see various messages about compilation and programming of the device, followed by “VERIFY OK cdone: high… Bye.”. The LEDs on your board wil blink about once a second. Note that there are several options for alternative things to do in the /picosoc directory, all without yet writing your own code or core, they are detailed in the makefile in the picosoc directory which is definitely worth reading.

It’s worth noting that I couldn’t get my permissions quite right so I had to cheat a little for access to the USB device to do the final upload, but calling make hx8kprog as sudo. Not the best technique, but it worked!

Conclusion – Testing the CPU

At this point I chose to unplug my FPGA dev board from the virtual host and hook it up to a real one (with the drivers installed of course!) to check that I’d actually built the core and it was working properly. I launched my trusty Arduino IDE and fired up the serial console, baud rate 115,200bps on the correct COM port and was greeted with this:


We have now built a working RISC-V core on our FPGA board and programmed it with some compiled code. I’d like to thank the awesome Clifford Wolf for basically making it all possible (he wrote the core we used to implement RISC-V and the ICESTORM toolchain we used to generate and upload our bitstream) and RMWJones for posting some very useful scripts that helped me along the way.


Tagged , , , , , , , , , , , , , , ,

MQTT and Round Robin DDNS

Last weekend I set up a round-robin DDNS system for internet connected Cosmic Pi devices. Here’s how I did it, but first let’s find out why this is useful.

For Cosmic Pi we’re trying to build a scalable, global infrastructure for cosmic ray detectors to connect to. We don’t want to reinvent anything, just to use a suitable existing technology. This is where MQTT comes in, it’s perfect for our use case. With one or two brokers, we can connect many clients and everyone can share the data. We could even use topics for remote configuration messages, but that is for the future. For reference, our MQTT journey started with RabbitMQ and we’re using Mosquitto these days.

As a figure of merit, a Mosquitto MQTT broker can cope with 1000 publishers or subscribers. I read this on the internet, I’ve no idea how true it is at the moment. 1000 isn’t a large number for a global cosmic ray telescope, so we need to add more capacity.

We also don’t want a single point of failure. The broker has been running on my home server for the last year, which is great for testing but not exactly high reliability territory. So figuring out a way to have two, parallel and synchronised brokers would be an ideal solution to scalability and reliability, enter round robin.

I’ve been using DDNS (Dynamic Directory Naming Service) for a while now to get remote access to my home servers. For those unfamiliar with the service, it allows you to associate a domain name with a dynamic IP address (V4) and update it every time your IP changes. So (for example) always points to your home IP, even if your ISP changes it. Of course a local client of some type is needed to ensure changes get propagated to the DDNS servers, but fortunately many routers (especially those running DD-WRT) support this out of the box.

Originally the service for Cosmic Pi MQTT ( used a single DDNS hostname linked to one IP. To implement a round robin using the excellent free service provided by, all you have to do is create a second sub-domain with an identical name and link it to a different IP. Round robin requests are handled automatically, so the first request gets directed to IP address A, the second request to IP address B and the third to IP address A etc. Of course fail-over in this scenario relies on the client detecting a server failure and requesting a fresh connection, but this is not an unreasonable expectation. If we lose a few cosmic rays it’s not the end of the world as long as the service stays available.

Once two MQTT brokers are running on each of the IP addresses, only one more issue remains. The MQTT brokers must be linked, otherwise what happens on server A stays on server A and the same for server B. Fortunately Mosquitto makes bridging easy, but we have one more hurdle to overcome first.

In order to bridge the two MQTT brokers, one must be able to refer to the other by a unique DNS name (i.e. can’t be used as it alternatively points to both servers). We could do a little bit of script magic to ask for both IP addresses, then sort out which one is the remote server, but amongst other things both servers are behind NAT (network address translation) so a third service would be required to resolve the internet facing IP for the local host. The solution I implemented was to simply have a second unique DDNS name for each server, which is kinda handy anyway if you want to SSH for remote administration. Under this configuration, we can explicitly bridge either server A to server B (or vice versa) without introducing any dependencies on additional services.

We now need to add a bridge command to server B so that messages it receives are shared with server A, and that it also subscribes to those messages being received on server A. In this way both servers have a complete copy of the data at any time. If server A goes down, the clients will eventually (depending upon the timeout we’re looking at milliseconds to minutes) request an update from the DNS server and end up being connected to server B. It doesn’t matter too much what happened to server A and the bridging, because server B will now be getting all the messages anyway.

This method has limits, specifically if all users are switched to just one server it must be able to cope with the demand, i.e. we are probably fine for 500 users on each server. I’m not sure why or if it’s possible to bridge multiple servers beyond two, I couldn’t find any examples. If we end up with a lot of Cosmic Pi units out in the wild we will find out!

If you want to try the MQTT service running for Cosmic Pi you just need to get an MQTT client and connect to on port 1883, then subscribe to # for all the messages!

Open Auto (an adventure in open source, open hardware community car sharing)


Just over a year ago, I attended a Geneva Smart City hackathon at the HP campus in Meyrin. I confess that my primary motivation for attending was to see inside the HP office, because I was curious! I brought with me a couple of Dragino LoRa expansion boards for Raspberry Pi and I pitched the project of creating an easy ‘how to’ guide for people looking to set up their own LoRa networks, mostly because it’s something I’ve wanted to do for a while and haven’t gotten round to yet – and because I think it would be very useful for many open source, open hardware, smart city projects. It turns out that The Things Network has actually made some great strides in this area since (and probably even before) – worth checking out for your LoRA projects. Nobody was interested in my pitch, so I went and joined a team of people with a problem who were looking for a solution.


At the time the project was called Open Auto, but it’s now morphed into Comobilis. The aim of the project is simple, to build an open infrastructure for community car sharing. This particular post is about a hardware platform for community centric car sharing. It’s not a box designed to allow you to share your car with random strangers, like airbnb for cars, because I’m not convinced that’s such a great idea.

Time for some hardware!


If you’re going to share cars, you will need hardware. The main driver is a way to open and close the doors securely. This means hardware, and software. You can put the keys inside the car, you can put them behind the sun visor, you can chain them to the seat if you want. What is important is making sure that the car doesn’t need ‘undue’ modification – we’re not car hacking here (yet).

The simplest solution which works for most modern cars is to borrow the RF transciever from the keyfob. With a little bit of soldering, this can be wired up to a couple of relays to simulate a human pressing the open and close buttons. This provides a near universal interface for the car, which is as physically secure as the original key transmitter. In the future, it should also be possible to open and close the doors via CANbus, however a lot of manufacturers keep this information secret, as you could use it to steal cars rather easily.

The other required hardware items are a GPS to locate the car, and potentially track it in real-time (or check if anyone is speeding – it’s certainly possible, if not yet implemented), an RFID reader to allow the use of pre-registered tokens to trigger the door opening and closing, and an accelerometer, to allow the driver’s behaviour to be modified (it’s a great way to see if they are Driving Miss Daisy or driving like a bat out of hell).  To complete the system, we need some communications devices, including a CANbus transceiver, which can be used to read and write to the car bus (if we feel the need to) via the OBD-II port which is mandatory on all modern cars sold in Europe, a way of powering everything from the car’s 12V battery – conveniently also provided by the OBD-II port, and a means of wireless communication with the outside world.

After briefly flirting with the idea of an Orange Pi Zero and a 3G dongle, we settled on the Particle IoT ecosystem, specifically the Electron module. This provides a 3G modem and STM32 microprocessor, complete with a cellular data contract, management platform and Over-The-Air firmware upgrade capability (the last part is very useful, meaning that you don’t need to plug into each car to fix bugs or add new features).

Designing a board

All this hardware could be integrated, more or less onto a single printed circuit board. Here is the first attempt, complete with some assembly comments from Seeed Studio who built it:

open auto v1

Version 1 being assembled.

The downside of carrying round a linux box in your car is that it needs regular patches to keep it secure. These can run to tens of megabytes a month, which could be expensive on a 3G data contract. I was also concerned about the stability of the system, given the high temperatures that occur inside cars during the summer (such as today, where it’s 30 degrees outside here in Geneva and probably over 40 inside every car in the car park). The Orange Pi Zero is very cheap, however there have been some reports of thermal issues – so putting one inside a car and relying upon it to open the doors is probably not the smartest move. The PCB also had an issue with the pinout of the 5V to 3.3V level converter, which was pinned out incorretly as I didn’t read the data sheet thoughrouly enough. You can find the hardware (Eagle) for the first prototype here.

After some testing with this board (and also realising what a pain it was to prep OS cards for the Orange Pi Zeros), we decided to take things a stage further with a new design. The major flaw in the inital design was the use of an on-board GPS antenna, which failed to acquire any signals – making it rather useless. You will see that I included a footprint for an external GPS antenna on the V1.2 board as a reaction to this.

Re-designing a board

openauto design


Version 1.2 being assembled.

The new board was designed around the Electron and Photon modules from Particle, inspired by some work we saw from The use of the Electron allowed us to power most of the board from it’s Lithium Ion battery, however in the first production run the relays (for opening the doors) were still driven by 5V – I’ve since found a 3.3V relay, and the board is equipped for this with a jumper to switch the supply, so future versions won’t need the car to be providing +12V in order to open the doors.

The Bill Of Materials (BOM) for the PCB includes everything needed to assemble the PCB, which is a relatively simple 2 sided design. There are some optional components not included such as the SMA jack for an external GPS antenna which you may want to add if this is something you are looking for. In addition to the board, you will need a CR1220 lithium cell to power the Real-Time Clock and an RFID reader module (it was designed with the 5V RDM6300 or the 3.3V SEEED SKU 113990041 module in mind, there are also several equivalent 3.3V UART RFID readers at 125kHz available from places like Sparkfun or Aliexpress.

I initially started using the board with the key fob to my own car (an old but reliable Peugeot 307), which happens to carry the key battery on the key PCB. It turns out that most other cars don’t do this, using the plastic key casing to accomodate the battery – so for these it’s possible to jumper the 3V non-rechargeable lithium cell on the board to supply the key.

For the next version, since everything was more contained, I designed a case to go around it. The case material is laser cut acrylic, since it was cheap and allowed you to see inside the box, which I think is cool!


An assembled case with the brown paper still attached.

All that was left was to put it all together in the box and start writing some software. Oh and of course test the circuit board! It worked as expected, with only one small snag in the first production run – a missing connection between the I2C SDA and SCK lines from the Particle boards to the RTC and Accelerometer.


The finished article! Version 1.2.

The picture above shows the completed box, fully assembled with an electron module and the RFID card reader module + antenna. In fact this configuration has since been modified to rotate the loop of the RFID antenna away from the GPS as it was causing interference. Moving the antenna totally out of the box is on the to-do list for future versions.

The design files for the Version 1.2 unit are available here, complete with the case.  The software remains a work-in-progress. The hardware is fully open, licensed under the CERN Open Hardware License V1.2. You can find a relatively recent sketch here. Of course this is only part of the solution to community car sharing, it’s necessary to have a back-end which can host reservations, billing and user information, co-ordinate with the vehicles to make sure they are in the right place at the right time and allow a way to sign up new users. The Comobilis team are using Odoo, an open source ERP and PLM platform to build free extensions to connect to the hardware and provide the necessary software and interfaces.

Comobilis Logo final single_with tagline

If you would like more information on this project please drop me a line or check out where you can find out about starting your own car sharing co-operative. The co-mobilis initiaive is initially focused on Switzerland, but the hardware will work anywhere there is 3G signal.

In the present I’m working on adding more functionality to the firmware, completing the way reservations are handled and retrieved to allow people to actually use the vehicles, as well as things like GPS position logging, acceleration and clock functions. In the near future I hope to look at using ESP32 + Lora as an alternative to the Particle modules, taking it closer to the project that I originally pitched! I have also started a company to sell these boxes (and some other exciting open hardware electronics) with some friends, but that will have to be the subject of another post.

How to: Manbrain


I’ve been talking with by better half over the last few weeks about a revolutionary concept in the workplace. It has the potential to increase your effectiveness in the workplace by something between 0 and 100%. It’s the essence of learning to think like a man, that half of the species which has dominated the workplace since the term workplace was invented. So this blog post is probably going to be more useful to those who identify as women, but you never know. I would also like to point out for the benefit of anyone who is exceptionally stupid that this is supposed to be humorous – I don’t really advocate treating women as objects, starting physical fights with managers or the hero-worship of whoever has the biggest one. What is true is that Humans and Monkeys share 96% of their genetic material

To keep things simple, I will outline the 10 simplest rules of the Manbrain.

Rule 1: Keep things simple.


Manbrains are not sophisticated (for sophisticated see Womanbrain). The best way to imagine how they work is shown below, input, process, output. Action generally equals reaction, except when it doesn’t. The Manbrain is rather like a computer in this respect, invalid inputs (anything with an overly emotional, complex or unwelcome content) will be ignored. Inputs delivered in squeaky voices (womanspeak) are also likely to be ignored.


Rule 2: Shouting.

The Manbrain has been tuned by thousands of years of evolution to perform the function of listening. However this is heavily spectrum dependent and is geared towards the lower frequencies of human vocal communication. If you speak squeaky (high pitch, high tone) you will be ignored by the Manbrain.


The best way to communicate with the Manbrain aurally is to do so in deep, booming tones with a slow and regular cadence. You might find it helpful to imagine yourself as a large gorilla when doing this.


Rule 3: Bigger is better.


Manbrain evolution is also heavily focused on being bigger than everyone else in the one area that counts. The key driver is having the biggest one. Whatever that might be, and however it is defined. Manbrain pays attention to the person with the biggest one (the leader). Anyone who doesn’t have the biggest one is small, and therefore irrelevant. Manbrain seeks to make sure that its own one is as big as possible. Manbrain respects others based exclusively on the size of their ones.

Manbrain spends a lot of time thinking about how big it is. Other considerations, such as talent, intelligence, authority and capability are often (but not always) ignored. The one with the biggest is the boss, the boss man, the king, the leader, the head of the tribe, the smartest Manbrain in the social unit, or whatever other great title you want to bestow upon them – I personally like the title chief monkey, and also monkey chief. If you’re going to say it out loud, especially in the presence of the chief monkey, it had better be nice! Otherwise, they will be angry with you (see Emotion). If your tribe subscribes to corporate culture, the one who thinks they have the biggest one might be called a senior manager. Don’t forget that in corporate culture, those who stick around seldom ask questions, such as “Is the senior manager is actually the best Manbrain for the job?”, or “I’m not convinced by your Manbraining. How big is it really?”. This is because the answer is normally that they probably aren’t and don’t. Of course, if you don’t have a big one, you can substitute with a combination of nice toys, a shiny car and an expensive looking woman.


Rule 4: I am the best

Manbrain is very good at ignoring. That’s why Manbrain controls the world. In Manbrain there is no such question as “Am I good enough for this?” or “Will they consider my input as relevant?” or even “Perhaps there are better people for this activity than me?”. Manbrain is always the best.


Rule 5: Ignorance is no barrier to success


I have succeeded despite not knowing things in the past. Therefore knowledge is semi-irrelevant. Facts, could be known ahead of time, or we could just discover them as we go along! We will figure it out. I can do this, because I have Manbrain, and it’s very big, and you are going to help me, because I say so loudly.


Rule 6: I want that, because you have it.


It’s worth remembering that Manbrain is very similar to Monkeybrain. Monkeybrain is marginally less sophisticated (not as good at video games, vocal communication or delayed gratification), but otherwise a great analogue. Sometimes a Manbrain sees something that somebody else has (it could be a shiny new toy, or food, or an expensive looking female) and Manbrain wants to take it away from the someone else, either to enjoy or just to throw away to show the other person who has the biggest one.


Rule 7: Emotion


Emotion is simple in the Manbrain. It’s either Angry, or it isn’t. When Manbrain is angry there’s always someone to blame. Usually it’s another Manbrain who is guilty of the crime of “stupid”. Sometimes this might be the Manbrain with the biggest one. In corporate tribes, the reason for angry emotion is usually a phenomenon called ‘management’, which requires the performance of pointless tasks in order to gain a monthly bag of nuts and berries which can be traded for toys, food or other essential services. Sometimes there’s an emotion called sadness, which is basically the opposite of angry, but sometimes has the same physical manifestations. Sad is highly complex and way out of the scope of this article. If you have a Manbrain and think it might be suffering from sad, try pretending to be angry until it goes away, or you could pick a fight (see Rules 8 and 9).

If you are feeling an emotion that isn’t angry (or sad) then you are over thinking.


Rule 8: How to fight (if you have a big one)


Instant fighting is best done in the open, in a meeting, by shouting and banging the table with your fist. This is how to communicate with the Manbrain that emotion has happened. When emotion happens rapidly, it can overwhelm the Manbrain and starting a fight is the only way to regain control. Just like when an excess of heat and fuel combine to create a fire, which incidentally is a reliable way to tidy up your Mancave or to cook food.


Rule 9: How to fight (if you don’t)


If you think that the person you want to fight has a bigger one than you, or more friends in the tribe, you shouldn’t engage in direct confrontation. Instead you will need to build your own secret tribe, and then when the time is right you should strike. Alternatively, just find someone higher up the tree and offer them a bribe in order to do your fighting for you. The bribe might be loyalty (because everyone else in the tribe is stupid), nuts and berries (this is very crude, even for Manbrain), or occasionally useful information which the Manbrain might be able to use to win other fights, or to exchange for more nuts and berries elsewhere.


Rule 10: Not taking anything too seriously.


In order to keep your Manbrain in good condition, it’s important not to get too stressed. Stress has a negative effect on your ability to Manbrain, and thereby solve problems and command others with your Manbrain skills. If you follow the rules, simplicity, shouting, respecting and searching for bigness, total self-confidence and mastery of emotion (anger, everything else is stupid), then you will be a highly successful Manbrain. You might even be the leader of a tribe one day (regardless of your suitability or even the size of your one)! You’ll certainly do better than anyone who doesn’t have a Manbrain.


In summary, it’s a jungle out there! If you didn’t have the good fortune to be born with a Manbrain (or even if you did), reading this article and using your imagination might help you to succeed in your tribe. Having been part of many tribes over the years, I have known many good chief monkeys  (and some good monkey chiefs!) as well as some totally useless ones too.  Understanding how Manbrain works has definitely been a common characteristic of the best chief monkey’s (both male and female) I’ve had the pleasure of banging rocks together with. Good luck Manbraining.




Tagged , , , , , , , , ,


A van pulls up outside of your house. Three men in uniform get out and come to your door. They say you have to go with them, because you are an illegal immigrant. They put you in the back of the van and drive you to a detention centre, where you will remain until you are flown to a country you barely know.

But you aren’t an illegal immigrant. You are a citizen.


I’ve been reading about the Windrush scandal for a couple of weeks now. It blows my mind how cruel, out of touch and incompetent the British Government can be – to its own citizens.

Let’s be clear about some things:

  1. We’re talking about individuals who were in the UK legally.
  2. They weren’t always able to provide proof they had been in the UK for the required duration because: a) The government destroyed a significant amount of the records, b) the government wasn’t accepting government issued paperwork, c) public sector workers in charge of administering the system had been specifically instructed to make things as hard as possible for the applicants.
  3. Legal aid budgets have been savaged since 2010, making obtaining subsidised legal advice a virtual impossibility for anyone who isn’t “rich”.
  4. Appeals were systematically rejected by the Home Office, regardless of legitimate grounds such as the right to a family life, under the Universal Declaration of Human Rights to which the UK is party.

There’s no world in which it’s OK for governments to send out vans of uniformed men to detain and deport their own citizens. These actions were illegal and have caused untold human suffering to as yet uncounted hundreds and perhaps thousands of British citizens.

Call me naive and idealistic, but the government makes the law. In this instance the government broke the law. Governments are also supposed to act in the best interests of their citizens, which is the exact opposite of what happened in this case. When laws are broken there should be some sanction against those individuals who break them, and when democratically elected governments act against their citizens those governments fall. But this isn’t the end of the story.

A report by the Electoral Commission published late last year suggested 3.5 million voters (7.5 per cent of the total electorate) would have no valid form of photo ID.

Legal aid restrictions have cut access to the justice system. Voter ID, being rolled out in the UK next month in a few pilot areas, is about to do exactly the same for democracy. If 3.5 million citizens are denied the vote, everyone loses.

I’m no statistician, but even a government minister can see that 1) The groups most affected by the illegal deportations of the Windrush scandal are disproportionately black and poor and 2) The groups most threatened by Voter ID are disproportionately poor and black (don’t just take my word for it, that’s from the UK Equality and Human Rights Commission in a leaked letter to the government). All of this is out in the open now, thanks to some persistent and brave journalists, but so far it looks like nothing is going to change.

What’s next for the UK? I don’t know, but it it’s not good…

Tagged , , , ,

Places to go drinking (and a few other non-alcohol based activities) in Geneva

It’s been a while since I updated my ‘things to do in Geneva’ list, I have a friend visiting this weekend so now is a good time.

Where to start? La Petit Reine!

It’s right next to Cornavin station. Wrap up warm as the inside is tiny so you’ll probably end up standing outside. If it isn’t too busy, check out the upstairs for a tiny little room that sometimes has a DJ. What to drink? They often have beer from La Nebuleuse or Pere Jakob on tap. They do a few bar snacks but it isn’t great for food. A good bonus upgrade for your pint is the shot of ginger cordial, if you like ginger. The vin chaud is also a great call in winter.

Next – It’s only open on Saturday mornings and a long way from anything, but Pere Jakob is definitely worth a visit.

Pere Jakob is a micro/mini-brewery located in the Geneva countryside. They only sell beer by the bottle (and there’s a 10 CHF deposit on the bottles + the cost of the beer), but you can do free tasting on site, Friday evenings and Saturday mornings. Normally they have Blonde, Ambree and Blanche available, all organically produced.

If you fancy a cocktail (which are pricey in Geneva) I would recommend:

  1. Le Verre A Monique – Great when it’s quiet, vintage glassware. Can get SUPER crowded on Thursday/Friday/Saturday, especially later.
  2. Barbershop  – Just round the corner from Le Verre A Monique, comic book decor and a more relaxed/bar type atmosphere. They also serve a good selection of food.
  3. Atelier Cocktail Club – Over in Eaux Vives, classy and a good selection of cocktails.

If you’re in the Eaux Vives neighbourhood you should also check out Yvette de Marseille, a great little bar just round the corner from Atelier Cocktail club. It’s a friendly place that’s quite large so room for a group of people. I think they also do food…

Another favourite of mine is Cafe Remor, at the point of Plainpalais. It’s a great place for a quiet drink of beer or wine, they do good food, excellent ice cream and nice mint tea.

If you fancy a non-alcoholic drink I would recommend Gilles Desplanches at Molard for hot chocolate and cake.

There are a lot of expat bars in Geneva, they tend to be pricey and full of English speakers. The advantage is that you can order in English and watch international sports. Here’s a run-down in order of my preference.

  1. Lady Godiva – at the other end of Plainpalais from Remor and just a little round the corner. Good pub quiz on Monday evenings. It’s not cheap. Good food.
  2. Pickwicks – overpriced beer, plenty of space, it’s in a basement though so extremely dark. Slightly less good (I used to go there when I first arrived) pub quiz on Monday evenings.
  3. Britannia – Opposite Cornavin. It’s like a lounge inside. Not really the place for a rowdy night of drinking.
  4. Lord Jim – I think I’ve been here once?
  5. Les Brasseurs – Basically it’s an ex-pat pub. Overpriced beer, but a great location facing the main station.
  6. The Clubhouse – I went there once. It was noisy. The beer was expensive. I didn’t like it.

Finally, some other places which don’t quite fit into any of these categories:

Brasserie du Molard – a microbrewery, sometimes the beer is good, sometimes not so great. They do a good flammekueche. Also not to be missed is Pizzeria Ristorante Molino next door, great pizza (but fairly standard Geneva prices).

Brasserie Lipp – it’s a restaurant that’s big, open on Sunday, and you can probably get a table without a reservation so long as it isn’t peak time. Great for seafood, excellent mille-feiulle.

Spring Brothers Irish Pub – I’ve only been here once or twice since I used to frequent it as a summer student in 2005. It’s a really interesting building in the old town, consisting of several houses with interconnections through walls. The vaulted basement is also very cosy. Great Guinness, as you would expect. They also often have live music. It used to be an expat pub but since re-opening a couple of years ago has a very mixed crowd which is always nice.

Cafe Arts – A nice restaurant in Paquis. They do great food and good vegetarian options, just don’t ask for a Martini (you’ll get something poured out of a bottle of Martini, rather than a proper cocktail). Cosy atmosphere and lots of cultural and alternative events are publicised on the walls.

Restaurant 5 Portes – Does a great job of straddling the restaurant/bar frontier, with more of a restaurant bias. Excellent food and very delicious deserts. One of my favourite places in Paquis, just round the corner from Cafe Arts.

The Hamburger Foundation – It’s a restaurant. They don’t take reservations (so be prepared to wait in line). Great burgers and the best Martini in town.

Luigia – simply the best pizza restaurant in Geneva (even all the Italians in town agree). It’s relatively expensive, but incredibly delicious and the deserts are out of this world. Reservations obligatory unless you want take-away. I’m still indebted to Sameer and Mascha for showing me this place last year and treating me to a fantastic pizza.

Holy Cow – Sometimes it’s hard to remember that there wasn’t always a Holy Cow in Geneva. It’s a mid-low priced (for Geneva) burger restaurant, cheap and cheerful decor, student discounts and good beer made by a microbrewery in Lausanne. It’s basically one of very few places to go and eat before you go out drinking, or if you just want a low key meal outside of your house.  Sometimes it smells of burned hamburger.

How to: Forge metal

A couple of years ago now I taught myself how to do rudimentary metal forging using videos from the internet and the occasional digitised book. Here’s the summary of how to do it if anyone else wants to have a go!

Warning: Learning to forge things in metal is dangerous, you should proceed with caution at all times. In particular you risk setting fire to things (including yourself), burns, self inflicted stab wounds and other nasty things if you aren’t sensible. 

Safety items you should have to try forging: A head mounted welding face mask (you will need both hands). Flameproof overalls (I use Nomex ones, also remember to wear natural fibres underneath just in case). Leather welding gloves. Tongs for manipulating very hot things. A face mask to protect you from projecting molten metal is also a good idea. A leather apron can also be useful as it’s comparatively resistant to molten metal. A bucket of water handy is also a very wise precaution.

Step 1: Decide what you want to forge.


This weekend I decided to forge a moon pendant, based on the above sketch.

Step 2: Carve it in wax. I used a tea light from IKEA, vanilla scent, however you can also buy proper (harder) carving wax from specialists. If you want high detail, this is a must! You can also buy it in pre-formed ring blanks. Be careful when cutting the wax, I’ve previously cut myself quite badly doing this using an Xacto craft knife, but fortunately it’s healed now!

Step 3: Cast the mould. For this you should find a tin can (aluminium or steel) that’s big enough to hold the wax piece. If you’re only detailing on one side then an open mould is fine, stick something on the top of your model to allow it to be rested on top of the can. Otherwise, for more complicated castings such as rings, you should include a sprue and a cone on the top of the mould to allow you to pour in the liquid metal. To make the mould, I used pure plaster of Paris, however you can/should also add some sand to improve the strength of the mould. It’s a good idea to tap the side of the mould vigorously to ensure that any bubbles on the wax model get dislodged. Ideally you should put the mould under a vacuum to remove all air bubbles, but vacuum pumps are hard to come by. I’ve managed without one so far.

Step 4: Wait for the mould to dry. There’s no shortcut for this.

Step 5: Bake out the mould to melt the wax and ensure that the plaster/plaster+sand mixture is fully cured. You might want to build a mini kiln for this, here’s mine. 20170722_195429

It is constructed from a concrete air brick, sawn in half and then drilled to create a cavity and a connection point for a heat gun. It has a top half which is the same, but with a small vent hole instead of the inlet. Here is a picture of the completed kiln.


Note the small hole on the top for the hot air to come out of. I placed the cured mould, complete with the wax model, upside down in here for about 30 minutes to bake it and melt out all the wax. You could probably just pour in the molten metal, but baking out seems to be more reliable.

Step 6: Whilst the mould is baking, you can set up your furnace. I used an arc welder, since it’s easy to get hold of and runs on easy to handle electricity rather than anything chemical (coal, propane, etc.). To turn the arc welder into a tool for forging, you should remove both the ground clip and the welding rod holder and replace them with large metal mole grips. These can be used to hold the electrodes and/or a crucible. I would recommend using a graphite crucible and graphite rods extracted from 6V ‘lantern’ batteries – be careful not to crack them while extracting them from the 4 zinc housings within the battery. It’s also worth noting that if you obtain them this way, they will be coated in a paraffin type wax which will burn off after the first time you strike an arc.


Here is my ‘workbench’ you can see the arc welder is the yellow box at the end, with both electrodes replaced with mole grips. I used a small part of the concrete air-brick as a stand for the crucible, here’s a close up also complete with my cracked crucible which I disposed of after this casting and the mole grips holding carbon rods:


Step 7: Melt the metal. For this step I can highly recommend using some borax as a flux, you can buy it (normally) from your local chemist. It’s not the nicest of chemicals, even though it was used as washing powder in the 19th century, so use sparingly (a light dusting in the crucible is plenty I find) and handle with care. Next add your metal in small chunks that fit in the crucible. For this project I used some silver elements I had left over from another project. Silver is cheap, at least compared to Gold, and melts a lot easier than Copper. Beware of metals containing Zinc as breathing in the vapour can give you the shakes and fever like symptoms. Copper is VERY HARD to melt, and once molten, re-solidifies almost instantly. I started practising with it and was mightily relived when I switched to casting in Silver.

Step 8: Pour into the mould. You should remove the mould from the kiln and place it next to your crucible workstation before attempting this. Pouring the metal in is surprisingly difficult and you really don’t want molten metal splashing or pouring onto anything else (you, clothes, wood, anything that will melt or burn). Once you’ve melted the metal, be sure to lift your welding visor otherwise the mould will be invisible (along with anything else that isn’t an electrical arc or glowing metal).

Step 9: Apply the plunger (carefully!). If you look carefully at the photo of my workbench you’ll see a broken stick of wood attached to the lid of a jam-jar. This is my plunger for steam casting. When you have poured the metal into the mould, you can push the plunger down on top to generate steam and force the metal into unoccupied parts of the mould. You should prime the plunger by stuffing it with newspaper and then wetting it (in your safety bucket of water). However, if you are casting in an open mould, there’s limited benefit to the above, as assuming you used a sensible amount of flux, and it’s hot enough, the metal will naturally fill the mould. In this case, I was overzealous and plunged the plunger down onto my filled mould whilst the Silver was still liquid, creating the following mess:


You can see the blobs of molten silver that were pushed out by the steam, and the blackened lump in the centre is what I pulled out of the mould itself, which was also looking rather worse for wear. It’s worth noting that metals, generally, can be purified and re-cast even when they look rather messy. The impurities will either burn off or sink to the bottom of the crucible.


The mould, after use. This type of mould is only intended for a single use. However since I was in a hurry (never cast in a hurry!), I decided to re-use it and modify my original design somewhat. I placed the lumps of silver into the mould and created an arc between the two electrodes in close proximity to the mould (1-2mm max), in order to re-melt the silver into the mould. This worked very well, though changed the nature of the end product.

Step 10: Quench and finish. After re-melting, I was careful to wait for the casting to cool before dropping the whole mould in my handy nearby bucket of water. After a few seconds bubbling, I retrieved the cast using a pair of pliers and tidied it up using a grinding wheel and a wire brush polishing wheel. Since the mould had been abused during the two pours of the casting process, there were some fragments of gypsum (plaster) embedded in the surface of the final cast. These soon came out under the polishing wheel whilst I was improving the overall shape and look of the piece. 20170722_195339

Here is the front of the finished pendant, with a very lunar surface look to it. There’s a 2.4 mm hole drilled into the top for the silver chain, at a slight angle to help it sit ‘moon side up’ when worn as a necklace. I didn’t cast/make the chain, as that’s far too much like hard work, instead buying it from a local jeweller.


I polished the back side of the pendant to a much smoother finish, with the idea that it would be more comfortable to wear. During the polishing process it got so hot that two tool marks imprinted into the Silver, you can see them towards the bottom. I decided to leave them as they look rather like footprints to me!

Casting is a lot of fun, however it can be extremely hazardous so should only be done with extreme care. It took me about 3 months of occasional evening and weekend practice before I was able to make my first ‘proper’ cast, and I’m still a very, very long way from even a student level of proficiency. But it kind of works, and I’m very happy with the end result. I’m also not going to give up my day job!

P.S. I must give credit to The King of Random for his excellent Arc Furnace video which was my inspiration for using the arc welder to melt metal!

Tagged , , , , , , , ,

I don’t often write to my head of state…


Way back in February, when Theresa May was over in Washington D.C. and even before she was having her hand held by a certain Donald Trump, she invited him to tea at Buckingham Palace. I didn’t get round to sending this letter when I first wrote it, but since the visit is still on the table, and the Queen is still on the throne, I thought I’d dig it out and send it. Here it is for your enjoyment, please feel free to copy/paste and send your own copies!

Her Majesty The Queen

Buckingham Palace

London SW1A 1AA United Kingdom,

30th May 2017

Dear Madam,

Regarding: The Invitation of Donald Trump on a State Visit to the United Kingdom

As a concerned citizen and subject I feel it is my duty to express my extreme unease at the invitation of United States President Donald Trump to the United Kingdom on a state visit. Based upon his previous public statements and actions since taking office, I do not consider that he would be a fit and appropriate guest of our nation. In my opinion his actions demonstrate that he is clearly an odious individual, of highly questionable character, who fails to demonstrate the necessary respect for human rights and the rule of law which we are fortunate to enjoy in this country.

Indeed, his public statements have on several occasions been extremely close to incitement to violence, encouraged the detention without trial of his political opponents and have frequently been extremely disrespectful to women, as well as religious and ethnic minorities. His refusal to unreservedly condemn torture is just one recent example of his disrespect for international law and treaties which have formed the bedrock of our peace and stability since the Second World War.

I appreciate that in our current situation as a nation we are in need of powerful friends abroad, both to ensure the security of our nation through agreements such as NATO, and with our forthcoming exit from the European Union creating the requirement for new trade deals to safeguard our economic prosperity. However, welcoming such an individual risks degrading the status of our nation, which is perhaps too high a price to pay.

I am in no doubt that you would be a most gracious and accommodating host, to guests of all nationalities and political persuasions as you have been in the past. Furthermore, I am not aware of any precedent where state visit invitations as issued by the government have been rescinded, yet given the growing turmoil in the United States after only a short period of his Presidency, I am convinced that in this case a new precedent of revocation would be fully justified and entirely appropriate. It is clearly not in our national interest to be associated with such a divisive individual, who seeks to build walls rather than bridges with his neighbours.

I urge you as the head of state to take all actions within your power as our sovereign to lobby, the elected representatives of your Government, whoever they may be after June 6th, to ensure that the invitation issued to the President of the United States for a state visit is rescinded at the earliest opportunity. We should not offer succour, less still an official welcome, to those who threaten or toy with the values of democracy, universal suffrage and tolerance which we hold to be the inalienable right of all those in our nation and beyond.

I have the honour to be, Madam, Your Majesty’s humble and obedient servant,

James Devine

Note that the last, rather florid, part is protocol suggested by the The Royal Family’s website.

Being an Astronaut!

So I was having an in depth conversation about what it’s like to be a supposed grown-up with a friend the other day. And I hit on this allegory – which might be especially easy to relate to for almost grown-up people of a geeky persuasion. Here it is, complete with illustrations…


When I grow up…


Every child wants to be a grown-up, mostly so they can be an astronaut. Everyone wants to be an astronaut (or a fireman, or a superhero).

Almost grown-ups definitely want to be an astronaut, because they’re oh so nearly ready for all the challenges and responsibilities (and dangers) that life in space brings.

Real grown-ups however, fall into two categories – the ones who are really astronauts, and those who sit on the sidelines saying that one day they’ll be an astronaut, it’s just not quite the right time yet. They say that they just need something more before they can climb into the rocket, or that the world has let them down in not preparing them for life in space.

It’s not about space or time.


Of course I’m not talking about actually being a real astronaut and going to space in a rocket. I’m just using it as an example of how people 1) say something and actually mean something else and 2) orient their entire lives towards a particular goal and then stall because they’re afraid. It applies to studies, work, relationship, housing – indeed all major decisions that independent adults have to make for themselves.

I’m fairly convinced (after 33 orbits of our sun) that people in the non-astronaut category cannot be made into astronauts, even if they’re given all the space or time in the universe to do it. It might be possible to convert them by just strapping them into a rocket and pushing the big red button, but this post isn’t about coercion.

What does it mean to go to space?

not ready

I want to be a grown-up. I want to be independent, to have my own means of supporting myself (a space station, or a space suit, or a rocket, or a job). I want to make wonderful life choices about where I go and what I do and how I spend my time. I have some things on my mission check-list, which includes everything critical from finding enough food to eat to building myself a nice space house and hopefully filling it with a few little space people.

Careers and relationships are two examples of really long term space missions that grown-ups can go on. Careers are the easiest, because you are entirely responsible for where you drive your rocket ship. So many want to be astronauts just sit on the launch pad, waiting and hesitating about pressing the button because they’re afraid of making a mistake. There are a few who total the rocket by crashing it into mountains, the ocean, passing asteroids or even other planets, but provided you’re still breathing you can always buy/build/steal another rocket. Ejecting from your original career rocket after take-off is going to be complicated, difficult and expensive. But the worth of your career isn’t just measured in rocket-fuel, or gold, or money. After all, we spend the majority of our waking hours doing work, so it had better be at least bearable.


Relationships are a more complicated space mission, because you need to select a co-pilot. Once you’ve chosen and sealed yourself inside a relationship rocket, you’ll either be off to the stars together on the voyage of a lifetime, or one of you will jump (or be pushed) out of the airlock at some point. Interplanetary relationship rockets are generally not very spacious, so you’ll have to be good at living on top of each other,  especially putting up with everything that’s wrong with yourself and your co-pilot, in order to survive. Ejecting from the relationship rocket after take off is a hazardous process, it’s likely to be dangerous, emotionally challenging, destructive to property and friendships, expensive and time consuming. But if you’ve changed your mind about the destination or your co-pilot, it’s time to hold your breath, blow the escape hatch and jump into the void. Until you find a new co-pilot or a nice planet to live on.


I know many people who want to be in the relationship rocket (or at least say so), but don’t actually want to push the big red button because they’re afraid the rocket will explode on the launch pad, or that ejecting from the rocket at some indeterminate time in the future will be too hard, or some other reason I can’t fathom. That’s fine, but if you don’t really want to be an astronaut, saying you do isn’t cool.

I’m bored already. What’s the point of this post?


  1. You’ve (probably) always said you want to be an astronaut. 
  2. Be an astronaut.
  3. The risks are huge, the dangers of failure ever present, but it’s 100% worth it.

The art of being a successful astronaut (or even an astronaut at all) comes down to doing your best, accepting that you might not have packed your favourite flavour of dehydrated ice cream and ultimately, knowing that unless you’ve set yourself on fire in a horrendous space refuelling accident, you can probably recover from whatever mistakes you’ve made so long as you don’t give up.

4. The astronaut who gives up never makes it to their destination.


Galaxy Quest (a totally forgettable movie in many respects, despite an all star cast) has a great quotation – “Never give up, never surrender”.

5.  If you get lost, or break down, call a friend.


Just because the figure of a solitary astronaut fighting against the odds is a wonderful romantic vision of human endurance, doesn’t mean it’s a good model to follow. Probably you know some other astronauts that you can call on the radio who’ve had the same problem with their space ship you’re having right now. They are just what you need to help troubleshoot, and or put you up in the shelter of their space ship when yours is about to explode! Equally, if you’re blessed with sympathetic experts (parents) at mission control (home), make use of available resources.

6. It’s the ride of your life, don’t forget to enjoy it!


Because we only get one shot at being alive, so far. All the really cool people I know either are or want to be astronauts. I want to be an astronaut too. Day by day I’m learning how.

[The End]

My new Chromebook

Those of you who know me personally will probably have heard me talk about how much I like Chromebooks. I like Chromebooks. Not because ChromeOS is amazing, or I love Google (they’re both OK.). Mostly because they are cheap, reasonable quality computers and absolutely because you can run Linux on them. My latest purchase is an Acer Chromebook 14 and here I’m going to describe how I installed Linux on it.


Here’s the outside – very shiny aluminium, I’ve yet to run it under the laser engraver. I’m still trying to decide what I should put on the lid.

whatsapp-image-2016-12-15-at-21-46-27As you can see it has a really nice, vibrant 1080p screen. This was one of the things which sold me on it. I should add that I bought the 4/32GB version with the HD screen. The 2/16GB version comes with a standard definition LCD so it’s definitely worth the upgrade.


To install Linux, first flip over your new computer and void it’s warranty by opening the back. There are 10 screws to remove and the cover will snap off. Note that not all screws are the same length, so be sure to take note for re-assembly.


With the back removed you’ll be greeted by the insides of the machine. We need to remove the write protect screws which prevent modifications to the BIOS. img_20161215_224310

Here is one of the screws, located next to the Wi-Fi module. I unscrewed it, covered the electrical contacts on the motherboard with some plastic (PVC or masking tape would probably be the best thing if you have some), and put the screw back in. Since this laptop has apparently two write protect screws it’s probably better to replace them for mechanical stability into the future.


And here is the other screw, the same procedure applies. It is located at the top of the motherboard next to the battery. When both screws are masked or removed, you can replace the back of the laptop (it will snap into place as you put the screws in) and boot the machine.

First boot into developer mode  – press and hold the Esc and Refresh keys together, then press the Power button (while still holding the other two keys), then at the recovery screen —the screen with the yellow exclamation point—press Ctrl+D. Everything on the device will be wiped and you’ll have to re-login and re-configure the Wi-Fi. When this is done (it might take 2 reboots), head on over to MrChromebox for the bios modification script. I’ve used scripts from in the past, which have been excellent – however the Acer Chromebook 14 (model CB3-431) is a Braswell based device and MrChromebox seems to have the better BIOS payload at the moment. When the device restarts (after you’ve configured Wi-Fi again) don’t login, but instead press CTRL+ALT + => to get into the CROSH shell. The username is chronos and there’s no default password set.

From here you can download the BIOS update and the script to upload it. I flashed a new SeaBIOS (RW_Legacy) and also changed the boot flags to shorten the developer screen to 1 second. After this I rebooted the machine and inserted a USB key with the latest Gallium OS image onboard. Specifically, I downloaded the nightly build targeted for Braswell (so it’s a bit bleeding edge) and then flashed it using Win32DiskImager as per these awesome instructions. When powering your Chromebook back up, make sure that the USB key is inserted and press ESC at the SeaBIOS screen to open the boot menu, from which you should choose USB. From this point Gallium OS installation was straightforward, completed by following the prompts on screen. Unless you perform some additional steps, this process will completely erase ChromeOS from the device and give you a formatted 32Gb eMMC drive with Linux with any free space left for your use. Unfortunately the eMMC (like the RAM) is non-upgradeable.

It’s worth noting that my first choice OS for this device was Ubuntu, however due to some graphics card driver issues, it doesn’t boot (yet). This is why I’ll be running Gallium OS at least until Ubuntu catches up. So far I’m very happy with the new OS, however it’s worth noting that there are still some open issues with Gallium OS on the Acer Chromebook 14, most significantly the soundcard doesn’t work (and in some cases has been melting). I anticipate these things will get fixed in time, however there’s no guarantee. I plan to acquire some bluetooth headphones which will make the sound issue irrelevant for most use cases.


I’m really grateful to Mr.Chromebox and John Lewis, and a bunch of Linux gurus way smarter than me for doing all this work to get Linux running stably on these nice, cheap laptops. I hope this little not very in depth guide has cast some light on the process of installing Linux on your Chromebook and in particular the new all aluminium Acer Chromebook 14. If you do try to install Linux, it’s entirely at your own risk (and you’ll invalidate your warranty in the process) – however, I would say it’s definitely well worth doing if you succeed. Best of luck!