<?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>Mousebender</title>
	<atom:link href="http://mousebender.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mousebender.wordpress.com</link>
	<description>"Let them eat Cheesecake"</description>
	<lastBuildDate>Sat, 28 May 2011 22:46:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mousebender.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mousebender</title>
		<link>http://mousebender.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mousebender.wordpress.com/osd.xml" title="Mousebender" />
	<atom:link rel='hub' href='http://mousebender.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Including a module in Ruby</title>
		<link>http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/</link>
		<comments>http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 02:57:34 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/</guid>
		<description><![CDATA[If we define two modules, with methods that have the same names module M1 def foo puts "M1" end end module M2 def foo puts "M2" end end and then include them in a class in a specific order class C include M1 include M2 end method from the last included module will be used. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=70&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If we define two modules, with methods that have the same names</p>
<pre>module M1
  def foo
    puts "M1"
  end
end

module M2
  def foo
    puts "M2"
  end
end</pre>
<p>and then include them in a class in a specific order</p>
<pre>class C
  include M1
  include M2
end</pre>
<p>method from the last included module will be used.</p>
<pre>C.new.foo # =&gt; "M2"</pre>
<p>So it looks like the methods are &#8220;copied&#8221; into the including class, so that the last definition of &#8220;foo&#8221; gets precedence. That&#8217;s how I thought about including Ruby modules initially.</p>
<p>But if that was the case the following example</p>
<pre>module M
  def foo
    puts "M"
  end
end

class C
  def foo
    puts "C"
  end
  include M
end</pre>
<p>should print &#8220;M&#8221;. But it doesn&#8217;t.</p>
<pre>C.new.foo <strong># =&gt; "C"</strong></pre>
<p>It calls the class &#8220;C&#8221; version of the &#8220;foo&#8221;, so the method can&#8217;t be redefined during the include.</p>
<p>What actually happens (and what I learned from &#8220;Include&#8221; part of <a href="http://rhg.rubyforge.org/chapter04.html">Chapter 4 of Ruby Hacking Guide</a>) is that the included module gets injected into the class hierarchy right above &#8220;C&#8221;.</p>
<pre>class C
  def foo
    puts "C"
    super <strong># Calling to see what the superclass defined.</strong>
  end
end</pre>
<p>Let&#8217;s check what the hierarchy looks like before the inclusion of M.</p>
<pre>C.ancestors <strong># =&gt; [C, Object, Kernel]</strong></pre>
<p>Now let&#8217;s define &#8220;M&#8221;</p>
<pre>module M
  def foo
    puts "M"
  end
end</pre>
<p>and include it in &#8220;C&#8221;.</p>
<pre>class C
  include M
end</pre>
<p>Let&#8217;s check how it affected the class hierarchy.</p>
<pre>C.ancestors <strong># =&gt; [C, M, Object, Kernel]</strong></pre>
<p>Module &#8220;M&#8221; got injected as a direct superclass of &#8220;C&#8221;.</p>
<pre>C.new.foo <strong># =&gt; "C" then "M"</strong></pre>
<p>As C#foo calls super it&#8217;s now obvious how we got that output.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/70/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/70/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=70&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>Solution to Code Kata Fifteen</title>
		<link>http://mousebender.wordpress.com/2007/11/05/solution-to-code-kata-fifteen/</link>
		<comments>http://mousebender.wordpress.com/2007/11/05/solution-to-code-kata-fifteen/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 17:46:45 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[code-kata]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/11/05/solution-to-code-kata-fifteen/</guid>
		<description><![CDATA[Just felt like doing some programming exercise. My bookmarks led me to the code kata 15. First, the problem: Think of binary numbers: sequences of 0&#8242;s and 1&#8242;s. How many n-digit binary numbers are there that don&#8217;t have two adjacent 1 bits? For example, for three-digit numbers, five of the possible eight combinations meet the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=69&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
Just felt like doing some programming exercise. My bookmarks led me to the <a href="http://codekata.pragprog.com/2007/01/code_kata_fifte.html">code kata 15</a>. First, the problem:
</p>
<blockquote><p>
Think of binary numbers: sequences of 0&#8242;s and 1&#8242;s. How many n-digit binary numbers are there that don&#8217;t have two adjacent 1 bits? For example, for three-digit numbers, five of the possible eight combinations meet the criteria: 000, 001, 010, <strike>011</strike>, 100, 101, <strike>110</strike>, <strike>111</strike>. What is the number for sequences of length 4, 5, 10, n?</p>
<p>Having worked out the pattern, there&#8217;s a second part to the question: can you prove why that relationship exists?
</p></blockquote>
<p>
Now, the solution.
</p>
<p>
Let&#8217;s call the function that calculate the number of n-digit binary numbers without two adjacent <strong>1</strong> bits <strong>a(n)</strong>.
</p>
<p>
Now let&#8217;s define two helper functions. <strong>a<sub>0</sub>(n)</strong> returns number of those binary numbers that end with zero, and <strong>a<sub>1</sub>(n)</strong> returns number of those ending with one. Thus, it&#8217;s obvious that:</p>
<blockquote><p>
a(n) = a<sub>0</sub>(n) + a<sub>1</sub>(n)
</p></blockquote>
<p>
Now, suppose we already have a set of (n-1)-bit numbers generated and now, based on that, we want to generate a new set of n-bit numbers. We&#8217;ll do that by adding a single bit to the end of each (n-1)-bit number. Because we care only about adjacent <strong>1s</strong>, we can add <strong>0s</strong> to the end of every (n-1)-bit number. Thus:
</p>
<blockquote><p>
a<sub>0</sub>(n) = a(n-1)
</p></blockquote>
<p>
On the other hand we can&#8217;t add <strong>1s</strong> to each (n-1)-bit number. We can only add <strong>1</strong> to numbers which had <strong>0</strong> at the end. Thus:</p>
<blockquote><p>
a<sub>1</sub>(n) = a<sub>0</sub>(n-1)
</p></blockquote>
<p>
By simple substitution we can rewrite the last equation into the following one:
</p>
<blockquote><p>
a<sub>1</sub>(n) = a(n-2)
</p></blockquote>
<p>
Get back to the definition of <strong>a<sub>0</sub>(n)</strong> and <strong>a<sub>1</sub>(n)</strong> and make the final substitution:
</p>
<blockquote><p>
a(n) = a(n-1) + a(n-2)
</p></blockquote>
<p>
<a href="http://en.wikipedia.org/wiki/Fibonacci_number">Doesn&#8217;t it look familiar?</a> Now you only have to say that <strong>a(1) = 2</strong> and <strong>a(2) = 3</strong> and you&#8217;re done.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/69/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/69/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=69&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/11/05/solution-to-code-kata-fifteen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>spec plugin compatible with nose 0.10</title>
		<link>http://mousebender.wordpress.com/2007/10/12/spec-plugin-compatible-with-nose-010/</link>
		<comments>http://mousebender.wordpress.com/2007/10/12/spec-plugin-compatible-with-nose-010/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 20:36:14 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[nose]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/10/12/spec-plugin-compatible-with-nose-010/</guid>
		<description><![CDATA[If you use the spec plugin (part of the pinocchio package) and want to upgrade to the new version of nose, you can safely do this now, because here is the new spec plugin, (I hope) fully compatible with the new plugin API. Note that it&#8217;s not an official release of pinocchio, but just a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=68&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you use the spec plugin (part of <a href="http://darcs.idyll.org/~t/projects/pinocchio/doc/">the pinocchio package</a>) and want to upgrade to <a href="http://somethingaboutorange.com/mrl/2007/10/nose-0100-final.html">the new version of nose</a>, you can safely do this now, because <a href="http://groups.google.com/group/nose-users/web/pinocchio-spec-nose-0.10-compatible.tar.gz">here is the new spec plugin</a>, (I hope) fully compatible with the new plugin API. Note that it&#8217;s not an official release of pinocchio, but just a testing version for the impatient. I haven&#8217;t changed other pinoccho plugins, so you&#8217;re safe to upgrade your pinocchio 0.1 installation to this version. Let me know if something doesn&#8217;t work as expected.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/68/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/68/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=68&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/10/12/spec-plugin-compatible-with-nose-010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>PVS update</title>
		<link>http://mousebender.wordpress.com/2007/07/29/pvs-update/</link>
		<comments>http://mousebender.wordpress.com/2007/07/29/pvs-update/#comments</comments>
		<pubDate>Sun, 29 Jul 2007 22:35:01 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[bazaar]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[pvs]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/07/29/pvs-update/</guid>
		<description><![CDATA[It&#8217;s been quiet here lately, but only because I&#8217;m busy with PVS &#8211; my SoC project. ;-) PVS stands for Patch Verification System and I&#8217;m building it to support patch review process for CPython. There&#8217;s not much time left before the end of SoC 2007, so I won&#8217;t tell you the whole story now. Instead, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=61&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>
It&#8217;s been quiet here lately, but only because I&#8217;m busy with <a href="http://mousebender.wordpress.com/soc-2007-application/">PVS &#8211; my SoC project</a>. ;-) PVS stands for Patch Verification System and I&#8217;m building it to support patch review process for CPython. There&#8217;s not much time left before the end of SoC 2007, so I won&#8217;t tell you the whole story now. Instead, I will share with you few insights about development process and tools I&#8217;ve used. OK, here we go.
</p>
<p>
<a href="http://trac.edgewall.org/"><img src='http://mousebender.files.wordpress.com/2007/07/trac_logo.png?w=510' alt='Trac logo' align="left" style="margin-right:1em;" /></a>Sometimes <a href="http://trac.edgewall.org/">Trac</a> is an overkill. Text files in <a href="http://docutils.sourceforge.net/rst.html">reST format</a> are often more than enough. You also get a bonus by keeping all your project-related stuff (tests, documentation, todos) in one place (i.e. not scattered among repository, wiki and bugs manager).
</p>
<p><a href="http://www.djangoproject.com/"><img src='http://mousebender.files.wordpress.com/2007/07/django_logo.png?w=510' alt='Django logo' style="margin-left:1em;" align="right" /></a>I&#8217;m using two <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORMs</a> inside PVS: <a href="http://elixir.ematia.de/">Elixir</a>+<a href="http://www.sqlalchemy.org/">SQLAlchemy</a> and <a href="http://www.djangoproject.com/documentation/model-api/">Django ORM</a>. Both work great and saved me a lot of tedious work. I like the way SQLAlchemy handles references to other tables, although its select syntax is slightly weird (although surely powerful). Django ORM may not be as functional as SQLAlchemy, but its main advantage is its good integration with the rest of the framework. Tweaking the <a href="http://www.djangoproject.com/documentation/model-api/#admin-options">admin views</a> is both pleasant and <strong>addictive</strong> (something like customizing desktop settings of your new Ubuntu install ;-). You&#8217;ve been warned.
</p>
<p>
Did I mention that both ORMs work on the same database without any problems at all? A big thanks to both libraries&#8217; authors for not using magic tables/fields or strange implicit conventions.
</p>
<p>
<a href="http://www.ohloh.net/projects/26"><img align="left" src="http://www.ohloh.net/projects/26/badge.gif" width="100" height="16" alt="Ohloh Metric for Python" style="margin-right:1em;" /></a>Duplicating the whole source checkout tree of a project of CPython size (about 100Mb in almost 12.000 files) is quite expensive, as I soon realized (better sooner than later). Hopefully I don&#8217;t have to do this &#8211; patch has <strong>&#8211;dry-run</strong> option and subversion client supports <strong>revert</strong> operation. This combination has truly saved me. :-)
</p>
<p>
<a href="http://twill.idyll.org/">Twill</a> rocks. I written a patch reporter for <a href="http://roundup.sourceforge.net/">Roundup</a> in less than half an hour. Thanks <a href="http://ivory.idyll.org/blog/">Titus</a>!
</p>
<p>
<a href="http://www.python.org/dev/peps/pep-0318/"><img src='http://mousebender.files.wordpress.com/2007/07/at.jpg?w=510' alt='@' style="margin-left:1em;" align="right" /><a href="http://www.python.org/dev/peps/pep-0318/">Python decorators</a> are not used often, but applied carefully can be very powerful. In PVS I defined <strong>daemonized</strong> decorator which makes decorated function execute in the background as a separate process. It also creates a PID file in a configured directory (like <strong>/var/run/pvs/</strong>), so you can easily manage the daemon (e.g. send signals to it).
</p>
<p>
<a href="http://bazaar-vcs.org/"><img src='http://mousebender.files.wordpress.com/2007/07/bzr_logo.png?w=510' alt='Bazaar logo' align='left' style="margin-right:1em;" /></a>After initially using <a href="http://subversion.tigris.org/">Subversion</a> I recently switched to <a href="http://bazaar-vcs.org/">Bazaar</a>, mostly for its ability to work offline. It&#8217;s been working fine so far. Because I&#8217;m working alone I didn&#8217;t have occasion to use its merging capabilities, so can&#8217;t really comment on those. When it comes to speed, it&#8217;s visibly faster than Subversion, mostly because it doesn&#8217;t have to process anything over the wire. Making a backup and sharing is easier &#8211; just archive the branch directory and you&#8217;re done. <a href="http://bazaar-vcs.org/svn2bzr">svn2bzr</a> worked without problems, so if you&#8217;re a Subversion user &#8211; give <a href="http://bazaar-vcs.org/">Bazaar</a> a try.
</p>
<p>
There are functions which I use over and over again in different Python applications that I write. Simple ones like <strong>read_file_contents</strong>/<strong>write_file_contents</strong> and more complicated beasts like <strong>daemonize</strong> or <strong>run_command</strong>. Those get copy&amp;pasted between code repositories, which isn&#8217;t really <a href="http://en.wikipedia.org/wiki/DRY">DRY</a>. Yeah, I could clean them up and put <strong>mk-utils</strong> package on PyPI, but I&#8217;m too lazy and this is a stupid idea anyway. A central repository of those functions and a simple way to cherry-pick &#8211; now <strong>that</strong> would make my day. Hey, why do we need whole libraries anyway? ;-)
</p>
<p>
And finally: <a href="http://joker.linuxstuff.pl/files/pvs-r54.tar.bz2">grab the code</a>. :-)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/61/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/61/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=61&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/07/29/pvs-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>

		<media:content url="http://mousebender.files.wordpress.com/2007/07/trac_logo.png" medium="image">
			<media:title type="html">Trac logo</media:title>
		</media:content>

		<media:content url="http://mousebender.files.wordpress.com/2007/07/django_logo.png" medium="image">
			<media:title type="html">Django logo</media:title>
		</media:content>

		<media:content url="http://www.ohloh.net/projects/26/badge.gif" medium="image">
			<media:title type="html">Ohloh Metric for Python</media:title>
		</media:content>

		<media:content url="http://mousebender.files.wordpress.com/2007/07/at.jpg" medium="image">
			<media:title type="html">@</media:title>
		</media:content>

		<media:content url="http://mousebender.files.wordpress.com/2007/07/bzr_logo.png" medium="image">
			<media:title type="html">Bazaar logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Two quotes</title>
		<link>http://mousebender.wordpress.com/2007/06/16/two-quotes/</link>
		<comments>http://mousebender.wordpress.com/2007/06/16/two-quotes/#comments</comments>
		<pubDate>Sat, 16 Jun 2007 00:48:41 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/06/16/two-quotes/</guid>
		<description><![CDATA[Joel Spolsky: People should take responsibility and ownership of the things that they specify. If something&#8217;s wrong with the spec, there should be a designated spec owner, with their name printed right there on the spec, who is responsible for fixing it. Venkat Subramaniam and Andy Hunt: Blame doesn&#8217;t ﬁx bugs. Instead of pointing ﬁngers, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=60&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.joelonsoftware.com/articles/fog0000000035.html">Joel Spolsky</a>:</p>
<blockquote><p>People should take responsibility and ownership of the things that they specify. If something&#8217;s wrong with the spec, there should be a designated spec owner, with their name printed right there on the spec, <strong>who</strong> is responsible for fixing it.</p></blockquote>
<p><a href="http://www.pragmaticprogrammer.com/titles/pad/">Venkat Subramaniam and Andy Hunt</a>:</p>
<blockquote><p>Blame doesn&#8217;t ﬁx bugs. Instead of pointing ﬁngers, point to possible solutions. It’s the positive outcome that counts.</p></blockquote>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/60/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/60/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=60&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/06/16/two-quotes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>PVS architecture draft</title>
		<link>http://mousebender.wordpress.com/2007/05/28/pvs-architecture-draft/</link>
		<comments>http://mousebender.wordpress.com/2007/05/28/pvs-architecture-draft/#comments</comments>
		<pubDate>Mon, 28 May 2007 00:34:23 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[pvs]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/05/28/pvs-architecture-draft/</guid>
		<description><![CDATA[If you&#8217;re interested in my Python patch verification system project (or want to get interested :-), check out notes on system architecture I just added. Feel free to comment here or on the wiki, I&#8217;d love to hear your feedback.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=58&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re interested in my <a href="http://mousebender.wordpress.com/soc-2007-application/">Python patch verification system project</a> (or want to get interested :-), check out <a href="http://pybots.org/pvs/wiki/SystemArchitecture">notes on system architecture</a> I just added. Feel free to comment here or on the wiki, I&#8217;d love to hear your feedback.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/58/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/58/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=58&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/05/28/pvs-architecture-draft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>Minor annoyance</title>
		<link>http://mousebender.wordpress.com/2007/05/19/minor-annoyance/</link>
		<comments>http://mousebender.wordpress.com/2007/05/19/minor-annoyance/#comments</comments>
		<pubDate>Sat, 19 May 2007 21:49:35 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/05/19/minor-annoyance/</guid>
		<description><![CDATA[Map operation on sets isn&#8217;t closed, both in Python: &#62;&#62;&#62; type( map(lambda x: x**2, set([1,2,3,4])) ) &#60;type 'list'&#62; and Ruby: &#62;&#62; Set.new([1,2,3,4]).map { &#124;x&#124; x**2 }.class =&#62; Array At least Haskell does the right thing: Main&#62; typeOf( Set.map (\x -&#62; x^2) (Set.fromList([1,2,3,4::Integer])) ) Set Integer An obvious workaround is to operate on lists and convert [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=57&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Map operation on sets isn&#8217;t <a href="http://en.wikipedia.org/wiki/Closure_%28mathematics%29">closed</a>, both in Python:</p>
<p><code><strong>&gt;&gt;&gt;</strong> type( map(<span style="color:cyan;">lambda</span> x: x**2, set([1,2,3,4])) )<br />
<strong>&lt;type 'list'&gt;</strong><br />
</code></p>
<p>and Ruby:<br />
<code><strong>&gt;&gt;</strong> <span style="color:green;">Set</span>.new([1,2,3,4]).map { |x| x**2 }.class<br />
<strong>=&gt; <span style="color:green;">Array</span></strong><br />
</code></p>
<p>At least Haskell does the right thing:<br />
<code><strong>Main&gt;</strong> typeOf( <span style="color:green;">Set</span><span style="color:brown;">.</span>map (<span style="color:brown;">\</span>x <span style="color:brown;">-&gt;</span> x<span style="color:brown;">^</span>2) (<span style="color:green;">Set</span><span style="color:brown;">.</span>fromList([1,2,3,4<span style="color:brown;">::</span><span style="color:green;">Integer</span>])) )<br />
<strong>Set Integer</strong><br />
</code></p>
<p>An obvious workaround is to operate on lists and convert to sets once you need them. You have to ask yourself whether it will cause performance problems in your application.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/57/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/57/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=57&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/05/19/minor-annoyance/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>Accepted to Summer of Code 2007!</title>
		<link>http://mousebender.wordpress.com/2007/04/19/accepted-to-summer-of-code-2007/</link>
		<comments>http://mousebender.wordpress.com/2007/04/19/accepted-to-summer-of-code-2007/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 00:15:27 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/04/19/accepted-to-summer-of-code-2007/</guid>
		<description><![CDATA[It actually happened a week ago, but I was really busy and had no time to share this happy news with the world. But here I am again, a lucky student ready to hack some Python code during summer. This time I will not only write in Python, but also for Python &#8211; I&#8217;m going [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=56&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It actually <a href="http://code.google.com/soc/psf/appinfo.html?csaid=538C80F920A88469">happened a week ago</a>, but I was really busy and had no time to share this happy news with the world. But here I am again, a lucky student ready to hack some Python code during summer. This time I will not only write <strong>in</strong> Python, but also <strong>for</strong> Python &#8211; I&#8217;m going to implement a verification system for patches contributed to Python project via <a href="http://sourceforge.net/tracker/?group_id=5470&amp;atid=305470">its patch tracker</a>. See <a href="http://mousebender.wordpress.com/soc-2007-application/">the application</a> for detailed description. I have already set up a <a href="http://pybots.org/pvs">Trac instance for this project</a>, so go ahead and post your comments there.</p>
<p>Last summer I learnt quite a bit about Python and its toolset, made some great friends and got involved into even more projects. I will be happy if this year will be no different.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/56/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/56/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=56&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/04/19/accepted-to-summer-of-code-2007/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>A Logic File System and the web</title>
		<link>http://mousebender.wordpress.com/2007/03/01/a-logic-file-system-and-the-web/</link>
		<comments>http://mousebender.wordpress.com/2007/03/01/a-logic-file-system-and-the-web/#comments</comments>
		<pubDate>Thu, 01 Mar 2007 23:17:15 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[os]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/03/01/a-logic-file-system-and-the-web/</guid>
		<description><![CDATA[A Logic File System is generally a keywords-based file system extended by good navigation capabilities. There is a official home page with much more information and sample implementations. Although the implementations work nicely with standard UNIX tools, like ls, mkdir or find the concept itself presents a major shift in information management philosophy, which IMHO [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=54&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.usenix.org/events/usenix03/tech/full_papers/padioleau/padioleau_html/">A Logic File System</a> is generally a keywords-based file system extended by good navigation capabilities. There is a <a href="http://lfs.irisa.fr/">official home page</a> with much more information and sample implementations. Although the implementations work nicely with standard UNIX tools, like <em>ls</em>, <em>mkdir</em> or <em>find</em> the concept itself presents a major shift in information management philosophy, which IMHO cannot be introduced overnight. In fact, I don&#8217;t think we&#8217;ll ever see this on our desktops as too many things rely on hierarchical structure right now (developing applications &#8211; along with version control systems &#8211; to name one). Current solutions (like <a href="http://beagle-project.org/">Beagle</a>) are simply <em>good enough</em>. What will probably work is creating a new platform which does the right thing from the start. Happy news is that this new platform is being build and (surprisingly!) heavily used already &#8211; popular web services like <a href="http://del.icio.us">del.icio.us</a> or <a href="http://www.flickr.com">flickr</a> have these concepts built-in in a form of <strong>tags</strong>. As we slowly move our data from desktop into the web we&#8217;ll use logic file systems more and more, without even knowing it.</p>
<p>Getting back to the <a href="http://www.usenix.org/events/usenix03/tech/full_papers/padioleau/padioleau_html/">original paper</a> &#8211; very interesting is the concept of <a href="http://www.usenix.org/events/usenix03/tech/full_papers/padioleau/padioleau_html/#DEF:INTRINSIC">intrinsic and extrinsic keywords</a>. Intrinsic keywords describe an inherent qualities of a file (like size or last modification time), while extrinsic keywords are labels set by the user. By unifying these two properties into a single entity (a keyword) expressiveness of the system rises, while keeping the semantics simple. <a href="http://del.icio.us">del.icio.us</a> implemented a small part of this concept in form of <a href="http://blog.del.icio.us/blog/2005/06/casting_the_net.html">system:filetype tags</a>. With these two types of keywords in place you can execute <code>ls length:&gt;20min/type:video/google</code> to list video files about Google longer than 20 minutes. Interesting characteristic of this is the fact that some intrinsic keywords are defined only for specific file types. For example, <em>length</em> keyword can be defined only for media files, like audio or video. By a set of extensions (or plugins if you like) system can incorporate a new set of search and navigation capabilities without requiring any user intervention or a single change in his data.</p>
<p>I hope the way current web applications evolve will eventually lead them to the ideas described in the <a href="http://www.usenix.org/events/usenix03/tech/full_papers/padioleau/padioleau_html/">LISFS paper</a> so all of us can benefit from it without having to struggle with backward-compatibility problems our old hierarchical file systems impose.</p>
<p>BTW, all of this reminds me of an article on <a href="http://notes-on-haskell.blogspot.com/2007/02/platforms-evolution-and-softwares.html">platforms and software evolution</a> I read some time ago. Recommended reading.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/54/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/54/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=54&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/03/01/a-logic-file-system-and-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
		<item>
		<title>Free your blog!</title>
		<link>http://mousebender.wordpress.com/2007/02/27/free-your-blog/</link>
		<comments>http://mousebender.wordpress.com/2007/02/27/free-your-blog/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 20:36:11 +0000</pubDate>
		<dc:creator>Michał Kwiatkowski</dc:creator>
				<category><![CDATA[freedom]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://mousebender.wordpress.com/2007/02/27/free-your-blog/</guid>
		<description><![CDATA[During my search for free blogs today I got surprised by the fact that a really small percent of Python blogs (either on Planet Python or Unofficial Planet Python) is licensed under a free license (full list below). I believe it&#8217;s caused mostly by omission or unawareness, as in my example &#8212; I added a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=53&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>During my search for free blogs today I got surprised by the fact that a really small percent of Python blogs (either on <a href="http://planet.python.org/">Planet Python</a> or <a href="http://www.planetpython.org/">Unofficial Planet Python</a>) is licensed under a free license (full list below). I believe it&#8217;s caused mostly by omission or unawareness, as in my example &#8212; I added a CC button pretty recently, although my intention was to share my knowledge with others from the very beginning.</p>
<p>Most of you already publish your code in open source projects, so you know the benefits of openness. Next step is freeing your ideas and hard work you&#8217;ve put into your blog. <a href="http://creativecommons.org/license/">Choose a license</a> that work for you and open your blog content for collaboration.</p>
<p>For a quick explanation of CC licensing, watch this video:<br />
<span style="text-align:center; display: block;"><a href="http://mousebender.wordpress.com/2007/02/27/free-your-blog/"><img src="http://img.youtube.com/vi/P3rksT1q4eg/2.jpg" alt="" /></a></span></p>
<p>What follows is a list of <a href="http://planet.python.org/">Planet Python</a> and <a href="http://www.planetpython.org/">Unofficial Planet Python</a> blogs that are licensed under Creative Commons. If I omitted your blog or you&#8217;ve added a CC licensing recently, please let me know in the comments, so I can update this list.</p>
<ul>
<li><a href="http://python-advocacy.blogspot.com/">About Python Advocacy</a></li>
<li><a href="http://agiletesting.blogspot.com/">Agile Testing</a></li>
<li><a href="http://openswarm.blogspot.com/">Anastasios Hatzis</a></li>
<li><a href="http://blarneyfellow.wordpress.com/">Blarney Fellow</a></li>
<li><a href="http://www.traceback.org">David Stanek’s Digressions</a></li>
<li><a href="http://www.defuze.org">deFuze.org</a></li>
<li><a href="http://diagrammes-modernes.blogspot.com/">diagrammes modernes</a></li>
<li><a href="http://www.fishandcross.com/blog">Ed Taekema &#8211; Road Warrior Collaboration</a></li>
<li><a href="http://hex-dump.blogspot.com/">Hex dump</a></li>
<li><a href="http://blogs.law.harvard.edu/ivan/">Ivan Krstic&#8217;s Weblog</a></li>
<li><a href="http://jtauber.com/blog">James Tauber</a></li>
<li><a href="http://faassen.n--tree.net/blog">Python Secret Weblog</a></li>
<li><a href="http://tomayko.com/">Ryan Tomayko</a></li>
<li><a href="http://bluesock.org/~willg/blog">Will&#8217;s blog</a></li>
<li><a href="http://www.executableabstractions.com/weblog/Python/">XA: Python Postings</a></li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mousebender.wordpress.com/53/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mousebender.wordpress.com/53/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mousebender.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mousebender.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mousebender.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mousebender.wordpress.com&amp;blog=239531&amp;post=53&amp;subd=mousebender&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mousebender.wordpress.com/2007/02/27/free-your-blog/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/c41b3a735b666e1506c99a6795d61639?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mousebender</media:title>
		</media:content>
	</item>
	</channel>
</rss>
