<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Joel Berger</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/" />
    <link rel="self" type="application/atom+xml" href="http://blogs.perl.org/users/joel_berger/atom.xml" />
    <id>tag:blogs.perl.org,2009-11-03:/users/joel_berger//1022</id>
    <updated>2013-05-17T16:33:21Z</updated>
    <subtitle>Perl for Science, Perl for Fun</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.38</generator>

<entry>
    <title>My &quot;Mojolicious Introduction&quot; now updated for 4.0 </title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/05/my-mojolicious-introduction-now-updated-for-40.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4686</id>

    <published>2013-05-17T20:22:26Z</published>
    <updated>2013-05-17T16:33:21Z</updated>

    <summary>On Feb 28, 2013 I gave a talk to Chicago.pm about Mojolicious. I called it an introduction, but I really wanted to show some of the features that sets Mojolicious apart. Because of this, the talk moves very fast. It...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Examples" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mojolicious" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>On Feb 28, 2013 I gave a talk to Chicago.pm about <a href="http://mojolicio.us">Mojolicious</a>. I called it an introduction, but I really wanted to show some of the features that sets Mojolicious apart. Because of this, the talk moves very fast. It hits routing and responses quickly, hits testing often, on all the way to well-tested non-blocking websocket examples.</p>

<p>I promised to get my slides up afterwards but life (i.e. my doctoral thesis) got in the way. Now with the release of <a href="http://blog.kraih.com/post/50517069291/mojolicious-4-0-released-perl-real-time-web-framework">Mojolicious 4.0</a> I thought I would take the opportunity to right a wrong and get the slides up; so here they are: <a href="http://mojolicious-introduction.herokuapp.com/">http://mojolicious-introduction.herokuapp.com/</a>!</p>

<p>The talk is itself a Mojolicious app, the source of which is available from on <a href="https://github.com/jberger/MojoliciousIntroduction">GitHub</a>. Not only are all the code snippets shown in the talk included, not only do they all run, but they are actually what is rendered by the talk (DRY++), so what you see is what you get! Please leave any feedback and ask any questions. I may not see the responses here, so feel free to <a href="https://twitter.com/joelaberger">ping me elsewhere</a> if needed.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Mojolicious 4.0 is coming soon!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/05/mojolicious-40-is-coming-soon.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4667</id>

    <published>2013-05-11T20:31:19Z</published>
    <updated>2013-05-12T03:38:30Z</updated>

    <summary>As a newer member of the Mojolicious Core Development Team, I am more than usually excited for a Mojolicious release. This is because the next major release, version 4.0, is set to ship very soon! For those of you who...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Mojolicious" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Perl Love" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>As a newer member of the Mojolicious Core Development Team, I am more than usually excited for a <a href="http://mojolicio.us/">Mojolicious</a> release. This is because the next major release, version 4.0, is set to ship very soon! For those of you who don&#8217;t know, Mojolicious is a modern Perl web framework which is lightweight and easy to get started <a href="http://mojolicio.us/perldoc">learning</a> <a href="http://mojolicio.us/perldoc/Mojolicious/Lite">and</a> <a href="http://mojocasts.com/e1">using</a>, while containing features that are cutting-edge. It&#8217;s asynchronous/non-blocking to the core, websockets work out of the box, comes with built-in DOM/JSON/UserAgent, etc etc.</p>

<p>Our fearless leader <a href="https://twitter.com/kraih">Sebastian Riedel</a> (aka sri) will no doubt post a message with all the details when it ships. In the meantime, I want to share a little story of how community interaction, even at the StackOverflow level, can lead to innovation and enhancement of major projects like Mojolicious!</p>
]]>
        <![CDATA[<p>On with the story! StackOverflow helped me learn Perl several years ago. On occasion, to pay-it-forward, I do my best to help a (polite, courteous) questioner. I hope that I can use that platform to keep a prospective Perl user in the Perl world by suggesting good <a href="http://perl-tutorial.org/">tutorials</a> or <a href="http://onyxneon.com/books/modern_perl/">books</a>, suggesting good practices and yes explain some of Perl&#8217;s lovable quirks. Sometimes I even get to promote some of my favorite Perl modules and projects too. </p>

<p>My favorites though are the rare times when the question is interesting, or better still, when a question makes a real impact. The other day someone asked a <a href="http://stackoverflow.com/q/16465300/468327">seemigly simple question</a>: using Mojolicious&#8217; built-in event loop (which will use EV/AnyEvent if available), how can one restart a timer event. This might be useful for pushing back a timeout for example.</p>

<p>I posted my naive response, in which the &#8220;restart&#8221; was really stopping the old timer and starting it again. Because I was interested, I asked sri what his <a href="http://irclog.perlgeek.de/mojo/2013-05-09#i_7040624">opinions on my solution</a> were. Based on his response I added a second example which the timer is kept alive, but now it has to repeatedly check if it should fire. The discussion didn&#8217;t end there, however, but lasted several days, eventually leading to implementing a new feature in Mojolicious. The benefit is not just an easy way to restart a timer, but a <a href="http://irclog.perlgeek.de/mojo/2013-05-09#i_7042885">massive performance enhancement</a> for Mojolicious apps under high-load with high-concurrency. </p>

<p>With these new optimizations, sri&#8217;s <a href="https://gist.github.com/kraih/5551292">example app</a> can maintain 10_000 concurrent websocket connection with zero CPU overhead! That&#8217;s some really awesome results to obtain when starting from a humble little StackOverflow question. But indeed it&#8217;s these cases that make me love open source software even more! Communities of people asking questions and giving answers, communities of experienced programmers and newbies too can all work together to make what&#8217;s already awesome even more awesome!</p>

<p>My personal favorite new feature is that sending JSON over websockets, something my <a href="https://metacpan.org/module/Galileo">Galileo CMS</a> does regularly, will be easier than ever. To send JSON from the backend to the browser, simply use the send method as always, but with the new <code>json</code> key</p>

<pre><code>$ws-&gt;send({ json =&gt; { foo =&gt; [qw/ bar baz bat /] } });
</code></pre>

<p>and when JSON is expected, you can get it simply by subscribing to the new <code>json</code> event</p>

<pre><code>$ws-&gt;on( json =&gt; sub { my ($ws, $data) = @_; ...  } );
</code></pre>

<p>This all makes JSON over websocket a really easy way to do complex client/server interaction and makes doing it a breeze!</p>

<p>I&#8217;m looking forward to Mojolicious 4.0! I hope you are too!</p>
]]>
    </content>
