$VAR1 = {
'menu' => [
bless( {
'level' => 1,
'name' => 'beer',
'url' => 'beer',
'file' => '/home/karpet/blog/beer',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'books',
'url' => 'books',
'file' => '/home/karpet/blog/books',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'general',
'url' => 'general',
'file' => '/home/karpet/blog/general',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'ideas',
'url' => 'ideas',
'file' => '/home/karpet/blog/ideas',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'ingrid-sequoia',
'url' => 'ingrid-sequoia',
'file' => '/home/karpet/blog/ingrid-sequoia.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'music',
'url' => 'music',
'file' => '/home/karpet/blog/music',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'ny',
'url' => 'ny',
'file' => '/home/karpet/blog/ny',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'perl',
'url' => 'perl',
'file' => '/home/karpet/blog/perl',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'projects',
'url' => 'projects',
'file' => '/home/karpet/blog/projects',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => '_intro',
'url' => 'projects/_intro',
'file' => '/home/karpet/blog/projects/_intro.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ajax',
'url' => 'projects/ajax',
'file' => '/home/karpet/blog/projects/ajax.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'blas',
'url' => 'projects/blas',
'file' => '/home/karpet/blog/projects/blas.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'blue',
'url' => 'projects/blue',
'file' => '/home/karpet/blog/projects/blue.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'bug_or_feature',
'url' => 'projects/bug_or_feature',
'file' => '/home/karpet/blog/projects/bug_or_feature.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'catalyst',
'url' => 'projects/catalyst',
'file' => '/home/karpet/blog/projects/catalyst.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'chars',
'url' => 'projects/chars',
'file' => '/home/karpet/blog/projects/chars.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cognition',
'url' => 'projects/cognition',
'file' => '/home/karpet/blog/projects/cognition.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cpan',
'url' => 'projects/cpan',
'file' => '/home/karpet/blog/projects/cpan.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cql',
'url' => 'projects/cql',
'file' => '/home/karpet/blog/projects/cql.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'craydoc',
'url' => 'projects/craydoc',
'file' => '/home/karpet/blog/projects/craydoc.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'crud',
'url' => 'projects/crud',
'file' => '/home/karpet/blog/projects/crud.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cssprint',
'url' => 'projects/cssprint',
'file' => '/home/karpet/blog/projects/cssprint.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'data-dot-gov',
'url' => 'projects/data-dot-gov',
'file' => '/home/karpet/blog/projects/data-dot-gov.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'false-laziness',
'url' => 'projects/false-laziness',
'file' => '/home/karpet/blog/projects/false-laziness.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'forms',
'url' => 'projects/forms',
'file' => '/home/karpet/blog/projects/forms.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk1',
'url' => 'projects/fp_talk1',
'file' => '/home/karpet/blog/projects/fp_talk1.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk2',
'url' => 'projects/fp_talk2',
'file' => '/home/karpet/blog/projects/fp_talk2.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk3',
'url' => 'projects/fp_talk3',
'file' => '/home/karpet/blog/projects/fp_talk3.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talks',
'url' => 'projects/fp_talks',
'file' => '/home/karpet/blog/projects/fp_talks.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'free',
'url' => 'projects/free',
'file' => '/home/karpet/blog/projects/free.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'freecap',
'url' => 'projects/freecap',
'file' => '/home/karpet/blog/projects/freecap.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'frozenperl',
'url' => 'projects/frozenperl',
'file' => '/home/karpet/blog/projects/frozenperl.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'googlealerts',
'url' => 'projects/googlealerts',
'file' => '/home/karpet/blog/projects/googlealerts.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'great-american-hackathon',
'url' => 'projects/great-american-hackathon',
'file' => '/home/karpet/blog/projects/great-american-hackathon.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'hacker',
'url' => 'projects/hacker',
'file' => '/home/karpet/blog/projects/hacker.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'hiliter',
'url' => 'projects/hiliter',
'file' => '/home/karpet/blog/projects/hiliter.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'hp-psc-1310-printer',
'url' => 'projects/hp-psc-1310-printer',
'file' => '/home/karpet/blog/projects/hp-psc-1310-printer.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'http_flow',
'url' => 'projects/http_flow',
'file' => '/home/karpet/blog/projects/http_flow.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ibmunicode',
'url' => 'projects/ibmunicode',
'file' => '/home/karpet/blog/projects/ibmunicode.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ideas',
'url' => 'projects/ideas',
'file' => '/home/karpet/blog/projects/ideas.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ishida',
'url' => 'projects/ishida',
'file' => '/home/karpet/blog/projects/ishida.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'iterm',
'url' => 'projects/iterm',
'file' => '/home/karpet/blog/projects/iterm.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'just-enough-c',
'url' => 'projects/just-enough-c',
'file' => '/home/karpet/blog/projects/just-enough-c.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'larry_pm',
'url' => 'projects/larry_pm',
'file' => '/home/karpet/blog/projects/larry_pm.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'latenights',
'url' => 'projects/latenights',
'file' => '/home/karpet/blog/projects/latenights.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'long_live_perl',
'url' => 'projects/long_live_perl',
'file' => '/home/karpet/blog/projects/long_live_perl.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'make-test',
'url' => 'projects/make-test',
'file' => '/home/karpet/blog/projects/make-test.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'memory',
'url' => 'projects/memory',
'file' => '/home/karpet/blog/projects/memory.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'mylibrary',
'url' => 'projects/mylibrary',
'file' => '/home/karpet/blog/projects/mylibrary.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'open-source-handbook',
'url' => 'projects/open-source-handbook',
'file' => '/home/karpet/blog/projects/open-source-handbook.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perl-accessors',
'url' => 'projects/perl-accessors',
'file' => '/home/karpet/blog/projects/perl-accessors.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perl-at-peknet',
'url' => 'projects/perl-at-peknet',
'file' => '/home/karpet/blog/projects/perl-at-peknet.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perl-marketing',
'url' => 'projects/perl-marketing',
'file' => '/home/karpet/blog/projects/perl-marketing.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perl6-v-perl5',
'url' => 'projects/perl6-v-perl5',
'file' => '/home/karpet/blog/projects/perl6-v-perl5.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perlisalive',
'url' => 'projects/perlisalive',
'file' => '/home/karpet/blog/projects/perlisalive.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perlmyths',
'url' => 'projects/perlmyths',
'file' => '/home/karpet/blog/projects/perlmyths.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'php',
'url' => 'projects/php',
'file' => '/home/karpet/blog/projects/php',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'plack',
'url' => 'projects/plack',
'file' => '/home/karpet/blog/projects/plack.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'postgresql_on_osx',
'url' => 'projects/postgresql_on_osx',
'file' => '/home/karpet/blog/projects/postgresql_on_osx.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'profiling_perl',
'url' => 'projects/profiling_perl',
'file' => '/home/karpet/blog/projects/profiling_perl.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'question-as-a-patch',
'url' => 'projects/question-as-a-patch',
'file' => '/home/karpet/blog/projects/question-as-a-patch.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'rest',
'url' => 'projects/rest',
'file' => '/home/karpet/blog/projects/rest.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ror',
'url' => 'projects/ror',
'file' => '/home/karpet/blog/projects/ror.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'search-tools',
'url' => 'projects/search-tools',
'file' => '/home/karpet/blog/projects/search-tools.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'sentences',
'url' => 'projects/sentences',
'file' => '/home/karpet/blog/projects/sentences.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'stateofsearch',
'url' => 'projects/stateofsearch',
'file' => '/home/karpet/blog/projects/stateofsearch.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'swish',
'url' => 'projects/swish',
'file' => '/home/karpet/blog/projects/swish',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'swished',
'url' => 'projects/swished',
'file' => '/home/karpet/blog/projects/swished.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'techno-babel',
'url' => 'projects/techno-babel',
'file' => '/home/karpet/blog/projects/techno-babel.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'term-color',
'url' => 'projects/term-color',
'file' => '/home/karpet/blog/projects/term-color.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'tests',
'url' => 'projects/tests',
'file' => '/home/karpet/blog/projects/tests.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'texttools',
'url' => 'projects/texttools',
'file' => '/home/karpet/blog/projects/texttools.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'the-interruptible-programmer',
'url' => 'projects/the-interruptible-programmer',
'file' => '/home/karpet/blog/projects/the-interruptible-programmer.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'user-models',
'url' => 'projects/user-models',
'file' => '/home/karpet/blog/projects/user-models.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'vbox',
'url' => 'projects/vbox',
'file' => '/home/karpet/blog/projects/vbox.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'vendor-client-video',
'url' => 'projects/vendor-client-video',
'file' => '/home/karpet/blog/projects/vendor-client-video.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'widefinder',
'url' => 'projects/widefinder',
'file' => '/home/karpet/blog/projects/widefinder.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'wikileaks-java',
'url' => 'projects/wikileaks-java',
'file' => '/home/karpet/blog/projects/wikileaks-java.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'wrong',
'url' => 'projects/wrong',
'file' => '/home/karpet/blog/projects/wrong.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'xapian',
'url' => 'projects/xapian',
'file' => '/home/karpet/blog/projects/xapian.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'yamllint',
'url' => 'projects/yamllint',
'file' => '/home/karpet/blog/projects/yamllint.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'search',
'url' => 'search',
'file' => '/home/karpet/blog/search',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'spam',
'url' => 'spam',
'file' => '/home/karpet/blog/spam',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'stpaulbartour',
'url' => 'stpaulbartour',
'file' => '/home/karpet/blog/stpaulbartour',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' )
],
'blog' => [
bless( {
'format' => 'pod',
'text' => '=head1 Projects
In this area you\'ll find other things I\'m working on and/or interested in.
But have I mentioned <a href=\'/~ari/\'>my beautiful son</a> lately?
',
'mtime' => 1159416059,
'name' => 'projects',
'url' => 'projects',
'file' => '/home/karpet/blog/projects.pod',
'id' => 'projects.pod'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'Dezi search platform
This week I <a href="http://swish-e.org/archive/2011-09/12978.html">announced</a>
the initial release of <a href="http://dezi.org/">Dezi</a>, a new search platform
based on Swish3, Apache Lucy, OpenSearch and Plack.
As of about 15 minutes ago, there are now <a href="https://github.com/karpet/dezi-client-php">PHP</a>
and <a href="https://github.com/karpet/dezi-client-perl">Perl</a> clients available.
',
'mtime' => 1317523666,
'name' => 'dezi',
'url' => 'projects/swish/dezi',
'file' => '/home/karpet/blog/projects/swish/dezi.txt',
'id' => 'dezi.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'libswish3 1.0.0 released
I am happy to announce the 1.0.0 release of libswish3:
<a href="http://swish-e.org/swish3/libswish3-1.0.0.tar.gz">http://swish-e.org/swish3/libswish3-1.0.0.tar.gz</a>
libswish3 is at the core of multiple Swish3 implementations, and has reached a
stable enough API that a 1.0.0 release seems appropriate.
From the README:
<div class="quote">
libswish3 is a document parser compatible with the Swish-e 2.4 -S prog API.
libswish3 is a C library for parsing documents into a data structure that can
then be stored and searched with a variety of IR backends.
</div>
There are currently four different implementations available of Swish3.
<ul>
<li>swish_xapian (C++ using libxapian, included in libswish3 distribution)</li>
<li>SWISH::Prog::Xapian (Perl using Search::Xapian)</li>
<li>SWISH::Prog::Lucy (Perl using Apache Lucy)</li>
<li>SWISH::Prog::KSx (Perl using KinoSearch)</li>
</ul>
All the Perl implementations are available from <a href="http://search.cpan.org/~karman/">CPAN</a>.
They each rely on SWISH::3 (the Perl bindings to libswish3) and the core SWISH::Prog project, a Perl
rewrite of the swish-e 2.x C binary and accompanying helper scripts. The
SWISH::Prog distribution includes a \'swish3\' command line interface with options
very similar to the swish-e 2.x command line tool.
Xapian, KinoSearch and Apache Lucy all offer robust UTF-8 and incremental
indexing support, as well as the ability to scale to many millions of documents
across multiple servers.
You can read more about Swish3 at <a href="http://dev.swish-e.org/wiki/swish3">the devel site</a>.
UPDATE: Mailing list announcement <a
href="http://swish-e.org/archive/2011-09/12975.html">here</a>.
',
'mtime' => 1316660639,
'name' => 'swish3-1.0.0-released',
'url' => 'projects/swish/swish3-1.0.0-released',
'file' => '/home/karpet/blog/projects/swish/swish3-1.0.0-released.txt',
'id' => 'swish3-1.0.0-released.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'Search::OpenSearch::Server with REST API
Just uploaded several modules to <a href="http://search.cpan.org/~karman/">CPAN</a> that together implement a full REST API
for KinoSearch indexes, using Search::OpenSearch::Server::Plack.
<div class=\'code\'>
% curl -XPOST http://localhost:5000/foo \\
-d \'<doc><title>bar</title>foo</doc>\' \\
-H \'Content-Type: application/xml\'
[response:]
{
"success":1,
"doc":{
"orgs":[],
"places":[],
"people":[],
"topics":[],
"summary":"",
"title":"bar",
"author":[]
},
"total":"21581",
"code":"200"
}
</div>
The modules are:
<li> Search::OpenSearch 0.11 </li>
<li> Search::OpenSearch::Server 0.05 </li>
<li> Search::OpenSearch::Engine::KSx 0.08 </li>
<li> SWISH::Prog::KSx 0.17 </li>
<li> SWSIH::Prog 0.49 </li>
',
'mtime' => 1306436203,
'name' => 'opensearch-server-rest-api',
'url' => 'projects/swish/opensearch-server-rest-api',
'file' => '/home/karpet/blog/projects/swish/opensearch-server-rest-api.txt',
'id' => 'opensearch-server-rest-api.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'False Laziness
One of the three virtues of programming is Laziness. Beware
of false laziness. <a href="http://perlbuzz.com/2010/12/develop-sensible-coding-habits-on-the-path-to-true-laziness.html">Andy Lester writes</a>
on the problem aptly when he describes an interaction with another programmer:
<div class="quote">
This person was one of those programmers who tried for the premature optimization of saving some typing. He forgot that typing is the least of our concerns when programming. He forgot that programmer thinking time costs many orders of magnitude more than programmer typing time, and that the time spent debugging can dwarf the amount of time spent creating code.
</div>
',
'mtime' => 1293097232,
'name' => 'false-laziness',
'url' => 'projects/false-laziness',
'file' => '/home/karpet/blog/projects/false-laziness.txt',
'id' => 'false-laziness.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'Funny depending on whoami
<a href="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">Only funny if you\'re a programmer.</a>
',
'mtime' => 1292901940,
'name' => 'wikileaks-java',
'url' => 'projects/wikileaks-java',
'file' => '/home/karpet/blog/projects/wikileaks-java.txt',
'id' => 'wikileaks-java.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'The Interruptible Programmer
<a href="http://www.stevestreeting.com/2010/09/04/work-2-0/">A brilliant and humane essay on changing
work habits.</a>
Excuse me while I get up and stretch.
I can vouch for the writer\'s experience, though for me it has been less about back pain
(though I have that too) than eye strain (going on 7 years now). Biggest of all though
has been having children and working from home: that is the interruption formula in a nutshell.
',
'mtime' => 1287157386,
'name' => 'the-interruptible-programmer',
'url' => 'projects/the-interruptible-programmer',
'file' => '/home/karpet/blog/projects/the-interruptible-programmer.txt',
'id' => 'the-interruptible-programmer.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'CPAN test failures
SWISH::3 0.08_04 is passing all tests all over the CPAN testers universe, so that is encouraging.
However, some reports (notably on FreeBSD) report false failures because of a Wstat issue.
<a href="http://www.perlmonks.org/?node_id=845132">I\'ve posted about it at PerlMonks</a> and hope someone
out there has an easy fix.
Update: finally found a fix for this. The problem is that Perl has its own
my_setenv() function that interferes with the native setenv() called by
libswish3.c. The fix was to set the magic Perl var PL_use_safe_putenv as
shown <a href="http://dev.swish-e.org/changeset/3061">here</a>.
This took many hours and googling to track down. Glad to be done with it (I
hope!).
',
'mtime' => 1286775451,
'name' => 'test-failures',
'url' => 'projects/swish/test-failures',
'file' => '/home/karpet/blog/projects/swish/test-failures.txt',
'id' => 'test-failures.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'Swish3 progress report
There\'s been a ton of work on Swish3 in the last year. I\'ve actually started planning a 1.0 release,
after 5 years of work.
Lately I\'ve been focusing on three things: (1) making the Perl bindings easier to install; (2) indexing
of compressed documents; and (3) supporting XInclude of document fragments. The first is accomplished: you
can install the entire library via CPAN. The last two are aimed at large
doc sets where I want to keep the XML compressed on disk for space reasons, and where I want to re-use
subsets of the document collections in building multiple indexes.
',
'mtime' => 1276057998,
'name' => 'progress6',
'url' => 'projects/swish/progress6',
'file' => '/home/karpet/blog/projects/swish/progress6.txt',
'id' => 'progress6.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'Open Source Handbook
<a href="http://opensource.com/business/10/2/how-manual-open-source-way-written-open-source-way">Open Source Handbook</a>
reviewed.
',
'mtime' => 1268798583,
'name' => 'open-source-handbook',
'url' => 'projects/open-source-handbook',
'file' => '/home/karpet/blog/projects/open-source-handbook.txt',
'id' => 'open-source-handbook.txt'
}, 'PodBlog::Model::Blog::Entry' ),
bless( {
'format' => 'txt',
'text' => 'make test
Invoking <code>make test</code> in a project and watching as 1000s of successful tests scroll
by, culminating in the <code>All tests successful.</code> message, gives me the same thrill
of satisfaction as when I used to paint houses, and having finished a long day of sweaty labor
at sanding and chipping old paint off, I could stand back and survey the structure,
primed and ready for a fresh coat of paint. It\'s the <i>anticipation</i> that thrills, in the
same way that a trip to the grocery store and a full fridge, or several loads of clean
laundry folded and stowed safely away in drawers, thrills me. The knowing that I am prepared,
belt cinched tight, all tests successful.
',
'mtime' => 1267674974,
'name' => 'make-test',
'url' => 'projects/make-test',
'file' => '/home/karpet/blog/projects/make-test.txt',
'id' => 'make-test.txt'
}, 'PodBlog::Model::Blog::Entry' )
]
};