<?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/"
	>

<channel>
	<title>Dereferenced.com &#187; Perl</title>
	<atom:link href="http://www.dereferenced.com/topics/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dereferenced.com</link>
	<description>A preponderance of Perl, an excess of XML, and additional alliterations.</description>
	<lastBuildDate>Tue, 17 Jan 2012 17:18:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Perl Module Release: Test-AgainstSchema 0.100</title>
		<link>http://www.dereferenced.com/2012/01/17/perl-module-release-test-againstschema-0-100/</link>
		<comments>http://www.dereferenced.com/2012/01/17/perl-module-release-test-againstschema-0-100/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:18:51 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Test-AgainstSchema]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=227</guid>
		<description><![CDATA[MetaCPAN.org: https://metacpan.org/release/RJRAY/Test-AgainstSchema-0.100 Version: 0.100 Released: Monday January 16, 2012, 02:00:00 PM -0800 Changes: lib/Test/AgainstSchema.pm (added) lib/Test/AgainstSchema/XML.pm (added) t/10_xml/05_xml_parsing.t (added) t/10_xml/10_sgmldtd.t (added) t/10_xml/20_xmlschema.t (added) t/10_xml/30_relaxng.t (added) t/10_xml/basic_tests.pl (added) t/10_xml/simple-bad.dtd (added) t/10_xml/simple-bad.rng (added) t/10_xml/simple-bad.xsd (added) t/10_xml/simple.dtd (added) t/10_xml/simple.rng (added) t/10_xml/simple.xsd (added) t/10_xml/xml-simple-bad.xml (added) t/10_xml/xml-simple.xml (added) t/90_integration/10_with_xml.t (added) t/90_integration/90_empty_subclass.t (added) t/90_integration/MyTestAgainstSchema.pm (added) t/util.pl (added) xt/00_load.t (added) xt/01_pod.t (added) [...]]]></description>
			<content:encoded><![CDATA[<div>MetaCPAN.org: <a href="https://metacpan.org/release/RJRAY/Test-AgainstSchema-0.100">https://metacpan.org/release/RJRAY/Test-AgainstSchema-0.100</a></div>
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:cl="http://www.blackperl.com/2009/01/ChangeLogML" xmlns:xhtml="http://www.w3.org/1999/xhtml" id="changelog-container" class="changelog-container-div">
<div class="changelog-release-div" name="release_0_100" id="release_0_100_div">
<span class="changelog-release-heading">Version: 0.100</span><br/><br />
<span class="changelog-release-date">Released: <span class="changelog-date">Monday January 16, 2012, 02:00:00 PM -0800</span></span></p>
<p class="changelog-release-para">Changes:</p>
<div class="changelog-release-changes-container">
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/Test/AgainstSchema.pm</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/Test/AgainstSchema/XML.pm</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/05_xml_parsing.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/10_sgmldtd.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/20_xmlschema.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/30_relaxng.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/basic_tests.pl</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple-bad.dtd</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple-bad.rng</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple-bad.xsd</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple.dtd</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple.rng</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/simple.xsd</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/xml-simple-bad.xml</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_xml/xml-simple.xml</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/90_integration/10_with_xml.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/90_integration/90_empty_subclass.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/90_integration/MyTestAgainstSchema.pm</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/util.pl</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/00_load.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/01_pod.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/02_pod_coverage.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/03_meta.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/04_minimumversion.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">xt/05_critic.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
</ul>
<p class="changelog-release-change-para">Initial commit of code, tests and test files.</p>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2012/01/17/perl-module-release-test-againstschema-0-100/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Looking Back, Looking Forward: 2011 &amp; 2012</title>
		<link>http://www.dereferenced.com/2012/01/01/looking-back-looking-forward-2011-2012/</link>
		<comments>http://www.dereferenced.com/2012/01/01/looking-back-looking-forward-2011-2012/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 06:27:59 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[Meta-Posts]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[meta]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=223</guid>
		<description><![CDATA[So here we are, starting yet another new year. Seems like I was just here, but when I look back at my archives I see that my only post in January of 2011 was for the 0.74 release of RPC-XML. So I wasn&#8217;t even as on-the-ball a year ago as I thought I was. And [...]]]></description>
			<content:encoded><![CDATA[<p>So here we are, starting yet another new year. Seems like I was just here, but when I look back at my archives I see that my only post in January of 2011 was for the 0.74 release of RPC-XML. So I wasn&#8217;t even as on-the-ball a year ago as I thought I was. And over the years I&#8217;ve gotten out of the habit of making elaborate resolutions for each new year. So this time around, I&#8217;m going to reflect a bit on high points of 2011, and ponder a bit about what I hope to do in 2012&#8230;</p>
<p>2011 was overall a pretty good year. It was my first full year at <a href="http://www.netapp.com">NetApp</a>, after having done more job-hopping than I particularly liked to do in the years from 2006 to 2010. NetApp has been a really good place to be, both stable and challenging. I have good co-workers, and good management. Some high points of 2011 included:</p>
<ul>
<li>I snagged some kudos in the form of winning an internal friendly competition at NetApp for my work with <a title="Perl::Critic at MetaCPAN.org" href="https://metacpan.org/release/Perl-Critic">Perl::Critic</a> (a web interface similar to the one at <a href="http://perlcritic.com">perlcritic.com</a>, but with some additional features, bells and whistles specific to NetApp&#8217;s needs).</li>
<li>I was once again supported by my management to attend OSCON this past summer, which not only meant learning many new bits of tech but also meant seeing many friends I only see at the con.</li>
<li>I made the leap from being a strictly Linux guy, to obtaining my first Apple Macbook (Pro). It has been (and continues to be) a quirky learning curve, but I&#8217;m happy with it. I don&#8217;t know if I&#8217;m <em>more</em> productive with it than I was with my Linux laptop, but I&#8217;m at least <em>as</em> productive, so (in theory) it can only get better as I get more accustomed to it.</li>
<li>After being familiar with the module for some time, I finally made the leap of starting to use <a title="Devel::Cover on MetaCPAN.org" href="https://metacpan.org/release/Devel-Cover">Devel::Cover</a> on <a href="/2011/07/03/i-apparently-suck-at-writing-tests/">some of my code</a>, which lead to some vast improvements in my testing suites (as well as flushing out numerous bugs along the way).</li>
<li>I completed the online <a href="https://www.ai-class.com/">Introduction to Artificial Intelligence</a> class that Stanford offered this fall. It was an experiment in online learning that the Stanford engineering school was conducting, one of three courses offered during that time. As an experiment, it must have gone well as they are offering <em>ten</em> courses this coming term: <a href="http://www.cs101-class.org/">CS 101</a>, <a href="http://jan2012.ml-class.org/">Machine Learning</a>, <a href="http://www.saas-class.org/">Software as a Service</a>, <a href="http://www.hci-class.org/">Human-Computer Interaction</a>, <a href="http://www.nlp-class.org/">Natural Language Processing</a>, <a href="http://www.game-theory-class.org/">Game Theory</a>, <a href="http://www.pgm-class.org/">Probabilistic Graphical Models</a>, <a href="http://www.crypto-class.org/">Cryptography</a>, <a href="http://www.algo-class.org/">Design and Analysis of Algorithms I</a>, and <a href="http://www.security-class.org/">Computer Security</a>. I plan on following up the AI class with the ML class. I&#8217;d love to take about half of them, but I have to be realistic about the free time I have.</li>
</ul>
<p>So that was 2011. What do I plan for 2012?</p>
<ul>
<li>Release my CPAN modules more frequently, which means working on them more than I currently do. Over on his blog, <a href="http://blog.twoshortplanks.com/">Mark Fowler</a> has resolved to release a distribution to CPAN <a href="http://blog.twoshortplanks.com/2011/12/31/once-a-week-every-week/">once a week, every week</a>, throughout 2012. I <em>won&#8217;t</em> be doing that. But I can take from his thoughts on the matter some good direction and ideas, and I can apply those to how (and when) I choose to release.</li>
<li>Do OSCON again. This may be tricky, as there has been a managements change in my organization. I don&#8217;t know yet if the new director of my org will feel the same way about education and training as the previous person did.</li>
<li>Related (slightly) to the first point: Release at least two new CPAN distributions. I have the specific ones in mind; one is a complete re-write/re-organization of an existing distro of mine, the other is completely new.</li>
<li>Finally get around to learning <a href="http://clojure.org/">Clojure</a>. I&#8217;ve been toying with it and tinkering with it to a very light degree, but this year I will buckle down and actually work my way through the entirety of one or more books on the language. Most likely starting with <a href="http://manning.com/fogus/">The Joy of Clojure</a>.</li>
<li>Oh, and of course write more often here. The AI class effectively killed my blogging for the last part of 2011, but judging from people&#8217;s reviews and feedback on the ML class I don&#8217;t expect it to so thoroughly take over my life as the AI class did. So even if some weeks I only manage to eke out a &#8220;module Monday&#8221; post, I hope to at least accomplish that much.</li>
</ul>
<p>Not necessarily lofty goals there, I will admit. But I have also resolved to spend more time on my <a href="http://www.svsm.org">non-computing hobby</a>, so I am not going to set myself up with resolution expectations that require me to practically sleep with the laptop to accomplish them. I&#8217;d rather set my expectations at a challenging-yet-reasonable level, and actually achieve them.</p>
<p>Here&#8217;s to the new year&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2012/01/01/looking-back-looking-forward-2011-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: HTTP::Tiny</title>
		<link>http://www.dereferenced.com/2011/10/17/perl-module-monday-httptiny/</link>
		<comments>http://www.dereferenced.com/2011/10/17/perl-module-monday-httptiny/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 05:58:57 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=219</guid>
		<description><![CDATA[I&#8217;m still deep in the Stanford AI class, so this will be a light-weight posting. And since it&#8217;s going to be light-weight anyway, I&#8217;ll cover a module in the *::Tiny namespace: HTTP::Tiny. HTTP::Tiny is a simple HTTP/1.1 client library with plenty of options. It handles HTTPS (if you have IO::Socket::SSL available) as well as HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m still deep in the Stanford AI class, so this will be a light-weight posting. And since it&#8217;s going to be light-weight anyway, I&#8217;ll cover a module in the *::Tiny namespace: <a title="HTTP::Tiny at MetaCPAN.org" href="https://metacpan.org/release/HTTP-Tiny">HTTP::Tiny</a>.</p>
<p>HTTP::Tiny is a simple HTTP/1.1 client library with plenty of options. It handles HTTPS (if you have <a title="IO::Socket::SSL at MetaCPAN.org" href="https://metacpan.org/release/IO-Socket-SSL">IO::Socket::SSL</a> available) as well as HTTP requests, and does all the basic HTTP verbs. As is the case with most *::Tiny modules, the goal is to do as much as one can, without the overhead or dependency chain of a larger module. In this case HTTP::Tiny stands as a replacement for <a title="LWP::UserAgent documentation at MetaCPAN.org" href="https://metacpan.org/module/LWP::UserAgent">LWP::UserAgent</a>, for those cases when you don&#8217;t need the full functionality that <a title="libwww-perl at MetaCPAN.org" href="https://metacpan.org/release/libwww-perl">LWP</a> provides.</p>
<p>The main methods of HTTP::Tiny that you&#8217;re likely to utilize (besides the constructor) are <span style="font-family: andale mono,times;">request()</span> and <span style="font-family: andale mono,times;">get()</span> (which is just a front-end to request(), with the &#8216;method&#8217; argument set to GET). There is also a method called <span style="font-family: andale mono,times;">mirror()</span>, which is handy for making a local copy of a web resource on your filesystem. <span style="font-family: andale mono,times;">mirror()</span> even sets an &#8220;If-Modified-Since&#8221; header on the request, if the file already exists. A nice touch to have added! The <span style="font-family: andale mono,times;">request()</span> method allows for a very useful range of options, that make it easy to pass specific headers, use call-back subroutines for either (or both) of the request body or the processing of the response, and provide trailer headers for chunked transfer-encoding. One thing I find curious, though, is why the author provides a short-hand method for the GET request, but not for the other verbs. Since all are called using the same semantics, it seems to me like it would have made as much sense to provide <span style="font-family: andale mono,times;">head()</span>, <span style="font-family: andale mono,times;">put()</span>, etc.</p>
<p>Still, it&#8217;s a nice little approach to HTTP communication, that doesn&#8217;t require as much setting-up of resources as LWP generally does. It doesn&#8217;t have the flexibility that LWP does, either, but sometimes you just don&#8217;t need that. You just need to get going in a few lines:</p>
<pre>use HTTP::Tiny;

my $http = HTTP::Tiny-&gt;new();

for my $url (@ARGV)
{
    (my $file = $url) =~ s{^.*/}{};
    if (! $file)
    {
        warn "Skipping $url (no file component)\n";
        next;
    }
    $http-&gt;mirror($url, $file);
}</pre>
<p>The above just mirrors all the URLs passed in via <span style="font-family: andale mono,times;">@ARGV</span>, using the last file element of the URL as the file name to save to. It doesn&#8217;t have the progress-bar and summary that LWP&#8217;s &#8220;<span style="font-family: andale mono,times;">lwp-download</span>&#8221; has, but it gets the job done.</p>
<p>So have a look, this could be a useful addition to your toolkit, sitting beside LWP and handling some of the simpler tasks for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/10/17/perl-module-monday-httptiny/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>No PMM This Week</title>
		<link>http://www.dereferenced.com/2011/10/10/no-pmm-this-week/</link>
		<comments>http://www.dereferenced.com/2011/10/10/no-pmm-this-week/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 05:58:55 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=217</guid>
		<description><![CDATA[Alas, I didn&#8217;t get this done earlier in the day, and now I need to spend the remainder of my evening working on the first units in the Stanford on-line AI class. These materials were only just posted, but I&#8217;m already behind the curve because I&#8217;ve not reviewed all the pre-class material. Hopefully I&#8217;ll be [...]]]></description>
			<content:encoded><![CDATA[<p>Alas, I didn&#8217;t get this done earlier in the day, and now I need to spend the remainder of my evening working on the first units in the <a href="http://www.ai-class.com/">Stanford on-line AI class</a>. These materials were only just posted, but I&#8217;m already behind the curve because I&#8217;ve not reviewed all the pre-class material. Hopefully I&#8217;ll be able to get a PMM candidate picked out for next week and get the post written before it gets this late in the day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/10/10/no-pmm-this-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: IMDB::Film</title>
		<link>http://www.dereferenced.com/2011/10/03/perl-module-monday-imdbfilm/</link>
		<comments>http://www.dereferenced.com/2011/10/03/perl-module-monday-imdbfilm/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 06:58:51 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=210</guid>
		<description><![CDATA[For this week&#8217;s PMM, I&#8217;m going to go with something a little more fun: the IMDB::Film module. Though, to be fair, I&#8217;ll be offering it up with some caveats and reservations. Still, I&#8217;m a huge fan of movies; I try to see a new film every week or two, and my DVD collection has out-grown [...]]]></description>
			<content:encoded><![CDATA[<p>For this week&#8217;s PMM, I&#8217;m going to go with something a little more fun: the <a title="IMDB::File at MetaCPAN.org" href="https://metacpan.org/release/IMDB-Film">IMDB::Film</a> module. Though, to be fair, I&#8217;ll be offering it up with some caveats and reservations.</p>
<p>Still, I&#8217;m a <em>huge</em> fan of movies; I try to see a new film every week or two, and my DVD collection has out-grown two different shelves. I&#8217;ve even gone so far as to get an Android app on my phone (<a href="https://market.android.com/details?id=de.unwesen.packrat.app&amp;feature=also_installed">Packrat</a>) for the sole purpose of keeping track of my collection so that I don&#8217;t impulse-buy something I already have (usually because I&#8217;ve found it on sale). And don&#8217;t get me started on slowly replacing my most-favorite films with Blu-Ray copies! Anyway, I&#8217;ve also been a huge fan of the <a href="http://www.imdb.com">IMDb</a> web site since it first got its start. But they don&#8217;t offer an API to their data (which I find strange, given their <strong>huge</strong> reliance on open-source software and user-generated content). Until and unless they see the error of their ways, we&#8217;ll have to get by with modules like IMDB::Film, which does a lot of the heavy-lifting when it comes to screen-scraping IMDb.</p>
<p>The IMDB::Film class (and the companion IMDB::Persons class) handles all the page-fetching and parsing that you would otherwise have to do, and presents you with a reasonably-encapsulated object representing an IMDb film (or person). Based on the criteria you give it, it either goes directly to the necessary page, or it does a search and returns you the first matching record (along with enough additional information to get the remaining matched records). For example, the snippet here:</p>
<pre>use IMDB::Film;

my $film = IMDB::Film-&gt;new(crit =&gt; 'Harry Potter');</pre>
<p>This returns as the match in <span style="font-family: andale mono,times;">$film</span>, &#8220;Harry Potter and the Sorcerer&#8217;s Stone&#8221;. And calling <span style="font-family: andale mono,times;">$film-&gt;matched()</span>, you get an array-reference to the 43 (!) total matches for the string, &#8220;Harry Potter&#8221;. Part of each hash-reference in those 43 slots is the IMDb key for the given title, meaning you can fetch the subsequent titles without first going to the search form:</p>
<pre>my $other_film = IMDB::Film-&gt;new(crit =&gt; $film-&gt;matched-&gt;[0]-&gt;{id});</pre>
<p>This will go directly to that page and fill in <span style="font-family: andale mono,times;">$other_film</span> with the info from it. Read the docs for the class to see the other accessors you can call, and see the docs for the IMDB::Persons class for what you can do with it. In particular, the <span style="font-family: andale mono,times;">cast()</span> method on a film object will give you a list-reference of hash-references, one key of which is the IMDb ID for each cast member. You can use this to get their page info with IMDB::Persons.</p>
<p>Now, the dreaded caveats and reservations:</p>
<ul>
<li>The current version (0.51 as of this writing) has left some debugging lines in the code, so calls to <span style="font-family: andale mono,times;">new()</span> (in both the ::Film and ::Persons classes) send cruft to STDOUT.</li>
<li>And, by the way, why call one class &#8220;Film&#8221; (singular) and the other class &#8220;Persons&#8221; (plural)? I consider that bad design.</li>
<li>The <span style="font-family: andale mono,times;">cast()</span> method only lists the cast that are listed on the main page of the film&#8217;s IMDb entry. In the Harry Potter example, this means only the first 15 people, most of whom are actually minor players.</li>
<li>In general, there seems to be no deeper-drilling for any information— you can get the short bio for an actor, but not the full bio for example.</li>
<li>You can get URLs for certain of the data elements (images, etc.), but not for the full page itself. If I wanted to extract data for Tom Cruise, for example, then render that data along with a link back to the IMDb page for him, I cannot get that URL from the IMDB::Persons record for Tom Cruise. This despite the fact that it had to have fetched that URL to get the data.</li>
</ul>
<p>There are other minor nits, but those are the high points. I will be watching this module, to see if any of these get addressed (and I opened an RT ticket for the errant debugging messages, hopefully that will be addressed in the next release). But while I may seem to be harsh on it, I still think it&#8217;s a useful little module, and worth playing around with. Scraping IMDb is no small task, and I&#8217;m glad someone is doing the grunt-work of keeping up with their content-layout changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/10/03/perl-module-monday-imdbfilm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: Object::Tiny (and friends)</title>
		<link>http://www.dereferenced.com/2011/09/26/perl-module-monday-objecttiny/</link>
		<comments>http://www.dereferenced.com/2011/09/26/perl-module-monday-objecttiny/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 00:04:07 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=205</guid>
		<description><![CDATA[Seriously, I&#8217;m going to have to create a new tag with &#8220;module&#8221; in the plural form, at this rate. This week&#8217;s post started out just looking at one module, but as it happens there are three variant forms of it that are just as interesting and useful as the original. So it would be highly [...]]]></description>
			<content:encoded><![CDATA[<p>Seriously, I&#8217;m going to have to create a new tag with &#8220;module&#8221; in the plural form, at this rate. This week&#8217;s post started out just looking at one module, but as it happens there are three variant forms of it that are just as interesting and useful as the original. So it would be highly unfair to leave any of them out.</p>
<p>Let&#8217;s start with the module at the core of it all, <a title="Object::Tiny at MetaCPAN.org" href="https://metacpan.org/release/Object-Tiny">Object::Tiny</a>. Object::Tiny is exactly as the name implies: tiny. With the POD it&#8217;s just under 9000 bytes, and not counting the POD the current version (1.08) is 553 bytes. I like the <span style="font-family: andale mono,times;">*::Tiny</span> modules, I like seeing people getting the most functionality in a truly modular way with a minimum of code and no dependencies. Object::Tiny gives you a truly minimal way to create objects with simple (read-only) accessors. It also gives you a dead-simple constructor if you don&#8217;t already have one (well, most of the time— I&#8217;ll come back to this in a bit). And it does it all with an extremely small footprint and a minimum of intrusiveness.</p>
<p>Some might be wondering why you would need this— after all, the object you create from Object::Tiny is little more than a hash-reference with delusions of grandeur: the storage is just a basic hash reference (no extra keys or meta-data), the accessors are read-only by design (but see the bit on related modules further down) no additional methods besides an inheritable <span style="font-family: andale mono,times;">new()</span> are provided, etc. But it&#8217;s a hash-reference that can call methods, for one thing. And your users don&#8217;t need to know that it is just a lowly hash-ref under the hood. Plus, there are plenty of applications for read-only data structures. Indeed, at its core, functional programming calls for immutable data. Writing methods to effect changes by returning new objects with the updated member values would be pretty trivial. You could, for example, define a <span style="font-family: andale mono,times;">clone()</span> operation that allows updated values to be passed in as:</p>
<pre>sub clone {
    my $self = shift;

    return __PACKAGE__-&gt;new(%{$self}, @_);
}</pre>
<p>(For the less-experienced Perl users, this calls the <span style="font-family: andale mono,times;">new()</span> of the package that the code is in, with the contents of the existing object flattened from a hash to an array. In addition to that, it also passes any arguments to <span style="font-family: andale mono,times;">clone()</span> itself. Because of the way array/hash flattening/conversion works, anything in the arguments will override similar-named keys in the original hash, effectively &#8220;updating&#8221; those keys.)</p>
<p>Of course, this being CPAN, you don&#8217;t need to do that. You just need to consider one of the alternatives:</p>
<ul>
<li><a title="Object::Tiny::RW at MetaCPAN.org" href="https://metacpan.org/release/Object-Tiny-RW">Object::Tiny::RW</a> &#8211; This variant creates accessors that are read/write, by slightly altering the code that is generated. Accessors will then be able to accept an argument that, if present, becomes the new value for the key: <span style="font-family: andale mono,times;">$obj-&gt;foo(2)</span> sets the &#8220;foo&#8221; key to 2. Of course, no type-checking is done.</li>
<li><a title="Object::Tiny::Lvalue at MetaCPAN.org" href="https://metacpan.org/release/Object-Tiny-Lvalue">Object::Tiny::Lvalue</a> &#8211; This variant also creates read/write accessors, but rather than using the &#8220;<span style="font-family: andale mono,times;">$obj-&gt;foo(2)</span>&#8221; syntax it creates the accessors as lvalue methods, allowing you to do the same thing with &#8220;<span style="font-family: andale mono,times;">$obj-&gt;foo = 2</span>&#8220;.</li>
<li><a title="Object::Tiny::XS at MetaCPAN.org" href="https://metacpan.org/release/Object-Tiny-XS">Object::Tiny::XS</a> &#8211; This variant breaks the &#8220;tiny&#8221; rule slightly by depending on <a title="Class::XSAccessor at MetaCPAN.org" href="https://metacpan.org/release/Class-XSAccessor">Class::XSAccessor</a>. It generates read-only accessors and the inheritable <span style="font-family: andale mono,times;">new()</span> method using Class::XSAccessor. Interestingly, it does not generate read/write accessors like the other two variants do, even though Class::XSAccessor provides a simple alternative that does this. That might be worthy of a feature-request, if someone feels strongly about it.</li>
</ul>
<p>Since the usage syntax of these is all identical (well, except for the lvalue variant), one could even prototype with one module and switch to another later on if so needed. Particularly with Object::Tiny vs. Object::Tiny::XS, since both adhere to the read-only model of the generated accessors.</p>
<p>One thing I have noticed in the logic of Object::Tiny that seems to be reflected in all three of the variants, is: the class is only added to your (calling) class&#8217; inheritance hierarchy if you do <em>not</em> already have something in your <span style="font-family: andale mono,times;">@ISA</span> variable. If you do, it will not add itself to your inheritance path. This means that you won&#8217;t get an inherited constructor in cases where you might be expecting to. For example, your class might utilize some form of an exporter and have that in the <span style="font-family: andale mono,times;">@ISA</span> array. But it doesn&#8217;t provide you a constructor. If you were expecting Object::Tiny to provide the constructor, you may be surprised when it doesn&#8217;t. Mind you, the constructor it provides is dead-simple, but just be sure to know this behavior before it catches you off-guard. This behavior isn&#8217;t a bug, either, because it makes sense that if your class inherits from another class, it is probably either inheriting a constructor or providing its own constructor as an override. So I don&#8217;t consider this a problem with Object::Tiny, it&#8217;s just something to be aware of when using it.</p>
<p>Object::Tiny (and friends): for your minimalist class-construction needs!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/09/26/perl-module-monday-objecttiny/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: Desktop::Notify</title>
		<link>http://www.dereferenced.com/2011/09/19/perl-module-monday-desktopnotify/</link>
		<comments>http://www.dereferenced.com/2011/09/19/perl-module-monday-desktopnotify/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 06:59:55 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=201</guid>
		<description><![CDATA[Boy am I slipping (again). Been a few weeks since I wrote at all, and on top of that I can&#8217;t seem to type AT ALL right now, so who knows how long it&#8217;ll take me to write this (and whether it actually gets posted while it is still Monday). For this week, I&#8217;m going [...]]]></description>
			<content:encoded><![CDATA[<p>Boy am I slipping (again). Been a few weeks since I wrote at all, and on top of that I can&#8217;t seem to type AT ALL right now, so who knows how long it&#8217;ll take me to write this (and whether it actually gets posted while it is still Monday).</p>
<p>For this week, I&#8217;m going to continue on the theme of my <a href="/2011/08/29/perl-module-monday-growltiny/">previous feature</a>, only this time for Linux systems: <a title="Desktop::Notify at MetaCPAN.org" href="https://metacpan.org/release/Desktop-Notify">Desktop::Notify</a>. If you use a GNOME desktop that is fairly recent in release, then you probably are already familiar with the DBus messages that various applications pop up from time to time; chat clients, web browsers, etc. Many of the current-generation graphical apps have some sort of notification needs, and if they are running on a desktop that has DBus notifications they are probably using this system. So in comes this module, to let you also take part.</p>
<p>It&#8217;s quite an easy module to use, and the manual page is pretty reasonable given the overall simplicity. It&#8217;s even simple-enough to use in a one-liner:</p>
<pre>perl -MDesktop::Notify -e 'Desktop::Notify-&gt;new-&gt;create(
    summary =&gt; "Desktop::Notify", body =&gt; "A notification...",
    timeout =&gt; 3000)-&gt;show'</pre>
<p>(Broken up for line-length and clarity, of course.) Something like that could be easily incorporated into a shell script (though the &#8220;<span style="font-family: andale mono,times;">notify-send</span>&#8221; utility can do that just as easily).</p>
<p>But if you are looking for a simple way to send messages to the user in a fairly unobtrusive fashion, have a look at this!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/09/19/perl-module-monday-desktopnotify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: Growl::Tiny</title>
		<link>http://www.dereferenced.com/2011/08/29/perl-module-monday-growltiny/</link>
		<comments>http://www.dereferenced.com/2011/08/29/perl-module-monday-growltiny/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 06:58:10 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=197</guid>
		<description><![CDATA[I&#8217;m a fairly-new MacOS user. I&#8217;ve had this MacBook Pro since just a few days before this last OSCON, and I&#8217;m growing more and more fond of it by the day. So for this week&#8217;s PMM, I&#8217;m going to look at a Mac-centric module, apologies in advance to those who have no use for this— [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a fairly-new MacOS user. I&#8217;ve had this MacBook Pro since just a few days before this last OSCON, and I&#8217;m growing more and more fond of it by the day. So for this week&#8217;s PMM, I&#8217;m going to look at a Mac-centric module, apologies in advance to those who have no use for this— there&#8217;s something similar for Linux desktops that I might explore in the future.</p>
<p><a title="Growl::Tiny at MetaCPAN.org" href="https://metacpan.org/release/Growl-Tiny">Growl::Tiny</a> is the latest (it seems) entry into the Growl-glue arena, and certainly the most-recently-updated. As the author states, he had run into problems with the prerequisites for modules such as <a title="Mac::Growl at MetaCPAN.org" href="https://metacpan.org/release/Mac-Growl">Mac::Growl</a>, so he wrote this as a solution. In following with the &#8220;tiny&#8221; convention, the module has no prerequisites. It only requires that you have <span style="font-family: andale mono,times;">/usr/local/bin/growlnotify</span> installed (as well as Growl itself, of course). I found that it built and installed just fine on my system, with only one hitch that I&#8217;ll come back to later.</p>
<p>So what does it do? Well, it makes Growl notifications! If you are a MacOS user and you don&#8217;t know about Growl, you should probably get over to <a href="http://growl.info/">http://growl.info/</a> first and check it out. Seriously, it&#8217;s a terribly useful utility. Once you&#8217;ve done that, this module will let you, in a fairly lightweight fashion, use Growl to send desktop notifications to your users. It&#8217;s the &#8220;lightweight&#8221; part that appeals to me, as the older Growl libraries seemed to be dependent on some other modules that haven&#8217;t been kept up-to-date with the changes in MacOS. This one gets around this by opting to use a command-line utility (the aforementioned <span style="font-family: andale mono,times;">growlnotify</span>) instead of native bindings. It&#8217;s not without limitations, as the author points out in his documentation. But then, if you&#8217;re sending several notifications per second, you might need something more substantial than this anyway, so the limitations might not be of concern.</p>
<p>The only issue I had with it was that two tests will fail if you don&#8217;t set up Growl to listen for localhost-directed network connections. The author recommends using the network feature in the docs, but it shouldn&#8217;t be a requirement for building and installation. A more graceful way of detecting that network connections are not enabled, and skipping the tests, would be preferable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/08/29/perl-module-monday-growltiny/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perl Module Monday: Carp::Always</title>
		<link>http://www.dereferenced.com/2011/08/22/perl-module-monday-carpalways/</link>
		<comments>http://www.dereferenced.com/2011/08/22/perl-module-monday-carpalways/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 23:27:06 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[module-monday]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=194</guid>
		<description><![CDATA[(With special bonus-module this week!) Ever run into an error or warning in someone else&#8217;s module, and wished you could get more information about it without having to wade through their code? It&#8217;s probably almost certain that you have, at least once. At least once, you&#8217;ve seen a warning or had a program die, and [...]]]></description>
			<content:encoded><![CDATA[<p>(With special bonus-module this week!)</p>
<p>Ever run into an error or warning in someone else&#8217;s module, and wished you could get more information about it without having to wade through their code? It&#8217;s probably almost certain that you have, at least once. At least once, you&#8217;ve seen a warning or had a program die, and wished that you could see a stack trace without having to go in and edit the module. After all, the module is probably installed into a system location, and even if you don&#8217;t need root/sudo to edit it, you then have the hassle of going back and undoing the changes (or re-doing them, if/when you update the module in question) after your debugging has been done.</p>
<p>Enter <a title="Carp::Always at MetaCPAN.org" href="https://metacpan.org/release/Carp-Always">Carp::Always</a>. Carp::Always plays around with <span style="font-family: andale mono,times;">$SIG{__WARN__}</span> and <span style="font-family: andale mono,times;">$SIG{__DIE__}</span>, and gives you stack-traces on every <span style="font-family: andale mono,times;">die</span> and <span style="font-family: andale mono,times;">warn</span> that come from code. I was introduced to this module by a commenter on my &#8220;<a href="/2011/08/16/chasing-a-very-elusive-warning/">Chasing an Elusive Warning</a>&#8221; post last week. Alas, it didn&#8217;t help in that case, as the warning was coming from within Perl itself. But I found the module to be a nice concept, and it&#8217;s easy to use on a only-when-you-need-it basis. Have a script that is generating warnings you want more information about?</p>
<pre style="padding-left: 30px;">perl -MCarp::Always script.pl</pre>
<p>Carp::Always quietly slips in and make the necessary alteration to the die/warn handlers, and your script runs and does its thing. And when the warnings (or termination) come, you should have your stack trace.</p>
<p>The author does point out that this module may not play well with other modules that alter <span style="font-family: andale mono,times;">$SIG{__WARN__}</span> and <span style="font-family: andale mono,times;">$SIG{__DIE__}</span>, so there is that to be aware of. But that aside, hopefully this can be of great aid to your next debugging session!</p>
<p>(And as a bonus, here&#8217;s another module that does the essentially the same thing: <a title="Devel::SimpleTrace at MetaCPAN.org" href="https://metacpan.org/release/Devel-SimpleTrace">Devel::SimpleTrace</a>. I actually know much less about this one, except that it lists Data::Dumper as a dependency, which leads me to believe that it tries to do some pretty-printing with the data in stack-frames. But unlike Carp::Always, I haven&#8217;t used it. Still, if you like the concept, it&#8217;s worth checking out both modules and seeing which one you like more.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/08/22/perl-module-monday-carpalways/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Perl Module Release: RPC-XML 0.76</title>
		<link>http://www.dereferenced.com/2011/08/21/perl-module-release-rpc-xml-0-76/</link>
		<comments>http://www.dereferenced.com/2011/08/21/perl-module-release-rpc-xml-0-76/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 20:12:53 +0000</pubDate>
		<dc:creator>rjray</dc:creator>
				<category><![CDATA[CPAN]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[RPC-XML]]></category>

		<guid isPermaLink="false">http://www.dereferenced.com/?p=190</guid>
		<description><![CDATA[MetaCPAN.org: https://metacpan.org/release/RJRAY/RPC-XML-0.76 Version: 0.76 Released: Saturday August 20, 2011, 06:30:00 PM -0700 Changes: etc/make_method lib/RPC/XML/Server.pm RT #70258: Fixed typos in docs pointed out by Debian team. lib/Apache/RPC/Server.pm Better version of the fix for infinite loops. This is the patch originally suggested by Eric Cholet, who found the bug. t/00_load.t RT #70280: This test was still [...]]]></description>
			<content:encoded><![CDATA[<div>MetaCPAN.org: <a href="https://metacpan.org/release/RJRAY/RPC-XML-0.76">https://metacpan.org/release/RJRAY/RPC-XML-0.76</a></div>
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:cl="http://www.blackperl.com/2009/01/ChangeLogML" xmlns:xhtml="http://www.w3.org/1999/xhtml" id="changelog-container" class="changelog-container-div">
<div class="changelog-release-div" name="release_0_76" id="release_0_76_div">
<span class="changelog-release-heading">Version: 0.76</span><br/><br />
<span class="changelog-release-date">Released: <span class="changelog-date">Saturday August 20, 2011, 06:30:00 PM -0700</span></span></p>
<p class="changelog-release-para">Changes:</p>
<div class="changelog-release-changes-container">
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">etc/make_method</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/RPC/XML/Server.pm</tt>
</li>
</ul>
<p class="changelog-release-change-para"><a href="https://rt.cpan.org/Ticket/Display.html?id=70258" class="changelog-html-a">RT #70258</a>: Fixed typos in docs pointed out by Debian team.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/Apache/RPC/Server.pm</tt>
</li>
</ul>
<p class="changelog-release-change-para">Better version of the fix for infinite loops. This is the patch originally suggested by Eric Cholet, who found the bug.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/00_load.t</tt>
</li>
</ul>
<p class="changelog-release-change-para"><a href="https://rt.cpan.org/Ticket/Display.html?id=70280" class="changelog-html-a">RT #70280</a>: This test was still testing RPC/XML/Method.pm. Rewrote to remove that but include the (forgotten) XMLLibXML.pm module. That test has to be conditional on the presence of XML::LibXML.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">Makefile.PL</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/51_client_with_host_header.t</tt>
</li>
</ul>
<p class="changelog-release-change-para">Clean up test suite to work with older Test::More. Also specify a minimum Test::More that supports subtest(). This is also a part of <a href="https://rt.cpan.org/Ticket/Display.html?id=70280" class="changelog-html-a">RT #70280</a>.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/11_base64_fh.t</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/20_xml_parser.t</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/21_xml_libxml.t</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/40_server.t</tt>
</li>
</ul>
<p class="changelog-release-change-para">These tests had failures when run as root. Permissions-based negative tests were incorrectly passing.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_data.t</tt>
</li>
</ul>
<p class="changelog-release-change-para">Moved the 64-bit &#8220;TODO&#8221; tests to a SKIP block. Non-64-bit systems will skip, rather than fail, these tests.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/RPC/XML/Server.pm</tt>
</li>
</ul>
<p class="changelog-release-change-para"><a href="https://rt.cpan.org/Ticket/Display.html?id=65616" class="changelog-html-a">RT #65616</a>: Fix for slow methods killing servers. Applied and modified patch from person who opened the ticket.</p>
</div>
<div class="changelog-release-change">
<ul class="changelog-release-change-ul">
<li class="changelog-release-change-li">
<tt class="changelog-filename">MANIFEST</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">lib/RPC/XML.pm</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/10_data.t</tt>
</li>
<li class="changelog-release-change-li">
<tt class="changelog-filename">t/14_datetime_iso8601.t</tt> <span class="changelog-release-file-action">(added)</span>
</li>
</ul>
<p class="changelog-release-change-para"><a href="https://rt.cpan.org/Ticket/Display.html?id=55628" class="changelog-html-a">RT #55628</a>: Improve flexibility of date parsing. This adds the ability to pass any ISO 8601 string to the RPC::XML::datetime_iso8601 constructor.</p>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dereferenced.com/2011/08/21/perl-module-release-rpc-xml-0-76/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