</entry>

<entry>
    <title>Alien::Base Final Report</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/05/alienbase-final-report.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4653</id>

    <published>2013-05-07T17:38:28Z</published>
    <updated>2013-05-07T14:27:39Z</updated>

    <summary>I have just sent my grant manager, Makoto Nozaki, my final grant report for Alien::Base. As I have said in the report, it has been slowed recently by my Ph.D. Thesis and Defense (successful!) and the lack of Mac CPANTesters...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Alien" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Progress Report" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>I have just sent my grant manager, Makoto Nozaki, my final grant report for Alien::Base. As I have said in the report, it has been slowed recently by my Ph.D. Thesis and Defense (successful!) and the lack of Mac CPANTesters (or at least the lack of reports on my testing modules).
TL;DR, Alien::Base is essentially ready, but work still needs to be done, and will continue.</p>

<p>The report is included after the break.</p>
]]>
        <![CDATA[<h1>Alien::Base Final Report</h1>

<h2>Summary</h2>

<p>With this report I end my grant for Alien::Base.
I consider it to be a reasonable success and have hope that the project will continue further.
It became, as perhaps I should have expected, a larger project than anticipated; the problems were rarely the anticipated ones.</p>

<p>In the end Alien::Base faced two major problems: (program/script) compile-time linking of the library and the localization of the built binary library on Mach (read Mac) platforms.
The the linking problem is solved, running <code>use Alien::MyLibrary;</code> in the dependent module dynamically loads the module as expected.</p>

<p>The Mach problem should be solved, though part of the problem is that the solution must of necessity be different for proper users and CPANtesters.
Mach binaries must hard-code the path to themselves in the binary, this requires fore-knowledge of the final install location of the library.
Steps have been taken to ensure that the install location is set correctly for common (<code>perl Build.PL &amp;&amp; ./Build &amp;&amp; ./Build install</code>) use.
CPANtesters unfortunately do not run the install phase, but rather append the <code>blib</code> directory into <code>@INC</code>.
I hope that I have fixed this problem, however I have waited months and yet have seen no Mac reports on either of my test modules <a href="http://www.cpantesters.org/distro/A/Acme-Alien-DontPanic.html">Acme::Alien::DontPanic</a> and <a href="http://www.cpantesters.org/distro/A/Acme-Ford-Prefect.html">Acme::Ford::Prefect</a>; until these reports come in I cannot assess the ability of my recent work to compensate for this so-called &#8220;blib-scheme&#8221;.</p>

<p>I am happy to report that I have received much interest in the project and even some patches to the code-base.
I am confident that the project will continue to progress; for my part I will continue to contribute and shepherd patches/pull-requests.
Certainly the system is still in a rather basic form, for example HTTP support is still rather fragile, but the major architecture exists and will continue to improve.</p>

<h2>Deliverables</h2>

<ul>
<li><a href="https://metacpan.org/module/Alien::Base">Alien::Base</a> is released to CPAN and is even being used by several <a href="https://metacpan.org/requires/distribution/Alien-Base?sort=[[2,1]]">early-adopter projects</a>.</li>
<li>The documentation and tests are included</li>
<li>Alien::Base::ModuleBuild can fetch, build and install libraries. By design they are localized to the current Perl installation</li>
<li>The system is perlbrew/local::lib compatible and as a result does not require root privileges </li>
<li>FTP and HTTP are supported, though both could use some polish, bundled binaries are also supported</li>
<li>Library metadata is extracted from pkgconfig data or may be generated if needed</li>
<li>Alien::GSL does NOT yet depend on Alien::Base, though a <a href="https://github.com/jberger/Alien-GSL/tree/base">branch</a> on its github development site is ready to be uploaded to PAUSE once I deem Alien::Base fully stable.</li>
</ul>

<h2>Thanks</h2>

<p>I would especially like to that my ever-patient project coordinator Makoto Nozaki for his help coordinating the project, and for far longer than expected.
As the project progressed beyond its expected life, my Ph.D. Thesis and Defense took more and more of my time and so I want to thank both the Perl Foundation and the community at-large for being patient with me as well.</p>

<p>I also want to thank all of those people who have in any way encouraged or contributed to Alien::Base:</p>

<ul>
<li>Christian Walde (Mithaldu) for productive conversations about component interoperability</li>
<li>kmx for writing Alien::Tidyp from which I drew many of my initial ideas</li>
<li>David Mertens (run4flat) for productive conversations about implementation</li>
<li>Mark Nunberg (mordy, mnunberg) for graciously teaching me about rpath and dynamic loading</li>
<li>Torsten Raudssus (Getty) for productive conversations about usability</li>
<li>giatorta, alexrj, jtpalmer, rsimoes, preaction for patches/pull-requests </li>
<li>Any others I have forgotten</li>
</ul>

<h2>Closing</h2>

<p>This process has been taxing at times, but still rewarding. 
I hope that Alien::Base will be a useful part of the CPAN toolchain in the future as the Perl renaissance progresses!</p>
]]>
    </content>
</entry>

<entry>
    <title>Thank you Ack!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/04/thank-you-ack.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4590</id>

    <published>2013-04-19T19:42:54Z</published>
    <updated>2013-04-19T20:00:52Z</updated>

    <summary>People may have noticed my absence from the Perl world lately. I have been writing my Ph.D. thesis (179 pages on Ultrafast Electron Microscopy with my Physics::UEMColumn Perl module featured) and defense. Ack is a tool for searching code and...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="CPAN Love" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Examples" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>People may have noticed my absence from the Perl world lately. I have been writing my Ph.D. thesis (179 pages on Ultrafast Electron Microscopy with my <a href="http://metacpan.org/module/Physics::UEMColumn">Physics::UEMColumn</a> Perl module featured) and defense. </p>

<p><a href="http://beyondgrep.com">Ack</a> is a tool for searching code and text. It works much like the unix tool grep, although it is imbued with the power of Perl. To mark the release of Ack 2.0 though I wanted to mention a few one-liners that made my life easier in this stressful time.</p>

