<?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>John Napiorkowski’s Perl Development Blog</title>
        <link>http://jjnapiorkowski.vox.com/library/posts/page/1/</link>
        <description>Talking about Perl Web Application Development using Catalyst, Moose and DBIx::Class</description>
        <language>en</language>
        <generator>Vox</generator>
        <lastBuildDate>Thu, 12 Nov 2009 06:23:53 -0800</lastBuildDate>
        <copyright>Copyright 2009</copyright>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>  
 
        <item>
            <title>How Are You Using $c-&gt;forward (or qw/go visit detach etc/)?</title>
            <link>http://jjnapiorkowski.vox.com/library/post/how-are-you-using-c-forward-or-qwgo-visit-detach-etc.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/how-are-you-using-c-forward-or-qwgo-visit-detach-etc.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/how-are-you-using-c-forward-or-qwgo-visit-detach-etc.html?_c=feed-rss-full</guid> 
            <pubDate>Thu, 12 Nov 2009 06:23:53 -0800</pubDate>         
            
            <description>    &lt;p&gt;While trying to finish up my thoughts of the followup to &amp;quot;&lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/does-anyone-else-hate-the-stash.html&quot;&gt;Does Anyone Else Hate the Stash?&lt;/a&gt;&amp;quot; one issue that I&amp;#39;m been grappling with is the relationship between using the stash as secondary global namespace and the way I&amp;#39;ve seen people use the stash as a sort of messaging system to methods called via $c-&amp;gt;forward and the like.&amp;#160; I guess part of what troubles me here is how doing so seems to bust encapsulation, using the stash as a sort of &amp;#39;pass by reference&amp;#39; system that reminds more of Perl 4 then where we are at now.&amp;#160; I&amp;#39;ve seen code that forwarded to a method, where the target method expected certain things in the stash but with no interface to really tell you want was expected.&amp;#160; That code would forward to other code that expected different things in the stash.&amp;#160; And all along all these forwards, stuff gets dropped in and mangled in the stash so by the time it returns from the initial -&amp;gt;forward I really have no idea what is in the stash anymore.&lt;/p&gt;&lt;p&gt;Is this a problem or am I just being too controlling :)&amp;#160; Tell me!&lt;/p&gt;&lt;p&gt;So, tell me what you are using forward for, and how you use (or don&amp;#39;t use) the stash when doing so.&amp;#160; I won&amp;#39;t pollute your thoughts on the matter with mine until I&amp;#39;ve heard from you first :) &lt;/p&gt;&lt;p&gt;And another thing while I&amp;#39;m typing, it seems like all my most popular blog posts contain the word &amp;#39;Hate&amp;quot; in the title.&amp;#160; I may be concerned.&lt;/p&gt;&lt;p&gt;Thanks!&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/how-are-you-using-c-forward-or-qwgo-visit-detach-etc.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123ddbc70f5860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">ironman</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">stash</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">catalyst</category>   
        </item> 
 
        <item>
            <title>Darkpan =&gt; CPAN Service (part two)</title>
            <link>http://jjnapiorkowski.vox.com/library/post/darkpan-cpan-service-part-two.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/darkpan-cpan-service-part-two.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/darkpan-cpan-service-part-two.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 03 Nov 2009 08:01:52 -0800</pubDate>         
            
            <description>    &lt;p&gt;A few months ago, when discussing how to support the &amp;#39;darkpan&amp;#39; (what Perl programmers call the vast body of perl code floating around the internet or in private companies that we know nothing about) I suggested leveraging the vast CPAN distribution system as a sort of continuous integration/build service which we could offer as a for pay service to companies using Perl.&amp;#160; This would have the dual benefit of encouraging corporations to package up their perl code properly (ie as&amp;#160; CPAN module with a Makefile.PL, etc) and could help raise money to sponser Perl development. &lt;/p&gt;&lt;p&gt;What I&amp;#39;m thinking about would be similar to a ruby only service I noticed: &lt;a href=&quot;http://runcoderun.com&quot;&gt;http://runcoderun.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Check that out and let me know what you think.&amp;#160; What kind of services would the &amp;#39;quasipan&amp;#39; be required to offer in order to entice companies into paying for it?&amp;#160; For example, what do you think of the idea of being able to build a EC2 or other cloud image type from a base OS that intergrate any given set of CPAN and Darkcpan modules?&amp;#160; Like, &amp;quot;I want a virtualbox VM with Perl 5.10.1 on debian with git, postgresql and Catalyst preinstalled, although with my private repo of proprietary code?&amp;quot; &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://jjnapiorkowski.vox.com/library/post/darkpan-cpan-service-part-two.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123ddb865fc860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">cpan</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">cloud</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">darkpan</category>   
        </item> 
 
        <item>
            <title>Would You Find this Moose Role Useful? (Part Two)</title>
            <link>http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful-part-two.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful-part-two.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful-part-two.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 02 Nov 2009 12:44:51 -0800</pubDate>         
            
            <description>    &lt;p&gt;Well Perl Ironman Readers,&lt;/p&gt;&lt;p&gt;Based on the public and private comments from the &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful.html&quot;&gt;previous blog&lt;/a&gt; I decided to go ahead and write something (I hope) cpan worthy.&amp;#160; It should show up shortly &lt;a href=&quot;http://search.cpan.org/dist/MooseX-Role-BuildInstanceOf&quot;&gt;over here&lt;/a&gt; but until then you can &lt;a href=&quot;http://github.com/jjn1056/MooseX-Role-BuildInstanceOf&quot;&gt;check it ou&lt;/a&gt;t on &lt;a href=&quot;http://www.github.com/&quot;&gt;github&lt;/a&gt; (or clone / offer improvements)&lt;/p&gt;&lt;p&gt;I&amp;#39;m not in love with the name.&amp;#160; If you have a better idea please speak up, but I don&amp;#39;t like to let naming issues stop&amp;#160; me from publishing. &lt;/p&gt;&lt;p&gt;Thanks!&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful-part-two.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123ddb7f1de860b?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">moose</category>   
        </item> 
 
        <item>
            <title>Would You Find this Moose Role Useful?</title>
            <link>http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 27 Oct 2009 19:03:08 -0700</pubDate>         
            
            <description>    &lt;p&gt;I find as part of my normal course of writing &lt;a href=&quot;http://www.perl.org/&quot;&gt;perl&lt;/a&gt; &lt;a href=&quot;http://moose.perl.org&quot;&gt;moose&lt;/a&gt; based code, I do the following quite often:&lt;/p&gt;
    
    
    


    
    
    


    
    
    

