<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dcterms="http://purl.org/rss/1.0/modules/dcterms/" version="2.0">
  <channel>
    <generator>Plagger/0.7.15</generator>
    <link>http://use.perl.org/search.pl?op=journals</link>
    <title>use.perl journals</title>
    <pubDate>Thu, 09 Sep 2010 08:50:19 -0700</pubDate>
    <item>
      <author>nobody@example.com (schwern)</author>
      <dc:creator>nobody@example.com (schwern)</dc:creator>
      <link>http://use.perl.org/~schwern/journal/40528</link>
      <description>For my PDX.pm presentation tonight on Test::Builder2 I threw together
some quick examples of some of its killer features, in particular
demonstrating changing how Test::Builder2 behaves using method modifiers
and applying object roles.

First, demonstrating end-of-assert actions, there's die on fail but even
cooler is DEBUG on fail! That's right, run your test in the debugger and
have it automatically set a breakpoint on a failure. How cool is that?

I'm sure somebody with better debugger foo than I can make it even cooler
and stop at the top of the assert stack rather than inside DebugOnFail.

The second is reimplementing Test::NoWarnings safely. TB2::NoWarnings
demonstrates hooking into the start and end of the test as well as safely
altering the number of tests planned by trapping the call to set_plan.

You can safely use them all together, though its a crap shoot if
DebugOnFail or DieOnFail will trigger first.

While roles and method modifiers are relatively new to the Perl
community, using them in lieu of designing my own event system for TB2
has two great advantages. First, I didn't have to design and debug my own
event system. :) Second, rather than having to learn the quirks of a
one-off system, you learn the quirks of Mo[uo]se and then can apply that
knowledge all over the place.

There's a pile of stuff to be done in TB2, a lot of them are fairly small
and self contained. Have a look. Patches welcome.</description>
      <dc:date>2010-09-09T04:33:00</dc:date>
      <title>Finally, some Test::Builder2 examples!</title>
      <pubDate>Thu, 09 Sep 2010 04:33:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;For my PDX.pm presentation tonight on &lt;a href="http://github.com/schwern/test-more/tree/Test-Builder2"&gt;Test::Builder2&lt;/a&gt; I threw together some quick examples of some of its killer features, in particular demonstrating changing how Test::Builder2 behaves using method modifiers and applying object roles.&lt;/p&gt;&lt;p&gt;First, demonstrating end-of-assert actions, there&amp;apos;s &lt;a href="http://github.com/schwern/test-more/blob/Test-Builder2/examples/TB2/lib/TB2/DieOnFail.pm"&gt;die on fail&lt;/a&gt; but even cooler is &lt;a href="http://github.com/schwern/test-more/blob/Test-Builder2/examples/TB2/lib/TB2/DebugOnFail.pm"&gt;DEBUG on fail&lt;/a&gt;! That&amp;apos;s right, run your test in the debugger and have it automatically set a breakpoint on a failure. How cool is that?&lt;/p&gt;&lt;p&gt;I&amp;apos;m sure somebody with better debugger foo than I can make it even cooler and stop at the top of the assert stack rather than inside DebugOnFail.&lt;/p&gt;&lt;p&gt;The second is reimplementing &lt;a href="http://search.cpan.org/perldoc?Test::NoWarnings"&gt;Test::NoWarnings&lt;/a&gt; safely. &lt;a href="http://github.com/schwern/test-more/blob/Test-Builder2/examples/TB2/lib/TB2/NoWarnings.pm"&gt;TB2::NoWarnings&lt;/a&gt; demonstrates hooking into the start and end of the test as well as safely altering the number of tests planned by trapping the call to set_plan.&lt;/p&gt;&lt;p&gt;You can safely use them all together, though its a crap shoot if DebugOnFail or DieOnFail will trigger first.&lt;/p&gt;&lt;p&gt;While roles and method modifiers are relatively new to the Perl community, using them in lieu of designing my own event system for TB2 has two great advantages. First, I didn&amp;apos;t have to design and debug my own event system.&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;:) Second, rather than having to learn the quirks of a one-off system, you learn the quirks of Mo[uo]se and then can apply that knowledge all over the place.&lt;/p&gt;&lt;p&gt;There&amp;apos;s &lt;a href="http://github.com/schwern/test-more/issues/labels/Test-Builder2"&gt;a pile of stuff to be done in TB2&lt;/a&gt;, a lot of them are fairly small and self contained. Have a look. Patches welcome.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-09T04:33:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~schwern/journal/40528</guid>
    </item>
    <item>
      <author>nobody@example.com (schwern)</author>
      <dc:creator>nobody@example.com (schwern)</dc:creator>
      <link>http://use.perl.org/~schwern/journal/40527</link>
      <description>Here's a diagram of the "flow" of assert results through Test::Builder
version 1.

  .-------.
  | foo.t |
  '-------'
  |
  |
  .-------------. | .----------------.
  | Test::More |&lt;---------&gt;| Test::Whatever |
  '-------------' '----------------'
  | |
  | |
  | |
  | .---------------. |
  '----&gt;| Test::Builder |&lt;----'
  '---------------'
  |
  v
  .-----.
  | TAP |
  '-----'
  |
  v
  .---------------.
  | Test::Harness |
  '---------------'

You write foo.t using Test::More and Test::Whatever. These both
use the same Test::Builder object. It spits out TAP which
Test::Harness converts into something human readable.

The big problem there is Test::Builder is monolithic. There's no
further breakdown of responsibilities. It only spits out TAP, and
only one version of TAP.

Here's what Test::Builder2 looks like:

  .-------.
  .----------------| foo.t |-------------------.
  | '-------' |
  | | |
  | | |
  v v v
  .------------. .----------------. .------------------.
  | Test::More | | Test::Whatever | | Test::NotUpdated |
  '------------' '----------------' '------------------'
  | | |
  | v v
  | .----------------. .---------------.
  '----------&gt;| Test::Builder2 |&lt;------| Test::Builder |
  '----------------' '---------------'
  |
  v
  .--------------. .-------------.
  | TB2::History |&lt;---| TB2::Result |
  '--------------' '-------------'
  |
  |
  .--------------------------. | .---------------------.
  | TB2::Formatter::TAP::v13 |&lt;-----'------&gt;| TB2::Formatter::GUI |
  '--------------------------' '---------------------'
  | |
  v |
  .-------------------------------. |
  | TB2::Formatter::Streamer::TAP | |
  '-------------------------------' |
  | |
  v |
  .-----. |
  | TAP | |
  '-----' |
  | |
  v v
  .---------------. .-----------------.
  | Test::Harness | | Pretty Pictures |
  '---------------' '-----------------'

It starts out the same, foo.t uses a bunch of test modules
including Test::More and Test::Whatever using the same Test::Builder2
object, but it also uses Test::NotUpdated which is still using
Test::Builder. That's ok because Test::Builder has been rewritten in
terms of Test::Builder2 (more on that below).

Test::Builder2, rather than being a monolith, produces a
Test::Builder2::Result object for each assert run. This gets stored
in a Test::Builder2::History object for possible later use. It also
gets handed to a Test::Builder2::Formatter object, the default is
Test::Builder2::TAP::v13 which produces TAP version 13. This is fed
to a Streamer that prints it to STDOUT and STDERR which is read by
Test::Harness and made human readable.

Because Test::Builder2 is not monolithic, you can swap out parts. For
example, instead of outputting TAP it could instead hand results to a
formatter that produced a simple GUI representation, maybe a green
bar, or something that hooks into a larger GUI. Or maybe one that
produces JUnit XML.

Here's how Test::Builder and Test::Builder2 Relate.

  .-----. .-----.
  | TB2 | | TB1 |
  '-----' '-----'
  | |
  | |
  | |
  | |
  v v
  .-------------. .--------------. .-------------.
  | TB2::Result |-------&gt;| TB2::History |&lt;--------| TB2::Result |
  '-------------' '--------------' '-------------'
  | |
  | |
  | |
  | .----------------. |
  '-------------&gt;| TB2::Formatter |&lt;--------------'
  '----------------'
  |
  v
  .--------.
  | Output |
  '--------'

Test::Builder and Test::Builder2 coordinate their actions by sharing
the same History and Formatter objects. If you call TB1-&gt;ok() it
produces a Result object which it hands to the History singleton and
the Formatter singleton. If you call TB2-&gt;ok() it produces a Result
object which it hands to the same History and Formatter objects.

This allows most of the Test::Builder code to remain the same while
still coordinating with Test::Builder2. It also allows radically
different builders to be made without Test::Builder2 dictating how
they're to work.

The downside is that roles applied to Test::Builder2 will not effect
Test::Builder. Because of this, Test::Builder may become more closely
coupled with Test::Builder2 in the future.