<p>My thesis is written in many <a href="https://github.com/jberger/Thesis">LaTeX files</a> and one can probably imagine that searching those files was needed regularly. The biggest is for finding non-ascii characters. As I add content from old publications or external programs, lots of non-ascii characters can often come along for the ride. LaTeX is a very old program, well pre-dating unicode, and it has a very different way of adding special characters with its own markup. In fact parts of the compiling toolchain croak with unicode characters. So I found myself using </p>

<pre><code>ack '[^[:ascii:]]'
</code></pre>

<p>regularly. Also I had to keep a list of all the abbreviations that I had used in the paper, but of course you forget if you have them all. I used this little bash-ack conglomeration to find all sequences of two or more upper-case characters, which is how I write my abbreviations,</p>

<pre><code>ack -ho '\p{Upper}{2,}' | sort | uniq
</code></pre>

<p>I&#8217;m sure I used many other little ackings here and there, but these were the two I could remember off-hand. Thanks to Andy and everyone who has contributed to ack! </p>

<p>Now go use it to make your life easier!</p>

<p>Visit the new site: <a href="http://beyondgrep.com">beyondgrep.com</a></p>
]]>
        

    </content>
</entry>

<entry>
    <title>A Case for Tie::Array::CSV</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/03/a-case-for-tiearraycsv.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4476</id>

    <published>2013-03-26T04:43:57Z</published>
    <updated>2013-03-26T16:28:34Z</updated>

    <summary>What is the favorite module you have released to CPAN? For me, its not some shiny CMS or fancy scientific simulation. In fact, mine is probably horribly inefficient, maybe even a little evil, but I like this one best because...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Perl Love" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>What is the favorite module you have released to CPAN? For me, its not some <a href="http://metacpan.org/module/Galileo">shiny CMS</a> or <a href="http://metacpan.org/module/Physics::UEMColumn">fancy scientific simulation</a>.  In fact, mine is probably horribly inefficient, maybe even a little evil, but I like this one best because it is clever.</p>

<p>Today I used my favorite of my modules in order to accomplish a difficult task, and in doing so I found a little bug, which I have just fixed. Which one is it? Let me introduce you to <a href="http://metacpan.org/module/Tie::Array::CSV">Tie::Array::CSV</a>.</p>
]]>
        <![CDATA[<p>Tie::Array::CSV lets you treat a CSV (or any other deliminated file that Text::CSV can handle) as a Perl array of arrayrefs. It lets you read and write just as you would any other AoA, but in the background you are CRUD-ing a csv file.</p>

<p>Today I needed to write columns to a CSV file, in order to pass them to Gnuplot. Normally I would use PDL for this, but the columns are of uneven length, and while I&#8217;m sure there is some way to do this, I don&#8217;t know what it is. The problem of course is that if column three is longer than column two, you will need to put an empty entry in column two so that they line up correctly. Luckily I have Tie::Array::CSV.</p>

<p>For this example I make a little function that generates a list of random data <strong>of random length</strong>. I want to write this data as the next column in my CSV file. Lets say I want to do this 10 times making 10 columns. Here it is:</p>

<pre><code>#!/usr/bin/env perl

use strict;
use warnings;

use Tie::Array::CSV;

sub get_column {
  my $last = int rand 10;
  return map { rand 100 } (0..$last);
}

tie my @out, 'Tie::Array::CSV', 'outfile.csv';

for my $column (0..9) {
  my $row = 0;
  $out[$row++][$column] = $_ for get_column();
}
</code></pre>

<p>See? Piece of cake! Notice the &#8220;ragged&#8221; bottom few lines, that&#8217;s the hard part, but I didn&#8217;t have to think about it at all!</p>

<p>I hope if you need to work with CSV data, you&#8217;ll think about using Tie::Array::CSV. Its probably not the fastest, but I think its the easiest and most self-explanatory. Oh and if the <code>tie</code> keyword scares you, there is also a <code>new</code> constructor.</p>

<p>Now what is your favorite module? Is it the most clever one, the most useful? Let me know!</p>
]]>
    </content>
</entry>

<entry>
    <title>PDL 2.006 released!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/03/pdl-2006-released.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4462</id>

    <published>2013-03-24T05:45:05Z</published>
    <updated>2013-03-23T23:54:31Z</updated>

    <summary>On behalf of the PDL Porters, and especially our tireless leader Chris Marshall, I am very happy to share the news that PDL 2.006 has been released, I&#8217;m reposting the announcement here, find the full message including release notes on...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Announcing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="PDL" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>On behalf of the PDL Porters, and especially our tireless leader Chris Marshall, I am very happy to share the news that PDL 2.006 has been released, I&#8217;m reposting the announcement here, find the full message including release notes <a href="http://mailman.jach.hawaii.edu/pipermail/perldl/2013-March/007803.html">on the mailing list</a>. It even includes my first contributions to the PDL core :-) Enjoy!</p>

<hr>

<p>The <a href="http://pdl.perl.org">PDL</a> development team is pleased to announce
the official release of PDL-2.006 and an updated
draft of the PDL Book to accompany its release.</p>

<p>Of specific note:</p>

<ul>
<li><p>PDL VERSION numbers now use single decimal
format.  This will be the standard going forward.</p></li>
<li><p>PDL now has three graphics options that build on
all supported PDL platforms (thanks to work by
Craig DeForest and David Mertens and a host of
others):</p>

<ul>
<li><p><a href="http://metacpan.org/module/PDL::Graphics::Gnuplot">PDL::Graphics::Gnuplot</a> using the gnuplot program</p></li>
<li><p><a href="http://metacpan.org/module/PDL::Graphics::Prima">PDL::Graphics::Prima</a> based on the <a href="http://metacpan.org/module/Prima">Prima</a> toolkit</p></li>
</ul>

<p>and</p>

<ul>
<li><a href="http://metacpan.org/module/PDL::Graphics::Simple">PDL::Graphics::Simple</a> a basic 2-D graphics layer
that can use many of the existing PDL graphics
modules with a uniform syntax.</li>
</ul></li>
<li><p>ASPerl build issues have been resolved thanks
to relentless testing, verification and fixes by
Rob/sisyphus and other win32 PDL users.</p></li>
</ul>

