<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>awncorp</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.perl.org/users/awncorp/atom.xml" />
    <id>tag:blogs.perl.org,2009-11-03:/users/awncorp//216</id>
    <updated>2012-07-20T04:45:17Z</updated>
    <subtitle>A blog about the Perl programming language</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>Windows Sucks, Right? It does doesn&apos;t it?</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2012/07/windows-sucks-right-it-does-doesnt-it.html" />
    <id>tag:blogs.perl.org,2012:/users/awncorp//216.3587</id>

    <published>2012-07-20T00:25:59Z</published>
    <updated>2012-07-20T04:45:17Z</updated>

    <summary>Does Windows really suck? Yes. Is Windows also awesomesauce? Yes. Are both these statements and answers contradictions? Yes .. and No. Wait, what? I don&#8217;t understand the question. Does Windows suck, yes or no? It depends. IMHO: Yes, Windows sucks...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>Does Windows really suck? Yes. Is Windows also awesomesauce? Yes. Are both these statements and answers contradictions? Yes .. and No. Wait, what? I don&#8217;t understand the question. Does Windows suck, yes or no? It depends.</p>

<p>IMHO:</p>

<ul>
<li><p>Yes, Windows sucks as an operating system for developing in Unix-based programming languages</p></li>
<li><p>Yes, Windows has the best general Desktop user experience (of all current systems)</p></li>
</ul>

<p>So, getting to the point, context-matters. Disgruntled old IRC channel loiterers love to make generalizations about everything from politics to operating systems, regex use-cases to procedural versus object-oriented programming.</p>

<p>This is a cautionary tale for newbies, listen and do as you&#8217;re told, but also, don&#8217;t.</p>

<p>Your friendly neighborhood rebel-rouser</p>

<p>-Al</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Scribble: Yet Another Attempt To Make Perl ...</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2012/07/scribble-yet-another-attempt-to-make-perl.html" />
    <id>tag:blogs.perl.org,2012:/users/awncorp//216.3567</id>

    <published>2012-07-16T19:00:01Z</published>
    <updated>2012-07-17T00:05:36Z</updated>

    <summary>Yet another bright idea (I think) to make Perl look and act like something else .... # so basically this would load classes on-the-fly using Module::Runtime (or the like) if not already loaded, and provide simple and cute access to...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>Yet another bright idea (I think) to make Perl look and act like something else ....</p>

<p># so basically this would load classes on-the-fly using Module::Runtime (or the like) if not already loaded, and provide simple and cute access to class methods, etc. Obviously there are times (most-times) when you'd rather know about a problem at compile-time versus run-time but my brain dumps could care less about those types of particulars.</p>

<pre><code>package App::Controller::Root;

<p>use Class::Path class => 'App';</p>

<p>{<br />
    my $obj;</p>

<p>    $obj = class '/database'; # App::Database->new</p>

<p>    $obj = class '/database.connect'; # App::Database->connect</p>

<p>    $obj = class '/database.connect' => [...]; # App::Database->connect(...)</p>

<p>    $obj = class './admin'; # App::Controller::Admin->new</p>

<p>    $obj = class 'admin'; # App::Controller::Root::Admin->new</p>

<p>    $obj = class 'adminDB'; # App::AdminDB->new</p>

<p>    $obj = class 'admin-db'; # App::AdminDb->new</p>

<p>}</code></pre></p>]]>
        
    </content>
</entry>

<entry>
    <title>MongoDBI - has documentation, isa =&gt; &apos;starting point&apos;</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/12/mongodbi---has-documentation-isa-starting-point.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2584</id>

    <published>2011-12-18T18:01:27Z</published>
    <updated>2011-12-18T18:03:46Z</updated>

    <summary>Over the past few days I&apos;ve hacked together some documentation for MongoDBI to serve as a starting point. Its not extensive or complete but it enough for you to get your feet wet. -Enjoy...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>Over the past few days I've hacked together some documentation for MongoDBI to serve as a starting point. Its not extensive or complete but it enough for you to get your feet wet.</p>

