$VAR1 = {
'menu' => [
bless( {
'level' => 1,
'name' => 'books',
'url' => 'books',
'file' => '/louvin/home/karpet/blog/books',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'general',
'url' => 'general',
'file' => '/louvin/home/karpet/blog/general',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'music',
'url' => 'music',
'file' => '/louvin/home/karpet/blog/music',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'ny',
'url' => 'ny',
'file' => '/louvin/home/karpet/blog/ny',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'projects',
'url' => 'projects',
'file' => '/louvin/home/karpet/blog/projects',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => '_intro',
'url' => 'projects/_intro',
'file' => '/louvin/home/karpet/blog/projects/_intro.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ajax',
'url' => 'projects/ajax',
'file' => '/louvin/home/karpet/blog/projects/ajax.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'blas',
'url' => 'projects/blas',
'file' => '/louvin/home/karpet/blog/projects/blas.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'blue',
'url' => 'projects/blue',
'file' => '/louvin/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' => '/louvin/home/karpet/blog/projects/bug_or_feature.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'catalyst',
'url' => 'projects/catalyst',
'file' => '/louvin/home/karpet/blog/projects/catalyst.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'chars',
'url' => 'projects/chars',
'file' => '/louvin/home/karpet/blog/projects/chars.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cognition',
'url' => 'projects/cognition',
'file' => '/louvin/home/karpet/blog/projects/cognition.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cpan',
'url' => 'projects/cpan',
'file' => '/louvin/home/karpet/blog/projects/cpan.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cql',
'url' => 'projects/cql',
'file' => '/louvin/home/karpet/blog/projects/cql.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'craydoc',
'url' => 'projects/craydoc',
'file' => '/louvin/home/karpet/blog/projects/craydoc.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'crud',
'url' => 'projects/crud',
'file' => '/louvin/home/karpet/blog/projects/crud.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'cssprint',
'url' => 'projects/cssprint',
'file' => '/louvin/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' => '/louvin/home/karpet/blog/projects/data-dot-gov.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'forms',
'url' => 'projects/forms',
'file' => '/louvin/home/karpet/blog/projects/forms.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk1',
'url' => 'projects/fp_talk1',
'file' => '/louvin/home/karpet/blog/projects/fp_talk1.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk2',
'url' => 'projects/fp_talk2',
'file' => '/louvin/home/karpet/blog/projects/fp_talk2.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talk3',
'url' => 'projects/fp_talk3',
'file' => '/louvin/home/karpet/blog/projects/fp_talk3.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'fp_talks',
'url' => 'projects/fp_talks',
'file' => '/louvin/home/karpet/blog/projects/fp_talks.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'free',
'url' => 'projects/free',
'file' => '/louvin/home/karpet/blog/projects/free.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'freecap',
'url' => 'projects/freecap',
'file' => '/louvin/home/karpet/blog/projects/freecap.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'frozenperl',
'url' => 'projects/frozenperl',
'file' => '/louvin/home/karpet/blog/projects/frozenperl.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'googlealerts',
'url' => 'projects/googlealerts',
'file' => '/louvin/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' => '/louvin/home/karpet/blog/projects/great-american-hackathon.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'hacker',
'url' => 'projects/hacker',
'file' => '/louvin/home/karpet/blog/projects/hacker.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'hiliter',
'url' => 'projects/hiliter',
'file' => '/louvin/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' => '/louvin/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' => '/louvin/home/karpet/blog/projects/http_flow.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ibmunicode',
'url' => 'projects/ibmunicode',
'file' => '/louvin/home/karpet/blog/projects/ibmunicode.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ideas',
'url' => 'projects/ideas',
'file' => '/louvin/home/karpet/blog/projects/ideas.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ishida',
'url' => 'projects/ishida',
'file' => '/louvin/home/karpet/blog/projects/ishida.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'iterm',
'url' => 'projects/iterm',
'file' => '/louvin/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' => '/louvin/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' => '/louvin/home/karpet/blog/projects/larry_pm.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'latenights',
'url' => 'projects/latenights',
'file' => '/louvin/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' => '/louvin/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' => '/louvin/home/karpet/blog/projects/make-test.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'memory',
'url' => 'projects/memory',
'file' => '/louvin/home/karpet/blog/projects/memory.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'mylibrary',
'url' => 'projects/mylibrary',
'file' => '/louvin/home/karpet/blog/projects/mylibrary.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perl-accessors',
'url' => 'projects/perl-accessors',
'file' => '/louvin/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' => '/louvin/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' => '/louvin/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' => '/louvin/home/karpet/blog/projects/perl6-v-perl5.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perlisalive',
'url' => 'projects/perlisalive',
'file' => '/louvin/home/karpet/blog/projects/perlisalive.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'perlmyths',
'url' => 'projects/perlmyths',
'file' => '/louvin/home/karpet/blog/projects/perlmyths.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'php',
'url' => 'projects/php',
'file' => '/louvin/home/karpet/blog/projects/php',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'plack',
'url' => 'projects/plack',
'file' => '/louvin/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' => '/louvin/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' => '/louvin/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' => '/louvin/home/karpet/blog/projects/question-as-a-patch.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'rest',
'url' => 'projects/rest',
'file' => '/louvin/home/karpet/blog/projects/rest.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'ror',
'url' => 'projects/ror',
'file' => '/louvin/home/karpet/blog/projects/ror.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'search-tools',
'url' => 'projects/search-tools',
'file' => '/louvin/home/karpet/blog/projects/search-tools.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'sentences',
'url' => 'projects/sentences',
'file' => '/louvin/home/karpet/blog/projects/sentences.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'stateofsearch',
'url' => 'projects/stateofsearch',
'file' => '/louvin/home/karpet/blog/projects/stateofsearch.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'swish',
'url' => 'projects/swish',
'file' => '/louvin/home/karpet/blog/projects/swish',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'swished',
'url' => 'projects/swished',
'file' => '/louvin/home/karpet/blog/projects/swished.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'techno-babel',
'url' => 'projects/techno-babel',
'file' => '/louvin/home/karpet/blog/projects/techno-babel.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'term-color',
'url' => 'projects/term-color',
'file' => '/louvin/home/karpet/blog/projects/term-color.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'tests',
'url' => 'projects/tests',
'file' => '/louvin/home/karpet/blog/projects/tests.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'texttools',
'url' => 'projects/texttools',
'file' => '/louvin/home/karpet/blog/projects/texttools.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'user-models',
'url' => 'projects/user-models',
'file' => '/louvin/home/karpet/blog/projects/user-models.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'vbox',
'url' => 'projects/vbox',
'file' => '/louvin/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' => '/louvin/home/karpet/blog/projects/vendor-client-video.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'widefinder',
'url' => 'projects/widefinder',
'file' => '/louvin/home/karpet/blog/projects/widefinder.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'wrong',
'url' => 'projects/wrong',
'file' => '/louvin/home/karpet/blog/projects/wrong.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'xapian',
'url' => 'projects/xapian',
'file' => '/louvin/home/karpet/blog/projects/xapian.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 2,
'name' => 'yamllint',
'url' => 'projects/yamllint',
'file' => '/louvin/home/karpet/blog/projects/yamllint.txt',
'dir' => 0
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'search',
'url' => 'search',
'file' => '/louvin/home/karpet/blog/search',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'spam',
'url' => 'spam',
'file' => '/louvin/home/karpet/blog/spam',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' ),
bless( {
'level' => 1,
'name' => 'stpaulbartour',
'url' => 'stpaulbartour',
'file' => '/louvin/home/karpet/blog/stpaulbartour',
'dir' => 1
}, 'PodBlog::Model::Menu::Entry' )
],
'blog' => [
bless( {
'format' => 'txt',
'text' => 'Form philosophy
A form management package has one goal: to help preserve the integrity
of data as it moves from server to client and back again.
Most form packages do two things: validate data and serialize data
as (X)HTML. Some offer additional client-side validation checks via
Javascript, etc. Others offer tight integration with particular
data models.
Rose::HTML::Objects does both things well. RHTMLO allows you to define
form classes that represent reasonably complicated data models, providing
validation and serialization.
Some developers are of the opinion that serialization is not properly
the function of a form manager because it blurs the line between view
and model. I disagree. Proper and correct serialization is important
to the validation process, and hence vital to the model. It is but one
step in a series of validation layers.
Validation happens when a human being completes a (X)HTML form,
as she self-monitors her attempt to enter good
and correct data ("did I spell that correctly?").
Validation may happen again before the form is submitted,
using client-side Javascript. Validation happens again when the server
receives the request. Again, when the form object is initialized with
the submitted data. Again, when the data is committed to storage. At every
step checks are made to preserve what the client submitted and verify that
the data conforms with what is expected and required.
Since serialization to and from (X)HTML is part of the roundtrip
all data takes, a good form management tool should be able to handle
(X)HTML creation as well as server-side validation. That\'s not blurring
the model/view line; it\'s reflecting the reality that data must be handled
by human beings and the web browser is one of the best tools we currently
have.
',
'mtime' => 1218767916,
'name' => 'forms',
'url' => 'projects/forms',
'file' => '/louvin/home/karpet/blog/projects/forms.txt',
'id' => 'forms.txt'
}, 'PodBlog::Model::Blog::Entry' )
]
};