<p>As always, go to <a href="http://pdl.perl.org">http://pdl.perl.org</a> for information
about all things PDL and how to get PDL for your
platform.</p>

<p>Enjoy!</p>

<p>Chris Marshall</p>

<p>PDL-2.006 Release Manager</p>
]]>
        

    </content>
</entry>

<entry>
    <title>I love CPANtesters and Travis-CI</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/03/i-love-cpantesters-and-travis-ci.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4438</id>

    <published>2013-03-15T21:49:18Z</published>
    <updated>2013-03-15T16:19:59Z</updated>

    <summary>I have mentioned before how much I like CPANtesters! Here is another story. Yesterday I got an email from them listing a number of failures from Galileo, my CMS. I had recently pushed some bugfix releases, but it had some...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="CPAN Love" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Galileo" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>I have mentioned <a href="http://blogs.perl.org/users/joel_berger/2012/01/i-love-cpan-testers.html">before</a> how much I like CPANtesters! Here is another story.</p>

<p>Yesterday I got an email from them listing a number of failures from <a href="http://metacpan.org/module/Galileo">Galileo</a>, my CMS. I had recently pushed some bugfix releases, but it had some new, and as yet unused code and tests for that code in it. The tests passed on all my Linux systems, so I wasn&#8217;t worried about the release. Yet the failures came in. Some on Linux, some on other platforms, but not all the tests were failures and I couldn&#8217;t figure out a pattern. CPANtesters put me on to a problem but for this I needed faster results.</p>

<p>I had heard about <a href="https://travis-ci.org/">Travis-CI</a>, a free continuous integration platform based around GitHub. I set up travis testing for Galileo and sure enough it failed there. Though it was frustrating I now had failing tests that I could run at will! After much trial and error, I found that I had an undeclared dependency, but due to the way I was testing, it was throwing a seemingly unrelated error. My problem was that all my systems have the module installed and so I didn&#8217;t get the failure on my box, its a common module File::Next (used by Ack) and so many of the CPANtesters had it as well.</p>

<p>CPANtesters alerted me to the problem and Travis-CI let me continuously test on fresh platforms (5.10/12/14/16) until I found the problem. I love open source.</p>

<p>I have released Galileo 0.026 which fixes the problem. There are exciting additions to Galileo in the works, slowed only by my upcoming Ph.D. defense (which obviously takes much of my time). I hope that by this summer Galileo will have several of the most requested features you have told me that you would like. </p>

<p>Happy Perl-ing and remember to thank those projects and developers who make your lives easier, both in person and in public. Thanks guys!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Galileo 0.023 has a pretty web setup page!</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/03/galileo-0023-has-a-pretty-web-setup-page.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4391</id>

    <published>2013-03-04T18:33:02Z</published>
    <updated>2013-03-05T00:17:54Z</updated>

    <summary>Just a little note to announce the release of Galileo version 0.023. Galileo is my CMS that aims to be 100% CPAN installable, all you have to do is this: $ cpanm Galileo $ galileo setup $ galileo daemon This...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Announcing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Galileo" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>Just a little note to announce the release of Galileo version 0.023. Galileo is my CMS that aims to be 100% CPAN installable, all you have to do is this:</p>

<pre><code>$ cpanm Galileo
$ galileo setup
$ galileo daemon
</code></pre>

<p>This release makes installing even better, because now when you run <code>galileo setup</code> you get a web interface to configure your CMS and then install the database! </p>

<p><img alt="Galileo configure page" src="http://blogs.perl.org/users/joel_berger/config.png" width="900" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></p>

<p>Ok that image is just slightly ahead of what is now on CPAN, but its close :-)</p>
]]>
        

    </content>
</entry>

<entry>
    <title>PPI highlighted Mojolicious &quot;quine&quot;</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/ppi-highlighted-mojolicious-quine.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4356</id>

    <published>2013-02-20T05:35:49Z</published>
    <updated>2013-02-20T12:49:21Z</updated>

    <summary>On February 28th I will be presenting an &#8220;Introduction to Mojolicious&#8221; to the Chicago.pm meeting. If you are in the area I hope you will stop by; it won&#8217;t just be an introduction despite the name. If you are interested,...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="CPAN Love" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mojolicious" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>On February 28th I will be presenting an &#8220;Introduction to Mojolicious&#8221; to the Chicago.pm meeting. If you are in the area I hope you will stop by; it won&#8217;t just be an introduction despite the name. If you are interested, here is the <a href="http://www.meetup.com/Windy-City-Perl-mongers-Meetup/events/104660612/">Meetup link</a>.</p>

<p>I haven&#8217;t decided, but I might try to &#8220;self-host&#8221; the talk, writing it as a Mojolcious app! To do that I had to resurrect one of my earliest CPAN releases <a href="https://metacpan.org/module/Mojolicious::Plugin::PPI">Mojolicious::Plugin::PPI</a>. This module does just what the name should imply, providing syntax highlighting via <a href="https://metacpan.org/module/PPI">PPI</a> and <a href="https://metacpan.org/module/PPI::HTML">PPI::HTML</a> in a handy Mojolicious plugin.</p>

<p>Whether or not I decide to use this for my talk, it still is handy to have around. Here is a cute example, <a href="https://github.com/jberger/Mojolicious-Plugin-PPI/blob/master/examples/quine.pl">a simple &#8220;quine&#8221;</a> which you can run:</p>

<pre><code>#!/usr/bin/env perl

use Mojolicious::Lite;

plugin 'PPI' =&gt; { toggle_button =&gt; 1 };
get '/' =&gt; sub {
  my $self = shift;
  $self-&gt;stash( file =&gt; __FILE__ );
  $self-&gt;render('quine');
};

app-&gt;start;

__DATA__

