<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://chris.prather.org/rss.xml">
<title>The Room</title>
<link>http://chris.prather.org/rss.xml</link>
<description></description>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://chris.prather.org/traits-vs-roles.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/the-tpf.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/patches-welcome.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/vote-transparent.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/fixing-a-hole.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/with-a-little-help-from-my-friends.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/ipad-hating-has-jumped-the-shark.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/no-vendors.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/been-there-done-that.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/brewing-up-a-storm.md.html" />
  <rdf:li rdf:resource="http://chris.prather.org/shot-on-sight.md.html" />
 </rdf:Seq>
</items>
</channel>
<item rdf:about="http://chris.prather.org/traits-vs-roles.md.html">
<title>Traits vs Roles</title>
<link>http://chris.prather.org/traits-vs-roles.md.html</link>
<description>&#x3C;h1 id=&#x22;traitsvsroles&#x22;&#x3E;Traits vs Roles&#x3C;/h1&#x3E;

&#x3C;p&#x3E;In natural languages lot of objects have multiple names. For example I
am known on CPAN and IRC as &#x3C;code&#x3E;perigrin&#x3C;/code&#x3E;, I am know to my friends and
family as Chris, to the TSA as David, and to my children as Daddy. Each
of these different names illuminate a different context or role that the
object, me, is thought of or used in.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Recently there was a debate or argument about the concept of Traits vs
Roles in &#x3C;code&#x3E;#moose&#x3C;/code&#x3E;. This has been a issue for a &#x3C;a href=&#x22;http://stackoverflow.com/questions/1093506/how-do-roles-and-traits-differ-in-moose/&#x22;&#x3E;good long
while&#x3C;/a&#x3E;. Ultimately the answer is that Traits are another name
for Roles. Just as I am both &#x3C;code&#x3E;perigrin&#x3C;/code&#x3E; and Chris, Traits and Roles both
refer to the same concept but with different context or conceptual
baggage allowed.&#x3C;/p&#x3E;

&#x3C;p&#x3E;But this isn&#x27;t really a satisfying answer for a programmer. Two names
for a single concept isn&#x27;t very efficient, especially if the
differentiation isn&#x27;t very concrete. For example Chris vs &#x3C;code&#x3E;perigrin&#x3C;/code&#x3E; is
(in theory) cleanly delineated by Offline vs Online. I think a little
history will help explain the reason that these two names exist and are
adopted by the Moose community.&#x3C;/p&#x3E;

&#x3C;p&#x3E;First the concept of Roles is generally based upon a paper 
&#x3C;a href=&#x22;http://scg.unibe.ch/research/traits&#x22;&#x3E;&#x3C;strong&#x3E;Traits &#xE2;&#x80;&#x94;Composable Units of Behavior&#x3C;/strong&#x3E;&#x3C;/a&#x3E;. For this paper they created an
implementation of what we call Roles for Smalltalk 80, and named them
Traits. So outside of the Perl world, Roles are Traits. This is the
first point of confusion.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Next, like many good things in Perl these days, Traits and Roles started
in Perl with Perl6. Roles in Perl6 are effectively identical to Perl5,
however Perl6 has a specialized concept under the name &#x27;traits&#x27;.
According to &#x3C;a href=&#x22;http://perlcabal.org/syn/S06.html#Properties_and_traits&#x22;&#x3E;Synopsis 06&#x3C;/a&#x3E;:&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;Compile-time properties are called &#x22;traits&#x22;.The is NAME (DATA)
     syntax defines traits on containers and subroutines, as part of
     their declaration:&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;constant $pi is Approximated = 3;   # variable $pi has Approximated trait

