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

<channel>
	<title>machine-envy</title>
	<atom:link href="http://www.machine-envy.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.machine-envy.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 27 Jul 2010 23:23:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Variant Call Format: really?</title>
		<link>http://www.machine-envy.com/blog/2010/07/27/variant-call-format-really/</link>
		<comments>http://www.machine-envy.com/blog/2010/07/27/variant-call-format-really/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:23:10 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[bioinformatics]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=274</guid>
		<description><![CDATA[1000 genomes are making their genotypes available in variant call format (vcf).  Now as others have noticed, vcf isn&#8217;t the prettiest format around.  There are a few things to dislike:

The data is in &#8216;wide&#8217; format which means that a file is fifteen screens wide and hides rare variation in a load of noise [...]]]></description>
			<content:encoded><![CDATA[<p>1000 genomes are making their genotypes available in <a href="http://www.1000genomes.org/wiki/doku.php?id=1000_genomes:analysis:variant_call_format">variant call format</a> (vcf).  Now as others have <a href="http://plindenbaum.blogspot.com/2010/05/first-rule-of-bioinfo-club.html">noticed</a>, vcf isn&#8217;t the prettiest format around.  There are a few things to dislike:</p>
<ul>
<li>The data is in &#8216;wide&#8217; format which means that a file is fifteen screens wide and hides rare variation in a load of noise &#8211; it&#8217;s also &#8216;ungreppable&#8217;.</li>
<li>The use of tab delimiting with embedded semi-colon delimiting is an <a href="http://www.sequenceontology.org/gff3.shtml">old trick</a>, but these days everyone has a json parser handy so you should just use json for an structured field inside a tab delimited file.   Since strings, lists and key/value pairs all have simple json representations this will cover all cases.</li>
<li>The fact that the file headers dynamically describe the structure of the fields makes it less a format and more a family of formats.  The genotype fields have arbitrary keys.</li>
<li>Despite the flexibility defining genotypes, the locus information <a href="http://biostar.stackexchange.com/questions/995/adding-an-extra-column-to-a-vcf-file">is not extensible</a> so you cannot annotate the site with extra information.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2010/07/27/variant-call-format-really/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Looking into PiCloud&#8217;s Sandbox</title>
		<link>http://www.machine-envy.com/blog/2010/07/26/looking-into-piclouds-sandbox/</link>
		<comments>http://www.machine-envy.com/blog/2010/07/26/looking-into-piclouds-sandbox/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 08:11:23 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=271</guid>
		<description><![CDATA[EDIT: this was due to python 2.7 incompatibility and incorrect documentation.  These examples all work with python 2.6
PiCloud looks very interesting.  Execute on demand python could give you a much greater level of control over cloud computing use.  Now, of course, sandboxing python is not easy, despite some well known implementations.
So PiCloud [...]]]></description>
			<content:encoded><![CDATA[<p><strong>EDIT: this was due to python 2.7 incompatibility and incorrect documentation.  These examples all work with python 2.6</strong></p>
<p><a href="https://www.picloud.com/">PiCloud</a> looks very interesting.  Execute on demand python could give you a much greater level of control over cloud computing use.  Now, of course, <a href="http://wiki.python.org/moin/SandboxedPython">sandboxing python</a> is not easy, despite some well known <a href="http://code.google.com/appengine/">implementations</a>.</p>
<p>So PiCloud don&#8217;t write much about the limitations of the sandbox, so I gave it a quick poke to see what happens:</p>
<pre><code>
import cloud

def blocker(x=1):
    while True:
        x = x + 1
    return x

jid = cloud.call(blocker)
cloud.join(jid)
print cloud.result(jid)
print cloud.info(jid, ['stde
</code></pre>
<p>This produces:</p>
<pre>Traceback (most recent call last):
cloud.cloud.CloudException: Job 38: Traceback (most recent call last):
  File "/root/.local/lib/python2.6/site-packages/cloudserver/workers/employee/child.py", line 334, in run
  File "tp.py", line 4, in blocker
    while True:
SystemError: unknown opcode</pre>
<p>Which is an interesting error!</p>
<p>Trying this: </p>
<pre><code language="python">
def blocker(x=1):
    while x < 10:
        x = x + 1
    return x
</code></pre>
<p>returns </p>
<pre>
cloud.cloud.CloudException: Job 39: None
</pre>
<p>So we're not allowed while loops?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2010/07/26/looking-into-piclouds-sandbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Friday quiz:  where and when does this describe?</title>
		<link>http://www.machine-envy.com/blog/2010/07/09/friday-quiz-where-and-when-does-this-describe/</link>
		<comments>http://www.machine-envy.com/blog/2010/07/09/friday-quiz-where-and-when-does-this-describe/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 12:47:53 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=262</guid>
		<description><![CDATA[
But these evils, though great, were small compared to
those far more deep-seated signs of disease which now
showed themselves throughout the country. One of these
was the obliteration of thrift from the minds of the ***
people. The *** are naturally thrifty; but, with such
masses of money and with such uncertainty as to its future
value, the ordinary motives [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
But these evils, though great, were small compared to<br />
those far more deep-seated signs of disease which now<br />
showed themselves throughout the country. One of these<br />
was the obliteration of thrift from the minds of the ***<br />
people. The *** are naturally thrifty; but, with such<br />
masses of money and with such uncertainty as to its future<br />
value, the ordinary motives for saving and care diminished,<br />
and a loose luxury spread throughout the country. A still<br />
worse outgrowth was the increase of speculation and<br />
gambling. With the plethora of paper currency in *** ap·<br />
peared the first evidences of that cancerous disease which<br />
always follows large issues of irredeemable currency,—a<br />
disease more permanently injurious to a nation than war,<br />
pestilence or famine. For at the great metropolitan centers<br />
grew a luxurious, speculative, stock-gambling body, which,<br />
like a malignant tumor, absorbed into itself the strength of<br />
the nation and sent out its cancerous fibres to the remotest<br />
hamlets. At these city centers abundant wealth seemed to<br />
be piled up: in the country at large there grew a dislike<br />
of steady labor and a contempt for moderate gains and sim-<br />
ple living.</p>
<p>&#8230;</p>
<p> This outgrowth was a<br />
vast debtor class in the nation, directly interested in the<br />
depreciation of the currency in which they were to pay their<br />
debts. The nucleus of this class was formed by those who<br />
had purchased the church lands from the government. Only<br />
small payments down had been required and the remainder<br />
was to be paid in deferred installments: an indebtedness of<br />
a multitude of people had thus been created to the amount<br />
of hundreds of millions. This body of debtors soon saw, of<br />
course, that their interest was to depreciate the currency in<br />
which their debts were to be paid; and these were speedily<br />
joined by a far more influential class;—by that class whose<br />
speculative tendencies had been stimulated by the abun-<br />
dance of paper money, and who had gone largely into debt,<br />
looking for a rise in nominal values. Soon demagogues of<br />
the viler sort in the political clubs began to pander to it;<br />
a little later important persons in this debtor class were to<br />
be found intriguing in the Assembly—first in its seats and<br />
later in more conspicuous places of public trust. Before long,<br />
the debtor class became a powerful body extending through<br />
all ranks of society. From the stock-gambler who sat in the<br />
Assembly to the small land speculator in the rural districts;<br />
from the sleek inventor of canards on the *** Exchange<br />
to the lying stock-jobber in the market town, all pressed<br />
vigorously for new issues of paper; all were apparently able<br />
to demonstrate to the people that in new issues of paper lay<br />
the only chance for national prosperity.</p>
<blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2010/07/09/friday-quiz-where-and-when-does-this-describe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Siôn Simon&#8217;s Comments on Tom Watson in the DEB debate: Beyond Irony?</title>
		<link>http://www.machine-envy.com/blog/2010/04/07/sion-simons-comments-on-tom-watson-in-the-deb-debate-beyond-irony/</link>
		<comments>http://www.machine-envy.com/blog/2010/04/07/sion-simons-comments-on-tom-watson-in-the-deb-debate-beyond-irony/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 11:19:24 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[copyright]]></category>
		<category><![CDATA[freeculture]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=257</guid>
		<description><![CDATA[Siôn Simon decided to caricature the opponent&#8217;s of the Digital Economy Bill with a piece of &#8216;fan fiction&#8217; based on Star Wars.   As chilling effects notes, copyright law is not clear about the use of characters in derivative works.  However, I&#8217;m sure as a staunch defender of copyright he will have cleared [...]]]></description>
			<content:encoded><![CDATA[<p>Siôn Simon decided to caricature the opponent&#8217;s of the Digital Economy Bill with a <a href="http://www.theyworkforyou.com/debate/?id=2010-04-06a.877.2">piece of &#8216;fan fiction&#8217; based on Star Wars</a>.   As <a href="http://www.chillingeffects.org/fanfic/">chilling effects notes</a>, copyright law is not clear about the use of characters in derivative works.  However, I&#8217;m sure as a staunch defender of copyright he will have cleared it with LucasFilm first; after all they carefully defend their creations when <a href="http://forums.starwars.com/thread.jspa?threadID=224428">anyone else uses them</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2010/04/07/sion-simons-comments-on-tom-watson-in-the-deb-debate-beyond-irony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pivot tables with sqlalchemy</title>
		<link>http://www.machine-envy.com/blog/2009/10/30/pivot-tables-with-sqlalchemy/</link>
		<comments>http://www.machine-envy.com/blog/2009/10/30/pivot-tables-with-sqlalchemy/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 18:23:12 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=243</guid>
		<description><![CDATA[If your database doesn&#8217;t support pivots, here is a quick technique to get pivot columns with sqlalchemy

import operator
from sqlalchemy.sql import case, func, select

def pivot_report(report, pivot_on=None, pivot_columns=None, pivot_func=func.sum,
                    non_pivot_columns=None, group_by=None):
    """ produce a pivot [...]]]></description>
			<content:encoded><![CDATA[<p>If your database doesn&#8217;t support pivots, here is a quick technique to get pivot columns with sqlalchemy</p>
<pre lang="python">
import operator
from sqlalchemy.sql import case, func, select

def pivot_report(report, pivot_on=None, pivot_columns=None, pivot_func=func.sum,
                    non_pivot_columns=None, group_by=None):
    """ produce a pivot on a select

    if we have a report: 

        id, type, count
        1, white, 10
        1, black, 20
        2, white, 12
        2, black, 20

    and we want 

        id, black count, white count
        1, 20, 10
        2, 20, 12

    pass in type as the pivot_on, and [count] as pivot columns  

    """

    # find all possible values of the pivot
    pivot_values = map(
        operator.itemgetter(0),
        select([pivot_on], from_obj=[report]).distinct().execute()
    )

    # build the new pivot columns
    new_columns = [
        pivot_func(case([(pivot_on == value, column)])).label("%s %s" % (value, column))
        for value in pivot_values
        for column in pivot_columns
    ]

    return select(
        non_pivot_columns + new_columns,
        from_obj=[report],
        group_by=group_by
    )

# example code
from sqlalchemy import Table, Column, Integer, String, MetaData
from sqlalchemy import create_engine

metadata = MetaData()
example = Table('example', metadata,
    Column('id', Integer),
    Column('type', String),
    Column('count', Integer),
)

engine = create_engine('sqlite:///:memory:')
metadata.bind = engine
example.create()
example.insert().execute(
    dict(id=1, type='white', count=10),
    dict(id=1, type='black', count=20),
    dict(id=2, type='white', count=30),
    dict(id=2, type='black', count=40),
)

report = example.select()

# now build the pivot
report = pivot_report(
    report,
    pivot_on=report.c.type,
    pivot_columns=[report.c.count],
    non_pivot_columns=[report.c.id],
    group_by=[report.c.id])

for r in report.execute():
    print r.items()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/10/30/pivot-tables-with-sqlalchemy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>object ceremony, dynamic languages, JSON and algebraic data types</title>
		<link>http://www.machine-envy.com/blog/2009/10/28/object-ceremony-dynamic-languages-json-and-algebraic-data-types/</link>
		<comments>http://www.machine-envy.com/blog/2009/10/28/object-ceremony-dynamic-languages-json-and-algebraic-data-types/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 17:54:12 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=228</guid>
		<description><![CDATA[The reason most people end up using a dynamic language is to avoid the boilerplate associated with object creation.  You know, typing &#8220;FileWriter fout = new FileWriter(&#8221;fred.txt&#8221;);&#8221; gets boring quickly.  I think this is a good enough reason to move to another language on its own.  This boilerplate is also sometimes called [...]]]></description>
			<content:encoded><![CDATA[<p>The reason most people end up using a dynamic language is to avoid the boilerplate associated with object creation.  You know, typing &#8220;FileWriter fout = new FileWriter(&#8221;fred.txt&#8221;);&#8221; gets boring quickly.  I think this is a good enough reason to move to another language on its own.  This boilerplate is also sometimes called ceremony, and I have come to realize that far from being low ceremony, dynamic languages actually <em>revolve</em> around ceremony.</p>
<p>Think of the hash of hashes, list of hashes approach that you often find in a perl, python or ruby program.  These are so useful, that they have been codified as JSON &#8211; which can simply be evaled to return your data in several languages.  Ad-hoc data structures like this have a great appeal when hacking something in python, yet you quickly get to a pain point when using them when the data doesn&#8217;t look exactly as you would expect and you need to handle exceptions and edge cases.</p>
<p>So why is the hash of hashes approach so tempting?  Because it avoids the ceremony around object creation.  Things like Python&#8217;s &#8220;__init__&#8221; and Perl&#8217;s &#8220;bless&#8221; are ceremony and are <em>necessarily</em> ceremony because  all a type in a dynamic language is just  data with some ceremony.  Clearly, perl has got a perfect name for the ceremony in &#8220;bless&#8221;.</p>
<p>The eureka moment comes when you use a typed language that is low ceremony, such as Haskell.  <a href="http://en.wikipedia.org/wiki/Algebraic_data_type">Algebraic data types</a> give you the freedom to create complex data structures without ceremony, which you can then process without the hassle involved in unpicking a big blob of JSON, which will typically need lots of switches.  Instead, you can pattern match on the type.</p>
<p>So if you went to a dynamic language to avoid the ceremony, you may well be moving in the wrong direction.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/10/28/object-ceremony-dynamic-languages-json-and-algebraic-data-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cogent: the unsung hero of bioinformatics and python</title>
		<link>http://www.machine-envy.com/blog/2009/10/27/cogent-the-unsung-hero-of-bioinformatics-and-python/</link>
		<comments>http://www.machine-envy.com/blog/2009/10/27/cogent-the-unsung-hero-of-bioinformatics-and-python/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 16:57:53 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[bioinformatics]]></category>
		<category><![CDATA[ensembl]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=225</guid>
		<description><![CDATA[I recently started using cogent &#8211; the COmparative GENomics Toolkit and discovered that it is an excellent piece of kit.  A google search for &#8216;python ensembl&#8216; doesn&#8217;t even show it at all, yet it definitely has the best bindings for ensembl avaiable in python &#8211; they&#8217;re based on sqlalchemy making it easy enough to [...]]]></description>
			<content:encoded><![CDATA[<p>I recently started using <a href="http://pypi.python.org/pypi/cogent">cogent &#8211; the COmparative GENomics Toolkit</a> and discovered that it is an excellent piece of kit.  A google search for &#8216;<a href="http://www.google.co.uk/search?q=python+ensembl">python ensembl</a>&#8216; doesn&#8217;t even show it at all, yet it definitely has the best <a href="http://pycogent.sourceforge.net/examples/query_ensembl.html">bindings for ensembl avaiable in python</a> &#8211; they&#8217;re based on <a href="http://www.sqlalchemy.org/">sqlalchemy</a> making it easy enough to pull of any query.  Have a look at the full list of <a href="http://pycogent.sourceforge.net/examples/index.html">examples</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/10/27/cogent-the-unsung-hero-of-bioinformatics-and-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing python bioinformatics tools with virtualenv and pip</title>
		<link>http://www.machine-envy.com/blog/2009/07/11/installing-python-bioinformatics-tools-with-virtualenv-and-pip/</link>
		<comments>http://www.machine-envy.com/blog/2009/07/11/installing-python-bioinformatics-tools-with-virtualenv-and-pip/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 13:56:52 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[bioinformatics]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=222</guid>
		<description><![CDATA[Python seems to have developed a decent set of tools for quickly building development environments.  I want to store my notes on how to get a good environment for bioinformatics set up quickly.
First of all, if you haven&#8217;t already, install virtualenv and pip.  Both are easy installable.  Now install virtualenv wrapper.
Now we [...]]]></description>
			<content:encoded><![CDATA[<p>Python seems to have developed a decent set of tools for quickly building development environments.  I want to store my notes on how to get a good environment for bioinformatics set up quickly.</p>
<p>First of all, if you haven&#8217;t already, install virtualenv and pip.  Both are easy installable.  Now install <a href="http://www.doughellmann.com/projects/virtualenvwrapper/">virtualenv wrapper</a>.</p>
<p>Now we are going to setup a bioinformatics environment with both biopython and pygr installed so that you can hack on them. Firstly create a new virtualenv, passing the no site packages flag to keep this clean:</p>
<p><code lang="bash">james@flapjack:~/Documents/virtualenvs$ mkvirtualenv --no-site-packages bio<br />
New python executable in bio/bin/python<br />
Installing setuptools............done.<br />
(bio)james@flapjack:~/Documents/virtualenvs$ cdvirtualenv<br />
(bio)james@flapjack:~/Documents/virtualenvs/bio$ </code></p>
<p>Now, to install biopython we first use pip to install numpy:</p>
<p><code lang="bash">(bio)james@flapjack:~/Documents/virtualenvs/bio$ pip -E . install numpy<br />
Downloading/unpacking numpy<br />
...</code></p>
<p>Important to remember the &#8216;-E&#8217; flag which tells pip to use the virtualenv we are in (this should be added to virtualenv_wrapper IMHO).  Now we can install biopython from our github fork, using the &#8216;-e&#8217; flag to keep it editable (i.e we are hacking on it).</p>
<p><code lang="bash">(bio)james@flapjack:~/Documents/virtualenvs/bio$ pip -E . install -e git://github.com/jamescasbon/biopython.git#egg=biopython<br />
Obtaining biopython from git+git://github.com/jamescasbon/biopython.git#egg=biopython<br />
  Cloning git://github.com/jamescasbon/biopython.git to ./src/biopython<br />
remote: Counting objects: 22719, done.<br />
...</code></p>
<p>Next up, we want pygr so we need pyrex to build the c files:</p>
<p><code lang="bash">(bio)james@flapjack:~/Documents/virtualenvs/bio$ pip -E . install -U pyrex -f http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/Pyrex-0.9.8.5.tar.gz<br />
Downloading/unpacking pyrex<br />
  Downloading Pyrex-0.9.8.5.tar.gz (242Kb): 242Kb downloaded<br />
  In the tar file /var/folders/Gn/GneSaDeKGaGpZXx+hcopdU+++TI/-Tmp-/tmpTEdhFd/Pyrex-0.9.8.5.tar.gz the member Pyrex-0.9.8.5/Demos/embed/Makefile is invalid: 'filename None not found'<br />
  Running setup.py egg_info for package pyrex<br />
Installing collected packages: pyrex<br />
  Running setup.py install for pyrex<br />
    changing mode of build/scripts-2.5/pyrexc from 644 to 755<br />
    changing mode of /Users/james/Documents/virtualenvs/bio/bin/pyrexc to 755<br />
Successfully installed pyrex</code></p>
<p>Now, to get and editable pygr:</p>
<p><code lang="bash">(bio)james@flapjack:~/Documents/virtualenvs/bio$ pip -E . install -e git://github.com/jamescasbon/pygr.git#egg=pygr<br />
Obtaining pygr from git+git://github.com/jamescasbon/pygr.git#egg=pygr<br />
  Cloning git://github.com/jamescasbon/pygr.git to ./src/pygr<br />
remote: Counting objects: 6281, done.<br />
...<br />
Successfully installed pygr</code></p>
<p>Finally, ipython:</p>
<p><code lang="bash">(bio)james@flapjack:~/Documents/virtualenvs/bio$ pip -E . install ipython<br />
Downloading/unpacking ipython<br />
  Downloading ipython-0.9.1.tar.gz (2.8Mb): 2.8Mb downloaded<br />
</code></p>
<p>We now have a completely isolated environment, where pygr and biopython are editable:</p>
<p><code lang="python">(bio)james@flapjack:~/Documents/virtualenvs/bio$ bin/ipython<br />
Python 2.5.4 (r254:67916, Mar  2 2009, 10:40:04)<br />
Type "copyright", "credits" or "license" for more information.</p>
<p>IPython 0.9.1 -- An enhanced Interactive Python.<br />
?         -> Introduction and overview of IPython's features.<br />
%quickref -> Quick reference.<br />
help      -> Python's own help system.<br />
object?   -> Details about 'object'. ?object also works, ?? prints more.</p>
<p>In [1]: import pygr</p>
<p>In [2]: pygr.__file__<br />
Out[2]: '/Users/james/Documents/virtualenvs/bio/src/pygr/pygr/__init__.pyc'<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/07/11/installing-python-bioinformatics-tools-with-virtualenv-and-pip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More money&#8230;</title>
		<link>http://www.machine-envy.com/blog/2009/05/27/more-money/</link>
		<comments>http://www.machine-envy.com/blog/2009/05/27/more-money/#comments</comments>
		<pubDate>Wed, 27 May 2009 08:33:44 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=220</guid>
		<description><![CDATA[My company has met its goals and secured a second tranche of VC money. To celebrate, we&#8217;ve even got a website: Population Genetics Technologies.
]]></description>
			<content:encoded><![CDATA[<p>My company has met its goals and <a href="http://www.popgentech.com/2009/05/series-a-final/">secured a second tranche of VC money</a>. To celebrate, we&#8217;ve even got a website: <a href="http://www.popgentech.com">Population Genetics Technologies</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/05/27/more-money/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two excellent pieces of writing</title>
		<link>http://www.machine-envy.com/blog/2009/02/10/two-excellent-pieces-of-writing/</link>
		<comments>http://www.machine-envy.com/blog/2009/02/10/two-excellent-pieces-of-writing/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 15:00:05 +0000</pubDate>
		<dc:creator>Becky Hogge</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[freeculture]]></category>
		<category><![CDATA[law]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[networks]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=217</guid>
		<description><![CDATA[Now that I&#8217;ve hung up my hat at the Open Rights Group, I actually have time to read stuff for pleasure again. And it has been with great pleasure that I&#8217;ve read the two pieces listed below. Sometimes it doesn&#8217;t matter what you&#8217;re writing about &#8211; the quality of your prose sings through. In the [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I&#8217;ve hung up my hat at the Open Rights Group, I actually have time to read stuff for pleasure again. And it has been with great pleasure that I&#8217;ve read the two pieces listed below. Sometimes it doesn&#8217;t matter what you&#8217;re writing about &#8211; the quality of your prose sings through. In the case of these two pieces, though, that quality is matched by the urgency of the subject matter. Enjoy.</p>
<ul>
<li><a title="Bill Thompson on Digital Britain" href="http://news.bbc.co.uk/1/hi/technology/7867285.stm">Bill Thompson on Lord Stephen Carter&#8217;s interim <em>Digital Britain</em> report</a>, and why peer review beats Peer dictatorship every time.</li>
<li><a title="Peter Wilby on British society" href="http://newstatesman.com/economy/2009/02/housing-societies-essay">Peter Wilby&#8217;s cover piece for this week&#8217;s <em>New Statesman</em> </a>on the financialisation of British society.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2009/02/10/two-excellent-pieces-of-writing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.000 seconds -->