&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00fa9675c31f00020123ddca5bef860c&quot; at:format=&quot;auto&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-auto embed-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;width: 500px;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item embed-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-embed&quot;&gt;
        
                &lt;iframe class=&quot;enclosure-iframe&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://a7.vox-data.com/6a00fa9675c31f00020123ddca5bef860c-html&quot; style=&quot;width: 500px; height: 500px;&quot;&gt;&lt;/iframe&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;Sample Gist&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;

Basically I tend to use the above with a core application class that is delegating work to several other classes.&amp;#160; In the above case, my general Library Class contains a Album class (presumable your library would hold an album and perhaps several other things).&amp;#160; In my Application logic I&amp;#39;m going to be calling methods on Album which have been properly normalized to the class which attempt to encapsulate the problem domain it attempts to solve.&lt;/p&gt;&lt;p&gt;I find the above form, although a bit verbose, to give me a lot of flexibility, particularly when I bring the application model into &lt;a href=&quot;http://catalyst.perl.org/&quot;&gt;Catalyst&lt;/a&gt; via something like &lt;a href=&quot;http://search.cpan.org/dist/Catalyst-Model-Adaptor/&quot;&gt;Catalyst::Model::Adaptor&lt;/a&gt;, which let&amp;#39;s me define all the args in the global catalyst configuration.&amp;#160; Also, for testing, it&amp;#39;s nice to be able to override the default classes, swapping in say a Mock Object or similar for the purposes of test cases.&lt;/p&gt;&lt;p&gt;In general use this construct commonly to avoid hardcoding all the connections between the elements of my applications.&lt;/p&gt;&lt;p&gt;Usage might be like:&lt;/p&gt;
    
    
    


    
    
    


    
    
    

