Teavent 2016: 3 Wise Teas

In which I belatedly start on my advent calendar...

Let me spin you a tale, dear Reader, of being in the wrong place at the wrong time and stock control. Don't worry it isn't that boring. I was sadly on a last minute business trip last week which means I missed the opportunity to purchase an advent calendar. I figured that I would be able to get an interesting and different one in the States but alas I was wrong. I also figured that I would be able to pick up a discounted one in a UK supermarket on the 2nd after I landed but alas Tesco's stock control meant they didn't even have an awful one left!

I had basically resigned myself to not finding one this year.

On Saturday I popped into London with some friends and thought that I might as well keep an eye out, you know, just in case. Having decided to pop into Harrods to perhaps by tea I came across an advent calendar in the wild. Sadly it was £25 and no matter how great the chocolate that is a bit pricey. Oh well, no advent calendar this year. Mere minutes after resigning myself, yet again, to an advent calendar-less future we happened upon this:

And it was half price!

It was going for only £6.50 in the end.

As I'm behind I'm going to review 3 teas today, 2 tomorrow then get back into a proper one-a-day advent schedule.

#1 - Chocolate Orange

Tea Style: Rooibos.

Flavours: Cocoa nibs, orange peel, cloves, cinnamon, chicory.

Verdict: Can't really taste or smell the chocolate. The orange flavour is there though. Pleasant but also not that festive.

#2 - Christmas Candy

Tea Style: Green.

Flavours: Cinnamon, peppermint, orange peel, chicory, cocoa nibs, vanilla.

Verdict: I'm not sure about the last four flavours as the peppermint really dominates. The cinnamon adds a lovely spicy burn to it that definitely adds a warming feeling. Overall lovely and pretty festive.





#3 - Christmas Pudding

Tea Style: Rooibos.

Flavours: Ginger, nutmeg, raisins, cinnamon, cranberries.

Verdict: Again I'm not sure this really evokes the taste it is supposed to. That being said it is much more festive than the first tea. The spices do come through and it is more reminiscent of a watery mulled wine.





More advent teas coming in the lead up to Christmas...

Tom Out!

Language Immersion: Changing Your Environment

In which I walk you through changing the language settings on all the things!

In an attempt to improve my German I wanted to switch the default language of websites and software I use. Also a friend had just switrched their Facebook over for the same reason and I wanted to give that a whirl. Here's how to do that for some common websites/programs.

There is more info on the effectiveness of language immersion in this reference.[1]


If you want a small amount of immersion Facebook is a good place to start. Your friends' postrs etc. will all still be in your native language so it is mostly the settings and menus that will teach you things. Probably most helpful for dates, times and variations on the words 'comment' and 'like'.

1) Go to your Facebook settings.

2) Go to language settings.

3) Click the "Edit" link next to "Which language do you want to use Facebook in?".

4) Select your preferred language.

5) Enjoy.

Google Chrome

Changing Chrome is probably less useful than changing Facebook but at least you learn the words for 'saving' and all the variations on how to open a tab. Also worth noting many extensions change language based on the Chrome setting so YMMV.

1) Go to Chrome settings.

2) Click on "Show advanced settings."

3) Click on "Language & input settings"

4) Click on "Add".

5) Select the language.

6) Click "Display Google Chrome in this language.

7) Close Chrome and Relaunch it.

8) Enjoy.


Actually a lot more useful than the previous two. Especially useful if you are using the suite of Google apps on a regular basis.

1) Go to your Google account.

2) Select "Language & Input Tools".

3) Click "Add Another Language".

4) Select the language.

5) And the variant.

6) Use the arrows to move the language to the default position.

7) Enjoy.


Changing your OS display language is probably going to give you the most mileage. I have only covered the two versions of Windows I had to hand.

Windows 7

In some versions of Windows 7 you can use Windows update for language packs. In others you will need to download them from Microsoft. Instructions for both methods are in the Windows Help.

1) Go to Control Panel.

2) Select "Clock, Language and Region". Then "Install or uninstall display languages.

3) Go to "Keyboards and Languages" then "Install/uninstall display languages".

4) Click "Install display languages">

5) Using Windows Update select the language packs to install.

6) Wait for it to install.

7) Choose the display language.

8) Enjoy!

windows 10

Language packs are now downloaded directly through Windows.

1) Go to Settings.

2) Go to "Time & Language".

3) Click "Add a language".

4) Select your language.

5) Select the region.

6) Set the desired language as default.

7) Select "Options".

8) Download the language pack (and speech/handwriting if required).

9) Don't forget to add your actual hardware keyboard as it will likely be different.

10) Windows will inform you to log off then sign back in.

11) Enjoy!

Android 7.0 (Nougat)

See above. You probably use your phone OS an awful lot and so maximum immersion.

These instructions should also work in Marshmallow. I don't have a device on 5 or lower to test with.

1. Swipe down to access the gear icon. (You can also head to Settings in the App Drawer).

2. Click the gear icon.

3. Go to 'Languages & input'.

4. Go to 'Languages'.

5. Click 'Add a language'.

6. Search for the language you wish to install. The search accepts the name of the language in your language or in that language of choice.

7. Select the localisation of the language.

8. The language is now installed.

9. Drag the language to the top to make it the default.

10. Enjoy!

And here's a little bonus for getting to the end of the article. Your language choice will affect some apps. Here's what Pokemon Go looks like in German!

Tom aus!