my $key is Persistent(:file&#x26;lt;.key&#x26;gt;);

sub fib is cached {...}
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;If you follow the idea that in Perl6 everything is an object, these
traits at compile time modify a given instance. In the examples above
the &#x3C;code&#x3E;$pi&#x3C;/code&#x3E; instance of the constant class is modified to have a
Approximated trait that is set to 3, the &#x3C;code&#x3E;$key&#x3C;/code&#x3E; object is made
persistent to a &#x3C;code&#x3E;.key&#x3C;/code&#x3E; file, and the subroutine instance &#x3C;code&#x3E;fib&#x3C;/code&#x3E; is given
the &#x3C;code&#x3E;cached&#x3C;/code&#x3E; trait for presumably memoization.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Synopsis 6 goes on to state:&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;Properties are predeclared as roles and implemented as mixins--see
     S12.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;So at some level in Perl6 Traits are Roles that are applied to
instances. This is the second point of confusion.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Finally in the evolution of Moose we, that is the people in #moose at
the time, originally tended to only refer to Traits to Roles that
applied to metaclass instances. Traits in this case were things like
MooseX::Storage&#x27;s &#x27;DoNotSerialize&#x27;. This trait you can apply to a
attribute and that attribute is skipped when MooseX::Storage does it&#x27;s
serialization routine. These traits are used all over, MooseX::POE is
implemented as just such a trait. Mostly they do their work hidden in
the Meta Object Protocol.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The logic behind calling these things Traits was two fold, one if you
consider the concept of a trait from perl6 it is conceptually similar to
a Role applied to an instance. and since Metaobjects in Moose are
themselves just instances that define things like Classes, Attributes,
Methods, and Roles the idea of a Role that applies instances being
called a Trait is small step. At the time we didn&#x27;t have a lot of places
where people &#x3C;em&#x3E;generally&#x3C;/em&#x3E; applied Roles to non-metaobjects instances.
This was before MooseX::Traits was written, before
MooseX::Object::Pluggable (the basis for Devel::REPLs plugin system),
before a lot of things we have now.&#x3C;/p&#x3E;

&#x3C;p&#x3E;So where do we stand now? We have this concept, &#x22;a composable unit of
behavior&#x22;, that has two names: Roles and Traits. Is this confusing? Yes,
somewhat. It&#x27;s messy and confusing to new people.&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E; Is it useful? yes,
somewhat. Just like having multiple names for myself is useful to help
differentiate context&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;, having different names for subtly different
contexts is an &#x22;Advanced Feature&#x22;. Like so much in Perl you can choose
not to use it and refer to everything as a Role, or a Trait, or a
&#x22;composable unit of behavior&#x22;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-08-11T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;Confusing the context of when to use which name is always
confusing, as is using the wrong name in the wrong context. Try being
woken up at 3am with a loud obnoxious brit referring to you by your IRC
name! One of the more confusing moments in my life.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;I know that if someone on the phone is calling me &#x3C;code&#x3E;perigrin&#x3C;/code&#x3E; they
are talking about Perl, or if they&#x27;re calling me &#x3C;code&#x3E;David&#x3C;/code&#x3E; they&#x27;ve never
actually spoken to me before and got my name from some official document
somewhere.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-08-11T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/the-tpf.md.html">
<title>The Perl Foundation</title>
<link>http://chris.prather.org/the-tpf.md.html</link>
<description>&#x3C;h1 id=&#x22;theperlfoundation&#x22;&#x3E;The Perl Foundation&#x3C;/h1&#x3E;

&#x3C;p&#x3E;Gabor Szabo recently &#x3C;a href=&#x22;http://blogs.perl.org/users/gabor_szabo/2010/07/what-would-you-like-tpf-to-do.html&#x22;&#x3E;asked on his blog&#x3C;/a&#x3E; what we want to see out of
&#x3C;a href=&#x22;http://news.perlfoundation.org/&#x22;&#x3E;The Perl Foundation&#x3C;/a&#x3E;. This was in response to the issues raised in
comments on his &#x3C;a href=&#x22;http://news.perlfoundation.org/2010/06/hague-grant-application-perl-e.html&#x22;&#x3E;grant request&#x3C;/a&#x3E;. I&#x27;d made a comment in there that I
figured I should pull some of ideas from my comments there out into a
blog post in response Gabor&#x27;s question.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Obviously much of the comments are specifically a response to the
particular grant proposal. However there are important pieces in there
about what I think the future of the TPF could be.&#x3C;/p&#x3E;

&#x3C;h2 id=&#x22;workshops&#x22;&#x3E;Workshops&#x3C;/h2&#x3E;

&#x3C;p&#x3E;The TPF current helps with much of the infrastructure and financial
support for running the Three Perl Workshops in North America as well as
YAPC::NA. I know this because I&#x27;ve been involved with organizing a
workshop for the last 3 years (Frozen Perl initially and then Perl
Oasis), as well as writing the winning bid for YAPC::NA 2011 from
&#x3C;a href=&#x22;http://dahut.pm.org&#x22;&#x3E;Dahut.pm&#x3C;/a&#x3E; and leading the organization efforts there&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The conferences committee has put together excellent documentation for
helping plan a workshop or YAPC. Depending on the level of commitment
you want from them, they help process payments and write checks for the
venues etc.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I would love to see them continue and expand on this process. This is an
&#x22;easy win&#x22; for them because many workshops are self-funding. I would
love to see those of us like Pittsburgh, Minneapolis and Orlando be
called on to help give advice to new groups looking to host their own
workshop or write a YAPC bid. I know I was actually moved by the amount
of support I got at YAPC after the bid was announced from former
organizers Dan Wright, Casey West, Heath Bair, and Rob Kinyon to name a
few&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;. These conferences are a &#x3C;em&#x3E;steal&#x3C;/em&#x3E; compared to the equivalent in
other communities, anything we can do to make them bigger and better
should be a priority.&#x3C;/p&#x3E;

&#x3C;p&#x3E;One of the pain points of being a conference organizer is fund raising.
Each set of organizers must individually contact all the different
companies who may or may not sponsor and give them a pitch. This is not
only highly inefficient, it annoys the companies that sponsor. I think
that one possible thing that the Perl Foundation could take on here
would be to take on some of this work. If we had someone at the TPF
level who could contact a list of donors and help work out some basic
sponsorship each year for the different workshops it would smooth the
process unmeasurably. These donors would be sponsoring the workshops
directly, that wouldn&#x27;t change, but they would be coordinated across
&#x3C;em&#x3E;all&#x3C;/em&#x3E; of the events the TPF is responsible for so we can help balance
funds and grow the number and quality of events.&#x3C;/p&#x3E;

&#x3C;h2 id=&#x22;grants&#x22;&#x3E;Grants&#x3C;/h2&#x3E;

&#x3C;p&#x3E;The Perl Foundation currently issues grants quarterly. In fact the 2010
Q3 Call for Proposals was just &#x3C;a href=&#x22;http://news.perlfoundation.org/2010/07/2010q3-call-for-grant-proposal.html&#x22;&#x3E;announced&#x3C;/a&#x3E;. Grants are for $500 to
$3000 in funding and help targeted projects get done. This is how the
&#x3C;a href=&#x22;http://search.cpan.org/dist/Moose&#x22;&#x3E;&#x3C;code&#x3E;Moose&#x3C;/code&#x3E; documentation&#x3C;/a&#x3E; was written.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The TPF traditionally has had a poor record when it comes to grants.
Looking at the &#x3C;a href=&#x22;http://github.com/rjbs/tpf-grant-history&#x22;&#x3E;grant history&#x3C;/a&#x3E; an embarassing number are failed.
However they are increasing their success rate. Dave Rolsky has an
excellent &#x3C;a href=&#x22;http://blog.urth.org/2010/07/do-tpf-grants-de-motivate.html&#x22;&#x3E;post&#x3C;/a&#x3E; discussing the nature of grants and motivation.
Let&#x27;s just say that for some people they can provide the proper
incentive to perform good tasks for the community. Having them is in my
mind a net benefit.&#x3C;/p&#x3E;

&#x3C;h2 id=&#x22;events&#x22;&#x3E;Events&#x3C;/h2&#x3E;

&#x3C;p&#x3E;Much more recently, and closer to the nature of Gabor&#x27;s grant proposal
are the TPF involvement in non-TPF events. These events aren&#x27;t
specifically non-Perl but are simply not one of the official events that
the TPF helps sponsor. These would include OSCON as well as many of the
events listed &#x3C;a href=&#x22;http://www.socialtext.net/perl5/index.cgi?events&#x22;&#x3E;on the wiki&#x3C;/a&#x3E;. Gabor has been doing an amazingly good
job of organizing people to attend these and help spread the Modern Perl
movement beyond the echo chamber.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I personally think that the TPF should elevate this process to equal to
the Conferences and Grants. Those two efforts have official committees
and budgets to allocate to proposed efforts, and so should the Events
group. The budget would go toward whatever is necessary to attend an
event (SWAG, travel expenses, booth/space rental), and be allocated at
the discretion of the committee.&#x3C;/p&#x3E;

&#x3C;h2 id=&#x22;conclusion&#x22;&#x3E;Conclusion&#x3C;/h2&#x3E;

&#x3C;p&#x3E;As you can see the ideas here are a consolidation of the things the TPF
are already doing. I think that right now the TPF needs to organize
itself and find it&#x27;s own identity and purpose. This is an introspective
process fundamentally but can be done in consultation with the
community&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E;. Only once they are successful at the things they are
&#x3C;em&#x3E;currently&#x3C;/em&#x3E; doing will they be able to properly focus on a new endeavor.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-06-27T15:08:03&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;I am &#x3C;em&#x3E;deeply&#x3C;/em&#x3E; indebted to the many many people who have
volunteered to help with YAPC::NA, and who have contributed to Perl
Oasis. For the help the TPF gives, nothing would happen if I didn&#x27;t have
wonderful people getting things done.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;These aren&#x27;t the only people to volunteer their support and
wisdom, they&#x27;re just the ones I know are former organizers.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;The Perl Community is the main customer of the Perl Foundation. We
are the people who benefit most from their activities. &#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-06-27T15:08:03Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/patches-welcome.md.html">
<title>&#x22;Patches Welcome&#x22; or Volunteers vs Hobbists</title>
<link>http://chris.prather.org/patches-welcome.md.html</link>
<description>&#x3C;h1 id=&#x22;patcheswelcomeorvolunteersvshobbyists&#x22;&#x3E;&#x22;Patches Welcome&#x22; or Volunteers vs Hobbyists&#x3C;/h1&#x3E;

&#x3C;p&#x3E;There has been a strong meme going around that I&#x27;ve not been paying
attention to until today. I&#x27;m not sure my opinion really matters here
but I thought I&#x27;d add my perspective which doesn&#x27;t seem to be
represented well in the discussion.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I&#x27;ve been paid as a Perl developer for a little over a decade now. I&#x27;ve
been involved in various degrees in the Perl Community for a little less
than a decade. I have been what I consider actively involved in the Perl
community for only about 3-4 years. In that time I&#x27;ve watched &#x3C;a href=&#x22;http://axkit.org/&#x22;&#x3E;some
projects&#x3C;/a&#x3E; I&#x27;ve been involved with flounder and effectively die,
and &#x3C;a href=&#x22;http://moose.perl.org&#x22;&#x3E;other projects&#x3C;/a&#x3E; not. I&#x27;ve worked for 
&#x3C;a href=&#x22;http://reuters.com&#x22;&#x3E;very large companies&#x3C;/a&#x3E; with a DarkPAN problem, and for 
&#x3C;a href=&#x22;http://iinteractive.com&#x22;&#x3E;very small companies&#x3C;/a&#x3E; that contribute heavily to CPAN. I am currently 
running &#x3C;a href=&#x22;http://tamarou.com&#x22;&#x3E;another&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;All of this is background to say &#x22;I&#x27;ve been around the block a few times&#x22;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;So the current &#x22;Patches Welcome&#x22; &#xE2;&#x80;&#xA6; discussion &#xE2;&#x80;&#xA6; seems to be based around
the idea that CPAN contributors should treat their volunteer work as if
it were equal to their day jobs. The analogy made is that of a volunteer
Firefighter, or Nurse, or the extreme example the Peace Corps&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I think the analogy to Volunteers like this breaks down. Those jobs are
never treated as hobbies. A CTO I used to work for is a volunteer
firefighter. He will never get a call and say &#x22;you know, I just ate a
big plate of ribs, I&#x27;m gonna sit this one out&#x22;. I&#x27;m sure if he did, the
rest of the squad would say &#x22;Dude, don&#x27;t come back.&#x22; (If they didn&#x27;t, I
would have serious qualms about moving into that community).&#x3C;/p&#x3E;

&#x3C;p&#x3E;Anything I&#x27;ve uploaded to CPAN that I wasn&#x27;t directly paid to do was
done because I love doing it, recreationally. It&#x27;s a hobby. RelaxNG
support for XML::Toolkit won&#x27;t happen until I am in the mood. If you
would like it to not be a hobby for me, I have an hourly rate that is
I&#x27;m told very reasonable&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;. I hate saying that, but it&#x27;s true.&#x3C;/p&#x3E;

&#x3C;p&#x3E;As a hobby FOSS programming is a team sport. &#x22;Patches Welcome&#x22; is an
invitation to play.&#x3C;/p&#x3E;

&#x3C;p&#x3E;If you ran into Tony Hawk&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E; skating at the Brooklyn Banks, would you tell
him his flip kick was a little off or ask him to help you with your pop
shove-it? Yeah, me neither. But if we were to do so, and he replied &#x22;hey
I&#x27;m busy right now, why don&#x27;t you show me what you mean&#x22;? Even if he
phrased it like &#x22;show it, hot shot&#x22; that shouldn&#x27;t automatically translate
to &#x22;screw you, I&#x27;m TONY HAWK!&#x22;; it&#x27;s challenge to participate.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I&#x27;ve never skated in my life, but if a professional skateboarder&#x3C;a href=&#x22;#fn:4&#x22; id=&#x22;fnref:4&#x22; class=&#x22;footnote&#x22;&#x3E;4&#x3C;/a&#x3E;
offered to work with me if I were to show up and try. I would. If I
can&#x27;t or don&#x27;t try to participate, does that reflect on them?&#x3C;/p&#x3E;

