RobotsFuckYeah (all one word)

Read this first

Qubes 3.2 After One Month

Having spent nearly a month with Qubes, this is the record of my observations.


I love the way the system works and plan to keep it. However, performance, especially graphics performance, is the main cause for doubt about keeping qubes. I would probably buy a different laptop rather than stop using qubes, so that’s a fairly strong endorsement!

File Copying

I couldn’t see a progress dialog while copying files in sys-usb, which was unusual. (edit: this was because in the Fedora template the file explorer shows the file copy dialog in the file window, not as a separate dialog).

Also some unexpected behaviour when copying a second batch of files while a batch was mid-copy. It interrupts the first lot of copying. I’m used to FIFO file copy priority, not LIFO.

Browser Cursor

Cursor in browser only shows default, eg no pointer (hand). I find this frustrating, but not a deal...

Continue reading →

Qubes 3.2 Review

I recently installed Qubes OS; this is my experience. In general it’s fantastic and easily facilitates the workflow I had evolved previously using Xubuntu, but effortlessly expands the security and privacy afforded by the qubes architecture.

The things I like most from my first impressions are:

  • Easy management of domains. This is genius, a bit like chromium ‘users’ which I used heavily.
  • The cross-domain clipboard implementation is really elegant, as is the USB isolation.
  • Template VMs are great and the Qubes VM Manager is very useful.


The laptop I installed on is a Kirabook with an i7-4500U CPU, 8 GB RAM, 256 GB SSD.


General Overview

Installation was extremely simple and clear. I found it easier than installing ubuntu, which is very impressive indeed.

Keyboard Layout

Having a keyboard layout indicator at all steps was fantastic, but was displayed...

Continue reading →

Cross-compiling to aarch64

Some info about cross-compiling libsodium and safe_vault from x64 (ubuntu 16.04 64 bit) to aarch64 (pine64 soc running debian 64 bit)

Install dependencies

$ sudo apt-get install gcc-aarch64-linux-gnu

Compile libsodium (v1.0.9)

No longer required since commit 56fca57. Also see the forum post about this.

$ cd ~/Downloads
$ wget
$ tar xfz libsodium-1.0.9.tar.gz
$ rm libsodium-1.0.9.tar.gz
$ cd libsodium-1.0.9
$ export CFLAGS='-Os'
$ CC=aarch64-linux-gnu-gcc ./configure --enable-shared=no --host=aarch64-unknown-linux-gnu
$ make clean
$ make
$ sudo make install

Configure rust for aarch64

ensure ~/.cargo/config has these two lines

linker = "aarch64-linux-gnu-gcc"

Then run these commands to install the aarch64 environment for rust (must use rustup)

$ source

Continue reading →

Universal natural scrolling in Xubuntu 16.04

Using Xubuntu 16.04 with natural scrolling enabling in Settings > Mouse and Touchpad > Reverse scroll direction leaves some apps with natural scrolling and some not. It’s extremely confusing and frustrating and non-intuitive.

To get natural scrolling to work consistently across all apps, uncheck the box in the settings and instead enable natural scrolling in X11:

sudoedit /usr/share/X11/xorg.conf.d/50-synaptics.conf

add the lines in the Section “InputClass” Identifier “touchpad catchall”

Option "VertScrollDelta" "-111"
Option "HorizScrollDelta" "-111"

Reboot and natural scrolling will be applied consistently.


Continue reading →

Raspberry Pi 2 with 128GB microSD


128GB microSD cards work with the Raspeberry Pi 2.

The Card

The card in use is a 128GB Kingston SDC10G2/128GBFR

Check the file system ‘from factory’, which is exfat

ian@ian-laptop:~ $ blkid | grep mmcblk0p1
/dev/mmcblk0p1: UUID="0123-4567" TYPE="exfat"

Check the reported size, which is 118G

ian@ian-laptop:~ $ df -h | grep mmcblk
/dev/mmcblk0p1  118G   17M  117G   1%

ian@ian-laptop:~ $ df | grep mmcblk
/dev/mmcblk0p1 122691584     17024 122674560   1%

The Pi

Raspberry Pi 2 Model B V1.1

Raspbian Jessie with a fully expanded filesystem.

pi@raspberrypi:~ $ df | grep root
/dev/root      120715332 925232 114856388   1% /

pi@raspberrypi:~ $ df -h | grep root
/dev/root       116G  904M  110G   1% /

Fill it up to confirm the full size is available for use (ie check the microsd card is not fake)

pi@raspberrypi:~ $ date; cat /dev/zero > /tmp/zeros; date
Tue Jun 21

Continue reading →

Bitcoin goals, defined by the whitepaper

Engineers weigh different design choices on their merits and choose the solution that best matches the requirements.

The goals of the bitcoin project are outlined in the bitcoin whitepaper.


The goal of being trustless is stated several times in the whitepaper, and can be summarized as:

Online payments can be sent directly between two parties without relying on a trusted third party.

Here’s the direct quotes from the whitepaper about the goal of trustlessness.

allow online payments to be sent directly from one party to another without going through a financial institution

an electronic payment system … allowing any two willing parties to transact directly with each other without the need for a trusted third party

a system for electronic transactions without relying on trust


Irreversibility is a key property of cash and bitcoin aims to achieve transactions...

Continue reading →

Engineering a bitcoin max_block_size


The crucial and unique task of the engineer is to identify, understand, and interpret the constraints on a design in order to produce a successful result.


An engineer finds an acceptable solution within the given constraints of the problem.

For most problems solved by engineering, an upper limit on what may be achieved is set by budget, schedule and technological limitations; the lower limit is determined by the specific functional requirements of the project.

To engineer a useful bitcoin MAX_BLOCK_SIZE value, the constraints must be defined, or there can be no progress made.

Should max block size change?

Before addressing the constraints, an important question must be answered: should there even be any work undertaken?

The answer is maybe. The current value was chosen without any apparent engineering and may or may not be appropriate. Determining an...

Continue reading →

Download Satoshi’s post history

Here’s a simple bash script to download the entire history of Satoshi’s posts on

 Fetch all posts by satoshi on bitcoin forum
LAST_PAGE=`expr $PAGES - 1`
for INDEX in `seq 0 $LAST_PAGE`; do
    PAGE=`expr $INDEX + 1`
     Fetch the page
    wget -O posts_$PAGE.html $URL
     Be a good citizen of the internet
    sleep 1

Now you can use standard operating system tools to search instead of the terrible web-based search which is rate limited and feature limited.

View →

Block Size, the history of choosing 1MB

The bitcoin block size is 1MB. Why was this number chosen? The reasoning of the past may have application to the reasoning in the present and future.

Original Code

The block size is defined in code by MAX_BLOCK_SIZE and is 1000000 bytes.

MAX_BLOCK_SIZE first appears in commit a30b56ebe76ffff9f9cc8a6667186179413c6349 by s_nakamoto on Thu Jul 15 00:18:45 2010

You can verify this yourself:

git log -S MAX_BLOCK_SIZE --source --all

The line of code originally committed was (and still is)

static const unsigned int MAX_BLOCK_SIZE = 1000000;

Historical Context

Let’s get some context around bitcoin at this period of time.

The next release about a day after MAX_BLOCK_SIZE was introduced is version 0.3.1 rc1

Changelogs for bitcoin releases don’t go back to version 0.3.1, they start at v0.3.12. So the changelogs don’t contain any details about this change.

Coincidentally, there was a...

Continue reading →

MaidSafe and the SAFE network explained using bitcoin terminology

This post has moved:

View it on

You can also take part in the discussion of this content on the safe network forum.

View →