<p>-Enjoy</p>]]>
        
    </content>
</entry>

<entry>
    <title>MongoDBI, ... I made it, go check it out!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/12/mongodbi-i-made-it-go-check-it-out.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2565</id>

    <published>2011-12-11T12:31:09Z</published>
    <updated>2011-12-11T12:34:18Z</updated>

    <summary>I&apos;m a little burnt out from doing client work, working on MongoDBI all last week, writing code then documentation, ... so, yup, MongoDBI, MongoDB ODM, I just started it, check it out, .. leave comments if you&apos;re not too burnt...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>I'm a little burnt out from doing client work, working on MongoDBI all last week, writing code then documentation, ... so, yup, MongoDBI, MongoDB ODM, I just started it, check it out, .. leave comments if you're not too burnt out.</p>

<p><a href="https://metacpan.org/module/AWNCORP/MongoDBI-0.0.1_01/lib/MongoDBI.pm">Click Me - Synopsis</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>NOT MY FATHER&apos;S ITERATION...</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/11/not-my-fathers-iteration.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2463</id>

    <published>2011-11-18T17:43:05Z</published>
    <updated>2011-11-18T17:43:37Z</updated>

    <summary>When developing software (or deliverables in general) ... it is a good practice to give your finished product an identifier distinguishing it from other like products (or even different variations of the same product). Developers use different version identification schemes...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>When developing software (or deliverables in general) ... it is a good practice to give your finished product an identifier distinguishing it from other like products (or even different variations of the same product).<br />
Developers use different version identification schemes e.g. date-and-time-stamps, arbitrary numbers, code names or a mixture of the aforementioned. The most common among version control numbering schemes is the 0.0.0(.000)? scheme which is broken-down as follows:</p>

<p>The version number 0.0.0 could be (is usually) interpreted as version.edition.iteration, whereas the version number 0.0.0.000 would be version.edition.iteration.build having the build identifier correspond to the number of times the code has been compiled against said version of the code.</p>

<p>If a person is a product of his/her environment, .. more specifically if a person is a derived result of some original (parents, grandparents, etc), that doesn't necessarily make the person a new version, ... a 2.0.</p>

<p>I suppose what version you are depends on how much you deviate from the original version.</p>

<p><strong>What version are you?</strong></p>]]>
        
    </content>
</entry>

<entry>
    <title>My Little Pony, You can ride err if you want.</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/11/my-little-pony-you-can-ride-err-if-you-want.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2426</id>

    <published>2011-11-11T05:30:21Z</published>
    <updated>2011-11-11T05:31:15Z</updated>

    <summary>WHO Al Newkirk - Crazy Idealistic P3rl H@ck3r WHAT Pegasus - The Module-Starter for DBIx::Class data models Pegasus is a simple scaffolding utility for RAD (rapid app development). It helps you generate a DBIx::Class data model with schema class, and...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>WHO<br />
   Al Newkirk - Crazy Idealistic P3rl H@ck3r</p>

<p>WHAT<br />
   Pegasus - The Module-Starter for DBIx::Class data models<br />
   <br />
      Pegasus is a simple scaffolding utility for RAD (rapid app development).<br />
      It helps you generate a DBIx::Class data model with schema class, and<br />
      tests. <br />
      <br />
      It basically extends the convenience of using DBIx::Class::Schema::Loader.<br />
      This devkit exists solely to help further eliminate the tedium when<br />
      creating data models using DBIx::Class.<br />
   <br />
WHEN<br />
   A developer could use Pegasus after creating the database schema at the<br />
   database. Pegasus will then generate a DBIC data model.<br />
   <br />