&#x3C;p&#x3E;&#x22;Patches Welcome&#x22; is an invitation to play. It may be said during a
period of frustration or exhaustion. It may be said to people who don&#x27;t
know the first thing about the game. It may even be said by people who
mean to say &#x22;screw you, I&#x27;m STEVAN LITTLE!&#x22;. That doesn&#x27;t
make it any less of an invitation.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I have already &#x3C;a href=&#x22;http://chris.prather.org/with-a-little-help-from-my-friends.md.html&#x22;&#x3E;started discussing&#x3C;/a&#x3E; what we as a community can do
about increasing the number of professional opportunities available&#x3C;a href=&#x22;#fn:6&#x22; id=&#x22;fnref:6&#x22; class=&#x22;footnote&#x22;&#x3E;5&#x3C;/a&#x3E;.
If you want to discuss how people should be more Professional about
their recreation, you really need to look at the definitions of
&#x3C;a href=&#x22;http://www.google.com/search?aq=f&#x26;amp;sourceid=chrome&#x26;amp;ie=UTF-8&#x26;amp;q=define:+professional&#x22;&#x3E;those&#x3C;/a&#x3E; &#x3C;a href=&#x22;http://www.google.com/search?hl=en&#x26;amp;safe=off&#x26;amp;q=define:+recreation&#x26;amp;btnG=Search&#x22;&#x3E;terms&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The thing of it is, discussing this is unprofessional. Claiming you know
best what something someone else means is unprofessional. Claiming that
your time (recreational or not) is somehow holy or too valuable to share is
unprofessional. So let&#x27;s move on and do something else with our time.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I&#x27;m not expecting to even be contacted by a professional
skateboarder. I&#x27;m pretty sure ours is the only industry where not
responding to complaints in a blog some where somehow makes us less
professional too.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-05-20T19:08:24&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;At least nobody is asking CPAN contributors to move to Mongolia
for two years. Though it is wonderful if you want to
&#x3C;a href=&#x22;http://www.peacecorps.gov&#x22;&#x3E;volunteer&#x3C;/a&#x3E; to do so. They have more
requirements than CPAN for contribution though.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;If you would like to Volunteer as a FOSS programmer, please
contact me I can definitely use unpaid professional labour right now.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;Doesn&#x27;t have to be Tony Hawk. Elissa Steamer, Bucky Lasek, Jason
Lee if you&#x27;re reading this I&#x27;ll happily bust my ass on a board at your
direction as well. I would love to learn to kick-flip before I die, but
I suspect being able to ollie is a required skill I lack.&#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:4&#x22;&#x3E;&#x3C;p&#x3E;You can replace skateboarding with any profession here too, I&#x27;m
pretty sure if Christian Jacobs were to ask me to sit in with the
Aquabats because I said that he&#x27;d gotten sloppy on &#x3C;em&#x3E;Charge!&#x3C;/em&#x3E; with his
horn section, even though I&#x27;m not a professional musician, you&#x27;d bet
your ass I&#x27;d be sitting in with the band. Same thing for Mr. Gaiman and
his loose plotting (although I adore his prose style).&#x3C;a href=&#x22;#fnref:4&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:6&#x22;&#x3E;&#x3C;p&#x3E;One of Tamarou&#x27;s explicit goals is to grow the number of Perl
related business opportunities in the world.&#x3C;a href=&#x22;#fnref:6&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-05-20T19:08:24Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/vote-transparent.md.html">
<title>Vote Transparent</title>
<link>http://chris.prather.org/vote-transparent.md.html</link>
<description>&#x3C;h1 id=&#x22;votetransparent&#x22;&#x3E;Vote Transparent&#x3C;/h1&#x3E;

&#x3C;p&#x3E;&#x3C;a href=&#x22;http://shadowcat.co.uk/blog/matt-s-trout/iron-man-lost?colour=transparent&#x22;&#x3E; 
 &#x3C;img src=&#x22;http://img.skitch.com/20100519-jy3h8chcxmpcei36bnfkdcp6fm.jpg&#x22; /&#x3E; 
&#x3C;/a&#x3E;&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-05-20T01:21:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;Mostly because I don&#x27;t think he&#x27;ll actually &#x3C;em&#x3E;do&#x3C;/em&#x3E; it.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-05-20T01:21:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/fixing-a-hole.md.html">
<title>Fixing a Hole </title>
<link>http://chris.prather.org/fixing-a-hole.md.html</link>
<description>&#x3C;h1 id=&#x22;fixingahole&#x22;&#x3E;Fixing a Hole&#x3C;/h1&#x3E;

&#x3C;p&#x3E;Recently &#x3C;code&#x3E;xenoterracide&#x3C;/code&#x3E; mentioned an issue he had with &#x3C;a href=&#x22;http://xenoterracide.blogspot.com/2010/04/my-new-lovehate-relationship-with.html&#x22;&#x3E;Dist::Zilla&#x3C;/a&#x3E;
which he solved in a &#x3C;a href=&#x22;http://xenoterracide.blogspot.com/2010/04/distzilla-vs-xenoterracide.html&#x22;&#x3E;clever way&#x3C;/a&#x3E;&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;. I had been thinking about this
problem for a while myself. &#x3C;code&#x3E;RJBS&#x3C;/code&#x3E; generates solid code, and
nobody agree&#x27;s 100% on everything I respect him enough to give
serious thought to his solutions to problems. So it was surprising to me
that I had been looking at &#x3C;code&#x3E;Dist::Zilla&#x3C;/code&#x3E; for a while and found something
about it unnerving that I couldn&#x27;t put my finger upon. Then shortly
before &#x3C;code&#x3E;xenoterracide&#x3C;/code&#x3E;&#x27;s blog post I came to the same realization he
had. &#x3C;/p&#x3E;

