<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Nothing to say</title>
	<atom:link href="http://cournape.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cournape.wordpress.com</link>
	<description>some personal notes</description>
	<lastBuildDate>Mon, 02 Jan 2012 10:17:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cournape.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Nothing to say</title>
		<link>http://cournape.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cournape.wordpress.com/osd.xml" title="Nothing to say" />
	<atom:link rel='hub' href='http://cournape.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Adding a distutils compatibility layer to bento</title>
		<link>http://cournape.wordpress.com/2011/03/06/adding-a-distutils-compatibility-layer-to-bento/</link>
		<comments>http://cournape.wordpress.com/2011/03/06/adding-a-distutils-compatibility-layer-to-bento/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 15:36:53 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[bento]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=304</guid>
		<description><![CDATA[From the beginning, it was clear that one of the major hurdle for bento would be transition from distutils. This is a hard issue for any tool trying to improve existing ones, but even more so for distribution/packaging tools, as it impacts everyone (developers and users of the tools). Since almost day one, bento had some basic facilities [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=304&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">From the beginning, it was clear that one of the major hurdle for bento would be transition from distutils. This is a hard issue for any tool trying to improve existing ones, but even more so for distribution/packaging tools, as it impacts everyone (developers and users of the tools).</p>
<p style="text-align:justify;">Since almost day one, bento had some basic facilities to convert existing distutils projects into bento.info. I have now added something to do the exact contrary, that is maintaing some distutils extensions which are driven by bento.info. Concretely, it means that if you have a bento package, you can write something like:</p>
<pre>import setuptools # this comes first so that setuptools does its monkey dance
import bento.distutils # this monkey patches on top of setuptools
setuptools.setup()</pre>
<p>as your setup.py, it will give the &#8220;illusion&#8221; of a distutils package.  Of course, it won&#8217;t give you all the goodies given by bento (if it could, I would not have written bento in the first place), but it is good enough to enable the following:</p>
<ul>
<li>installing through the usual &#8220;python setup.py install&#8221;</li>
<li>building source distributions</li>
<li>more significantly: it will make your package easy_install-able/pip-able</li>
</ul>
<p>This feature will be in bento 0.0.5, which will be released very soon (before pycon 2011 where I will present bento). More details may be found on <a href="http://cournape.github.com/Bento/html/transition.html">bento&#8217;s documentation</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/304/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/304/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/304/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=304&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2011/03/06/adding-a-distutils-compatibility-layer-to-bento/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Bento at Pycon2011 and what&#8217;s coming in bento 0.0.5</title>
		<link>http://cournape.wordpress.com/2011/01/28/bento-at-pycon2011-and-whats-coming-in-bento-0-0-5/</link>
		<comments>http://cournape.wordpress.com/2011/01/28/bento-at-pycon2011-and-whats-coming-in-bento-0-0-5/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 05:36:57 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[bento]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=293</guid>
		<description><![CDATA[I could not spend much time (if any) on bento the last few weeks of 2010, but I fortunately got back some time to work on it this month. It is a good time to describe a bit what I hope will happen in bento in the next few months. Bento poster @ Pycon2011 First, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=293&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">I could not spend much time (if any) on bento the last few weeks of 2010, but I fortunately got back some time to work on it this month. It is a good time to describe a bit what I hope will happen in bento in the next few months.</p>
<h3 style="text-align:justify;">Bento poster @ Pycon2011</h3>
<p style="text-align:justify;">First, my bento proposal has been rejected for PyCon 2011, so it will only be presented as a poster. It is a bit unfortunate because I think it would have worked much better as a talk than as a poster. Nevertheless, I hope it will help bringing awareness of bento outside the scipy community, and give me a better understanding of people&#8217;s need for packaging (poster should be better for the latter point).</p>
<h3 style="text-align:justify;">Bento 0.0.5</h3>
<p style="text-align:justify;">Bento 0.0.5 should be coming soon (mid-february). Contrary to the 0.0.4 release, this version won&#8217;t bring major user-visible features, but it got a lot of internal redesigns to make bento easier to use:</p>
<h4 style="text-align:justify;">Automatic command dependency</h4>
<p style="text-align:justify;">One does not need to run each command separately anymore. If you run &#8220;bentomaker install&#8221;, it will automatically run configure and build on its own, in the right order.  What&#8217;s interesting about it is how dependencies are specified. In distutils, subcommand order is hardcoded inside the parent command, which makes it virtually impossible to extend them. Bento does not suffer from this major deficiency:</p>
<ul style="text-align:justify;">
<li style="text-align:justify;">Dependencies are specified outside the classes: you just need to say which class must be run before/after</li>
<li>Class order is then computed at <em>run time</em> using a simple topological sort. Although the API is not there yet, this will enable arbitrary insertion of new commands between existing commands without the need to monkey patch anything</li>
</ul>
<h4 style="text-align:justify;">Virtualenv support</h4>
<p style="text-align:justify;">If a bento package is installed under virtualenv, the package will be installed inside the virtualenv by default:</p>
<pre><code>virtualenv .env
source .env/bin/activate
bentomaker install # this will install the package inside the virtualenv
</code></pre>
<p style="text-align:justify;">Of course, if the install path has been customized (through prefix/eprefix), those take precedence over virtualenv.</p>
<h4 style="text-align:justify;">List files to be installed</h4>
<p style="text-align:justify;">The install command can optionally print the list of files to be installed and their actual installation path. This can be used to check where things are installed. This list is exactly what bento would install by design, so it is more difficult to have weird corner cases where the list and what is actually installed is different.</p>
<h4 style="text-align:justify;">First steps toward uninstall</h4>
<p style="text-align:justify;">Initial &#8220;transaction-based&#8221; install is available: in this mode, a transaction log will be generated, which can be used to rollback an install. For example, if the install fails in the middle, already installed files will be removed to keep the system in a clean state. This is a first step toward uninstall support.</p>
<h4 style="text-align:justify;">Refactoring to help using waf inside bento</h4>
<p style="text-align:justify;">Bentos internal have been improved to enable easier customization of the build tool. I have a proof of concept where bento can be customized to <a href="https://github.com/cournape/Bento/blob/master/examples/hooks/waf/waf16">use waf to build extensions</a>.  The whole point is to be able to do so without changing bento&#8217;s code itself, of course. The same scheme can be used to <a href="https://github.com/cournape/Bento/blob/master/examples/hooks/distutils/">build extensions with distutils</a>(for compatibility reasons, to help complex packages to move to bento one step at a time.</p>
<h3 style="text-align:justify;">Bentoshop: a framework to manage installed packages</h3>
<p style="text-align:justify;">I am hoping to have at least a proof of concept for a package manager based around bento for Pycon 2011. As already stated on this blog, there are few non-negotiable features that the design must follow:</p>
<ol style="text-align:justify;">
<li>Robust by design: things that can be installed can be removed, avoid synchronisation issues between metadata and installed packages</li>
<li>Transparent: it should play well with native packaging tools and not go in the way of anyone&#8217;s workflow.</li>
<li>No support whatsoever for multiple version: this can be handled with virtualenv for trivial cases, and through native &#8220;virtualization&#8221; scheme when virtualenv is not enough (chroot for fs &#8220;virtualziation&#8221;, or actual virtual machines for more)</li>
<li>Efficient</li>
</ol>
<p style="text-align:justify;">This means PEP376 is out of the question (it breaks points 1 and 4). I will follow a first proof of concept following the haskell cabal and R (CRAN) systems, but backed with a db for performances.</p>
<p style="text-align:justify;">The main design issue is point 2: ideally, one would want a user-specific, python-specific package manager to be aware of packages installed through the native system, but I am not sure it is really possible without breaking other points.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/293/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=293&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2011/01/28/bento-at-pycon2011-and-whats-coming-in-bento-0-0-5/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>error registering new chef-client</title>
		<link>http://cournape.wordpress.com/2010/12/10/error-registering-new-chef-client/</link>
		<comments>http://cournape.wordpress.com/2010/12/10/error-registering-new-chef-client/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 09:44:40 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=289</guid>
		<description><![CDATA[Getting this error on a new chef client: /usr/lib/ruby/1.8/net/http.rb:2101:in `error!&#8217;: 404 &#8220;Not Found&#8221; (Net::HTTPServerException) is actually caused by having an old chef-client. Took me a while to realize, and google was not that helpful.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=289&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Getting this error on a new chef client:</p>
<p>/usr/lib/ruby/1.8/net/http.rb:2101:in `error!&#8217;: 404 &#8220;Not Found&#8221; (Net::HTTPServerException)</p>
<p>is actually caused by having an old chef-client. Took me a while to realize, and google was not that helpful.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/289/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=289&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/12/10/error-registering-new-chef-client/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Bento talk for PyCon2011 submitted, and some bento updates</title>
		<link>http://cournape.wordpress.com/2010/11/02/bent-talk-for-pycon2011-submitted-and-some-bento-updates/</link>
		<comments>http://cournape.wordpress.com/2010/11/02/bent-talk-for-pycon2011-submitted-and-some-bento-updates/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 04:23:40 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bento]]></category>
		<category><![CDATA[numscons]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=270</guid>
		<description><![CDATA[I have just submitted a talk proposal for bento at pycon 2011. If accepted, the talk will be a good deadline to get a first alpha ready. In the meantime, I have added windows support, and I can now build numpy on windows 64 bits with the MKL library. There are still a few rough [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=270&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just submitted a talk proposal for bento at pycon 2011. If accepted, the talk will be a good deadline to get a first alpha ready.</p>
<p>In the meantime, I have added windows support, and I can now build numpy on windows 64 bits with the MKL library. There are still a few rough edges, but I think bento will soon be on par with numscons as far as supported platforms go.</p>
<br /> Tagged: <a href='http://cournape.wordpress.com/tag/bento/'>bento</a>, <a href='http://cournape.wordpress.com/tag/numscons/'>numscons</a>, <a href='http://cournape.wordpress.com/tag/python/'>python</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=270&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/11/02/bent-talk-for-pycon2011-submitted-and-some-bento-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>A few remarks on distutils2</title>
		<link>http://cournape.wordpress.com/2010/10/13/271/</link>
		<comments>http://cournape.wordpress.com/2010/10/13/271/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 13:31:06 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[bento]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=271</guid>
		<description><![CDATA[Disclaimer: I am working on a project which may be seen as a concurrent to distutils2 efforts, and I am quite biased against the existing packaging tools in python. On the other hand, I know distutils extremely well, and have been maintaining numpy.distutils extensions for several years, and most of my criticisims should stand on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=271&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>Disclaimer: I am working on a project which may be seen as a concurrent to<br />
distutils2 efforts, and I am quite biased against the existing packaging tools<br />
in python. On the other hand, I know distutils extremely well, and have been<br />
maintaining numpy.distutils extensions for several years, and most of my<br />
criticisims should stand on their own</em></p>
<p>There is a strong consensus in the python community that the current packaging<br />
tools (distutils) are too limited. There has been various attempts to improve<br />
the situation, through setuptools, the distribute fork, etc&#8230; Beginning this<br />
year, the focus has been shifted toward distutils2, which is scheduled to be<br />
part of the stdlib for python 3.3, while staying compatible with python 2.4<br />
onwards.  A first alpha has been released recently, and I thought it was a good<br />
occasion to look at what happened in that space.</p>
<p>As far as I can see, distutils2 had at least the three following goals:</p>
<ul>
<li>standardize a lot of setuptools practices through PEPS and implement them.</li>
<li>refactor distutils code and add a test suite with a significant coverage.</li>
<li>get rid of setup.py for most packages, while adding hooks for people who<br />
need to customize their build/installation/deployment process</li>
</ul>
<p>I won&#8217;t discuss much about the first point: most setuptools features are<br />
useless to the scipy community, and are generally poor reimplementations of<br />
existing solutions anyway. As far as I can see, the third point is still being<br />
discussed, and not present in the mainline.</p>
<p>The second point is more interesting: distutils code quality was pretty low,<br />
but the main issue was (and still is) the overall design. Unfortunately, adding<br />
tests does not address the reliability issue which have plagued the scipy<br />
community (and I am sure other communitues as well). The main issues w.r.t.<br />
build and installation remain:</p>
<ul>
<li>unreliable installation: distutils install things by simply copying trees<br />
built into a build directory (build/ by default).  This is a problem when<br />
you decide to change your source code (e.g.  renaming some modules), as<br />
distutils will add things to the existing build tree, and hence install<br />
will copy both old and new targets. As with distutils, the only way to have<br />
a reliable build will be to first rm -rf build. This alone is a consistent<br />
source of issues for numpy/scipy, as many end-users are bitten by this. We<br />
somewhat alleviate this by distributing binary installers (which know how<br />
to uninstall things and are built by people familiar with distutils idiocy)</li>
<li>Inconsistencies between compiler classes. For example, the MSVCCompiler<br />
class compiler executable is defined as a string, and set as the attribute<br />
cc. On the other hand, most other compiler classes define the compiler_so<br />
attribute (which is a list in that case).  They also don&#8217;t have the same<br />
methods.</li>
<li>No consistent, centralized API to obtain basic compilation options (CC<br />
flags, etc&#8230;)</li>
</ul>
<p>Even more significantly, it means that the fundamental issue of extensibility<br />
has not been adressed at all, because the command-based design is still there.<br />
This is by far the worst part of the original distutils design, and I fail to<br />
see the point of a backward-incompatible successor to distutils which does not<br />
address this issue.</p>
<h3>Issues with command-based design</h3>
<p>Distutils is built around commands, which almost correpond 1 to 1 to command<br />
line command: when you do &#8220;python setup.py install&#8221;, distutils will essentially<br />
call the install.run command after some initialization stuff. This by itself is<br />
a relatively common pattern, but the issue lies elsewhere.</p>
<h4>Options handling</h4>
<p><del datetime="2010-10-14T11:44:36+00:00"> </del></p>
<p><span style="text-decoration:line-through;">First, each command has its own set of options, but the options of one command</span><br />
<span style="text-decoration:line-through;"> often affect the other commands, and there is no easy way for one command to</span><br />
<span style="text-decoration:line-through;"> know the options from the other one. For example, you may want to know the</span><br />
<span style="text-decoration:line-through;"> options of the install command at build time. The usual pattern to do so is to</span><br />
<span style="text-decoration:line-through;"> call the command you want to know the options, instantiate it and get its</span><br />
<span style="text-decoration:line-through;"> options, by using e.g.  get_finalized_command:</span></p>
<pre><span style="text-decoration:line-through;"><code>install = self.get_finalized_command("install")
install_lib = install.install_lib
</code></span></pre>
<p><span style="text-decoration:line-through;">This is hard to use correctly because every command can be reset by other</span><br />
<span style="text-decoration:line-through;"> commands, and some commands cannot be instancialized this way depending on the</span><br />
<span style="text-decoration:line-through;"> context. Worse, this can cause unexpected issues later on if you are calling a</span><br />
<span style="text-decoration:line-through;"> command which has not already been run (like the install command in a build</span><br />
<span style="text-decoration:line-through;"> command). Quite a few subtle bugs in setuptools and in numpy.distutils were/are</span><br />
<span style="text-decoration:line-through;"> caused by this.</span></p>
<p>&nbsp;</p>
<p>According to Tarek Ziade (the main maintainer of distutils2), this is addressed in a distutils2 development branch. I cannot comment on it as I have not looked at the code yet.</p>
<h4>Sub-commands</h4>
<p>Distutils has a notion of commands and &#8220;sub-commands&#8221;. Subcommands may override<br />
each other&#8217;s options, through set_undefined_options function, which create<br />
new attributes on the fly. This is every bit as bad as it sounds.</p>
<p>Moreover, the harcoding of dependencies between commands and sub-commands<br />
significantly hampers extensibility. For example, in numpy, we use some<br />
templated source files which are processed into .c: this is done in the<br />
build_src command. Now, because the build command of distutils does not know<br />
about build_src, we need to override build as well to call build_src. Then<br />
came setuptools, which of course did not know about build_src, so we had to<br />
conditionally subclass from setuptools to run build_src too [1]. Every command<br />
which may potentially trigger this command may need to be overriden, with all<br />
the complexity that follows.  This is completely insane.</p>
<h3>Hook</h3>
<p>Distutils2 has added the notion of hooks, which are functions to be run/before<br />
the command they hook into. But because they interact with distutils2 through<br />
the command instances, they share all the issues aforementioned, and I suspect<br />
they won&#8217;t be of much use.</p>
<p>More concretely, let&#8217;s consider a simple example: a simple file generated from<br />
a template (say config.pkg.in), containing some information only known at<br />
runtime (like the version and build time).  Doing this correctly is<br />
surprisingly difficult:</p>
<ul>
<li>you need to generate the file in a build command, and put it at the right<br />
place in the build directory</li>
<li>you need to install it at the right place (in-place vs normal build, egg<br />
install vs non-egg install vs externally_managed install)</li>
<li>you may want to automatically include the version.py.in in sdist</li>
<li>you may want the file to be installed in bdist/msi/mpkg, so you may need to<br />
know all the details of those commands</li>
</ul>
<p>Each of this step may be quite complex and error-prone. Some are impossible with a<br />
simple hook: it is currently impossible to add files to sdist without rewriting<br />
the sdist.run function AFAIK.</p>
<p>To deal with this correctly, the whole command business needs a significant<br />
redesign. Several extremely talented people in the scipy community have<br />
indepedently attempted to improve this in the last decade or so, without any<br />
succes. Nothing short of a rewrite will work there, and commands constitutes a<br />
good third of distutils code.</p>
<h4>Build customization</h4>
<p>distutils2 does not improve the situation w.r.t. building compiled code, but I<br />
guess that&#8217;s relatively specific to the big packages like numpy, scipy or<br />
pywin32. Needless to say, the compilers classes are practically impossible to<br />
extend (they don&#8217;t even share a consistent interface), and very few people know<br />
how to add support for new compilers, new tools or new binaries (ctypes<br />
extensions, for example).</p>
<p>Overall, I don&#8217;t quite understand the rationale for distutils2. It seems that<br />
most setuptools-standardization could have happened without breaking backward<br />
compatibility, and the improvements are too minor for people with significant<br />
distutils extensions to switch. Certainly, I don&#8217;t see myself porting<br />
numpy.distutils to distutils2 anytime soon.</p>
<p>[1]: it should be noted that most setuptools issues are really distutils<br />
issues, in the sense that distutils does not provide the right abstractions to<br />
be extended.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/271/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=271&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/10/13/271/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Bento 0.0.4 released !</title>
		<link>http://cournape.wordpress.com/2010/10/10/bento-0-0-4-released/</link>
		<comments>http://cournape.wordpress.com/2010/10/10/bento-0-0-4-released/#comments</comments>
		<pubDate>Sun, 10 Oct 2010 14:25:26 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[bento]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=259</guid>
		<description><![CDATA[I have just released the new version of Bento, 0.0.4. You can get it on github as usual &#160; Bento itself did not change too much, except for the support of sub-packages and a few things. But now bento can build both numpy and scipy on the &#8220;easy&#8221; platforms (linux + Atlas + gcc/clang). This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=259&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just released the new version of Bento, 0.0.4. You can get it on <a href="http://github.com/cournape/Bento">github</a> as usual</p>
<p>&nbsp;</p>
<p>Bento itself did not change too much, except for the support of sub-packages and a few things. But now bento can build both numpy and scipy on the &#8220;easy&#8221; platforms (linux + Atlas + gcc/clang). This posts shows a few cool things that you can do now with bento</p>
<h3>Full distribution check</h3>
<p>The best way to use this version of bento is to do the following:</p>
<pre><code># Download bento and create bentomaker
git clone http://github.com/cournape/Bento.git bento-git
cd bento-git &amp;&amp; python bootstrap.py &amp;&amp; cd ..
# Download the _bento_build branch from numpy
git clone http://github.com/cournape/numpy.git numpy-git
cd numpy-git &amp;&amp; git checkout -b bento_build origin/_bento_build
# Create a source tarball from numpy, configure, build and test numpy
# from that tarball
../bento-git/bentomaker distcheck
</code></pre>
<p>For some reasons I am still unclear about, the test suite fails to run from distcheck for scipy, but that seems to be more of a nose issue than bento proper.</p>
<h3>Building numpy with clang</h3>
<p>Assuming you are on Linux, you can try to build numpy with clang, the LLVM-based C compiler. Clang is faster at compiling than gcc, and generally gives better error messages than gcc. Although bento itself does not have any support for clang yet, you can easily play with the bento scripts to do so. In the top bscript file from numpy, at the end of the post_configure hook, replace every compiler with clang, i.e.:</p>
<p><pre class="brush: python;">
for flag in [&quot;CC&quot;, &quot;PYEXT_CC&quot;]:
     yctx.env[flag] = [&quot;clang&quot;]
</pre></p>
<p>Once the project is configured, you can also get a detailed look at the configured options, in the file build/default.env.py. You should not modify this file, but it is very useful to debug build issues. Another aid for debugging configuration options is the build/config.log file. Not only does it list every configuration command (both success and failures), but it also shows the source content as well as the command output.</p>
<h3>What&#8217;s coming next ?</h3>
<p>Version 0.0.5 will hopefully have a shorter release period than 0.0.4.  The goal for 0.0.5 is to make bento good enough so that other people can jump in bento development.</p>
<p>The main features I am thinking about are windows and python 3 support + a lot of code cleaning/documentation. Windows should not be too difficult, it is mainly about ripping off numscons/scons code for Visual studio support and adapt it into yaku. I have already started working on python 3 support as well &#8211; the main issue is bootstrapping bento, and finding an efficient process to work on both python 2 and 3 at the same time. Depending on the difficulty, I will also try to add proper dependency handling in yaku for compiled libraries and dependent headers: ATM, yaku does not detect header change, nor does it rebuild an extension if the linked libraries changed. An alternative is to bite the bullet and start working on integration with waf, which already does all this internally.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/259/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=259&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/10/10/bento-0-0-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>What&#8217;s coming in for bento 0.0.4</title>
		<link>http://cournape.wordpress.com/2010/09/11/whats-coming-in-for-bento-0-0-4/</link>
		<comments>http://cournape.wordpress.com/2010/09/11/whats-coming-in-for-bento-0-0-4/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 06:18:55 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=250</guid>
		<description><![CDATA[I initially intended to release the new version (0.0.4) of bento around mid-end of August, but it now seems like end of september is more likely. The reason is that I have been working pretty hard on bento and yaku for complex builds in the last few weeks, where complex means numpy/scipy. The main reason [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=250&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I initially intended to release the new version (0.0.4) of bento around mid-end<br />
of August, but it now seems like end of september is more likely. The reason is<br />
that I have been working pretty hard on bento and yaku for complex builds in<br />
the last few weeks, where complex means numpy/scipy.</p>
<p>The main reason for making scipy buildable with bento is to get a &#8220;feel&#8221; of how<br />
really extensible bento is. I think that since 0.0.3, bento is fairly usable,<br />
but extensibility is really what bento is about. The only way that I know to<br />
have an extensible design is to actually extend it in as many scenario as<br />
possible, and as far as complex distutils-based build go, scipy is a pretty<br />
good scenario.</p>
<p>The bottom line: I expect a <strong>fully working bento build of scipy within a few<br />
days</strong> (most hairy fortran stuff now builds and run the tests ok)</p>
<h3>Major changes from 0.0.3</h3>
<p>No backward-incompatible changes are required for the bento.info format. The<br />
major change is recursive package support, which ended up being more complex<br />
than anticipated. I already described this feature in a previous post: it<br />
mostly boils down to splitting a big bento.info into several &#8220;sub-bento&#8221; files<br />
in subdirectories.</p>
<p>Implementation-wise, it required a redesign of internal representation for<br />
files. The issue is how to know that two file names represent the same files: I<br />
quickly realize that using filenames is too complex and too fragile, and I<br />
decided to re-use the Node class from waf, which builds an internal<br />
representation of the filesystem. The conversion is still going on, but it<br />
simplified a lot of hairy code that I used to write in bento (and distutils<br />
previously). It particularly helps to compute the relative paths between too<br />
paths:</p>
<pre><code>relpos = node.path_from(othernode)
</code></pre>
<p>If node is /foo/bar and othernode is /foo, relpos will be bar, and .. if node<br />
and othernode are inverted. Doing this from the filenames alone has many<br />
corner cases, and path name computation are surprisingly slow on python (waf<br />
Node class caches things like absolute path name computation).</p>
<p>Thanks to the waf Node class, I can now easily list the packages, extensions,<br />
etc&#8230; specific to one sub bento, relatively to the sub bento directory, and<br />
translates packages, extensions, etc&#8230; as seen from the top directory.</p>
<p>I am happy with the internals, but the &#8220;API&#8221; for recursive build description is<br />
not good, to put it mildly. To add a subpackage description with associated<br />
bscript (hook file), you need to:</p>
<ul>
<li>add the sub bento.info to the Subento field in the parent bento.info</li>
<li>add the bscript file into the list of the recursive decorator inside<br />
the parent bscript file. Even though the decorator may be put on e.g.<br />
the configure hook, the build command will also look there for sub<br />
bscript files, which is not intuitive at all.</li>
</ul>
<p>You can see some examples<br />
<a href="http://github.com/cournape/Bento/tree/master/examples/recursive">there</a><br />
I am still looking for a good solution to this issue.</p>
<h3>Yaku enhancements</h3>
<p>Except for recursive package description, not much has changed in bento, and<br />
most of the work has happened in yaku. The first big change is that yaku itself<br />
also uses a waf-like Node class: although I resisted this at first, I think it<br />
is for the best, and it also simplified a lot of hairy corner cases inside<br />
yaku.</p>
<p>The other big change in yaku is overriding/extending it. I am interested in the<br />
following cases:</p>
<ul>
<li>adding new tool (clang, intel compiler, etc&#8230;)</li>
<li>adding a new process in the chain (say building extensions from .c.src<br />
instead of .c without monkey-patching original code)</li>
<li>overriding flags for some extensions (say building one extension with -Os<br />
instead of -O2)</li>
<li>overriding extension hook for some extensions. For example in general,<br />
fortran source files are compiled into .o directly for &#8220;pure&#8221; (not using<br />
python C API) libraries, but f2py allows to build a python extension from<br />
the .f directly. Yaku now allows for temporary overriding the command<br />
associated to .f file</li>
</ul>
<p>Now, <strong>all those four cases are implemented</strong>. Chaining a templating system to<br />
cython (for .pyx.in -&gt; .pyx -&gt; .c -&gt; .o -&gt; .so/.pyd) is now very simple,<br />
supporting new compilers can be done easily, and playing with compiling options<br />
straightforward internally.  There are a few issues, though.  Besides how the<br />
API should look like, a corny situation is dealing with dictionaries of<br />
configurations. In yaku, each task has an environment attached to it, which is<br />
a simple dictionary containing things like CFLAGS, CC, etc&#8230;  Most of the<br />
time, you want to share those dictionaries across tasks.  Unfortunately, python<br />
semantics for dictionaries don&#8217;t make that easy, and deepcopy is too expensive.<br />
A Copy-On-Write dictionary, which internally share common parts between<br />
dictionaries, would be ideal, but I am afraid implementing one in python would<br />
be very difficult.</p>
<p>I am also still not entirely convinced that yaku is warranted:<br />
<a href="http://github.com/erickt/fbuild">fbuild</a> is nearly the ideal system if it were<br />
not limited to python 3, and the new waf 1.6 looks great (T. Nagy, the waf<br />
maintainer, recently updated fortran support for 1.6). Fortunately, bento is<br />
build-tool agnostic from the start, and trying waf inside bento for a real<br />
project is on the TODO list.</p>
<h3>Other bento features</h3>
<p>I put an hold on other features planned for 0.0.4. The main missing features<br />
for bento are:</p>
<ul>
<li>distutils compatibility mode (so that bento.info may be used within distutils)</li>
<li>wininst &lt;-&gt; egg conversion</li>
<li>good documentation</li>
<li>python 3 compatibility</li>
<li>virtualenv and pip support </li>
<li>automatic command dependency (e.g. automatically re-run configure before<br />
build if necessary)</li>
</ul>
<p>Python 3 support will definitely not go into 0.0.4. Virtualenv/pip support<br />
should not be difficult, automatic dependency for commands is badly needed.</p>
<p>All being said, I think bento is shaping up quite ok. At my work, I constantly<br />
have to deal with distutils idiosyncraties for the most trivial things, and I<br />
am looking forward to seeing it replaced with something saner.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/250/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/250/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/250/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=250&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/09/11/whats-coming-in-for-bento-0-0-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Fixing ERROR 1396 (HY000): Operation CREATE USER failed</title>
		<link>http://cournape.wordpress.com/2010/08/30/fixing-error-1396-hy000-operation-create-user-failed/</link>
		<comments>http://cournape.wordpress.com/2010/08/30/fixing-error-1396-hy000-operation-create-user-failed/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 08:54:21 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=245</guid>
		<description><![CDATA[I got bitten by this several times already, here is what usually works if this error happens for user foo delete from mysql.user where user=foo; delete from mysql.db where user=foo<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=245&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I got bitten by this several times already, here is what usually works if this error happens for user foo</p>
<ul>
<li>delete from mysql.user where user=foo;</li>
<li>delete from mysql.db where user=foo</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/245/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/245/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/245/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=245&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/08/30/fixing-error-1396-hy000-operation-create-user-failed/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Recent progress on bento &#8211; build numpy !</title>
		<link>http://cournape.wordpress.com/2010/08/01/recent-progress-on-bento-build-numpy/</link>
		<comments>http://cournape.wordpress.com/2010/08/01/recent-progress-on-bento-build-numpy/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 18:33:27 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=238</guid>
		<description><![CDATA[I have spent the last few days on a relatively big feature for bento: recursive package description. The idea is to be able to simply describe packages in a deeply nested hierarchy without having to write long paths, and to split complicated packages descriptions into several files. At the bento.info level, the addition is easy: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=238&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have spent the last few days on a relatively big feature for bento: recursive package description. The idea is to be able to simply describe packages in a deeply nested hierarchy without having to write long paths, and to split complicated packages descriptions into several files.</p>
<p>At the bento.info level, the addition is easy:</p>
<p><pre class="brush: bash;">
Subento: numpy/core, numpy/lib ...
</pre></p>
<p>It took me more time to figure out a way to do it in the hook file. I ended up with a recurse decorator:</p>
<p><pre class="brush: python;">
@recurse([&quot;numpy/core/bscript&quot;, &quot;numpy/lib/bscript&quot;])
@post_configure
def some_func(ctx):
    ....
</pre></p>
<p>I am not sure it is the right solution yet, but it works for now. My first idea was to simply use a recurse function attached to hook contexts (the ctx argument), but I did not find a good way to guarantee an execution order (declaration order == execution order), and it was a bit unintuitive to integrate both hook decorator and the recurse together.</p>
<p>The reason why I tackle this now is that bento is at a stage where it need to be used on &#8220;real&#8221; builds to get a feeling of what works and what does not. The target is numpy and hopefully later scipy. Although I still hope to integrate waf or scons in bento as the canonical way of building numpy/scipy with bento, this also gives a good test for yaku (my simple build system).</p>
<p>It took me less than half a day to port the scons scripts to bento/yaku. A full build, unnoptimized build of numpy with clang is less than 10 seconds. A no-op build is ~ 150 ms, but as yaku does not have all the infrastructure for header dependency tracking yet, the number for no-op build is rather meaningless.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=238&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/08/01/recent-progress-on-bento-build-numpy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
		<item>
		<title>Bento 0.0.3 release</title>
		<link>http://cournape.wordpress.com/2010/07/02/231/</link>
		<comments>http://cournape.wordpress.com/2010/07/02/231/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 02:56:11 +0000</pubDate>
		<dc:creator>cournape</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cournape.wordpress.com/?p=231</guid>
		<description><![CDATA[I have just released bento 0.0.3 (see here for details). The release is available on github<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=231&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just released bento 0.0.3 (see <a href="http://cournape.wordpress.com/2010/06/07/bento-ext-toydist-whats-coming-for-0-0-3">here</a> for details).</p>
<p>The release is available on <a href="http://github.com/cournape/Bento/downloads">github</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cournape.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cournape.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cournape.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cournape.wordpress.com&amp;blog=2210763&amp;post=231&amp;subd=cournape&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cournape.wordpress.com/2010/07/02/231/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9820b5956634e5bbad7f4ed91a232822?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">cournape</media:title>
		</media:content>
	</item>
	</channel>
</rss>