WHERE<br />
   Pegasus is far from ready for the CPAN, ... So where do pre-CPAN modules <br />
   attend daycare? GitHub ofcourse:<br />
   <br />
   Pegasus CLI: https://github.com/alnewkirk/Pegasus<br />
   Pegasus Example Model: https://github.com/alnewkirk/Pegasus-Example<br />
   <br />
HOW<br />
   Pegasus Scaffold Generation<br />
   <br />
      1. generate schema (using DBIC S::L)<br />
      2. generate sql scripts (deploy)<br />
      3. generate transaction layer (Pegasus)<br />
      4. generate tests (Pegasus)</p>

<p>   Usage (from the command-line)</p>

<p>   $ sqlite3 example.db < creation_script_not_inc.sql<br />
   $ pegasus setup Example::DB dbi:SQLite:./example.db root<br />
   $ pegasus run</p>

<p>WHY<br />
   Scaffolding helps us build it faster, bigger, better (some restrictions apply)<br />
   <br />
   Also,<br />
   -- Programming today is a race between software engineers striving to build<br />
      bigger and better idiot-proof programs, and the Universe trying to produce<br />
      bigger and better idiots. So far, the Universe is winning. Cit. Rich Cook</p>]]>
        
    </content>
</entry>

<entry>
    <title>Validation::Class, Mojolicious::Lite and HTML5 Form Field Rendering</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/11/validationclass-mojoliciouslite-and-html5-form-field-rendering.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2402</id>

    <published>2011-11-05T04:44:36Z</published>
    <updated>2011-11-05T04:46:12Z</updated>

    <summary> This screencast shows how easy it is to create a web application form with HTML5 form fields and client and server-side validation using Mojolicious::Lite, Validation::Class and Validation::Class::Plugin::FormFields. #cpan #perl #mojolicious...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Validation" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/92e8etzaeuU" frameborder="0" allowfullscreen></iframe><br />
This screencast shows how easy it is to create a web application form with HTML5 form fields and client and server-side validation using Mojolicious::Lite, Validation::Class and Validation::Class::Plugin::FormFields. #cpan #perl #mojolicious</p>]]>
        
    </content>
</entry>

<entry>
    <title>Validation::Class - Screencast</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/11/validationclass---screencast.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2390</id>

    <published>2011-11-03T05:48:21Z</published>
    <updated>2011-11-03T05:49:22Z</updated>

    <summary> Validation::Class Overview Screencast. In this video I explain what Validation::Class is, why it is, and what it has to offer you....</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/YCPViiB5jv0" frameborder="0" allowfullscreen></iframe></p>

<p>Validation::Class Overview Screencast. In this video I explain what Validation::Class is, why it is, and what it has to offer you.</p>]]>
        
    </content>
</entry>

<entry>
    <title>A CULMINATION OF IDEAS ... VIVA LA VALIDATION::CLASS</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/10/a-culmination-of-ideas-viva-la-validationclass.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2372</id>

    <published>2011-10-30T03:07:01Z</published>
    <updated>2011-10-30T09:25:23Z</updated>

    <summary>I has only just occurred to me that Validation::Class is not a new approach, concept or execution for me. It is merely the result of a refinement process after lots of trial-and-error (mostly error) and time. In the beginning there...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Validation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="data" label="data" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="validation" label="validation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>I has only just occurred to me that Validation::Class is not a new approach, concept or execution for me. It is merely the result of a refinement process after lots of trial-and-error (mostly error) and time.</p>

<p>In the beginning there was Oogly, then Oogly::Aagly, and finally Validation::Class. All reiterations of the same idea, each a wee bit better executed than the last with Validation::Class being (IMHO) the end-game.</p>

<p>Where are we now:</p>

<p>Validation::Class now has a pretty solid core and test coverage, a plugin system, and I just git-push'd an HTML form field rendering plugin called <a href="http://goo.gl/E81dO">Validation::Class::Plugin::FormFields</a> to be release on the CPAN after rigorous testing.</p>

