<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Beth Project</title>
	<atom:link href="http://bethmcmillan.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://bethmcmillan.com/blog</link>
	<description>Updated entirely at random when I have done something interesting</description>
	<lastBuildDate>Mon, 25 Mar 2013 15:31:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Installing &amp; Tweaking CyanogenMod 7 on a Samsung Galaxy Ace from Debian</title>
		<link>http://bethmcmillan.com/blog/?p=713</link>
		<comments>http://bethmcmillan.com/blog/?p=713#comments</comments>
		<pubDate>Mon, 25 Mar 2013 10:18:18 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Geeking]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[cyanogenmod]]></category>
		<category><![CDATA[cyanogenmod 7]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[learn from my mistakes]]></category>
		<category><![CDATA[reflashing]]></category>
		<category><![CDATA[samsung galaxy ace]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=713</guid>
		<description><![CDATA[Or: How I Broke My Phone And Then Fixed It Again I will preface this by saying that I did a terrible job backing up my contacts, text messages, apps and phone settings before I tried to re-flash my phone. &#8230; <a href="http://bethmcmillan.com/blog/?p=713">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Or: How I Broke My Phone And Then Fixed It Again</strong></p>
<p><em>I will preface this by saying that I did a terrible job backing up my contacts, text messages, apps and phone settings before I tried to re-flash my phone. Don&#8217;t do that. It&#8217;s a pain.</em></p>
<p>I have a shiny phone, called a Samsung Galaxy Ace, and it runs a well-known version of Linux called Android (please stop me if I&#8217;m patronising you). I feel very lucky to carry around such a fancy little computer in my pocket all the time. My favourite free apps that I&#8217;ve found are <a href="http://miui-music-player.en.softonic.com/android" title="MIUI player">MIUI music player</a>, <a href="http://dolphin-browser.com/" title="Dolphin Browser">Dolphin internet browser</a>, and <a href="http://f-droid.org/" title="FLOSS repository for Android">F-droid</a>, which is a repository of free and open source software for Android phones. The only app I have actually paid money for is <a href="http://www.cogsgame.com/" title="Cogs game">Cogs</a>, which is a completely amazing steampunk puzzle game.</p>
<p>The version of Android that my phone came installed with was some bizarre combination of what Samsung and Orange thought that I would enjoy, which disabled quite a few of the phone&#8217;s more interesting features. The nice thing about these phones, however, is that you can install different operating systems on them. I chose CyanogenMod mainly because I had heard of it. <a href="http://www.addictivetips.com/mobile/the-complete-review-of-cyanogenmod-7-walkthrough-guide/" title="Cyanogenmod 7 guide">Here is a walkthrough of CyanogenMod 7</a> if you are curious about what it looks like.</p>
<p>I followed the phone-specific instructions on <a href="http://acetips.wordpress.com/" title="Ace Tips">this website</a> for installation. Before following the instructions, please remember to back up anything important using your phone&#8217;s native features and also in a second way. I used Titanium Backup, which didn&#8217;t work well at all for me. Pick something else.</p>
<p>In brief, the version of CyanogenMod for the Galaxy Ace is codenamed &#8220;cooper&#8221;. You can read about it on the <a href="http://wiki.cyanogenmod.org/w/Cooper_Info" title="Cooper information">CyanogenMod wiki</a>, and download it from <a href="http://download.cyanogenmod.org/?device=cooper" title="Download CyanogenMod">here</a>. Incidentally, installing it on your phone is terrifying and I really don&#8217;t recommend doing it while hung over on December 29th.</p>
<p>I, rather cleverly, managed to lose all my contacts thanks to my aforementioned failure to back them up properly. Fortunately, Orange kept a backup for me (if you are with Orange, yours are downloadable from <a href="http://web.orange.co.uk/p/contacts/home" title="Orange Contacts Backup">here</a>). It&#8217;s an odd list of old and new contacts, which you can export in comma separated value (csv) format. I went through and pruned out a couple of ex-boyfriends and all the empty columns. I ended up with a csv file that looked like this:</p>
<blockquote><p>Other Phone,Mobile Phone,First Name,Last Name<br />
01xxxxxxxxx, 07xxxxxxxxx, Joe, Bloggs </p></blockquote>
<p>There&#8217;s probably an easier way to put them back onto your phone via an app, but I decided to try and convert them to VCard format so I could import them directly. I wrote a python program to do this that you can download: <a href="http://bethmcmillan.com/geek/python/csvtovcard.py" title="CSV to VCard converter">csvtovcard.py</a>. If you put the program in the same folder as a csv file (formatted as above) called &#8220;Contacts.csv&#8221; and run the program, it should output a file called Contacts.vcf which contains all your contacts. The main thing I learned from this is that putting spaces at the end of lines really, really breaks VCards.</p>
<p>So, I had my contacts back. I also tried restoring all my apps from Titanium Backup. Don&#8217;t do that. I ended up in a situation whereby I had CyanogenMod installed, with several bits broken (including wifi and email), and I needed to re-install to see if I could fix it. I didn&#8217;t get around to this until 3 months after installation, by which point I had lots of text messages from my loved ones that I wanted to keep hold of.</p>
<p>It turns out all text messages are kept on an SQLite database on the phone. It&#8217;s in a protected area that isn&#8217;t mounted when you connect your phone by to your computer via USB. You can find out where it&#8217;s kept by typing the following commands in a terminal emulator on a rooted phone:</p>
<p><code>su<br />
file | grep -i mmssms</code></p>
<p>When you find mmssms.db, you can copy it over to your computer using the USB android debug bridge (ADB). It&#8217;s available for various operating systems, but you can download it for Debian as a package from <a href="http://packages.debian.org/sid/android-tools-adb" title="Android Debug Bridge Debian Package">here</a>. After installing ADB, type:</p>
<p><code>abd pull /path/to/file ./</code></p>
<p>There are probably all kinds of clever things you can do to restore your text messages, but I just wanted to look at them, so I installed sqlitebrowser from the repositories and open up the file occasionally to remind myself how funny and lovely all my friends are.</p>
<p>The moral of this story is: try not to break things &#8211; and if you do, try to fix them afterwards.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=713</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cellular automaton model of bacterial biosensors</title>
		<link>http://bethmcmillan.com/blog/?p=693</link>
		<comments>http://bethmcmillan.com/blog/?p=693#comments</comments>
		<pubDate>Tue, 30 Oct 2012 09:32:07 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Geeking]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[bacteria]]></category>
		<category><![CDATA[bacterial biosensor]]></category>
		<category><![CDATA[biological modelling]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cellular automaton]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=693</guid>
		<description><![CDATA[So this fortnight at the doctoral training centre, we&#8217;ve been from &#8220;Hello World&#8221; to image processing in C and Perl. Yeah. Anyway, before my brain explodes from over-knowledge-ness, I thought I&#8217;d blog about the program I made! It&#8217;s a cellular &#8230; <a href="http://bethmcmillan.com/blog/?p=693">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So this fortnight at the doctoral training centre, we&#8217;ve been from &#8220;Hello World&#8221; to image processing in C and Perl. Yeah.</p>
<p>Anyway, before my brain explodes from over-knowledge-ness, I thought I&#8217;d blog about the program I made! It&#8217;s a cellular automaton (like <a href="http://en.wikipedia.org/wiki/Conway's_Game_of_Life">Conway&#8217;s Game of Life</a>) that essentially represents lots of bacteria immobilised on a silicon chip. I based it on <a href="http://pubs.acs.org/doi/abs/10.1021/ac049401d">this paper</a> from 2004. In my simulation, the cells grow, divide and die based on how much food they are getting from the environment.</p>
<p>The bacteria contain a special gene from fireflies called luciferase, which allows them to bioluminesce. Halfway through the simulation, the cells are bathed in a solution that causes DNA damage. This activates the luciferase gene. The idea behind the original experiment was to use bacteria to sense when a molecule causes DNA damage, in order to screen for molecules that might cause cancer.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.bethmcmillan.com/geek/automata/screenshot.png" alt="A picture of the simulation running" width="400" height="455" /></p>
<p>The simulation outputs a rudimentary display to the terminal. The glowing bacteria are represented by the letter &#8220;O&#8221; and the wild-type bacteria are shown by the &#8220;#&#8221; symbol.</p>
<p>If you want to read more about the biological background and the implementation, you can read <a href="http://bethmcmillan.com/geek/automata/cellular-automata-report.pdf">my report</a>, or try compiling and running <a href="http://bethmcmillan.com/geek/automata/ecoli-automata.c">my C code</a>.</p>
<p>This was a really good opportunity to test out all the things I learned about C this week! In addition, the write-up I handed in was written in <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a>, which I am completely new to. I&#8217;ve uploaded my Tex files (<a href="http://bethmcmillan.com/geek/automata/report.tex">report.tex</a> and <a href="http://bethmcmillan.com/geek/automata/code.tex">code.tex</a>) and the bibliography file (<a href="http://bethmcmillan.com/geek/automata/cellularautomata.bib">cellularautomata.bib</a>, which was created by <a href="http://www.mendeley.com/">Mendeley</a>) if you want to have a look at them &#8211; it turns out that the trick with LaTeX is just to have a template file to build on.</p>
<p>I found a useful bit of LaTeX code to stitch two PDFs together (<a href="http://bethmcmillan.com/geek/automata/stitch.tex">which you can download as a file</a>):</p>
<p><code>\documentclass[11pt,a4paper]{article}</code></p>
<p><code>\usepackage{pdfpages}<br />
\begin{document}</code></p>
<p><code>\includepdf[pages={1-5}]{writeup.pdf}<br />
\includepdf[pages={1-7}]{code.pdf}</code></p>
<p><code>\end{document}</code></p>
<p>Pretty cool, huh? I&#8217;ve put all the LaTeX bits together in a .tar.gz file <a href="http://bethmcmillan.com/geek/automata/tex-files.tar.gz">here</a>. To extract and compile, run these commands in sequence:</p>
<p><code>tar -xzvf tex-files.tar.gz<br />
pdflatex writeup.tex<br />
bibtex writeup.aux<br />
pdflatex writeup.tex<br />
pdflatex writeup.tex<br />
pdflatex code.tex<br />
pdflatex stitch.tex</code></p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=693</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abzymes: tiny factories made to order</title>
		<link>http://bethmcmillan.com/blog/?p=684</link>
		<comments>http://bethmcmillan.com/blog/?p=684#comments</comments>
		<pubDate>Thu, 20 Sep 2012 18:54:12 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Science]]></category>
		<category><![CDATA[abzymes]]></category>
		<category><![CDATA[antibodies]]></category>
		<category><![CDATA[biological washing powder]]></category>
		<category><![CDATA[biotechnology]]></category>
		<category><![CDATA[enzymes]]></category>
		<category><![CDATA[enzymology]]></category>
		<category><![CDATA[immunology]]></category>
		<category><![CDATA[synthetic biology]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=684</guid>
		<description><![CDATA[I wrote this for the Wellcome science writing prize. It didn&#8217;t make the shortlist, so I can publish it here! Enzymes are the machines of the biological world. In our bodies, they break down our food, fight off invading bacteria, &#8230; <a href="http://bethmcmillan.com/blog/?p=684">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>I wrote this for the Wellcome science writing prize. It didn&#8217;t make the shortlist, so I can publish it here!</em></p>
<p>Enzymes are the machines of the biological world. In our bodies, they break down our food, fight off invading bacteria, turn sugar into energy, and perform all the processes that keep us alive. Honed by millions of years of evolution, they perform reactions at lightning speed &#8211; thousands of times faster than they would happen naturally. Chemists look on in envy as enzymes effortlessly do things that would take them millions of pounds of equipment, and often several years, to copy.</p>
<p>At home, we&#8217;re all familiar with enzymes as the secret behind biological washing powders, which clean stains at low temperatures. Commercially, enzymes are used to recycle paper, as well as in septic tanks, and even in kitchens as meat tenderisers. And they do this all at room temperature, without help from strong chemicals.</p>
<p>Making enzymes that perform any reaction we want could revolutionise modern living. Imagine soaking your potatoes in an enzyme bath that takes the skins right off, no peeling necessary. We could make enzymes to break down oil spills into harmless substances, make new medicines that target specific cancers or infections and destroy them – or even make a magic spray that eats away the horrible sticky marks that price labels always leave on books, without destroying the cardboard covers (this one is a dream of mine).  </p>
<p>So why haven&#8217;t we done this? Well, enzymes need to be a specific shape in order to work at all. Unfortunately, enzymes are a type of protein, and we still don&#8217;t know how to make proteins that fold into the shapes we want. A protein chain will always fold into the same shape, time and time again &#8211; but the forces behind this are, for the most part, a complete mystery. Until we know this, it&#8217;s impossible to make artificial enzymes that are anything other than floppy, useless messes. </p>
<p>We can copy proteins from the natural world, stealing structural sections and active sites and mashing them together. But &#8211; if the enzyme produced is even functional &#8211; we&#8217;re still limited to reactions that real enzymes already do catalyse. So, we&#8217;re stuck in this situation, where we can&#8217;t design our own enzymes, because we don&#8217;t know how to make the structure. But what if we could side-step that problem altogether, and make evolution do the work for us?</p>
<p>Enter antibodies. Antibodies are the first line of defence your immune system puts up against invading germs. They&#8217;re proteins as well, and they bind very tightly to specific parts of the bacteria or virus your body is fighting, signalling to the rest of the immune system to come in and destroy it. New antibodies are produced every time your immune system comes across a new pathogen. Antibodies are very specific – each antibody binds to one thing, and it binds that one thing very well indeed. </p>
<p>Scientists raise specific antibodies against a particular molecule by injecting it into a rabbit or a mouse. The animal&#8217;s immune system then makes new antibodies against the unfamiliar molecule, which can be taken out and grown in a petri dish. </p>
<p>But what use is a protein that just binds tightly to something if you&#8217;re trying to make an enzyme? Well, enzymes use a lot of different tools to make reactions happen. But if we take a step back and look at the whole picture, one common theme underpins them all: enzymes bind the most tightly to the intermediate stage of the reaction they supervise. </p>
<p>Take, for example, an enzyme that converts starch into sugar. It will bind to starch fairly well to start things off, but it will twist the starch molecule out of shape, because it really wants to bind to the intermediate. The intermediate&#8217;s structure isn&#8217;t quite starch, and it isn&#8217;t quite sugar, but it&#8217;s something in between. This twisting puts a strain on the starch, making the molecule react and form the intermediate. Intermediates are always unstable molecules, so then the intermediate will rapidly turn into the final product, which is sugar. Et voilà, the reaction has occurred.</p>
<p>So if we can create a stable version of this intermediate and create an antibody which binds to it, we&#8217;ll have a sturdy protein shape that catalyses a reaction the way we want it to – no assembly required. These new biological machines have been dubbed “abzymes”, and have already been used to target and inactivate the HIV virus. </p>
<p>Without having to unlock the secrets of protein structure, we&#8217;ve managed to make custom, functioning enzymes, just by relying on the immune system to do the work for us. Abzymes: lazy science at its best.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=684</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modelling endocytosis in baker&#8217;s yeast</title>
		<link>http://bethmcmillan.com/blog/?p=523</link>
		<comments>http://bethmcmillan.com/blog/?p=523#comments</comments>
		<pubDate>Wed, 29 Aug 2012 14:30:18 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Geeking]]></category>
		<category><![CDATA[Science]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=523</guid>
		<description><![CDATA[For my lab project this year I made a computer model of a biological process. The organism I was looking at was budding yeast &#8211; also known as baker&#8217;s, or brewer&#8217;s yeast. It&#8217;s a type of single celled fungus that&#8217;s &#8230; <a href="http://bethmcmillan.com/blog/?p=523">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For my lab project this year I made a computer model of a biological process.</p>
<p>The organism I was looking at was budding yeast &#8211; also known as baker&#8217;s, or brewer&#8217;s yeast. It&#8217;s a type of single celled fungus that&#8217;s super useful in the kitchen, and is used a lot by biologists for finding out more about the things that happen in cells. Yeast cells sometimes need to recycle the proteins on their outer membrane.<br />
<img class="alignleft size-full wp-image-647" title="endo-1" src="http://bethmcmillan.com/blog/wp-content/uploads/2012/08/endo-1.png" alt="" width="200" height="223" /></p>
<p>First, a little pit appears in the membrane where the protein (depicted in pink) is.</p>
<p><img class="alignright size-full wp-image-647" title="endo-2" src="http://bethmcmillan.com/blog/wp-content/uploads/2012/08/endo-2.png" alt="" width="200" /></p>
<p>Then, the pit elongates into a tube shape.</p>
<p><img class="alignleft size-full wp-image-647" title="endo-3" src="http://bethmcmillan.com/blog/wp-content/uploads/2012/08/endo-3.png" alt="" width="200" height="223" /></p>
<p>From the end of the tube, a round compartment buds off.</p>
<p><img class="alignright size-full wp-image-647" title="endo-4" src="http://bethmcmillan.com/blog/wp-content/uploads/2012/08/endo-4.png" alt="" width="200" /></p>
<p>The compartment travels into the cell, where its contents are sorted.</p>
<p>&nbsp;</p>
<p>I was looking at the elongation step of this process. My simulation calculates the length of the tube over time.</p>
<p>I wrote it in Python, and I&#8217;m releasing it freely under <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>. It consists of four core programs:</p>
<ul>
<li><a href="http://bethmcmillan.com/geek/endocytosis/main.py">main.py</a> &#8211; the central program (I made an extra version that runs several times &#8211; <a href="http://bethmcmillan.com/geek/endocytosis/repeatedmain.py">repeatedmain.py</a>)</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/classes.py">classes.py</a> &#8211; this module contains descriptions of all the agents in my model</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/parameters.py">parameters.py</a> &#8211; this contains all the constants, like the temperature</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/functions.py">functions.py</a> &#8211; this contains all the functions called by main.py</li>
</ul>
<p>I also made four graphics programs that use the data output:</p>
<ul>
<li><a href="http://bethmcmillan.com/geek/endocytosis/graphs.py">graphs.py</a> &#8211; requires the PyX module</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/images.py">images.py</a> &#8211; requires the PyX module</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/animation.sh">animation.sh</a> &#8211; a bash script that requires the ImageMagick suite of programs</li>
<li><a href="http://bethmcmillan.com/geek/endocytosis/newimages.py">newimages.py</a> &#8211; requires PyGame</li>
</ul>
<p>You can vary lots of the parameters and see what effect they have on the results. The results my simulation gives out aren&#8217;t very close to what really happens in cells. I was looking at only a few of the proteins involved, but in reality there are dozens. Hopefully the next student who builds on my code will bring it a little further towards the real world.</p>
<p>If you want more information, I have some PDFs of my final reports. For a brief overview, here&#8217;s the <a href="http://bethmcmillan.com/geek/endocytosis/Endocytosis-Simulation-Presentation.pdf">presentation I gave last week</a>. For a less brief overview, here&#8217;s my <a href="http://bethmcmillan.com/geek/endocytosis/Endocytosis-Simulation-Report.pdf">written report</a> (figures <a href="http://bethmcmillan.com/geek/endocytosis/Endocytosis-Simulation-Figures.pdf">here</a>). Woo, science!</p>
<p>A big thank you to my supervisor, <a href="http://www.shef.ac.uk/physics/contacts/rhoda-hawkins">Rhoda</a> and my co-supervisor <a href="http://www.shef.ac.uk/mbb/staff/ayscough">Kathryn</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=523</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>46p noodle soup</title>
		<link>http://bethmcmillan.com/blog/?p=627</link>
		<comments>http://bethmcmillan.com/blog/?p=627#comments</comments>
		<pubDate>Sat, 26 May 2012 16:50:31 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Cooking]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=627</guid>
		<description><![CDATA[As a student, economy is very important in my meal plans. This is a dish I make quite often, that costs a whopping 46p per serving, provides one of your &#8220;five a day&#8221; and 6% of your protein RDA. Tesco&#8217;s &#8230; <a href="http://bethmcmillan.com/blog/?p=627">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://bethmcmillan.com/blog/wp-content/uploads/2012/05/46p-noodle-soup.jpg" alt="" title="46p noodle soup" width="400" height="300" class="aligncenter"/></p>
<p>As a student, economy is very important in my meal plans. This is a dish I make quite often, that costs a whopping 46p per serving, provides one of your &#8220;five a day&#8221; and 6% of your protein RDA. Tesco&#8217;s 11p noodles are one of my favourite things in the world &#8211; they&#8217;re vegetarian if you throw away the flavouring packet, and they have a nice texture. You can substitute in any other brand of instant noodles &#8211; you just might have to adjust the cooking time and amount of water. This serves 1. </p>
<p><u>Ingredients and cost</u><br />
1 tsp sesame oil for frying (£0.02)<br />
1 tsp Chinese five spice powder (£0.04)<br />
1/4 spring onion, finely chopped (£0.03)<br />
200ml boiling water (free)<br />
1 vegetable stock cube (£0.09)<br />
50g frozen peas	(£0.07)<br />
50g frozen sweetcorn (£0.07)<br />
sprinkle of chilli flakes (£0.03)<br />
1 packet of Tesco&#8217;s 11p noodles (£0.11)<br />
optional: 1/4 red bell pepper, finely chopped (£0.20, bringing the total cost up to a shocking 66p)</p>
<p><u>Method</u><br />
1. Heat up the sesame oil in a saucepan, then add the onion and five spice powder, and fry for a minute or so.<br />
2. Add the boiling water, stock cube, frozen vegetables, bell pepper (if using) and chilli flakes, and bring to the boil.<br />
3. Add the noodles and cook for 2.5 minutes, stirring occasionally. </p>
<p>Serve with a spoon, fork and napkin. It&#8217;s messy to eat!</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=627</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modifying a FLAME model</title>
		<link>http://bethmcmillan.com/blog/?p=570</link>
		<comments>http://bethmcmillan.com/blog/?p=570#comments</comments>
		<pubDate>Thu, 24 May 2012 16:41:17 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Geeking]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[agent-based modelling]]></category>
		<category><![CDATA[bacteria]]></category>
		<category><![CDATA[bacteriophage]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[FLAME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux command line]]></category>
		<category><![CDATA[modelling]]></category>
		<category><![CDATA[phage]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=570</guid>
		<description><![CDATA[As I mentioned in my previous post about my adventures in FLAME modelling, I started out with code from my lecturer. I started with three two-dimensional models, each of which contained a different type (genus) of bacteria (Vibrio, Sar11 and &#8230; <a href="http://bethmcmillan.com/blog/?p=570">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As I mentioned in my <a href="http://bethmcmillan.com/blog/?p=550">previous post</a> about my adventures in FLAME modelling, I started out with code from my lecturer. I started with three two-dimensional models, each of which contained a different type (genus) of bacteria (Vibrio, Sar11 and &#8220;Bacteria X&#8221;). Each bacteria agent had X and Y co-ordinates, an ID and a radius. The radius was different for each type of bacteria, and it defined the rules that applied to that bacteria. They moved around by Brownian motion, and if they hit a virus there was a certain probability that they would be killed. The phages moved around in a similar fashion.</p>
<p><a href="http://bethmcmillan.com/geek/FLAME/bacteriophage-3d.tar.gz">My code can be downloaded from here</a>. In this post, I&#8217;m going to take you through how I converted these three models into a single model, added a third dimension, and persuaded the viruses and bacteria to replicate. This is a tale of how it&#8217;s possible to do some quite cool things to a program even if you don&#8217;t fully understand how it works.</p>
<p>If you&#8217;re particularly interested, you can download a PDF of the report I handed in <a href="http://bethmcmillan.com/geek/FLAME/Beth_McMillan_-_Modelling_Bacteriophages.pdf">here</a>. It starts with a brief review of a mathematical bacteriophage model, then goes on to the FLAME model in the second half (page 2). I got a mark of 95% for it, so I&#8217;m showing it off to everyone ^_^</p>
<p><span id="more-570"></span><span style="text-decoration: underline;">Three becomes one.</span><br />
This part was arguably the simplest. The C file <strong>phageAndBacteriaV6.c</strong> contained conditional statements like this one:</p>
<blockquote><p> if (BACTERIARADIUS == 100){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SAR11<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yUpperBorder = 24;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yLowerBorder = 736;<br />
} else if (BACTERIARADIUS == 500){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Bacteria X<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yUpperBorder = 40;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yLowerBorder = 720;<br />
} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Vibrio<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yUpperBorder = 57;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yLowerBorder = 703;<br />
}</p></blockquote>
<p>Which handily deals with all the different behaviours of the bacterial species. So all I had to do was combine the bacteria from all 3 versions of the <strong>0.xml</strong> file together, and change their IDs to avoid overlap. Then I used conditional display in the FLAME visualiser to make them different sizes and colours in my animation.</p>
<p><span style="text-decoration: underline;">Going from 2D to 3D</span><br />
This was slightly harder &#8211; but nowhere near as difficult as I&#8217;d anticipated. Broadly, I found everywhere that X and Y were referenced in the code, and added a Z. I replicated a couple of position-checking functions wholesale (including the one above) and added some variables in some places. I found it useful to use &#8220;grep -i&#8221;, followed by the name of the thing I&#8217;d changed, at the command line to look for where variables were used.</p>
<p>You&#8217;re probably familiar with the equation to find the length between 2 points in 2 dimensions (from good old Pythagoras):</p>
<p><img src="http://www.bethmcmillan.com/blog/images/rootx2y2.png" alt="root x^2 y^2" /></p>
<p>Extending it to three dimension gives:</p>
<p><img src="http://www.bethmcmillan.com/blog/images/rootx2y2z2.png" alt="root x^2 y^2 z^2" /></p>
<p>So I changed that function, and that does it for <strong>phageAndBacteriaV6.c</strong>.</p>
<p>I used the FLAME editor to change <strong>phageAndBacteriaV6.xml</strong> to include the variable “bacteriaZ” as a double belonging to the &#8220;Bacteria&#8221; agent and to the &#8220;bacteriaInformation&#8221; message. I also added the variable “phageZ” as a double to the Phage agent and the phageInformation message.</p>
<p>Next, I needed to add starting Z positions for the bacteria and viruses to <strong>0.xml</strong>. This was a bit more tricky. I started out by simply using &#8220;Find and Replace&#8221; in Gedit to change:</p>
<blockquote><p>&lt;/bacteriaY&gt;
</p></blockquote>
<p>to</p>
<blockquote><p>&lt;/bacteriaY&gt;<br />
&lt;bacteriaZ&gt;120&lt;/bacteriaZ&gt;</p></blockquote>
<p>and the same with phageY and phageZ. This was great, because I could then try compiling the model, <a href="http://bethmcmillan.com/blog/?p=550">by running xparser, then &#8220;make&#8221;</a>. There was only one error on the first attempt (I&#8217;d forgotten an asterisk somewhere) and then it all worked fine. I opened up the files using the FLAME visualiser and added the Z component to the visualisation, and there they were, bobbing around.</p>
<p>Great! Except that the bacteria and phages all started from the same Z position (i.e. in the same plane). I wanted them in random places, so I made up a little bash script:</p>
<p>&nbsp;</p>
<blockquote><p>#! /bin/bash</p>
<p>RANGE=780</p>
<p>for i in {1..30}<br />
do<br />
echo $i<br />
number=$RANDOM<br />
let &#8220;number %= $RANGE&#8221;<br />
let &#8220;number=$number + 57&#8243;<br />
sed -ie &#8220;0,/&lt;phageZ&gt;120/{s/&lt;phageZ&gt;120/&lt;phageZ&gt;$number/}&#8221; ./test.xml<br />
done</p></blockquote>
<p>&nbsp;</p>
<p>Which I ran once, then changed the word &#8220;phage&#8221; to &#8220;bacteria&#8221; and ran again. This distributed them randomly within the boundaries of my little universe (between 57 and 837 units, somewhat arbitrarily).</p>
<p><span style="text-decoration: underline;">Bacterial replication</span><br />
I was only supposed to be adding phage replication, but I thought bacterial would be interesting (and straightforward), so I did that first. I have to admit I was stumped to begin with, but upon <a href="http://www.flame.ac.uk/docs/user_manual.html">reading the manual</a> (which I should definitely have done first), I discovered the built-in function add_agentname_agent(var1,&#8230;,varN). So, based on a random number, I can get my bacteria to divide occasionally. I included this bit of code inside the bacteriaRandomMove() function, which is called at every time step.</p>
<blockquote><p>
double diceRoll = 0;<br />
diceRoll = ((double)rand()/((double)RAND_MAX)); //0 and 1<br />
if (diceRoll <= dividingProbability) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Bacteria %d at bx %f by %f bz %f has divided \n", BACTERIAID, BACTERIAX, BACTERIAY, BACTERIAZ);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_Bacteria_agent(newb_ID, BACTERIAX, BACTERIAY, BACTERIAZ, BACTERIARADIUS, DEFENSEFACTOR);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</p></blockquote>
<p>Easy peasy! The only problem with this, is that the bacteria ends up with the same ID as its mother. This means that if the one bacteria is killed, its descendants will be as well. According to a trusted source (my awesome friend Gavin), this is an outstanding bug in FLAME, as there is no way to give consecutive numbers to new agents. People often solve this problem by giving agents random IDs over a large range &#8211; which does run the risk of occasional collisions, but is certainly better than my method.</p>
<p><u>Phage burst</u><br />
There was already a function that kills a bacteria when it is hit by a successful phage attack, so I just had to add in my phage replication code there.</p>
<blockquote><p>
int makeNewPhage(int lphageID, double lphageLife, double lphageX, double lphageY, double lphageZ, double lphageRadius, int lsetSeed, double bactRadius) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int burstSize = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (bactRadius == 100){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SAR11<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;burstSize = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if (bactRadius == 500){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Bacteria X<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;burstSize = 5;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Vibrio<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;burstSize = 9;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#8220;%d\n&#8221;,burstSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;burstSize;i++) { add_Phage_agent(lphageID, lphageLife, lphageX, lphageY, lphageZ, lphageRadius, lsetSeed);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=570</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bring It, Don&#8217;t Bin It! Summer 2012</title>
		<link>http://bethmcmillan.com/blog/?p=592</link>
		<comments>http://bethmcmillan.com/blog/?p=592#comments</comments>
		<pubDate>Tue, 22 May 2012 12:52:19 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Bring It Don't Bin It]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=592</guid>
		<description><![CDATA[If you&#8217;re a University of Sheffield student, the &#8220;bring it, don&#8217;t bin it&#8221; scheme gives you the chance to donate unwanted items to charity when you move out. If you live in any of the following postcode areas, you can &#8230; <a href="http://bethmcmillan.com/blog/?p=592">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re a University of Sheffield student, the &#8220;bring it, don&#8217;t bin it&#8221; scheme gives you the chance to donate unwanted items to charity when you move out. If you live in any of the following postcode areas, you can collect a clear sack from propertywithUS or the Student Advice Centre between Wednesday 23 May and Friday 22 June 2012:</p>
<ul>
<li>S3 7</li>
<li>S6 3</li>
<li>S10 1</li>
<li>S10 2</li>
<li>S10 5</li>
</ul>
<p>Items that can be donated include bedding, clothes, shoes, cutlery, crockery, unopened toiletries, books, CDs and DVDs. Leave your clear sack outside your house out for collection on:</p>
<ul>
<li>Monday 28 May</li>
<li>Thursday 31 May</li>
<li>Friday 08 June</li>
<li>Monday 11 June</li>
<li>Monday 25 June</li>
<li>Thursday 28 June</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=592</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running FLAME models at the Linux command line</title>
		<link>http://bethmcmillan.com/blog/?p=550</link>
		<comments>http://bethmcmillan.com/blog/?p=550#comments</comments>
		<pubDate>Fri, 11 May 2012 15:38:03 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Geeking]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[agent-based modelling]]></category>
		<category><![CDATA[bacteria]]></category>
		<category><![CDATA[bacteriophage]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[FLAME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux command line]]></category>
		<category><![CDATA[modelling]]></category>
		<category><![CDATA[phage]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=550</guid>
		<description><![CDATA[Update: I&#8217;ve written another post about how I edited the model. Last week, I modified a FLAME model to make it 3D and added some other features (with help from my John). This animation is of the model running, with &#8230; <a href="http://bethmcmillan.com/blog/?p=550">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Update: I&#8217;ve written another post about <a href="http://bethmcmillan.com/blog/?p=570">how I edited the model</a>.<br />
</em><br />
Last week, I modified a FLAME model to make it 3D and added some other features (with help from my <a href="http://indy.im/gnuday">John</a>). This animation is of the model running, with me wiggling it around a bit to show the 3D-ness, and then leaving it be. There are explosions!</p>
<p><img src="http://bethmcmillan.com/blog/images/bacteriophage-3.gif" alt="3D FLAME model of bacteria-phage interactions" /></p>
<p>I think it&#8217;s pretty cool. It represents a community of bacteria being attacked by viruses. These viruses &#8211; known as &#8220;bacteriophages&#8221; &#8211; could be really useful for treating infections, because they can kill bacteria which are resistant to traditional antibiotics. </p>
<p>In order to work out what dosage to use, and when to apply it, we need to know more about how bacteria and viruses interact with each other. This is difficult to study in real life, since viruses are so tiny &#8211; but by using computer models, we can make better approximations of how they behave.</p>
<p>The animation shows three types of bacteria, represented by green, blue and pink spheres. The orange dots are viruses. When a bacterium is infected by one of the viruses, it bursts, releasing lots of new viruses. Each virus and bacterium is an &#8220;agent&#8221; inside the model, and they each follow a particular set of rules, and carry pieces of information. I was using a piece of software called &#8220;<a href="http://www.flame.ac.uk/">FLAME</a>&#8221; for this.</p>
<p>FLAME uses C and XML to make rules for the agents in a model. I found the documentation a bit obtuse, so I thought I&#8217;d make a blog post about exactly what I did, in case it was useful to anyone.</p>
<p>Initially, you need to install a set of programs &#8211; gcc, xparser, libmboard, and the FLAME visualiser. <a href="http://www.flame.ac.uk/docs/install.html">The installation instructions on the website</a> are quite straight-forward, so I&#8217;ll start my tutorial by talking about running a model. </p>
<p><strong>Running a model in FLAME using the Linux command line</strong></p>
<p>You can download my model code from <a href="http://bethmcmillan.com/geek/FLAME/bacteriophage-3d.tar.gz">here</a>. It contains 4 files.</p>
<ul>
<li><strong>0.xml</strong> describes the starting state of all the agents in the model</li>
<li><strong>phageAndBacteriaV6.c</strong> contains all of the functions that the agents use</li>
<li><strong>phageAndBacteriaV6.xml</strong> describes all the agents, and the messages they send each other</li>
<li><strong>visual-rules.xml</strong> dictates how the model will be visualised</li>
</ul>
<p>You start by using the xparser program on the xml file. I saved all my files in /home/beth/models/ so that is the location that I will use in my command line work &#8211; you should substitute it for your working folder. So: open up a terminal. Next, navigate to the directory where you have installed xparser and run</p>
<p><code>./xparser /home/beth/models/phageAndBacteriaV6.xml</code></p>
<p>This will create a load of files in home/beth/models. Navigate to /home/beth/models and run</p>
<p><code> make</code></p>
<p>This creates the model programs, most importantly one called <strong>main</strong>. You can then run the model, giving the number of iterations you want (in this case, <strong>100</strong>) and the location of the 0.xml file (in this case, <strong>./0.xml</strong>)</p>
<p><code>./main 100 ./0.xml</code></p>
<p>This creates a load of xml files, numbered 1 to 100. Each one contains information about every single agent in the model at a particular time step. Now, these don&#8217;t look very exciting in themselves, but this is where the flame visualiser comes in.</p>
<p>Navigate to where you&#8217;ve installed the visualiser and run</p>
<p><code>./flame_visualiser</code></p>
<p>A window should pop up. Go to &#8220;File&#8221; > &#8220;Open&#8221; and find <strong>visual-rules.xml</strong>. If you click on &#8220;Open Visual Window&#8221;, you should now see lots of lovely spheres. It&#8217;s a fairly straight-forward program to use &#8211; you can drag the picture around, start and stop the animation, go back and forward through the iterations, and zoom. If you have a tiny screen, you can grab and move the window by holding down Alt when you click &#038; drag.</p>
<p>I made my animation by opening &#8220;Image Settings&#8221; and then setting the iteration to 0 and clicking &#8220;Start Animation.&#8221; This saves a series of numbered images. You can rotate the picture while you&#8217;re recording if you fancy. Then I opened up <a href="http://www.gimp.org/">The GIMP</a>, clicked &#8220;File&#8221; > &#8220;Open As Layers&#8221; and selected all 100 images. Then I saved the image as a .gif, selecting &#8220;Save As Animation&#8221;. </p>
<p>So that&#8217;s how to run an existing model, and make a pretty picture. In my <a href="http://bethmcmillan.com/blog/?p=570">next post</a>, I talk about how to edit one.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=550</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Recently I&#8217;ve been&#8230;</title>
		<link>http://bethmcmillan.com/blog/?p=527</link>
		<comments>http://bethmcmillan.com/blog/?p=527#comments</comments>
		<pubDate>Sun, 29 Apr 2012 20:56:39 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[Geeking]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=527</guid>
		<description><![CDATA[&#8230; to the cinema. I feel like I&#8217;ve been anticipating the new Joss Whedon film, the Cabin in the Woods, for a million years. I finally watched it today, and was not at all disappointed. It was hilarious, clever and &#8230; <a href="http://bethmcmillan.com/blog/?p=527">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>&#8230; to the cinema</strong>. I feel like I&#8217;ve been anticipating the new Joss Whedon film, <a href="http://discoverthecabininthewoods.com/">the Cabin in the Woods</a>, for a million years. I finally watched it today, and was not at all disappointed. It was hilarious, clever and full of unexpected twists and turns. It has a few familiar faces from his previous projects, most notably Fran Kranz (Topher from Dollhouse) as the quipping, pop culture-referencing stoner Marty, and my old favourite Amy Acker (Fred from Angel) makes an appearance as a serious-faced chemist. Not that they&#8217;re typecast at all. There are also echoes of the Rossum corporation, and the Initiative. I don&#8217;t want to give away the plot, but the film is a fantastic deconstruction of the horror genre, that asks some deeper questions about why society needs to see people being pulled to shreds by monsters in our movies &#8211; in between lots of people being pulled to shreds by monsters. </p>
<p><a href="http://www.thehungergames.co.uk/">The Hunger Games</a> and <a href="http://adangerousmethod-themovie.com/">A Dangerous Method</a> are also definitely worth a watch, for cool sci fi and angry Freud, respectively.</p>
<p><strong>&#8230;watching food programs</strong>. Hugh Fearnley-Whittingstall&#8217;s <a href="http://www.channel4.com/programmes/river-cottage">River Cottage Veg</a> is showing again on More4 on Sundays at the moment. I love all the River Cottage series anyway, since I&#8217;m a huge foodie, but as a vegetarian, watching a food show where I can cook everything on the menu is a particular treat. I have the cookbook that goes with the series as well, and I&#8217;ve really enjoyed cooking and eating the recipes I&#8217;ve tried, especially the <a href="http://theenglishkitchen.blogspot.co.uk/2011/11/macaroni-peas.html">macaroni peas</a> and the <a href="http://www.guardian.co.uk/lifeandstyle/2011/aug/26/vegetable-recipes-fearnley-whittingstall">spicy carrot and chickpea pita pocket</a>. </p>
<p>The <a href="http://www.channel4.com/programmes/the-fabulous-baker-brothers">Fabulous Baker Brothers</a> is another food-focussed show I&#8217;ve been enjoying, as well as my old favourite, <a href="http://www.channel4.com/programmes/jamies-30-minute-meals">Jamie&#8217;s 30 Minute Meals</a>. Edit: I forgot <a href="http://www.channel4.com/programmes/how-to-cook-like-heston">How to Cook Like Heston</a>! How could I? It&#8217;s wonderful and mad. </p>
<p><strong>&#8230;using <a href="http://pyx.sourceforge.net/">PyX</a> to make graphs.</strong> It&#8217;s a really useful Python module that makes both graphs and pictures. You put in your data and out comes a PDF or a postscript file. It&#8217;s super easy to change colours, line styles and axes &#8211; and because it&#8217;s Python, it fits in well with the simulation that I&#8217;m making in the same language. I found the documentation and examples on the website really useful and easy to understand. </p>
<p><strong>&#8230;reading some Red Dwarf books. </strong><em>Red Dwarf: Infinity Welcomes Careful Drivers </em>and <em>Better than Life</em> are two old favourites of mine. While the TV series was a bit hit-and-miss in places, the books are very funny and very polished &#8211; they employ the same kind of anarchic, surreal comedy as Douglas Adams, with more curry and fewer dressing gowns. </p>
<p><strong>&#8230;doing some other things.</strong> Apart from all of that, I&#8217;ve mostly been huddling inside in the warm and dry while torrential rain thunders outside, revising for my upcoming exams, and turning up at my partner, John&#8217;s, house to demand food (successfully: I am working my way through a slice of freshly-based soda bread as we speak). Stay dry, folks. </p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=527</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I can&#8217;t wait for strawberries to be in season. No really, I can&#8217;t.</title>
		<link>http://bethmcmillan.com/blog/?p=485</link>
		<comments>http://bethmcmillan.com/blog/?p=485#comments</comments>
		<pubDate>Wed, 04 Apr 2012 21:11:24 +0000</pubDate>
		<dc:creator>Beth</dc:creator>
				<category><![CDATA[Cooking]]></category>
		<category><![CDATA[compote]]></category>
		<category><![CDATA[croissants]]></category>
		<category><![CDATA[jam]]></category>
		<category><![CDATA[lemon juice]]></category>
		<category><![CDATA[preserves]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[seasonal food]]></category>
		<category><![CDATA[strawberries]]></category>
		<category><![CDATA[sugar]]></category>
		<category><![CDATA[summer food]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://bethmcmillan.com/blog/?p=485</guid>
		<description><![CDATA[Every year, pre-season strawberries pull me in with their lovely red flesh and wonderful smell, and then when I inevitably buy and eat them, they taste like vinegar and sadness. It seems like sacrilege to waste them, though, so until &#8230; <a href="http://bethmcmillan.com/blog/?p=485">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://bethmcmillan.com/blog/images/Strawberries.jpg" alt="" /><br />
Every year, pre-season strawberries pull me in with their lovely red flesh and wonderful smell, and then when I inevitably buy and eat them, they taste like vinegar and sadness.  It seems like sacrilege to waste them, though, so until I learn self-control, I&#8217;ll be making a lot of compotes. This is the one I made today. It pretty much tasted like very fancy, slightly warm jam.</p>
<p><strong>Strawberry compote for the terminally impatient</strong><br />
Serves 2 or 3</p>
<p><u>Ingredients:</u><br />
5 or 6 rubbish strawberries<br />
Zest of 0.25 lemon<br />
Juice of 0.25 lemon (optional, because they&#8217;re probably sour enough already)<br />
1 tbsp sugar<br />
0.25 tsp vanilla essence</p>
<p><u>Directions:</u><br />
Slice the strawberries.<br />
Put all the ingredients in a saucepan over a low heat and cook until the strawberries are soft &#8211; around 5 minutes<br />
Mash with a fork<br />
Serve with anything you like. I went for a croissant and a spoonful of double cream because apparently my resolution this year is to become fat like a house.</p>
]]></content:encoded>
			<wfw:commentRss>http://bethmcmillan.com/blog/?feed=rss2&#038;p=485</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