Diagrams by App::Asciio.</description>
      <dc:date>2010-09-09T04:15:00</dc:date>
      <title>Test::Builder2 at 10k Feet</title>
      <pubDate>Thu, 09 Sep 2010 04:15:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;Here&amp;apos;s a diagram of the &amp;quot;flow&amp;quot; of assert results through Test::Builder version 1.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;                     .-------.&lt;br /&gt;                     | foo.t |&lt;br /&gt;                     &amp;apos;-------&amp;apos;&lt;br /&gt;                         |&lt;br /&gt;                         |&lt;br /&gt;     .-------------.     |     .----------------.&lt;br /&gt;     | Test::More  |&amp;lt;---------&amp;gt;| Test::Whatever |&lt;br /&gt;     &amp;apos;-------------&amp;apos;           &amp;apos;----------------&amp;apos;&lt;br /&gt;            |                           |&lt;br /&gt;            |                           |&lt;br /&gt;            |                           |&lt;br /&gt;            |     .---------------.     |&lt;br /&gt;            &amp;apos;----&amp;gt;| Test::Builder |&amp;lt;----&amp;apos;&lt;br /&gt;                  &amp;apos;---------------&amp;apos;&lt;br /&gt;                          |&lt;br /&gt;                          v&lt;br /&gt;                       .-----.&lt;br /&gt;                       | TAP |&lt;br /&gt;                       &amp;apos;-----&amp;apos;&lt;br /&gt;                          |&lt;br /&gt;                          v&lt;br /&gt;                 &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.---------------.&lt;br /&gt;                  | Test::Harness |&lt;br /&gt;                  &amp;apos;---------------&amp;apos;&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;You write foo.t using Test::More and Test::Whatever. These both&lt;br /&gt;use the same Test::Builder object. It spits out TAP which&lt;br /&gt;Test::Harness converts into something human readable.&lt;/p&gt;&lt;p&gt;The big problem there is Test::Builder is monolithic. There&amp;apos;s no&lt;br /&gt;further breakdown of responsibilities. It only spits out TAP, and&lt;br /&gt;only one version of TAP.&lt;/p&gt;&lt;p&gt;Here&amp;apos;s what Test::Builder2 looks like:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;                                 &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.-------.&lt;br /&gt;                 .----------------| foo.t |-------------------.&lt;br /&gt;                 |                &amp;apos;-------&amp;apos;                   |&lt;br /&gt;                 |                    |                       |&lt;br /&gt;                 |                    |                       |&lt;br /&gt;                 v                    v                       v&lt;br /&gt;         &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.------------.     .----------------.     .------------------.&lt;br /&gt;          | Test::More |     | Test::Whatever |     | Test::NotUpdated |&lt;br /&gt;          &amp;apos;------------&amp;apos;     &amp;apos;----------------&amp;apos;     &amp;apos;------------------&amp;apos;&lt;br /&gt;                 |                    |                       |&lt;br /&gt;                 |                    v                       v&lt;br /&gt;                 |           .----------------.       .---------------.&lt;br /&gt;                 &amp;apos;----------&amp;gt;| Test::Builder2 |&amp;lt;------| Test::Builder |&lt;br /&gt;                             &amp;apos;----------------&amp;apos;       &amp;apos;---------------&amp;apos;&lt;br /&gt;                                      |&lt;br /&gt;                                      v&lt;br /&gt;           .--------------.   &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.-------------.&lt;br /&gt;           | TB2::History |&amp;lt;---| TB2::Result |&lt;br /&gt;           &amp;apos;--------------&amp;apos;    &amp;apos;-------------&amp;apos;&lt;br /&gt;                                      |&lt;br /&gt;                                      |&lt;br /&gt;   &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.--------------------------.      |       .---------------------.&lt;br /&gt;    | TB2::Formatter::TAP::v13 |&amp;lt;-----&amp;apos;------&amp;gt;| TB2::Formatter::GUI |&lt;br /&gt;    &amp;apos;--------------------------&amp;apos;              &amp;apos;---------------------&amp;apos;&lt;br /&gt;                  |                                      |&lt;br /&gt;                  v                                      |&lt;br /&gt; &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.-------------------------------.                      |&lt;br /&gt;  | TB2::Formatter::Streamer::TAP |                      |&lt;br /&gt;  &amp;apos;-------------------------------&amp;apos;                      |&lt;br /&gt;                  |                                      |&lt;br /&gt;                  v                                      |&lt;br /&gt;               .-----.                                   |&lt;br /&gt;               | TAP |                                   |&lt;br /&gt;               &amp;apos;-----&amp;apos;                                   |&lt;br /&gt;                  |                                      |&lt;br /&gt;                  v                                      v&lt;br /&gt;         &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.---------------.                     .-----------------.&lt;br /&gt;          | Test::Harness |                     | Pretty Pictures |&lt;br /&gt;          &amp;apos;---------------&amp;apos;                     &amp;apos;-----------------&amp;apos;&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;It starts out the same, foo.t uses a bunch of test modules&lt;br /&gt;including Test::More and Test::Whatever using the same Test::Builder2&lt;br /&gt;object, but it also uses Test::NotUpdated which is still using&lt;br /&gt;Test::Builder. That&amp;apos;s ok because Test::Builder has been rewritten in&lt;br /&gt;terms of Test::Builder2 (more on that below).&lt;/p&gt;&lt;p&gt;Test::Builder2, rather than being a monolith, produces a&lt;br /&gt;Test::Builder2::Result object for each assert run. This gets stored&lt;br /&gt;in a Test::Builder2::History object for possible later use. It also&lt;br /&gt;gets handed to a Test::Builder2::Formatter object, the default is&lt;br /&gt;Test::Builder2::TAP::v13 which produces TAP version 13. This is fed&lt;br /&gt;to a Streamer that prints it to STDOUT and STDERR which is read by&lt;br /&gt;Test::Harness and made human readable.&lt;/p&gt;&lt;p&gt;Because Test::Builder2 is not monolithic, you can swap out parts. For&lt;br /&gt;example, instead of outputting TAP it could instead hand results to a&lt;br /&gt;formatter that produced a simple GUI representation, maybe a green&lt;br /&gt;bar, or something that hooks into a larger GUI. Or maybe one that&lt;br /&gt;produces JUnit XML.&lt;/p&gt;&lt;p&gt;Here&amp;apos;s how Test::Builder and Test::Builder2 Relate.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;       &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.-----.                                         .-----.&lt;br /&gt;        | TB2 |                                         | TB1 |&lt;br /&gt;        &amp;apos;-----&amp;apos;                                         &amp;apos;-----&amp;apos;&lt;br /&gt;           |                                               |&lt;br /&gt;           |                                               |&lt;br /&gt;           |                                               |&lt;br /&gt;           |                                               |&lt;br /&gt;           v                                               v&lt;br /&gt;   &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.-------------.       &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.--------------.         .-------------.&lt;br /&gt;    | TB2::Result |-------&amp;gt;| TB2::History |&amp;lt;--------| TB2::Result |&lt;br /&gt;    &amp;apos;-------------&amp;apos;        &amp;apos;--------------&amp;apos;         &amp;apos;-------------&amp;apos;&lt;br /&gt;           |                                               |&lt;br /&gt;           |                                               |&lt;br /&gt;           |                                               |&lt;br /&gt;           |             &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.----------------.               |&lt;br /&gt;           &amp;apos;-------------&amp;gt;| TB2::Formatter |&amp;lt;--------------&amp;apos;&lt;br /&gt;                          &amp;apos;----------------&amp;apos;&lt;br /&gt;                                   |&lt;br /&gt;                                   v&lt;br /&gt;                             &lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.--------.&lt;br /&gt;                              | Output |&lt;br /&gt;                              &amp;apos;--------&amp;apos;&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;Test::Builder and Test::Builder2 coordinate their actions by sharing&lt;br /&gt;the same History and Formatter objects. If you call TB1-&amp;gt;ok() it&lt;br /&gt;produces a Result object which it hands to the History singleton and&lt;br /&gt;the Formatter singleton. If you call TB2-&amp;gt;ok() it produces a Result&lt;br /&gt;object which it hands to the same History and Formatter objects.&lt;/p&gt;&lt;p&gt;This allows most of the Test::Builder code to remain the same while&lt;br /&gt;still coordinating with Test::Builder2. It also allows radically&lt;br /&gt;different builders to be made without Test::Builder2 dictating how&lt;br /&gt;they&amp;apos;re to work.&lt;/p&gt;&lt;p&gt;The downside is that roles applied to Test::Builder2 will not effect&lt;br /&gt;Test::Builder. Because of this, Test::Builder may become more closely&lt;br /&gt;coupled with Test::Builder2 in the future.&lt;/p&gt;&lt;p&gt;Diagrams by &lt;a href="http://search.cpan.org/dist/App-Asciio"&gt;App::Asciio&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-09T04:15:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~schwern/journal/40527</guid>
    </item>
    <item>
      <author>nobody@example.com (Alias)</author>
      <dc:creator>nobody@example.com (Alias)</dc:creator>
      <link>http://use.perl.org/~Alias/journal/40526</link>
      <description>After 6 or 7 months (mainly waiting around for the next "recommended
upgrade instruction" from the SQLite project) the latest DBD::SQLite
release should occur next week.

You can get the 1.30_06 release candidate from the CPAN, or from the
following URL if your mirror hasn't synced yet.

http://svn.ali.as/cpan/releases/DBD-SQLite-1.30_06.tar.gz

Apart from the normal batch of SQLite upgrades (from 3.6.22 to 3.7.2),
bug fixes, and minor enhancements, this release has two changes that may
break your code.

These changes have been in the dev releases for some time, but you may
want to take the opportunity to test more intensively if you use either
of the following features.

1. BLOB columns with UTF8 content

  - Resolved #54271: Inserting a string with utf-8 flag on
  corrupts BLOB data; now BLOB data is always stored as bytes
  (without the utf-8 flag) even if it has the flag set (ISHIGAKI)

2. FTS3 queries

  - Added support for FTS3 tokenizers written in Perl. Added tests
  and documentation on how to use FTS3. Changed compilation flag
  to use the recommanded -DSQLITE_ENABLE_FTS3_PARENTHESIS
  *** MAY POSSIBLY BREAK OLD APPLICATIONS THAT ALREADY USED FTS3 ***
  (DAMI)

If you are currently using FTS3, please see DBD::SQLite::FTS3Transitional
which contains a helper function for automatically upgrading old FTS3
queries to the new syntax.</description>
      <dc:date>2010-09-08T22:11:00</dc:date>
      <title>DBD::SQLite 1.31 releasing next week and may break your code</title>
      <pubDate>Wed, 08 Sep 2010 22:11:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;After 6 or 7 months (mainly waiting around for the next &amp;quot;recommended upgrade instruction&amp;quot; from the SQLite project) the latest DBD::SQLite release should occur next week.&lt;/p&gt;&lt;p&gt;You can get the 1.30_06 release candidate from the CPAN, or from the following URL if your mirror hasn&amp;apos;t synced yet.&lt;/p&gt;&lt;p&gt;&lt;a href="http://svn.ali.as/cpan/releases/DBD-SQLite-1.30_06.tar.gz"&gt;http://svn.ali.as/cpan/releases/DBD-SQLite-1.30_06.tar.gz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Apart from the normal batch of SQLite upgrades (from 3.6.22 to 3.7.2), bug fixes, and minor enhancements, this release has two changes that may break your code.&lt;/p&gt;&lt;p&gt;These changes have been in the dev releases for some time, but you may want to take the opportunity to test more intensively if you use either of the following features.&lt;/p&gt;&lt;p&gt;1. BLOB columns with UTF8 content&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;- Resolved #54271: Inserting a string with utf-8 flag on&lt;br /&gt;  corrupts BLOB data; now BLOB data is always stored as bytes&lt;br /&gt;   (without the utf-8 flag) even if it has the flag set (ISHIGAKI)&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;2. FTS3 queries&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;- Added support for FTS3 tokenizers written in Perl. Added tests&lt;br /&gt;  and documentation on how to use FTS3. Changed compilation flag&lt;br /&gt;  to use the recommanded -DSQLITE_ENABLE_FTS3_PARENTHESIS&lt;br /&gt;  *** MAY POSSIBLY BREAK OLD APPLICATIONS THAT ALREADY USED FTS3 ***&lt;br /&gt;  (DAMI)&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;If you are currently using FTS3, please see &lt;a href="http://search.cpan.org/perldoc?DBD::SQLite::FTS3Transitional"&gt;DBD::SQLite::FTS3Transitional&lt;/a&gt; which contains a helper function for automatically upgrading old FTS3 queries to the new syntax.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-08T22:11:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Alias/journal/40526</guid>
    </item>
    <item>
      <author>nobody@example.com (pudge)</author>
      <dc:creator>nobody@example.com (pudge)</dc:creator>
      <link>http://use.perl.org/~pudge/journal/40525</link>
      <description>See here.</description>
      <dc:date>2010-09-08T18:07:00</dc:date>
      <title>use Perl; Shutting Down Indefinitely</title>
      <pubDate>Wed, 08 Sep 2010 18:07:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;See &lt;a href="http://use.perl.org/article.pl?sid=10/09/08/2053239"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-08T18:07:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~pudge/journal/40525</guid>
    </item>
    <item>
      <author>nobody@example.com (masak)</author>
      <dc:creator>nobody@example.com (masak)</dc:creator>
      <link>http://use.perl.org/~masak/journal/40524</link>
      <description>This weekend marks the end of a quite astonishing era. The Pugs repo,
that hosted all the amazing Perl 6 activity, is no more. At its height,
this repository had 242 committers! I just checked.

The Pugs repository has functioned as a common writing area for Perl
6-related things. First Pugs; then a lot of external modules and scripts
written in Perl 6; what would eventually morph into the Perl 6 test suite;
even the Perl 6 specification and the standard grammar. Commit bits
(write access credentials) were handed out liberally, and newcomers were
encouraged to help improve things they found amiss. The degree to which
this system worked without a hitch has been quite astonishing. There have
been no edit wars, no vandalism, no banning. Just the continuing flow of
commits. Trust the anarchy.

So why are we killing off the Pugs repository? Well, technologies come
and go; not so much because they worsen by each year, but because our
expectations rise in a sort of software inflation. The SVN repository
became too high-maintenance, and a transition to git was the natural next
step. The Pugs repository has been split up into the git repositories
linked to in the previous paragraph. Those bits that don't belong in any
of the standard bins remain in the Mu repository. (Its name is a
reference to the most-general object type in Perl 6, what in other
languages is commonly known as 'Object'.)

I for one salute our new git-based overlords! May the commits keep
flowing even under this new system. Also, moritz++ for carrying out the
move.</description>
      <dc:date>2010-09-06T02:30:00</dc:date>
      <title>The Pugs repository is dead; long live Mu!</title>
      <pubDate>Mon, 06 Sep 2010 02:30:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;This weekend marks the end of a quite astonishing era. The Pugs repo, that hosted all the &lt;a href="http://use.perl.org/~masak/journal/40451" rel="nofollow"&gt;amazing Perl 6 activity&lt;/a&gt;, is no more. At its height, this repository had 242 committers! I just checked.&lt;/p&gt;&lt;p&gt;The Pugs repository has functioned as a common writing area for Perl 6-related things. First &lt;a href="http://github.com/audreyt/pugs" rel="nofollow"&gt;Pugs&lt;/a&gt;; then a lot of external &lt;a href="http://github.com/perl6/perl6-examples" rel="nofollow"&gt;modules and scripts&lt;/a&gt; written in Perl 6; what would eventually morph into &lt;a href="http://github.com/perl6/roast" rel="nofollow"&gt;the Perl 6 test suite&lt;/a&gt;; even the &lt;a href="http://github.com/perl6/specs" rel="nofollow"&gt;Perl 6 specification&lt;/a&gt; and the &lt;a href="http://github.com/perl6/std" rel="nofollow"&gt;standard grammar&lt;/a&gt;. Commit bits (write access credentials) were handed out liberally, and newcomers were encouraged to help improve things they found amiss. The degree to which this system worked without a hitch has been quite astonishing. There have been no edit wars, no vandalism, no banning. Just the continuing flow of commits. Trust the anarchy.&lt;/p&gt;&lt;p&gt;So why are we killing off the Pugs repository? Well, technologies come and go; not so much because they worsen by each year, but because our expectations rise in a sort of software inflation. The SVN repository became too high-maintenance, and a transition to git was the natural next step. The Pugs repository has been split up into the git repositories linked to in the previous paragraph. Those bits that don&amp;apos;t belong in any of the standard bins remain in the &lt;a href="http://github.com/perl6/mu" rel="nofollow"&gt;Mu repository&lt;/a&gt;. (Its name is a reference to the most-general object type in Perl 6, what in other languages is commonly known as &amp;apos;Object&amp;apos;.)&lt;/p&gt;&lt;p&gt;I for one salute our new git-based overlords! May the commits keep flowing even under this new system. Also, moritz++ for carrying out the move.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-06T02:30:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~masak/journal/40524</guid>
    </item>
    <item>
      <author>nobody@example.com (Alias)</author>
      <dc:creator>nobody@example.com (Alias)</dc:creator>
      <link>http://use.perl.org/~Alias/journal/40523</link>
      <description>Module::Install has been through a long period of gradual stability over
the last year, without any really dramatic improvements to the grammar or
APIs.

With the more urgent "it doesn't work with blah" stuff mostly solved now,
one of the big remaining issues is around error clarity and excessive
magic.

For example, some random author that is trying to checkout a Catalyst
project needs:

1. To have Module::Install installed.
2. To have Module::Install::Catalyst installed.

In the case of the former, you get the semi-cryptic but at least standard
"Can't find inc/Module/Install.pm in @INC" message, so the error is
resolvable.

But in the latter case, you're likely to get something like "Unknown
command 'catalyst_ignore'", with no real obvious resolution mechanism.

I think this idea of automatic plugin discovery is starting to hit it's
limits in terms of clarity.

And so I'd like to do something counter to my natural instincts here, and
make M:I more verbose.

I'm thinking of something like the following for explicitly declaring the
use of a non-core Module::Install extension.

  use inc::Module::Install qw{ Catalyst XSUtil };

This would both allow M:I to error with a much more meaningful error when
you don't have a plugin, and also prevent the loading of unused plugins
which should prevent accidental plugin collisions (some of which I've
seen occurring in the CPAN Testers machines).

Thoughts?</description>
      <dc:date>2010-09-05T22:26:00</dc:date>
      <title>Should Module::Install move to explicit plugin declaration?</title>
      <pubDate>Sun, 05 Sep 2010 22:26:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;Module::Install has been through a long period of gradual stability over the last year, without any really dramatic improvements to the grammar or APIs.&lt;/p&gt;&lt;p&gt;With the more urgent &amp;quot;it doesn&amp;apos;t work with blah&amp;quot; stuff mostly solved now, one of the big remaining issues is around error clarity and excessive magic.&lt;/p&gt;&lt;p&gt;For example, some random author that is trying to checkout a Catalyst project needs:&lt;/p&gt;&lt;p&gt;1. To have Module::Install installed.&lt;br /&gt;2. To have Module::Install::Catalyst installed.&lt;/p&gt;&lt;p&gt;In the case of the former, you get the semi-cryptic but at least standard &amp;quot;Can&amp;apos;t find inc/Module/Install.pm in @INC&amp;quot; message, so the error is resolvable.&lt;/p&gt;&lt;p&gt;But in the latter case, you&amp;apos;re likely to get something like &amp;quot;Unknown command &amp;apos;catalyst_ignore&amp;apos;&amp;quot;, with no real obvious resolution mechanism.&lt;/p&gt;&lt;p&gt;I think this idea of automatic plugin discovery is starting to hit it&amp;apos;s limits in terms of clarity.&lt;/p&gt;&lt;p&gt;And so I&amp;apos;d like to do something counter to my natural instincts here, and make M:I more verbose.&lt;/p&gt;&lt;p&gt;I&amp;apos;m thinking of something like the following for explicitly declaring the use of a non-core Module::Install extension.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;use inc::Module::Install qw{ Catalyst XSUtil };&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;This would both allow M:I to error with a much more meaningful error when you don&amp;apos;t have a plugin, and also prevent the loading of unused plugins which should prevent accidental plugin collisions (some of which I&amp;apos;ve seen occurring in the CPAN Testers machines).&lt;/p&gt;&lt;p&gt;Thoughts?&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-05T22:26:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Alias/journal/40523</guid>
    </item>
    <item>
      <author>nobody@example.com (perl6doc)</author>
      <dc:creator>nobody@example.com (perl6doc)</dc:creator>
      <link>http://use.perl.org/~perl6doc/journal/40522</link>
      <description>.. I will start officially my work on the grant. Friday I gave my very
well recieved Perl 6 talk (German slides). I set some minds right about
Perl 6. I explained whts the idea behing Perl and Perl 6, showed some
syntactic sugar, tipped the idea of perl 6 as a meta language and said
some words about the current state of implementations.

First mileston ist to write tablet 2 about variables in English (and
German). As written under my proposal as comment, it will also appear in
Perl6::Doc and therefore also in grop meaning the commandline on your
computer, if you wish.

There are also some bits of the tablet 0 - history I'm currently thinking
about. And I also want to develop with jens (as announced) some
educanional material, which I hope will also be stored in gabors git repo
for further reuse.

All these things benefit from each other and YOU can of course contribute
if you like.</description>
      <dc:date>2010-09-05T17:54:00</dc:date>
      <title>tomorrow, tomorrow</title>
      <pubDate>Sun, 05 Sep 2010 17:54:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;.. I will start officially my work on &lt;a href="http://news.perlfoundation.org/2010/08/2010q3-grant-proposal-perl-6-t.html" rel="nofollow"&gt;the grant&lt;/a&gt;. Friday I gave my very well recieved Perl 6 talk (&lt;a href="http://www.slideshare.net/lichtkind/neuperl6" rel="nofollow"&gt;German slides&lt;/a&gt;). I set some minds right about Perl 6. I explained whts the idea behing Perl and Perl 6, showed some syntactic sugar, tipped the idea of perl 6 as a meta language and said some words about the current state of implementations. &lt;br /&gt;&lt;br /&gt; First mileston ist to write tablet 2 about variables in English (and German). As written under my proposal as comment, it will also appear in Perl6::Doc and therefore also in grop meaning the commandline on your computer, if you wish. &lt;br /&gt;&lt;br /&gt; There are also some bits of the tablet 0 - history I&amp;apos;m currently thinking about. And I also want to develop with jens (as announced) some educanional material, which I hope will also be stored in &lt;a href="http://github.com/szabgab/perl-promotion" rel="nofollow"&gt;gabors git repo&lt;/a&gt; for further reuse. &lt;br /&gt;&lt;br /&gt; All these things benefit from each other and YOU can of course contribute if you like.&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-05T17:54:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~perl6doc/journal/40522</guid>
    </item>
    <item>
      <author>nobody@example.com (awwaiid)</author>
      <dc:creator>nobody@example.com (awwaiid)</dc:creator>
      <link>http://use.perl.org/~awwaiid/journal/40521</link>
      <description>We're starting our usual monthly DC Perl Mongers meeting a bit early this
Tuesday (September 7th) to have a little pizza and celebrate Rakudo-Star!
Arrive at 6:30pm at the Starbucks at 18th and K Street NW (call me,
Brock, if you miss us and need to be let in, number on the website) if
you want food. But feel free to wander in any time thereafter, we usually
stay as late as 10:00pm. We'll swoop down and look for people at the
normal 7:30pm time too :)