<p>I'd never used terms like rigorous testing before because I've never cared about the code enough. In the past I've only ever wanted to get it the concept down and out-of-my-head. I believe this adds to the reason this iteration is alot more solid, ... because I'm becoming alot more solid as a developer.</p>

<p>-- Al</p>]]>
        
    </content>
</entry>

<entry>
    <title>Validation::Class - Completely Rewritten</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/10/validationclass---completely-rewritten.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.2345</id>

    <published>2011-10-24T22:36:10Z</published>
    <updated>2011-10-25T00:27:40Z</updated>

    <summary>I have completely rewritten Validation-Class using Moose. The new Validation::Class is better documented and well-tested. I created Validation-Class for a variety of reasons including but not limited to the fact that I wanted/needed a data validation library that was as...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Validation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cpan" label="cpan" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="data" label="data" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="input" label="input" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="library" label="library" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="validation" label="validation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>I have completely rewritten Validation-Class using Moose. The new Validation::Class is better documented and well-tested. I created Validation-Class for a variety of reasons including but not limited to the fact that I wanted/needed a data validation library that was as reusable as possible, syntactically easy to define, and didn't care much about context. </p>

<p>This spawned a new way of looking at data validation, using a class as an application's  firewall representing the rules of the data allowed to pass through it, not bound to a use-case and flexible.</p>

<p>I encourage you to check it out and please leave feedback:</p>

<p> Validation-Class has been shipped, Moosified since 2.0.0:<br />
Github: <a href="https://github.com/alnewkirk/Validation-Class-Moose">https://github.com/alnewkirk/Validation-Class-Moose</a><br />
CPAN: <a href="https://metacpan.org/module/Validation::Class">https://metacpan.org/module/Validation::Class</a></p>

<div style="width:100%" id="__ss_9632123"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/_anaio/validation-class" title="Validation Class" target="_blank">Validation Class</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9632123" width="100%" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/_anaio" target="_blank">_anaio</a> </div> </div>]]>
        
    </content>
</entry>

<entry>
    <title>MovableType is the Ugly Duckling of CMS&apos;</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/07/movabletype-is-the-ugly-duckling-of-cms.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.1946</id>

    <published>2011-07-06T18:19:23Z</published>
    <updated>2011-07-06T18:20:22Z</updated>

    <summary>... and thats all I have to say about that....</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>... and thats all I have to say about that.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Outsource Emailing</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2011/06/outsource-emailing.html" />
    <id>tag:blogs.perl.org,2011:/users/awncorp//216.1910</id>

    <published>2011-06-27T17:11:08Z</published>
    <updated>2011-06-27T17:12:46Z</updated>

    <summary>No one like addressing the email aspect of an application because of the many nuances involved ... yada yada. ... I&apos;ve been nursing the idea of outsourcing email from within my SaaS applications by delegating the sending and tracking of...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p><strong>No one like addressing the email aspect of an application</strong> because of the many nuances involved ... yada yada. ... I've been nursing the idea of outsourcing email from within my SaaS applications by delegating the sending and tracking of email using APIs of popular email campaign service providers e.g. CampaignMonitor, MailChimp and MadMimi. </p>

<p>Although I vowed not to work over the weekend, I ended up creating WWW::MadMimi for the Perl community which currently live at <a href="https://github.com/alnewkirk/WWW-MadMimi">GitHub</a>.</p>]]>
        
    </content>
</entry>

<entry>
    <title>Scrappy - Automated Full Service Web Spider</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2010/10/scrappy---automated-full-service-web-spider.html" />
    <id>tag:blogs.perl.org,2010:/users/awncorp//216.1103</id>

    <published>2010-10-11T15:21:14Z</published>
    <updated>2010-10-11T16:08:52Z</updated>

    <summary>For the past two/three months (on and off) I have been developing a web spider framework that would bring together many web scraping concepts and methodologies and combine them in one library (package). That framework is Scrappy which is a...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="css" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="scraper" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="spider" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="web scraper" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="www mechanize" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="xpath" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="spiderscraperhavestercrawlerscrappy" label="spider scraper havester crawler scrappy" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>For the past two/three months (on and off) I have been developing a web spider framework that would bring together many web scraping concepts and methodologies and combine them in one library (package). That framework is Scrappy which is a play on the term (scraper happy or happy scraper), not to be misunderstood as a port of Scrapy the Python Scraper Framework. </p>

