<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: ian-bicking</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/ian-bicking.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2010-03-17T10:05:35+00:00</updated><author><name>Simon Willison</name></author><entry><title>The Web Server Benchmarking We Need</title><link href="https://simonwillison.net/2010/Mar/17/ian/#atom-tag" rel="alternate"/><published>2010-03-17T10:05:35+00:00</published><updated>2010-03-17T10:05:35+00:00</updated><id>https://simonwillison.net/2010/Mar/17/ian/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2010/03/16/web-server-benchmarking-we-need/"&gt;The Web Server Benchmarking We Need&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ian Bicking asks for a WSGI benchmark which emphasises error handling over raw performance—can the server keep serving requests if some of them are CPU bound, I/O bound, wedged or cause a segfault?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="benchmarks"/><category term="ian-bicking"/><category term="python"/><category term="wsgi"/></entry><entry><title>Why toppcloud will not be agnostic</title><link href="https://simonwillison.net/2010/Feb/12/toppcloud/#atom-tag" rel="alternate"/><published>2010-02-12T09:21:32+00:00</published><updated>2010-02-12T09:21:32+00:00</updated><id>https://simonwillison.net/2010/Feb/12/toppcloud/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2010/02/10/why-toppcloud-not-agnostic/"&gt;Why toppcloud will not be agnostic&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ian Bicking’s toppcloud aims to offer deployment with the ease of use of AppEngine against a standard, open source Ubuntu + Python 2.6 + mod_wsgi + Varnish stack. Here he explains why he’s not going to vary the required components: keeping everything completely standardised means everyone gets the same bugs (and the same fixes).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/modwsgi"&gt;modwsgi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/toppcloud"&gt;toppcloud&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ubuntu"&gt;ubuntu&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/varnish"&gt;varnish&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="deployment"/><category term="django"/><category term="google-app-engine"/><category term="ian-bicking"/><category term="modwsgi"/><category term="python"/><category term="toppcloud"/><category term="ubuntu"/><category term="varnish"/><category term="wsgi"/></entry><entry><title>Quoting Ian Bicking</title><link href="https://simonwillison.net/2009/Sep/21/ian/#atom-tag" rel="alternate"/><published>2009-09-21T18:22:23+00:00</published><updated>2009-09-21T18:22:23+00:00</updated><id>https://simonwillison.net/2009/Sep/21/ian/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://blog.ianbicking.org/2009/09/10/a-new-self-definition-for-foss/"&gt;&lt;p&gt;There was this clamour in the past to get companies to open source their products. This has stopped, because all the software that got open source sucked. It's just not very interesting to have a closed source program get open sourced. It doesn't help anyone, because the way closed source software is created in a very different way than open source software. The result is a software base that just does not engage people in a way to make it a valid piece of software for further development.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://blog.ianbicking.org/2009/09/10/a-new-self-definition-for-foss/"&gt;Ian Bicking&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/closedsource"&gt;closedsource&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/open-source"&gt;open-source&lt;/a&gt;&lt;/p&gt;



</summary><category term="closedsource"/><category term="ian-bicking"/><category term="open-source"/></entry><entry><title>A Few Corrections To "On Packaging"</title><link href="https://simonwillison.net/2008/Dec/14/ian/#atom-tag" rel="alternate"/><published>2008-12-14T23:07:24+00:00</published><updated>2008-12-14T23:07:24+00:00</updated><id>https://simonwillison.net/2008/Dec/14/ian/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/"&gt;A Few Corrections To &amp;quot;On Packaging&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
From Ian Bicking.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/james-bennett"&gt;james-bennett&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="james-bennett"/><category term="packaging"/><category term="python"/></entry><entry><title>On packaging</title><link href="https://simonwillison.net/2008/Dec/14/packaging/#atom-tag" rel="alternate"/><published>2008-12-14T16:57:42+00:00</published><updated>2008-12-14T16:57:42+00:00</updated><id>https://simonwillison.net/2008/Dec/14/packaging/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.b-list.org/weblog/2008/dec/14/packaging/"&gt;On packaging&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
James Bennett discusses the problems with setuptools (and ruby gems), and recommends Ian Bicking’s pip as a setuptools replacement.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/gems"&gt;gems&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/james-bennett"&gt;james-bennett&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pip"&gt;pip&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/setuptools"&gt;setuptools&lt;/a&gt;&lt;/p&gt;



