<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-5096534401795088958</id><updated>2010-01-01T22:16:52.572-08:00</updated><title type='text'>Photos, ramblings, whatever</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/home.htm'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jeremy-list.drivehq.com/atom.xml'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-8850562068477535169</id><published>2010-01-01T21:43:00.000-08:00</published><updated>2010-01-01T22:16:52.594-08:00</updated><title type='text'>New year: 2010</title><content type='html'>Yesterday was a good one. For one thing the date looked like a binary number (010110). For another thing I had a good day at the beach with good friends.&lt;br /&gt;Unfortunately the rousie work isn't working so well: I'm on the company's third gang, and unfortunately the shearers on the third gang are almost as unreliable as the weather, meaning I have so far only had one day of work. That hasn't stopped me from being fairly busy. I've also painted my grandmother's laundry.&lt;br /&gt;Below are some of the photos I took on New Years Day.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0743-resized-735860.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0743-resized-735853.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0744-resized-732960.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0744-resized-732858.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0748-resized-727955.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0748-resized-727948.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0749-resized-763281.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0749-resized-763247.JPG" alt="" border="0" /&gt;&lt;/a&gt;A very good friend&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0750-resized-744855.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0750-resized-744849.JPG" alt="" border="0" /&gt;&lt;/a&gt;My sister&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0751-resized-734576.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0751-resized-734551.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0753-resized-728158.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0753-resized-728067.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0754-resized-729398.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0754-resized-729291.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0756-resized-717477.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0756-resized-717342.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0758-resized-702947.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0758-resized-702937.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-8850562068477535169?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/8850562068477535169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=8850562068477535169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8850562068477535169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8850562068477535169'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2010/01/new-year-2010.html' title='New year: 2010'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-1225349079286228087</id><published>2009-12-10T13:57:00.001-08:00</published><updated>2009-12-10T14:07:05.531-08:00</updated><title type='text'>Shearing</title><content type='html'>On Tuesday I had a trial as a rousie for a shearing company, and yesterday was my first day of paid work as a rousie. Today I have the day off because bad weather was expected. For those who don't know what a rousie is: we take the fleece from the shearing stage, throw it onto the wool table (that's harder than it sounds but I got used to it quite quickly), skirt the fleeces (remove the daggy bits from the edges), and roll them up and put them in the press. We also keep the floor tidy. The hours are long and the work is hard but it's rather fun and the pay is good.&lt;br /&gt;On another note: I just beat my computer at Chinese chess!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/checkmate-764130.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 252px;" src="http://jeremy-list.drivehq.com/uploaded_images/checkmate-764126.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It was set to use an opening book and think 6 moves ahead. I had previously had 2 stalemates in a row with it set to think 5 moves ahead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-1225349079286228087?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/1225349079286228087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=1225349079286228087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1225349079286228087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1225349079286228087'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/12/shearing.html' title='Shearing'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-8046552738404112469</id><published>2009-12-04T15:30:00.000-08:00</published><updated>2009-12-04T15:34:49.910-08:00</updated><title type='text'>Marks</title><content type='html'>I just got the last of my marks back from the second semester.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;CHIN102 (Chinese language 1B): A&lt;/li&gt;&lt;li&gt;MATH161 (Discrete Mathematics &amp;amp; Logic): A&lt;/li&gt;&lt;li&gt;COMP206 (Program and Data Structures): C+&lt;/li&gt;&lt;/ul&gt;I unfortunately didn't pass COMP311 due to having forgotten how to write a good academic essay. Something I must re-learn during the summer holiday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-8046552738404112469?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/8046552738404112469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=8046552738404112469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8046552738404112469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8046552738404112469'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/12/marks.html' title='Marks'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-2617974158858757876</id><published>2009-12-01T00:14:00.000-08:00</published><updated>2009-12-01T00:36:06.413-08:00</updated><title type='text'>Flowers in the Tararua range</title><content type='html'>On Sunday I accompanied a group of people who went into the forest in the vicinity of Holdsworth Lodge looking for Orchids. We didn't see any that were actually in flower (or at least I didn't) but I did take some nice pictures of various other things.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0631-780894.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0631-780880.JPG" alt="" border="0" /&gt;&lt;/a&gt;I'm not sure what this one is.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0632-737261.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0632-737250.JPG" alt="" border="0" /&gt;&lt;/a&gt;Lupin&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0634-700776.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0634-700753.JPG" alt="" border="0" /&gt;&lt;/a&gt;A pretty little fern.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0636-726805.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0636-726789.JPG" alt="" border="0" /&gt;&lt;/a&gt;Birch mistletoe. It's an extremely rare plant and in danger of becoming extinct. Mostly because possums think it's chocolate, but also because it doesn't spread very fast.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0637-708985.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0637-708969.JPG" alt="" border="0" /&gt;&lt;/a&gt;Another shot of the birch mistletoe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-2617974158858757876?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/2617974158858757876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=2617974158858757876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2617974158858757876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2617974158858757876'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/12/flowers-in-tararua-range.html' title='Flowers in the Tararua range'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-3151484649613563329</id><published>2009-11-26T02:15:00.000-08:00</published><updated>2009-11-26T03:19:47.461-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><title type='text'>That code in my last post</title><content type='html'>Turns out that code in my last post worked pretty well despite having a couple of bugs which I would have expected to make the whole thing not work. In fact, now they're fixed, it doesn't even work much better due to the low probability of any mutations causing the model organisms to take advantage of this afternoon's bugfixes.&lt;br /&gt;&lt;br /&gt;As well as the bugfixes, I've now set it up so the virtual organisms get saved to the disk. This does make it more practical as a spamfilter, but I'll want to change the save location when I start integrating it with an emailer.&lt;br /&gt;&lt;br /&gt;Here is the code. It still works basically as described in the previous post. But now the virtual organisms can actually do arithmetic. However, from what I can figure out, if I start the program from scratch (including deleting all previous virtual organisms), the ones which try to use the arithmetic unit get out-competed by the ones which do everything just by shifting round chunks of data. Some of them even manage to return different values even though their code doesn't contain a return instruction. I suspect most of them do this by putting the zero they get fed at the end of each file into the destination value of an instruction that gets executed later, turning it into a return instruction.&lt;br /&gt;&lt;br /&gt;Anyway, here's the updated code:&lt;br /&gt;&lt;div style="background-color: rgb(255, 240, 204); font-family: courier new;"&gt;using GLib;&lt;br /&gt;&lt;br /&gt;namespace tta {&lt;br /&gt;&amp;nbsp;public static delegate void sexecF(short value, void* target);&lt;br /&gt;&amp;nbsp;public struct setWordFunc {&lt;br /&gt;&amp;nbsp;&amp;nbsp;sexecF exec;&lt;br /&gt;&amp;nbsp;&amp;nbsp;void* target;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;public static delegate short gexecF(void * target);&lt;br /&gt;&amp;nbsp;public struct getWordFunc {&lt;br /&gt;&amp;nbsp;&amp;nbsp;gexecF exec;&lt;br /&gt;&amp;nbsp;&amp;nbsp;void * target;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;public class VM : GLib.Object {&lt;br /&gt;&amp;nbsp;&amp;nbsp;private setWordFunc[] outputMaps;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private getWordFunc[] inputMaps;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private short[] bytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private int pc = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private bool state = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public int timeout { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public VM(int size) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes = new short[size];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputMaps = new setWordFunc[size];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputMaps = new getWordFunc[size];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeout = -1; // if negative, leave alone. If positive, decriment each cycle until 0,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// then halt.&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public VM.array(short[] ram) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes = ram;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputMaps = new setWordFunc[bytes.length];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputMaps = new getWordFunc[bytes.length];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void mapInput(getWordFunc input, int address) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputMaps[address % inputMaps.length] = input;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void mapOutput(setWordFunc output, int address) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputMaps[address % outputMaps.length] = output;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public short getWord(int address) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int a = address % bytes.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;a = a &lt; 0 ? -a : a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(inputMaps[a].exec != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return inputMaps[a].exec(inputMaps[a].target);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return bytes[a];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void setWord(int address, short value) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int b = address % bytes.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;b = b &lt; 0 ? -b : b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(outputMaps[b].exec != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputMaps[b].exec(value, outputMaps[b].target);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bytes[b] = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public int size { get { return bytes.length; } }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void jump(short value, void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((VM)target).pc = value - (((VM)target).state? 2 : 0); // - 2 so advancing will bring it to the right place&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void halt(short value, void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((VM)target).state = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void run() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;state = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while(state == true &amp;&amp; timeout != 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;execute(getWord(pc), getWord(pc + 1));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pc = (pc + 2) % bytes.length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(timeout &gt; 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeout--;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void execute(int src, int dest) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;setWord(dest, getWord(src));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;public class ALU : GLib.Object {&lt;br /&gt;&amp;nbsp;&amp;nbsp;private short a = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private short b = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void setOperandA(short value, void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((ALU)target).a = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void setOperandB(short value, void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;((ALU)target).b = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short add(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x.a + x.b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short subtract(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x.a - x.b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short multiply(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x.a * x.b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short modulus(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x.a % x.b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short divide(void * target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return ( x.b == 0 ) ? 0 : ( x.a / x.b);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short gt(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (short)(x.b &gt; x.a);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short eq(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var x = (ALU)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (short)(x.b == x.a);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;namespace evospam {&lt;br /&gt;&amp;nbsp;class Bot : GLib.Object {&lt;br /&gt;&amp;nbsp;&amp;nbsp;public int score { get; set; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;private short[] dna = new short[512];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Bot() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i = 0; i &lt; 512; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Bot.load(string filename) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string temp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ulong length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileUtils.get_contents(filename, out temp, out length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GLib.Memory.copy(dna, temp, (length &gt; 1023) ? 1023 : length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch ( FileError e ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// unloaded or terminally corrupted bots will be replaced as the population evolves.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public void save(string filename) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FileUtils.set_contents(filename, (string)dna, 1024);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch(FileError e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// don't worry. Be happy.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Bot.mutate(Bot parent) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i = 0; i &lt; 512; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(GLib.Random.next_double() &gt; 0.05) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = parent.dna[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public Bot.crossover(Bot mother, Bot father) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int point = (int)(GLib.Random.next_int() % 512);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int point2 = (int)(GLib.Random.next_int() % (512 - point)) + point;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i = 0; i &lt; point; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(GLib.Random.next_double() &gt; 0.05) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = mother.dna[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i = point; i &lt; point2; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(GLib.Random.next_double() &gt; 0.05) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = father.dna[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i = point2; i &lt; 512; i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(GLib.Random.next_double() &gt; 0.05) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = mother.dna[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;private static struct retParam {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;short* retptr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tta.VM haltTgt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static void ret(short value, void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;retParam* a = (retParam*)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*(a-&gt;retptr) = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tta.VM.halt(value, a-&gt;haltTgt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static short readStream(void* target) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;unowned GLib.FileStream io = (GLib.FileStream)target;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!io.eof()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (short)io.getc();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;public short run(GLib.FileStream message) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var tmp = new short[512];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var alu = new tta.ALU();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;GLib.Memory.copy(tmp, dna, 1023);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var vm = new tta.VM.array(tmp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapOutput({vm.jump, vm}, 503);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapOutput({alu.setOperandA, alu}, 504);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapOutput({alu.setOperandB, alu}, 505);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.add, alu}, 506);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.subtract, alu}, 507);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.multiply, alu}, 508);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.divide, alu}, 509);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.gt, alu}, 510);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({alu.eq, alu}, 511);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;short r = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;retParam xt = {&amp;r, vm};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapOutput({ret, &amp;xt}, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.mapInput({readStream, message}, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.timeout = 2048;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;vm.run();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int evaluate(evospam.Bot b) {&lt;br /&gt;try{&lt;br /&gt;&amp;nbsp;GLib.Dir ham = GLib.Dir.open("ham");&lt;br /&gt;&amp;nbsp;GLib.Dir spam = GLib.Dir.open("spam");&lt;br /&gt;&amp;nbsp;int[] score = {0, 0};&lt;br /&gt;&amp;nbsp;int finalscore;&lt;br /&gt;&amp;nbsp;for(int c = 0; c &lt; 2; c++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;weak GLib.Dir cd = c == 0 ? ham : spam;&lt;br /&gt;&amp;nbsp;&amp;nbsp;string filename = cd.read_name();&lt;br /&gt;&amp;nbsp;&amp;nbsp;while(filename != null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int guess = b.run(FileStream.open("%s/%s".printf(c == 0 ? "ham" : "spam", filename), "r"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int s = guess - 16383 * c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s = s &lt; 0 ? -s : s;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(s &lt; (2000)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;score[c]++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename = cd.read_name();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;finalscore = score[0] &lt; score[1] ? score[0] : score[1];&lt;br /&gt;&amp;nbsp;b.score = finalscore;&lt;br /&gt;&amp;nbsp;return finalscore;&lt;br /&gt;} catch(GLib.FileError e) { stderr.printf("Cannot open directory\n"); return 0; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(string[] args) {&lt;br /&gt;&amp;nbsp;evospam.Bot[] bots = new evospam.Bot[300];&lt;br /&gt;&amp;nbsp;int top_score = 0;&lt;br /&gt;&amp;nbsp;for(int i = 0; i &lt; 300; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;string fn = "bots/%d.bot".printf(i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(FileUtils.test(fn, FileTest.EXISTS)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bots[i] = new evospam.Bot.load(fn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bots[i] = new evospam.Bot();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;int score = evaluate(bots[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;top_score = score &gt; top_score ? score : top_score;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;stdout.printf("Dummy run top score = %d\n", top_score);&lt;br /&gt;&amp;nbsp;while(top_score &lt; 32) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;int lowest = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;int lowscore = bots[0].score;&lt;br /&gt;&amp;nbsp;&amp;nbsp;for(int i = 1; i &lt; 300; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(bots[i].score &lt; lowscore || (bots[i].score == lowscore &amp;&amp; GLib.Random.next_double() &lt; 0.03)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lowscore = bots[i].score;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lowest = i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(top_score == 0) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bots[lowest] = new evospam.Bot();&lt;br /&gt;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(GLib.Random.next_double() &gt; 0.9) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bots[lowest] = new evospam.Bot.crossover(bots[GLib.Random.next_int() % 300], bots[GLib.Random.next_int() % 300]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bots[lowest] = new evospam.Bot.mutate(bots[GLib.Random.next_int() % 300]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;lowscore = evaluate(bots[lowest]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;bots[lowest].save("bots/%d.bot".printf(lowest));&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(lowscore &gt; top_score) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;stdout.printf("Highscore: %d; index: %d\n", lowscore, lowest);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;top_score = lowscore;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ah, Finally found out how to get indentation to appear in HTML!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-3151484649613563329?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/3151484649613563329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=3151484649613563329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/3151484649613563329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/3151484649613563329'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/11/that-code-in-my-last-post.html' title='That code in my last post'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-4980732981101331333</id><published>2009-11-25T00:51:00.001-08:00</published><updated>2009-11-25T02:35:40.081-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AI'/><title type='text'>evolution of spam filters</title><content type='html'>One of the many projects I'm coding right now is a spam filter. Well it's not just a spam filter: I'm pretty sure I'll reuse parts of it in some pretty diverse other things. Without further ado I'll share the prototype (in Vala)...&lt;br /&gt;&lt;div style="background-color: rgb(255, 240, 204); font-family: courier new;"&gt;using GLib;&lt;br /&gt;&lt;br /&gt;namespace tta {&lt;br /&gt;   public static delegate void sexecF(short value, void* target);&lt;br /&gt;   public struct setWordFunc {&lt;br /&gt;           sexecF exec;&lt;br /&gt;           void* target;&lt;br /&gt;   }&lt;br /&gt;   public static delegate short gexecF(void * target);&lt;br /&gt;   public struct getWordFunc {&lt;br /&gt;           gexecF exec;&lt;br /&gt;           void * target;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public class VM : GLib.Object {&lt;br /&gt;           private setWordFunc[] outputMaps;&lt;br /&gt;           private getWordFunc[] inputMaps;&lt;br /&gt;           private short[] bytes;&lt;br /&gt;           private int pc = 1;&lt;br /&gt;           private bool state = false;&lt;br /&gt;           public int timeout { get; set; }&lt;br /&gt;     &lt;br /&gt;           public VM(int size) {&lt;br /&gt;                   bytes = new short[size];&lt;br /&gt;                   outputMaps = new setWordFunc[size];&lt;br /&gt;                   inputMaps = new getWordFunc[size];&lt;br /&gt;                   timeout = -1; // if negative, leave alone. If positive, decriment each cycle until 0,&lt;br /&gt;                                   // then halt.&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public VM.array(short[] ram) {&lt;br /&gt;                   bytes = ram;&lt;br /&gt;                   outputMaps = new setWordFunc[bytes.length];&lt;br /&gt;                   inputMaps = new getWordFunc[bytes.length];&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public void mapInput(getWordFunc input, int address) {&lt;br /&gt;                   inputMaps[address % inputMaps.length] = input;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public void mapOutput(setWordFunc output, int address) {&lt;br /&gt;                   outputMaps[address % outputMaps.length] = output;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public short getWord(int address) {&lt;br /&gt;                   int a = address % bytes.length;&lt;br /&gt;                   a = a &lt; b =" address" b =" b" pc =" value" state =" false;" pc =" 1;" state =" true;" state ="=" i =" getWord(pc);"&gt;&gt; 8) &amp;amp; 0x00FF, i &amp;amp; 0x00FF);&lt;br /&gt;                           pc = (pc + 1) % bytes.length;&lt;br /&gt;                           if(timeout &gt; 0) {&lt;br /&gt;                                   timeout--;&lt;br /&gt;                           }&lt;br /&gt;                   }&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public void execute(int src, int dest) {&lt;br /&gt;                   setWord(dest, getWord(src));&lt;br /&gt;           }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public class ALU : GLib.Object {&lt;br /&gt;           private short a = 0;&lt;br /&gt;           private short b = 0;&lt;br /&gt;     &lt;br /&gt;           public static void setOperandA(short value, void* target) {&lt;br /&gt;                   ((ALU)target).a = value;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static void setOperandB(short value, void* target) {&lt;br /&gt;                   ((ALU)target).b = value;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short add(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return x.a + x.b;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short subtract(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return x.a + x.b;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short multiply(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return x.a * x.b;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short modulus(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return x.a % x.b;&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short divide(void * target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return ( x.b == 0 ) ? 0 : ( x.a / x.b);&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short gt(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return (short)(x.b &gt; x.a);&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short eq(void* target) {&lt;br /&gt;                   var x = (ALU)target;&lt;br /&gt;                   return (short)(x.b == x.a);&lt;br /&gt;           }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;namespace evospam {&lt;br /&gt;   class Bot : GLib.Object {&lt;br /&gt;           public int score { get; set; }&lt;br /&gt;           private short[] dna = new short[512];&lt;br /&gt;     &lt;br /&gt;           public Bot() {&lt;br /&gt;                   for(int i = 0; i &lt; i =" 0;"&gt; 0.1) {&lt;br /&gt;                                   dna[i] = parent.dna[i];&lt;br /&gt;                           } else {&lt;br /&gt;                                   dna[i] = (short)(GLib.Random.next_int() % short.MAX);&lt;br /&gt;                           }&lt;br /&gt;                   }&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           private static struct retParam {&lt;br /&gt;                   short* retptr;&lt;br /&gt;                   tta.VM haltTgt;&lt;br /&gt;           }&lt;br /&gt;           public static void ret(short value, void* target) {&lt;br /&gt;                   retParam* a = (retParam*)target;&lt;br /&gt;                   *(a-&gt;retptr) = value;&lt;br /&gt;                   tta.VM.halt(value, a-&gt;haltTgt);&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public static short readStream(void* target) {&lt;br /&gt;                   unowned GLib.FileStream io = (GLib.FileStream)target;&lt;br /&gt;                   if(!io.eof()) {&lt;br /&gt;                           return (short)io.getc();&lt;br /&gt;                   } else {&lt;br /&gt;                           return 0;&lt;br /&gt;                   }&lt;br /&gt;           }&lt;br /&gt;     &lt;br /&gt;           public short run(GLib.FileStream message) {&lt;br /&gt;                   var tmp = new short[512];&lt;br /&gt;                   var alu = new tta.ALU();&lt;br /&gt;                   GLib.Memory.copy(tmp, dna, 1023);&lt;br /&gt;                   var vm = new tta.VM.array(tmp);&lt;br /&gt;                   vm.mapInput({alu.add, alu}, 506);&lt;br /&gt;                   vm.mapInput({alu.subtract, alu}, 507);&lt;br /&gt;                   vm.mapInput({alu.multiply, alu}, 508);&lt;br /&gt;                   vm.mapInput({alu.divide, alu}, 509);&lt;br /&gt;                   vm.mapInput({alu.gt, alu}, 510);&lt;br /&gt;                   vm.mapInput({alu.eq, alu}, 511);&lt;br /&gt;                   short r = 0;&lt;br /&gt;                   retParam xt = {&amp;amp;r, vm};&lt;br /&gt;                   vm.mapOutput({ret, &amp;amp;xt}, 0);&lt;br /&gt;                   vm.mapInput({readStream, message}, 0);&lt;br /&gt;                   vm.timeout = 4000000;&lt;br /&gt;                   vm.run();&lt;br /&gt;                   return r;&lt;br /&gt;           }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int evaluate(evospam.Bot b) {&lt;br /&gt;try{&lt;br /&gt;   GLib.Dir ham = GLib.Dir.open("ham");&lt;br /&gt;   GLib.Dir spam = GLib.Dir.open("spam");&lt;br /&gt;   int[] score = {0, 0};&lt;br /&gt;   int finalscore;&lt;br /&gt;   for(int c = 0; c &lt; cd =" c" filename =" cd.read_name();" guess =" b.run(FileStream.open(" c ="=" s =" guess" s =" s" filename =" cd.read_name();" finalscore =" score[0]" score =" finalscore;" bots =" new" top_score =" 0;" i =" 0;" score =" evaluate(bots[i]);" top_score =" score"&gt; top_score ? score : top_score;&lt;br /&gt;   }&lt;br /&gt;   stdout.printf("Dummy run top score = %d\n", top_score);&lt;br /&gt;   int counter = 0;&lt;br /&gt;   int overallCounter = 0;&lt;br /&gt;   while(top_score &lt; lowest =" 0;" lowscore =" bots[0].score;" i =" 1;" score ="=" lowscore =" bots[i].score;" lowest =" i;"&gt;= 300) {&lt;br /&gt;                   stdout.printf("...(lowest this round: %d)\n", lowscore);&lt;br /&gt;                   counter = 0;&lt;br /&gt;           }&lt;br /&gt;           if(top_score == 0) {&lt;br /&gt;                   bots[lowest] = new evospam.Bot();&lt;br /&gt;           } else {&lt;br /&gt;                   bots[lowest] = new evospam.Bot.mutate(bots[GLib.Random.next_int() % 300]);&lt;br /&gt;           }&lt;br /&gt;           lowscore = evaluate(bots[lowest]);&lt;br /&gt;     &lt;br /&gt;           if(lowscore &gt; top_score) {&lt;br /&gt;                   stdout.printf("Highscore: %d\n", lowscore);&lt;br /&gt;                   top_score = lowscore;&lt;br /&gt;                   counter = 0;&lt;br /&gt;           }&lt;br /&gt;           counter++;&lt;br /&gt;           overallCounter++;&lt;br /&gt;   }&lt;br /&gt;   stdout.printf("Generations after initialization: %d\n", overallCounter);&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here is the output from a fairly typical run:&lt;br /&gt;&lt;div style="background-color: rgb(255, 240, 204); font-family: courier new;"&gt;&lt;br /&gt;Dummy run top score = 0&lt;br /&gt;Highscore: 3&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;Highscore: 4&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;Highscore: 7&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 1)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;Highscore: 8&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;Highscore: 13&lt;br /&gt;...(lowest this round: 3)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 2)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;Highscore: 16&lt;br /&gt;...(lowest this round: 4)&lt;br /&gt;...(lowest this round: 4)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 7)&lt;br /&gt;...(lowest this round: 7)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;Highscore: 17&lt;br /&gt;...(lowest this round: 9)&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;Highscore: 18&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 3)&lt;br /&gt;...(lowest this round: 13)&lt;br /&gt;...(lowest this round: 13)&lt;br /&gt;Highscore: 19&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 15)&lt;br /&gt;...(lowest this round: 16)&lt;br /&gt;...(lowest this round: 3)&lt;br /&gt;...(lowest this round: 13)&lt;br /&gt;Highscore: 23&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 15)&lt;br /&gt;...(lowest this round: 0)&lt;br /&gt;...(lowest this round: 10)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There is a possibility I will post this without waiting for the program to complete.&lt;br /&gt;&lt;br /&gt;Before I go, I'll discuss briefly how it works and some of its features. The code in the tta namespace is actually a computer in its own right, although one which only exists in software and the mind of anyone reading the code. Its first unusual property is that it halts as soon as it outputs anything. That's because it's only being run in order to produce one number (which is then used to decide whether it thinks the input is a spam message). It's also rather unusual as a computer in that it only operates on 16-bit words, there are no bitwise operations and no pure shift operators. In spite of these limitations it's actually Turing-complete, and if the restriction of one output only is removed it can be used to compute anything that will fit in its registers (or anything at all if programmed to use external memory).&lt;br /&gt;Its other unusual feature is that it only has one operation, so there is no need to waste any bits specifying which one is to be used for each instruction! The instruction is "copy". It's 16 bits wide, the first 8 bits are the register ID for the original, and the remaining 8 bits are the register ID for the copy destination. Most registers simply store the data, but one is used for reading the file and returning the evaluation, and some others are used to control the arithmetic logic unit. This kind of system is called a &lt;a href="http://en.wikipedia.org/wiki/Transport_triggered_architecture"&gt;transport triggered architecture&lt;/a&gt;. I thought of it before I read about it, but I read about it before I started coding this one.&lt;br /&gt;&lt;br /&gt;Enough about that: the evolutionary algorithm is pretty standard. It basically works by continually throwing out whichever candidate program appears to be the worst solution and replacing it with a random variation of a randomly selected superior. Some of the new random variations don't work at all, so they're replaced almost at once. Some work better than any of the others, and have a tendency to fill the entire population with their descendants until something even better comes along.&lt;br /&gt;&lt;br /&gt;The fitness function used here is actually the most original part of the algorithm. It works as follows: count the number of real emails that it classifies as real email. Then count the number of spam emails it classifies as spam. The score is the lowest number of these. My first approach was to simply count the number of correctly classified emails, but that worked rather poorly because the programs that classified either everything as spam or everything as real email had a huge advantage over the ones that actually read the email.&lt;br /&gt;&lt;br /&gt;As for the final performance: the best score I've seen so far is 25. The samples it's working with are 32 emails each of spam and genuine, so that 25 score has a minimum of 78% accuracy. The overall accuracy is probably better because the score is only based on the aspect of the task it performs worst at.&lt;br /&gt;Admittedly: the trials so far only measure performance in classifying 64 messages. For all I know it will fall flat in a real-life situation, but the only way to find that out is to test it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-4980732981101331333?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/4980732981101331333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=4980732981101331333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4980732981101331333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4980732981101331333'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/11/evolution-of-spam-filters.html' title='evolution of spam filters'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-428811490572110420</id><published>2009-11-12T02:35:00.000-08:00</published><updated>2009-11-12T03:11:51.014-08:00</updated><title type='text'>At the zoo</title><content type='html'>&lt;iframe src="http://jeremy-list.drivehq.com/video/zootrip1.html" no="" style="border: 0pt none ;" height="350" width="100%"&gt;&lt;/iframe&gt;&lt;br /&gt;Today I went to the zoo with my mother's cousin. We both arrived with full camera batteries which didn't last the full day. He had a spare, I just had to get as much mileage as I could by periodically resting my camera and giving the battery chemicals a chance to react. If you click the black box you'll see a video, containing some footage and some stills. (On another note, similar black boxes on this blog are also videos, although I also upload most of my videos to youtube, it's easier for my Chinese friends if I host everything here)&lt;br /&gt;Here are more still shots. You can get them in their original quality by clicking them.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0516-778062.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0516-777844.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0518-748611.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0518-748589.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0517-748530.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0517-748513.JPG" alt="" border="0" /&gt;&lt;/a&gt;Otters&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0526-703012.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0526-702803.JPG" alt="" border="0" /&gt;&lt;/a&gt;Tiger&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0528-785864.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0528-785843.JPG" alt="" border="0" /&gt;&lt;/a&gt;Giraffe&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0550-781874.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0550-781857.JPG" alt="" border="0" /&gt;&lt;/a&gt;Baboon&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0583-733977.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0583-733959.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0581-733895.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0581-733877.JPG" alt="" border="0" /&gt;&lt;/a&gt;Red Panda&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0611-717239.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0611-717218.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0587-717145.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0587-717123.JPG" alt="" border="0" /&gt;&lt;/a&gt;Lemur&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0561-709643.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0561-709429.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0557-709368.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0557-709157.JPG" alt="" border="0" /&gt;&lt;/a&gt;I forgot what this is&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0573-797127.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0573-797112.JPG" alt="" border="0" /&gt;&lt;/a&gt;Chimpanzees&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0622-789691.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0622-789469.JPG" alt="" border="0" /&gt;&lt;/a&gt;Campbell Island Teals&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0590-777354.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0590-777336.JPG" alt="" border="0" /&gt;&lt;/a&gt;Kea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-428811490572110420?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/428811490572110420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=428811490572110420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/428811490572110420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/428811490572110420'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/11/at-zoo.html' title='At the zoo'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-5280899148515361277</id><published>2009-11-09T16:50:00.000-08:00</published><updated>2009-11-09T16:52:15.720-08:00</updated><title type='text'>Tuatara video</title><content type='html'>&lt;iframe src="http://jeremy-list.drivehq.com/video/tuatara1.html" no="" style="border: 0pt none ;" height="350" width="100%"&gt;&lt;/iframe&gt;&lt;br /&gt;It must be getting warmer: the tuatara are actually moving this much!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-5280899148515361277?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/5280899148515361277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=5280899148515361277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/5280899148515361277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/5280899148515361277'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/11/tuatara-video.html' title='Tuatara video'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-73546711229897387</id><published>2009-10-26T14:56:00.000-07:00</published><updated>2009-10-26T14:58:55.952-07:00</updated><title type='text'>Jobseeking</title><content type='html'>I am now looking for a job for the summer holidays (as well as preparing for my exams) Should you know anyone looking for a short-term programmer, please refer them to &lt;a href="http://jeremy-list.drivehq.com/CV-jeremy_list.pdf"&gt;my cv&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-73546711229897387?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/73546711229897387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=73546711229897387' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/73546711229897387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/73546711229897387'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/jobseeking.html' title='Jobseeking'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-2679307112595259027</id><published>2009-10-18T19:43:00.000-07:00</published><updated>2009-10-18T20:53:08.930-07:00</updated><title type='text'>dog video</title><content type='html'>&lt;iframe src="http://jeremy-list.drivehq.com/video/dog1.html" no="" width="100%" height="350" style="border: 0pt none ;"&gt;&lt;/iframe&gt;&lt;br /&gt;A video I wanted to show to my girlfriend.&lt;br /&gt;It's my family dog shutting a door.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-2679307112595259027?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/2679307112595259027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=2679307112595259027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2679307112595259027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2679307112595259027'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/dog-video.html' title='dog video'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-9192185925606203562</id><published>2009-10-17T22:28:00.000-07:00</published><updated>2009-10-17T22:32:30.851-07:00</updated><title type='text'>My exam timetable</title><content type='html'>Just in case you want to cheer/pray for me.&lt;br /&gt;They start on the 30th of October and finish on the 10th of November.&lt;br /&gt;&lt;iframe src="http://www.google.com/calendar/embed?src=r7a4oi30cgu8phspgu37a146bs%40group.calendar.google.com&amp;amp;ctz=Pacific/Auckland" style="border: 0pt none ;" scrolling="no" width="100%" frameborder="0" height="600"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-9192185925606203562?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/9192185925606203562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=9192185925606203562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/9192185925606203562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/9192185925606203562'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/my-exam-timetable.html' title='My exam timetable'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-4647281096718017860</id><published>2009-10-17T02:22:00.000-07:00</published><updated>2009-10-17T02:29:15.680-07:00</updated><title type='text'>Chinese Dinner</title><content type='html'>Last night our Chinese class and lecturers had dinner together. Unfortunately our lecturer from Nanjing is finishing her contract and going home early next year, so it was a slightly sad occasion even though we were having a great time.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0498-790243.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0498-789852.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0497-789790.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0497-789616.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0499-734345.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0499-734123.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-4647281096718017860?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/4647281096718017860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=4647281096718017860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4647281096718017860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4647281096718017860'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/chinese-dinner.html' title='Chinese Dinner'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-8030593669327686821</id><published>2009-10-06T21:57:00.000-07:00</published><updated>2009-10-06T22:08:15.282-07:00</updated><title type='text'>I told you so</title><content type='html'>If you ignore the advice in my previous post then this&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0486-714430.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0486-714413.JPG" alt="" border="0" /&gt;&lt;/a&gt;will happen to you.&lt;br /&gt;&lt;br /&gt;Just to clarify, I don't think this particular accident was caused by people going straight ahead from a right turning lane because there are only two lanes on that road. But I still think you should always drive in the correct lane. It actually happened just outside my house and slightly delayed my arrival home (I live in that forest you can see to the right).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-8030593669327686821?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/8030593669327686821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=8030593669327686821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8030593669327686821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8030593669327686821'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/i-told-you-so.html' title='I told you so'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-7557067992428849251</id><published>2009-10-05T01:01:00.000-07:00</published><updated>2009-10-05T01:20:44.720-07:00</updated><title type='text'>Road rage. Well kind-of.</title><content type='html'>On my way to university each day I turn right from Featherston Street into Whitmore Street. To begin with I clearly signal that I want to move into the nearest lane which allows me to turn Right, and then change lane when it's safe. The light is usually red when I reach the intersection so I wait. Then I turn right. Almost inevitably there's some idiot in the right-turn-only lane wanting to go straight ahead, getting angry, blasting their horn, and swearing at me.&lt;br /&gt;I just want to say to everyone who drives like that: you have no right to be in control of a vehicle. The turning lanes on Featherston Street are &lt;span style="font-weight: bold;"&gt;clearly&lt;/span&gt; marked so you have &lt;span style="font-weight: bold;"&gt;no excuse&lt;/span&gt; for being in the wrong lane! Please destroy your drivers license and sell your car because you are a danger to everyone on the road!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-7557067992428849251?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/7557067992428849251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=7557067992428849251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/7557067992428849251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/7557067992428849251'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/road-rage-well-kind-of.html' title='Road rage. Well kind-of.'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-4631131793123153632</id><published>2009-10-03T02:05:00.000-07:00</published><updated>2009-10-03T02:58:50.835-07:00</updated><title type='text'>So busy</title><content type='html'>Today is Saturday, so I finally had a chance to take things relatively easy. I had a lot of deadlines on Friday and even more next week. Some of what I'm learning at university is getting really interesting. In MATH161 we're doing graph theory, and I've thought of a starting point for a possible shorter proof of the 4-colour theorem. In Chinese we just learned the past tense and subordinate clauses.&lt;br /&gt;I've still been taking pictures of tuatara.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0477-799003.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0477-798980.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0483-702595.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0483-702580.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I even saw the boy tuatara!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0480-777483.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0480-777471.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-4631131793123153632?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/4631131793123153632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=4631131793123153632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4631131793123153632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4631131793123153632'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/10/so-busy.html' title='So busy'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-2291012142231318395</id><published>2009-09-29T05:33:00.000-07:00</published><updated>2009-09-29T05:36:21.050-07:00</updated><title type='text'>one year</title><content type='html'>In 3 weeks I'll have been with my girlfriend for a year. So I drew this lotus for her.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/lotus-drawing-761668.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 264px;" src="http://jeremy-list.drivehq.com/uploaded_images/lotus-drawing-761165.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Tomorrow I will cut off the tatty edges of the paper I used (not visible in this scan) and send the picture to her.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-2291012142231318395?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/2291012142231318395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=2291012142231318395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2291012142231318395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/2291012142231318395'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/one-year.html' title='one year'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-8432082853922253477</id><published>2009-09-23T03:05:00.000-07:00</published><updated>2009-09-23T03:08:58.608-07:00</updated><title type='text'>1+1=。。。</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/zh/uploaded_images/DSCF0476-707099.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/zh/uploaded_images/DSCF0476-707086.JPG" alt="" border="0" /&gt;&lt;/a&gt;A new pigeon has arrived at my place and seems to be romantically involved with my landlady's pigeon. Now my landlady doesn't want to be overrun with baby pigeons, so she's giving out less pigeon food in the hope that one of the pigeons will go elsewhere. I'm thinking the pigeons might not be that smart, and preventing the baby pigeon invasion may involve eating a few eggs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-8432082853922253477?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/8432082853922253477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=8432082853922253477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8432082853922253477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8432082853922253477'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/11.html' title='1+1=。。。'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-5202491550690935517</id><published>2009-09-14T04:11:00.001-07:00</published><updated>2009-09-14T04:25:26.992-07:00</updated><title type='text'>HST repaired</title><content type='html'>I hadn't been following the news on this, but apparently the hubble space telescope has been repaired and is once again taking amazing pictures. The official site is &lt;a href="http://www.nasa.gov/mission_pages/hubble/multimedia/ero/index.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can look at them yourself. I'm also going to pick out a couple of favourites.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nasa.gov/images/content/384572main_ero_ngc6302_full_full.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.nasa.gov/images/content/384566main_ero_ngc6302_4x3_428-321.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nasa.gov/images/content/384940main_ero_teaser_ngc6217_full_full.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.nasa.gov/images/content/384935main_ero_teaser_ngc6217_4x3_428-321.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nasa.gov/images/content/324740main_tripletgalaxy_full.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.nasa.gov/images/content/324994main_galaxy_triplet_600.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.nasa.gov/images/content/223975main_wildgalaxieslargecollage.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://www.nasa.gov/images/content/223973main_wildgalaxies1_20080424_540.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-5202491550690935517?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/5202491550690935517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=5202491550690935517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/5202491550690935517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/5202491550690935517'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/hst-repaired.html' title='HST repaired'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-7917589429604067482</id><published>2009-09-08T22:44:00.000-07:00</published><updated>2009-09-08T23:54:38.321-07:00</updated><title type='text'>Refuting someone</title><content type='html'>Well I found out my worldview falls under the definition of theistic evolution (it did before, but I hadn't given it all the thought I needed). Theistic evolution is in fact the worldview held by the majority of Christians throughout the world, so I'm definitely not alone.&lt;br /&gt;Anyway, I just thought I'd refute someone else's article speaking against the way I see the world. His article can be found at &lt;a href="http://creation.com/10-dangers-of-theistic-evolution"&gt;http://creation.com/10-dangers-of-theistic-evolution.&lt;/a&gt;&lt;br /&gt;His article takes the form of 10 "dangers" of the theistic evolution worldview. I'll present my arguments regarding each one in the same order as he's presented them.&lt;br /&gt;&lt;br /&gt;1: Misrepresentation of the nature of God&lt;br /&gt;The basic issue here is that evolution depends on the death of countless unsuccessful organisms in order to promote the successful ones. And it's assumed that death, suffering, etc could not have taken place prior to the original sin. The problem here is that the first sin mentioned in the bible is not the eating of the forbidden fruit but the deciept of the serpent. Therefore even in the literal account, sin had already entered the world before the fall of man.&lt;br /&gt;&lt;br /&gt;2: God becomes a God of the gaps&lt;br /&gt;Here, the article's author presumes that in accepting evolutionary theism, we reduce the role of God in our view of creation. This is plain naive and a blatant misrepresentation of the theistic evolutionist worldview. I don't just say "God did it" when I don't know how something happened: I believe God is part of how the universe works, even the parts we CAN explain!&lt;br /&gt;&lt;br /&gt;3: Denial of central biblical teachings&lt;br /&gt;For his third objection, the article's author essentially denies the gospels and presents the first chapter of Genesis as the core foundation of the bible. He obviously hasn't read the bible: he hasn't even read the second chapter of Genesis, which gives a completely different creation story. Obviously, if a literal interpretation of those chapters is self-contradictory, then they were never intended to be taken literally!&lt;br /&gt;&lt;br /&gt;4: Loss of the way for finding God&lt;br /&gt;Here he pretends that theistic evolution denies the existence of sin. He's completely wrong. Only one group of people doesn't believe that many of the world's problems are caused directly or indirectly by human greed (commonly recognised as a sin). We call those people sociopaths.&lt;br /&gt;&lt;br /&gt;5: The doctrine of God's incarnation is undermined&lt;br /&gt;No it isn't. There is no logical contradiction. None at all.&lt;br /&gt;&lt;br /&gt;6: The biblical basis of Jesus' work of redemption is mythologized&lt;br /&gt;Once again, the article's author is asserting a logical contradiction when none is present. Finding a few quotes which on first reading appear to support one's reading does not prove that one has an understanding of the quote's source, or that the quote's source is in agreement with one's conclusion. Claiming that Adam is the basis for Jesus' work completely undermines the gospel of Christ, and denies all responsibility for one's own sin.&lt;br /&gt;&lt;br /&gt;7: Loss of biblical chronology&lt;br /&gt;If chronology was so important for the biblical authors, they would have written everything in chronological order. They didn't. The author claims the age of the earth can be estimated from the genealogies of the bible: that is in fact a bald-faced lie. It ignores the number of biblical personnages who are given multiple contradictory genealogies which cannot be reconciled within a literalistic interpretation. In short, a literalistic interpretation is reliant on an extremely limited knowlege of biblical text.&lt;br /&gt;&lt;br /&gt;8: Loss of creation concepts&lt;br /&gt;Here the article's author is merely restating his belief that a literal interpretation of the first chapter of Genesis (even though he hasn't read the second chapter) is the only reason for the bible's existence.&lt;br /&gt;&lt;br /&gt;9: Misrepresentation of reality&lt;br /&gt;My rebuttal is in the author's own dishonesty and misrepresentation of his own religion.&lt;br /&gt;&lt;br /&gt;10: Missing the purpose&lt;br /&gt;Unlike the author of that article I know that the whole idea behind christianity is that the life and death of Jesus bridged the divide between God and creation. John 3:16 says "For God so loved the world that he gave his one and only son, that whoever believes in him shall not perish but have eternal life". Unlike the author of the article I'm refuting my belief actually motivates me to read the bible instead of just assuming what someone else says about it is actually true.&lt;br /&gt;For all that: I cannot believe that God is inconsistent enough to save the apostle Thomas (who refused to believe in Christ's resurrection without hard evidence) yet refuse to save Richard Dawkins, whose sin is no greater, but who will most likely die without seeing hard evidence. Humans are inconsistent, human expression of God's inspiration is inconsistent (and I believe often at odds with the source of the inspiration), but the God I believe in is not inconsistent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-7917589429604067482?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/7917589429604067482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=7917589429604067482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/7917589429604067482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/7917589429604067482'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/refuting-someone.html' title='Refuting someone'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-1936497829077971784</id><published>2009-09-07T04:53:00.000-07:00</published><updated>2009-09-07T06:24:48.288-07:00</updated><title type='text'>Faith</title><content type='html'>Well where to begin...&lt;br /&gt;I suppose it started with exploring the link between climate change denial and Christian fundamentalism. I suppose this process I've been going through was triggered by the realisation that people calling themselves Christians are telling bald-faced lies to further their own political agenda for their own short-term gain and complete disregard for the rest of humanity and even their own descendants. How can someone who claims to take the bible literally show such disregard for the 9th commandment. But it's not just deciept, people are already losing their lives in areas where the climate no longer supports agriculture!&lt;br /&gt;Well I'm not sure how but thinking about the corrupt morals of supposed Christians somehow got me thinking about my own worldview, why I believe as I do, and whether I should continue in the same beliefs.&lt;br /&gt;Here's what I came up with, in roughly the order I came up with it:&lt;br /&gt;&lt;br /&gt;Theory of evolution is pretty much correct. I did have a doubt regarding evolution of different karyotypes but &lt;a href="http://en.wikipedia.org/wiki/Chilocorus_stigma"&gt;&lt;i&gt;Chilocorus stigma&lt;/i&gt;&lt;/a&gt; was kind enough to resolve it for me. Oh, and I've actually done experiments proving most of the other aspects of evolution, albeit with fruit flies (their short lifespan helps).&lt;br /&gt;&lt;br /&gt;Life can probably arise spontaneously within the framework of this universe. This hasn't actually been proven, but enough aspects of abiogenesis have been proven that it's not much of a stretch.&lt;br /&gt;&lt;br /&gt;However, I haven't stopped believing in God, although I have changed some of my beliefs regarding him. I believe his behaviour is perfectly consistent. That consistence, combined with his omnipresence, mean that it is logically impossible to distinguish whatever "interventions" he may involve himself in from regular laws of physics. Therefore, one would EXPECT all his actions to be explainable through naturalism: the laws derived in naturalism are derived FROM his actions!&lt;br /&gt;I do not believe that God is a person, although I'd say he at least has something like whatever you call that thing that hears when you think in words. I suppose it's called consciousness, but what I mean has nothing to do with the ability to think.&lt;br /&gt;Well, I haven't just modified my beliefs about God slightly. I actually lost most of my original reasons for believing him and found a few new ones. I could try and explain the new reasons, but I really can't. It was neither through logic nor against it. I could go on about it for weeks and not explain it any better than that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-1936497829077971784?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/1936497829077971784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=1936497829077971784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1936497829077971784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1936497829077971784'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/faith.html' title='Faith'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-4337471738195621390</id><published>2009-09-02T23:44:00.000-07:00</published><updated>2009-09-02T23:49:34.969-07:00</updated><title type='text'>Two weeks break ending</title><content type='html'>My 2 week break from university is almost over. But one of the highlights isn't until tomorrow. Four or so friends and I are getting together to eat wonton soup and watch a Chinese movie (preferably Liang Zhu, but we'll settle for something else if that's not available)&lt;br /&gt;&lt;br /&gt;I meant to blog this earlier: two weeks ago I went to my friend's book launch. It's a great little poetry book called "Wit of the staircase".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/zh/uploaded_images/DSCF0457-792497.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/zh/uploaded_images/DSCF0457-792485.JPG" alt="" border="0" /&gt;&lt;/a&gt;Saradha Koirala (author and friend) reading one of her poems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-4337471738195621390?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/4337471738195621390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=4337471738195621390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4337471738195621390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/4337471738195621390'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/09/two-weeks-break-ending.html' title='Two weeks break ending'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-8168373339281075398</id><published>2009-08-14T03:43:00.000-07:00</published><updated>2009-08-14T04:20:29.295-07:00</updated><title type='text'>Paradox</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/reverb-771982.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 129px;" src="http://jeremy-list.drivehq.com/uploaded_images/reverb-771979.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A little something I thought up when I was 17. I'd assumed it would be much more challenging and expensive to make than it would actually be in reality so I never tried. I'd been thinking it would involve an extremely long iron bar, not knowing that microwave frequency oscillators exist. Unfortunately I currently have neither the money nor the free time to build this, but would have definitely done so in the past had I known how easily it could have been done.&lt;br /&gt;The reason this is interesting is: the laws of physics contradict each other regarding what will actually happen if such a device is actually switched on!&lt;br /&gt;I don't know which law will be disproven but I have a hunch it will be the first law of thermodynamics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-8168373339281075398?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/8168373339281075398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=8168373339281075398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8168373339281075398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/8168373339281075398'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/08/paradox.html' title='Paradox'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-554530459247530801</id><published>2009-07-31T23:43:00.000-07:00</published><updated>2009-07-31T23:51:17.491-07:00</updated><title type='text'>Pidgey</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0437-783489.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0437-783478.JPG" alt="" border="0" /&gt;&lt;/a&gt;While my landlady has been away I've been feeding her pigeon. I hadn't seen any sign of him for a few days and was worried a cat might have got him, but he's back and seems cheerful enough. He was especially glad that I gave him peanuts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-554530459247530801?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/554530459247530801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=554530459247530801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/554530459247530801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/554530459247530801'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/07/pidgey.html' title='Pidgey'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-1547041767653721544</id><published>2009-07-30T03:58:00.001-07:00</published><updated>2009-07-30T04:00:59.210-07:00</updated><title type='text'>Another tuatara picture</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/DSCF0435-792712.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://jeremy-list.drivehq.com/uploaded_images/DSCF0435-792563.JPG" alt="" border="0" /&gt;&lt;/a&gt;I still consider it a great privilege to share a university with such creatures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-1547041767653721544?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/1547041767653721544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=1547041767653721544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1547041767653721544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/1547041767653721544'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/07/another-tuatara-picture.html' title='Another tuatara picture'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5096534401795088958.post-638968941343892328</id><published>2009-07-28T04:22:00.001-07:00</published><updated>2009-07-28T04:24:31.392-07:00</updated><title type='text'>in case you hadn't noticed...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jeremy-list.drivehq.com/uploaded_images/SALLY-786891.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 192px;" src="http://jeremy-list.drivehq.com/uploaded_images/SALLY-786890.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;my girlfriend is extremely pretty!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5096534401795088958-638968941343892328?l=jeremy-list.drivehq.com%2Fhome.htm' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/638968941343892328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5096534401795088958&amp;postID=638968941343892328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/638968941343892328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5096534401795088958/posts/default/638968941343892328'/><link rel='alternate' type='text/html' href='http://jeremy-list.drivehq.com/2009/07/in-case-you-hadnt-noticed.html' title='in case you hadn&apos;t noticed...'/><author><name>Jeremy List</name><uri>http://www.blogger.com/profile/15206370639876586108</uri><email>quick.dudley@gmail.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07088397572155303745'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