@@ quine.html.ep
% title 'A Mojolicious "Quine"';
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;&lt;%= title %&gt;&lt;/title&gt;
    %= javascript 'ppi.js'
    %= stylesheet 'ppi.css'
  &lt;/head&gt;
  &lt;body&gt;
    &lt;h2&gt;&lt;%= title %&gt;&lt;/h2&gt;
    %= ppi $file
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>A <a href="http://en.wikipedia.org/wiki/Quine_(computing)">quine</a> is a program that prints its source code as its output. In truth, this &#8220;quine&#8221; is really a cheater, a true quine doesn&#8217;t read itself. Still, the above example renders the source code nicely highlighted by PPI (and with some added goodies like toggleable line numbers).</p>

<p>Just for fun, some other Perl (cheater) quines are:</p>

<pre><code>@ARGV = $0; print for &lt;&gt;
</code></pre>

<p>and </p>

<pre><code>seek DATA,0,0; print for &lt;DATA&gt;
__DATA__
</code></pre>

<p>But those outputs aren&#8217;t syntax highlighted. For a real one see the comments.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>#galileo on irc.perl.org</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/galileo-on-ircperlorg.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4324</id>

    <published>2013-02-14T14:21:06Z</published>
    <updated>2013-02-14T14:32:41Z</updated>

    <summary>Hi all, I just wanted to drop a quick note to announce #galileo on irc.perl.org as a place to talk about Galileo my CPAN installable CMS and its new companion project GalileoSend which isn&#8217;t quite to CPAN yet, but it...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Galileo" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>Hi all,</p>

<p>I just wanted to drop a quick note to announce #galileo on irc.perl.org as a place to talk about <a href="http://galileo-cms.herokuapp.com/">Galileo</a> my <a href="https://metacpan.org/module/Galileo">CPAN installable</a> CMS and its new companion project <a href="https://github.com/jberger/GalileoSend">GalileoSend</a> which isn&#8217;t quite to CPAN yet, but it will be soon. </p>

<p>GalileoSend will make sending files via websocket easy! So far the package includes a command-line sender (client) and receiver (listener/server), a Mojolicious plugin and a javascript client. Futher GalileoSend is a protocol spec, which means if you want to write a client or server in your other favorite language, or a plugin for your favorite framework, its very possible.</p>

<p>Interested? Drop on by and <a href="http://chat.mibbit.com/?channel=%23galileo&amp;server=irc.perl.org">chat about it</a>!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>A new protocol for sending files over websockets</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/a-new-protocol-for-sending-files-over-websockets.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4314</id>

    <published>2013-02-11T22:58:21Z</published>
    <updated>2013-02-12T15:37:48Z</updated>

    <summary>Today I&#8217;m happy to make public the work I&#8217;ve been doing to make some kind of &#8220;standard&#8221; for sending files over websockets. I call it GalileoSend because it was created for the Galileo CMS. The protocol itself is language independent...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Galileo" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Mojolicious" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Perl Love" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>Today I&#8217;m happy to make public the work I&#8217;ve been doing to make some kind of &#8220;standard&#8221; for sending files over websockets. I call it <a href="https://github.com/jberger/GalileoSend">GalileoSend</a> because it was created for the <a href="https://github.com/jberger/Galileo">Galileo CMS</a>.</p>

<p>The <a href="https://github.com/jberger/GalileoSend/blob/master/README.markdown">protocol itself</a> is language independent for both the client and server side, assuming that both can open a websocket connection and send JSON (as text) and binary data over it. Since communication by websocket is cheap, 2-way communication is highly encouraged throughout the transfer and positive confirmation of receipt is required.</p>

<p>Further, I have written a javascript client-side implementation (which could be used for any server) and a <em>non-blocking</em> Mojolicious server-side implemenation (which could be used for any client). </p>

<p>Read on (examples!) &#8230;</p>
]]>
        <![CDATA[<p>See what they look like <a href="https://github.com/jberger/GalileoSend/blob/master/example/server.pl">together</a>:</p>

<script src="https://gist.github.com/jberger/4755771.js"></script>

<p>Events are fired on both side for most of the important occurances. And the end result is nice and clean.</p>

<p>It still needs some polish. The Mojolicious plugin still needs <s>tests and</s> documentation, but I expect this to hit CPAN soon. </p>

<p>Finally I hope that the GalileoSend spec will be useful. I have found other websocket uploaders but most depend on the server implementation (usually node.js, <a href="http://binaryjs.com/">example</a>). I wrote it with that hope in mind.</p>

<p>Please comment, contribute, use etc!</p>
]]>
    </content>
</entry>

<entry>
    <title>In the name of &quot;Create great things (in Perl)&quot;</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/in-the-name-of-create-great-things-in-perl.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4304</id>

    <published>2013-02-11T04:22:16Z</published>
    <updated>2013-02-10T17:41:50Z</updated>

    <summary>You may have noticed my commentary on the Perl version number debate. I think that that debate is a possible way of raising the profile of the language we love, but that&#8217;s not why I called. chromatic petdance and I&#8217;m...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>You may have noticed my commentary on the Perl version number debate. I think that that debate is a possible way of raising the profile of the language we love, but that&#8217;s not why I called.</p>

<p><a href="http://www.modernperlbooks.com/mt/2013/02/project-facepalm.html">chromatic</a> <a href="http://perlbuzz.com/2013/02/everything-you-need-to-know-about-perl-version-numbers.html">petdance</a> and I&#8217;m sure others have suggested that rather than infight (which I don&#8217;t believe I&#8217;m doing, btw) is to make something great and show it off. While I don&#8217;t think this is enough to raise Perl&#8217;s profile ourside of our community, I have seen and IMHO done some very cool things this week:</p>

<p><strong>Things I&#8217;ve Seen</strong></p>

<ul>
<li><a href="http://play-perl.org/">play-perl</a> - A social coding game</li>
<li><a href="http://tryperl.com/">TryPerl</a> - An online IDE for writing and running Perl scripts (per the author, <a href="http://play-perl.org/quest/5117a73bdb9ca77f5900001e">it might still need a little help</a>). This is a &#8220;try before you install&#8221; solution.</li>
<li><a href="https://metacpan.org/module/Farabi">Farabi</a> - A CPAN installable browser-based Perl IDE.</li>
<li><a href="http://perltuts.com/">PerlTuts</a> - An interactive &#8220;learn as you go&#8221; introduction to Perl</li>
</ul>

<p><strong>Things I&#8217;ve Done</strong></p>