</summary><category term="gems"/><category term="ian-bicking"/><category term="james-bennett"/><category term="pip"/><category term="python"/><category term="ruby"/><category term="setuptools"/></entry><entry><title>lxml: an underappreciated web scraping library</title><link href="https://simonwillison.net/2008/Dec/11/ian/#atom-tag" rel="alternate"/><published>2008-12-11T09:54:53+00:00</published><updated>2008-12-11T09:54:53+00:00</updated><id>https://simonwillison.net/2008/Dec/11/ian/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/"&gt;lxml: an underappreciated web scraping library&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I just wish I could get the wretched thing to install on OS X Leopard without resorting to MacPorts.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lxml"&gt;lxml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/macports"&gt;macports&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scraping"&gt;scraping&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="lxml"/><category term="macports"/><category term="python"/><category term="scraping"/></entry><entry><title>Monkeypatching is Destroying Ruby</title><link href="https://simonwillison.net/2008/Mar/22/virtuous/#atom-tag" rel="alternate"/><published>2008-03-22T00:27:02+00:00</published><updated>2008-03-22T00:27:02+00:00</updated><id>https://simonwillison.net/2008/Mar/22/virtuous/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://avdi.org/devblog/2008/02/23/why-monkeypatching-is-destroying-ruby/"&gt;Monkeypatching is Destroying Ruby&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Deliberately provocative title, but makes a well considered case for restrained use of monkey patching in Ruby. Cultural norms around monkey patching seem to me to be one of the core differences between the Ruby and Python communities.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.ianbicking.org/2008/03/21/monkeypatching-and-dead-ends/"&gt;Ian Bicking&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/monkeypatching"&gt;monkeypatching&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="monkeypatching"/><category term="python"/><category term="ruby"/></entry><entry><title>WebOb</title><link href="https://simonwillison.net/2007/Dec/23/webob/#atom-tag" rel="alternate"/><published>2007-12-23T10:22:45+00:00</published><updated>2007-12-23T10:22:45+00:00</updated><id>https://simonwillison.net/2007/Dec/23/webob/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pythonpaste.org/webob/"&gt;WebOb&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
WebOb is “an extraction and refinement of pieces from Paste”—provides a very nice request and response object, clearly inspired partly by Django. The documentation includes the differences between the WebOb API and that of other frameworks.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paste"&gt;paste&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webob"&gt;webob&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="frameworks"/><category term="ian-bicking"/><category term="paste"/><category term="python"/><category term="webob"/></entry><entry><title>Quoting Ian Bicking</title><link href="https://simonwillison.net/2007/Nov/27/bdd/#atom-tag" rel="alternate"/><published>2007-11-27T19:16:06+00:00</published><updated>2007-11-27T19:16:06+00:00</updated><id>https://simonwillison.net/2007/Nov/27/bdd/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://blog.ianbicking.org/2007/11/27/java-bdd/"&gt;&lt;p&gt;I can't help feel that BDD is a case of a bad idea spreading; the motivations for BDD are fine (a change in developer testing workflow), but the technique they use to try to reach the desired workflow is totally bizarre.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://blog.ianbicking.org/2007/11/27/java-bdd/"&gt;Ian Bicking&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bdd"&gt;bdd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/testing"&gt;testing&lt;/a&gt;&lt;/p&gt;



</summary><category term="bdd"/><category term="ian-bicking"/><category term="java"/><category term="testing"/></entry><entry><title>virtualenv 0.8.1</title><link href="https://simonwillison.net/2007/Sep/15/python/#atom-tag" rel="alternate"/><published>2007-09-15T23:36:42+00:00</published><updated>2007-09-15T23:36:42+00:00</updated><id>https://simonwillison.net/2007/Sep/15/python/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pypi.python.org/pypi/virtualenv/"&gt;virtualenv 0.8.1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Ian Bicking’s tool for creating isolated Python environments; designed to replace his earlier workingenv package. Does anyone have any experience using this? It looks fantastically useful.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/virtualenv"&gt;virtualenv&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="python"/><category term="virtualenv"/></entry><entry><title>The Shrinking Python Web Framework World</title><link href="https://simonwillison.net/2007/Aug/22/shrinking/#atom-tag" rel="alternate"/><published>2007-08-22T22:06:27+00:00</published><updated>2007-08-22T22:06:27+00:00</updated><id>https://simonwillison.net/2007/Aug/22/shrinking/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2007/08/21/the-shrinking-python-web-framework-world/"&gt;The Shrinking Python Web Framework World&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Python used to suffer from a paradox of choice with regards to Web frameworks; today things are considerably easier for new developers.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="python"/></entry><entry><title>DictMixin</title><link href="https://simonwillison.net/2007/Aug/17/dictmixin/#atom-tag" rel="alternate"/><published>2007-08-17T10:34:39+00:00</published><updated>2007-08-17T10:34:39+00:00</updated><id>https://simonwillison.net/2007/Aug/17/dictmixin/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2007/08/17/dictmixin/"&gt;DictMixin&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I wasn’t aware of this Python class (part of the UserDict module): lets you implement __get__, __set__, __del__ and keys() and provides the other dictionary methods for you.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/dictionaries"&gt;dictionaries&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dictmixin"&gt;dictmixin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stdlib"&gt;stdlib&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/userdict"&gt;userdict&lt;/a&gt;&lt;/p&gt;