Other activities:

  * Bring your laptop!

  * Installing Rakudo-Star

  * Giving hands-on tutorials

  * Beginner and Advanced welcome!

  * Never been to DC.pm before? No problem, come have some free pizza!

Please put your name on http://dc.pm.org/Rakudo-Star_Party (or email the
mailing list, which can be found at http://dc.pm.org/) so we know how
much food to get.

If you have any questions, email the list or me directly --
awwaiid@gmail.com will do :)

About Rakudo Star: "Rakudo Star" is a useful and usable distribution of
Perl 6. Current releases are aimed at "early adopters" of Perl 6. We can
tell you ALL about it when you arrive :)</description>
      <dc:date>2010-09-03T20:50:00</dc:date>
      <title>DC Perl Mongers Rakudo Star Pizza Party Meeting</title>
      <pubDate>Fri, 03 Sep 2010 20:50:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;We&amp;apos;re starting our usual monthly &lt;a href="http://dc.pm.org/" rel="nofollow"&gt;DC Perl Mongers&lt;/a&gt; meeting a bit early this Tuesday (September 7th) to have a little pizza and celebrate Rakudo-Star! Arrive at 6:30pm at the Starbucks at 18th and K Street NW (call me, Brock, if you miss us and need to be let in, number on the website) if you want food. But feel free to wander in any time thereafter, we usually stay as late as 10:00pm. We&amp;apos;ll swoop down and look for people at the normal 7:30pm time too&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;:)&lt;/p&gt;&lt;p&gt; Other activities: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Bring your laptop!&lt;/li&gt;&lt;li&gt;Installing Rakudo-Star&lt;/li&gt;&lt;li&gt;Giving hands-on tutorials&lt;/li&gt;&lt;li&gt;Beginner and Advanced welcome!&lt;/li&gt;&lt;li&gt;Never been to DC.pm before? No problem, come have some free pizza!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; Please put your name on &lt;a href="http://dc.pm.org/Rakudo-Star_Party" rel="nofollow"&gt;http://dc.pm.org/Rakudo-Star_Party&lt;/a&gt; (or email the mailing list, which can be found at &lt;a href="http://dc.pm.org/" rel="nofollow"&gt;http://dc.pm.org/&lt;/a&gt;) so we know how much food to get. &lt;/p&gt;&lt;p&gt; If you have any questions, email the list or me directly -- awwaiid@gmail.com will do&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;:) &lt;/p&gt;&lt;p&gt; About Rakudo Star: &amp;quot;Rakudo Star&amp;quot; is a useful and usable distribution of Perl 6. Current releases are aimed at &amp;quot;early adopters&amp;quot; of Perl 6. We can tell you ALL about it when you arrive&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;:) &lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-03T20:50:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~awwaiid/journal/40521</guid>
    </item>
    <item>
      <author>nobody@example.com (rblackwe)</author>
      <dc:creator>nobody@example.com (rblackwe)</dc:creator>
      <link>http://use.perl.org/~rblackwe/journal/40520</link>
      <description>The Pittsburgh Perl Workshop 2010 will be Saturday October 9 and Sunday
10 at the Gates Center at CMU.

Don't miss your chance to speak at this years Workshop. The Call For
Papers ends Monday Sept 6.

Submit your talk.</description>
      <dc:date>2010-09-02T11:22:00</dc:date>
      <title>Pittsburgh Perl Workshop CFP ends Monday Sept 6</title>
      <pubDate>Thu, 02 Sep 2010 11:22:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;The Pittsburgh Perl Workshop 2010 will be Saturday October 9 and Sunday 10 at the Gates Center at CMU. &lt;br /&gt;&lt;br /&gt; Don&amp;apos;t miss your chance to speak at this years Workshop. The Call For Papers ends Monday Sept 6. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://pghpw.org/ppw2010/newtalk" rel="nofollow"&gt;Submit your talk.&lt;/a&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-02T11:22:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~rblackwe/journal/40520</guid>
    </item>
    <item>
      <author>nobody@example.com (masak)</author>
      <dc:creator>nobody@example.com (masak)</dc:creator>
      <link>http://use.perl.org/~masak/journal/40519</link>
      <description>It is with a peevish exultation of spirit that I announce on behalf of
the Yapsi development team the September 2010 release of Yapsi -- soon to
be a major motion picture -- a Perl 6 compiler written in Perl 6.

You can download it here (or, if you happen to be on an
avian-carrier-based network, you can "pidgeon" it here).

Yapsi is implemented in Perl 6. It thus requires a Perl 6 implementation
to build and run. This release of Yapsi has been confirmed to work on
both Rakudo Star 2010.08 and Rakudo Star 2010.07.

Yapsi is an "official and complete" implementation of Perl 6. Yapsi's
official status has been publicly confirmed by Patrick Michaud, the
Rakudo pumking. The claim about Yapsi being complete... well, it might
just be what PR people sometimes refer to as "a slight exaggeration". On
the bright side, it's becoming less so with each new release.

This month's release brings you unless and until, as well as our-scoped
variables:

$ yapsi -e 'my $a = 0; unless $a { say 42 }'
42

$ yapsi -e 'my $a = 0; until $a { say ++$a }' 1

$ yapsi -e 'our $a = 42; { my $a = 5; { say our $a } }' 42

For a complete list of changes, see doc/ChangeLog.

Quite a lot of features are within reach of people who are interested in
hacking on Yapsi. See the doc/LOLHALP file for a list of 'em. In fact,
that's how isBEKaml++ implemented 'unless' this month. (After which he
exclaimed "that was easy!" and tackled 'until'.) If you're wondering
whether you're qualified to help with the Yapsi project, that probably
means you are.

Yapsi consists of a compiler and a runtime. The compiler generates
instruction code which the runtime then interprets. In Yapsi, that
instruction code (unfortunately) is called SIC[!]. Until further notice,
SIC as a format changes with each monthly release for various, mostly
good reasons. However, if you write a downstream tool that makes
assumptions about the SIC format, someone might change it just out of
spite. SIC is explicitly not compatible with later, earlier, or present
versions of itself.

An overarching goal for making a Perl 6 compiler-and-runtime is to use it
as a server for various other projects, which will hook in at different
steps:

  *  A time-traveling debugger (tardis), which hooks into the runtime.

  *  A coverage tool (lid), which will also hook into the runtime.

  *  A syntax checker (sigmund), which will use output from the parser.

Another overarching goal is to optimize for fun while learning about
parsers, compilers, and runtimes.

