Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^6: Should I upload it on CPAN?

by BrowserUk (Patriarch)
on Feb 25, 2012 at 02:18 UTC ( [id://956038]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Should I upload it on CPAN?
in thread Should I upload it on CPAN?

The fact that a program consists of instantiating a single object and calling a single method on it, is not necessarily an indication of the complexity of the program as a whole.

Sorry, but that is simply fatuous pseud-OO.

You pull in nearly 300 modules to do nothing more than: system '/usr/sbin/httpd';

That's not just fatuous, it is moronic.

I truly hope that doesn't offend you, because that is not my intention -- all said and done, it is just the opinion of some obscure Englishman on the net -- but it is my opinion.

You are gaining exactly nothing from your use of OO here; and exactly nothing from your dependency on, and the considerable overheads of, Moose.

It's not even validating your parameter for you. It will happily accept 1234567890 as a string -- as all Perl will.

If App::Reprove consisted of (something like):

package App::Reprove; use App::Prove; use LWP::Simpe; require Exporter; our @ISA = qw[ Exporter ]; our @EXPORT = qw[ doit ]; sub doit { my %arg = @_; ## maybe a little validation my $file1 = get delete $args{ file1 }; my $file2 = get delete $args{ file2 }; ## do whatver you do with the file contents... App::Prove->new( %args )->run } 1;

It would:

  • be just as useful;
  • not require 300MB of downloads;
  • (probably) work everywhere;
  • (probably) never need maintenance;
  • be easy to understand, debug, and patch should that ever be required.

    By any semi-competent perl (or C or D or Ruby or Java or Python or maybe even PHP) programmer, anywhere.

As is, you've got a module that requires users to install a huge crap-load of dependencies only to find -- for 10% of them at least -- that it doesn't work. And probably never will unless 1 or more of the 3 or 4 guys that understand what the **** is going on inside Moose decide to step in and help you out.

I'm pretty damn good at working my way through new modules and working out what is wrong, but with Moose in the picture, I can't even get started.

Quite frankly, I cannot see any merit in your module over using App::Prove myself. But then, I can see no merit in App::Prove over using the prove command directly either. But at least I can look inside the latter and see the value-add -- no matter how tenuous I might think it is -- and can understand the code enough that I could fix any problems that arose. With yours, NADA. Not a hope in hell.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

The start of some sanity?

Replies are listed 'Best First'.
Re^7: Should I upload it on CPAN?
by stvn (Monsignor) on Mar 02, 2012 at 03:20 UTC

    Ignoring the rest of your rant, but ...

    And probably never will unless 1 or more of the 3 or 4 guys that understand what the **** is going on inside Moose decide to step in and help you out.

    s/Moose/Perl Core/g

    Moose is an abstraction, just like Perl is an abstraction. By your logic, we should all just be writing in binary, and assembler is for people who don't understand 1 and 0s.

    -stvn
      By your logic, we should all just be writing in binary, and assembler is for people who don't understand 1 and 0s.

      With respect. Twaddle!

      The purpose of abstraction is to simplify. The art of good abstraction is to use the appropriate level for the task at hand.

      Using the 300+ modules of Moose et. al.:

      C:\test>perl -Mused Reprove.pl 2>nul | wc -l 357
      to invoke LWP::Simple::get() on a list of files, write them to a temporary directory, and then invoke system to run a command; is an inappropriate use of abstraction. The creation of complexity from simplicity. In a word, overkill.

      Like hiring the Philharmonic Orchestra to play musak in your lift; using an 18-wheeler to fetch a pint of milk from the corner shop; deploying the Delta Force to remove a spider from your bath.

      I've said it before, I consider Moose to be best-of-breed for its purpose. But replacing a for loop and system with 300 modules to construct a module that contains the for loop and system, is not its purpose.

      With regard to expertise: Still no one has stepped up to decipher this diarrhoea:

      C:\test>Perl Reprove.pl Could not create the 'reader' method for variable_name because : Could + not generate inline reader because : Could not create writer for 'va +riable_name' because Failed to compile source: Compilation error source: #line 1 "reader MooseX::Traits::__ANON__::SERIAL::2::variable_name (de +fined at C:/Perl64/site/lib/Parse/Method/Signatures/Param/Bindable.pm + line 8)" sub { if (@_ > 1) { die Moose::Error::Util::create_error(message => "Cannot assign a value + to a read-only accessor", depth => -1, ); } return $_[0]->{"variable_name"}; } at C:/Perl64/site/lib/Class/MOP/Method/Generated.pm line 63 at C:/Perl64/site/lib/Moose/Meta/Method/Accessor.pm line 41 Moose::Meta::Method::Accessor::__ANON__('Failed to compile sou +rce: Compilation error\x{a}\x{a}source:\x{a}#line 1 ...') called at C +:/Perl64/site/lib/Try/Tiny.pm line 100 Try::Tiny::try('CODE(0x6c0f240)', 'Try::Tiny::Catch=REF(0x6c0e +d78)') called at C:/Perl64/site/lib/Moose/Meta/Method/Accessor.pm lin +e 47 Moose::Meta::Method::Accessor::_compile_code('Moose::Meta::Met +hod::Accessor=HASH(0x6c0ebb0)', 'ARRAY(0x6c0ee80)') called at C:/Perl +64/site/lib/Class/MOP/Method/Accessor.pm line 142 Class::MOP::Method::Accessor::__ANON__() called at C:/Perl64/s +ite/lib/Try/Tiny.pm line 71 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0eb98)', 'Try::Tiny::Catch=REF(0x6c0e +a30)') called at C:/Perl64/site/lib/Class/MOP/Method/Accessor.pm line + 157 Class::MOP::Method::Accessor::_generate_reader_method_inline(' +Moose::Meta::Method::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/s +ite/lib/Moose/Meta/Method/Accessor.pm line 62 Moose::Meta::Method::Accessor::_generate_reader_method('Moose: +:Meta::Method::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/site/li +b/Class/MOP/Method/Accessor.pm line 90 Class::MOP::Method::Accessor::_initialize_body('Moose::Meta::M +ethod::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/site/lib/Class/ +MOP/Method/Accessor.pm line 42 Class::MOP::Method::Accessor::new('Moose::Meta::Method::Access +or', 'attribute', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)', 'is_inlin +e', undef, 'accessor_type', 'reader', 'package_name', 'MooseX::Traits +::__ANON__::SERIAL::2', 'name', 'variable_name', 'associated_metaclas +s', 'Moose::Meta::Class=HASH(0x6c0c648)', 'definition_context', 'HASH +(0x6c0f1f8)') Class::MOP::Attribute::__ANON__() called at C:/Perl64/site/lib +/Try/Tiny.pm line 76 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0f1b0)', 'Try::Tiny::Catch=REF(0x6c0f +0f0)') called at C:/Perl64/site/lib/Class/MOP/Attribute.pm line 401 Class::MOP::Attribute::_process_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C:/ +Perl64/site/lib/Moose/Meta/Attribute.pm line 1074 Moose::Meta::Attribute::_process_accessors('Moose::Meta::Attri +bute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C: +/Perl64/site/lib/Class/MOP/Attribute.pm line 428 Class::MOP::Attribute::install_accessors('Moose::Meta::Attribu +te=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Moose/Meta/Attribut +e.pm line 1013 Moose::Meta::Attribute::install_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Class/MOP/Class.pm + line 891 Class::MOP::Class::__ANON__() called at C:/Perl64/site/lib/Try +/Tiny.pm line 76 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0d430)', 'Try::Tiny::Catch=REF(0x6c08 +320)') called at C:/Perl64/site/lib/Class/MOP/Class.pm line 896 Class::MOP::Class::_post_add_attribute('Moose::Meta::Class=HAS +H(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C: +/Perl64/site/lib/Class/MOP/Mixin/HasAttributes.pm line 44 Class::MOP::Mixin::HasAttributes::add_attribute('Moose::Meta:: +Class=HASH(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') cal +led at C:/Perl64/site/lib/Moose/Meta/Class.pm line 570 Moose::Meta::Class::add_attribute('Moose::Meta::Class=HASH(0x6 +c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 152 Moose::Meta::Role::Application::ToClass::apply_attributes('Moo +se::Meta::Role::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta:: +Role::Composite=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648) +') called at C:/Perl64/site/lib/Moose/Meta/Role/Application.pm line 5 +8 Moose::Meta::Role::Application::apply('Moose::Meta::Role::Appl +ication::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Composite=HASH +(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 36 Moose::Meta::Role::Application::ToClass::apply('Moose::Meta::R +ole::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Compo +site=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)', 'HASH(0x +6c03318)') called at C:/Perl64/site/lib/Moose/Meta/Role.pm line 470 Moose::Meta::Role::apply('Moose::Meta::Role::Composite=HASH(0x +6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl64/ +site/lib/Moose/Util.pm line 163 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x6c0c6 +48)', undef, 'Parse::Method::Signatures::Param::Bindable', 'Parse::Me +thod::Signatures::Param::Positional') called at C:/Perl64/site/lib/Mo +ose/Util.pm line 99 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x6c0c64 +8)', 'Parse::Method::Signatures::Param::Bindable', 'Parse::Method::Si +gnatures::Param::Positional') called at C:/Perl64/site/lib/Moose/Meta +/Class.pm line 104 Moose::Meta::Class::create('Class::MOP::Class::Immutable::Moos +e::Meta::Class=HASH(0x6b2f580)', 'MooseX::Traits::__ANON__::SERIAL::2 +', 'superclasses', 'ARRAY(0x6a072e8)', 'roles', 'ARRAY(0x6a1fea0)', ' +cache', 1) called at C:/Perl64/site/lib/MooseX/Traits/Util.pm line 67 MooseX::Traits::Util::new_class_with_traits('Parse::Method::Si +gnatures::Param', 'Bindable', 'Positional') called at C:/Perl64/site/ +lib/MooseX/Traits.pm line 24 MooseX::Traits::with_traits('Parse::Method::Signatures::Param' +, 'Bindable', 'Positional') called at C:/Perl64/site/lib/MooseX/Trait +s.pm line 46 MooseX::Traits::new_with_traits('Parse::Method::Signatures::Pa +ram', 'traits', 'ARRAY(0x6bfabd8)', 'required', 1, 'type_constraints' +, 'Parse::Method::Signatures::TypeConstraint=HASH(0x6c0b9e8)', 'varia +ble_name', '$file', 'sigil', '$') called at C:/Perl64/site/lib/Parse/ +Method/Signatures.pm line 113 Parse::Method::Signatures::create_param('Parse::Method::Signat +ures=HASH(0x6c08608)', 'HASH(0x6c085f0)') called at C:/Perl64/site/li +b/Parse/Method/Signatures.pm line 359 Parse::Method::Signatures::param('Parse::Method::Signatures=HA +SH(0x6c08608)') called at C:/Perl64/site/lib/Parse/Method/Signatures. +pm line 248 Parse::Method::Signatures::signature('Parse::Method::Signature +s', 'input', '(Str $file, $fh)', 'from_namespace', 'Module::Reprove') + called at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm + line 199 MooseX::Method::Signatures::Meta::Method::_build_parsed_signat +ure('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::parsed_signatur +e (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 36) line 7 MooseX::Method::Signatures::Meta::Method::parsed_signature('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 319 MooseX::Method::Signatures::Meta::Method::_build__positional_a +rgs('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::_positional_arg +s (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 62) line 7 MooseX::Method::Signatures::Meta::Method::_positional_args('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 369 MooseX::Method::Signatures::Meta::Method::_build_type_constrai +nt('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called + at reader MooseX::Method::Signatures::Meta::Method::type_constraint +(defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.p +m line 81) line 7 MooseX::Method::Signatures::Meta::Method::type_constraint('Moo +seX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C:/ +Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 174 Class::MOP::Class:::around('CODE(0x439bf08)', 'MooseX::Method: +:Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $fi +le, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Rep +rove') called at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm line +162 Class::MOP::Method::Wrapped::__ANON__('MooseX::Method::Signatu +res::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $file, $fh) +', 'name', '_getfile_to_handle', 'package_name', 'Module::Reprove') c +alled at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm line 91 MooseX::Method::Signatures::Meta::Method::wrap('MooseX::Method +::Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $f +ile, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Re +prove') called at C:/Perl64/site/lib/MooseX/Method/Signatures.pm line + 259 MooseX::Method::Signatures::_parser('MooseX::Method::Signature +s=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Method/Signat +ures.pm line 200 eval {...} called at C:/Perl64/site/lib/MooseX/Method/Signatur +es.pm line 200 MooseX::Method::Signatures::parser('MooseX::Method::Signatures +=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Declare/Syntax +/MethodDeclaration.pm line 51 MooseX::Declare::Syntax::MethodDeclaration::parse('MooseX::Dec +lare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'MooseX::Declare::Con +text=HASH(0x6a07528)') called at C:/Perl64/site/lib/MooseX/Declare/Sy +ntax/KeywordHandling.pm line 97 MooseX::Declare::Syntax::KeywordHandling::parse_declaration('M +ooseX::Declare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'C:/Perl64/ +site/lib/Module/Reprove.pm', 'HASH(0x62ba2d0)', 'method', 1) called a +t C:/Perl64/site/lib/MooseX/Declare/Syntax/KeywordHandling.pm line 51 MooseX::Declare::Syntax::KeywordHandling::__ANON__('method', 1 +) called at C:/Perl64/site/lib/Devel/Declare.pm line 274 Devel::Declare::linestr_callback('const', 'method', 1) called +at C:/Perl64/site/lib/Module/Reprove.pm line 109 require Module/Reprove.pm called at C:/Perl64/site/lib/App/Rep +rove.pm line 16 App::Reprove::BEGIN() called at C:/Perl64/site/lib/Module/Repr +ove.pm line 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 require App/Reprove.pm called at C:\test\Reprove.pl line 3 main::BEGIN() called at C:/Perl64/site/lib/Module/Reprove.pm l +ine 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 at C:/Perl64/site/lib/Class/MOP/Method/Accessor.pm line 156 Class::MOP::Method::Accessor::__ANON__('Could not create write +r for \'variable_name\' because Failed ...') called at C:/Perl64/site +/lib/Try/Tiny.pm line 100 Try::Tiny::try('CODE(0x6c0eb98)', 'Try::Tiny::Catch=REF(0x6c0e +a30)') called at C:/Perl64/site/lib/Class/MOP/Method/Accessor.pm line + 157 Class::MOP::Method::Accessor::_generate_reader_method_inline(' +Moose::Meta::Method::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/s +ite/lib/Moose/Meta/Method/Accessor.pm line 62 Moose::Meta::Method::Accessor::_generate_reader_method('Moose: +:Meta::Method::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/site/li +b/Class/MOP/Method/Accessor.pm line 90 Class::MOP::Method::Accessor::_initialize_body('Moose::Meta::M +ethod::Accessor=HASH(0x6c0ebb0)') called at C:/Perl64/site/lib/Class/ +MOP/Method/Accessor.pm line 42 Class::MOP::Method::Accessor::new('Moose::Meta::Method::Access +or', 'attribute', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)', 'is_inlin +e', undef, 'accessor_type', 'reader', 'package_name', 'MooseX::Traits +::__ANON__::SERIAL::2', ...) called at C:/Perl64/site/lib/Class/MOP/A +ttribute.pm line 389 Class::MOP::Attribute::__ANON__() called at C:/Perl64/site/lib +/Try/Tiny.pm line 76 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0f1b0)', 'Try::Tiny::Catch=REF(0x6c0f +0f0)') called at C:/Perl64/site/lib/Class/MOP/Attribute.pm line 401 Class::MOP::Attribute::_process_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C:/ +Perl64/site/lib/Moose/Meta/Attribute.pm line 1074 Moose::Meta::Attribute::_process_accessors('Moose::Meta::Attri +bute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C: +/Perl64/site/lib/Class/MOP/Attribute.pm line 428 Class::MOP::Attribute::install_accessors('Moose::Meta::Attribu +te=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Moose/Meta/Attribut +e.pm line 1013 Moose::Meta::Attribute::install_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Class/MOP/Class.pm + line 891 Class::MOP::Class::__ANON__() called at C:/Perl64/site/lib/Try +/Tiny.pm line 76 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0d430)', 'Try::Tiny::Catch=REF(0x6c08 +320)') called at C:/Perl64/site/lib/Class/MOP/Class.pm line 896 Class::MOP::Class::_post_add_attribute('Moose::Meta::Class=HAS +H(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C: +/Perl64/site/lib/Class/MOP/Mixin/HasAttributes.pm line 44 Class::MOP::Mixin::HasAttributes::add_attribute('Moose::Meta:: +Class=HASH(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') cal +led at C:/Perl64/site/lib/Moose/Meta/Class.pm line 570 Moose::Meta::Class::add_attribute('Moose::Meta::Class=HASH(0x6 +c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 152 Moose::Meta::Role::Application::ToClass::apply_attributes('Moo +se::Meta::Role::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta:: +Role::Composite=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648) +') called at C:/Perl64/site/lib/Moose/Meta/Role/Application.pm line 5 +8 Moose::Meta::Role::Application::apply('Moose::Meta::Role::Appl +ication::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Composite=HASH +(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 36 Moose::Meta::Role::Application::ToClass::apply('Moose::Meta::R +ole::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Compo +site=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)', 'HASH(0x +6c03318)') called at C:/Perl64/site/lib/Moose/Meta/Role.pm line 470 Moose::Meta::Role::apply('Moose::Meta::Role::Composite=HASH(0x +6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl64/ +site/lib/Moose/Util.pm line 163 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x6c0c6 +48)', undef, 'Parse::Method::Signatures::Param::Bindable', 'Parse::Me +thod::Signatures::Param::Positional') called at C:/Perl64/site/lib/Mo +ose/Util.pm line 99 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x6c0c64 +8)', 'Parse::Method::Signatures::Param::Bindable', 'Parse::Method::Si +gnatures::Param::Positional') called at C:/Perl64/site/lib/Moose/Meta +/Class.pm line 104 Moose::Meta::Class::create('Class::MOP::Class::Immutable::Moos +e::Meta::Class=HASH(0x6b2f580)', 'MooseX::Traits::__ANON__::SERIAL::2 +', 'superclasses', 'ARRAY(0x6a072e8)', 'roles', 'ARRAY(0x6a1fea0)', ' +cache', 1) called at C:/Perl64/site/lib/MooseX/Traits/Util.pm line 67 MooseX::Traits::Util::new_class_with_traits('Parse::Method::Si +gnatures::Param', 'Bindable', 'Positional') called at C:/Perl64/site/ +lib/MooseX/Traits.pm line 24 MooseX::Traits::with_traits('Parse::Method::Signatures::Param' +, 'Bindable', 'Positional') called at C:/Perl64/site/lib/MooseX/Trait +s.pm line 46 MooseX::Traits::new_with_traits('Parse::Method::Signatures::Pa +ram', 'traits', 'ARRAY(0x6bfabd8)', 'required', 1, 'type_constraints' +, 'Parse::Method::Signatures::TypeConstraint=HASH(0x6c0b9e8)', 'varia +ble_name', '$file', ...) called at C:/Perl64/site/lib/Parse/Method/Si +gnatures.pm line 113 Parse::Method::Signatures::create_param('Parse::Method::Signat +ures=HASH(0x6c08608)', 'HASH(0x6c085f0)') called at C:/Perl64/site/li +b/Parse/Method/Signatures.pm line 359 Parse::Method::Signatures::param('Parse::Method::Signatures=HA +SH(0x6c08608)') called at C:/Perl64/site/lib/Parse/Method/Signatures. +pm line 248 Parse::Method::Signatures::signature('Parse::Method::Signature +s', 'input', '(Str $file, $fh)', 'from_namespace', 'Module::Reprove') + called at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm + line 199 MooseX::Method::Signatures::Meta::Method::_build_parsed_signat +ure('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::parsed_signatur +e (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 36) line 7 MooseX::Method::Signatures::Meta::Method::parsed_signature('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 319 MooseX::Method::Signatures::Meta::Method::_build__positional_a +rgs('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::_positional_arg +s (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 62) line 7 MooseX::Method::Signatures::Meta::Method::_positional_args('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 369 MooseX::Method::Signatures::Meta::Method::_build_type_constrai +nt('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called + at reader MooseX::Method::Signatures::Meta::Method::type_constraint +(defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.p +m line 81) line 7 MooseX::Method::Signatures::Meta::Method::type_constraint('Moo +seX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C:/ +Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 174 Class::MOP::Class:::around('CODE(0x439bf08)', 'MooseX::Method: +:Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $fi +le, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Rep +rove', ...) called at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm +line 162 Class::MOP::Method::Wrapped::__ANON__('MooseX::Method::Signatu +res::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $file, $fh) +', 'name', '_getfile_to_handle', 'package_name', 'Module::Reprove') c +alled at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm line 91 MooseX::Method::Signatures::Meta::Method::wrap('MooseX::Method +::Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $f +ile, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Re +prove') called at C:/Perl64/site/lib/MooseX/Method/Signatures.pm line + 259 MooseX::Method::Signatures::_parser('MooseX::Method::Signature +s=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Method/Signat +ures.pm line 200 eval {...} called at C:/Perl64/site/lib/MooseX/Method/Signatur +es.pm line 200 MooseX::Method::Signatures::parser('MooseX::Method::Signatures +=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Declare/Syntax +/MethodDeclaration.pm line 51 MooseX::Declare::Syntax::MethodDeclaration::parse('MooseX::Dec +lare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'MooseX::Declare::Con +text=HASH(0x6a07528)') called at C:/Perl64/site/lib/MooseX/Declare/Sy +ntax/KeywordHandling.pm line 97 MooseX::Declare::Syntax::KeywordHandling::parse_declaration('M +ooseX::Declare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'C:/Perl64/ +site/lib/Module/Reprove.pm', 'HASH(0x62ba2d0)', 'method', 1) called a +t C:/Perl64/site/lib/MooseX/Declare/Syntax/KeywordHandling.pm line 51 MooseX::Declare::Syntax::KeywordHandling::__ANON__('method', 1 +) called at C:/Perl64/site/lib/Devel/Declare.pm line 274 Devel::Declare::linestr_callback('const', 'method', 1) called +at C:/Perl64/site/lib/Module/Reprove.pm line 109 require Module/Reprove.pm called at C:/Perl64/site/lib/App/Rep +rove.pm line 16 App::Reprove::BEGIN() called at C:/Perl64/site/lib/Module/Repr +ove.pm line 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 require App/Reprove.pm called at C:\test\Reprove.pl line 3 main::BEGIN() called at C:/Perl64/site/lib/Module/Reprove.pm l +ine 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 at C:/Perl64/site/lib/Class/MOP/Attribute.pm line 400 Class::MOP::Attribute::__ANON__('Could not generate inline rea +der because : Could not create w...') called at C:/Perl64/site/lib/Tr +y/Tiny.pm line 100 Try::Tiny::try('CODE(0x6c0f1b0)', 'Try::Tiny::Catch=REF(0x6c0f +0f0)') called at C:/Perl64/site/lib/Class/MOP/Attribute.pm line 401 Class::MOP::Attribute::_process_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C:/ +Perl64/site/lib/Moose/Meta/Attribute.pm line 1074 Moose::Meta::Attribute::_process_accessors('Moose::Meta::Attri +bute=HASH(0x6c0e7c0)', 'reader', 'variable_name', undef) called at C: +/Perl64/site/lib/Class/MOP/Attribute.pm line 428 Class::MOP::Attribute::install_accessors('Moose::Meta::Attribu +te=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Moose/Meta/Attribut +e.pm line 1013 Moose::Meta::Attribute::install_accessors('Moose::Meta::Attrib +ute=HASH(0x6c0e7c0)') called at C:/Perl64/site/lib/Class/MOP/Class.pm + line 891 Class::MOP::Class::__ANON__() called at C:/Perl64/site/lib/Try +/Tiny.pm line 76 eval {...} called at C:/Perl64/site/lib/Try/Tiny.pm line 67 Try::Tiny::try('CODE(0x6c0d430)', 'Try::Tiny::Catch=REF(0x6c08 +320)') called at C:/Perl64/site/lib/Class/MOP/Class.pm line 896 Class::MOP::Class::_post_add_attribute('Moose::Meta::Class=HAS +H(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C: +/Perl64/site/lib/Class/MOP/Mixin/HasAttributes.pm line 44 Class::MOP::Mixin::HasAttributes::add_attribute('Moose::Meta:: +Class=HASH(0x6c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') cal +led at C:/Perl64/site/lib/Moose/Meta/Class.pm line 570 Moose::Meta::Class::add_attribute('Moose::Meta::Class=HASH(0x6 +c0c648)', 'Moose::Meta::Attribute=HASH(0x6c0e7c0)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 152 Moose::Meta::Role::Application::ToClass::apply_attributes('Moo +se::Meta::Role::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta:: +Role::Composite=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648) +') called at C:/Perl64/site/lib/Moose/Meta/Role/Application.pm line 5 +8 Moose::Meta::Role::Application::apply('Moose::Meta::Role::Appl +ication::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Composite=HASH +(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl +64/site/lib/Moose/Meta/Role/Application/ToClass.pm line 36 Moose::Meta::Role::Application::ToClass::apply('Moose::Meta::R +ole::Application::ToClass=HASH(0x6c0c318)', 'Moose::Meta::Role::Compo +site=HASH(0x6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)', 'HASH(0x +6c03318)') called at C:/Perl64/site/lib/Moose/Meta/Role.pm line 470 Moose::Meta::Role::apply('Moose::Meta::Role::Composite=HASH(0x +6c0c3d8)', 'Moose::Meta::Class=HASH(0x6c0c648)') called at C:/Perl64/ +site/lib/Moose/Util.pm line 163 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x6c0c6 +48)', undef, 'Parse::Method::Signatures::Param::Bindable', 'Parse::Me +thod::Signatures::Param::Positional') called at C:/Perl64/site/lib/Mo +ose/Util.pm line 99 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x6c0c64 +8)', 'Parse::Method::Signatures::Param::Bindable', 'Parse::Method::Si +gnatures::Param::Positional') called at C:/Perl64/site/lib/Moose/Meta +/Class.pm line 104 Moose::Meta::Class::create('Class::MOP::Class::Immutable::Moos +e::Meta::Class=HASH(0x6b2f580)', 'MooseX::Traits::__ANON__::SERIAL::2 +', 'superclasses', 'ARRAY(0x6a072e8)', 'roles', 'ARRAY(0x6a1fea0)', ' +cache', 1) called at C:/Perl64/site/lib/MooseX/Traits/Util.pm line 67 MooseX::Traits::Util::new_class_with_traits('Parse::Method::Si +gnatures::Param', 'Bindable', 'Positional') called at C:/Perl64/site/ +lib/MooseX/Traits.pm line 24 MooseX::Traits::with_traits('Parse::Method::Signatures::Param' +, 'Bindable', 'Positional') called at C:/Perl64/site/lib/MooseX/Trait +s.pm line 46 MooseX::Traits::new_with_traits('Parse::Method::Signatures::Pa +ram', 'traits', 'ARRAY(0x6bfabd8)', 'required', 1, 'type_constraints' +, 'Parse::Method::Signatures::TypeConstraint=HASH(0x6c0b9e8)', 'varia +ble_name', '$file', ...) called at C:/Perl64/site/lib/Parse/Method/Si +gnatures.pm line 113 Parse::Method::Signatures::create_param('Parse::Method::Signat +ures=HASH(0x6c08608)', 'HASH(0x6c085f0)') called at C:/Perl64/site/li +b/Parse/Method/Signatures.pm line 359 Parse::Method::Signatures::param('Parse::Method::Signatures=HA +SH(0x6c08608)') called at C:/Perl64/site/lib/Parse/Method/Signatures. +pm line 248 Parse::Method::Signatures::signature('Parse::Method::Signature +s', 'input', '(Str $file, $fh)', 'from_namespace', 'Module::Reprove') + called at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm + line 199 MooseX::Method::Signatures::Meta::Method::_build_parsed_signat +ure('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::parsed_signatur +e (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 36) line 7 MooseX::Method::Signatures::Meta::Method::parsed_signature('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 319 MooseX::Method::Signatures::Meta::Method::_build__positional_a +rgs('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') calle +d at reader MooseX::Method::Signatures::Meta::Method::_positional_arg +s (defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method +.pm line 62) line 7 MooseX::Method::Signatures::Meta::Method::_positional_args('Mo +oseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C: +/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 369 MooseX::Method::Signatures::Meta::Method::_build_type_constrai +nt('MooseX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called + at reader MooseX::Method::Signatures::Meta::Method::type_constraint +(defined at C:/Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.p +m line 81) line 7 MooseX::Method::Signatures::Meta::Method::type_constraint('Moo +seX::Method::Signatures::Meta::Method=HASH(0x6c0b7a8)') called at C:/ +Perl64/site/lib/MooseX/Method/Signatures/Meta/Method.pm line 174 Class::MOP::Class:::around('CODE(0x439bf08)', 'MooseX::Method: +:Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $fi +le, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Rep +rove', ...) called at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm +line 162 Class::MOP::Method::Wrapped::__ANON__('MooseX::Method::Signatu +res::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $file, $fh) +', 'name', '_getfile_to_handle', 'package_name', 'Module::Reprove') c +alled at C:/Perl64/site/lib/Class/MOP/Method/Wrapped.pm line 91 MooseX::Method::Signatures::Meta::Method::wrap('MooseX::Method +::Signatures::Meta::Method', 'CODE(0x5bab988)', 'signature', '(Str $f +ile, $fh)', 'name', '_getfile_to_handle', 'package_name', 'Module::Re +prove') called at C:/Perl64/site/lib/MooseX/Method/Signatures.pm line + 259 MooseX::Method::Signatures::_parser('MooseX::Method::Signature +s=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Method/Signat +ures.pm line 200 eval {...} called at C:/Perl64/site/lib/MooseX/Method/Signatur +es.pm line 200 MooseX::Method::Signatures::parser('MooseX::Method::Signatures +=HASH(0x6a07600)') called at C:/Perl64/site/lib/MooseX/Declare/Syntax +/MethodDeclaration.pm line 51 MooseX::Declare::Syntax::MethodDeclaration::parse('MooseX::Dec +lare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'MooseX::Declare::Con +text=HASH(0x6a07528)') called at C:/Perl64/site/lib/MooseX/Declare/Sy +ntax/KeywordHandling.pm line 97 MooseX::Declare::Syntax::KeywordHandling::parse_declaration('M +ooseX::Declare::Syntax::Keyword::Method=HASH(0x62b9cf8)', 'C:/Perl64/ +site/lib/Module/Reprove.pm', 'HASH(0x62ba2d0)', 'method', 1) called a +t C:/Perl64/site/lib/MooseX/Declare/Syntax/KeywordHandling.pm line 51 MooseX::Declare::Syntax::KeywordHandling::__ANON__('method', 1 +) called at C:/Perl64/site/lib/Devel/Declare.pm line 274 Devel::Declare::linestr_callback('const', 'method', 1) called +at C:/Perl64/site/lib/Module/Reprove.pm line 109 require Module/Reprove.pm called at C:/Perl64/site/lib/App/Rep +rove.pm line 16 App::Reprove::BEGIN() called at C:/Perl64/site/lib/Module/Repr +ove.pm line 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 require App/Reprove.pm called at C:\test\Reprove.pl line 3 main::BEGIN() called at C:/Perl64/site/lib/Module/Reprove.pm l +ine 109 eval {...} called at C:/Perl64/site/lib/Module/Reprove.pm line + 109 Compilation failed in require at C:/Perl64/site/lib/App/Reprove.pm lin +e 16. BEGIN failed--compilation aborted at C:/Perl64/site/lib/App/Reprove.pm + line 16. Compilation failed in require at C:\test\Reprove.pl line 3. BEGIN failed--compilation aborted at C:\test\Reprove.pl line 3.

      If you need what Moose provides, and if it works, it's really cool. But it doesn't always work right, and when it doesn't, you are world of pain. Up shit creek without a paddle unless some one-of-the-four takes pity on you. And that is no way to make a living in this industry.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      The start of some sanity?

        With respect. Twaddle!

        You're welcome.

        Using the 300+ modules of Moose et. al.:

        You are in love with that number, but you and I both know you are manipulating it for effect. That is the number of individual PM files that it uses, not the number of modules that it installs. Also, Moose is only a small portion of that, MooseX::Declare and PPI play a large role in that list, neither of which are Moose. (no no, MooseX::Declare is not Moose, don't get me started on that).

        ... invoke LWP::Simple::get() on a list of files, write them to a temporary directory, and then invoke system to run a command; is an inappropriate use of abstraction. The creation of complexity from simplicity. In a word, overkill.

        Sure, thats fine, I won't really argue that point, but once again you seem to forget, Moose is not to blame for the overkill, the author is.

        Like hiring the Philharmonic Orchestra to play musak in your lift; using an 18-wheeler to fetch a pint of milk from the corner shop; deploying the Delta Force to remove a spider from your bath.

        1. World's most awesome elevator ride! (although perhaps a little crowded)
        2. Nothing says "cool" like a Big Rig! Thats a big 10-4 good buddy!
        3. Spiders are scary, THEY HAVE EIGHT EYES!!!!!!

        With regard to expertise: Still no one has stepped up to decipher this diarrhoea:

        Not publicly no, but honestly this is why I recommend against MooseX::Declare because it does f*cked up stuff like this to otherwise normal code.

        If you need what Moose provides, and if it works, it's really cool. But it doesn't always work right, and when it doesn't, you are world of pain. Up shit creek without a paddle unless some one-of-the-four takes pity on you. And that is no way to make a living in this industry.

        Wow, that is a pretty harsh words for which you have absolutely no basis. Moose works very well for hundreds, if not thousands of developers every day, if it was as fragile and dangerous as you think then it simply would not be being used.

        -stvn
Re^7: Should I upload it on CPAN?
by tobyink (Canon) on Feb 25, 2012 at 10:44 UTC

    Sorry, but that is simply fatuous pseud-OO.

    You pull in nearly 300 modules to do nothing more than: system '/usr/sbin/httpd';

    Well yes, but my point is that a single object instantiation and method call can be something trivial - e.g. adding two numbers...

    perl -MMath::BigInt -E'say Math::BigInt->new(400)->badd(2)'

    (400's big enough to justify Math::BigInt, right?) ... or something complex - e.g. serving HTTP. (If you don't like the Apache example, then pure Perl Web servers such as Starman are usually not much more than an instantiation plus method call.)

    Quite frankly, I cannot see any merit in your module over using App::Prove myself.

    App::Reprove does a different task. App::Prove runs one or more test cases that are on the local disk. App::Reprove takes the name of an already installed module, finds its test cases on CPAN, downloads them into a temp dir and runs App::Prove on them.

    But then, I can see no merit in App::Prove over using the prove command directly either.

    [tai@miranda (pts/2) ~]$ cat `which prove` | head -n 13 #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; #!/usr/bin/perl -w use strict; use App::Prove; my $app = App::Prove->new; $app->process_args(@ARGV); exit( $app->run ? 0 : 1 ); __END__
      my point is that a single object instantiation and method call can be something trivial - e.g. adding two numbers...

      I guess if you need a script to add 2 to 400, then that is fine.

      But what makes Math::BigInt's use of OO useful, is that it provided substantially more than 1 method.

      More to the point, it uses the OO methodology to provide facilities that would be difficult if not impossible to provide any other way: namely, the ability to switch transparently between different back-ends, that allow the user to choose their priorities. If they need more speed than the pure Perl implementation provides, they can underpin it with Math::GMP (assuming it builds on their system). Still too slow, but they are prepared to trade some accuracy, they can stick Math::Pari in there instead.

      That is well-architected, well-implemented, useful OO Not pseud-OO for its own sake.

      (If you don't like the Apache example, then pure Perl Web servers such as Starman are usually not much more than an instantiation plus method call.)

      A module -- regardless of what it does -- that provides nothing but a constructor and a single method is a fatuous use of OO: Ie. pseud-OO. A completely, useless, pointless, puerile use of OO for no benefit.

      But even then, if the constructor consists of blessing a hash with some data in it, where's the harm. It costs nothing.

      But pulling 288 modules into memory to provide pseud-OO -- OO for no benefit or purpose beyond the dogmatic assumption that "OO is better" -- is using OO as nothing more than a fashion accessory. Like a Diamond Encrusted iPhone or a Gold-plated iPad. It's just plain nuts.

      App::Reprove does a different task. App::Prove runs one or more test cases that are on the local disk. App::Reprove takes the name of an already installed module, finds its test cases on CPAN, downloads them into a temp dir and runs App::Prove on them.

      Exactly! If the module is already installed, so are the tests. Downloading them again is pointless. And using pseud-OO to do it even more so.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      The start of some sanity?

        Exactly! If the module is already installed, so are the tests. Downloading them again is pointless.

        The standard module installers (EUMM, MI, MB, etc) do not install the test suite as part of "make install" (or "./Build install"). CPAN.pm (though not CPANPLUS or cpanminus) can be configured to keep the entire source directory for a distribution which naturally includes the test suite, but it does not do so by default.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://956038]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-23 23:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found