<p>For the sake of time I will just highlight some of the features that I think are innovative and add value.</p>

<p>&#9829; <strong>Scrappy can be used as DSL or OOP (even interchangeably).</strong> e.g.<br />
[oop]<br />
use Scrappy;<br />
my $spidy = Scrappy->new;<br />
$spidy->crawl($url, { 'a' => sub { print 'I found this link', shift->href; } });</p>

<p>or</p>

<p>[dsl]<br />
use Scrappy qw/:syntax/;<br />
crawl $url, { 'a' => sub { print 'I found this link', shift->href; } };</p>

<p>&#9829; <strong>Pick a User-Agent, Any User-Agent</strong>, e.g.<br />
use Scrappy qw/:syntax/;<br />
user_agent random_ua;</p>

<p>or</p>

<p>user_agent random_ua 'firefox'; # firefox only<br />
user_agent random_ua 'firefox', 'linux'; # firefox on linux only</p>

<p>&#9829; <strong>XPath or Grab and Zoom</strong><br />
Most spider writers know that if you need to grab an element with precision accuracy, especially when the HTML is not marked up with alot of CSS selectors, then XPath is your best friend. Sometime you may not want a mix of XPaths and CSS selectors through you code so instead use the grab and zoom technique to get closer to that particular element.</p>

<p>my $block = grab 'div', ':all'; #grab<br />
my $zoom = grab 'span', ':all', $block->html; #zoom</p>

<p>&#9829; <strong>Scrappy has URL pattern matching (like web apps)</strong>, e.g.<br />
get 'http://localhost/tags/websites';</p>

<p>if (match '/tags/:tag') {<br />
     print param('tag');<br />
}</p>

<p>&#9829; <strong>More and More Variables Automatically</strong><br />
Scrappy has a convenient stash object for sharing data throughout various actions, and forked processes, has a param method for accessing the current page's querystring or matched URL patterns. e.g.</p>

<p>&#9829; <strong>Scrappy is automated Out-of-the-Box</strong><br />
Scrappy can be written manually with you specifying which pages to crawl and scrape from, or you can use the crawl method to automatically crawl pages in the queue and apply specific actions on specific pages. The crawlers method provides the same level of automation but increases the processing time by forking the action processing operations. In short, you get a site crawler and the ability to execute multiple processes.</p>

<p>&#9829; <strong>Session Handling</strong><br />
Session handling can be easily turned on and by default stores all cookies encountered in the session file by domain.</p>

<p>&#9829; <strong>Pausing</strong><br />
Pausing is where you can set a range in second for your spider to wait between requests in an attempt to fake human interaction.</p>

<p>&#9829; <strong>Proxy Support</strong></p>

<p>Get It On CPAN:<br />
<a href="http://search.cpan.org/dist/Scrappy/lib/Scrappy.pm">http://search.cpan.org/dist/Scrappy/lib/Scrappy.pm</a></p>

<p>Follow Scrappy on GitHub:<br />
<a href="http://github.com/alnewkirk/Scrappy">http://github.com/alnewkirk/Scrappy</a></p>

