<?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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Lennart Regebro: Plone consulting</title>
	<atom:link href="http://regebro.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://regebro.wordpress.com</link>
	<description>Plone is the community!</description>
	<lastBuildDate>Sat, 10 Oct 2009 07:30:06 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='regebro.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/0951bbab843a6d7728258f2a1b5f4db7?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Lennart Regebro: Plone consulting</title>
		<link>http://regebro.wordpress.com</link>
	</image>
			<item>
		<title>Time for Python 3!</title>
		<link>http://regebro.wordpress.com/2009/10/10/time-for-python-3/</link>
		<comments>http://regebro.wordpress.com/2009/10/10/time-for-python-3/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 07:22:21 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[2to3]]></category>
		<category><![CDATA[distribute]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=462</guid>
		<description><![CDATA[The main problem with Python 3&#8217;s lack of backwards compatibility is not that you need to change the code. That&#8217;s pretty easy. No, the main problem is that you need to wait for all the libraries you use to be ported first. And when you use a whole framework that can be a lot. Zope [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=462&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The main problem with Python 3&#8217;s lack of backwards compatibility is not that you need to change the code. That&#8217;s pretty easy. No, the main problem is that you need to wait for all the libraries you use to be ported first. And when you use a whole framework that can be a lot. Zope + Plone involves some 170 packages or so.</p>
<p>And amongst the absolutely most popular packages out there has been Setuptools. So when I wanted to look into using the Zope Component Architecture on Python 3, I realized I needed Buildout, and to use Buildout I needed Setuptools. And many others, I&#8217;m sure, has had the same experience. Setuptools has become a block to Python 3.</p>
<p>But no longer! As mentioned <a href="http://regebro.wordpress.com/2009/09/25/setuptools-on-python-3-status-pretty-damn-good/" target="_blank">earlier</a>, <a href="http://pypi.python.org/pypi/distribute" target="_blank">Distribute</a> now has Python 3 support, and 0.6.3 of Distribute has been out for some weeks now and seems reasonably stable. And that means, that <strong>Yes! It is finally time for You to port your library to Python 3!</strong></p>
<p>Install Python 3.1 (forget 3.0, it&#8217;s too buggy) and Distribute and  read the <a href="http://bitbucket.org/tarek/distribute/src/tip/docs/python3.txt" target="_blank">documentation on Python 3 support</a>. Then subscribe to the <a href="http://mail.python.org/mailman/listinfo/python-porting" target="_blank">python-porting mailing list</a>, and off you go!</p>
Posted in python, python3 Tagged: 2to3, distribute <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/462/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/462/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/462/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=462&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/10/10/time-for-python-3/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Use key when sorting, not cmp</title>
		<link>http://regebro.wordpress.com/2009/09/28/use-key-when-sorting-not-cmp/</link>
		<comments>http://regebro.wordpress.com/2009/09/28/use-key-when-sorting-not-cmp/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 09:51:28 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[python magazine]]></category>
		<category><![CDATA[sorting]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=458</guid>
		<description><![CDATA[I just read Jarret Hardies article in Python Magazine on How to Survive Sorting in Python 3. There it is claimed that sort() and sorted() takes both cmp and key as parameters (which is correct) but that cmp is easier to understand and more popular.
But is it easier to understand? cmp requires you to compare [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=458&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I just read Jarret Hardies article in <a href="http://pymag.phparch.com/c/issue/view/98" target="_blank">Python Magazine</a> on How to Survive Sorting in Python 3. There it is claimed that sort() and sorted() takes both cmp and key as parameters (which is correct) but that cmp is easier to understand and more popular.</p>
<p>But is it easier to understand? cmp requires you to compare two objects. It requires you to first extract a value from the two objects that can be compared, then compare these values and then return -1 if the first object is smaller than the object passed in, 0 if they are equal, and +1 if the first object passed in to the comparison function is larger than the second. Or, if it&#8217;s multiple values that should be compared, you typically compare them one by one.</p>
<p>OK, admittedly, that is not very hard to understand. But what about using key? Well, for key you pass in a method that takes only one parameter, the object. The method then extracts a value that is used by the sorting. Done. It honestly doesn&#8217;t get simpler or easier to understand than that. It&#8217;s also faster, as the sorting methods will call the key function on each object only once.</p>
<p>The reason Python programmers are still using cmp instead of key (and also list.sort() instead of sorted()) is that these didn&#8217;t exist before Python 2.4, and therefore people use the old methods out of habit. No other reason. I didn&#8217;t even know about key until a year ago when I started looking into Python 3.</p>
<p>There is one usecase where key has one minor issue of &#8220;uhm&#8230;&#8221;, and that is if there is no obvious way of extracting one value. Maybe you should sort fruit so you want it sorted by type of fruit, and then size. So that&#8217;s two values, but key requires you to generate just one value. Well, you can simply return a tuple of the values, in the order they should be sorted. So for the fruit case (hehe), you simply do &#8220;return fruit.type, fruit.size&#8221;. It&#8217;s that simple, again.</p>
<p>Jarret also mentions a use case that key doesn&#8217;t cover, namely if you want to sort one value ascending and another descending. Well, it is possible to do, by generating some sort of hash that takes this into consideration, but that&#8217;s silly. Instead Jarret recommends doing tow consecutive sorts. He also demonstrates this to be faster than a cmp based comparison, so there you go.</p>
<p>Key is easier to implement and faster to run. You should already now use key instead of cmp. And you should buy Python Magazine, it&#8217;s getting really good.</p>
<p>(Also, most of the time you should use sorted() instead of sort. Because sorted can sort anything, while list.sort() of course only works on lists. That way people can pass in generators to your methods where you expected lists, and use the dynamicism of Python even more!)</p>
Posted in python, python3 Tagged: python magazine, sorting <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/458/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/458/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/458/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/458/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/458/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/458/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=458&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/09/28/use-key-when-sorting-not-cmp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Setuptools on Python 3 Status: Pretty damn good!</title>
		<link>http://regebro.wordpress.com/2009/09/25/setuptools-on-python-3-status-pretty-damn-good/</link>
		<comments>http://regebro.wordpress.com/2009/09/25/setuptools-on-python-3-status-pretty-damn-good/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 17:15:16 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python 3000]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[distribute]]></category>
		<category><![CDATA[setuptools]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=455</guid>
		<description><![CDATA[At DZUG-Tagungs last weekend it turned out that Martin v Löwis had a bunch of patches for my Python 3 port of setuptools. I merged them in, and Martin then proceeded to look through all my change sets and try to actually make sure they wouldn&#8217;t break edge cases (which I never bothered with). And [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=455&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>At DZUG-Tagungs last weekend it turned out that <a href="http://stackoverflow.com/users/33006/martin-v-lowis" target="_blank">Martin v Löwis</a> had a bunch of patches for my <a href="http://python-incompatibility.googlecode.com/svn/ports/setuptools/" target="_blank">Python 3 port of setuptools</a>. I merged them in, and Martin then proceeded to look through all my change sets and try to actually make sure they wouldn&#8217;t break edge cases (which I never bothered with). And then who ported my changes, change for change, to <a href="http://bitbucket.org/tarek/distribute/" target="_blank">Distribute</a>, the new fork of Setuptools. He wasn&#8217;t the only one working on this during the sprint, but he did the main body of the work, and embarassingly I&#8217;ve forgotten the names of the others. Shame on me.</p>
<p>This means, that amazingly enough, Distrubute now has Python 3 support! The next version 0.6.2, hasn&#8217;t been released yet, but it works fine for me for Python 3. And that&#8217;s really nice! If you need setuptools for Python 3, please try out the trunk version of Distribute. Martin put in support for automatically running 2to3 on code so you can support both Python 2 and Python 3 from the same source code easily, and I put in support so that the test command also does this conversion.</p>
<p>So thanks to Martin and the others! Also thanks to Alex Grönholm who has fixed some bugsin the Python 3 port, and thanks to Tarek for managing the Distribute project!</p>
Posted in python, python 3000, python3 Tagged: distribute, setuptools <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/455/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/455/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/455/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=455&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/09/25/setuptools-on-python-3-status-pretty-damn-good/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Some fat presentation tips if you use Linux or Open Office</title>
		<link>http://regebro.wordpress.com/2009/09/18/some-fat-presentation-tips-if-you-use-linux-or-open-office/</link>
		<comments>http://regebro.wordpress.com/2009/09/18/some-fat-presentation-tips-if-you-use-linux-or-open-office/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 18:13:43 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[dual screens]]></category>
		<category><![CDATA[impress]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open office]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xrandr]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=451</guid>
		<description><![CDATA[Recommendation 1: xrandr
At OSCON I had problems with getting my Ubuntu MacBook to talk to the overhead projects. Yes, MacBooks are notorious for this. At the excellent DZUG-Tagungs I had the same troubles, but time to look for a fix. (At PyCon everything worked fine though, so it&#8217;s only certain projectors).
Basically, the monitor configuration tool [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=451&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>Recommendation 1: xrandr</h2>
<p>At OSCON I had problems with getting my Ubuntu MacBook to talk to the overhead projects. Yes, MacBooks are notorious for this. At the excellent DZUG-Tagungs I had the same troubles, but time to look for a fix. (At PyCon everything worked fine though, so it&#8217;s only certain projectors).</p>
<p>Basically, the monitor configuration tool will present me with three screens if I connect the VGA dongle. One being the LCD screen, another the VGA and a third screen seems to be the DVI screen, even though I connect the VGA dongle. Crazy stuff. The problem is that whatever you do with the VGA screen, nothing actually happens. Resolution makes no difference, mirroring makes no difference. Pressing Apply will make the screen blink and you get asked if you want to save the settings, but the external monitor never turns on.</p>
<p>Aftersome serious Googling I found <a href="http://www.x.org/wiki/Projects/XRandR" target="_blank">xrandr</a>. This saved my life. Well, OK it didn&#8217;t, but it saved the presentation. xrandr does the same thing as the screen tool, but on the command like, and unlike it, it works. Possibly it&#8217;s way more stupid, and maybe doens&#8217;t ask the monitor if it can handle the resolution or something, it just sets it. Just typing xrandr will tell you what screens you have and the modes that they support.</p>
<p>I&#8217;ll give you a couple of handy typical settings. For other stuff, read the manual:</p>
<p>Single-screen presentation setting; Mirror the LCD and the VGA in 1024&#215;768:</p>
<pre>xrandr --output LVDS --mode 1024x768 --output VGA --mode 1024x768</pre>
<p>Dual screen presentation; Separate screen for the LCD and the VGA, VGA to the right of the LCD:</p>
<pre>xrandr --output LVDS --mode 1280x800 --output VGA --mode 1024x768 \
       --right-of LVDS</pre>
<p>As you see it&#8217;s pretty straight forward to use.</p>
<h2>Recommendation 2: Presenter view plugin for Impress</h2>
<p>Open Office Impress is not the worlds best presentation software. In many ways it&#8217;s pain in the ass, and I did a lightning talk at Pycon using the normal image viewer in fullscreen mode and just pictures I Googled. That was actually quite nice and much easier to do.</p>
<p>But that&#8217;s not always enough, and then you do need a presentation software, and for Linux the choices are limited. Now that I have discovered xrandr and know how to get separate screens in a reliable way when I&#8217;m at conferenses, I would like to have a separate presenter view, where you see not only the current slide, but the next slidem the notes and the time.</p>
<p>And whaddayounkow, <a href="http://extensions.services.openoffice.org/project/presenter-screen" target="_blank">there is one for Impress</a>. Now, stupdly it&#8217;s not included, you need to download it as a separate plugin. Silly really. But it seems to work fine, and I&#8217;m totally using it for my next presentations. No more forgetting what the next slide is, no more looking at the clock worringly, no more forgetting to say stuff. It&#8217;s going to make me a better presenter!</p>
<p>So why did I tell you guys this? I should have kept the secret to myself, right? No, I shouldn&#8217;t, and with some luck I&#8217;ll tell you why not at the Plone conference!</p>
Posted in plone, python Tagged: dual screens, impress, linux, open office, presentations, ubuntu, xrandr <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/451/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/451/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/451/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=451&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/09/18/some-fat-presentation-tips-if-you-use-linux-or-open-office/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Python vs Ruby</title>
		<link>http://regebro.wordpress.com/2009/07/12/python-vs-ruby/</link>
		<comments>http://regebro.wordpress.com/2009/07/12/python-vs-ruby/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 12:52:11 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=440</guid>
		<description><![CDATA[I see Ruby people bashing Python a lot on Stackoverflow. It&#8217;s a bit sad, Python and Ruby are usually bestest friends forevah. So I started a question on Stackoverflow, not about which of them is best, but just what the differences are, objectively.
It was more difficult to make that objective than I thought, but I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=440&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I see Ruby people bashing Python a lot on <a href="http://stackoverflow.com/" target="_blank">Stackoverflow</a>. It&#8217;s a bit sad, Python and Ruby are usually bestest friends forevah. So I started a question on Stackoverflow, not about which of them is best, <a href="http://stackoverflow.com/questions/1113611/what-does-ruby-have-that-python-doesnt-and-vice-versa" target="_blank">but just what the differences are, objectively.</a></p>
<p>It was more difficult to make that objective than I thought, but I sure learnt a lot. And, as suspected, many of the differences are just semantic, like Ruby using @attribute and Python using self.attribute. And of course it&#8217;s objectively it&#8217;s impossible to say what language is better, which we of course knew from the beginning. That&#8217;s no surprise. The surprise is that there are so few differences that can be cast as better or worse <em>at all</em>. Even such things that sound like an objective good or bad, such as a language having a certain feature, turns out to mostly be a matter of taste.</p>
<p>I could just find these differences that in any way can be called objectively better:</p>
<h2>1. Ruby has a reference to the class in the class body</h2>
<p>This means that code like this is possible:</p>
<pre>class MyClass
    initialize_magick()
end</pre>
<p>While in Python, you would have to write:</p>
<pre>class MyClass:
    pass
initialize_macgick(MyClass)</pre>
<p>As you see the practical difference is very small. But Rubys variant is cleaner, as the magic stuff is done in the class definition, so you see that it&#8217;s being done when you look at the class. And indeed, the Zope component architecture uses some heavy magic with metaclasses to make the same thing happen in Python:</p>
<pre>def MyClass:
    implements(IMyInterface)</pre>
<p>So it&#8217;s possible (In Python 2) by some clever tricks to get the same effect. In Python 3 it isn&#8217;t because the metaclass syntax is different, so in Python 3 you instead need to use class decorators. And what you think is cleaner of</p>
<pre>@magickly_initialized
def MyClass:
    pass</pre>
<p>or</p>
<pre>
<pre>def MyClass
    initialize_magick()
end</pre>
</pre>
<p>is again a matter of taste. So, a small plus for Ruby there, without a doubt. But it&#8217;s really not a big deal, because calling the initialize method after the class or as a decorator is really not a major drawback.</p>
<h2>2. Ruby has continuations</h2>
<p>Continuations are heavy magic. And Ruby has them, and Python has not. You can &#8220;fake&#8221; them, and it seems that many of the usecases can instead be done with passing variables into .next() which you can do in Python 3.1. The use of continuations seem rather limited, and hard to understand, but it&#8217;s there in Ruby, and not in Python. So another plus for Ruby.</p>
<h2>3. Python has generators</h2>
<p>You can fake them in Ruby by using blocks, or use continuations. So no big deal again, but a small plus for Python anyway, as Pythons generators are both easy and clean.</p>
<h2>4. Python has multiple inheritance</h2>
<p>Some people claim multiple inheritance is evil. But having it means that if you think it&#8217;s evil, you can simply not use it. I have used it a lot, never found it a problem, but I think adaptation is a better pattern. Still, it&#8217;s clearly a plus for Python.</p>
<h2>5. Python has docstrings</h2>
<p>Docstrings makes it possible to attach documentation directly to the classes and methods. That&#8217;sa nice documentation plus, and makes things like the Python interpreters help() function really useful. Another plus.</p>
<h1>Aaaaannnd, that&#8217;s it!</h1>
<p>These five small differences are the only things that I can see are objective improvements over the other language. And as you see, none of them are really major. It&#8217;s just small things that are more convenient or not. So, am I gonna switch to Ruby now, when it&#8217;s almost just as good? Nope. Because there are lot of other differences, that are differences in attitudes and semantics. And there I really like Python better. Here are three major features of Ruby that in my opinion either are misfeatures or just not of value:</p>
<h2>1. Ruby has built-in regexp and line input looping</h2>
<p>This is inspired by Perl, and means you can easily make a script that looks through a text file and munges each line separately and prints out another text line. This is extremely useful&#8217;in many cases. Also Ruby is said to be better to make glue.scripts, so it can more readily be used for a shell script replacement than Python. Plus for Ruby? Well, no, not in my book. I do these things sometimes, mostly in awk. If they get more complex than that, I prefer to use the clarity of Python than the obscure machinations of regexps. And having a small open(filename).readlines() isn&#8217;t that much trouble. So this is a feature I think only adds clutterm and I&#8217;m happy Python doesn&#8217;t have it. Wow! That turned out to be a subjective issue! That surprised me.</p>
<h2>2. Ruby protects class attributes etc</h2>
<p>Ruby treats variable names that has the first letter in capitals like a constant, so you can&#8217;t modify it. You also can&#8217;t access attributes of objects from outside the class. Python doesn&#8217;t protect your code from other programmers. If they want to shoot themselves in the foot they are allowed to. I like that. I remember when using Delphi, and I needed to subclass an object in the standard library, but some attributes or methods were protected, so I couldn&#8217;t. I ended up having to duplicate almost the whole (rather big) component class in my subclass, just because the developer of the base class hadn&#8217;t forseen my type or requirement. So these sorts of protections are generally just a problem. OK, it&#8217;s less of a problem in Ruby, as it allows you to monkey-patch the class but this still is a big plus for Python in my book. I&#8217;m sure Ruby people do not agree. It&#8217;s subjective again.</p>
<h2>3. Ruby has blocks</h2>
<p>But some differences are more differences in attitudes than anything else. And sometimes these different attitudes seem to in the end be the same attitude but from different angles. Ruby has for example the concept of blocks. Blocks seems to pretty much be Rubys name for closures, and it&#8217;s an abstract concept basically meaning a piece of code that gets variables from somewhere else and can have local variables that doesn&#8217;t pollute the surrounding name space.</p>
<p>Rubys blocks are widely hailed (by Ruby people) as something fantastic compared to Python. But it turned out to be very difficult to find actual cases where Ruby really did something in a cleaner way than Python thanks to blocks. Well, it turns out that Python also has blocks. But they are called &#8220;functions&#8221;. What&#8217;s the difference? Functions need a name, while blocks don&#8217;t. At this point a Python programmer says &#8220;Aha, so blocks are lambdas!&#8221; Yes, except that blocks can be multiline code and do anything, while Pythons lambdas are restricted to being expressions.</p>
<p>OK, so plus one to Ruby then? Well, no. Because what use is a block if you don&#8217;t attach it to a variable name so you can call it? In Ruby you create blocks and use them directly like this:</p>
<pre>amethod do |variable|
    print variable
end</pre>
<p>This is principally equivalent to Pythons</p>
<pre>def theblock(variable)
    print variable
amethod(theblock)</pre>
<p>Which of course is doable in Ruby as well. Which way is neater? Matter of taste again. And it becomes even harder to decide when considering that Ruby has a special statement to call the block with parameters. It&#8217;s called yield. Yield exists in Python as well, but there it&#8217;s used for generators. But the we get this code examples:</p>
<pre>def themethod
    for a in [1,2,3,4,5]
        yield a
    end
end

themethod do |b|
   puts b
end</pre>
<p>Which is almost suspisciously similar to</p>
<pre>def themethod():
    for a in [1,2,3,4,5]:
        yield a

for b in themethod():
    print b</pre>
<p>So in the end, this much touted principle of block seem to very rarely actually lead to any significantly different code than in Python. So here are widely discussed differences in principals that in the end&#8230;end up as the same thing (almost)!</p>
<h2>4. Python has list comprehensions</h2>
<p>It&#8217;s worth mentioning here that Python has some big features that Ruby doesn&#8217;t, like for example list comprehensions.</p>
<pre>[foo(x) for x in alist if bar(x) != 'frotz']</pre>
<p>But although I use them all the time because they are practical I don&#8217;t know what I think about them. Well, it&#8217;s shorter than:</p>
<pre>foo = []
for x in alist:
   if bar(x) != 'frotz':
      foo.append(x)</pre>
<p>But is it really neater and more readable? I&#8217;m not sure. It becomes a matter of taste again. I did not like list comprehensions when they first arrived in Python, but of course now I&#8217;ve gotten used to them. So that is not a good argument for Python. It&#8217;s subjective again.</p>
<h2>5. Python has decorators</h2>
<p>Decorators are prettier than the other ways of doing the same in Python, for example the above initialize_magick(class). But again it can be argued that the @decorator syntax just makes Python ugly, and that you don&#8217;t need them as much in Ruby. Again, matters of taste.</p>
<h1>So why Python?</h1>
<p>So, in the end, why do I, subjectively prefer Python over Ruby in almost everything? Because of Pythons clarity and simplicity, and it&#8217;s attitudes and principles. In Ruby, you have open classes, so you can extend any class. In Python, you can monkey patch in extensions into any class. The difference? That in Python it&#8217;s an ugly attitude that is frowned upon. In Ruby, many people tutorials and examples of blocks extend the Array class, like brutally monkey patching the standard types is a normal thing to do. (A hint guys: That does NOT help in explaining blocks, it&#8217;s just confusing).</p>
<p>In Ruby, there are no functions, but there are methods, blocks and lambdas. All of them seem to have subtle differences, and sometimes you need to not just call them, but use .call(). In Python, there are only functions. Lambdas are functions whose __name__ is &lt;lambda&gt;. Methods are functions that are wrapped to you don&#8217;t have to pass self. Simple and clear.</p>
<p>Python is more explicit. In Ruby you can skip the () when calling a method. Rubyists like that because it makes calls look like statements they say. Pythonists like me think it&#8217;s a bad idea to make a call look like a statement. If it&#8217;s a call it should bloody well look like one.</p>
<p>And Pythons packages and modules are just so much better for namespaces than Rubys modules. Again, subjectively. And you can choose if you want to import * in Python or not. In Ruby that&#8217;s all you can do</p>
<p><strong>And all of these things, the things that makes me go &#8220;Eww&#8230;&#8221; about Ruby and &#8220;Yeah!&#8221; about Python turns out not to be features, but just subjective options of the different languages semantics and attitudes. It is truly so that none of the Languages are better than the other. </strong></p>
<p>Except, of course, that Ruby sucks. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
Posted in python Tagged: ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/440/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/440/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/440/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/440/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/440/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/440/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=440&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/07/12/python-vs-ruby/feed/</wfw:commentRss>
		<slash:comments>83</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Looking to share an office in Paris</title>
		<link>http://regebro.wordpress.com/2009/07/08/looking-to-share-an-office-in-paris/</link>
		<comments>http://regebro.wordpress.com/2009/07/08/looking-to-share-an-office-in-paris/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 10:41:31 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=437</guid>
		<description><![CDATA[Update: Emencia has graciously offered to lend me desk space at their office. Thanks!
Working from home is losing it&#8217;s attractiveness, so therefore I&#8217;m starting to look for a place to rent here in Paris. And of course, I&#8217;d like to share it with people who also work with Python or Plone. So if you have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=437&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Update:</strong> <a href="http://www.emencia.fr/" target="_blank">Emencia</a> has graciously offered to lend me desk space at their office. Thanks!</p>
<p>Working from home is losing it&#8217;s attractiveness, so therefore I&#8217;m starting to look for a place to rent here in Paris. And of course, I&#8217;d like to share it with people who also work with Python or Plone. So if you have a desk over and like to rent it out to me, contact me. Or, if you are a Python programmer or Plone person, and you also are looking to share an office, contact me. If we get some people together, we can maybe share a small office.</p>
<p>Requirements:</p>
<ul>
<li>A desk</li>
<li>Internet connection</li>
<li>A coffee machine, or a place to put one</li>
<li>Nice easy going people that doesn&#8217;t mind my crappy French.</li>
</ul>
<p>Bonuses:</p>
<ul>
<li>Good espresso</li>
<li>Biking distance from my place (11e)</li>
<li>Access to a meeting room</li>
<li>A view</li>
</ul>
<p>Well, that&#8217;s it, really. Send me a mail at <a href="mailto:regebro@gmail.com">regebro@gmail.com</a>!</p>
Posted in python  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/437/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/437/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/437/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=437&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/07/08/looking-to-share-an-office-in-paris/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Lets build Bittorent support for Cheese Shop</title>
		<link>http://regebro.wordpress.com/2009/06/10/lets-build-bittorent-support-for-cheese-shop/</link>
		<comments>http://regebro.wordpress.com/2009/06/10/lets-build-bittorent-support-for-cheese-shop/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 12:35:38 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[zope]]></category>
		<category><![CDATA[bittorrent]]></category>
		<category><![CDATA[cheese shop]]></category>
		<category><![CDATA[pypi]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=432</guid>
		<description><![CDATA[Edit: The reception was less than overwhelmingly enthusiastic, and for me to push a community project that is not absolutely necessary for me, I need overwhelmingly enthusiastic. So I&#8217;m not going to push this. I still think i could be a good solution, though.
There are two problems that can be killed with one piece of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=432&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em><strong>Edit:</strong> The reception was less than overwhelmingly enthusiastic, and for me to push a community project that is not absolutely necessary for me, I need overwhelmingly enthusiastic. So I&#8217;m not going to push this. I still think i could be a good solution, though.</em></p>
<p>There are two problems that can be killed with one piece of software in the world.</p>
<p>One of the problems is that the Python Package Index (aka the Cheese Shop) is a single point of failure when distributing python software. Well, in fact, because some packages doesn&#8217;t reside there, but are only indexed there, it&#8217;s multipole single points of failure. There is a whole bunch of servers that currently needs tobe running for you to install Plone from a buildout, for example.</p>
<p>A second problem is that bittorent, although being a great idea and useful for all sorts of distribution of data, is currently used pretty much only for file sharing of copyrighted materials. This means that this great protocol often gets filtered by ISPs and similar. We need a legitimate use for bittorrent.</p>
<p>And as you of course quickly realize, bittorent is in fact a solution to the first problem! And not only that, it also provides an answer to some other problems. Like setting up a local egg cache for a company.</p>
<p>So, I will start a project to do this. But before I start, I want to check if more people have had this idea. Good ideas are typically somebody elses ideas, and in this case I know that Matthew Wilkes already started on this earlier. So if you already have some half-finished code for this, or know somebody that has, give us a shout, and lets merge the projects! Also, if you want to help, give us a shout too.</p>
Posted in plone, python, zope Tagged: bittorrent, cheese shop, pypi <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/432/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/432/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/432/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/432/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/432/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/432/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/432/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/432/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/432/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/432/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=432&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/06/10/lets-build-bittorent-support-for-cheese-shop/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>Plone4ArtistsCalendar 2.0a3 released</title>
		<link>http://regebro.wordpress.com/2009/05/17/plone4artistscalendar-2-0a3-released/</link>
		<comments>http://regebro.wordpress.com/2009/05/17/plone4artistscalendar-2-0a3-released/#comments</comments>
		<pubDate>Sun, 17 May 2009 11:07:37 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[calendaring]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[zope]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=427</guid>
		<description><![CDATA[Plone4ArtistsCalendar 2.0a3 has just been released on the Cheese Shop.
New in this version is various bugfixes, and support for uninstall.
Thanks to all that helped with bugfixes for the various parts of Plone4ArtistsCalendar! It&#8217;s been a real community effort with loads of people contributing! Thanks, thanks thanks to all of you!!
So, if this is so bugfree [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=427&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Plone4ArtistsCalendar 2.0a3 has just been released on the Cheese Shop.<br />
New in this version is various bugfixes, and support for uninstall.</p>
<p>Thanks to all that helped with bugfixes for the various parts of Plone4ArtistsCalendar! It&#8217;s been a real community effort with loads of people contributing! Thanks, thanks thanks to all of you!!</p>
<p>So, if this is so bugfree and stable, why is it still an alpha? Well, because we still need migration from Version 1.1, a new iCal implementation that supports recurring events,  and a better UI for recurring events.</p>
Posted in calendaring, plone, zope  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/427/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/427/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/427/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/427/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/427/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/427/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/427/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/427/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/427/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/427/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=427&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/05/17/plone4artistscalendar-2-0a3-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
		<item>
		<title>What video editing software do you use?</title>
		<link>http://regebro.wordpress.com/2009/05/14/what-video-editing-software-do-you-use/</link>
		<comments>http://regebro.wordpress.com/2009/05/14/what-video-editing-software-do-you-use/#comments</comments>
		<pubDate>Thu, 14 May 2009 08:32:28 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=423</guid>
		<description><![CDATA[I&#8217;m looking for a Windows (or Linux) video editing software or combination of grabbing and editing softwares that

doesn&#8217;t cost hundreds of dollars/euros and
can grab video from a web cam,
audio from any audio input,
keeps the synchronization well and
has at leat two sound tracks (so I can have background musc) and
has good frame-by-frame editing and
doesn&#8217;t require the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=423&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m looking for a Windows (or Linux) video editing software or combination of grabbing and editing softwares that</p>
<ul>
<li>doesn&#8217;t cost hundreds of dollars/euros and</li>
<li>can grab video from a web cam,</li>
<li>audio from any audio input,</li>
<li>keeps the synchronization well and</li>
<li>has at leat two sound tracks (so I can have background musc) and</li>
<li>has good frame-by-frame editing and</li>
<li>doesn&#8217;t require the use of abscure file formats</li>
</ul>
<p><span style="text-align:center; display: block;"><a href="http://regebro.wordpress.com/2009/05/14/what-video-editing-software-do-you-use/"><img src="http://img.youtube.com/vi/gTU7e8tzNLU/2.jpg" alt="" /></a></span></p>
Posted in python  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/423/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/423/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/423/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/423/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/423/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=423&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/05/14/what-video-editing-software-do-you-use/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/gTU7e8tzNLU/2.jpg" medium="image" />
	</item>
		<item>
		<title>My PyCon talk now as podcast</title>
		<link>http://regebro.wordpress.com/2009/05/07/my-pycon-talk-now-as-podcast/</link>
		<comments>http://regebro.wordpress.com/2009/05/07/my-pycon-talk-now-as-podcast/#comments</comments>
		<pubDate>Thu, 07 May 2009 15:47:48 +0000</pubDate>
		<dc:creator>Lennart Regebro</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[python 3000]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[pycon2009]]></category>

		<guid isPermaLink="false">http://regebro.wordpress.com/?p=421</guid>
		<description><![CDATA[Python 2.6 and 3.0 compatibility
I think it doens&#8217;t work very well without the slides though.
Posted in python, python 3000, python3 Tagged: pycon, pycon2009      <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=421&subd=regebro&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://a7.video.blip.tv/1120007952345/Pycon-Python26And30Compatibility433.mp3">Python 2.6 and 3.0 compatibility</a></p>
<p>I think it doens&#8217;t work very well without the slides though.</p>
Posted in python, python 3000, python3 Tagged: pycon, pycon2009 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/regebro.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/regebro.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/regebro.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/regebro.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/regebro.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/regebro.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/regebro.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/regebro.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/regebro.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/regebro.wordpress.com/421/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=regebro.wordpress.com&blog=1158551&post=421&subd=regebro&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://regebro.wordpress.com/2009/05/07/my-pycon-talk-now-as-podcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://a7.video.blip.tv/1120007952345/Pycon-Python26And30Compatibility433.mp3" length="32490858" type="audio/mpeg" />
	
		<media:content url="" medium="image">
			<media:title type="html">regebro</media:title>
		</media:content>
	</item>
	</channel>
</rss>