Have the appropriate amount of fun!</description>
      <dc:date>2010-09-01T18:31:00</dc:date>
      <title>Yapsi 2010.09 Released!</title>
      <pubDate>Wed, 01 Sep 2010 18:31:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;It is with a peevish exultation of spirit that I announce on behalf of the Yapsi development team the September 2010 release of Yapsi -- soon to be a major motion picture -- a Perl 6 compiler written in Perl 6.&lt;/p&gt;&lt;p&gt;You can download it &lt;a href="http://github.com/downloads/masak/yapsi/yapsi-2010.09.tar.gz" rel="nofollow"&gt;here&lt;/a&gt; (or, if you happen to be on an &lt;a href="http://en.wikipedia.org/wiki/IP_over_Avian_Carriers" rel="nofollow"&gt;avian-carrier-based&lt;/a&gt; network, you can &amp;quot;pidgeon&amp;quot; it &lt;a href="http://github.com/downloads/masak/yapsi/yapsi-2010.09.tar.gz" rel="nofollow"&gt;here&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Yapsi is implemented in Perl 6. It thus requires a Perl 6 implementation to build and run. This release of Yapsi has been confirmed to work on both Rakudo Star 2010.08 and Rakudo Star 2010.07.&lt;/p&gt;&lt;p&gt;Yapsi is an &amp;quot;official and complete&amp;quot; implementation of Perl 6. Yapsi&amp;apos;s official status has been publicly confirmed by Patrick Michaud, the Rakudo pumking. The claim about Yapsi being complete... well, it might just be what PR people sometimes refer to as &amp;quot;a slight exaggeration&amp;quot;. On the bright side, it&amp;apos;s becoming less so with each new release.&lt;/p&gt;&lt;p&gt;This month&amp;apos;s release brings you &lt;code&gt;unless&lt;/code&gt; and &lt;code&gt;until&lt;/code&gt;, as well as &lt;code&gt;our&lt;/code&gt;-scoped variables:&lt;/p&gt;&lt;p&gt;&lt;code&gt; $ yapsi -e &amp;apos;my $a = 0; unless $a { say 42 }&amp;apos;&lt;br /&gt; 42 &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; $ yapsi -e &amp;apos;my $a = 0; until $a { say ++$a }&amp;apos; 1 &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; $ yapsi -e &amp;apos;our $a = 42; { my $a = 5; { say our $a } }&amp;apos; 42 &lt;/code&gt;&lt;/p&gt;&lt;p&gt;For a complete list of changes, see &lt;a href="http://github.com/masak/yapsi/tree/master/doc/ChangeLog" rel="nofollow"&gt;doc/ChangeLog&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Quite a lot of features are within reach of people who are interested in hacking on Yapsi. See the &lt;a href="http://github.com/masak/yapsi/tree/master/doc/LOLHALP" rel="nofollow"&gt;doc/LOLHALP&lt;/a&gt; file for a list of &amp;apos;em. In fact, that&amp;apos;s how isBEKaml++ implemented &amp;apos;unless&amp;apos; this month. (After which he exclaimed &amp;quot;that was easy!&amp;quot; and tackled &amp;apos;until&amp;apos;.) If you&amp;apos;re wondering whether you&amp;apos;re qualified to help with the Yapsi project, that probably means you are.&lt;/p&gt;&lt;p&gt;Yapsi consists of a compiler and a runtime. The compiler generates instruction code which the runtime then interprets. In Yapsi, that instruction code (unfortunately) is called SIC[!]. Until further notice, SIC as a format changes with each monthly release for various, mostly good reasons. However, if you write a downstream tool that makes assumptions about the SIC format, someone might change it just out of spite. SIC is explicitly not compatible with later, earlier, or present versions of itself.&lt;/p&gt;&lt;p&gt;An overarching goal for making a Perl 6 compiler-and-runtime is to use it as a server for various other projects, which will hook in at different steps:&lt;/p&gt;&lt;ul&gt;&lt;li&gt; A time-traveling debugger (tardis), which hooks into the runtime.&lt;/li&gt;&lt;li&gt; A coverage tool (lid), which will also hook into the runtime.&lt;/li&gt;&lt;li&gt; A syntax checker (sigmund), which will use output from the parser.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Another overarching goal is to optimize for fun while learning about parsers, compilers, and runtimes.&lt;/p&gt;&lt;p&gt;Have the appropriate amount of fun!&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-01T18:31:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~masak/journal/40519</guid>
    </item>
    <item>
      <author>nobody@example.com (pmichaud)</author>
      <dc:creator>nobody@example.com (pmichaud)</dc:creator>
      <link>http://use.perl.org/~pmichaud/journal/40518</link>
      <description>[This announcement was made last week on rakudo.org -- I'm reposting to
use.perl.org so it will show up in the various Perl aggregators. --Pm]

On behalf of the Rakudo and Perl 6 development teams, I'm happy to
announce the August 2010 release of "Rakudo Star", a useful and usable
distribution of Perl 6. The tarball for the August 2010 release is
available from http://github.com/rakudo/star/downloads.

Rakudo Star is aimed at "early adopters" of Perl 6. We know that it still
has some bugs, it is far slower than it ought to be, and there are some
advanced pieces of the Perl 6 language specification that aren't
implemented yet. But Rakudo Perl 6 in its current form is also proving to
be viable (and fun) for developing applications and exploring a great new
language. These "Star" releases are intended to make Perl 6 more widely
available to programmers, grow the Perl 6 codebase, and gain additional
end-user feedback about the Perl 6 language and Rakudo's implementation
of it.

In the Perl 6 world, we make a distinction between the language ("Perl
6") and specific implementations of the language such as "Rakudo Perl".
The August 2010 Star release includes release #32 of the Rakudo Perl 6
compiler [1], version 2.7.0 of the Parrot Virtual Machine [2], and
various modules, documentation, and other resources collected from the
Perl 6 community.

This release of Rakudo Star adds the following features over the previous
Star release:
* Nil is now undefined
* Many regex modifiers are now recognized on the outside of regexes
* Mathematic and range operations are now faster (they're still slow, but
they're significantly faster than they were in the previous release)
* Initial implementations of .pack and .unpack
* MAIN can parse short arguments
* Removed a significant memory leak for loops and other repeated blocks

This release (temporarily?) omits the Config::INI module that was
included in the 2010.07 release, as it no longer builds with the shipped
version of Rakudo. We hope to see Config::INI return soon.

There are some key features of Perl 6 that Rakudo Star does not yet
handle appropriately, although they will appear in upcoming releases.
Thus, we do not consider Rakudo Star to be a "Perl 6.0.0" or "1.0"
release. Some of the not-quite-there features include:
* nested package definitions
* binary objects, native types, pack and unpack
* typed arrays
* macros
* state variables
* threads and concurrency
* Unicode strings at levels other than codepoints
* pre and post constraints, and some other phasers
* interactive readline that understands Unicode
* backslash escapes in regex character classes
* non-blocking I/O
* most of Synopsis 9
* perl6doc or pod manipulation tools

In many places we've tried to make Rakudo smart enough to inform the
programmer that a given feature isn't implemented, but there are many
that we've missed. Bug reports about missing and broken features are
welcomed.

See http://perl6.org/ for links to much more information about Perl 6,
including documentation, example code, tutorials, reference materials,
specification documents, and other supporting resources. An updated draft
of a Perl 6 book is available as in the release tarball.

The development team thanks all of the contributors and sponsors for
making Rakudo Star possible. If you would like to contribute, see
http://rakudo.org/how-to-help, ask on the perl6-compiler@perl.org mailing
list, or join us on IRC channel #perl6 on freenode.

Rakudo Star releases are created on a monthly cycle or as needed in
response to important bug fixes or improvements. The next planned release
of Rakudo Star will be on September 28, 2010.

[1] http://github.com/rakudo/rakudo
[2] http://parrot.org/</description>
      <dc:date>2010-09-01T08:36:00</dc:date>
      <title>Rakudo Star 2010.08 released</title>
      <pubDate>Wed, 01 Sep 2010 08:36:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;[This announcement was made last week on rakudo.org -- I&amp;apos;m reposting to use.perl.org so it will show up in the various Perl aggregators. --Pm]&lt;/p&gt;&lt;p&gt;On behalf of the Rakudo and Perl 6 development teams, I&amp;apos;m happy to announce the August 2010 release of &amp;quot;Rakudo Star&amp;quot;, a useful and usable distribution of Perl 6. The tarball for the August 2010 release is available from &lt;a href="http://github.com/rakudo/star/downloads"&gt;http://github.com/rakudo/star/downloads&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Rakudo Star is aimed at &amp;quot;early adopters&amp;quot; of Perl 6. We know that it still has some bugs, it is far slower than it ought to be, and there are some advanced pieces of the Perl 6 language specification that aren&amp;apos;t implemented yet. But Rakudo Perl 6 in its current form is also proving to be viable (and fun) for developing applications and exploring a great new language. These &amp;quot;Star&amp;quot; releases are intended to make Perl 6 more widely available to programmers, grow the Perl 6 codebase, and gain additional end-user feedback about the Perl 6 language and Rakudo&amp;apos;s implementation of it.&lt;/p&gt;&lt;p&gt;In the Perl 6 world, we make a distinction between the language (&amp;quot;Perl 6&amp;quot;) and specific implementations of the language such as &amp;quot;Rakudo Perl&amp;quot;. The August 2010 Star release includes release #32 of the Rakudo Perl 6 compiler [1], version 2.7.0 of the Parrot Virtual Machine [2], and various modules, documentation, and other resources collected from the Perl 6 community.&lt;/p&gt;&lt;p&gt;This release of Rakudo Star adds the following features over the previous Star release:&lt;br /&gt;* Nil is now undefined&lt;br /&gt;* Many regex modifiers are now recognized on the outside of regexes&lt;br /&gt;* Mathematic and range operations are now faster (they&amp;apos;re still slow, but they&amp;apos;re significantly faster than they were in the previous release)&lt;br /&gt;* Initial implementations of&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.pack and&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.unpack&lt;br /&gt;* MAIN can parse short arguments&lt;br /&gt;* Removed a significant memory leak for loops and other repeated blocks&lt;/p&gt;&lt;p&gt;This release (temporarily?) omits the Config::INI module that was included in the 2010.07 release, as it no longer builds with the shipped version of Rakudo. We hope to see Config::INI return soon.&lt;/p&gt;&lt;p&gt;There are some key features of Perl 6 that Rakudo Star does not yet handle appropriately, although they will appear in upcoming releases. Thus, we do not consider Rakudo Star to be a &amp;quot;Perl 6.0.0&amp;quot; or &amp;quot;1.0&amp;quot; release. Some of the not-quite-there features include:&lt;br /&gt;* nested package definitions&lt;br /&gt;* binary objects, native types, pack and unpack&lt;br /&gt;* typed arrays&lt;br /&gt;* macros&lt;br /&gt;* state variables&lt;br /&gt;* threads and concurrency&lt;br /&gt;* Unicode strings at levels other than codepoints&lt;br /&gt;* pre and post constraints, and some other phasers&lt;br /&gt;* interactive readline that understands Unicode&lt;br /&gt;* backslash escapes in regex character classes&lt;br /&gt;* non-blocking I/O&lt;br /&gt;* most of Synopsis 9&lt;br /&gt;* perl6doc or pod manipulation tools&lt;/p&gt;&lt;p&gt;In many places we&amp;apos;ve tried to make Rakudo smart enough to inform the programmer that a given feature isn&amp;apos;t implemented, but there are many that we&amp;apos;ve missed. Bug reports about missing and broken features are welcomed.&lt;/p&gt;&lt;p&gt;See &lt;a href="http://perl6.org/"&gt;http://perl6.org/&lt;/a&gt; for links to much more information about Perl 6, including documentation, example code, tutorials, reference materials, specification documents, and other supporting resources. An updated draft of a Perl 6 book is available as in the release tarball.&lt;/p&gt;&lt;p&gt;The development team thanks all of the contributors and sponsors for making Rakudo Star possible. If you would like to contribute, see &lt;a href="http://rakudo.org/how-to-help"&gt;http://rakudo.org/how-to-help&lt;/a&gt;, ask on the perl6-compiler@perl.org mailing list, or join us on IRC channel #perl6 on freenode.&lt;/p&gt;&lt;p&gt;Rakudo Star releases are created on a monthly cycle or as needed in response to important bug fixes or improvements. The next planned release of Rakudo Star will be on September 28, 2010.&lt;/p&gt;&lt;p&gt;[1] &lt;a href="http://github.com/rakudo/rakudo"&gt;http://github.com/rakudo/rakudo&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://parrot.org/"&gt;http://parrot.org/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-09-01T08:36:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~pmichaud/journal/40518</guid>
    </item>
    <item>
      <author>nobody@example.com (schwern)</author>
      <dc:creator>nobody@example.com (schwern)</dc:creator>
      <link>http://use.perl.org/~schwern/journal/40517</link>
      <description>I've had a grant open for Test::Builder2 for, oh god over two years now.
Since I started it, Perl 6 has had a release! I think its the second
oldest running dev grant.

I've cleared the decks of other responsibilities and can dedicate
September to, if not finishing, then at least releasing something people
can poke at. First alpha release was supposed to be "two weeks after the
start" ha ha ha! oh god. The design has evolved and simplified greatly in
the intervening two years, but its time to get something the hell out the
door. At least a Test::Builder2 Star if you will.

There's critical components missing. There's no diagnostics, YAML or
otherwise. The issues with nested asserts are still congealing. Plans are
not enforced. Result objects are in the middle of being remodeled...
again. But Test::Builder is using what parts of Test::Builder2 are
usable. Multiple output formats and streams work. Asserts can be nested
in the common, simple cases without having to fiddle with $Level. And you
can hook into various events.

Step one is I'm going to seal up what's there, write docs where they're
missing, and release something.

A release before October or the grant dies.</description>
      <dc:date>2010-08-28T00:08:00</dc:date>
      <title>A month of Test::Builder2</title>
      <pubDate>Sat, 28 Aug 2010 00:08:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;I&amp;apos;ve had &lt;a href="http://www.perlfoundation.org/test_builder_2"&gt;a grant open for Test::Builder2&lt;/a&gt; for, oh god over two years now. Since I started it, Perl 6 has had a release! I think its the second oldest running dev grant.&lt;/p&gt;&lt;p&gt;I&amp;apos;ve cleared the decks of other responsibilities and can dedicate September to, if not finishing, then at least releasing something people can poke at. First alpha release was supposed to be &amp;quot;two weeks after the start&amp;quot; ha ha ha! oh god. The design has evolved and simplified greatly in the intervening two years, but its time to get something the hell out the door. At least a &lt;a href="http://github.com/schwern/test-more/tree/Test-Builder2"&gt;Test::Builder2&lt;/a&gt; Star if you will.&lt;/p&gt;&lt;p&gt;There&amp;apos;s critical components missing. There&amp;apos;s no diagnostics, YAML or otherwise. The issues with nested asserts are still congealing. Plans are not enforced. Result objects are in the middle of being remodeled... again. But Test::Builder is using what parts of Test::Builder2 are usable. Multiple output formats and streams work. Asserts can be nested in the common, simple cases without having to fiddle with $Level. And you can hook into various events.&lt;/p&gt;&lt;p&gt;Step one is I&amp;apos;m going to seal up what&amp;apos;s there, write docs where they&amp;apos;re missing, and release something.&lt;/p&gt;&lt;p&gt;A release before October or the grant dies.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-28T00:08:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~schwern/journal/40517</guid>
    </item>
    <item>
      <author>nobody@example.com (masak)</author>
      <dc:creator>nobody@example.com (masak)</dc:creator>
      <link>http://use.perl.org/~masak/journal/40516</link>
      <description>So, I wrote a program to generate Pascal's triangle. The first ten rows
of the triangle, at least. It only used simple features of Perl 6, such
as scalars, nested arrays, and for loops.

my $ELEMENTS = 10;
my @pascal = [1];

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

my @current;
push @current, @last[0];
for 0 .. @last - 2 {
push @current, @last[$_] + @last[$_ + 1];
}
push @current, @last[ * - 1 ];

push @pascal, [@current];
}

say @pascal.perl;

In fact, save for simple mechanically substitutable differences, it could
have been a Perl 5 script. In fact, with a bit of manual array
allocation, it could have been a C script. That's OK; there's a tolerance
in the Perl community of writing code that looks like it was thunk in
some other language.

But I've heard that Perl 6 is great at doing things with operators. For
example, the Z operator, which interleaves two lists, seems to be able to
help me write my push statements more succinctly:

my $ELEMENTS = 10;
my @pascal = [1];

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

my @current;
for (0, @last) Z (@last, 0) -&gt; $left, $right {
push @current, $left + $right;
}

push @pascal, [@current];
}

say @pascal.perl;

The parentheses before and after the infix:&lt;Z&gt; aren't necessary, because
the Z operator has looser precedence than comma. They're just shown here
to make your eyes accustomed to reading this construct.

In fact, now that only the addition is performed in the inner loop, I
might as well use the Z+ operator, which does this for me.

my $ELEMENTS = 10;
my @pascal = [1];

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

my @current = 0, @last Z+ @last, 0;

push @pascal, [@current];
}

say @pascal.perl;

Now as the remaining loop shrinks to a size I can take in all at once, I
see a bit more clearly what I'm doing: I'm building each new list from
the previous one. I could feed the previous list into a named function to
get the current one:

my $ELEMENTS = 10;
my @pascal = [1];

sub next-list(@p) {
[0, @p Z+ @p, 0]
}

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

my @current = next-list(@last);

push @pascal, @current;
}

say @pascal.perl;

Or I could just feed it into a in-place anonymous sub.

my $ELEMENTS = 10;
my @pascal = [1];

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

push @pascal, (sub (@p) { [0, @p Z+ @p, 0] }).(@last);
}

say @pascal.perl;

But why even a sub? Perl 6 has a lighter construct, namely a "pointy
block" (also known as a "closure" or a "lambda"). It doesn't participate
in the call stack, and it's slightly easier to write.

my $ELEMENTS = 10;
my @pascal = [1];

for 1 .. $ELEMENTS - 1 {
my @last = @pascal[ * - 1 ].list;

push @pascal, (-&gt; @p { [0, @p Z+ @p, 0] }).(@last);
}

say @pascal.perl;

Let's look at what the code does. Seed with one element. Calculate the
next element based on the previous one. Stop at some point.

But that's exactly what the series operator does. The one that's written
with three dots. We have a starting value, a way to get from one value to
the next (our code block above), and a stopping value.

Well actually, we don't have the stopping value. But that's OK, since the
series operator is lazy. So if we only request the first 10 values, it
won't loop forever giving us the rest of the list.

my @pascal := do [1], -&gt; @p { [0, @p Z+ @p, 0] } ... *;

say @pascal[^10].perl;

(The extra do required because of a shortcoming in Rakudo.)

Now. Something very much like this code was posted first on Rosetta code
and then on Moritz' blog. (TimToady used a sub, but said later that he'd
have preferred binding.)

A couple of Perl 5 people's reactions were — somewhat
uncharacteristically — of a negative flavour, similar to how people seem
to react to the periodic table of operators:

@shadowcat_mst: an excellent example of why I consider camelia perl to be
a language research project more than a production language

@pedromelo: I'm seriously considering this post as an example of what I
don't want Perl6 to become...

I think these reactions are mainly feature shock. Higher-order operators,
pointy blocks, and the series operator... they're all good,
well-established features, which find daily use in Perl 6 programs. Maybe
using them all together like that flung some people off the deep end.
Never mind that the resulting script is all essential complexity, with
virtually no boilerplate from the original script left.

This is the first time that's happened. I think it's important to listen
to what Perl 5 people think and to try to respond to that. But I also
think that this time, it's a case of them seeing some highly idiomatic
Perl 6, and freaking out a bit.

And I think that that, in some odd sense, is a good thing. Well, not
freaking people out, per se. But the fact that we did shows that there's
something forming which might be tentatively called "idiomatic Perl 6":
people on the inside can read it quite easily, but those on the outside,
even Perl 5 folks looking in, instinctively go "eeeeew!".