&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00fa9675c31f00020123ddb56c8f860b&quot; at:format=&quot;auto&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-auto embed-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;width: 500px;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item embed-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-embed&quot;&gt;
        
                &lt;iframe class=&quot;enclosure-iframe&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://a7.vox-data.com/6a00fa9675c31f00020123ddb56c8f860b-html&quot; style=&quot;width: 500px; height: 500px;&quot;&gt;&lt;/iframe&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;Usage&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;

Although I as mentioned, typically I instantiate this via &lt;a href=&quot;http://catalyst.perl.org/&quot;&gt;Catalyst&lt;/a&gt; or as part of a more complicated application using an i&lt;a href=&quot;http://en.wikipedia.org/wiki/Inversion_of_control&quot;&gt;nversion of control container&lt;/a&gt; like &lt;a href=&quot;http://search.cpan.org/dist/Bread-Board/&quot;&gt;Bread::Board&lt;/a&gt;.&amp;#160; &lt;div&gt;&lt;br /&gt;However it can lead to a little too much verbosity in core application classes, particularly if I have a bunch of these.&amp;#160; It&amp;#39;s a type of repeated line noise which hides the actual functionality of the class.&amp;#160; So I&amp;#39;m considering creating a &lt;a href=&quot;http://search.cpan.org/dist/MooseX-Role-Parameterized/&quot;&gt;Moose Parameterized Role&lt;/a&gt; to build these for me, something that would work like (as a minimal case):&lt;br /&gt;&lt;br /&gt;
    
    
    


    
    
    


    
    
    


    
    
    

&lt;div at:enclosure=&quot;asset&quot; at:xid=&quot;6a00fa9675c31f00020123f174238e860f&quot; at:format=&quot;auto&quot; at:align=&quot;center&quot;
    class=&quot;enclosure enclosure-center enclosure-auto embed-enclosure&quot; 
     style=&quot;text-align: center;&quot;&gt;
&lt;div class=&quot;enclosure-inner&quot;
    
        style=&quot;width: 500px;&quot;
    &gt;
    &lt;div class=&quot;enclosure-list&quot;&gt;
        &lt;div class=&quot;enclosure-item embed-asset last&quot;&gt;
    
            &lt;div class=&quot;enclosure-embed&quot;&gt;
        
                &lt;iframe class=&quot;enclosure-iframe&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://a6.vox-data.com/6a00fa9675c31f00020123f174238e860f-html&quot; style=&quot;width: 500px; height: 500px;&quot;&gt;&lt;/iframe&gt;
        
            &lt;/div&gt;
            &lt;div class=&quot;enclosure-meta&quot;&gt;
                &lt;div class=&quot;enclosure-asset-name&quot;&gt;Possible syntax&lt;/div&gt;
            &lt;/div&gt;
    
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;!-- end enclosure --&gt;

&lt;br /&gt;Useful?&amp;#160; What, if anything should I do to make this &lt;a href=&quot;http://cpan.org/&quot;&gt;CPAN&lt;/a&gt; worthy?&amp;#160; Or are the requirements of this oft repeated task unique enough as to make a usable code generator unfeasible?&amp;#160; Or am I the only one doing this (I don&amp;#39;t need vanity CPAN modules...)&lt;br /&gt;&lt;br /&gt;If you say &amp;quot;Yes&amp;quot;, you also owe me a reasonable name (naming things I am not good at...)&lt;br /&gt;&lt;br /&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://jjnapiorkowski.vox.com/library/post/would-you-find-this-moose-role-useful.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123ddde0770860d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">moose</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">cpan</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">ironman</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">catalyst</category>   
        </item> 
 
        <item>
            <title>The Diffusion of Technical Knowledge and the Crisis of the Technology Worker</title>
            <link>http://jjnapiorkowski.vox.com/library/post/the-diffusion-of-technical-knowledge-and-the-crisis-of-the-technology-worker.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/the-diffusion-of-technical-knowledge-and-the-crisis-of-the-technology-worker.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/the-diffusion-of-technical-knowledge-and-the-crisis-of-the-technology-worker.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 05 Oct 2009 18:57:57 -0700</pubDate>         
            
            <description>    &lt;p&gt;One of the things that I personally