<ul>
<li><a href="https://gist.github.com/jberger/4744482">Demonstate</a> non-blocking websocket file uploads (for eventual use in Galileo)</li>
<li>Played with <a href="https://gist.github.com/jberger/4740303">Lvalue accessors</a>. Should it be a MooseX module?</li>
</ul>

<p>It may not be enough, but its always nice to share what you and others are doing. Go Perl!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Does Perl (5) have a future?</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/does-perl-5-have-a-future.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4283</id>

    <published>2013-02-08T23:42:59Z</published>
    <updated>2013-02-08T15:43:37Z</updated>

    <summary>TL;DR: Not if it can never have a major release. Please read on. Note: I&#8217;m now not talking about soon, or what it would be named/numbered. I&#8217;m talking about ever. Let me tell you my story, some of you may...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Perl Love" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>TL;DR: Not if it can never have a major release. Please read on.</p>

<p><em>Note: I&#8217;m now not talking about soon, or what it would be named/numbered. I&#8217;m talking about ever.</em></p>

<p>Let me tell you my story, some of you may know it. I&#8217;m a Ph.D. candidate in Physics. Programming is woefully ignored in science education now. All my professors learned FORTRAN in courses during their Ph.D. (or B.S. in some cases) but now, given the ease of Mathematica, we seem to be expected to pick it up as we go on.</p>

<p>One day I had a nutty idea, I wanted to parse one of the temporary files created during LaTeX compilation. A friend, who knew next to nothing about Perl, suggested I needed Perl and Regexes. I can here you out there, saying &#8220;now I had two problems&#8221;. Not so. I learned, I improved and finally my first Perl script was out in the world. It doesn&#8217;t bear much resemblance to its <a href="https://metacpan.org/module/App::makebeamerinfo">current form</a> but it worked.</p>

<p>This project had nothing to do with science, but I was awed by the power I now possessed. I went to start using Perl in my work. Perl finally solved a near-intractable programming problem in Mathematica with relative (hmmmm) ease. <a href="https://metacpan.org/module/Physics::UEMColumn">Physics::UEMColumn</a> now forms the basis of <a href="https://github.com/jberger/Thesis/blob/master/inc/extension/implementation/implementation.tex">my Ph.D. thesis</a> which I am defending this spring.</p>

<p>To get that simulation working I needed more tools, so I <a href="https://metacpan.org/module/PerlGSL">wrote them</a>, and those tools needed tools so I <a href="https://metacpan.org/module/Alien::GSL">wrote them</a> and suddenly I discovered that I had something I could give back, so I&#8217;m <a href="https://metacpan.org/module/Alien::Base">writing it too</a>. Further I often need <a href="http://pdl.perl.org">PDL</a>, and amazing numerical package for Perl. It really needs some internal TLC, which David Mertens, project pumpking Chris Marshall and others are planning.</p>

<p>Why am I telling you this? Because in 2009 I became a Perl programmer, and I fell for language hard. I love Perl. I came for regexes, but I stayed because it works well with the way I think. <a href="https://metacpan.org/module/Galileo">I use it for lots of things now</a>. Unfortunately few others have come with me.</p>

<p>Chromatic implores us to <a href="http://www.modernperlbooks.com/mt/2013/02/project-facepalm.html">write good software and show it off</a>. For these years I have tried, and it doesn&#8217;t work. I have given talks at my university, I have told friends, I have used it to help coworkers, <a href="http://perl4science.github.com/videos/">I share with the community</a>. I have recruited one person. I have converted none. Most people who know Python or ROOT (C++) laugh at me. Its not enough.</p>

<p>Until yesterday, I had a steely resolve. Even in the face of <a href="https://speakerdeck.com/stevan_little/perl-is-not-dead-it-is-a-dead-end">Stevan&#8217;s recent pronouncement</a> and embarking on <a href="https://github.com/MoeOrganization/moe">replacing the Perl internals with Scala</a>, which would probably kill or at least maim most of my work. Moe wasn&#8217;t the future of Perl, just an offshoot, right?</p>

<p>Yesterday, for the first time, I saw a flaw. There are people out there who really think that Perl will never see another major point release. I don&#8217;t mean soon, I don&#8217;t mean for cheap marketing, I mean ever. I mean for at some point breaking some small amount of backward compatibility. For some the reason is that compatibility is too important (the future is our past), for some its that Perl 6 is the future of Perl 5 (whether spoken/believed or not) and some its just because there is no number available. All that got me to thinking &#8230;</p>

<p>Is the work on Perl 5 really just a shim to support CPAN? Is it really going to be an ever-growing <code>feature</code> pragma? Will there always need to be a <a href="http://stackoverflow.com/a/6163129/468327">magic incantation</a> to activate some of the best Unicode support in the programming world? Will new Perlers need to be told to use good practices like <code>strict</code> and <code>warnings</code> forever? Is the herculean work of Nick Clark and Dave Mitchell just going to go for naught after a few years of a usable Perl 6 and Moe?</p>

<p>If Perl can never have a major point release. I think all of the above is fated to be true. I&#8217;m <em>not</em> asking about soon; I&#8217;m asking about ever.</p>

<p>In my mind I&#8217;m planning future work on the Perl we now call 5. I want to help improve the giant XS extension called PDL, possibly using another one called <a href="https://metacpan.org/module/Prima">Prima</a>. I intend to keep working on Alien::Base. But is it all just going to vaporize in a few years do to lack of external interest, or after being replaced by something? Why should I?</p>

<p>In the upcoming months, I will be looking for my first real job. It might be a post-doc appointment with Pacific Northwest National Lab (PNNL) doing the hardware/software integration for a brand new ultrafast electron microscope. Should I do it in Perl? I will only be there a year or two, is it fair to saddle them with that? Will they find someone else who can maintain it?</p>

<p>If I don&#8217;t do that, I might form a company, one that aids research groups in writing the software that they often cobble together, for analysis, data warehousing and search, for hardware integration. Would I do that in Perl?</p>

<p>If the powers that be don&#8217;t see a major point release <em>at some point</em> in Perl&#8217;s future, then it has none. The userbase will keep sliding away. Not purely for a number, or marketing, or perception, but because you will need too much knowledge to start using it. You will need to know the incantations to do things right, ones that we already know, but new users can&#8217;t find. How many people find a CPAN module that does just what they want, and so set out to write their Perl first script, only to fail and walk away? We can&#8217;t ever know.</p>