That's OK. You're not meant to start with the idiomatic stuff. Language
acquisition takes place step by step, and that goes for learning Perl 6
as well. On the way there, just don't confuse distaste with lack of
familiarity.</description>
      <dc:date>2010-08-26T20:22:00</dc:date>
      <title>Idiomatic Perl 6</title>
      <pubDate>Thu, 26 Aug 2010 20:22:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;So, I wrote a program to generate &lt;a href="http://en.wikipedia.org/wiki/Pascal" rel="nofollow"&gt;Pascal&amp;apos;s triangle&lt;/a&gt;. The first ten rows of the triangle, at least. It only used simple features of Perl 6, such as scalars, nested arrays, and &lt;code&gt;for&lt;/code&gt; loops.&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     my @current;&lt;br /&gt;     push @current, @last[0];&lt;br /&gt;     for 0&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. @last - 2 {&lt;br /&gt;         push @current, @last[$_] + @last[$_ + 1];&lt;br /&gt;     }&lt;br /&gt;     push @current, @last[ * - 1 ];&lt;br /&gt;&lt;br /&gt;     push @pascal, [@current];&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;In fact, save for simple mechanically substitutable differences, it could have been a Perl 5 script. In fact, with a bit of manual array allocation, it could have been a C script. That&amp;apos;s OK; there&amp;apos;s a tolerance in the Perl community of writing code that looks like it was thunk in some other language.&lt;/p&gt;&lt;p&gt;But I&amp;apos;ve heard that Perl 6 is great at doing things with operators. For example, the &lt;code&gt;Z&lt;/code&gt; operator, which interleaves two lists, seems to be able to help me write my &lt;code&gt;push&lt;/code&gt; statements more succinctly:&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     my @current;&lt;br /&gt;     &lt;b&gt;for (0, @last) Z (@last, 0) -&amp;gt; $left, $right {&lt;br /&gt;         push @current, $left + $right;&lt;br /&gt;     }&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;     push @pascal, [@current];&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;The parentheses before and after the &lt;code&gt;infix:&amp;lt;Z&amp;gt;&lt;/code&gt; aren&amp;apos;t necessary, because the &lt;code&gt;Z&lt;/code&gt; operator has looser precedence than comma. They&amp;apos;re just shown here to make your eyes accustomed to reading this construct.&lt;/p&gt;&lt;p&gt;In fact, now that only the addition is performed in the inner loop, I might as well use the &lt;code&gt;Z+&lt;/code&gt; operator, which does this for me.&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     my @current &lt;b&gt;= 0, @last Z+ @last, 0;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;     push @pascal, [@current];&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now as the remaining loop shrinks to a size I can take in all at once, I see a bit more clearly what I&amp;apos;m doing: I&amp;apos;m building each new list from the previous one. I could feed the previous list into a named function to get the current one:&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;b&gt;&lt;br /&gt; sub next-list(@p) {&lt;br /&gt;     [0, @p Z+ @p, 0]&lt;br /&gt; }&lt;br /&gt;&lt;/b&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     my @current = &lt;b&gt;next-list(@last)&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;     push @pascal, @current;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Or I could just feed it into a in-place anonymous sub.&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     push @pascal, &lt;b&gt;(sub (@p) { [0, @p Z+ @p, 0] }).(@last)&lt;/b&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;But why even a sub? Perl 6 has a lighter construct, namely a &amp;quot;pointy block&amp;quot; (also known as a &amp;quot;closure&amp;quot; or a &amp;quot;lambda&amp;quot;). It doesn&amp;apos;t participate in the call stack, and it&amp;apos;s slightly easier to write.&lt;/p&gt;&lt;p&gt;&lt;code&gt; my $ELEMENTS = 10;&lt;br /&gt; my @pascal = [1];&lt;br /&gt;&lt;br /&gt; for 1&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.. $ELEMENTS - 1 {&lt;br /&gt;     my @last = @pascal[ * - 1 ].list;&lt;br /&gt;&lt;br /&gt;     push @pascal, (&lt;b&gt;-&amp;gt; @p&lt;/b&gt; { [0, @p Z+ @p, 0] }).(@last);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; say @pascal.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Let&amp;apos;s look at what the code does. Seed with one element. Calculate the next element based on the previous one. Stop at some point.&lt;/p&gt;&lt;p&gt;But that&amp;apos;s exactly what the series operator does. The one that&amp;apos;s written with three dots. We have a starting value, a way to get from one value to the next (our code block above), and a stopping value.&lt;/p&gt;&lt;p&gt;Well actually, we don&amp;apos;t have the stopping value. But that&amp;apos;s OK, since the series operator is &lt;em&gt;lazy&lt;/em&gt;. So if we only request the first 10 values, it won&amp;apos;t loop forever giving us the rest of the list.&lt;/p&gt;&lt;p&gt;&lt;code&gt; &lt;b&gt;my @pascal&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;:= do [1], -&amp;gt; @p { [0, @p Z+ @p, 0] }&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;... *;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; say &lt;b&gt;@pascal[^10]&lt;/b&gt;.perl; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;(The extra &lt;code&gt;do&lt;/code&gt; required because of a &lt;a href="http://rt.perl.org/rt3/Ticket/Display.html?id=77462" rel="nofollow"&gt;shortcoming in Rakudo&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;Now. Something very much like this code was posted first &lt;a href="http://rosettacode.org/wiki/Pascal's_triangle#Perl_6" rel="nofollow"&gt;on Rosetta code&lt;/a&gt; and then &lt;a href="http://perlgeek.de/blog-en/perl-6/pascal-triangle.html" rel="nofollow"&gt;on Moritz&amp;apos; blog&lt;/a&gt;. (TimToady used a sub, but said later that he&amp;apos;d have preferred binding.)&lt;/p&gt;&lt;p&gt;A couple of Perl 5 people&amp;apos;s reactions were — somewhat uncharacteristically — of a negative flavour, similar to how people &lt;a href="http://use.perl.org/~masak/journal/40339" rel="nofollow"&gt;seem to react&lt;/a&gt; to the periodic table of operators:&lt;/p&gt;&lt;p&gt;&lt;code&gt; &lt;a href="http://twitter.com/shadowcat_mst/status/22112066276" rel="nofollow"&gt;@shadowcat_mst&lt;/a&gt;: an excellent example of why I consider camelia perl to be a language research project more than a production language &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt; &lt;a href="http://twitter.com/pedromelo/status/22110965152" rel="nofollow"&gt;@pedromelo&lt;/a&gt;: I&amp;apos;m seriously considering this post as an example of what I don&amp;apos;t want Perl6 to become... &lt;/code&gt;&lt;/p&gt;&lt;p&gt;I think these reactions are mainly feature shock. Higher-order operators, pointy blocks, and the series operator... they&amp;apos;re all good, well-established features, which find daily use in Perl 6 programs. Maybe using them all together like that flung some people off the deep end. Never mind that the resulting script is all &lt;a href="http://en.wikipedia.org/wiki/Essential_complexity" rel="nofollow"&gt;essential complexity&lt;/a&gt;, with virtually no boilerplate from the original script left.&lt;/p&gt;&lt;p&gt;This is the first time that&amp;apos;s happened. I think it&amp;apos;s important to listen to what Perl 5 people think and to try to respond to that. But I also think that this time, it&amp;apos;s a case of them seeing some highly idiomatic Perl 6, and freaking out a bit.&lt;/p&gt;&lt;p&gt;And I think that that, in some odd sense, is a good thing. Well, not freaking people out, per se. But the fact that we did shows that there&amp;apos;s something forming which might be tentatively called &amp;quot;idiomatic Perl 6&amp;quot;: people on the inside can read it quite easily, but those on the outside, even Perl 5 folks looking in, instinctively go &amp;quot;eeeeew!&amp;quot;.&lt;/p&gt;&lt;p&gt;That&amp;apos;s OK. You&amp;apos;re not meant to start with the idiomatic stuff. &lt;em&gt;Language acquisition takes place step by step&lt;/em&gt;, and that goes for learning Perl 6 as well. On the way there, just don&amp;apos;t confuse distaste with lack of familiarity.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-26T20:22:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~masak/journal/40516</guid>
    </item>
    <item>
      <author>nobody@example.com (scrottie)</author>
      <dc:creator>nobody@example.com (scrottie)</dc:creator>
      <link>http://use.perl.org/~scrottie/journal/40515</link>
      <description>Yesterday, I got my X-Surf 3cc Ethernet card I broke down and ordered for
my Amiga 3000. There's some backstory about serial consoles, Sparcs, and
the cluster, but it's not important. The 3000 was also packaged as a Unix
machine, running a pretty standard port of SysV. It was the first Amiga
standard with an MMU and SCSI. It'll also kick out 1280x resolution
graphics at 2bpp. Commodore sold an Ethernet board for it along with Unix
on tape.

The X-Surf is really an ISA card, probably NE2000, mounted in a little
carrier. There are confusingly few pins attached and the logic on the
carrier amounts to a few small 7400 series chips and one slightly larger
chip that also couldn't possibly have enough logic on it to do what it
does. And then just to convince you that your nuts, it adds an IDE port
that alone has more lines than the one little adapter chip does. The
Amiga really is a machine for psychopaths, by psychopaths. Everyone sits
around all of the time trying to out psycho everyone else. Just take a
look at the demo scene for the thing. Amiga virtually defined the demo
scene.

I have/had Amiga OS 3.9 on the thing. 3.9 is post-Commodore death.
Someone bought the rights and sold them and someone bought them and sold
them and so on until a sue happy band of self righteous ruffians managed
to convince the remaining user base buying the rights at garage sale
prices entitled them to be king of the squalid kingdom so that they could
go around lynching anyone else trying to do anything for the Amiga.
Anyway, OS 3.9 is pretty recent as far as Amiga stuff goes, even though
it's ten years old. Most people stopped at 3.1. 3.9 only came out on
CD-ROM. The 3000 doesn't have a bay but it does have SCSI, so the CD-ROM,
when needed, gets hung off the side with the case open. I could also set
up an enclosure and plug it into the back. I could also probably buy one
of those.

X-Surf's stuff did not want to install.

X-Surf actually had an installer, which is impressive. AmigaOS 3.x has a
scripting language for installers and an interpreter for that. This
installer gave you the choice of two TCP stacks. AmigaOS 3.9 comes with a
TCP stack but you can still swap it out. It's a bit Windows 3.1-like in
that regard. The options are GENESiS/AmiTCP and Miami. GENESiS, the
AmiTCP configurerer and dialer that cames with AmiTCP, was shipped in a
version requiring libraries not included in AmigaOS3.9 so it wouldn't
run. AmiTCP would, and AmiTCP was on the HD, though buried a bit. Miami
is shareware/crippleware. It required the same library, MagicUI, that I
didn't have.

I spent hours sorting out what required what and what I did and didn't
have and how these various packages worked and fit together. That's
ignoring the device driver for the ethernet card which is straight
forward. The Amiga has a directory for libraries (which end in .library;
the Unix terseness is missing from AmigaOS even though a lot of the feel
is there). AmigaOS3.9 also won't read iso9660 filesystem CDs. Perhaps
some BoingBag update fixes that but the BoingBag updates themselves are
large .lha archives. I'm avoiding plugging the serial line into a Unix
machine and speaking kermit or zmodem or something to transfer stuff.
I've been down that road. Eventually I burned AmigaSYS4, a version of
AmigaOS3.9 with lots of add-ons and the various BoingBag updates on it,
stick it in the Amiga, and was able to steal MUI off of it and get both
TCP stacks running.

Amiga programmers love to do ports of Unix software and add GUIs. They've
been doing this for ages. They've had gcc since the early ages of gcc,
and I ran the Amylaar MUD driver on AmigaOS 1.3 to do development
locally, also in the dark ages. Kicking around on aminet.net from the
Amiga, I see PHP, MySQL, Apache, bittorrent, Python, bind9, samba, VNC,
and all sorts of stuff. No one ports just the client. If they port the
client, they port the server, too. In the case of AmiTCP, the suite of
utilities you'd expect are there, such as host, finger, traceroute, and
so on, but to configure TCP/IP, you run a little GUI program and it asks
you questions. It took Linux ages to get to this point and Amiga was
doing it long before. One of the extras on the Extras disc, even as far
back as 1.3, was a version of emacs with drop down menus.

Completely unsurprisingly, the 16mhz 68030 processor running AWeb (which
does some JavaScript) is vastly faster than firefox on my 1.2ghz Centrino
Linux machine. Amiga programmers do not write slow software. It's
entirely against their nature. Threading is fantastic. It'll do
downloads, render several jpgs in the page, update the page layout as
HTML comes across, and never lose snappy UI responsiveness. On firefox, I
yank on the scrollbar only to have it ignore me and snap back, or else
the scroll bar doesn't move at all, or the whole thing just goes away for
a few heart sinking seconds, making me wonder if it just crashed.

My ambition is to get a desk in a shared office space going and stick
this baby there with an updated video card that does high res, high bit
depth graphics. If I'm willing to start replacing and upgrading chips on
the motherboard, I can take the thing up to a gig of RAM, too, and NetBSD
supports it if I ever decide I want to see how firefox runs on a 16mhz
processor. What I'm really hoping for is someone to take the latest
Coldfire chips from Motorola's spin off, Freescale, and do an 800mhz
accelerator card for the Amiga 2000/3000/4000. That would RULE.

-scott</description>
      <dc:date>2010-08-25T16:09:00</dc:date>
      <title>Amiga Ethernet</title>
      <pubDate>Wed, 25 Aug 2010 16:09:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;Yesterday, I got my X-Surf 3cc Ethernet card I broke down and ordered for my Amiga 3000. There&amp;apos;s some backstory about serial consoles, Sparcs, and the cluster, but it&amp;apos;s not important. The 3000 was also packaged as a Unix machine, running a pretty standard port of SysV. It was the first Amiga standard with an MMU and SCSI. It&amp;apos;ll also kick out 1280x resolution graphics at 2bpp. Commodore sold an Ethernet board for it along with Unix on tape.&lt;/p&gt;&lt;p&gt;The X-Surf is really an ISA card, probably NE2000, mounted in a little carrier. There are confusingly few pins attached and the logic on the carrier amounts to a few small 7400 series chips and one slightly larger chip that also couldn&amp;apos;t possibly have enough logic on it to do what it does. And then just to convince you that your nuts, it adds an IDE port that alone has more lines than the one little adapter chip does. The Amiga really is a machine for psychopaths, by psychopaths. Everyone sits around all of the time trying to out psycho everyone else. Just take a look at the demo scene for the thing. Amiga virtually defined the demo scene.&lt;/p&gt;&lt;p&gt;I have/had Amiga OS 3.9 on the thing. 3.9 is post-Commodore death. Someone bought the rights and sold them and someone bought them and sold them and so on until a sue happy band of self righteous ruffians managed to convince the remaining user base buying the rights at garage sale prices entitled them to be king of the squalid kingdom so that they could go around lynching anyone else trying to do anything for the Amiga. Anyway, OS 3.9 is pretty recent as far as Amiga stuff goes, even though it&amp;apos;s ten years old. Most people stopped at 3.1. 3.9 only came out on CD-ROM. The 3000 doesn&amp;apos;t have a bay but it does have SCSI, so the CD-ROM, when needed, gets hung off the side with the case open. I could also set up an enclosure and plug it into the back. I could also probably buy one of those.&lt;/p&gt;&lt;p&gt;X-Surf&amp;apos;s stuff did not want to install.&lt;/p&gt;&lt;p&gt;X-Surf actually had an installer, which is impressive. AmigaOS 3.x has a scripting language for installers and an interpreter for that. This installer gave you the choice of two TCP stacks. AmigaOS 3.9 comes with a TCP stack but you can still swap it out. It&amp;apos;s a bit Windows 3.1-like in that regard. The options are GENESiS/AmiTCP and Miami. GENESiS, the AmiTCP configurerer and dialer that cames with AmiTCP, was shipped in a version requiring libraries not included in AmigaOS3.9 so it wouldn&amp;apos;t run. AmiTCP would, and AmiTCP was on the HD, though buried a bit. Miami is shareware/crippleware. It required the same library, MagicUI, that I didn&amp;apos;t have.&lt;/p&gt;&lt;p&gt;I spent hours sorting out what required what and what I did and didn&amp;apos;t have and how these various packages worked and fit together. That&amp;apos;s ignoring the device driver for the ethernet card which is straight forward. The Amiga has a directory for libraries (which end in&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.library; the Unix terseness is missing from AmigaOS even though a lot of the feel is there). AmigaOS3.9 also won&amp;apos;t read iso9660 filesystem CDs. Perhaps some BoingBag update fixes that but the BoingBag updates themselves are large&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.lha archives. I&amp;apos;m avoiding plugging the serial line into a Unix machine and speaking kermit or zmodem or something to transfer stuff. I&amp;apos;ve been down that road. Eventually I burned AmigaSYS4, a version of AmigaOS3.9 with lots of add-ons and the various BoingBag updates on it, stick it in the Amiga, and was able to steal MUI off of it and get both TCP stacks running.&lt;/p&gt;&lt;p&gt;Amiga programmers love to do ports of Unix software and add GUIs. They&amp;apos;ve been doing this for ages. They&amp;apos;ve had gcc since the early ages of gcc, and I ran the Amylaar MUD driver on AmigaOS 1.3 to do development locally, also in the dark ages. Kicking around on aminet.net from the Amiga, I see PHP, MySQL, Apache, bittorrent, Python, bind9, samba, VNC, and all sorts of stuff. No one ports just the client. If they port the client, they port the server, too. In the case of AmiTCP, the suite of utilities you&amp;apos;d expect are there, such as host, finger, traceroute, and so on, but to configure TCP/IP, you run a little GUI program and it asks you questions. It took Linux ages to get to this point and Amiga was doing it long before. One of the extras on the Extras disc, even as far back as 1.3, was a version of emacs with drop down menus.&lt;/p&gt;&lt;p&gt;Completely unsurprisingly, the 16mhz 68030 processor running AWeb (which does some JavaScript) is vastly faster than firefox on my 1.2ghz Centrino Linux machine. Amiga programmers do not write slow software. It&amp;apos;s entirely against their nature. Threading is fantastic. It&amp;apos;ll do downloads, render several jpgs in the page, update the page layout as HTML comes across, and never lose snappy UI responsiveness. On firefox, I yank on the scrollbar only to have it ignore me and snap back, or else the scroll bar doesn&amp;apos;t move at all, or the whole thing just goes away for a few heart sinking seconds, making me wonder if it just crashed.&lt;/p&gt;&lt;p&gt;My ambition is to get a desk in a shared office space going and stick this baby there with an updated video card that does high res, high bit depth graphics. If I&amp;apos;m willing to start replacing and upgrading chips on the motherboard, I can take the thing up to a gig of RAM, too, and NetBSD supports it if I ever decide I want to see how firefox runs on a 16mhz processor. What I&amp;apos;m really hoping for is someone to take the latest Coldfire chips from Motorola&amp;apos;s spin off, Freescale, and do an 800mhz accelerator card for the Amiga 2000/3000/4000. That would RULE.&lt;/p&gt;&lt;p&gt;-scott&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-25T16:09:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~scrottie/journal/40515</guid>
    </item>
    <item>
      <author>nobody@example.com (daxim)</author>
      <dc:creator>nobody@example.com (daxim)</dc:creator>
      <link>http://use.perl.org/~daxim/journal/40514</link>
      <description>English below

――――

Wir rufen zum Einreichen von Vorträgen und Workshops für den
österreichischen Perlworkshop 2010 auf, der am 5.–6. November in Wien
stattfinden wird. Wir möchten gerne eure Themen über die Sprachfamilie
Perl und damit verbundenes erfahren. Der Stichtag dazu ist der 8.
Oktober.

Um einen Vorschlag einzureichen und für weitere Details, siehe unsere
Website. Bitte abonniert den Feed für zukünftige Benachrichtigung.

Die Orgas

――――

We are announcing the call for papers for talks and workshops for the
Austrian Perl Workshop 2010 which will be held on November 5th–6th in
Vienna. We would like to hear about your ideas concerning the Perl family
of languages and related topics. The deadline for submissions is October
8th.

To submit a talk abstract and for further details visit our web site.
Please subscribe to the newsfeed to stay updated.

The organisers</description>
      <dc:date>2010-08-25T05:34:00</dc:date>
      <title>Austrian Perl Workshop 2010 - Call for papers</title>
      <pubDate>Wed, 25 Aug 2010 05:34:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;English below &lt;/p&gt;&lt;p&gt;―――― &lt;/p&gt;&lt;p&gt;Wir rufen zum Einreichen von Vorträgen und Workshops für den österreichischen Perlworkshop 2010 auf, der am 5.–6. November in Wien stattfinden wird. Wir möchten gerne eure Themen über die Sprachfamilie Perl und damit verbundenes erfahren. Der Stichtag dazu ist der 8. Oktober. &lt;/p&gt;&lt;p&gt;Um einen Vorschlag einzureichen und für weitere Details, siehe &lt;a href="http://2010.useperl.at/" rel="nofollow"&gt;unsere Website&lt;/a&gt;. Bitte &lt;a href="http://2010.useperl.at/apw2010/atom/de.xml" rel="nofollow"&gt;abonniert den Feed&lt;/a&gt; für zukünftige Benachrichtigung. &lt;/p&gt;&lt;p&gt;Die Orgas &lt;/p&gt;&lt;p&gt;―――― &lt;/p&gt;&lt;p&gt;We are announcing the call for papers for talks and workshops for the Austrian Perl Workshop 2010 which will be held on November 5th–6th in Vienna. We would like to hear about your ideas concerning the Perl family of languages and related topics. The deadline for submissions is October 8th. &lt;/p&gt;&lt;p&gt;To submit a talk abstract and for further details visit &lt;a href="http://2010.useperl.at/" rel="nofollow"&gt;our web site&lt;/a&gt;. Please &lt;a href="http://2010.useperl.at/apw2010/atom/de.xml" rel="nofollow"&gt;subscribe to the newsfeed&lt;/a&gt; to stay updated. &lt;/p&gt;&lt;p&gt;The organisers&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-25T05:34:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~daxim/journal/40514</guid>
    </item>
    <item>
      <author>nobody@example.com (redspike)</author>
      <dc:creator>nobody@example.com (redspike)</dc:creator>
      <link>http://use.perl.org/~redspike/journal/40513</link>
      <description>Last week I posted a thingy on use.perl.org which is my first blog for a
while. Today I recalled the blog and how I had got there. It is
interesting following links when idly browsing. This was my path:-

  * Tom Hukins from mk.pm posted a link to YAPC::EU videos

  * I watched the video by Dave Cross on the Perl community

  * He mentioned Ironman

  * I then watched most of the videos on presentingperl.org. Another
    productive afternoon.

  * I felt the urge to blog.

I blogged

Perhaps the more interesting thing is why I did not blog for such a long
time. That question has not really been answered yet. In this respect I
have failed. I do not keep up any other blog other than this one at the
moment, so it was not as though I was blogged out.

Another case of the missing cheese and scullery maid.</description>
      <dc:date>2010-08-24T17:23:00</dc:date>
      <title>Why do I blog?</title>
      <pubDate>Tue, 24 Aug 2010 17:23:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;Last week I posted a thingy on &lt;a href="http://use.perl.org/~redspike/journal/40499" rel="nofollow"&gt;use.perl.org &lt;/a&gt; which is my first blog for a while. Today I recalled the blog and how I had got there. It is interesting following links when idly browsing. This was my path:- &lt;ul&gt;&lt;li&gt;Tom Hukins from mk.pm posted a link to &lt;a href="http://www.presentingperl.org/ye2010/" rel="nofollow"&gt;YAPC::EU videos&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I watched the video by &lt;a href="http://www.presentingperl.org/ye2010/perl-community/" rel="nofollow"&gt;Dave Cross on the Perl community&lt;/a&gt;&lt;/li&gt;&lt;li&gt;He mentioned &lt;a href="http://ironman.enlightenedperl.org/" rel="nofollow"&gt;Ironman&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I then watched most of the videos on &lt;a href="http://www.presentingperl.org/" rel="nofollow"&gt;presentingperl.org&lt;/a&gt;. Another productive afternoon.&lt;/li&gt;&lt;li&gt;I felt the urge to blog.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I blogged&lt;/p&gt;&lt;p&gt;Perhaps the more interesting thing is why I did not blog for such a long time. That question has not really been answered yet. In this respect I have failed. I do not keep up any other blog other than this one at the moment, so it was not as though I was blogged out.&lt;/p&gt;&lt;p&gt;Another case of the missing cheese and scullery maid.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-24T17:23:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~redspike/journal/40513</guid>
    </item>
    <item>
      <author>nobody@example.com (perl6doc)</author>
      <dc:creator>nobody@example.com (perl6doc)</dc:creator>
      <link>http://use.perl.org/~perl6doc/journal/40512</link>
      <description>for getting the bucks.

Now i will blog here more frequently about the progress of this grant
work. Currently im preparing my perl 6 talk for mrmcd1001b which is
already scheduled. The preperation could count as forework but lets say I
start in September and want to deliver first milestone at the end of that
month, splitting my tuits between that and Kephra which is steering now
up to the stable release 0.5. Most propably I will have completed this
earlier but there is still the Tablet 1 and the german version.</description>
      <dc:date>2010-08-23T08:52:00</dc:date>
      <title>Thank you/TPF</title>
      <pubDate>Mon, 23 Aug 2010 08:52:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;a href="http://news.perlfoundation.org/2010/08/2010q3-grant-proposal-perl-6-t.html" rel="nofollow"&gt;for getting the bucks&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt; Now i will blog here more frequently about the progress of this grant work. Currently im preparing my perl 6 talk for mrmcd1001b which is &lt;a href="https://mrmcd1001b.metarheinmain.de/fahrplan/" rel="nofollow"&gt;already scheduled&lt;/a&gt;. The preperation could count as forework but lets say I start in September and want to deliver &lt;a href="http://www.perlfoundation.org/perl6/index.cgi?perl_6_variables_tablet" rel="nofollow"&gt;first milestone&lt;/a&gt; at the end of that month, splitting my &lt;a href="https://www.socialtext.net/perl5/index.cgi?tuit" rel="nofollow"&gt;tuits&lt;/a&gt; between that and &lt;a href="http://kephra.sourceforge.net/" rel="nofollow"&gt;Kephra&lt;/a&gt; which is steering now up to the stable release 0.5. Most propably I will have completed this earlier but there is still the Tablet 1 and the &lt;a href="http://wiki.perl-community.de/Wissensbasis/Perl6Tafel" rel="nofollow"&gt;german version&lt;/a&gt;.&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-23T08:52:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~perl6doc/journal/40512</guid>
    </item>
    <item>
      <author>nobody@example.com (masak)</author>
      <dc:creator>nobody@example.com (masak)</dc:creator>
      <link>http://use.perl.org/~masak/journal/40511</link>
      <description>(This post isn't very punny. For those of you who need puns to survive,
try to figure out why jnthn++ named the IRC logs "the hottest footwear"
recently. The answer, as with all good puns, is highly unsatisfying.)

My quest for a Perl 6 implementation takes me ever deeper into the
esoterics of lexpads, runtimes, and a
far-more-than-everything-you-needed-to-know mindset. Today some random
firings in my brain turned into the following conversation on #perl6.

During the conversation, I proposed two theories, both of which turned
out to be wrong. (pmichaud++ shone the necessary light both times.) Being
wrong felt less important than getting my mental model fixed.

I first thought of presenting the results of the below conversation as a
simple tutorial ("How our declarations work. The complete guide."), but
now I think that the conversation, minimally edited, manages to be such a
tutorial on its own.

Besides, blogging things in their raw and undigested form is a sign of
the times. Enjoy!

&lt;masak&gt; I have a question. is there a need for a special "package lexpad"
containing 'our'-declared variables, or can the package lexpad simply be
equated to the topmost lexpad in the package?

&lt;masak&gt; my suspicion is the latter, but I might be missing something.

&lt;pmichaud&gt; the package lexpad can't be the same as the top most lexical

&lt;pmichaud&gt; module XYZ { my sub abc() { ... } }; # abc should not appear
in the package

&lt;masak&gt; oh!

&lt;masak&gt; right.

&lt;masak&gt; so, separate one, then.

&lt;jnthn&gt; Additionally, lexpads are meant to be static by the time we hit
runtime, and you're allowed to shove stuff into the package dynamically.
Not quite sure how those two hold together.

&lt;pmichaud&gt; well, module XYZ { ... } creates a lexical XYZ entry that
holds the package entries

&lt;jnthn&gt; Aha!

&lt;pmichaud&gt; and it's just a hash, really.

&lt;masak&gt; does inserting the package lexpad below the outside lexpad (and
above the topmost lexpad) make sense? that way, Yapsi wouldn't need any
special opcodes for doing 'our'-variable lookups.

&lt;pmichaud&gt; the package lexpad is an entry in the outside lexpad, yes.

&lt;pmichaud&gt; I'm not sure it encapsulates the nested lexpad, though.

&lt;masak&gt; hm.

&lt;masak&gt; if it doesn't, I don't really see how it's visible from inside
the package.

&lt;masak&gt; I've more or less convinced myself that sandwiching it between
outer and topmost is what I want to do for Yapsi.

&lt;pmichaud&gt; our &amp;xyz can make an entry in both the package and in the
lexical.

&lt;pmichaud&gt; this is what rakudo does now.

&lt;pmichaud&gt; we have to do similar things for methods already, too.

&lt;masak&gt; sure. it makes entries in both.

&lt;pmichaud&gt; by having entries in both, that's how it's visible inside the
package

&lt;masak&gt; hm, indeed.

&lt;masak&gt; no need to have the package lexpad visible from inside.

&lt;pmichaud&gt; anyway, sandwiching might work too. haven't quite gotten to
that point in Rakudo thinking yet. And it can get a bit tricky with
multis.

&lt;masak&gt; no need to sandwich it in, either. it can sit in limbo outside
the tree of scopes.

&lt;pmichaud&gt; oh, I know why it perhaps shouldn't (or should) be visible:

&lt;pmichaud&gt; my $x = 'lexical'; module XYZ { say $x; { our $x = 'package';
} }

&lt;masak&gt; ...yes?

&lt;pmichaud&gt; I'm pretty sure "say $x" needs to grab the 'lexical' $x, not
the one that might be "sandwiched" in a package.

&lt;masak&gt; of course.

&lt;masak&gt; that falls out from ordinary scope nesting and shadowing.

&lt;masak&gt; innermost block binds its lexical to the container in the package
lexpad.

&lt;masak&gt; so, that speaks out against sandwiching.

&lt;masak&gt; pmichaud++

So there you go. There's a separate package scope, and it isn't
sandwiched.

(Answer: The missing link is the "IR clogs" meme from #parrot. I can hear
you groaning... I did warn you.)</description>
      <dc:date>2010-08-22T17:39:00</dc:date>
      <title>Where in the world is the package lexpad?</title>
      <pubDate>Sun, 22 Aug 2010 17:39:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;&lt;i&gt;(This post isn&amp;apos;t very punny. For those of you who need puns to survive, try to figure out why jnthn++ named the IRC logs &amp;quot;the hottest footwear&amp;quot; recently. The answer, as with all good puns, is highly unsatisfying.)&lt;/i&gt;&lt;/p&gt;&lt;p&gt;My quest for a Perl 6 implementation takes me ever deeper into the esoterics of lexpads, runtimes, and a far-more-than-everything-you-needed-to-know mindset. Today some random firings in my brain turned into the following conversation on #perl6.&lt;/p&gt;&lt;p&gt;During the conversation, I proposed two theories, both of which turned out to be wrong. (pmichaud++ shone the necessary light both times.) Being wrong felt less important than getting my mental model fixed.&lt;/p&gt;&lt;p&gt;I first thought of presenting the results of the below conversation as a simple tutorial (&amp;quot;How &lt;code&gt;our&lt;/code&gt; declarations work. The complete guide.&amp;quot;), but now I think that the conversation, minimally edited, manages to be such a tutorial on its own.&lt;/p&gt;&lt;p&gt;Besides, blogging things in their raw and undigested form is a sign of the times. Enjoy!&lt;/p&gt;&lt;p&gt;&lt;code&gt; &amp;lt;masak&amp;gt; I have a question. is there a need for a special &amp;quot;package lexpad&amp;quot; containing &amp;apos;our&amp;apos;-declared variables, or can the package lexpad simply be equated to the topmost lexpad in the package?&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; my suspicion is the latter, but I might be missing something.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; the package lexpad can&amp;apos;t be the same as the top most lexical&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; &lt;b&gt;module XYZ { my sub abc() {&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;... } }; # abc should not appear in the package&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; oh!&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; right.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; so, separate one, then.&lt;br /&gt;&lt;br /&gt; &amp;lt;jnthn&amp;gt; Additionally, lexpads are meant to be static by the time we hit runtime, and you&amp;apos;re allowed to shove stuff into the package dynamically. Not quite sure how those two hold together.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; well, &lt;b&gt;module XYZ {&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;... }&lt;/b&gt; creates a lexical XYZ entry that holds the package entries&lt;br /&gt;&lt;br /&gt; &amp;lt;jnthn&amp;gt; Aha!&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; and it&amp;apos;s just a hash, really.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; does inserting the package lexpad below the outside lexpad (and above the topmost lexpad) make sense? that way, Yapsi wouldn&amp;apos;t need any special opcodes for doing &amp;apos;our&amp;apos;-variable lookups.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; the package lexpad is an entry in the outside lexpad, yes.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; I&amp;apos;m not sure it encapsulates the nested lexpad, though.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; hm.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; if it doesn&amp;apos;t, I don&amp;apos;t really see how it&amp;apos;s visible from inside the package.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; I&amp;apos;ve more or less convinced myself that sandwiching it between outer and topmost is what I want to do for Yapsi.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; &lt;b&gt;our &amp;amp;xyz&lt;/b&gt; can make an entry in both the package and in the lexical.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; this is what rakudo does now.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; we have to do similar things for methods already, too.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; sure. it makes entries in both.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; by having entries in both, that&amp;apos;s how it&amp;apos;s visible inside the package&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; hm, indeed.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; no need to have the package lexpad visible from inside.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; anyway, sandwiching might work too. haven&amp;apos;t quite gotten to that point in Rakudo thinking yet. And it can get a bit tricky with multis.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; no need to sandwich it in, either. it can sit in limbo outside the tree of scopes.&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; oh, I know why it perhaps shouldn&amp;apos;t (or should) be visible:&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; &lt;b&gt;my $x = &amp;apos;lexical&amp;apos;; module XYZ { say $x; { our $x = &amp;apos;package&amp;apos;; } }&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt;&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;...yes?&lt;br /&gt;&lt;br /&gt; &amp;lt;pmichaud&amp;gt; I&amp;apos;m pretty sure &amp;quot;say $x&amp;quot; needs to grab the &amp;apos;lexical&amp;apos; $x, not the one that might be &amp;quot;sandwiched&amp;quot; in a package.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; of course.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; that falls out from ordinary scope nesting and shadowing.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; innermost block binds its lexical to the container in the package lexpad.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; so, that speaks out against sandwiching.&lt;br /&gt;&lt;br /&gt; &amp;lt;masak&amp;gt; pmichaud++ &lt;/code&gt;&lt;/p&gt;&lt;p&gt;So there you go. There&amp;apos;s a separate package scope, and it isn&amp;apos;t sandwiched.&lt;/p&gt;&lt;p&gt;&lt;i&gt;(Answer: The missing link is the &amp;quot;IR clogs&amp;quot; meme from #parrot. I can hear you groaning... I did warn you.)&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-22T17:39:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~masak/journal/40511</guid>
    </item>
    <item>
      <author>nobody@example.com (BooK)</author>
      <dc:creator>nobody@example.com (BooK)</dc:creator>
      <link>http://use.perl.org/~BooK/journal/40510</link>
      <description>On Thursday, August 19, 2010 at 9:30, Flore Louise Apolline Bruhat-Souche
was born. She weighs 3.02 kg and measures 48 cm.

Word already spread through IRC (#perlfr and #yapc mostly) and via email
and telephone.

The mother is fine, the father is slightly tired and the big sister is
happy.

There is one photo online.</description>
      <dc:date>2010-08-20T18:17:00</dc:date>
      <title>Flore Louise Apolline Bruhat-Souche</title>
      <pubDate>Fri, 20 Aug 2010 18:17:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;On Thursday, August 19, 2010 at 9:30, Flore Louise Apolline Bruhat-Souche was born. She weighs 3.02 kg and measures 48 cm. &lt;/p&gt;&lt;p&gt; Word already spread through IRC (#perlfr and #yapc mostly) and via email and telephone. &lt;/p&gt;&lt;p&gt; The mother is fine, the father is slightly tired and the &lt;a href="http://use.perl.org/~BooK/journal/33509"&gt;big sister&lt;/a&gt; is happy. &lt;/p&gt;&lt;p&gt; There is &lt;a href="http://flore.bruhat-souche.net/"&gt;one photo online&lt;/a&gt;. &lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-20T18:17:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~BooK/journal/40510</guid>
    </item>
    <item>
      <author>nobody@example.com (nicholas)</author>
      <dc:creator>nobody@example.com (nicholas)</dc:creator>
      <link>http://use.perl.org/~nicholas/journal/40509</link>
      <description>I'm a bit behind the times here, but I read today that one of the two
remaining developers of IronRuby has left Microsoft:

  Overall, I see a serious lack of commitment to IronRuby, and dynamic
  language on .NET in general. At the time of my leaving Tomas and
  myself were the only Microsoft employees working on IronRuby.

http://blog.jimmy.schementi.com/2010/08/start-spreading-news-future-of-jimmy.htm
l*

So if Microsoft's interest in dynamic languages is wilting, and Oracle's
litigation scares everyone away from Java, will that leave Parrot as the
last one standing?

* yep, that's a formatting bug. I assume that it's not worth reporting
while the site's future is unclear.</description>
      <dc:date>2010-08-20T05:37:00</dc:date>
      <title>Will parrot be the last one standing?</title>
      <pubDate>Fri, 20 Aug 2010 05:37:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;I&amp;apos;m a bit behind the times here, but I read today that one of the two remaining developers of IronRuby has left Microsoft:&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;Overall, I see a serious lack of commitment to IronRuby, and dynamic language on&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.NET in general. At the time of my leaving Tomas and myself were the only Microsoft employees working on IronRuby.&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://blog.jimmy.schementi.com/2010/08/start-spreading-news-future-of-jimmy.html"&gt;http://blog.jimmy.schementi.com/2010/08/start-spreading-news-future-of-jimmy.ht&lt;nobr&gt;m&lt;wbr /&gt;&lt;/nobr&gt; l&lt;/a&gt;*&lt;/p&gt;&lt;p&gt;So if Microsoft&amp;apos;s interest in dynamic languages is wilting, and Oracle&amp;apos;s litigation scares everyone away from Java, will that leave &lt;a href="http://parrot.org/"&gt;Parrot&lt;/a&gt; as the last one standing?&lt;/p&gt;&lt;p&gt;&lt;small&gt;* yep, that&amp;apos;s a formatting bug. I assume that it&amp;apos;s not worth reporting while the site&amp;apos;s future is unclear.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-20T05:37:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~nicholas/journal/40509</guid>
    </item>
    <item>
      <author>nobody@example.com (Alias)</author>
      <dc:creator>nobody@example.com (Alias)</dc:creator>
      <link>http://use.perl.org/~Alias/journal/40508</link>
      <description>Next week I will at Microsoft's TechEd Australia event, courtesy of
Microsoft Australia and Microsoft Open Source Labs.

More specifically, I'll be attending the Open Source mini-conf and
discussion day on Tuesday, and presenting in the Community Presentations
to Microsoft session on the current state of Perl and Windows on
Wednesday.

Likely topics will include a review of the first year of the CPAN Testing
Lab and a second-generation based on their Cloud Services, free code
signing certificates for open source developers, and what issues are
slowing us down or blocking progress.

So consider this your opportunity to raise any outstanding issues you
have with Microsoft and Perl. What problems are you still seeing, what
would like fixed or changed, and what is on your want-to-have list?

I'll try to address as many of your issues as possible in the time I have
available with them (which is actually pretty substantial).</description>
      <dc:date>2010-08-19T23:20:00</dc:date>
      <title>Speaking at Microsoft TechEd - Any issues you want raised?</title>
      <pubDate>Thu, 19 Aug 2010 23:20:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;Next week I will at Microsoft&amp;apos;s TechEd Australia event, courtesy of Microsoft Australia and Microsoft Open Source Labs.&lt;/p&gt;&lt;p&gt;More specifically, I&amp;apos;ll be attending the Open Source mini-conf and discussion day on Tuesday, and presenting in the Community Presentations to Microsoft session on the current state of Perl and Windows on Wednesday.&lt;/p&gt;&lt;p&gt;Likely topics will include a review of the first year of the CPAN Testing Lab and a second-generation based on their Cloud Services, free code signing certificates for open source developers, and what issues are slowing us down or blocking progress.&lt;/p&gt;&lt;p&gt;So consider this your opportunity to raise any outstanding issues you have with Microsoft and Perl. What problems are you still seeing, what would like fixed or changed, and what is on your want-to-have list?&lt;/p&gt;&lt;p&gt;I&amp;apos;ll try to address as many of your issues as possible in the time I have available with them (which is actually pretty substantial).&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-19T23:20:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Alias/journal/40508</guid>
    </item>
    <item>
      <author>nobody@example.com (jdavidb)</author>
      <dc:creator>nobody@example.com (jdavidb)</dc:creator>
      <link>http://use.perl.org/~jdavidb/journal/40507</link>
      <description>I'm doing some quick code generation (the output is Java), and I found
myself writing the below routine. I like it because of the names I picked
for the variables. Not exactly self-documenting (although it is when you
think about it), but this is throwaway. You can probably tell what the
code is doing and why I named the variables as I did, and you might be
entertained.

  sub uc_prop
  {
  my($prop) = @_;
  my $p = substr($prop, 0, 1);
  my $P = uc($p);
  my $rop = substr($prop, 1);
  return "$P$rop";
  }</description>
      <dc:date>2010-08-19T17:55:00</dc:date>
      <title>Cute caps</title>
      <pubDate>Thu, 19 Aug 2010 17:55:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;I&amp;apos;m doing some quick code generation (the output is Java), and I found myself writing the below routine. I like it because of the names I picked for the variables. Not exactly self-documenting (although it is when you think about it), but this is throwaway. You can probably tell what the code is doing and why I named the variables as I did, and you might be entertained.&lt;/p&gt;&lt;blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;tt&gt;sub uc_prop&lt;br /&gt;{&lt;br /&gt;  my($prop) = @_;&lt;br /&gt;  my $p = substr($prop, 0, 1);&lt;br /&gt;  my $P = uc($p);&lt;br /&gt;  my $rop = substr($prop, 1);&lt;br /&gt;  return &amp;quot;$P$rop&amp;quot;;&lt;br /&gt;}&lt;/tt&gt;&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-19T17:55:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~jdavidb/journal/40507</guid>
    </item>
    <item>
      <author>nobody@example.com (Phred)</author>
      <dc:creator>nobody@example.com (Phred)</dc:creator>
      <link>http://use.perl.org/~Phred/journal/40506</link>
      <description>I've taken over the maintainership role for WWW::Salesforce and have
pushed out a maintenance release that resolves some long standing issues.

http://search.cpan.org/dist/WWW-Salesforce/

0.12 Tue Aug 17 19:34:00 2010 PST
- New maintainer PHRED
- Thanks to Mark Stosberg for several patches for this version
- Die with an error string instead of carping and returning
- Skip tests in automated testing mode
- Skip tests unless user, pass, and sectoken environment vars set
- Fix failing test - base64binary =&gt; base64Binary namespace change
- Perltidy file contents and remove unnecessary package scope braces
- Handle undefined return values from SOAP client
- Fix Type =&gt; type doc error in create()
- Add describeSObjects method [tom@eborcom.com]</description>
      <dc:date>2010-08-19T13:24:00</dc:date>
      <title>New WWW::Salesforce release details</title>
      <pubDate>Thu, 19 Aug 2010 13:24:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;I&amp;apos;ve taken over the maintainership role for WWW::Salesforce and have pushed out a maintenance release that resolves some long standing issues.&lt;/p&gt;&lt;p&gt;&lt;a href="http://search.cpan.org/dist/WWW-Salesforce/" rel="nofollow"&gt;http://search.cpan.org/dist/WWW-Salesforce/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;0.12 Tue Aug 17 19:34:00 2010 PST&lt;br /&gt;         - New maintainer PHRED&lt;br /&gt;         - Thanks to Mark Stosberg for several patches for this version&lt;br /&gt;         - Die with an error string instead of carping and returning&lt;br /&gt;         - Skip tests in automated testing mode&lt;br /&gt;         - Skip tests unless user, pass, and sectoken environment vars set&lt;br /&gt;         - Fix failing test - base64binary =&amp;gt; base64Binary namespace change&lt;br /&gt;         - Perltidy file contents and remove unnecessary package scope braces&lt;br /&gt;         - Handle undefined return values from SOAP client&lt;br /&gt;         - Fix Type =&amp;gt; type doc error in create()&lt;br /&gt;         - Add describeSObjects method [tom@eborcom.com]&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-19T13:24:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Phred/journal/40506</guid>
    </item>
    <item>
      <author>nobody@example.com (Mark Leighton Fisher)</author>
      <dc:creator>nobody@example.com (Mark Leighton Fisher)</dc:creator>
      <link>http://use.perl.org/~Mark+Leighton+Fisher/journal/40505</link>
      <description>Using WPF for Good and Not Evil is a nice little write-up on how we, as
developers, need to consider why and how we might change the user
interface of programs developed in WPF. My take on it is that "Just
because you can do something does not mean you SHOULD do something."

(Ob.Perl: Perlesque should let you program directly in WPF by using the
.NET libraries.)</description>
      <dc:date>2010-08-19T12:43:00</dc:date>
      <title>Consistent GUIs; Or, Using WPF for Good and Not Evil</title>
      <pubDate>Thu, 19 Aug 2010 12:43:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;&lt;a href="http://www.rollthunder.com/SoftwareThatDoesntSuck/WpfForGoodAndNotEvil.htm" rel="nofollow"&gt;Using WPF for Good and Not Evil&lt;/a&gt; is a nice little write-up on how we, as developers, need to consider why and how we might change the user interface of programs developed in WPF. My take on it is that &amp;quot;Just because you can do something does not mean you SHOULD do something.&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;i&gt;(Ob.Perl: Perlesque should let you program directly in WPF by using the&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.NET libraries.)&lt;/i&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-19T12:43:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Mark+Leighton+Fisher/journal/40505</guid>
    </item>
    <item>
      <author>nobody@example.com (jozef)</author>
      <dc:creator>nobody@example.com (jozef)</dc:creator>
      <link>http://use.perl.org/~jozef/journal/40504</link>
      <description>When I showed Benjamin (a college of mine) my TPF 2010Q3 grant proposal,
we slipped to a discussion about deploying Perl software. Nice (and
recent) list of different approaches can be found @modernperlbooks.com.
To sum it up =&gt; TIMTOWTDI. Which is good, but none of those is perfect.
The Perl+CPAN world is way too complex.

During out discussion with Benjamin I proposed an idea of shipping the
application altogether with the OS. Insane? The base Debian system is
~190MB, all the rest is needed for the application. Then deployment will
be a matter of running this system on a virtual machine, somewhere in the
cloud or in a simple chroot. (btw any Linux distribution can have any
other Linux distribution working in a chroot) The files will never clash,
all the "machines" would be dedicated. No fear of putting files where
they belong to.

(crossposted)</description>
      <dc:date>2010-08-19T11:09:00</dc:date>
      <title>Bundles Packages Builds Releases Tests</title>
      <pubDate>Thu, 19 Aug 2010 11:09:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;When I showed Benjamin (a college of mine) my &lt;a href="http://news.perlfoundation.org/2010/08/2010q3-grant-proposal-cpan-to.html" rel="nofollow"&gt;TPF 2010Q3 grant proposal&lt;/a&gt;, we slipped to a discussion about deploying Perl software. Nice (and recent) list of different approaches can be found &lt;a href="http://www.modernperlbooks.com/mt/2010/08/on-deployment.html" rel="nofollow"&gt;@modernperlbooks.com&lt;/a&gt;. To sum it up =&amp;gt; TIMTOWTDI. Which is good, but none of those is perfect. The Perl+CPAN world is way too complex.&lt;/p&gt;&lt;p&gt;During out discussion with Benjamin I proposed an idea of shipping the application altogether with the OS. Insane? The base Debian system is ~190MB, all the rest is needed for the application. Then deployment will be a matter of running this system on a virtual machine, somewhere in the cloud or in a simple chroot. (btw any Linux distribution can have any other Linux distribution working in a chroot) The files will never clash, all the &amp;quot;machines&amp;quot; would be dedicated. No fear of putting files &lt;a href="http://jozef.kutej.net/2010/06/where-to-put-files.html" rel="nofollow"&gt;where they belong to&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;small&gt;(&lt;a href="http://jozef.kutej.net/2010/08/bundles-packages-builds-releases-tests.html" rel="nofollow"&gt;crossposted&lt;/a&gt;)&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-19T11:09:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~jozef/journal/40504</guid>
    </item>
    <item>
      <author>nobody@example.com (schwern)</author>
      <dc:creator>nobody@example.com (schwern)</dc:creator>
      <link>http://use.perl.org/~schwern/journal/40503</link>
      <description>Those of you still stuck using Subversion will be happy to find a new
release of Alien::SVN. It drags it forward to 1.6.12, doesn't do much
else.

Also, Alien::SVN has finally found a new manager! From out of the blue
comes Matthew Lanier with a patch and the will and a PAUSE ID. He'll be
taking care of things from now on. Its his first CPAN module, be gentle.
Godspeed, Matthew.</description>
      <dc:date>2010-08-18T18:33:00</dc:date>
      <title>Alien::SVN - new release, new management</title>
      <pubDate>Wed, 18 Aug 2010 18:33:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;Those of you still stuck using Subversion will be happy to find &lt;a href="http://search.cpan.org/~mlanier/Alien-SVN-1.6.12.0/"&gt;a new release of Alien::SVN&lt;/a&gt;. It drags it forward to 1.6.12, doesn&amp;apos;t do much else.&lt;/p&gt;&lt;p&gt;Also, Alien::SVN has finally found a new manager! From out of the blue comes &lt;a href="http://search.cpan.org/~mlanier/"&gt;Matthew Lanier&lt;/a&gt; with a patch and the will and a PAUSE ID. He&amp;apos;ll be taking care of things from now on. Its his first CPAN module, be gentle. Godspeed, Matthew.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-18T18:33:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~schwern/journal/40503</guid>
    </item>
    <item>
      <author>nobody@example.com (Phred)</author>
      <dc:creator>nobody@example.com (Phred)</dc:creator>
      <link>http://use.perl.org/~Phred/journal/40502</link>
      <description>We'll be having a group dinner for the August meeting, and have
a few drinks after for those interested. This will mostly
be a planning meeting for future meetings, but all are welcome
for Perl discussion and agreat food.

"Naan-N-Curry" at 336 O'Farrell Street, between Mason and Taylor.

http://maps.google.com/maps?q=336+OFarrell+St,+San+Francisco,+CA+94102,+USA

This place has moved around a few times, and has many satellite
locations now, so look at that address carefully. This is across the
street from the Hilton, and next to the entrance to a large parking
garage.

From the Powell Street Bart station: walk two blocks north along Powell,
and 1.5 blocks west. Don't try to walk up Mason or Taylor, unless
you're in an adventurous mood.

The food is inexpensive, high quality Indian food. They have a buffet
these days, which makes things simpler. Free chai. The dining room
is double-sized, with large tables: there's no need to worry too much
about RSVPs.

http://naancurry.com/branches.php?brn=5

This place used to be 24 hours, but I guess they've scaled back to
11:00 AM to 4:00 AM. But I don't think we'll need to rush out of
there.

Announcement posted via App::PM::Announce

RSVP at Meetup -
http://www.meetup.com/San-Francisco-Perl-Mongers/calendar/14453668/</description>
      <dc:date>2010-08-17T16:49:00</dc:date>
      <title>Perlmongers Dinner</title>
      <pubDate>Tue, 17 Aug 2010 16:49:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;We&amp;apos;ll be having a group dinner for the August meeting, and have&lt;br /&gt;a few drinks after for those interested. This will mostly&lt;br /&gt;be a planning meeting for future meetings, but all are welcome&lt;br /&gt;for Perl discussion and agreat food.&lt;/p&gt;&lt;p&gt;&amp;quot;Naan-N-Curry&amp;quot; at 336 O&amp;apos;Farrell Street, between Mason and Taylor.&lt;/p&gt;&lt;p&gt;   http://maps.google.com/maps?q=336+OFarrell+St,+San+Francisco,+CA+94102,+USA&lt;/p&gt;&lt;p&gt;This place has moved around a few times, and has many satellite&lt;br /&gt;locations now, so look at that address carefully. This is across the&lt;br /&gt;street from the Hilton, and next to the entrance to a large parking&lt;br /&gt;garage.&lt;/p&gt;&lt;p&gt;From the Powell Street Bart station: walk two blocks north along Powell,&lt;br /&gt;and 1.5 blocks west. Don&amp;apos;t try to walk up Mason or Taylor, unless&lt;br /&gt;you&amp;apos;re in an adventurous mood.&lt;/p&gt;&lt;p&gt;The food is inexpensive, high quality Indian food. They have a buffet&lt;br /&gt;these days, which makes things simpler. Free chai. The dining room&lt;br /&gt;is double-sized, with large tables: there&amp;apos;s no need to worry too much&lt;br /&gt;about RSVPs.&lt;/p&gt;&lt;p&gt;   http://naancurry.com/branches.php?brn=5&lt;/p&gt;&lt;p&gt;This place used to be 24 hours, but I guess they&amp;apos;ve scaled back to&lt;br /&gt;11:00 AM to 4:00 AM. But I don&amp;apos;t think we&amp;apos;ll need to rush out of&lt;br /&gt;there.&lt;/p&gt;&lt;p&gt;Announcement posted via App::PM::Announce&lt;/p&gt;&lt;p&gt;RSVP at Meetup - &lt;a href="http://www.meetup.com/San-Francisco-Perl-Mongers/calendar/14453668/" rel="nofollow"&gt;http://www.meetup.com/San-Francisco-Perl-Mongers/calendar/14453668/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-17T16:49:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~Phred/journal/40502</guid>
    </item>
    <item>
      <author>nobody@example.com (scrottie)</author>
      <dc:creator>nobody@example.com (scrottie)</dc:creator>
      <link>http://use.perl.org/~scrottie/journal/40501</link>
      <description>1. Ran backups
2. Verified integrity of ssh on my local system versus last backup;
changed local passwords
3. Verified integrity of my linode chpass with md5sum versus previous
backup
4. Locked accounts; fixed changes to shell for system programs, removed
additional accounts, changed passwords
5. Killed root processes and shells; accounted for all of the shells and
processes in ps
6. Compared md5sums of everything in ps, login shells, rsync, inetd, su,
vmlinuz, ps and various things between previous backup and current
7. compared nmap to netstat -lnp; accounted for netstat -lnp entries
8. Ran find to find setuid/setgid programs; verified no additional ones
exist; ran md5sum against existing ones
9. Replace sshd, ssh and their config files and host keys; restarted
sshd; relogged and changed passwords
10. Upgrade sshd
11. Killed .ssh directories
12. Temporarily took some services down until I can decide if I
trust/replace them (squid, cron, sendmail)
13. diff -r'd between the two backups; read through the output to account
for all changes to the system (new files and changed files) (several
notable)
14. Ran find to find world writable files; ran find to find device files
in the wilds of the filesystem</description>
      <dc:date>2010-08-17T01:30:00</dc:date>
      <title>How I spent my day today (or, slowass.net pops a hole)</title>
      <pubDate>Tue, 17 Aug 2010 01:30:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;1. Ran backups&lt;br /&gt;2. Verified integrity of ssh on my local system versus last backup; changed local passwords&lt;br /&gt;3. Verified integrity of my linode chpass with md5sum versus previous backup&lt;br /&gt;4. Locked accounts; fixed changes to shell for system programs, removed additional accounts, changed passwords&lt;br /&gt;5. Killed root processes and shells; accounted for all of the shells and processes in ps&lt;br /&gt;6. Compared md5sums of everything in ps, login shells, rsync, inetd, su, vmlinuz, ps and various things between previous backup and current&lt;br /&gt;7. compared nmap to netstat -lnp; accounted for netstat -lnp entries&lt;br /&gt;8. Ran find to find setuid/setgid programs; verified no additional ones exist; ran md5sum against existing ones&lt;br /&gt;9. Replace sshd, ssh and their config files and host keys; restarted sshd; relogged and changed passwords&lt;br /&gt;10. Upgrade sshd&lt;br /&gt;11. Killed&lt;nobr&gt; &lt;wbr /&gt;&lt;/nobr&gt;.ssh directories&lt;br /&gt;12. Temporarily took some services down until I can decide if I trust/replace them (squid, cron, sendmail)&lt;br /&gt;13. diff -r&amp;apos;d between the two backups; read through the output to account for all changes to the system (new files and changed files) (several notable)&lt;br /&gt;14. Ran find to find world writable files; ran find to find device files in the wilds of the filesystem&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-17T01:30:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~scrottie/journal/40501</guid>
    </item>
    <item>
      <author>nobody@example.com (jj)</author>
      <dc:creator>nobody@example.com (jj)</dc:creator>
      <link>http://use.perl.org/~jj/journal/40500</link>
      <description>I've just uploaded a new design for http://news.perlfoundation.org. Based
on the perldoc.perl.org style, it implements Phil Smith's idea for the
"Explore Perl" toolbar. I'll blog in more detail about this later, but
essentially we've now got a single list of links that appear on multiple
sites but are maintained in a single place.

Many thanks to Ask, Squeaky, Phil Smith, and Karen for their help and
ideas.

P.S. As with any redesign there may be the odd browser issue or bug, so
if anything looks amiss please email me at jj@jonallen.info and I'll look
into it.</description>
      <dc:date>2010-08-16T15:57:00</dc:date>
      <title>TPF News website redesign</title>
      <pubDate>Mon, 16 Aug 2010 15:57:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt; I&amp;apos;ve just uploaded a new design for &lt;a href="http://news.perlfoundation.org/" rel="nofollow"&gt;http://news.perlfoundation.org&lt;/a&gt;. Based on the &lt;a href="http://perldoc.perl.org/" rel="nofollow"&gt;perldoc.perl.org&lt;/a&gt; style, it implements Phil Smith&amp;apos;s idea for the &amp;quot;Explore Perl&amp;quot; toolbar. I&amp;apos;ll blog in more detail about this later, but essentially we&amp;apos;ve now got a single list of links that appear on multiple sites but are maintained in &lt;a href="http://github.com/jonallen/perldoc.perl.org/blob/master/static/exploreperl.js" rel="nofollow"&gt;a single place&lt;/a&gt;. &lt;/p&gt;&lt;p&gt; Many thanks to Ask, Squeaky, Phil Smith, and Karen for their help and ideas. &lt;/p&gt;&lt;p&gt; P.S. As with any redesign there may be the odd browser issue or bug, so if anything looks amiss please email me at &lt;a href="mailto:jj@jonallen.info" rel="nofollow"&gt;jj@jonallen.info&lt;/a&gt; and I&amp;apos;ll look into it. &lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-16T15:57:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~jj/journal/40500</guid>
    </item>
    <item>
      <author>nobody@example.com (redspike)</author>
      <dc:creator>nobody@example.com (redspike)</dc:creator>
      <link>http://use.perl.org/~redspike/journal/40499</link>
      <description>I am reading MJD's Higher Order Perl again and its great to see that my
time reading other books on Perl has not been wasted. The first time
round I read the words but I did not understand them. Now I am on the
inside looking out rather than on the outside looking in.

It matters not how many times I look around I always come back to Perl as
it is now the language that I know more than any other. This is a really
great thing to realise.

Sadly I missed YAPC::EU again this year and I have really missed meeting
my friends there. I hope to make it next year. It always has the feel of
a festival, if there were tents and bad sanitation it would be exactly
like it.

A few weeks ago I had to compare two bank account numbers and before I
knew what I had done I wrote

perl -e 'if ("0123456789" eq "0123456789"){print "yes"};'

on the command line. It did not dawn until later what this meant. It
means that having bludgeoned my brain with so much Perl it has eventually
and begrudgingly given up and decided to come along with me for the ride
and even started to think in it without telling me. It just let its gaurd
down and it slipped out.</description>
      <dc:date>2010-08-16T09:55:00</dc:date>
      <title>Inside looking out</title>
      <pubDate>Mon, 16 Aug 2010 09:55:00 -0000</pubDate>
      <content:encoded>&lt;div class="intro"&gt;&lt;p&gt;I am reading &lt;a href="http://hop.perl.plover.com/" rel="nofollow"&gt;MJD&amp;apos;s Higher Order Perl&lt;/a&gt; again and its great to see that my time reading other books on Perl has not been wasted. The first time round I read the words but I did not understand them. Now I am on the inside looking out rather than on the outside looking in.&lt;/p&gt;&lt;p&gt;It matters not how many times I look around I always come back to Perl as it is now the language that I know more than any other. This is a really great thing to realise. &lt;/p&gt;&lt;p&gt;Sadly I missed YAPC::EU again this year and I have really missed meeting my friends there. I hope to make it next year. It always has the feel of a festival, if there were tents and bad sanitation it would be exactly like it.&lt;/p&gt;&lt;p&gt;A few weeks ago I had to compare two bank account numbers and before I knew what I had done I wrote &lt;/p&gt;&lt;p&gt;perl -e &amp;apos;if (&amp;quot;0123456789&amp;quot; eq &amp;quot;0123456789&amp;quot;){print &amp;quot;yes&amp;quot;};&amp;apos; &lt;/p&gt;&lt;p&gt;on the command line. It did not dawn until later what this meant. It means that having bludgeoned my brain with so much Perl it has eventually and begrudgingly given up and decided to come along with me for the ride and even started to think in it without telling me. It just let its gaurd down and it slipped out.&lt;/p&gt;&lt;/div&gt;
</content:encoded>
      <dcterms:modified>2010-08-16T09:55:00</dcterms:modified>
      <guid isPermaLink="true">http://use.perl.org/~redspike/journal/40499</guid>
    </item>
  </channel>
</rss>
