<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xmlns:media="http://search.yahoo.com/mrss">
    <channel>
        <title>bricas’ blog</title>
        <link>http://bricas.vox.com/library/posts/page/1/</link>
        <description></description>
        <language>en</language>
        <generator>Vox</generator>
        <lastBuildDate>Fri, 18 Dec 2009 15:02:45 -0400</lastBuildDate>
        <copyright>Copyright 2009</copyright>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>  
 
        <item>
            <title>The last five months</title>
            <link>http://bricas.vox.com/library/post/the-last-five-months.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/the-last-five-months.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/the-last-five-months.html?_c=feed-rss-full</guid> 
            <pubDate>Fri, 18 Dec 2009 15:02:45 -0400</pubDate>         
            
            <description>    &lt;p&gt;I haven&amp;#39;t bothered to post anything in the last five months. With Christmas just around the corner, I figure this is as good a time as any to play catch up.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Padre-Plugin-PerlTidy&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A new release of this plugin -- changes made mostly by other people.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Gedcom-FOAF&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Rather than using a base url for the data, you can now specify a number of url templates. This makes the module actually useful. Thanks to Chris Prather for working through this with me.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Geo-IPfree&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A couple of releases with various refactoring bits and bug fixes. The folks at software77.net now produce a data file specifically for this module. I will ship an updated copy with every release. Refactoring this code has been pretty satisfying, though there are some parts of the module API which I detest but I will be unable to modify them.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Image-Textmode/Image-Textmode-Reader-ANSI-XS&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Various bug fixes thanks to some testing with a large dataset from Doug Moore and sixteencolors.net&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Config-Any&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Released version 0.18, which prefers YAML::XS over any other YAML parser. This created a number of issues with the HTML::FormFu crowd as existing parsers allowed this sort of syntax &amp;quot;auto_id: %n&amp;quot; -- whereas YAML::XS complains about an exposed percent sign. The easy fix is to wrap the string in quotes &amp;quot;auto_id: &amp;#39;%n&amp;#39;&amp;quot;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;GD-Image-Scale2x&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Fixed a nasty bug due to a missing my() which randomly broke the module on some platforms.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;CGI-Application-PhotoGallery&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A tiny patch for max_height included in this release. This still has some pending issues in RT -- though I have a hard time justifying spending any time on them as I don&amp;#39;t use this module at all.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Catalyst-Model-WebService-Solr&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Apparently, this module was basically broken. Fixed thanks to a supplied patch.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Template-Provider&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Another kind user supplied some patches/info to support mod_perl and fully qualified template names.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;CQL-Parser/SRU&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Removing use of UNIVERSAL-&amp;gt;import from these module. Not even sure why it was there to begin with.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;WebService-Solr&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;A couple of release of this module. Includes some bug fixes, feature additions and Solr 1.4 compatibility.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;strong&gt;Remove auto_install from my dists&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Although, as I understand it, auto_install now works in newer versions of Module::Install, I&amp;#39;ve decided to remove it from my dists to avoid any issues.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;See you next year.&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/the-last-five-months.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0123f1898ffd860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category>   
        </item> 
 
        <item>
            <title>Adding a feature to Padre</title>
            <link>http://bricas.vox.com/library/post/adding-a-feature-to-padre.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/adding-a-feature-to-padre.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/adding-a-feature-to-padre.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 28 Jul 2009 09:23:12 -0300</pubDate>         
            
            <description>    &lt;p&gt;I&amp;#39;ve been following (and even contributing to) the &lt;a href=&quot;http://padre.perlide.org&quot;&gt;Padre IDE&lt;/a&gt; project from very early on. I&amp;#39;ve watched it grow from very modest beginings into something quite impressive -- usable, even.&lt;/p&gt;&lt;p&gt;Its deep integration with Perl is such a killer feature. There are already a good &lt;a href=&quot;http://search.cpan.org/search?query=Padre-Plugin&amp;amp;mode=dist&quot;&gt;two-dozen plugins&lt;/a&gt;, one of which I&amp;#39;ve been shepherding: &lt;a href=&quot;http://search.cpan.org/dist/Padre-Plugin-PerlTidy&quot;&gt;Padre-Plugin-PerlTidy&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In light of Padre&amp;#39;s first birthday, I decided I wanted to give something back into the Padre core rather than just an ancillary project.&lt;/p&gt;&lt;p&gt;I tend to use gedit on Ubuntu, and I rather liked the &amp;quot;right margin&amp;quot; option. This option puts a gray vertical line on whichever column you specify. It&amp;#39;s an easy visual queue for long lines. It turns out that the Scintilla editor component supports this feature and all I had to do was enable the menus and dialogs to allow users to toggle the method.&lt;/p&gt;
    
    
    

    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00d09e62f541be2b01101638c2b0860b&quot; at:format=&quot;large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b01101638c2b0860b.html&quot;&gt;&lt;img src=&quot;http://a0.vox.com/6a00d09e62f541be2b01101638c2b0860b-320pi&quot; alt=&quot;Padre with &amp;quot;right margin&amp;quot; option&quot; title=&quot;Padre with &amp;quot;right margin&amp;quot; option&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b01101638c2b0860b.html&quot; title=&quot;Padre with &amp;quot;right margin&amp;quot; option&quot;&gt;Padre with &amp;quot;right margin&amp;quot; option&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;...and there you have it. It didn&amp;#39;t take very long, and it&amp;#39;s not exactly mind blowing, but it&amp;#39;s something I&amp;#39;ve found useful. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/adding-a-feature-to-padre.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b011018580751860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">padre</category>    
        </item> 
 
        <item>
            <title>Dear Module Author</title>
            <link>http://bricas.vox.com/library/post/dear-module-author.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/dear-module-author.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/dear-module-author.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 03 Jun 2009 16:41:53 -0300</pubDate>         
            
            <description>    &lt;p&gt;Dear Module Author,&lt;/p&gt;&lt;p&gt;When preparing to upload a new release of your module to PAUSE could you please review your Changes file?&lt;/p&gt;&lt;p&gt;Did you remember to update it? Does it contain something meaningful? Here are a couple of examples of Changes entries which mean very little to me at a glance:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Bug Fixed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Foo::Bar Fixed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fixed RT #12345&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Also, your SCM revision log does not a good Changes file make.&lt;/p&gt;&lt;p&gt;Yes, this is old news. This is just a reminder. &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/dear-module-author.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110182fbb7e860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category>   
        </item> 
 
        <item>
            <title>Elsewhere</title>
            <link>http://bricas.vox.com/library/post/elsewhere.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/elsewhere.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/elsewhere.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 26 May 2009 14:56:42 -0300</pubDate>         
            
            <description>    &lt;p&gt;This is just a quick note to let y&amp;#39;all know that I now have a &lt;a href=&quot;http://twitter.com/bricas/&quot;&gt;twitter account&lt;/a&gt; and an &lt;a href=&quot;http://identi.ca/bricas/&quot;&gt;identi.ca account&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You have been warned.&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/elsewhere.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110165134a4860c?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">twitter</category> 
            <category domain="http://bricas.vox.com/tags/">identi.ca</category>   
        </item> 
 
        <item>
            <title>Benchmark</title>
            <link>http://bricas.vox.com/library/post/benchmark.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/benchmark.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/benchmark.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 21 May 2009 14:30:20 -0300</pubDate>         
            
            <description>    &lt;p&gt;As noted in my &lt;a href=&quot;http://bricas.vox.com/library/post/develnytprof.html&quot;&gt;last post&lt;/a&gt;, I was able to get a bit of a speed boost based on observations made as a result of code profiling.&lt;/p&gt;&lt;p&gt;In general, if I want to see if one piece of code is faster than another, I use &lt;a href=&quot;http://search.cpan.org/perldoc?Benchmark&quot;&gt;Benchmark&lt;/a&gt;. Benchmark is shipped as part of the core set of modules, so there&amp;#39;s no need to load up CPAN to get started. Its simplest usage, and the one i prefer looks something like this:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; use Benchmark ();&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Benchmark::cmpthese( $count, {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Foo1 =&amp;gt; sub {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # code to do Foo1 here&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Foo2 =&amp;gt; sub {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; # code to do Foo1 here&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } );&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Of note is that $count can be negative, which will then signify how many seconds to run instead of the number of times. The result looks like this:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rate Foo1 Foo2&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Foo1 108665/s&amp;#160;&amp;#160; -- -38%&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Foo2 175460/s&amp;#160; 61%&amp;#160;&amp;#160; --&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;It&amp;#39;s pretty easy to see that Foo2 was faster. Using the above it was easy for me to test the XS-based ANSI parser vs the pure Perl version.&lt;/p&gt;&lt;p&gt;4k worth of ANSI over 10 seconds yields the following:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rate&amp;#160;&amp;#160;&amp;#160; PP&amp;#160;&amp;#160;&amp;#160; XS&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PP 15.7/s&amp;#160;&amp;#160;&amp;#160; --&amp;#160; -96%&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XS&amp;#160; 379/s 2316%&amp;#160;&amp;#160;&amp;#160; --&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;For giggles, i tested it against a 33k ANSI, giving:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Rate&amp;#160;&amp;#160;&amp;#160; PP&amp;#160;&amp;#160;&amp;#160; XS&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PP 2.23/s&amp;#160;&amp;#160;&amp;#160; --&amp;#160; -96%&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XS 58.7/s 2528%&amp;#160;&amp;#160;&amp;#160; --&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Looks like a success to me!&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/benchmark.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110164dd677860c?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">perl-qa</category>   
        </item> 
 
        <item>
            <title>Devel::NYTProf</title>
            <link>http://bricas.vox.com/library/post/develnytprof.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/develnytprof.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/develnytprof.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 11 May 2009 12:37:48 -0300</pubDate>         
            
            <description>    &lt;p&gt;Another week another QA tool.&lt;/p&gt;&lt;p&gt;This week I&amp;#39;m going to talk about &lt;a href=&quot;http://search.cpan.org/dist/Devel-NYTProf/&quot;&gt;Devel::NYTProf&lt;/a&gt; (aka NYTProf).&lt;/p&gt;&lt;p&gt;To start, if you&amp;#39;re interested in profilers, you should check out the brief &lt;a href=&quot;http://search.cpan.org/dist/Devel-NYTProf/lib/Devel/NYTProf.pm#HISTORY&quot;&gt;history section&lt;/a&gt; of the pod, then take a glance at its &lt;a href=&quot;http://search.cpan.org/dist/Devel-NYTProf/lib/Devel/NYTProf.pm#DESCRIPTION&quot;&gt;features&lt;/a&gt;. Until recently, I hadn&amp;#39;t been very interested in profiling my code. I didn&amp;#39;t really have anything that needed the profiling, and the tools just seemed a bit awkward to me. This changed for me when I saw the output from nytprofhtml (&lt;a href=&quot;http://timbunce.files.wordpress.com/2008/07/nytprof-perlcritic-index.png&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://timbunce.files.wordpress.com/2008/07/nytprof-perlcritic-all-perl-files.png&quot;&gt;2&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;While working on Image-TextMode, I noticed that parsing large (~75k) ANSI files was getting to be pretty slow. I decided to run NYTProf on the parsing code, and here&amp;#39;s what I got:&lt;/p&gt;
    
    
    

    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00d09e62f541be2b011016826a89860d&quot; at:format=&quot;large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b011016826a89860d.html&quot;&gt;&lt;img src=&quot;http://a1.vox.com/6a00d09e62f541be2b011016826a89860d-320pi&quot; alt=&quot;Profiling - Before&quot; title=&quot;Profiling - Before&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b011016826a89860d.html&quot; title=&quot;Profiling - Before&quot;&gt;Profiling - Before&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;The putpixel(), width() and height() methods are called for every character/attribute combo stored for the image. This turns out to be a really big inefficiency. I&amp;#39;ve had some XS code in my back pocket for ANSI parsing, so I decided to whip up a replacement parser using that code and run the profiler again.&lt;/p&gt;
    
    
    

    
    
    