<p>I ask you p5p (whom I admire greatly) and I ask you Larry, creator, benevolent dictator, does the language we call Perl 5 have a future? At some time, will we see a major release? If not, then I don&#8217;t know what I&#8217;m working towards. Should I <code>tie</code> my future to this language?</p>
]]>
        

    </content>
</entry>

<entry>
    <title>On the version number succeeding Perl 5</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/02/on-the-version-number-succeeding-perl-5.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4262</id>

    <published>2013-02-07T04:07:46Z</published>
    <updated>2013-02-06T21:42:37Z</updated>

    <summary>Recently Ovid broached the topic of allowing a future release of Perl 5 with a version number greater than 6; this is not a new argument. He further explicated the problems: I just got back from FOSDEM and heard, again,...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Perl Love" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>Recently Ovid <a href="http://blogs.perl.org/users/ovid/2013/02/perl-7.html">broached the topic</a> of allowing a future release of Perl 5 with a version number greater than 6; this is not a <a href="http://www.nntp.perl.org/group/perl.perl5.porters/2007/02/msg120481.html">new argument</a>. He further explicated the problems:</p>

<blockquote>
  <p>I just got back from FOSDEM and heard, again, for the umpteenth time, that since Perl had 4 &#8220;major&#8221; releases (1,2,3,4) in its first few years and hasn&#8217;t had a major release since Perl 5 about 20 years ago, it&#8217;s clearly &#8220;dead&#8221;. I hear this every time I go to a conference that&#8217;s not dedicated to Perl.</p>

<p>&#8230;</p>

<p>Meanwhile, in the minds of, of, virtually every developer on the planet who&#8217;s not in our echo chamber, Perl 6 is, logically, the successor to Perl 5. Since even Duke Nukem Forever managed to get released prior to Perl 6, Perl 6 just isn&#8217;t being taken too seriously be many devs. In other words, they think Perl 5 is dying and its successor is DOA.</p>
</blockquote>

<p>I agree with him. As I commented:</p>

<blockquote>
  <p>I think Perl 5 has had to live in the shadow of Perl 6 for too long. Now that its decided that they will be two different languages, I think its only fair to allow Perl to get the cache&#8217; one gets from a major version increment.</p>

<p>This can end the &#8220;Perl is dead&#8221; chatter (outside the community anyway). After all why would you want to use Perl 5 when Perl 6 is going to replace it (says Joe Pythonista or Jane Rubyist).</p>

<p>Perl 7 is here! Its Plack and Catalyst/Dancer/Mojolicious(+Mango (what&#8217;s Mango?)), its Moo(se)? and DBIx::Class. Its CPANtesters and MetaCPAN and cpanm. There is so much the outside world has missed because they are waiting for Perl 6, which may come at some point but it still wont replace Perl 5. Lets show them its safe to come back and that there are LOTS of goodies to find when they do!</p>
</blockquote>

<p>That said I want to take it even a little further. Perl has been proud of its backward compatibility, and well it should be! Code from many years ago runs well on very recent Perls. But what can be a blessing can also be a curse.</p>

<p>Perl 5 still supports many conventions and oddities from Perl 4 and before. There are some silly things like <code>'</code> as a package separator, which most people neither use nor trip over. Then again there are some real things, like indirect objects notation, default script/handle encoding, new keywords.</p>

<p><a href="http://blogs.perl.org/users/ovid/2013/02/perl-7.html#comment-355159">Olof Stockhaus</a> made a compelling case that Perl 5 might want to use the jump to Perl 7 to make some breaking changes. For example, among other things he suggests waiting for the p5mop project. However, I think I agree with <a href="http://blogs.perl.org/users/ovid/2013/02/perl-7.html#comment-355162">Damien Krotkine</a> in saying that that sounds like a great target for Perl 8 which could come soon afterwards. There are many things we wish for a future Perl, but until they are ready, there still could be some changes. I think Perl 7 could be a great oportunity to do minor, but important, breaking changes. Then let Perl 8 come in later with a MOP or a proper language spec. Either way, without a major version increase its hard to make breaking changes. Without a major version to increase, we have been stuck.</p>

<p>Now, some have suggested that we should drop the 5 from the version number and add it to the name. Therefore we would have Perl5 version 20.0 and Perl6 version 0.1. The problem is that this still doesn&#8217;t make the case that Perl6 won&#8217;t supplant Perl5. Those people like to make the case that Java dropped the 1 so that Java 1.6 became Java 6. However this comes back to my first point. They realized that 1.5 and 1.6 (or whatever was the actual change) was going to have major changes and should be a major release. Why they didn&#8217;t simply call it Java 2 I&#8217;m not sure. What I do know is that they weren&#8217;t trying to convince people to use Java1 version 6 when something called Java2 existed.</p>

<p>To comment on using the year as the version number I think there are two problems with that. First, it doesn&#8217;t really signify that Perl6 is not the successor. Secondly, what it does seem to signify is that the Perl community is going to abandon the stability that is one of its strongest suits. Yes I&#8217;m advocating some breaking changes above, but rather small ones, things that will help more than they hurt to fix. I don&#8217;t think we want to imply that there will be breaking changes once per year, we can still use <code>feature</code> to scope changes to Perl 7 through sub-major version releases. That said, breaking changes once a decade is probably ok.</p>

<p>Perhaps this is the root problem. The semantics of versioning are an important tool to inform the outside world what the state of Perl is!</p>

<p>Anyway here&#8217;s what I propose. Say we do implement the above, so now we have two languages Perl5 and Perl6. However, since Perl5 version 20 is mostly compatible with Perl version 5 perhaps it could be allowed to keep the name. Then it seems odd that Perl should jump versions from 5 to 20, so why not just move to the next available number 7. So now we have Perl 7 successor to Perl 5 and Perl6 a new language.</p>

<p>This does not signify the death of Perl 6 but the life of Perl. It just so happened that Perl 6 became its own language and started its own branch in the Perl family tree. Now that we know that the success of Perl 5 and Perl 6 no longer depend on each other, why should their version numbers?</p>

<hr>

<p>After the break, my initial list of realistic goals for Perl 7</p>
]]>
        <![CDATA[<p>To be worthy of a breaking release, here are some things that I would want to see for a Perl 7 release. Note that I&#8217;m assuming that most of these things are already implemented and that new big niceties would be targeted for Perl 8.</p>

<ul>
<li>strict and warnings on by default</li>
<li>autodie (or at least parts of it) on by default</li>
<li>as much of the recent unicode work, plus unicode scripts and unicode handles on by default (think <code>use utf8::all</code>, and the <code>unicode_</code> features)</li>
<li>the proven keywords/additions from <code>feature</code> enabled by default</li>
<li>a final change in smartmatch behavior (and given/when) or removal</li>
<li>a final change in refs as array/hash or removal</li>
<li>remove <code>'</code> as a package separator</li>
<li>add Moo as a core module, unless of course people want full-blown Moose</li>
<li>dare I say &#8220;remove CGI.pm&#8221; from the core?</li>
</ul>

<p>Things I would like for Perl 7</p>

<ul>
<li>remove indirect object syntax (or at least <a href="https://metacpan.org/module/indirect"><code>no indirect</code></a> by default). This would likely mean special casing (s)?print(f)?</li>
<li>my personal favorite, <code>return @array</code> and <code>return ( &lt;list&gt; )</code> behave the same in scalar context (whichever way) (maybe this is too advanced, and thus should be for Perl 8)</li>
</ul>

<p>Do you have any others? I&#8217;m sure there are more to come!</p>
]]>
    </content>