&#x3C;p&#x3E;&#x3C;code&#x3E;Dist::Zilla&#x3C;/code&#x3E; is designed to help the author develop faster, but it
(&#x3C;strikeout&#x3E;inadvertently I&#x27;m sure&#x3C;/strikeout&#x3E;) disenfranchises people who might contribute a
patch by raising the bar for contribution. There are extra hoops you
have to jump through to contribute. More modules from CPAN you need
before you can work on the modules from CPAN you need.&#x3C;/p&#x3E;

&#x3C;p&#x3E;We have this problem with &#x3C;code&#x3E;Moose&#x3C;/code&#x3E;, even though it uses
&#x3C;code&#x3E;Module::Install&#x3C;/code&#x3E;. To hack on Moose you need roughly ten extra modules
installed that aren&#x27;t required to run Moose. That is assuming you want
to properly test the results. I ran into this tonight when I was setting
up a smoker for Moose. My smoker couldn&#x27;t just checkout the git repo and
start smoking it needed at the very least &#x3C;code&#x3E;Module::Install&#x3C;/code&#x3E; and
&#x3C;code&#x3E;Module::Install::AuthorRequires&#x3C;/code&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The solution I found was to simply embrace the problem.
&#x3C;code&#x3E;Task::SDK::Moose&#x3C;/code&#x3E; is on it&#x27;s way to CPAN. This is a module that will
install all of the modules you need to hack on &#x3C;code&#x3E;Moose&#x3C;/code&#x3E; or &#x3C;code&#x3E;Class::MOP&#x3C;/code&#x3E;
straight from the repository. To paraphrase &#x3C;a href=&#x22;http://thinkexist.com/quotation/here-s_to_alcohol-the_source_of-and_answer_to-all/338899.html&#x22;&#x3E;Homer Simpson&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;Here&#x27;s to CPAN: the cause of and solution to all of Perl&#x27;s problems.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;I&#x27;d like to thank &#x3C;code&#x3E;doy&#x3C;/code&#x3E; for vetting the modules I included and making
sure &#x3C;code&#x3E;Class::MOP&#x3C;/code&#x3E; was covered.&#x3C;/p&#x3E;

&#x3C;h2 id=&#x22;update2010-05-14&#x22;&#x3E;Update 2010-05-14&#x3C;/h2&#x3E;

&#x3C;p&#x3E;Talking with RJBS on IRC today, it was a carefully considered decision.&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;[A]ll of my dists can be tested with &#x22;prove -lr t&#x22; and I accept patches
   against the cpan tarball. [B]ut in the end, I decided that 99.9% of my
   code was written by me, and contributions were few and far between;
   making things much easier for me and somewhat harder for everyone
   else benefitted me&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;In no way did I wish to express that RJBS was being sloppy. He is an
excellent developer, and I use more than a few of his modules every day.
&#x3C;code&#x3E;Dist::Zilla&#x3C;/code&#x3E; is part of &#x3C;code&#x3E;Task::Kensho&#x3C;/code&#x3E; because I think it makes
creating a distribution simpler; something we want more people to do.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-05-12T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;I honestly think in this case &#x22;clever&#x22; is not the right approach.
One of the problems I have seen contributing to
&#x3C;a href=&#x22;http://cpanmin.us&#x22;&#x3E;cpanminus&#x3C;/a&#x3E; is that there is generated code in the
repository, making it unclear which files I should patch.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-05-12T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/with-a-little-help-from-my-friends.md.html">
<title>With a Little Help From My Friends</title>
<link>http://chris.prather.org/with-a-little-help-from-my-friends.md.html</link>
<description>&#x3C;h1 id=&#x22;withalittlehelpfrommyfriends&#x22;&#x3E;With a Little Help From My Friends&#x3C;/h1&#x3E;

&#x3C;p&#x3E;So I haven&#x27;t blogged much in the last month. Now I blog twice in one
evening&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;. I&#x27;ve been incredibly busy on something that it turns out is
the topic for this post.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Today coming across the Iron Man feed was G&#xC3;&#xA1;bor Szab&#xC3;&#xB3;&#x27;s post about
&#x3C;a href=&#x22;http://szabgab.com/blog/2010/05/1273732754.html&#x22;&#x3E;&#x22;Cooperation among Perl freelancers&#x22;&#x3C;/a&#x3E;. This hit pretty close to home for
me since last September or so I started working full time for 
&#x3C;a href=&#x22;http://tamarou.com&#x22;&#x3E;my own company&#x3C;/a&#x3E;, which is at this stage operating as a small Perl consultancy.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I&#x27;ve spent the last six months (when I wasn&#x27;t working on client code)
learning as much as I could about freelancing, consulting, and running a
business in general&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;. I can fully appreciate what G&#xC3;&#xA1;bor is talking
about when it comes to fluctuating demand. The problem of scalability
he&#x27;s pointing too happens to larger businesses as well as smaller ones.
It seems that either you have too much work, or not enough, never
in between.&#x3C;/p&#x3E;

&#x3C;p&#x3E;One of the common refrains I heard at my last job was how hard it was to
find good Perl talent, which always struck me as odd when I hear from
people how hard it is to find a good Perl job. As a consultancy it
seemed to me I would be in an ideal position to bridge that gap. I
participate in the community, I (generally) know when what I consider
good Perl talent is available. I&#x27;ve been lucky a few times and have been
informed when a good Perl job is available, and have been able to match
people up. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Often however the problem isn&#x27;t that the talent and the jobs aren&#x27;t
available, it&#x27;s that they&#x27;re not available in the same place or at
exactly the right times. One of Tamarou&#x27;s contracts is with a company
that for business reasons cannot hire telecommuters directly. We solve
that problem for them. This is I believe what &#x3C;code&#x3E;mst&#x3C;/code&#x3E; called a &#x3C;a href=&#x22;http://www.shadowcat.co.uk/blog/matt-s-trout/hire-a-dev-shop-too/&#x22;&#x3E;dev shop&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;If you haven&#x27;t already read &#x3C;code&#x3E;mst&#x3C;/code&#x3E;&#x27;s blog about it go do that now. I&#x27;ll
wait. Done? Did you read the &#x3C;a href=&#x22;http://bhargreaves.com/2010/03/hire-dev-shop-other-never/&#x22;&#x3E;post he linked to&#x3C;/a&#x3E;? No? Go read that
too. Good. I&#x27;ve been reading and thinking about stuff like this for the
last year&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E;, and all of the stories are roughly the same. Hiring a
freelancer or a consultant isn&#x27;t easy. The rules are the same as hiring
in house. They need to be high quality, professional, and a good fit
with your company&#x27;s goals and fill the places you&#x27;re missing perfectly.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Not all consultancies are created equal either, Shadowcat are a very
technically sophisticated company. They know Catalyst, DBIx::Class, and
Perl intimately. At Tamarou we&#x27;re focusing on embedding people to really
learn your business domain. Different approaches because we&#x27;re different
companies, and you know what ... at some point I will say to a client of
mine that we really need to hire Shadowcat to solve some problem we&#x27;re
having, I hope Shadowcat will do the same.&#x3C;/p&#x3E;

&#x3C;p&#x3E;This is I think where the power of G&#xC3;&#xA1;bor&#x27;s idea is. Figuring out as a
community where our skills lie, and helping each other find the best fit
to solve our problems. We need to as a community talk about what we need
and expect from each other and helping each other find the right fit.
I&#x27;m not quite sure what form this should take, except I&#x27;ve recently
started building a list of Dev Shops, Consultancies and Freelancers in
the Perl space, I welcome people adding to &#x3C;a href=&#x22;http://github.com/perigrin/perl-consultants&#x22;&#x3E;the list&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-05-12T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;You can tell it&#x27;s the same evening because apparently I&#x27;m
recycling Beatles songs for post titles. I swear I&#x27;m not even listening
to the Beatles right now.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;Which is convient as my wife has had her own 
&#x3C;a href=&#x22;http://superawesomecool.org&#x22;&#x3E;small business&#x3C;/a&#x3E; explode with activity in the last month.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;I&#x27;m planning on looking, reading, and doing stuff like this for at
least the next ten years. That&#x27;s how long it took me to be confident
enough at Perl to consider myself good with Perl.&#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-05-12T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/ipad-hating-has-jumped-the-shark.md.html">
<title>iPad Hating has Jumped the Shark</title>
<link>http://chris.prather.org/ipad-hating-has-jumped-the-shark.md.html</link>
<description>&#x3C;h1 id=&#x22;ipadhatinghasjumpedtheshark&#x22;&#x3E;iPad Hating has Jumped the Shark&#x3C;/h1&#x3E;

&#x3C;p&#x3E;In his recent post &#x3C;a href=&#x22;http://www.tbray.org/ongoing/When/201x/2010/04/02/Wrong-About-the-iPad&#x22;&#x3E;Wrong About the iPad&#x3C;/a&#x3E;, Tim Bray attempts to rebut
a quote from Marc Benioff.&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;But then Benioff goes on to say &#xE2;&#x80;&#x9C;It&#xE2;&#x80;&#x99;s not about text, or even
  animation, it&#xE2;&#x80;&#x99;s about video.&#xE2;&#x80;&#x9D; That is so, so, wrong. Intelligence is a
  text-based application. Benioff isn&#xE2;&#x80;&#x99;t stupid but that remark is.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;I read Tim Bray because he is a well educated and interesting writer.
Tim Bray isn&#x27;t stupid, but that rebuttal is. I have a university degree
in recorded intelligence (Technical Communication)&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;, one of the
things my professors made &#x3C;em&#x3E;abundantly&#x3C;/em&#x3E; clear was that intelligence is
not bound to text. One professor in fact pointed out that at one point
in time no less than Plato himself decried the growing reliance upon
text as a substitute for Wisdom.&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;Socrates: I cannot help feeling, Phaedrus, that writing is
unfortunately like painting; for the creations of the painter have
the attitude of life, and yet if you ask them a question they
preserve a solemn silence. And the same may be said of speeches. You
would imagine that they had intelligence, but if you want to know
anything and put a question to one of them, the speaker always gives
one unvarying answer. And when they have been once written down they
are tumbled about anywhere among those who may or may not understand
them, and know not to whom they should reply, to whom not: and, if
they are maltreated or abused, they have no parent to protect them;
and they cannot protect or defend themselves. -- [Phaedrus][2]
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;This same professor went on to speak about how we were now moving toward
a post-literate intelligence. That is that we have people who are
functionally illiterate, but their intelligence and world view is shaped
by media that is fundamentally textual. 90% of the video we watch is
based upon text, that&#x27;s why it&#x27;s still called Screenwriting.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tim Bray goes on to show that he&#x27;s not anti-video.&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;Oh, and by the way, I consume a moderate amount of video, and I really
  like doing it on the 1080p LCD TV just the right distance in front of
  my comfy leather chair with the great footstool.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;Congratulations, you have just proved you are a fogey&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;. This is the
cultural equivalent of Monty Python&#x27;s &#x3C;em&#x3E;Four Yorkshiremen&#x3C;/em&#x3E;.&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;FIRST YORKSHIREMAN:
In them days we was glad to have the price of a cup o&#x27; tea.

SECOND YORKSHIREMAN:
A cup o&#x27; cold tea.

FOURTH YORKSHIREMAN:
Without milk or sugar.

THIRD YORKSHIREMAN:
Or tea.

FIRST YORKSHIREMAN:
In a cracked cup, an&#x27; all.

FOURTH YORKSHIREMAN:
Oh, we never had a cup. We used to have to drink out of a rolled up
newspaper.

SECOND YORKSHIREMAN:
The best we could manage was to suck on a piece of damp cloth.

THIRD YORKSHIREMAN:
But you know, we were happy in those days, though we were poor.
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;Simply put Mr. Bray, You&#x27;re not &#x3C;em&#x3E;getting&#x3C;/em&#x3E; it.&#x3C;/p&#x3E;

&#x3C;p&#x3E;My younger brother, although well past the age you could call him the
&#x22;next generation&#x22;, tends to prefer Hulu to his Television. Hulu has that
special feature that it&#x27;s not grounded in a specific time and location,
unlike say Cable Television. Also we&#x27;ve been hearing for years how
YouTube has spawned a bi-directional communication culture. People
making and responding to dorky videos. Tim Bray has even commented on
this several times over the years&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;This is what I think of when people tell me that the future is video.
People who are now in their teens and pre-teens shooting video of
themselves and uploading it to YouTube, because it&#x27;s faster than
blogging.&#x3C;/p&#x3E;

&#x3C;p&#x3E;For disclosure I have pre-ordered a 3G iPad. I hope it will fill a sweet
spot I found lacking in a hacker&#x27;s device. I sound like a typical Apple
Fanatic; I have a Macbook Pro as my primary computer and an iPhone as my
&#x22;mobile device&#x22;. Previous to both of these devices I used &#x22;Open&#x22;
platforms (Gentoo and an Android powered G1 respectively), and found
them both to be wonderful when I wanted to play with &#x3C;em&#x3E;them&#x3C;/em&#x3E;, and painful
when I wanted to play with &#x3C;em&#x3E;anything else&#x3C;/em&#x3E;&#x3C;a href=&#x22;#fn:4&#x22; id=&#x22;fnref:4&#x22; class=&#x22;footnote&#x22;&#x3E;4&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;While I have professional interest in writing applications for the iPad
itself&#x3C;a href=&#x22;#fn:5&#x22; id=&#x22;fnref:5&#x22; class=&#x22;footnote&#x22;&#x3E;5&#x3C;/a&#x3E;, I have no time or energy to do so for recreational purposes.
My recreational time is taken up working on things that do not live on
my device, but rather by things that live on CPAN and the Web. While I
would be happy if Apple were to decide to open their platform in the way
that say Alex Payne recently &#x3C;a href=&#x22;http://al3x.net/2010/04/05/ipad-openness-moderates.html&#x22;&#x3E;outlined&#x3C;/a&#x3E;, I fundamentally don&#x27;t care.
My phone, computer, and eventually iPad, are the tools I use to get to
the &#x3C;em&#x3E;real&#x3C;/em&#x3E; place I do my work. The Web.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The arguments against the iPad are that because it&#x27;s not Open means that
somehow my use case is not possible, or that somehow my use case is
somehow inferior to that of someone wanting to write applications that
run on the iPad. This is I think where the true irony sets in. The
arguments that Plato has Socrates make in the Phaedrus echo these same
arguments. They are in fact the same arguments made against any
technology that claims it will change the world. The fact that Mr. Bray
has come full circle from Plato and argues that intelligence is
&#x3C;em&#x3E;fundementally&#x3C;/em&#x3E; textual highlights how silly things have gotten.&#x3C;/p&#x3E;

&#x3C;p&#x3E;So Mr. Bray, I have to disagree with you that intelligence is
fundamentally text based. I do this ironically because my rebuttal is
textual, but titled with a reference to a visual common history.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-04-06T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;This will come as deep irony to anybody who has to proof read my writing.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;Note I am a fogey too by these standards. When I watch video I tend to watch it on my TV, at the broadcast times that are offered to me by the cable company.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;&#x3C;a href=&#x22;http://www.google.com/search?sourceid=chrome&#x26;amp;ie=UTF-8&#x26;amp;q=site:www.tbray.org+youtube&#x22;&#x3E;Googling&#x3C;/a&#x3E; is left as an exercise to the reader.&#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:4&#x22;&#x3E;&#x3C;p&#x3E;Not entirely true, ConnectBot and the hardware keyboard on the G1 are by far more useful than the hateful touch screen keyboard on the iPhone and iSSH. I suspect this is a matter of screen real-estate.&#x3C;a href=&#x22;#fnref:4&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:5&#x22;&#x3E;&#x3C;p&#x3E;One of the things &#x3C;a href=&#x22;http://tamarou.com&#x22;&#x3E;Tamarou&#x3C;/a&#x3E; specializes in is iPhone/iPad development.&#x3C;a href=&#x22;#fnref:5&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-04-06T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/no-vendors.md.html">
<title>No Vendors?</title>
<link>http://chris.prather.org/no-vendors.md.html</link>
<description>&#x3C;h1 id=&#x22;novendors&#x22;&#x3E;No Vendors?&#x3C;/h1&#x3E;

&#x3C;p&#x3E;Recently in a post about his &#x3C;a href=&#x22;http://www.tbray.org/ongoing/When/201x/2010/03/15/Joining-Google&#x22;&#x3E;moving to Google&#x3C;/a&#x3E;,  Tim Bray said:&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;The big thing about the Web isn&#xE2;&#x80;&#x99;t the technology, it&#xE2;&#x80;&#x99;s that it&#xE2;&#x80;&#x99;s the
    first-ever platform without a vendor (credit for first pointing this
    out goes to Dave Winer).&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;I&#x27;ve always respected Mr. Bray, I follow his blog avidly and I really enjoyed his discussion of learning the Android platform and his Wide Finder project. While I may think that his Ruby fanboy-isim is a bit over the top, I&#x27;m unabashedly in love with Modern Perl so who am I to really talk?&#x3C;/p&#x3E;

&#x3C;p&#x3E;This comment though, about the web having no vendor&#x27;s. I think the point he was trying to make is that Tim Berners-Lee released the technology for the web to the public domain (not GPL, MIT, Artistc or any other licese but &#x3C;strong&#x3E;&#x3C;em&#x3E;Public Domain&#x3C;/em&#x3E;&#x3C;/strong&#x3E;) and thus anybody and everybody is free to implement the specifications without fear that someone will come along and require a license fee.&#x3C;/p&#x3E;

&#x3C;p&#x3E;However that&#x27;s not the only thing a Vendor does. A vendor supplies a technology or tool, documentation for using that tool, and support for when bugs are found in that tool. The &#x22;Web&#x22; in Mr. Bray&#x27;s view may only be HTTP, HTML, and the related W3C specifications, but ultimately it&#x27;s much more than that.  The web has mutated over the last two decades. Today it isn&#x27;t just HTTP and HTML, it&#x27;s also FBML, and REST Apis, and Twitter.&#x3C;/p&#x3E;

&#x3C;p&#x3E;This brings me to the &#x3C;a href=&#x22;http://jjnapiorkowski.vox.com/library/post/google-do-no-evil-to-perl.html&#x22;&#x3E;recent post&#x3C;/a&#x3E; by John Napiorkowski, a fellow Perl programmer and Moose developer. John pointed out that the Google Adwords API is introducing backwards incompatible changes, and that the current Perl API is going to be broken by these changes. This is exactly Google acting as a Vendor for a SaaS product, one that many people rely upon for income.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Google&#x27;s &#x3C;a href=&#x22;http://groups.google.com/group/adwords-api/browse_thread/thread/d738463da3b5bdbe?pli=1&#x22;&#x3E;official statement&#x3C;/a&#x3E; regarding support for the Perl API?&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;We recommend that developers either migrate their applications to
    another language and client library (such as PHP, Python, etc.) or &#x3C;br /&#x3E;
    continue the development of their own implementation in Perl.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;That&#x27;s google acting like a &#x3C;em&#x3E;crappy&#x3C;/em&#x3E; vendor. This recommendation is an insult to your customers. Google is saying that it would be easier if people spent the next month re-writing what may be a core portion of their business (and if you&#x27;re using adwords is not &#x3C;em&#x3E;not&#x3C;/em&#x3E; a core part of your business?) in a brand new language, rather than depend upon Google to care enough to bring one of their &#x3C;strong&#x3E;&#x3C;em&#x3E;vendor supplied&#x3C;/em&#x3E;&#x3C;/strong&#x3E; libraries up to date.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Now in Google&#x27;s defense they prefaced that recommendation with:&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;We are aware that the Perl client library is out of date, and we are 
    actively working on updating it to take full advantage of the 
    v200909 version of the API.  We encourage AdWords API Perl 
    developers to contribute to the open source project and help to 
    accelerate the process, but we want you to understand that this work 
    will not be completed prior to the April 22 sunset of most v13 
    services.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;Thank you Google for saying that even though you don&#x27;t care enough about Perl to support your &#x3C;em&#x3E;paying&#x3C;/em&#x3E; customers you care enough about open source to let those same customers do the work themselves. This is a step forward from the way things were in my Mom&#x27;s day. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Google may not be evil, but they&#x27;re certainly being crappy.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-03-17T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;
</description>
<dc:date>2010-03-17T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/been-there-done-that.md.html">
<title>Been There, Done That</title>
<link>http://chris.prather.org/been-there-done-that.md.html</link>
<description>&#x3C;h1 id=&#x22;beentheredonethat&#x22;&#x3E;Been There, Done That&#x3C;/h1&#x3E;

&#x3C;p&#x3E;An email recently came up on the EPO-Marketing list that I made a long and rambling reply to. The ideas I expressed there I think are important and should get expressed to a larger audience so I thought I&#x27;d put them here.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The original poster to the email mentioned the recent excursion to CeBit. The impression was that the current marketing efforts while enthusiastic lack an articulate and compelling story for Perl as a solution, and tended to focus on specific Projects, specifically the vanguard projects of Catalyst, Moose, DBIx::Class, and Padre.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I agree. I think the problem is that we as a community, or the limited Modern Perl community, or even the few people with ideas and loud mouths, haven&#x27;t really had the discussions about &#x22;next steps&#x22; in articulating the Modern Perl Story. We have still been dealing with the internal process of getting the the community to embrace Modern Enlightened Perl, and the need to promote Perl in general. &#x3C;/p&#x3E;

&#x3C;p&#x3E;So now we need to tell the Modern Perl Story for people who aren&#x27;t inside the echo chamber. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Moose, Catalyst, DBIx::Class, and Padre show large popular projects written in a Modern Enlightened style. A style that perhaps needs some articulation. From my perspective it is that they leverage Perl&#x27;s cultural strengths: flexibility, distributed development, and strong conventions.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Flexibility in that they embrace TIMTOWTDI allowing you to customize and override, they choose configuration over convention at the code level. All three of these packages reflect this in the sheer number of their extensions. Catalyst::Plugin, MooseX, and DBIx::Class as top level namespaces all have dozens and dozens of modules under them above and beyond the core projects.&#x3C;/p&#x3E;

&#x3C;p&#x3E;For distributed development not only do these projects have an open commit policy, anybody who shows up with a patch generally can get a commit bit, they also utilize the infrastructure CPAN brings to the table. They prefer to utilize CPAN dependencies over re-writing code when it makes sense, taking advantage of the 20,000+ packages in this 15 year old globally distributed environment. They also have very large test suites, and responsive core maintainers who watch the automatic testing that the CPAN Testers provide across at last count 58 different platforms.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Finally with strong conventions let me focus on the project I know the best of these three, Moose. Moose has worked hard over the last four years to build out more support for authors of patches. We have a documented support policy, a committers guide, and several author-specific tests that include code style, documentation, and optionally testing &#x3C;em&#x3E;all&#x3C;/em&#x3E; down stream dependencies. We do this because, although we document that we priorities correct behavior over everything including backwards compatibility, our social conventions are to try maintaing compatibility where possible. We have our own best practices and idioms, and have had several long discussions about where things should be enforced via warnings and exceptions, and where we should leave them at the discretion of the author. Obviously we are not perfect at this, but we make the attempt and that in my biased opinion counts for a lot.&#x3C;/p&#x3E;

&#x3C;p&#x3E;These three factors are not unique to these projects, they are instead the ideals that the community who surrounds these projects
strive for. They are, in my opinion, the ideals that the Modern Enlightened Community strives for.&#x3C;/p&#x3E;

&#x3C;p&#x3E;There has been no formal research into why developers who have tried Perl choose another language. I&#x27;m not a social scientist, I have no clue how to begin such a project. I would love to have some research here. We can only speculate based on the comments we have all seen on various comment boards and have heard from co-workers and friends. On the other hand the largest reason I&#x27;ve heard for people who stay with the Perl community vs other communities is culture. This is articulated best in Piers Cawley&#x27;s recent blog post &#x3C;a href=&#x22;http://www.bofh.org.uk/2010/03/10/falling-out-of-love-with-a-language&#x22;&#x3E;Falling out of love with a language&#x3C;/a&#x3E;, where he talks about going from Perl to Ruby and back. I&#x27;ll let you read his excellent essay on it.&#x3C;/p&#x3E;

&#x3C;p&#x3E;One of the things I&#x27;ve noticed in these discussions about Perl marketing is that we have unconsciously embraced the idea that Perl is losing ground somehow. I have held this idea too, at times. Recently however I&#x27;ve come to suspect that this isn&#x27;t (yet) the case. &#x3C;/p&#x3E;

&#x3C;p&#x3E;This came up recently when Rob Diana posted &#x3C;a href=&#x22;http://regulargeek.com/2010/03/01/web-2-0-programming-language-job-trends-february-2010/&#x22;&#x3E;Web 2.0 Programming Language Job Trends &#xE2;&#x80;&#x93; February 2010&#x3C;/a&#x3E; to his Regular Geek blog. It was mentioned on twitter and when I looked at it I wondered why Perl wasn&#x27;t included in the Web 2.0 languages. The reason is that Rob included Perl in the earlier &#x3C;a href=&#x22;http://regulargeek.com/2010/02/02/traditional-programming-language-job-trends-february-2010/&#x22;&#x3E;Traditional Programming Language Job Trends &#xE2;&#x80;&#x93; February 2010&#x3C;/a&#x3E;. &#x3C;/p&#x3E;

&#x3C;p&#x3E;When you add Perl to the first chart, it really stands out in comparison to most of the &#x22;Web 2.0&#x22; languages. In fact it&#x27;s comparable only to Javascript in the chart, as you can see below.&#x3C;/p&#x3E;

&#x3C;div style=&#x22;width:540px&#x22;&#x3E;
&#x3C;a href=&#x22;http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy%2C+perl&#x22; title=&#x22;ruby, rails, python, php, javascript, flex, groovy, perl Job Trends&#x22;&#x3E;
&#x3C;img width=&#x22;540&#x22; height=&#x22;300&#x22; src=&#x22;http://www.indeed.com/trendgraph/jobgraph.png?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy%2C+perl&#x22; border=&#x22;0&#x22; alt=&#x22;ruby, rails, python, php, javascript, flex, groovy, perl Job Trends graph&#x22;&#x3E;
&#x3C;/a&#x3E;
&#x3C;table width=&#x22;100%&#x22; cellpadding=&#x22;6&#x22; cellspacing=&#x22;0&#x22; border=&#x22;0&#x22; style=&#x22;font-size:80%&#x22;&#x3E;&#x3C;tr&#x3E;
&#x3C;td&#x3E;&#x3C;a href=&#x22;http://www.indeed.com/jobtrends?q=ruby%2C+rails%2C+python%2C+php%2C+javascript%2C+flex%2C+groovy%2C+perl&#x22;&#x3E;ruby, rails, python, php, javascript, flex, groovy, perl Job Trends&#x3C;/a&#x3E;&#x3C;/td&#x3E;
&#x3C;td align=&#x22;right&#x22;&#x3E;&#x3C;a href=&#x22;http://www.indeed.com/q-ruby-jobs.html&#x22;&#x3E;ruby jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-rails-jobs.html&#x22;&#x3E;rails jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-python-jobs.html&#x22;&#x3E;python jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-php-jobs.html&#x22;&#x3E;php jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-javascript-jobs.html&#x22;&#x3E;javascript jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-flex-jobs.html&#x22;&#x3E;flex jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-groovy-jobs.html&#x22;&#x3E;groovy jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-perl-jobs.html&#x22;&#x3E;perl jobs&#x3C;/a&#x3E;&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;&#x3C;/table&#x3E;
&#x3C;/div&#x3E;

&#x3C;p&#x3E;But when you add Javascript to the Traditional Languages chart&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E; you see it fits in nicely with those languages.&#x3C;/p&#x3E;

&#x3C;div style=&#x22;width:540px&#x22;&#x3E;
&#x3C;a href=&#x22;http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+Javascript&#x22; title=&#x22;java, C++, C#, visual basic, Perl, Javascript Job Trends&#x22;&#x3E;
&#x3C;img width=&#x22;540&#x22; height=&#x22;300&#x22; src=&#x22;http://www.indeed.com/trendgraph/jobgraph.png?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+Javascript&#x22; border=&#x22;0&#x22; alt=&#x22;java, C++, C#, visual basic, Perl, Javascript Job Trends graph&#x22;&#x3E;
&#x3C;/a&#x3E;
&#x3C;table width=&#x22;100%&#x22; cellpadding=&#x22;6&#x22; cellspacing=&#x22;0&#x22; border=&#x22;0&#x22; style=&#x22;font-size:80%&#x22;&#x3E;&#x3C;tr&#x3E;
&#x3C;td&#x3E;&#x3C;a href=&#x22;http://www.indeed.com/jobtrends?q=java%2C+C%2B%2B%2C+C%23%2C+visual+basic%2C+Perl%2C+Javascript&#x22;&#x3E;java, C++, C#, visual basic, Perl, Javascript Job Trends&#x3C;/a&#x3E;&#x3C;/td&#x3E;
&#x3C;td align=&#x22;right&#x22;&#x3E;&#x3C;a href=&#x22;http://www.indeed.com/q-java-jobs.html&#x22;&#x3E;java jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-C++-jobs.html&#x22;&#x3E;C++ jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/jobs?q=C%23&#x22;&#x3E;C# jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-visual-basic-jobs.html&#x22;&#x3E;visual basic jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-Perl-jobs.html&#x22;&#x3E;Perl jobs&#x3C;/a&#x3E; - &#x3C;a href=&#x22;http://www.indeed.com/q-Javascript-jobs.html&#x22;&#x3E;Javascript jobs&#x3C;/a&#x3E;&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;&#x3C;/table&#x3E;
&#x3C;/div&#x3E;

&#x3C;p&#x3E;I&#x27;m not sure what the implications of this are, except that the Perl and Javascript seem to trend closer to C# and C++ than they do Ruby and Python in the Job Market. This probably has some bearing upon how these languages are &#x3C;em&#x3E;used&#x3C;/em&#x3E; in the market place and who our actual customers and competition are. What is certainly true here is that we&#x27;re not in anyway really losing ground to anyone, yet.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Ultimately the real power of Perl isn&#x27;t that we can implement any given solution better than another language. The real power is the cultural artifacts we express in the vanguard Modern Perl projects. It&#x27;s that we allow configuration over convention at the code level, and that we are developing tools for enforcing cultural consistency. The biggest winner is that the odds are any given solution is already implemented and sitting on CPAN ready to be used. A real comparison between Modern Perl and any other language is is &#x22;write these dozen lines in your language&#x22; vs &#x22;Search search.cpan.org for someone else&#x27;s solution&#x22;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Modern Perl&#x27;s internal slogan has been TIMTOWTDI BSCINABTE (There is More than One Way to Do It. But Sometimes Consistency is Not a Bad Thing Either). I think if I were to suggest a slogan that Perl should have in the larger market place it&#x27;s BTDT-IPAOC (Been There, Done That - It&#x27;s Probably Already on CPAN).&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-03-14T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;I have cleaned up this chart a bit removing Objective C and Delphi which really didn&#x27;t trend well with the other languages and don&#x27;t appear to trend well with the Web 2.0 languages either.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-03-14T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/brewing-up-a-storm.md.html">
<title>Brewing Up a Storm</title>
<link>http://chris.prather.org/brewing-up-a-storm.md.html</link>
<description>&#x3C;h1 id=&#x22;brewingupastorm&#x22;&#x3E;Brewing Up a Storm&#x3C;/h1&#x3E;

&#x3C;p&#x3E;Because I recently had the opportunity to do a fresh re-install of my world&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;, I&#x27;ve spent the last few days playing with &#x3C;a href=&#x22;http://search.cpan.org/dist/App-perlbrew&#x22;&#x3E;&#x3C;code&#x3E;App::perlbrew&#x3C;/code&#x3E;&#x3C;/a&#x3E;. &#x3C;code&#x3E;App::perlbrew&#x3C;/code&#x3E; is the invention of Kang-min Liu aka gugod, and the basic idea is that it&#x27;s a perl manager. It will install and track several different installations of Perl for you, allowing you to switch between them at will.&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;$perlbrew installed
perl-5.10.1
perl-5.8.9
perl-5.6.2

$perlbrew switch perl-5.10.1
$perl -v
This is perl, v5.10.1 (*) built for darwin-2level
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;I&#x27;d like to state now that what gugod had was very nice. It was very simple, very straight forward and did exactly what it said on the package. I have not spoke with him about this application, and anything I say here is my opinion and has no reflection upon him or anybody else that might have been involved. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Having seen what power some simple scripting can do in the form of Miyagawa&#x27;s &#x3C;code&#x3E;App::cpanminus&#x3C;/code&#x3E;, I started tinkering with &#x3C;code&#x3E;perlbrew&#x3C;/code&#x3E;. It started with perl 5.10.1 not installing properly on Snow Leopard&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;, so the first thing I added was a way to force install. &#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;perlbrew install -f perl-5.10.1
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;Then I decided it and &#x3C;code&#x3E;local::lib&#x3C;/code&#x3E; both sharing $HOME/perl5 wasn&#x27;t going to be pretty. So I taught it to use an environment variable &#x3C;code&#x3E;PERLBREW_ROOT&#x3C;/code&#x3E; to relocate the default install. In my setup I have it set to &#x3C;code&#x3E;$HOME/.perlbrew&#x3C;/code&#x3E;.&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;$export PERLBREW_ROOT=$HOME/.perlbrew
$perlbrew init
Attempting to create directory /Users/perigrin/.perlbrew/perls/current
Perlbrew environmet Initiated.
Required directories are created under /Users/perigrin/.perlbrew.
Please add this to the end of your ~/.bashrc:
    source /Users/perigrin/.perlbrew/etc/bashrc
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;Then I got annoyed with the pages of verbose output, so I stole a page from &#x3C;code&#x3E;cpanminus&#x3C;/code&#x3E; and implemented a &#x3C;code&#x3E;quiet&#x3C;/code&#x3E; switch that is enabled by default. Output now goes to &#x3C;code&#x3E;$PERLBREW_ROOT/build.log&#x3C;/code&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Today I integrated it with &#x3C;code&#x3E;local::lib&#x3C;/code&#x3E; so that if you have &#x3C;code&#x3E;local::lib&#x3C;/code&#x3E; installed it will drop the proper configuration in the &#x3C;code&#x3E;perlbrew&#x3C;/code&#x3E; configuration scripts so that when you install new modules they get installed into your &#x3C;code&#x3E;perlbrew&#x3C;/code&#x3E; managed directories&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E;.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Finally just now I finished getting &#x3C;code&#x3E;--as=&#x3C;/code&#x3E; working. This means that if you build a custom perl you can have it installed under a special name and then easily switch to and from it. I&#x27;m planning on using this to build a &#x3C;code&#x3E;--as-workperl&#x3C;/code&#x3E; that contains all the modules I need for work. &#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;$perlbrew install perl-5.10.1 --as=debugging-perl -D=debugging
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;I would like to integrate a plugin system&#x3C;a href=&#x22;#fn:4&#x22; id=&#x22;fnref:4&#x22; class=&#x22;footnote&#x22;&#x3E;4&#x3C;/a&#x3E;, but all in all I&#x27;m very happy with it. Much thanks to gugod for making it to start with, and to Miyagawa for getting me itching for small lightweight tools in my toolchain. If you&#x27;re interested in my changes, you can check them out on my &#x3C;a href=&#x22;http://github.com/perigrin/App-perlbrew&#x22;&#x3E;github&#x3C;/a&#x3E;&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-03-07T00:00:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;Last week I upgraded my trusty Macbook Pro from OSX 10.5 (Leopard) to OSX 10.6 (Snow Leopard), using a &#x22;complete wipe&#x22;. The old system had been around for ~3 years and was showing the cruft so it was time.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;Apparently there is an issue with Snow Leopard&#x27;s locales, and a single test fails.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;Full disclosure, I got this to the proof of concept stage but not really much further. It currently expects &#x3C;code&#x3E;local::lib&#x3C;/code&#x3E; to be installed to &#x3C;code&#x3E;$HOME/perl5&#x3C;/code&#x3E; (which is the default). If you have it installed somewhere else, you&#x27;ll need to manually set up the environment.&#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:4&#x22;&#x3E;&#x3C;p&#x3E;Having recently played with plugins in &#x3C;code&#x3E;cpanminus&#x3C;/code&#x3E; I have to say they&#x27;re incredibly nifty. The &#x3C;code&#x3E;github&#x3C;/code&#x3E; plugin is especially nice. I especially would like a plugin to allow swapping Git in for several parts of the system.&#x3C;a href=&#x22;#fnref:4&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-03-07T00:00:00Z</dc:date>
</item>
<item rdf:about="http://chris.prather.org/shot-on-sight.md.html">
<title>Why I should (apparently) be shot on sight</title>
<link>http://chris.prather.org/shot-on-sight.md.html</link>
<description>&#x3C;h1 id=&#x22;whyishouldapparentlybeshotonsight&#x22;&#x3E;Why I should (apparently) be shot on sight&#x3C;/h1&#x3E;

&#x3C;p&#x3E;Recently &#x3C;code&#x3E;chromatic&#x3C;/code&#x3E; posted:&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;[12:52] chromatic: More and more I think Module::Install &#x3C;em&#x3E;hurts&#x3C;/em&#x3E; 
    CPAN&#x27;s installation experience.  Ia!  Ia! EUMM fhtagn!&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;Which I found curious. I suspect it is because it resorts to driving ExtUtils::MakeMaker which &#x3C;code&#x3E;chromatic&#x3C;/code&#x3E; has been vocal about hating in the past. It was however Elliot Shank&#x27;s comments in response that I found really off putting.&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;[12:58] clonezone: .@chromatic_x I want to throttle all CPAN authors
    that use Module::Install. M::I may be great for the author, but it
    sucks as a user.&#x3C;/p&#x3E;
  
  &#x3C;p&#x3E;[12:59] clonezone: Any CPAN author that uses Module::AutoInstall
    should be shot on sight.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;Needless to say I use both &#x3C;a href=&#x22;http://search.cpan.org/dist/Module-Install/lib/Module/Install.pm&#x22;&#x3E;Module::Install&#x3C;/a&#x3E; and &#x3C;a href=&#x22;http://search.cpan.org/dist/Module-Install/lib/Module/AutoInstall.pm&#x22;&#x3E;Module::AutoInstall&#x3C;/a&#x3E;, and before the firing squad shows up to execute my unrepentant self I figured I should explain for posterity&#x27;s sake.&#x3C;/p&#x3E;

&#x3C;p&#x3E;First some history. In 2003 I became interested in the &#x3C;a href=&#x22;http://openguides.org&#x22;&#x3E;OpenGuides&#x3C;/a&#x3E; project. OpenGuides is a Perl based wiki to build guidebook style websites for Cities. I maintained a guide or two for a while before losing the time and resources to host them.&#x3C;/p&#x3E;

&#x3C;p&#x3E;OpenGuides uses Module::Build. Early on when I was starting to work with OpenGuides as a Guide Admin, a troublesome build of Module::Build had gotten into CPAN. I don&#x27;t recall the details and to be honest they&#x27;re not important. Things happen, not every release can be perfect. This build basically caused a ton of pain for anything that used Module::Build for installation. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Obviously Module::Build has fixed these problems since then. I have not had a problem in over five years with Module::Build. Most of the time I don&#x27;t recognize that it is even being used&#x3C;a href=&#x22;#fn:1&#x22; id=&#x22;fnref:1&#x22; class=&#x22;footnote&#x22;&#x3E;1&#x3C;/a&#x3E;. This story isn&#x27;t about Module::Build, it&#x27;s about why I deserve to be shot on sight.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The experience left a bad taste in my mouth. One bad module could break my entire toolchain. A module that the maintainers of OpenGuides didn&#x27;t control and couldn&#x27;t fix for me the user. That was a horrible experience, and it came right as I was starting to release my first Perl modules onto CPAN. &#x3C;/p&#x3E;

&#x3C;p&#x3E;I am lazy, and at the time I was using Module::Starter to build my distributions. Module::Starter would build my Makefile.PL to use EUMM and everything generally &#x22;just worked&#x22;, but I still didn&#x27;t like the fact that I had to rely upon the user having the right toolchain installed. When someone, I suspect &#x3C;code&#x3E;mst&#x3C;/code&#x3E; suggested I take a look at Module::Install because it auto bundled itself into &#x3C;code&#x3E;inc/&#x3C;/code&#x3E;. I was curious enough to take a look. The declarative sugar was nice, but the bundling was the important part. &#x3C;/p&#x3E;

&#x3C;p&#x3E;Now there has been an ages old debate about bundling. Adam Kennedy explained it well enough&#x3C;/p&#x3E;

&#x3C;blockquote&#x3E;
  &#x3C;p&#x3E;In the Module::Install model, all authors need to do incremental
     releases of the modules affected by the problem, but users need to
     do nothing.&#x3C;/p&#x3E;
  
  &#x3C;p&#x3E;In the Module::Build model, all users affected by the problem need
     to upgrade their version of Module::Build, but authors need to do
     nothing.&#x3C;/p&#x3E;
  
  &#x3C;p&#x3E;At present, both of these don&#x27;t solve this problem correctly.&#x3C;/p&#x3E;
  
  &#x3C;p&#x3E;Module::Install doesn&#x27;t have a method for ensuring authors upgrade,
     and Module::Build doesn&#x27;t have a method for ensuring users upgrade.&#x3C;/p&#x3E;
&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;I quite obviously lean strongly on the &#x22;make the author responsible&#x22; side of the fence. The number of Authors of CPAN modules is smaller than the number of Users of CPAN modules. Make the pain point as small as possible is my argument. Module::Build even supports bundling itself now as well. So this story isn&#x27;t really about bundling either, this story is about why I deserve to be shot on sight.&#x3C;/p&#x3E;

&#x3C;p&#x3E;When one starts using Module::Install one quickly finds Module::AutoInstall, the one that has the firing squad after me. Module::AutoInstall will spawn a CPAN/CPANPLUS instance to chase down dependencies&#x3C;a href=&#x22;#fn:2&#x22; id=&#x22;fnref:2&#x22; class=&#x22;footnote&#x22;&#x3E;2&#x3C;/a&#x3E;. We use this at one of my jobs to maintain our dependencies for the very large application we&#x27;re maintaining, but it&#x27;s a feature that CPAN and CPANPLUS both have managed to do for quite some time now.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The other feature that Module::AutoInstall performs, the one I&#x27;m willing to be shot for, is Features. Features are what make utilities like &#x3C;a href=&#x22;http://search.cpan.org/dist/Task-Kensho&#x22;&#x3E;&#x3C;code&#x3E;Task::Kensho&#x3C;/code&#x3E;&#x3C;/a&#x3E;, &#x3C;a href=&#x22;http://search.cpan.org/dist/Task-Catalyst&#x22;&#x3E;Task::Catalyst&#x3C;/a&#x3E;, and &#x3C;a href=&#x22;http://search.cpan.org/dist/Task-Moose&#x22;&#x3E;Task::Moose&#x3C;/a&#x3E; useful. They allow you to gather, possibly optional, dependencies together into smaller groups and present that as a choice to the user. Features do not exist in ExtUtils::MakeMaker, and in Module::Build the closest I could find was a &#x22;reccomends&#x22; dependency which lacks the grouping (as far as I could tell from the documentation).&#x3C;/p&#x3E;

&#x3C;p&#x3E;I have three modules that require Features to properly work. &#x3C;code&#x3E;Task::Kensho&#x3C;/code&#x3E; and &#x3C;code&#x3E;JSON::Any&#x3C;/code&#x3E; are the best known of them. Without Module::AutoInstall these two modules would be a much bigger hassle for my users. &#x3C;code&#x3E;JSON::Any&#x3C;/code&#x3E; for example would require me to define a specific default JSON package and make the others &#x22;reccomended&#x22;, this rather defeats the entire purpose of &#x3C;code&#x3E;JSON::Any&#x3C;/code&#x3E;. As for &#x3C;code&#x3E;Task::Kensho&#x3C;/code&#x3E;, one of the things I like most about it is that beyond a certain set of core modules relating to the tool chain and testing, everything else is optional. This means if you don&#x27;t want or need &#x3C;a href=&#x22;http://search.cpan.org/dist/POE&#x22;&#x3E;POE&#x3C;/a&#x3E; on your machine (perhaps because you enjoy AnyEvent), &#x3C;code&#x3E;Task::Kensho&#x3C;/code&#x3E; doesn&#x27;t force you to take it. But it does so at a large enough level that if you opt into POE, you get a good set of recommended modules picked by default.&#x3C;/p&#x3E;

&#x3C;p&#x3E;I am also lazy, I mentioned this. I have several Modules that need to be updated to no longer include &#x3C;code&#x3E;auto_install&#x3C;/code&#x3E; because they don&#x27;t need or use Features. But despite at least one of these modules being popular enough to make a Top 100 list, I have never had a complaint about not being able to install it. I cannot repent for thinking about my users&#x3C;a href=&#x22;#fn:3&#x22; id=&#x22;fnref:3&#x22; class=&#x22;footnote&#x22;&#x3E;3&#x3C;/a&#x3E;. So I will clean up the modules I have that don&#x27;t require Module::AutoInstall while I wait for the firing squad for the few modules that &#x3C;em&#x3E;must&#x3C;/em&#x3E; have it so that the user experience is the nicest I can provide.&#x3C;/p&#x3E;

&#x3C;p&#x3E;By: Chris Prather on 2010-02-18T03:42:00&#x3C;/p&#x3E;

&#x3C;p&#x3E;Tags: &#x3C;/p&#x3E;

&#x3C;div class=&#x22;footnotes&#x22;&#x3E;
&#x3C;hr /&#x3E;
&#x3C;ol&#x3E;

&#x3C;li id=&#x22;fn:1&#x22;&#x3E;&#x3C;p&#x3E;I give much thanks to Ken Williams, Michael Schwern, Eric Wilhelm, and David Golden for the work they&#x27;ve done over the years to make sure I don&#x27;t notice Module::Build anymore. They are awesome people who are making the world better.&#x3C;a href=&#x22;#fnref:1&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:2&#x22;&#x3E;&#x3C;p&#x3E;It used to do this regardless of the environment it was in, but now has checks to bail if it&#x27;s under a CPAN/CPANPLUS install. They&#x27;re not perfect checks, but they should work on any CPAN releaed in the last two to three years.&#x3C;a href=&#x22;#fnref:2&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;li id=&#x22;fn:3&#x22;&#x3E;&#x3C;p&#x3E;If I truly were going to make life easier on myself I would have moved to &#x3C;a href=&#x22;http://search.cpan.org/dist/Dist-Zilla&#x22;&#x3E;Dist::Zilla&#x3C;/a&#x3E; and stopped even writing a Makefile.PL.&#x3C;a href=&#x22;#fnref:3&#x22; class=&#x22;reversefootnote&#x22;&#x3E;&#x26;#160;&#x26;#8617;&#x3C;/a&#x3E;&#x3C;/p&#x3E;&#x3C;/li&#x3E;

&#x3C;/ol&#x3E;
&#x3C;/div&#x3E;
</description>
<dc:date>2010-02-18T03:42:00Z</dc:date>
</item>
</rdf:RDF>