<?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>Fri, 30 Oct 2009 18:23:12 +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>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>1</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>2</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>
		<item>
		<title>Making textmate virtualenv aware</title>
		<link>http://www.machine-envy.com/blog/2008/12/16/making-textmate-virtualenv-aware/</link>
		<comments>http://www.machine-envy.com/blog/2008/12/16/making-textmate-virtualenv-aware/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 19:19:52 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=214</guid>
		<description><![CDATA[So I am using textmate for my python development, but I wanted it to pick up any virtualenv configured in a project.  Here&#8217;s how to hack the python bundle&#8230;
First off, the run script command needs to be aware of the virtualenv stuff.  So open up the bundle editor, and replace this:
is_test_script = ENV["TM_FILEPATH"] [...]]]></description>
			<content:encoded><![CDATA[<p>So I am using textmate for my python development, but I wanted it to pick up any virtualenv configured in a project.  Here&#8217;s how to hack the python bundle&#8230;</p>
<p>First off, the run script command needs to be aware of the virtualenv stuff.  So open up the bundle editor, and replace this:</p>
<p><code lang="ruby">is_test_script = ENV["TM_FILEPATH"] =~ /(?:\b|_)(?:test)(?:\b|_)/ or<br />
                 File.read(ENV["TM_FILEPATH"]) =~ /\bimport\b.+(?:unittest)/</p>
<p>TextMate::Executor.run(ENV["TM_PYTHON"] || "python", "-u", ENV["TM_FILEPATH"]) do |str, type|<br />
</code></p>
<p>with:</p>
<p><code lang="ruby">is_test_script = ENV["TM_FILEPATH"] =~ /(?:\b|_)(?:test)(?:\b|_)/ or<br />
                 File.read(ENV["TM_FILEPATH"]) =~ /\bimport\b.+(?:unittest)/</p>
<p># default python<br />
python = ENV["TM_PYTHON"] || "python"</p>
<p># try for virtualenv if it exists<br />
if ENV.has_key?("TM_PROJECT_DIRECTORY")<br />
    virtualenv_python = ENV["TM_PROJECT_DIRECTORY"] + "/bin/python"<br />
    if FileTest.exists?(virtualenv_python)<br />
      python = virtualenv_python<br />
    end<br />
end</p>
<p>TextMate::Executor.run(python, "-u", ENV["TM_FILEPATH"]) do |str, type|<br />
</code></p>
<p>Now, we also want the unit tests to pick up that environment as well, so you need to do the same with the Run Project Unit Tests command.  I am using nose to collect tests, and the nosexml plugin to format the results.  You should install them if you need to.  Replace:</p>
<p><code lang="bash"># Find all files that end with "Test.py" and run<br />
# them.</p>
<p>find . -name "*Test.py" -exec "${TM_PYTHON:-python}" '{}' \;|pre</code></p>
<p>with:</p>
<p><code lang="bash">cd $TM_PROJECT_DIRECTORY<br />
if [ -f bin/activate ]<br />
then<br />
source bin/activate<br />
fi<br />
nosetests --xml --xml-formatter=nosexml.TextMateFormatter<br />
</code></p>
<p>PS, it seems like the python bundle needs some love, anyone know the maintainer?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2008/12/16/making-textmate-virtualenv-aware/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>An interesting new campaign</title>
		<link>http://www.machine-envy.com/blog/2008/12/03/an-interesting-new-campaign/</link>
		<comments>http://www.machine-envy.com/blog/2008/12/03/an-interesting-new-campaign/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 21:01:18 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=209</guid>
		<description><![CDATA[RentalRights looks like it is finally getting a campaign together to organise in support of people who rent.  If you rent and live in the uk you should check it out.  No other country seems to treat tenants so badly.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://rentalrights.org.uk/">RentalRights</a> looks like it is finally getting a campaign together to organise in support of people who rent.  If you rent and live in the uk you should check it out.  No other country seems to treat tenants so badly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2008/12/03/an-interesting-new-campaign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>chimpy: MailChimp API for python</title>
		<link>http://www.machine-envy.com/blog/2008/09/21/chimpy-mailchimp-api-for-python/</link>
		<comments>http://www.machine-envy.com/blog/2008/09/21/chimpy-mailchimp-api-for-python/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:17:23 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=206</guid>
		<description><![CDATA[I needed to use MailChimp from a Django app, so I have knocked up a wrapper for their API.  Come on over to the google code site for chimpy if it is useful to you.
]]></description>
			<content:encoded><![CDATA[<p>I needed to use <a href="http://www.mailchimp.com">MailChimp</a> from a Django app, so I have knocked up a wrapper for their <a href="http://www.mailchimp.com/api">API</a>.  Come on over to the google code site for <a href="http://code.google.com/p/chimpy/">chimpy</a> if it is useful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2008/09/21/chimpy-mailchimp-api-for-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why you shouldn&#8217;t use BT business</title>
		<link>http://www.machine-envy.com/blog/2008/09/14/why-you-shouldnt-use-bt-business/</link>
		<comments>http://www.machine-envy.com/blog/2008/09/14/why-you-shouldnt-use-bt-business/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 12:37:51 +0000</pubDate>
		<dc:creator>James Casbon</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://www.machine-envy.com/blog/?p=203</guid>
		<description><![CDATA[My new office use BT for their ADSL.  We had a problem with mail disappearing between people in the office.  So I emailed BT and asked them what was happening.  Before they would help, they needed three emails in the last 72 hours that had disappeared.
I provided three emails satisfying this criteria. [...]]]></description>
			<content:encoded><![CDATA[<p>My new office use BT for their ADSL.  We had a problem with mail disappearing between people in the office.  So I emailed BT and asked them what was happening.  Before they would help, they needed three emails in the last 72 hours that had disappeared.</p>
<p>I provided three emails satisfying this criteria.  I did what most people would do and sent an email with the subject &#8216;test&#8217; which was not delivered and sent this to BT.  Their response was that emails with the word test in the subject line would be spam filtered, and you cannot access to the mails they have filtered.  Since we are a company that performs tests, I asked if this could be removed?  BT said that they could not do this.  OK, so can BT just whitelist all mails within our domain?  Again, no.</p>
<p>BT also <em>cannot provide email lists</em>.  Think about that. The flagship British technology company is incapable of providing your business with an email list.   That is so poor, I&#8217;m speechless.</p>
<p>All in all, BT don&#8217;t seem capable of providing reliable email service and are also not willing to help fix problems when they occur.  And their online management interface sucks as well.  Avoid.</p>
<p>When you add in phorm to this, I see no reason to ever use a BT product if you can avoid it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.machine-envy.com/blog/2008/09/14/why-you-shouldnt-use-bt-business/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

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