</entry>

<entry>
    <title>Alien::Base - progress and problems</title>
    <link rel="alternate" type="text/html" href="http://blogs.perl.org/users/joel_berger/2013/01/alienbase---progress-and-problems.html" />
    <id>tag:blogs.perl.org,2013:/users/joel_berger//1022.4238</id>

    <published>2013-01-27T16:50:24Z</published>
    <updated>2013-01-27T18:05:28Z</updated>

    <summary>After a busy Christmas season and being engrossed in my upcoming thesis defense I have found it hard to find too much time to focus on Perl projects. Still Alien::Base has been on my mind, and happily it has been...</summary>
    <author>
        <name>Joel Berger</name>
        <uri>https://github.com/jberger</uri>
    </author>
    
        <category term="Alien" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Progress Report" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blogs.perl.org/users/joel_berger/">
        <![CDATA[<p>After a busy Christmas season and being engrossed in my upcoming thesis defense I have found it hard to find too much time to focus on Perl projects. Still <a href="https://github.com/jberger/Alien-Base">Alien::Base</a> has been on my mind, and happily it has been on the minds of others too!</p>

<p>In this report I want to focus first on the high points. Far and away my high point has been that in my apparent absence others have taken up the mantle. I have gotten bug reports and pull requests from preaction, giatorta, amannb, mokko, tobyink and as always productive conversations with David Mertens. It helps in a tough project like this has been to see the excitement of other developers, waiting for me to finish this project.</p>

<p>Several bugs have been fixed, others have been identified. I hope to have another dev release out soon. Further I plan to release a version of Alien::GSL which depends on Alien::Base to CPAN not long after that.</p>

<p>Now for the bad news. While it seems that Alien::Base is coming to a preliminary form of &#8220;completion&#8221; I have started to notice a disturbing trend coming from CPANtesters. Let me preface this by saying I think CPANtesters might be the killer app of CPAN; it is spectacular and I have said so before. There is a problem though.</p>

<p>Because I wanted to be sure that testing was done with properly installed modules, I created two phony distributions: <a href="http://www.cpantesters.org/distro/A/Acme-Alien-DontPanic.html">Acme::Alien::DontPanic</a> which provides a tiny C library of my own creation, and <a href="http://www.cpantesters.org/distro/A/Acme-Ford-Prefect.html">Acme::Ford::Prefect</a> which relies on it. For this reason, when considering the test results for Alien::Base, the results of these modules must be considered as well.</p>

<p>As I have noted before, certain platforms (Mac OSX) need to know the full path of the library&#8217;s final install location <em>at build time</em>. The only way I was able to overcome this problem was to have Alien::Base build the library in a temporary location and reference the final location in the build system. Then when the module is installed, the build tool&#8217;s install command is issued. The library&#8217;s build system therefore avoids the Perl build system. Let me say this a different way, the built library never lands in a <code>blib</code> directory before moving to its final location.</p>

<p>Now I want you to note, that I have taken special care to make sure that Alien::Base refreshes the installation <code>packlist</code> and all-in-all there should have been no adverse effects from this plan. It wasn&#8217;t until I started to get failing tests for the <code>packlist</code> handling  on Acme::Ford::Prefect that I noticed the problem. While I was able to prevent those problems from being reported, they belied a deeper problem.</p>

<p>This brings us back to CPANtesters. When testing some module, many of the CPANtesters smoke testers don&#8217;t actually install the dependent modules. What they do is build each dependent module, then add all the relevant <code>blib</code> directories to the <code>@INC</code> array. This is a clever system, it means that a fresh dependency chain is available for each test, it means that the testing platform is not affected by installing all these modules. Unfortunately its not testing a real install environment. For most people and for most modules this is fine. For Alien::Base as currently constituted however, its a very real distinction.</p>

<p>On platforms where this library path information is not problematic, Alien::Base will work correctly, even under CPANtesters <code>blib</code> scheme. For platforms that suffer from this problem, I believe that Alien::Base will work correctly, but not under the <code>blib</code> scheme. Therefore no dependent modules will be able to successfully dynamically link to the provided C library.</p>

<p>Until Alien::Base-based modules can install and test on the three major platforms, I hesitate to call Alien::Base completed. I think I&#8217;m rather close to declaring victory on 5 of those 6 goals, however if CPANtesters testing on Mac is broken, I&#8217;m still stuck saying that there is work to be done before any victory may be declared.</p>

<p>Perhaps there is some way that CPAN testers can work with me to avoid this problem, admittedly I haven&#8217;t talked to them about this. If anyone with more knowledge on the subject wants to comment below, email me or file a github issue, please do. </p>
]]>
        

    </content>
</entry>

</feed>
