Natalia Romanova, otherwise known as Black Widow

This weekend I went to the super awesome Comic Con in London. I was completely in awe of the sheer number of people in costumes and by the quality of the costumes themselves. I was a great couple of days of unrestrained geekiness, with people being themselves in an atmosphere of total acceptance.

I've been getting really into the Avengers franchise recently, so I decided to go with deadly Soviet-trained assassin Natalia Romanova.

Photo of Black Widow outfit

Making my costume was a boat-load of fun. The basis for it all was a ridiculously comfortable onesie I made from a Primark men's tracksuit. Below, I'll take you through how I made it.

Drawing of Black Widow outfit

The other important parts of the outfit were the bullet bracelets, the driving gloves, a pair of buckle-y boots (Primark), an elasticated waist belt (Primark), and a thigh holster, which was made of three pieces of black webbing sewn into a large and small loop with a connecting strap.
Continue reading Natalia Romanova, otherwise known as Black Widow

...

Installing Chaste on Debian (sorta)

For my research, I program using a collossal C++ software package called "Chaste". CHASTE stands in this case for "Cancer, Heart and Soft Tissue Environment", rather than its usual meaning of the sexual repression of people (especially women) all over the world. Interesting choice of acronym.

Chaste's got lots and lots of bits that I don't use, and it is notoriously difficult to install on things, but it's also incredibly, incredibly useful. Over the last 10 years or so people have added all kinds of modules for biological modelling, especially cardiac stuff. Just a quick look at the class index gives you an idea of how many tools there are to use.

There's an easy Chaste installer for Ubuntu, but I'm a Debian girl myself, and I've had terrible trouble trying to use the generic instructions, because there are a lot of dependencies, and each dependency has different versions in different Linux distributions.

In the end, I decided to side-step the issue entirely. There's a tool called Debootstrap, which creates an entire Ubuntu installation in a single folder, so I can be using my Debian laptop and have Ubuntu open in a terminal without too much bother.

So first we make a Chaste directory and put Ubuntu into it using debootstrap:

mkdir Chaste
sudo debootstrap utopic Chaste http://mirrors.kernel.org/ubuntu/dists/utopic/

Next, we jump into the Ubuntu installation by changing our root:

sudo chroot Chaste

First off for some reason you need to tell the computer where you are.

locale-gen en_GB en_GB.UTF-8 

Then there are a few useful things that I like to have around; "nano", which is a text editor, "aptitude" which is a front-end for the apt-get installer, and "man" which are the manual pages for command line tools.

apt-get install nano aptitude man

Now you need to add some more repositories so that you have all of the packages available that you need. Open up your sources file:

nano /etc/apt/sources.list

Delete the first line using Ctrl-K, and then copy in the following:

deb http://archive.ubuntu.com/ubuntu utopic main universe multiverse
deb http://archive.canonical.com/ubuntu utopic partner
deb http://archive.ubuntu.com/ubuntu utopic-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ utopic universe main multiverse
deb http://us.archive.ubuntu.com/ubuntu/ utopic-updates universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ utopic-updates universe multiverse
deb http://www.cs.ox.ac.uk/chaste/ubuntu utopic/

Then press Ctrl-O to save and Ctrl-X to exit. Next, we add the Chaste license key, and update the package lists.

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 422C4D99
apt-get update

The proc filesystem needs to be mounted before we can continue:

mount -t proc proc /proc

After this point, I am just following the default install guide. This next part took forever, I got quite bored. Here is a collection of margin scribbles from books.

apt-get install --install-recommends chaste-dependencies
apt-get install `dpkg -s chaste-dependencies | egrep "^Suggests" | cut -d "," -f 1-111 --output-delimiter " " | cut -d ":" -f 2`

Then checkout the code! I put it into a folder called "Chaste" in the root directory, but if you want to put it somewhere else (/home/scratch/Chaste/ for example) just create the directory you need first and cd into it.

svn --username anonymous checkout https://chaste.cs.ox.ac.uk/svn/chaste/trunk/ Chaste
cd Chaste
scons

Then all of the tests should start building!

...

Ur_Fry

Photo from the YourFry hackathon

Penguin organised a bunch of hackathons to celebrate the latest instalment of Stephen Fry's autobiography, and I went to the one they held in the Bodleian in October. I was in a team of awesome programmers, artists, and scientists, and we put together a website. You can visit it at yourfry.bethmcmillan.com, or watch my hastily-constructed youtube video. My main contributions were a bit of web development (I can't take any credit for the design, the perl, the content, or the cluster analysis, though) and another one of my silly twitter bots, @ur_fry.

@ur_fry works just like my old @markov_holmes bot, with a few changes. We used the text of the complete works of Stephen Fry as training data - from which I didn't manage to strip out page numbers and other messy things. The text creation works backwards, by starting with the end of a sentence. This makes them end more sensibly, but makes the beginnings a little sillier. I'm not sure which way around is best.

You could have a look at the source of the main page, but it might be easier to see my simplified version. The fun things that I used for the page were d3-cloud to make tag clouds from the cluster analysis of Fry's books, and draggable.ui to make the text boxes draggable around the screen.

The thing I'm the most proud of is how the boxes come to the front when you click on them. The way this works is using z-indices, which are the way that elements are stacked in CSS. What happens here is that every time an element is clicked on, its z-index is increased to above the current highest element. This works using JavaScript - the original z-index is set in the head of the page like so:

<script>
$(function() {
  window.zed = 3;
});
</script>

This index is assigned to an element when it's clicked, and then incremented for the next time, using onMouseDown commands like this:

<div class="headline" id="c" onMouseDown='document.getElementById("c").style.zIndex = window.zed ;window.zed+=1;'>

I don't speak JavaScript very often (and this was actually dynamically generated using Perl, which I have only previously used under duress), so this was a fun departure for me.

Stephen Fry even turned up later in the day to have a wander around and talk to people. In between quietly hyperventilating with the joy of meeting my hero, I spent a few minutes talking to him about Markov chains while he looked at me kindly. Reading his books, watching A Bit of Fry and Laurie, and listening to Saturday Night Fry when I was growing up made me feel infinitely less alone, so meeting him in person was cool.

Soupy twist!

p.s. If you have any questions about how to use the bits and bobs in the webpage yourself, I'd be happy to answer them.

...