[1] Cummins, J. (1998). Immersion Education for the Millenium: What We Have Learned From 30 Years of Research on Second Language Immersion? In M. R. Childs & R. M. Bostwick (Eds.) Learning through two languages: Research and practice. Second Katoh Gakuen International Symposium on Immersion and Bilingual Education. (pp. 34-47).

Reaper's Bones II: Purple Brightfang

In which I finally start painting my Reaper's Bones Kickstarter models...

This isn't a step-by-step painting guide just a few pics of my first dragon model. I went for a purple colour scheme as it is a present for someone who loves the colour purple.

This is the optional Brightfang dragon model from the Reaper's Bones II Kickstarter.

In the future there will be some painting guides and more pretty pictures.

Tom Out!

WASD V2 104-Key Custom Mechanical Keyboard

In which I receive my keyboard...

In my previous post I discussed designing my shiny new keyboard. Now that it has arrived it's time to review my first month with it.



Ahem, I mean isn't it shiny?* The full colour printing turned out much better than I expected. Also the coloured keycaps matched what I wanted perfectly. The sleek black of the rest of the keyboard looks very nice on my desk too.

*And I don't just mean the reflection of the office lights in the photos.


The Cherry MX Browns are very responsive and frankly it is a dream to type with. Since this is my first mechanical I imagine quite a bit of this is just due to the superior build quality and having proper keys for once.

WASD, however, were brilliant to deal with and sent me a replacement switch when I briefly had an issue. I cannot recommend them enough.

The buttons feel very nice to the touch and as my touch typing improves it is like I am one with my laptop in a way I never was before.

†This was actually a software issue due to changing the language on Windows. Silly Windows.

The Learning Curve

The hardware switch on the bottom of the keyboard activates a hardware Colemak mode. This means I only needed to change the language to US in Windows. For us Brits you can use AutoHotkey to add in the £ symbol on the 3 key.

So the first week I probably averaged about 10 words per minute. That isn't good for a work environment, especially a coding one. Thanks to Tipp 10 I have improved greatly. Firstly, I now don't have to look at the keyboard...most of the time. Secondly, my speed is up to 21 WPM with a 3% error rate. I still need to speed up but the occasional furtive glance at the keyboard helps me get by for now.

‡I ordered a US layout, 104-key keyboard.

Tom Out!

Fluffy Anschluss: Prelude to War

In which Empires are formed...

So the game is finished and now it is time to spin the tale of this Epic Space Contest in SPAAAACE! For people wondering who I was from the last post I was the mighty Xxchariantok!