<p>Also, a previous article written on Scrappy:<br />
<a href="http://ana.im/press/2010/09/scrappy/">http://ana.im/press/2010/09/scrappy/</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Project E.T. - I need your help...</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2010/10/project-et---i-need-you-help.html" />
    <id>tag:blogs.perl.org,2010:/users/awncorp//216.1087</id>

    <published>2010-10-05T16:46:38Z</published>
    <updated>2010-10-12T03:43:13Z</updated>

    <summary>Project E.T. is a tech mentoring initiative that I intend to spearhead and that I hope will be adopted internationally. This page serves merely as a whiteboard for concepts and theories. Project E.T. which is an acronym for Each one,...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>Project E.T. is a tech mentoring initiative that I intend to spearhead and that I hope will be adopted internationally. This page serves merely as a whiteboard for concepts and theories. Project E.T. which is an acronym for  Each one, Teach one expresses the fundamental idea behind this conceptualization whereby designers, developers, internet marketers, database administrators, programmers, and other manner of technical, creative and/or entrepreneurial persons make it their responsibility to mentor another on a one-on-one or small group basis.</p>

<p><a href="http://goo.gl/5SnV">Read More</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Perl across OS&apos; (The Shebang)</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/awncorp/2010/01/perl-across-os-the-shebang.html" />
    <id>tag:blogs.perl.org,2010:/users/awncorp//216.193</id>

    <published>2010-01-18T21:22:46Z</published>
    <updated>2010-01-19T04:21:17Z</updated>

    <summary>The shebang line is the first line of the Perl script denoted by the #! which is the first two characters on the first line of the program which specifies the path to the script&apos;s interpreter, in the case of...</summary>
    <author>
        <name>awnstudio</name>
        <uri>http://ana.io/</uri>
    </author>
    
        <category term="OS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="SheBang" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Windows" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="perlwindowsosshebangalnewkirkawnstudioawncorp" label="Perl Windows OS Shebang Al Newkirk awnstudio awncorp" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/awncorp/">
        <![CDATA[<p>The shebang line is the first line of the Perl script denoted by the #! which is the first two characters on the first line of the program which specifies the path to the script's interpreter, in the case of Perl it specifies the path to the Perl executable (interpreter). Perl has been successfully ported to Windows and is available in various flavors, e.g. Vanilla Perl, Strawberry Perl, Chocolate Perl and ActiveState Perl. This is the necessary newbie intro, now for the actual topic...</p>

<p>The shebang line really presents a problem when developers using Windows collaborate on scripts with non-Windows developers. All Perl scripts that are executed indirectly will (should) have a shebang line. Most Perl hackers code in a Linux (-like) environment which means their shebang line will look something like this:</p>

<p>#!/usr/bin/perl<br />
#!/usr/bin/env perl</p>

<p>Windows Perl hackers shebang line would look something like this:</p>

<p>#!C:\Perl\bin\perl.exe<br />
#!C:\strawberry\perl\bin\perl.exe</p>

<p>As you can see, this would present a problem if the Linux Perl hacker sent me (using Windows) the script, or more commonly, I fetched the script from a version control repository, updated the script using my shebang, made some modifications, then pushed the changes back to the repo only for the Linux user to have to repeat the same pattern.</p>

<p>The answer is a little know hack for WIndows whereby the path to Perl is mocked under the Windows file system by copying the Perl installation to a `usr` folder in the root drive's folder, e.g. copy C:\Perl to C:\usr:</p>

<p>Now, #!/usr/bin/perl in the script is treated the same as #!C:/usr/bin/perl.exe. The only problem with this is that when modules are updated or installed using CPAN, the copied instance of Perl is not updated, so instead of re-copying your Perl installation each time you update or install a new module, instead make a symbolic link. Wait, how do you create a symbolic link with Windows, why the same way you do in Linux, with one exception. First you need GNUWin32 (http://gnuwin32.sourceforge.net/), this will give you tools like grep, find, ls and what we want, ln.</p>

<p>cd C:\<br />
ln -s C:\strawberry\perl\ usr</p>

<p>We just created a symbolic link to our Strawberry Perl installation. With the aid of GNUWin32, we now have a psuedo-Linux-like Perl programming environment armed and ready.</p>]]>
        
    </content>
</entry>

</feed>