</summary><category term="dictionaries"/><category term="dictmixin"/><category term="ian-bicking"/><category term="python"/><category term="stdlib"/><category term="userdict"/></entry><entry><title>Atom Models</title><link href="https://simonwillison.net/2007/Aug/7/atom/#atom-tag" rel="alternate"/><published>2007-08-07T16:02:03+00:00</published><updated>2007-08-07T16:02:03+00:00</updated><id>https://simonwillison.net/2007/Aug/7/atom/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.ianbicking.org/2007/08/02/atom-models/"&gt;Atom Models&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Building Python classes that act as utility wrappers around data stored in an lxml DOM object.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/atom"&gt;atom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dom"&gt;dom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lxml"&gt;lxml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xml"&gt;xml&lt;/a&gt;&lt;/p&gt;



</summary><category term="atom"/><category term="dom"/><category term="ian-bicking"/><category term="lxml"/><category term="python"/><category term="xml"/></entry><entry><title>Wait For It</title><link href="https://simonwillison.net/2007/Jun/9/wait/#atom-tag" rel="alternate"/><published>2007-06-09T16:53:14+00:00</published><updated>2007-06-09T16:53:14+00:00</updated><id>https://simonwillison.net/2007/Jun/9/wait/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://pythonpaste.org/waitforit/"&gt;Wait For It&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Neat WSGI middleware from Ian Bicking that launches a thread for every incoming request and watches for slow responses; if something is taking too long it returns a “please wait” page to the user and polls for completion.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.ianbicking.org/what-im-up-to-jun07.html"&gt;Ian Bicking&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/middleware"&gt;middleware&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/wsgi"&gt;wsgi&lt;/a&gt;&lt;/p&gt;



</summary><category term="ian-bicking"/><category term="middleware"/><category term="python"/><category term="wsgi"/></entry><entry><title>Optimising Python</title><link href="https://simonwillison.net/2003/Oct/28/optimisingPython/#atom-tag" rel="alternate"/><published>2003-10-28T03:06:34+00:00</published><updated>2003-10-28T03:06:34+00:00</updated><id>https://simonwillison.net/2003/Oct/28/optimisingPython/#atom-tag</id><summary type="html">
    &lt;p&gt;Some great tips for optimising Python, courtesy of &lt;a href="http://blog.colorstudy.com/ianb/weblog/2003/10/26.html#P22" title="Kata 19: an optimization anecdote"&gt;Ian Bicking&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://blog.colorstudy.com/ianb/weblog/2003/10/26.html#P22"&gt;Kata 19: an optimization anecdote&lt;/a&gt; demonstrates some neat techniques including use of the &lt;a href="http://www.python.org/doc/current/lib/module-gc.html"&gt;gc module&lt;/a&gt; to fine tune garbage collection.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://www.python.org/doc/essays/list2str.html"&gt;Python Patterns - An Optimization Anecdote&lt;/a&gt; mainly uses functional programming techniques and the &lt;a href="http://www.python.org/doc/current/lib/module-array.html"&gt;array module&lt;/a&gt;.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://effbot.org/zone/image-histogram-optimization.htm"&gt;An Optimization Anecdote&lt;/a&gt; from Fredrik Lundh teaches us that the more time is spent by Python in pure C routines, the faster code will run (note that this does not necessarily imply rewriting Python code in C).&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://manatee.mojam.com/~skip/python/fastpython.html"&gt;Python Performance Tips&lt;/a&gt; from 1996, most of which look like they are still valid.&lt;/li&gt;
 &lt;li&gt;&lt;a href="http://trific.ath.cx/resources/python/optimization/"&gt;Python optimization tips&lt;/a&gt;, which seem to be a bit more up to date.&lt;/li&gt;
&lt;/ul&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ian-bicking"&gt;ian-bicking&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ian-bicking"/><category term="python"/></entry></feed>