[As an aside the game was called Fluffy Anschluss II (the first one fell through due to not enough spaces for the players). I didn't name it but the term Anschluss will be relevant in later posts.]

The leaderboard just before Galactic Cycle 3

A New power rises!

So this was my first game and I was eager to build my strength, smite my enemies and hear the lamentation of their women.

I started simply enough by grabbing as many nearby stars as possible until I could see other players. I quickly encountered Neptune's Revenge to my West and then The Limiting Factor to my North. I make quick peace with my blue brethren* and start tech trading with them. We have good relations and it is profitable for us both to have a safe border.

*We have the same in-game icon.

A fledgling empire

My first battles are with The Limiting Factor who has left a highly resourced planet with limited forces. Capturing that it easy but he sends some fleets back at me and my progress is stymied. I decide to open peace negotiations with him which he accepted gladly as he was under attack on multiple fronts. I get another tech trade out of this and then everything changes!

Beset on all sides The Limiting Factor gave up and quit the game. This lead to several problems for me due to misunderstanding some mechanics:

  • They immediately got better at defending their borders.
  • They attacked (which I thought wasn't possible but was added to the game in April).
  • They, likely, traded with other players while I couldn't afford to get further tech off of them.

It was also annoying as my new found alliance could've been profitable for a while before sending some fleets to help finish them off. Oh well, all is fair in love and space war!

The 2 stars I captured from The Limiting Factor before they quit

At this point I bolster my lines near my borders and it starts to become apparent that I have no foes to my South or East. A plan begins to form on the edge of my alien mind and I start to build up forces on my industrial stars. To what end? That'll be revealed next time!

Leaderboard after 7 Galactic Cycles

Below is a little more analysis of the data I collected during the game. For those who are interested.


Territory is how you win the game but it doesn't necessarily give you the whole picture. Someone can hold onto many low resource planets to boost their number. Early game though the major battle lines for future conflict tend to be drawn as each player establishes a fledgling empire. The only person to lose ground at this early stage was The Limiting Factor who had sadly quit the game when he was attacked on all sides.

Most empires had a steady rise during the early game. Only The Limiting Factor was beset on all sides and suffered major losses.


Production can tell a useful tale. As someone starts to run away with production they can get more and more ships to the front lines. At this early stage it is fairly equal despite The Limiting Factor's losses. The AI character invested heavily in industry as soon as it took over an evened the balance of power. This leads to a thorn in the side of many for sometime.

Relative production levels nearly 6 days into the game.

Next time ... Treachery!

Tom Out!

Does Wilko Dream of Galactic Fleets?

In which I get hooked on strategic galactic space battles...

The Game

The original Neptune's Pride took the gaming world by storm 3 years ago. The sequel is now out and if you want to try it out head on over to Iron Helmet Games to start playing now for free!

It's a long-term, epic, space game where your fleets take hours to arrive at distant stars. This grand strategy game is reminiscent of Diplomacy where the gameplay is very simple and a large part of the fun comes from diplomatic relations with other players. In short this game is one of the most refined forms of nerd-crack I have ever encountered. I do love it so.


My friend has a premium account so has set up the game with a few fun features:

  • Extra Anonymity - no-one knows who anyone is.
  • Dark Galaxy - you can only see stars within scanner range.
  • Production every 20 ticks - A tick is one hour and using the non-standard 20 hour production cycle forces players to check in at different times as the game progresses.
  • Trade Scanned - you can only trade with races you have met (well scanned).
  • Scanning Technology Lvl 2 - in a dark galaxy it helps to be able to see.

The Players

Part of the fun of this game compared to Diplomacy is that you can play it without knowing who your opponents are. So below are my opponents (and me) and, while I do have my theories, for now I don't know who is who out of my friends*:

The Spanish Inquisition

Their wry smile hides many thoughts as they stare deep into your soul with their double-stacked eyes. No-one else realises it is because they are listening to dry space comedy on their headphones.

Neptune's Revenge

Adherents of the Religion of the Blue†, this race of Grey Aliens are fans of Tron, movies in which Samuel L. Jackson is eaten by sharks and Smurfs. They mostly inhabit watery worlds and tan themselves between bloody battles for supremacy.


Due to low Charisma scores caused by their insectoid appearance the other races often treat this race poorly. It is not surprising that they do not trust the other races at all. Except for maybe their sister race.

Solemnity of Manner

Without lips to communicate normally it is no wonder that this race appears solemn to outsiders. In truth, they are constantly communicating telepathically which is actually pretty annoying and gives them their sullen look.

The Tide

This race wanted an imposing name but since "The Flood" was already taken they were forced into a less inspiring name choice. These slow slug-like creatures like to move inexorably towards their foes and their bark is worse than their bite. They don't have any teeth after all.

Limiting Factor

Much like their sister race this race's looks have limited their interaction with other races who find them intimidating. They have turned it to their advantage with their mighty red warships acting as the scourge of the galaxy.


Adherents of the Religion of the Purple†, this race of Greys like songs by Prince, movies with Samuel L Jackson as a Jedi and Ribena. They are mostly found sneakily dying the waters around on Neptune's Revenge's home planet with red food colouring.

*I have made up a lot of crazy backstories about these races as, currently, not much has happened in game. In future posts their actual personalities will show through. The races are in the order (left-to-right) that they appear in the game. 

†Their in-game colour.

The Story

I'm going to write up the events of the game once it is all complete (from my perspective, maybe with some guest spots from my fellow players). I'd love to write it up as the game progresses but it would give away my strategies and who I am to my fellow players.


We've only been playing a few days and I've already had a restless night worrying about my fleet movements, where my construction and research options lie, etc.. I have the bug and it's only going to get worse as we continue to play. My friend who introduced me to the game took the mick out of me in the following way when he heard:

Admiral: Commander, report!
Commander: Admiral, it’s been five minut-
Admiral: Report!
Commander: No change, sir, excepting that any fleets in transit are five minutes closer to their destinations. There have been no new messages. Intel suggests that fighting has broken out elsewhere in the galaxy, but... Really, sir, you should get some sleep.
Admiral: What about the research arm? Have there been any breakthroughs?
Commander: SLEEP, Admiral. You know Fleet Science’s latest estimate was for more than a day away, now don’t make me ask the doctor to order you to bed on medical grounds.
Admiral: Buh- but my gratification!

Stay tuned for future posts when the diplomacy fails, the fleets clash and friendships are tested!

Tom Out!

Building a Better Keyboard

In which I order a mechanical keyboard...

I've started noticing a bit of back pain recently and couldn't put my finger on the cause until I received an email talking about proper posture. I duly sorted out my desk so my work laptop is on a pile of books at the correct height. Then I realised I could not use the keyboard effectively any-more :/

The answer was obvious - order a new keyboard!

I spent quite a while looking around on Amazon at various gaming keyboards and they were looking pretty expensive. Also many of them were bulky and unlikely to work well at work. Thanks to the Hello Internet podcast I was aware of WASD Keyboards who, thankfully, despite their namesake make non-QWERTY keyboards too. They are also cheaper (thanks to the exchange rate) than the aforementioned gaming ones.

So Many Options

Besides making good quality keyboards WASD offer many customisation options on their standard keyboards including:

  • Full control of key colours through their V2 designer (included).
  • Full control of what is printed on the keys through template files (included).
  • Choice of Cherry MX keycaps ($5-15, I went for MX Browns).
  • Choice of sound dampeners ($25)

Choosing a Design

The mechanical keyboard subreddit has a few layouts to look at. I decided I wanted to go the Portal route and combined these similar concepts. However I was particularly enamoured with this colour scheme*:

This picture also made me think it might be a good idea to have multiple layouts on the keyboard using colour coded letters. All I had to do now was decide which keyboard layout I wanted to follow...

*I like my keyboards black...like my men.

Choosing a Keyboard Layout

I had been playing around with a Dvorak layout on my Nexus 6 and knew it was fairly well respected. Following a brief conversation with some friends I ended up looking at Colemak and the WASD website pointed me in the direction of the Workman layout too.

Through my research I found out the following:

  • The QWERTY keyboard design is very old.1
  • The Dvorak keyboard is pretty old.2
  • Alternate layouts don't offer any increase in speed†.3
  • There are interesting ergonomic discussions still going on.

Based on all this I decided to go for Colemak (because of the recommendation) but with Workman as a second option (because it may be better ergonomically).

†If anything it slows you down initially though it can force you to learn to touch-type which is partly why I'm doing it.

The Final Design

Slaving away over Inkscape for a lunch break with the existing templates led to this design that I have now ordered. I have added a black background and coloured keys to give an impression of what it will look like:

We do what we must, because we can!

If you want to play around with this design and adapt it for your own purposes feel free‡.

I'll post pictures when it arrives!

Tom Out!

‡You can find a raw version at WASD keyboards. You can find a guide on using the files there too. I didn't create any of the original vectors images, image credits go to /u/LordMelchior, /u/LtFisticuffs, and Zeptozephyr on Deviantart.

Site Move in Progress

I've had a lot of headaches recently with WordPress failing on my blog and was already in the process of moving everything into one place on SquareSpace. With the recent complete failure of my WordPress theme (and several back-end issues) I have decided to initiate the transfer immediately. 

As the WordPress import is not perfect some posts will have issues I will be manually fixing in the next few weeks. If there is an issue a quick comment using the new Disqus system will bring it to my attention. Thank you for your patience!

Tom Out!

Preparing for Bayesian Mathematics in Python


In which I run through setting up a Python environment on Windows...

I'm going to preface this post by saying I'm not breaking any new ground here. As is often the case, though, a beginner wanting to set-up an environment to do this will have to go to multiple websites to collect this info so I'm going to distil it into one post.

I am going to talk about Python 2.7 as currently it has the most support for libraries. This method should work equally well for Python 3 but I have not tested this.

Install Python and GUI

Make sure to add Python to command line by selecting "add to path".

Make sure to add Python to command line by selecting "add to path".

You will now have a working Python environment that will run from command line. The standard install also includes a basic Python GUI that will be available through the Python folder in the Start Menu. If you wish to install a full Python IDE go ahead and install PyDev which is an add-in for the popular and free Eclipse IDE.

Install NumPy and SciPy

  1. Ensure you have the Python C++ re-distributable installed.
  2. Install NumPy and SciPy using pip: pip install numpy and pip install scipy
  3. Type import numpy followed by import scipy at a Python prompt. These should return a blank prompt if there are no errors.*

You should now have all the pre-reqs for installing Bayesian Python libraries. If you want to use the built-in Python installer though "you're gonna have a bad time." You need a Fortran compiler and Windows doesn't come with one as standard.

No compiler and no play make Windows something something...
No compiler and no play make Windows something something...

*If you install nose (pip install nose) you can also run numpy.test() and scipy.test() to get fuller results about your install.

Installing Cygwin

The solution to your Fortran compiler woes is to set-up Cygwin. While you are at it you might as well add all the standard linux commands to your Path in Windows.

  1. Grab Cygwin and run the installer.
  2. Leave all the default packages selected.†
  3. Go to Devel and select the mingw-gcc-fortran package.‡
  4. Go to Control Panel\System and Security\System.
  5. Click on Advanced System Settings.
  6. Click on Environment Variables.
  7. Edit the path and add C:\cygwin64\bin to the end (use a semicolon to separate entries).

†You can always run the set-up again to install additional packages at a later date.

‡You might as well install the other compilers you are likely to need like GCC while you're at it.

Installing Bayesian Packages

Currently the dependency h5py needs to installed from a pre-compiled binary on windows.

  1. Install h5py for your version of Windows.

Running pip install bayespy should now work like a charm.

Avoiding pip

If you aren't fussed about ensuring the pip works on your machine you can download individual packages that have been pre-compiled for Windows.


[1] Python.org

[2] Probabilistic Programming and Bayesian Methods for Hackers

[3] Patil A, Fonnesbeck CJ (2010). PyMC: Bayesian Stochastic Modelling in Python. J Stat Softw 35: 1.

[4] PyMC

[5] BayesPy

[6] Downey, AB (2012). Think Bayes. Needham: Green Tea Press.

Inbox By Gmail: Thoughts and Tricks


In which I review the new Inbox by Gmail...

Currently Inbox is invite only. You can apply for an invite at www.google.com/inbox or get a friend to invite you.


Since Google released Gmail to the masses (over 10 years ago) they have been constantly upgrading one of the oldest services on the internet: email. Now they are looking to change the way everyone uses email with the introduction of Inbox.

Inbox by Gmail
Inbox by Gmail
Inbox on the Nexus 5
Inbox on the Nexus 5

The concept is that you rarely look up old emails* so can mark them as Done when you no longer need them. Important emails can be Pinned as a constant reminder until you've dealt with them and emails you haven't got time to worry about right now can be Snoozed.

The new done tab
The new done tab

The other main features are Bundles and Reminders:

Bundles are similar to the different Gmail inboxes (Social, Promotions etc) but now you have more control over which emails get sent to each respective bundle. You can also create your own Bundles by setting a rule for which emails should be sent there. Initially Inbox will import your Gmail labels and if they have an incoming mail rule you can turn them into a Bundle. This is a great way of keeping track of a particular hobby or group of contacts allowing you to see all the emails from them when a new one appears at the click of button.

Reminders are the same as in Google Now and are pinned to the top of your Inbox. Essentially Inbox turns your email into a to-do list.

It offers a clean experience and so far I haven't wanted to go back to the Gmail app for anything except deleting large swathes of emails.† I will update this page with further thoughts over the coming days.

*Old messages can still be searched and seen under the done tag. They are like Archived emails in Gmail (more details below!).

†Currently I can't seem to find a select all button inside a bundle.

UPDATE 31/10/14:

Inbox looks so happy when you have no messages:

Isn't that lovely? :)
Isn't that lovely? :)

Tips & Tricks

This section is a work in progress and will be updated as and when I find new neat tricks.

Archive Old Mail to Done

If like myself you've been with Gmail since near the beginning (or just use it as your main account) you will likely have a lot of old emails. When you load up Inbox for the first time you won't be faced with the clean image I posted above but with all of your old emails in the Inbox. This, sadly, defeats the point of Inbox as when you swipe away incoming emails to Done your older emails move to the top. Also Inbox loads emails in groups of roughly 25 so going through your thousands of emails will take forever.

There is a nice easy solution though. Go to mail.google.com and Archive all your old emails. Archiving merely removes the Inbox label from the selected emails without deleting them. This is also exactly what the Done functionality in Inbox seems to do to your emails. If you haven't been archiving emails regularly an easy way to do this is:

  • When a notice saying "Select all conversations that match this search" appears. Click to select all the emails.
  • Click the Archive icon at the top of the page.

WARNING: When I did this two things happened: 1) I was locked out of my Google account for about 5 minutes as it processed the request. 2) For some reason this method means the list in Done won't be in chronological order (except new emails), I don't know why. You have been warned.