&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00d09e62f541be2b011016479126860c&quot; at:format=&quot;large&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-large photo-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;padding: 9px; border: 1px solid; width: px; margin: 10px auto;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item photo-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-image&quot;&gt;
        
                &lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b011016479126860c.html&quot;&gt;&lt;img src=&quot;http://a6.vox.com/6a00d09e62f541be2b011016479126860c-320pi&quot; alt=&quot;Profiling - After&quot; title=&quot;Profiling - After&quot; /&gt;&lt;/a&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;&lt;a href=&quot;http://bricas.vox.com/library/photo/6a00d09e62f541be2b011016479126860c.html&quot; title=&quot;Profiling - After&quot;&gt;Profiling - After&lt;/a&gt;&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;Huge win! By moving _read() to XS (including putpixel, width, and height) I was able to shave over a second off of the total time (_read inclusive goes from 1.3 seconds to 0.03). Although working with XS was a bit of a pain, it was really great to see such a speed improvement.&lt;/p&gt;&lt;p&gt;I recommend everyone take a look at NYTProf if you&amp;#39;re looking find speed inefficients in your code. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/develnytprof.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b01101822456a860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">perl-qa</category>    
        </item> 
 
        <item>
            <title>Perl::Critic</title>
            <link>http://bricas.vox.com/library/post/perlcritic.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/perlcritic.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/perlcritic.html?_c=feed-rss-full</guid> 
            <pubDate>Fri, 01 May 2009 16:41:35 -0300</pubDate>         
            
            <description>    &lt;p&gt;Holy -- this weekly thing goes by way too fast!&lt;/p&gt;&lt;p&gt;Anyway, as promised, I&amp;#39;m making my first QA tool post. This week, we&amp;#39;re chatting about &lt;a href=&quot;http://search.cpan.org/dist/Perl-Critic&quot;&gt;Perl::Critic&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Perl::Critic has been around since late 2005. I was able to resist its icy gaze until last fall. So, why wouldn&amp;#39;t I want to jump right in with Perl::Critic early on? Mostly what I imagined was putting a significant amount of time in to bend Perl::Critic policies to my will so I wouldn&amp;#39;t have to change how I code. This is, of course, the wrong way to look at it.&lt;/p&gt;&lt;p&gt;There&amp;#39;s nothing wrong with having a tool that confirms you&amp;#39;re doing the right thing -- but what I really wanted was a tool that showed me the bad habits I&amp;#39;ve learned and gave me a slap on the wrist every time I tried to use them. The easiest way to get started was to copy someone else&amp;#39;s polcy file. RJBS was nice enough to comply.&lt;/p&gt;&lt;p&gt;For the Image::TextMode project, after adding my own tweaks to the policies, &lt;a href=&quot;http://github.com/bricas/image-textmode/blob/0889b780fb657359c3494dbc85c200d8434b6e90/xt/perlcriticrc&quot;&gt;this is the result&lt;/a&gt;. A simple &lt;a href=&quot;http://github.com/bricas/image-textmode/blob/0889b780fb657359c3494dbc85c200d8434b6e90/xt/author/critic.t&quot;&gt;automated test&lt;/a&gt; integrates it into my development cycle.&lt;/p&gt;&lt;p&gt;After running it against my code, it found some issues -- most of my which were pretty tame: 2-arg open, lack of pod, plus a few regex and character matching niggles.&lt;/p&gt;&lt;p&gt;In my policy file, I have two sections: Things I don&amp;#39;t agree with and things I&amp;#39;ve had to disable temporarily. I hope to eventually go back and clean up my code so I can remove the remainder of the temporarily disabled policies. The policies I don&amp;#39;t agree with may change over time, but this is my current list of preferences.&lt;/p&gt;&lt;p&gt;I have yet to use this setup in any other project, but I think the tool is useful enough that I could put it into place from the very beginning of a project or go back and run it against all of my old projects over time.&lt;/p&gt;&lt;p&gt;Until next time...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/perlcritic.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110167eabf1860d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">perl-qa</category>   
        </item> 
 
        <item>
            <title>Projects Updates and QA Tools</title>
            <link>http://bricas.vox.com/library/post/projects-updates-and-qa-tools.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/projects-updates-and-qa-tools.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/projects-updates-and-qa-tools.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 22 Apr 2009 15:04:14 -0300</pubDate>         
            
            <description>    &lt;p&gt;NB: This is my first post in the &lt;a href=&quot;http://www.shadowcat.co.uk/blog/matt-s-trout/iron-man/#compo&quot;&gt;EPO Iron Man challenge&lt;/a&gt;. (Warning: contains some expletives)&lt;/p&gt;&lt;p&gt;First and foremost, the long awaited &lt;a href=&quot;http://search.cpan.org/dist/Catalyst-Runtime-5.80001/&quot;&gt;Catalyst 5.8&lt;/a&gt; is out! My mind-share has primarily been with the 5.7x series so I&amp;#39;ve been pretty much out of the loop on everything that&amp;#39;s going on. Luckily enough, everything is basically backwards compatible (less any necessary module upgrades).&lt;/p&gt;&lt;p&gt;Besides the usual round of bug fixes, this release is built on top of &lt;a href=&quot;http://search.cpan.org/dist/Moose/&quot;&gt;Moose&lt;/a&gt;. I&amp;#39;m a big fan of Moose and the ease with which it lets me code, so I&amp;#39;m very excited to see this feature. Be sure to check the &lt;a href=&quot;http://cpansearch.perl.org/src/FLORA/Catalyst-Runtime-5.80001/Changes&quot;&gt;Changelog&lt;/a&gt; for all of the details.&lt;/p&gt;&lt;p&gt;As far as my personal projects go, I&amp;#39;ve finally been able to deprecate two of my oldest modules (Image::ANSI and Image::XBin) with the latest release of &lt;a href=&quot;http://search.cpan.org/dist/Image-TextMode-0.05/&quot;&gt;Image::TextMode&lt;/a&gt;. This release now mirrors all features provided by the two before it (and then some). It can now write each format (not 100% complete, but release-worthy) -- I&amp;#39;ve even included a little bit of naive RLE compression.&lt;/p&gt;&lt;p&gt;Personal projects let me explore some new/different technologies which may not fit in do my daily $work. One of those would be Moose, as mentioned above (which is now part of our standard &amp;quot;toolkit&amp;quot;). Another would be XS. Writing &lt;a href=&quot;http://search.cpan.org/dist/Image-TextMode-Reader-ANSI-XS&quot;&gt;Image::TextMode::Reader::ANSI::XS&lt;/a&gt; was very eye opening as far as hooking Perl and C code together and illuminating the Perl internals for me.&lt;/p&gt;&lt;p&gt;Recently, I&amp;#39;ve been in tune with adding new QA tools to my repertoire, such as: Benchmark (high time I learned more about it), Perl::Critic (again, about time) and Devel::NYTProf.&lt;/p&gt;&lt;p&gt;If I&amp;#39;m going to keep up with this &amp;quot;Iron Man Challenge,&amp;quot; then maybe I will save my favorite QA tools for their own post. Stay tuned!&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/projects-updates-and-qa-tools.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110167be06a860d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">catalyst</category> 
            <category domain="http://bricas.vox.com/tags/">text mode</category> 
            <category domain="http://bricas.vox.com/tags/">perl-qa</category>   
        </item> 
 
        <item>
            <title>github</title>
            <link>http://bricas.vox.com/library/post/github.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/github.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/github.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 24 Mar 2009 11:49:34 -0300</pubDate>         
            
            <description>    &lt;p&gt;Like so many before me, I have now joined the github cabal.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://github.com/bricas&quot;&gt;Check out my projects&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;One of the more interesting parts of github is their breakdown of &lt;a href=&quot;http://github.com/languages&quot;&gt;projects by language&lt;/a&gt;. At the time of this post, Perl has 6% of the projects -- tied with C, 1% more than PHP, 3% less than Python and most surprisingly 1% less than &amp;quot;Shell&amp;quot;.&lt;/p&gt;&lt;p&gt;Obviously, given the origin of github, Ruby is way in the lead with 30%. But, I have a feeling that as people get more savvy about SCM tools, especially distributed SCM tools, Perl will make a significant dent in that.&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/github.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0110181398e5860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">perl</category> 
            <category domain="http://bricas.vox.com/tags/">git</category>   
        </item> 
 
        <item>
            <title>Catalyst 5.71000</title>
            <link>http://bricas.vox.com/library/post/catalyst-571000.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(Brian)</author>
            <comments>http://bricas.vox.com/library/post/catalyst-571000.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://bricas.vox.com/library/post/catalyst-571000.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 19 Jan 2009 17:04:02 -0400</pubDate>         
            
            <description>    &lt;p&gt;Like i said back in &lt;a href=&quot;http://bricas.vox.com/library/post/catalyst-571-is-nigh.html&quot;&gt;July&lt;/a&gt;, Catalyst 5.71000 would happen before the moose-ified 5.80 gets shipped. That day is &lt;a href=&quot;http://search.cpan.org/dist/Catalys-Runtime-5.71000/&quot;&gt;here&lt;/a&gt;. Here&amp;#39;s the basics on what&amp;#39;s new since 5.7015:&lt;br /&gt;&lt;ul&gt;&amp;#160;&amp;#160;&amp;#160; &lt;li&gt;Relatively chained actions&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;&lt;li&gt;PathPrefix (I only mentioned that, oh, &lt;a href=&quot;http://bricas.vox.com/library/post/catalyst-tip-generic-base-controllers.html&quot;&gt;2 years ago&lt;/a&gt; :)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;&lt;li&gt;$c-&amp;gt;go and $c-&amp;gt;visit (they do a full dispatch to the action; this should kill the &lt;a href=&quot;http://search.cpan.org/dist/Catalyst-Plugin-SubRequest/&quot;&gt;SubRequest plugin&lt;/a&gt;)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;&lt;li&gt;Refactored component resolution (which is something else &lt;a href=&quot;http://bricas.vox.com/library/post/component-resolution-in-57100.html&quot;&gt;I worked on&lt;/a&gt;)&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;&lt;li&gt;Documentation improvements&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt;&lt;li&gt;Misc bug fixes&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;There&amp;#39;s a &lt;a href=&quot;http://cpansearch.perl.org/src/MRAMBERG/Catalyst-Runtime-5.71000/Changes&quot;&gt;full changelog&lt;/a&gt; available. You might also browse the &lt;a href=&quot;http://search.cpan.org/diff?from=Catalyst-Runtime-5.7015&amp;amp;to=Catalyst-Runtime-5.71000&quot;&gt;search.cpan diff from 5.7015 to 5.7100&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Enjoy! &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://bricas.vox.com/library/post/catalyst-571000.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00d09e62f541be2b0109d07dfe19000e?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://bricas.vox.com/tags/">catalyst</category>   
        </item> 
    </channel>
</rss>

