<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"><channel><title>damonsnyder.com RSS Feed</title><link>http://damonsnyder.com/</link><description>Beta</description><lastBuildDate>Wed, 17 Jun 2009 16:16:51 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Learn one new language a year</title><link>http://damonsnyder.com/archives/2009/06/07/learn-one-new-language-a-year.html</link><description>&lt;p class="postmeta"&gt;June 7 2009 - East Oakland, Ca&lt;/p&gt;

&lt;p&gt;Taking the advice from the &lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/"&gt;Pragmatic
Programmer&lt;/a&gt;
I set out to learn Haskell this year. My plan didn't turn out like I expected. I
started learning Haskell by working through &lt;a href="http://book.realworldhaskell.org/"&gt;Real World
Haskell&lt;/a&gt;. It was tough going, so I decided I
wanted to start blogging about it. It was than that I remembered that my blog has
been neglegled for a long time (more than a year and maybe 2) and that I had been on the
lookout for a different blogging platform for some time. &lt;/p&gt;
&lt;p&gt;I had recently found &lt;a href="http://github.com/mojombo/jekyll/tree/master"&gt;jekyll&lt;/a&gt;
(a static site generator written in Ruby) from a reference on
&lt;a href="http://news.ycombinator.com"&gt;HN&lt;/a&gt; and thought it was a great idea.
This is exactly the kind of thing I was looking for. But using
jekyll didn't feel quite (well, sortof-- the layout and some of the styling
does come from jekyll) right since I had often told myself that I
wanted to write my own blogging tool. So I dropped learning Haskell
(for the moment) and set out to write my own blogging tool.&lt;/p&gt;
&lt;p&gt;My background is mostly in Perl, PHP, and little bit of Ruby. But over the last 
year I've been creating a few tools in Python for automating some day-to-day
operations at &lt;a href="http://www.carsala.com"&gt;work&lt;/a&gt;. I chose Python at work after
reading &lt;a href="http://www.linuxjournal.com/article/3882"&gt;Why Python?&lt;/a&gt; and having
similar experiences. The small scripts I would write often worked right out of
the editor. I also appreciated how readable the code was. So I started hacking
away at a blogging tool using Python. &lt;/p&gt;
&lt;p&gt;I'm calling the tool
&lt;a href="http://github.com/drsnyder/furthermore/tree/master"&gt;furthermore&lt;/a&gt;. You can
download or take a look at
&lt;a href="http://github.com/drsnyder/furthermore/tree/master"&gt;github&lt;/a&gt;. Furthermore is
pretty simple. It is a bare bones static site generator. Here is a brief
summary of the features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mako templates for python-based template generation&lt;/li&gt;
&lt;li&gt;pygments syntax highlighting (via markdown)&lt;/li&gt;
&lt;li&gt;markdown for text-to-html generation&lt;/li&gt;
&lt;li&gt;a local http server for site previewing &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, you will need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pygments.org/download/"&gt;Pygments&lt;/a&gt; for syntax highlighting. 
  Also see the &lt;a href="http://www.freewisdom.org/projects/python-markdown/CodeHilite"&gt;codehighlight&lt;/a&gt; 
  markdown plugin.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dalkescientific.com/Python/PyRSS2Gen.html"&gt;PyRSS2Gen&lt;/a&gt; for RSS feed generation&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pyyaml.org/wiki/PyYAML"&gt;PyYAML&lt;/a&gt; for documents&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Posts are contained in the "posts" directory. Each post consists
of a YAML preamble that includes the template type and the post
title. Post files themselves follow the format
YYYYMMDD-post-slug-goes-here.markdown. The year, month, day, and
slug will be parsed out of the file name to produce a url of the
form /archives/YYYY/MM/DD/slug.html. The preamble looks something
like this.&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;title&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;Learn one new language a year&lt;/span&gt;
&lt;span class="l-Scalar-Plain"&gt;layout&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l-Scalar-Plain"&gt;post&lt;/span&gt;
&lt;span class="nn"&gt;...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Everything after the close of the YAML preamble (...) is treated as the
document contents in &lt;a href="http://daringfireball.net/projects/markdown/"&gt;markdown&lt;/a&gt;. 
The layout value will be used to lookup the proper template in the
"templates" directory and the title value will be plugged into the
template to generate the title of the page. At the top level you
will also find a "images" and "css" directories containing the
expected collateral.&lt;/p&gt;
&lt;p&gt;And finally, to render your posts and any other files, run furthermore:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;./bin/furthermore -P -b . -o www -f index.html -S
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;This will process all of your posts using the current directory as
the base (where to find css, images, posts, and templates directories),
while outputting the rendered content to www. It will also run index.html
through mako and startup a local webserver so you can preview the site. 
To see all of the options provided, run furthermore with -h.&lt;/p&gt;
&lt;p&gt;If you get stuck take a look at the
&lt;a href="http://github.com/drsnyder/furthermore/wikis/usage/"&gt;usage&lt;/a&gt; document I'm
putting together. I'm still updating, but it should have enough to get the
idea and get started if you want to use it. &lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description><guid isPermaLink="true">http://damonsnyder.com/archives/2009/06/07/learn-one-new-language-a-year.html</guid><pubDate>Sun, 07 Jun 2009 00:00:00 GMT</pubDate></item><item><title>Exploring the relative performance of different list operations in Python</title><link>http://damonsnyder.com/archives/2009/06/17/relative-performance-of-python-list-operations.html</link><description>&lt;p class="postmeta"&gt;June 17 2009 - East Oakland, Ca&lt;/p&gt;