find exciting about working in IT is how quickly the field grows and
changes.  Seemingly overnight vast bodies of knowledge and hard
earned abilities can be supplanted.  Five years ago, the job that
took half the day and the coordination of a group of skilled workers
can today be churned out by an intern using some free tool like
Google Analytics.  

&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;The biggest downside to this constant
leveling trend is how often I, as a technology professional, am
challenged to prove the value of my work, my salary and my knowledge.
 Thus the crisis we, as professionals in this field, face.  It is a
crisis on two fronts.  The first is the relentless loss of value to
the skills we worked hard to master due to shifts in technology.  The
second is in the fact that most workers today more or less have to
learn some degree of technology expertise in order to do their job
well, and the best and brightest of our colleagues can often
accumulate significant skills.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;This challenge is brought to us in many
ways, but often it is brought to us when we are least expecting it
and am not really ready to answer it.  Sometimes its appropriate, as
during a job interview, or when reviewing or auditing code.  There is
definitely a right time to challenge your practices, least you fall
into a dangerous rut.  On the other hand, I&amp;#39;d like to reach out to my
colleagues across the various departmental boundaries and point out
it can be unproductive to start challenging technology decisions in
an inappropriate forum.  We all have a stake in finishing a project
and a domain of action for accomplishing that.  I would never start
questioning legal matters at a direct reports meeting, and I ask that
you refrain from speculating that this all could have been more
easily done using VBA and Excel, just because you heard so from a
friend of a friend.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;This is why I would wish that more
companies would break down the jealously guarded walls between IT and
the rest of the company.  Technology meetings should never be limited
to the workers in a given department.  In return, for opening the
door, I ask that my non IT colleagues try to show some sensitivity
and realize that often your off the cuff suggestions can sound to me
like you are saying my skill and ability are no longer needed.  Often
what I hear is that I&amp;#39;m going to be forced to work with yet another
ill conceived technology directive.  For this sensitivity is needed
all around.&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin-bottom: 0in;&quot;&gt;So, this is a Perl blog and you are
wondering what&amp;#39;s the Perl angle.  Given the diffusion of technical
ability, from technology guru down to mail room working, I believe
that Perl is an ideal language for sharing at all these levels.  Perl
is ideally suited for most problem domains and most levels of
technical ability.  Perl has been used by guru&amp;#39;s to build
sophisticated websites, used by system administrators to smooth the
daily troubles, and used by neophytes to bang out a quick CGI
front-end to a local database.  Its a language comfortable with the
ambiguity and with the interdisciplinary nature of IT as it exists in
the wild today.  Perl Programming embraces the world as it is.  As
such it&amp;#39;s an ideal choice and nearly always my first choice. 
&lt;/p&gt;
 &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/the-diffusion-of-technical-knowledge-and-the-crisis-of-the-technology-worker.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123ddbeb06c860c?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl programming</category>   
        </item> 
 
        <item>
            <title>Does Anyone Else Hate the Stash?</title>
            <link>http://jjnapiorkowski.vox.com/library/post/does-anyone-else-hate-the-stash.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/does-anyone-else-hate-the-stash.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/does-anyone-else-hate-the-stash.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 29 Sep 2009 06:48:09 -0700</pubDate>         
            
            <description>    &lt;p&gt;When I first started using Perl Catalyst for web application development I felt appalled by how sloppy it seemed to pass important application data around in a secondary global namespace, the Catalyst Stash.&amp;#160; I guess it&amp;#39;s context global, but it stills seems messy to me in that it seems to poorly replicate features already built into Perl, and for which Perl can help you use correctly.&amp;#160; I mean, a global is bad enough, but if you use strict and warnings you will at least get warned if you abuse a global, such as if you try to use it before it&amp;#39;s initialized and all that.&amp;#160; But the Stash is basically a Hash, and it&amp;#39;s prone to typo issues, etc., basically all the evil stuff that I tried to banish from my Perl applications years ago.&lt;/p&gt;&lt;p&gt;It&amp;#39;s one of those things that seems fundamentally busted to me, yet it works well enough for simple to medium cases.&amp;#160; It just feels to me like it decouples control way too much, and in my experience the stash becomes a sort of no man&amp;#39;s land.&lt;/p&gt;&lt;p&gt;I think it&amp;#39;s one of the three things that bother me about Catalyst (with the -&amp;gt;forward/go/visit/detach versus method call ambiguity and the way the default TT view guesses a template based on the action name being the other two things that work acceptably enough but still manage to bother me quite a bit).&lt;/p&gt;&lt;p&gt;Thoughts?&amp;#160; Am I being too controlling here?&amp;#160; Should I just go with the flow or are there others out there that are also bothered by this?&lt;br /&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/does-anyone-else-hate-the-stash.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020123f165bb99860f?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">ironman</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">catalyst</category> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">mvc</category>   
        </item> 
 
        <item>
            <title>First build of 5.10.1 and local::lib</title>
            <link>http://jjnapiorkowski.vox.com/library/post/first-build-of-5101-and-locallib.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/first-build-of-5101-and-locallib.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/first-build-of-5101-and-locallib.html?_c=feed-rss-full</guid> 
            <pubDate>Mon, 28 Sep 2009 08:48:24 -0700</pubDate>         
            
            <description>    &lt;p&gt;The latest Perl localizes very nicely.&amp;#160; Following these &lt;a href=&quot;http://oylenshpeegul.vox.com/library/post/perl-5101.html&quot;&gt;very simple instructions&lt;/a&gt; I was able to install it into my home directory.&amp;#160; I then modified my .bash_profile to search the local perl bin area:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[jnapiorkowski@perlbuilder ~]$ cat .bash_profile &lt;br /&gt;# .bash_profile&lt;/p&gt;&lt;p&gt;# Get the aliases and functions&lt;br /&gt;if [ -f ~/.bashrc ]; then&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; . ~/.bashrc&lt;br /&gt;fi&lt;/p&gt;&lt;p&gt;# User specific environment and startup programs&lt;br /&gt;PATH=$HOME/bin:$HOME/local/bin:$PATH&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;In this case I added &amp;quot;$HOME/loca/bin&amp;quot; so that search path lookups find my Perl over the system Perl.&amp;#160; I then used &amp;quot;http://github.com/jjn1056/catalyst-app-example-locallibapp/tree&amp;quot; to setup my fully &lt;a href=&quot;http://search.cpan.org/dist/local-lib/&quot;&gt;local::lib&lt;/a&gt; deployments of my various catalyst applications.&amp;#160; Everything worked as expected.&lt;/p&gt;&lt;p&gt;Result?&amp;#160; Localized Perl that is separate from you system Perl, plus local::lib for each deployed application, keeping everything nice and cleanly separated.&amp;#160; Now when I need to deploy this to stage and then to production I can simple use rsync against my home directory and target my stage or production boxes (since my build box is a template for stage and production).&amp;#160; Combined with &lt;a href=&quot;http://search.cpan.org/dist/CPAN-Mini/&quot;&gt;CPAN::mini&lt;/a&gt; I could even have my own local cpan server with &amp;#39;approved&amp;#39; versions of modules.&amp;#160; Personally since I try to help fix stuff when it breaks, I try to grab the newest of everything, but if you are on a more conservative setup, looking at your own minicpan might be valuable.&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://jjnapiorkowski.vox.com/library/post/first-build-of-5101-and-locallib.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f000201240b61fbcc860e?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl local-lib</category>   
        </item> 
 
        <item>
            <title>Higher Order Perl Book PDF Version, and other Free Perl Books</title>
            <link>http://jjnapiorkowski.vox.com/library/post/higher-order-perl-book-pdf-version-and-other-free-perl-books.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/higher-order-perl-book-pdf-version-and-other-free-perl-books.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/higher-order-perl-book-pdf-version-and-other-free-perl-books.html?_c=feed-rss-full</guid> 
            <pubDate>Wed, 09 Sep 2009 07:31:45 -0700</pubDate>         
            
            <description>    &lt;p&gt;I know this has been reported elsewhere, but the very excellent, &lt;a href=&quot;http://hop.perl.plover.com/book/&quot;&gt;&amp;quot;Higher Order Perl&amp;quot;, is available as a free download&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;This is definitely worth buying if you can spare the cash, or can convince your boss to pay for it.&amp;#160; However if you can&amp;#39;t, or if you just really want something you can read on your notebook or mobile phone while riding the train, this pdf is very high quality.&lt;/p&gt;&lt;p&gt;If you haven&amp;#39;t heard about this book, it&amp;#39;s a fantastic exploration of how powerful and beautiful Perl syntax can be.&amp;#160; I know people often charge that Perl is &amp;#39;read only&amp;#39; or &amp;#39;line noise&amp;#39;.&amp;#160; Taking a quick look here should silence that criticism.&lt;/p&gt;&lt;p&gt;If you are trying to learn Perl and looking for other free books, &lt;a href=&quot;http://www.perl.org/books/library.html&quot;&gt;check this page out&lt;/a&gt;.&amp;#160; Or, check the general &lt;a href=&quot;http://learn.perl.org/&quot;&gt;Learning Perl page&lt;/a&gt;.&amp;#160; Or just ask me what to do in the comments section below :)&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/higher-order-perl-book-pdf-version-and-other-free-perl-books.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f0002011016cebd78860d?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl programming hop learning-perl</category>   
        </item> 
 
        <item>
            <title>RFC: Catalyst::TraitFor::Model::DBIC::Schema::AutoDeploy?</title>
            <link>http://jjnapiorkowski.vox.com/library/post/rfc-catalysttraitformodeldbicschemaautodeploy.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/rfc-catalysttraitformodeldbicschemaautodeploy.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/rfc-catalysttraitformodeldbicschemaautodeploy.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 08 Sep 2009 08:15:06 -0700</pubDate>         
            
            <description>    &lt;p&gt;One of my personal goals for this year is to reduce some of the boilerplate code I have to write in order to get working with my applications.&amp;#160; This effort to ease Perl Programming is inspired by great projects like &lt;a href=&quot;http://search.cpan.org/dist/Moose&quot;&gt;Moose&lt;/a&gt;, which really allows me to get focused on the job at hand and not worry about framework and setup.&amp;#160; One area that I&amp;#39;d like to see improved relates to the effort involved in setting up development and testing databases.&amp;#160; My recent &lt;a href=&quot;http://www.cpan.org&quot;&gt;cpan&lt;/a&gt; release of &lt;a href=&quot;http://search.cpan.org/dist/Test-DBIx-Class/&quot;&gt;Test::DBIx::Class&lt;/a&gt; is my swing at the latter; this blog is my outline and RFC for the former.&lt;/p&gt;&lt;p&gt;One of my goals for &lt;a href=&quot;http://search.cpan.org/dist/Test-DBIx-Class/&quot;&gt;Test::DBIx::Class&lt;/a&gt; is to make it trivial to deploy, seed and cleanup testing databases.&amp;#160; Currently we have the ability to automatically deploy &lt;a href=&quot;http://search.cpan.org/dist/DBIx-Class/&quot;&gt;DBIC&lt;/a&gt; based Schemas to SQLite, MySQL and Postgresql.&amp;#160; This ability is built on top of &lt;a href=&quot;http://search.cpan.org/dist/DBIx-Class/&quot;&gt;DBICs&lt;/a&gt; deployment code as well as some other bits from &lt;a href=&quot;http://www.cpan.org&quot;&gt;CPAN&lt;/a&gt;.&amp;#160; This makes the job of deploying, setting up and testing as easy as:&lt;br /&gt;&amp;#160;&amp;#160; &amp;#160;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; use Test::More;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; use Test::DBIx::Class qw(People);&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; fixtures_ok &amp;#39;basic&amp;#39;, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#39;basic fixtures installed&amp;#39;;&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; is_fields &amp;#39;first_name&amp;#39;, People, [qw/john vanessa vincent/],&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#39;Got expected first names&amp;#39;;&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; done_testing();&lt;/p&gt;&lt;p&gt;Which will automatically create a database (using SQLite by default, but you can override and deploy to MySql or Postgresql as well), install the &amp;#39;basic&amp;#39; fixtures (from a configuration file, but you can &amp;#39;inline&amp;#39; create statements easily as well, see the docs for more) and test the schema resultset called &amp;#39;People&amp;#39; to see if that set contains the asked for first_names.&amp;#160; This reduces a lot of boilerplate code for deploying the database, checking it, etc (and we&amp;#39;ve all written 10 half baked version of that, right :) ) and offers some helpers for actually testing the data.&amp;#160; For example, the &amp;#39;is_fields&amp;#39; will ignore sorting order by default, comparing just the actual set.&amp;#160; The above test assertion would probably have to be rewritten as:&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; is_deeply [sort map { $_-&amp;gt;first_name } $schema-&amp;gt;resultset(&amp;#39;People&amp;#39;)-&amp;gt;all], &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; [qw/john vanessa vincent/], &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#39;Got expected first names&amp;#39;;&lt;/p&gt;&lt;p&gt;If you wanted to duplicate most of it&amp;#39;s functionality, but there might be edge cases missed, like date fields and columns that inflate, weird differences in null handling, etc.&amp;#160; And that&amp;#39;s for a very simple case where you are testing a single field.&amp;#160; If your test is more involved the syntax becomes increasingly verbose.&lt;/p&gt;&lt;p&gt;One of the things I really wanted for this module is to make it very easy to create a test database not only for SQLite, but for at least Postgresql and Mysql.&amp;#160; Both these goals are helped along by the cpan distributions &lt;a href=&quot;http://search.cpan.org/dist/Test-mysqld&quot;&gt;Test::mysqld&lt;/a&gt; and &lt;a href=&quot;http://search.cpan.org/dist/Test-postgresql&quot;&gt;Test::postgresql&lt;/a&gt; which autodetect the presence of Mysql or Postgresql (they need to be installed, but don&amp;#39;t need to be running) and creates a temporary database installation in /tmp or the directory of your choice.&amp;#160; These databases live until the final tests complete and are then automatically cleaned up, unless you want to keep them, using a configuration setting or an %ENV variable.&lt;/p&gt;&lt;p&gt;This grants you a lot of benefits when you are trying to speed development along.&amp;#160; You don&amp;#39;t need to login and create the testing database, worry about setting up all the correct permissions, etc.&amp;#160; If you are working in a multi developer company (like most of us) you probably have to create testing databases for everyone, unless you are willing to deal with the chaos of everyone&amp;#39;s tests banging into each other.&amp;#160; This method basically just creates a database for the programmer on the fly, reducing that effort considerable.&amp;#160; Finally, since each temporary database is given it&amp;#39;s own area to live, this allows you to run prove in parallel using the --jobs (or -j) option.&amp;#160; Usually you can&amp;#39;t run database tests in parallel, since each test will essentially be contending for a single testing database instance, using classic methods.&amp;#160; Running parallel test jobs can greatly speed completing your tests, even with the overhead needed to instantiate a test database.&lt;/p&gt;&lt;p&gt;Now that I feel pretty comfortable with the code functionality, I am looking to factor out some core bits and use it to build a similar tool for development databases.&amp;#160; This would be a trait loadable by newer versions of &lt;a href=&quot;http://search.cpan.org/dist/Catalyst-Model-DBIC-Schema/&quot;&gt;Catalyst::Model::DBIC::Schema&lt;/a&gt; that would autodetect your target database, instantiate and deploy one as needed.&amp;#160; This way it would make it much easier to just get going with development, particularly if you are following a methodology were each developer has a personal development database.&lt;/p&gt;&lt;p&gt;I&amp;#39;d like your feedback on the idea, and request comments on the features you&amp;#39;d like to see most.&amp;#160; For example, I am currently working on supporting Replication in &lt;a href=&quot;http://search.cpan.org/dist/Test-DBIx-Class/&quot;&gt;Test::DBIx::Class&lt;/a&gt;, since if you are using replication in production then your test cases really should run against a replicated setup.&amp;#160; This may not be needed in development.&amp;#160; On the other hand we might want our development databases to support the versioning system built into DBIC.&amp;#160; Since in test I generally build the database from scratch each time, I don&amp;#39;t care about versioning so much.&lt;/p&gt;&lt;p&gt;My imagination tells me we&amp;#39;d want something called&amp;#160; “Catalyst::TraitFor::Model::DBIC::Schema::AutoDeploy” which would add a configuration option to your &lt;a href=&quot;http://search.cpan.org/dist/Catalyst-Model-DBIC-Schema/&quot;&gt;Catalyst::Model::DBIC::Schema&lt;/a&gt; called &amp;#39;target_driver&amp;#39; or similar so you could specify SQLite, MySQL or Postgresql, as well as whether you wanted to preserve the database between running the application server and so forth.&amp;#160; I also figure by default to built the database files in $home/share/data, or similar, (again looking for suggestions on the best default).&lt;/p&gt;&lt;p&gt;This would be intended primarily for development, but would probably also be useful for people deploying catalyst applications to shared hosting setups.&amp;#160; This would allow one to basically deploy everything for an application to a single directory root.&lt;/p&gt;&lt;p&gt;Thoughts? &lt;br /&gt;&lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/rfc-catalysttraitformodeldbicschemaautodeploy.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020110180ee628860e?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description> 
            <category domain="http://jjnapiorkowski.vox.com/tags/">perl ironman dbix-class test-dbix-class mysql postgresql catalyst</category>   
        </item> 
 
        <item>
            <title>Easy FUSE Filesystems</title>
            <link>http://jjnapiorkowski.vox.com/library/post/easy-fuse-filesystems.html?_c=feed-rss-full</link>   
            <author>nobody@vox.com(John Napiorkowski)</author>
            <comments>http://jjnapiorkowski.vox.com/library/post/easy-fuse-filesystems.html?_c=feed-rss-full</comments>
            <guid isPermaLink="true">http://jjnapiorkowski.vox.com/library/post/easy-fuse-filesystems.html?_c=feed-rss-full</guid> 
            <pubDate>Tue, 25 Aug 2009 06:11:05 -0700</pubDate>         
            
            <description>    &lt;p&gt;&lt;a href=&quot;http://fuse.sourceforge.net/&quot;&gt;FUSE&lt;/a&gt; is an excellent system for mounting various types of storage devices to the filesystem in user runmode time.&amp;#160; Now, Perl Programming makes it trivial to create and mount new storage types using this framework.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://search.cpan.org/dist/MooseX-Runnable-Fuse/&quot;&gt;http://search.cpan.org/dist/MooseX-Runnable-Fuse/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This is a &lt;a href=&quot;http://search.cpan.org/MooseX-Declare&quot;&gt;MooseX::Declare&lt;/a&gt; friendly toolkit for building custom FUSE modules, and functions as an ease of use wrapper on top of the comprehesive &lt;a href=&quot;http://search.cpan.org/dist/Fuse/&quot;&gt;FUSE&lt;/a&gt; &lt;a href=&quot;http://cpan.org&quot;&gt;CPAN&lt;/a&gt; distribution.&lt;/p&gt;&lt;p&gt;Props to all the involved authors!&lt;br /&gt; &lt;/p&gt;    &lt;p style=&quot;clear:both;&quot;&gt; 
    &lt;a href=&quot;http://jjnapiorkowski.vox.com/library/post/easy-fuse-filesystems.html?_c=feed-rss-full#comments&quot;&gt;Read and post comments&lt;/a&gt;   |   
    &lt;a href=&quot;http://www.vox.com/share/6a00fa9675c31f00020110168c8ed5860c?_c=feed-rss-full&quot;&gt;Send to a friend&lt;/a&gt; 
&lt;/p&gt;
 
            </description>   
        </item> 
    </channel>
</rss>