Once you have done this your Gmail will resemble the sparse list in Inbox:

Your clean new gmail
Your clean new gmail

You will still be able to view your old emails in All Mail in Gmail:

Gmail All Mail folder
Gmail All Mail folder

Tom Out!

Related articles

The Thirteen Doctors: Before Regeneration

The Thirteen Doctors: Before Regeneration

In which I talk about the actors who played the Doctor in their other roles...

TIME magazine published a video on the other roles of the Doctor. I felt it was too brief however so here is my version:

Owncloud on FreeNAS 9.2


In which I set-up a cloud file store on FreeNAS... So firstly there is an easy way to do this. You can install the owncloud plugin provided through the FreeNAS GUI. There are a few reasons not to do this:

  • It only supports SQLite
  • The plugin, as usual, is not the most up-to-date version of the software*

MySQL/MariaDB should be faster than SQLite and also allows multiple concurrent connections.

*The FreeNAS devs do a good job of keeping up-to-date but if you want to be on the latest software you normally need to update your plugins manually.

Set-Up the Jail

Follow the users guide to set up a new jail. You can either set-up a portjail (which already includes and extracted version of ports) or use a standard jail (since you would likely need to update ports anyway).

The use the GUI to run a shell as the jail before continuing to issue these commands.

Extract ports:

portsnap fetch extract

Update pkg:

pkg update -f

Install Packages

First you're going to need to install all the packages for the webserver (nginx), php and MySQL:

pkg install nginx mariadb55-server php55-extensions php55-curl\
php55-exif php55-fileinfo php55-gd php55-mbstring php55-pdo_mysql\
php55-openssl php55-zip php55-zlib
make install clean -C /usr/ports/devel/pecl-APCu

During the install of pecl-APCu accept all prompts with the standard settings.

Then enable everything in /etc/rc.conf:

nginx_enable="YES" php_fpm_enable="YES" mysql_enable="YES"

Setup Webserver

Go to /usr/local/etc/nginx/nginx.conf and edit it to look like this:

### Change the number of workers to the same number of cores 
### your server has 
worker_processes 4;

events { 
    worker_connections 1024; 

http { 
    include mime.types; 
    default_type application/octet-stream;
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    access_log logs/access.log main; 
    sendfile off; 
    keepalive_timeout 65; 
    gzip off;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM; 
    ssl_prefer_server_ciphers on; 
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

    # Redirects HTTP to HTTPS 
    server {
        listen 80; 
        ### Change the following two lines to match your website name
        server_name www.example.com 192.168.; 
        return 301 https://example.com$request_uri;

        # Prevent Clickjacking 
        add_header X-Frame-Options "SAMEORIGIN";
     server { 
         listen 443 ssl;
        ### Change the following line to match your website name
        server_name www.example.com 192.168.0.X; 
        root /usr/local/www;

        # Prevent Clickjacking 
        add_header X-Frame-Options "SAMEORIGIN";
        # SSL Settings 
        ### If you are using different names for your SSL certificate and key, change them below: 
        ssl_certificate /usr/local/etc/nginx/ssl-bundle.crt;
        ssl_certificate_key /usr/local/etc/nginx/server.key; 
        add_header Strict-Transport-Security "max-age=16070400;
        location = /robots.txt { allow all; access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }
        location ^~ /owncloud { 
            index index.php;
            try_files $uri $uri/ /index.php?$args;
            client_max_body_size 5120M; 
            location ~ ^/owncloud/(?:\.|data|config|db_structure\.xml|README) { 
                deny all;
            location ~ \.php(?:$|/) { 
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info; 
                include fastcgi_params;
                fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on;
            location ~* \.(?:jpg|gif|ico|png|css|js|svg)$ {
                expires max; add_header Cache-Control public;
            location ^~ /owncloud/data { 
                ### Change this to the directory you wish to use for files
                alias /mnt/files;

If you have an SSL certificate install it. If you want to use a self-signed certificate use these commands and follow the on screen prompts:

cd /usr/local/etc/nginx 
openssl genrsa -des3 -out server.key 2048 
openssl req -new -key server.key -out server.csr 
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out ssl-bundle.crt 
cp server.key server.key.orig 
openssl rsa -in server.key.orig -out server.key

Configure PHP

Copy the default php.ini file:

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Then edit the following lines of the /usr/local/etc/php.ini file:

date.timezone =Europe/London
upload_max_filesize = 5120M 
post_max_size = 5120M

Make sure to set date.timezone to your own timezone.

Edit the following lines of /usr/local/etc/php-fpm.conf:

listen = /var/run/php-fpm.sock 
listen.owner = www 
listen.group = www 
env[PATH] = /usr/local/bin:/usr/bin:/bin

Setup MySQL

Create the MySQL configuration file at /var/db/mysql/my.cnf:

[server] socket = /tmp/mysql.sock 
default-storage-engine = innodb 
innodb_flush_method = O_DIRECT 
innodb_flush_log_at_trx_commit = 2 
expire_logs_days = 1

Then start the web server and initilaise the MySQL database:

service nginx start
service php-fpm start
service mysql-server
start mysql_secure_installation
mysql -u root -p
GRANT ALL PRIVILEGES ON owncloud.* TO 'ocuser'@'localhost' IDENTIFIED BY 'ocpass'; 

Make sure to change <ocpass> to a password of your choice.

Install OwnCloud

Install the owncloud source files:

fetch "http://download.owncloud.org/community/owncloud-7.0.1.tar.bz2" 
tar jxf owncloud-*.tar.bz2 -C /usr/local/www 
rm owncloud-*.tar.bz2

Make sure to change the source file to the latest file available from http://owncloud.org/install/.

Then ensure the user 'www' can access the mount point for your files and:

chown -R www:www /usr/local/www/owncloud /mnt/files

Setup cron:

crontab -u www -e

Then append† the following:

*/15 * * * * /usr/local/bin/php -f /usr/local/www/owncloud/cron.php

†The vi command is :a. Then use :wq to write and quit.

Setup OwnCloud

Now point your web browser to https://<jail ip>/owncloud and you'll get this setup screen:

And make sure to change the details to match your mount point and MySQL database.‡

Once you've logged in go to the Admin settings on the top-right and make sure to tick 'Enforce HTTPS'. This will force anyone connecting to your server to use a secure connection.

If you already have a lot of data on your server and want to make it available to your OwnCloud then you can make mount points through the FreeNas GUI:

Jail storage in FreeNAS
Jail storage in FreeNAS

Currently there is a problem where the FreeNAS GUI can't create a mount point. You'll need to make them using the jail shell. Then the GUI will be able to mount the folder correctly.

‡Set localhost to be localhost:/tmp/mysql.sock

Allow Access Across the Internet

The error message when accessing owncloud from outside your LAN.
The error message when accessing owncloud from outside your LAN.

If you wish to use a dynamic DNS service to allow access to your storage from anywhere you will need to add one line to config.php. The file in question is /usr/local/www/owncloud/config/config.php:

'trusted_domains' => array('foo.example.com'),

Tom Out!


This post is an amalgamation of sources that got me most of the way to a working environment. I have chosen the relevant parts from each reference to make this guide:

[1] [How-To] ownCloud using NGINX, PHP-FPM, and MySQL by Joshua Parker Ruehlig

[2] Pydio: Installing on FreeBSD (nginx and PHP-FPM) by Abstrium SAS

[3] FreeNAS 9.2.1 User's Guide  by iXsystems, Inc

[4] PHP: List of Supported Timezones by The PHP Group

[5] Untrusted Domain by RandolphCarter

Fancy Thesis Tables in LaTeX: An Idiots Guide


In which I provide a template for generating fancy, production quality tables for theses...

LaTeX as I've mentioned previously, is a document preparation system well known for its brilliant equations and can also be utilised to make very nice looking diagrams. The tables it generates, however, while neat are a little lacklustre.  This is aimed as a very simple guide to editing tables (regular LaTeX users may find this tutorial very basic).

Before starting you will need a LaTeX compiler and a text editor (SciTE is awesome). On Windows TeXnicCenter & MiKTeX provide good functionality. Under Linux you can use TeX Maker.

Setting Up the Document

First you need to have a document class set up and the beginning and end of your document:

all your packages will be loaded here and other modifications to commands
document code will go here

Then you need to make sure you are calling all the relevant packages to make our fancy tables work:*


The geometry package will simply rotate your outputted pages to landscape. As tables may often be fairly wide this allows the whole table to fit on the page without giving a bad box warning or cutting off part of the table.†

The booktabs package provides extra tables commands and in general makes tables look a little nicer than without.

The colortbl & xcolor packages are required to allow the colour of table and text elements to be altered.

The xfrac package is required to make nicer fractions that look good in tables.

A new command is required:


This will allow you to change the row spacing to your liking by invoking the ra{} command. I found that 1.3 was sufficient.

*Further package documentation covering the use of these packages is available at the CTAN repository.

†Though you can have LaTeX just output the images to an image format too.

The Core of the Table

The Booktabs package guide defines the following rules for publication quality tables and you should bear them in mind while designing your table:

  1. Never, ever use vertical rules.
  2. Never use double rules.
  3. Put the units in the column heading (not in the body of the table).
  4. Always precede a decimal point by a digit; thus $latex 0.1$ not just $latex .1$.
  5. Do not use ‘ditto’ signs or any other such convention to repeat a previous value. In many circumstances a blank will serve just as well. If it won’t, then repeat the value.

With these guidelines in mind you need to layout your table:

Nucleus & textit{I} & Natural Abundance / \% & Larmor Frequency @ 7T \\
\rowcolor{black!20} \textsuperscript{1}H & \sfrac{1}{2} & 99.98 & 298.0 \\
\textsuperscript{2}H & 1 & 0.02 & 45.7 \\
\rowcolor{black!20} \textsuperscript{12}C & 0 & 98.90 & - \\
\textsuperscript{13}C & \sfrac{1}{2} & 1.10 & 74.9 \\
\rowcolor{black!20} textsuperscript{14}N & 1 & 99.60 & 21.5 \\
\textsuperscript{15}N & \sfrac{1}{2} & 0.40 & 30.2 \\
\rowcolor{black!20} \textsuperscript{16}O & 0 & 99.96 & - \\
\textsuperscript{17}O & \sfrac{1}{2} & 0.04 & 40.4 \\

The first thing to do is invoke the tabular environment and tell it how many columns you want to have: begin{tabular}{cccc}. The number of letters in the second set of brackets is the number of columns you wish to have. The letter used controls the alignment of the text. Personally I prefer centred text (c) but you can align left (l) or right (r) too if you like.

Before you start with the body of your table you will want a toprule which provides a thicker horizontal line than the standard LaTeX hline.

Each row of the table consists of your text aligned using ampersands and ending with a double backslash. You don't require an ampersand at the start or end of the row - only between columns. For example:

First row & Second row & Third row \\

Once you have defined your top row you should follow it with a midrule before starting the table body. This will provide a nice horizontal line signifying the start of the table.

One the first row of the table body change the row colour to light grey using the rowcolor command: rowcolor{black!20}.§ Then fill out your row as normal. Alternate between grey and white rows to distinguish between rows without the need for unnecessary horizontal lines.

Once you have finished your table end with a bottomline before closing the table (end{tabular}). If you are including your table in a LaTeX document you can place your caption and label after the tabular environment.

A major benefit of designing your table in this manner with alternating colours is that you can easily have double thickness rows when text overflows in a box. For example:

A table with a shaded row 4 times the height of the other rows.

§The number after the exclamation mark is the transparency of the colour; 20 means the colour is 80% transparent. For the full colour you can just put rowcolor{red}.

Common Errors

If you get an error saying "Extra alignment tab has been changed to cr" you have likely missed putting \\ at the end of one of your table rows.

If you get an error saying "misplaced noalign" you have probably put one of your ruled lines in a weird place.

Final Result

Table showing the natural abundance of nuclei commonly used in MRI and their Larmor Frequencies at & Tesla.

You can also download the file to try here.

Tom Out!


This reply to this post by Harish Kumar and the reply to this post by dcmst proved very useful in designing by thesis tables.

Related articles

Tom 3.5 & Life Plan 2014

In which I talk about fitness and the road ahead...

Tom 3.5

So once again I am unhappy with my level of physical fitness having let it slide a lot with work and other stress getting in the way. I need a new ridiculous goal but first I need to get back to my old fitness levels. I'm back on the old horse having started running everyday again and I've rejoined the gym. Expect a longer post in about 2 weeks time about how things are going.

I'm thinking my next "ridiculous challenge" should either be Tough Mudder or an ultra marathon (~40 miles not one of the 100 mile ones).

Why Tom 3.5? Well my last fitness drive was Tom 3.0. This isn't entirely a new leaf it's just me reminding myself to get back to what I was doing and hopefully take it further.

Life Plan (2014)

These are my goals for the next 10 years. I'm going to start posting the one year goals each January instead of having fixed New Year's Resolutions.

This Year:

  • Start learning Guitar (again)
  • Start learning Piano
  • Get a job
  • Finish my PhD
  • Don’t have a fat graduation photo
  • Receive my QSA at Windsor
  • Receive my DofE Gold
  • Write more short stories
  • Enroll on another marathon/Tough Mudder

In 5 Years:

  • Be earning £40k+
  • Be married or almost married
  • Have a published book
  • Have worked towards grades in Piano
  • Grade 5 music theory

In 10 Years:

  • Have children
  • Grade 8 Piano
  • Have several published novels


So I'm in full thesis writing mode at the moment but that doesn't mean I'm constantly writing. I do procrastinate (though usually with other jobs I need to get done) and this brilliant article explains why that's helpful: http://www.wired.co.uk/news/archive/2014-06/17/jorge-cham-phd

State of the Thesis

The thesis is currently 122 pages long with 29,206 words and 154,203 characters.

Tom Out!


In which I discuss some blog stats...

Firstly thank you everyone who has come to my little corner of the internet to get me to this point. When I started off a little blog about tea 3 years ago I never expected it to be seen by anyone outside my group of friends. Secondly I actually ticked over 20,000 views about a week back but haven't had the time to write this post until now.

Best Day for the Blog

The best day for my blog is still 24/12/12 when on Christmas Eve a friend of mine shared The Great British Teat Test 2012 with the Tea subreddit. I garnered a total of 488 views from 419 people that day which must've boosted my search engine ranking. I started receiving a steady stream of visitors after that. I am planning on doing another, this time comparing types of Earl Grey later in the year.

Most Viewed Post

Apparently the internet loves guides on dealing with Microsoft, computer related stuff tea and cake. And that's fine by me! I enjoy those topics and will continue to post about them.

Most Viewed Category

Excluding yearly tags I think it's very clear that computer related posts are my winners with PhD related posts also do well. As my PhD winds down there will probably be a few more posts about it before a final review in September/October. Computer related posts will likely be on the rise as I'm looking for programming jobs currently.

Changes Ahead?

I'm going to try and post more frequently and make more computer related posts but I doubt I'm going to get much posted until my thesis is finished.

I also want to revive my YouTube channel - I have some video ideas but currently no time to get them made. Hopefully I'll get some time over summer to work on on or two.

Tom Out!

Word 2010: Footnotes and Mendeley


In which I discuss getting footnotes and Mendeley references to look nice in Word...

I may not have mentioned it before on this blog but I am a Mendeley advisor and a strong advocate of this free reference manager. In fact I cover the pros and cons of it in this video:

Referencing Styles in Mendeley

Mendeley gives you a large choice of built-in citation styles and has the option to create your own too. Currently I haven't needed to use anything outside of the built-in Nature style.* This style uses numbers for in text referencing like so:

Fig 1: A Reference

Fig 1: A Reference

I personally think this is nice and clean and Mendeley will also separate multiple references with commas or hyphens where appropriate:

Fig 2: Multiple references separated by commas using Mendeley.
Fig 2: Multiple references separated by commas using Mendeley.

*This will probably change as it uses et al. in the list of authors for a small number of authors.

Numbered Footnotes

Word automatically inserts numbered footnotes like so:

Fig 3: Word's numbered footnotes.
Fig 3: Word's numbered footnotes.

When both are used this can cause the following problem when a reference and footnote are used on the same sentence:

Fig 4: A reference and footnote displays as one number.
Fig 4: A reference and footnote displays as one number.

This would be confusing to a reader as they would expect there to be a reference that doesn't exist and miss out on the footnote.

Solving the Problem

There are two main ways to solve the problem:

  1. Use a different citation style. Since this formatting is already agreed as part of my Thesis I can't use this option.
  2. Change the footnote style.

In word you can change the footnote style for the entire document by going to the ribbon>References>Footnotes and clicking on the little expansion square:

Fig 5: The ribbon showing the footnotes section.
Fig 5: The ribbon showing the footnotes section.

Then you will get the footnote and endnote menu:

Fig 6: The footnotes and endnotes menu in Word 2010.
Fig 6: The footnotes and endnotes menu in Word 2010.

Where you can change the format to symbols:

Fig 7: The endote format option changed to symbols.
Fig 7: The endote format option changed to symbols.

I think the final result is an OK compromise:

Fig 8: A symbol footnote and a normal reference.
Fig 8: A symbol footnote and a normal reference.

If you want you can also add a comma between the two to improve the distinction. Be aware that you'll have to do this manually by typing in a comma and then making it into a superscript:

Fig 9: The final footnote and reference which avoids confusion.
Fig 9: The final footnote and reference which avoids confusion.

Thesis Update

Currently my Thesis is 78 pages long with 16,148 words!

Tom Out!

Plex & Pydio on FreeNAS 9.2

In which I revisit my home server...

So I've previously discussed how to set up AjaXplorer on FreeNAS 8.3 but now that jails are easier and there are new plugins I thought I'd update you all on some of the newer features (also things are much easier now!)

Plex Media Server

Plex Media Server now has a pbi that can be installed with a 'one-click' installation from within the FreeNAS GUI. There is a brief guide on their website, however, there are a few things you need to do to get it working properly:

  • Go to Jails > plexmediaserver > Storage > Add Storage and mount your files from your other ZFS volumes. If you don't do this Plex can't see any of your files.
  • Wait for your library to build and enjoy!

*During this install you get one of the best system messages: "promiscuous mode enabled" †You may need to add plexmediaserver_enable="YES" to /etc/rc.conf if you experience problems.


AjaXplorer has been renamed Pydio but it is still awesome :)


There is a guide on setting up a jail on your FreeNAS system at the FreeNAS Wiki. This is much easier than previously and I'm using a FreeBSD jail to run Pydio:*

  1. Add a standard jail
  2. Add storage (see above).
  3. And you're ready to roll!

*I wanted to use Gentoo but portage wasn't playing ball. I'll post about that if I work it out in the future...


There is now a guide on the Pydio website describing how to do this it works perfectly!

Configure Pydio

If you go to https://<jail ip>/pydio you should see the config screen. To sort the specific error I had:

Server charset encoding: Set the locale in conf/bootstrap_conf.php as suggested:

define("AJXP_LOCALE", "en_GB.UTF-8");

Then you should see the ready screen:

Follow the Wizard and hit "Install Pydio Now!" when you're done. After that follow the Pydio documentation!

To get your existing mount points in Pydio simply create a new workspace using an existing mount point.

Tom Out!


[1] Installing on FreeBSD jail: http://pyd.io/freebsd-nginx-php-fpm/

Quick & Easy: Thai Green Curry

In which I make a quick & easy Thai Green Curry...

So after a weekend where I made a nice traditional Thai green curry I was stuck with some leftover ingredients and not much time to make food before going out to a party. I almost made a quick mushroom soup chicken with rice meal but since I had some spare ingredients around I had a go at making a quick curry. It ended up being very tasty!*

*Though it was a little hot, feel free to add less chilli.


Serves 2 (or 1 hungry student)

  • 2 chicken breasts, diced
  • 1 tin mushroom soup
  • 1 tbsp Thai green curry paste
  • 1 chilli, sliced lengthways
  • 6 basil leaves
  • 1 tbsp oil
  • 100 g rice


  • Put rice on to boil in plenty of water (keep an eye on it but it should be fine with just an occasional stir).
  • Heat the oil in a saucepan on a high heat.
  • Put the Thai green curry paste in the pan and allow to sizzle for about 20 seconds.
  • Add the chicken and stir frequently turning down to a medium heat.
  • Once the chicken is cooked pour in the mushroom soup.
  • Bring the soup almost to the boil stirring frequently.
  • Add the basil leaves and stir for several minutes.
  • Add the chilli for less than a minute.
  • Serve and enjoy!

Tom Out!