&lt;p&gt;This past weekend, I attended the Python training session at
&lt;a href="http://www.usenix.org/event/usenix09/"&gt;USENIX09&lt;/a&gt; in San Diego taught by &lt;a href="http://www.dabeaz.com/"&gt;David
Beazley&lt;/a&gt;. He posted his &lt;a href="http://www.dabeaz.com/usenix2009/pythonprog/"&gt;slides and
examples&lt;/a&gt; on his web site.&lt;/p&gt;
&lt;p&gt;One question that came to mind during the session was which form of list
processing is faster: a for loop or a list comprehension. The general consensus
in the class (and from David) was that list comprehensions should be faster.
The normal caveats of context apply.&lt;/p&gt;
&lt;p&gt;If you aren't familiar with list comprehensions, they take the following form
in python:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;xrange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;David mentioned that list comprehensions in Python were inspired
by Haskell. The Haskell form of the above looks like this:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kt"&gt;Prelude&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;To explore this further, I came up with a simple scenario that you
might encounter in working with lists. I pulled down part (about
10M) of an apache access log and came up with some small segment
of each log that I wanted to pull out. For this experiment, I just
pull out the first four elements of each log entry. A sample might
look like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
     192.168.0.9 - - [04/Sep/2008:00:21:18 +0000] "GET / HTTP/1.1" 200 2029 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1"
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And the parsed out pieces look like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
    ['192.168.0.9', '-', '-', '[04/Sep/2008:00:21:18 +0000]']
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I pull out these elements by first slicing the first 45 characters from the
line and them splitting by the first 3 spaces (note that this might truncate
part of the timestamp field). Here is the snippit:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mf"&gt;45&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Before I moved ahead, I googled a little about the relative performance of list
comprehensions and for loops in Python. I found an article by Guido called
&lt;a href="http://www.python.org/doc/essays/list2str/"&gt;Python Patterns - An Optimization
Anecdote&lt;/a&gt; where he discusses some
of the challenges in trying to optimize converting a list of integers into a
string. Although I'm not trying to optimize anything in my experiment, his
essay provided some insights into how one might approach optimizing python
code. He also provides the code he used for his different iterations and the
function he used to do the timing of each version. I used his timing function
in running my tests. &lt;/p&gt;
&lt;p&gt;I started by creating a function to loop through the lines in the file using a
for loop. Here is the function:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;forloop_listnf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;records&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mf"&gt;45&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;records&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;It just loops through each line, pulls out the first three elements and
appends it to a list. The next function uses a list comprehension to do the
same thing:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lc_listnf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mf"&gt;45&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;And finally, another approach to processing lists is using the map() function.
Since this is also a common approach (and should be done in C per Guido's
article) I included a function to do the same using map(). One difference with
the map() implementation is that a separate function was need to do the splice and split
operation on each element in the array provided to map(). &lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;pre&gt;1
2
3
4
5&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;do_split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mf"&gt;45&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;map_list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;do_split&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;The result surprised me a little. The map() implementation was the slowest. The
for loop was about 5% faster and the list comprehension was about 10% faster
than map().&lt;/p&gt;
&lt;p&gt;I went through a couple of iterations before I settled on the
functions above.  I first used the do_split for all three but I
later decided that this unnecessarily slows down (with an extra
lookup and function call) the for loop and the list comprehension
because they can do the splice and split in-line. I tried to see if a lambda
would improve the map() performance, but it performed about the same. For this
simple test map() may have a handicap due to the function call on each element. &lt;/p&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;As a noob to python I'm not in a position to say conclusively that
list comprehensions are faster than for loops or the map() function.
This experiment seems to suggest that for simple cases such as this,
the list comprehension is faster.  It also looks cleaner (IMO). Building
the list can be done clearly and concisely on one line. Note also
that list comprehensions can be nested. An initial path that I
started on with this experiment was adding one more pass of processing
over the split out fields. A nested list comprehension worked, but
I backed off of that path to keep it simple.&lt;/p&gt;
&lt;p&gt;Why are they faster? My initial thought is that there is less interpreter
overhead with the list comprehension. In the for loop, you need one other
variable (the result array) and you need to lookup this variable during each
iteration of the loop. You may not have that overhead with the list comprehension
(or perhaps it is reduced).  You can find the code to these samples
&lt;a href="http://damonsnyder.com/code/looptests.txt"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;David's training classes are good. You can find out more
&lt;a href="http://www.dabeaz.com/training.html"&gt;here&lt;/a&gt;. &lt;/p&gt;</description><guid isPermaLink="true">http://damonsnyder.com/archives/2009/06/17/relative-performance-of-python-list-operations.html</guid><pubDate>Wed, 17 Jun 2009 00:00:00 GMT</pubDate></item></channel></rss>