[Catalyst] Global 'helper' methods

Hugh Barnard hugh.barnard at gmail.com
Tue Oct 30 16:35:26 GMT 2012


Hi Craig, See below...

On 30 October 2012 16:15, Craig Chant <craig at homeloanpartnership.com> wrote:

>  Hi Hugh,
>
>
>
> I assume this is for Apache and I=92m running IIS7, so I guess it isn=92t
> compatible?
>
Although Japanese is a 'somewhat' family language, I can't read most of the
text in this:
 http://d.hatena.ne.jp/xaicron/ but it looks like an install of the
'mother' non-Apache module to Windows with Strawberry Perl. Obviously your
mileage may vary, but if you get anywhere, you'd be something of a pioneer
too, tell everyone.

>
>
> =93It looks like I've been having performance problems because millions of
> rows get blessed into objects, not sure of this but it looks like a DBIC
> thing at the moment.=94
>
>
>
> That=92s not good, and is part of the issue of ORM (so I=92ve read),  I=
=92m not
> as old as you, but I=92m still old school, get only the columns and rows =
you
> need when you need them, well that=92s my take on it and it seems to work=
 for
> me.
>
Depends, DBIC is often really 'natural' and less hand-coding but, like
everything, I think its limits need to be understood. For high performance
on big datasets, hand-rolled seems intuitively better in some cases.

>
>
> Regards,
>
>
>
> Craig.
>
>
>
> *From:* Hugh Barnard [mailto:hugh.barnard at gmail.com]
> *Sent:* 30 October 2012 15:47
> *To:* The elegant MVC web framework
>
> *Subject:* Re: [Catalyst] Global 'helper' methods
>
>
>
> Hi
>
> On measurement in general, I'd recommend: Devel::NYTProf::Apache ; there's
> a write up here:
> http://www.slideshare.net/bobcatfish/profiling-with-develnytprof
>
> I'm dealing with a largish Catalyst/mod_perl thing at the moment and it's
> been tremendously helpful. One tip is that it is very picky about closing
> the files that it needs to compile the profiles, I write these into /tmp
> and then crunch them with the command line tools.
>
> Incidentally, I am 62 and therefore pretty old-skool and not mad for
> ORM-everywhere. It looks like I've been having performance problems becau=
se
> millions of rows get blessed into objects, not sure of this but it looks
> like a DBIC thing at the moment. Currently I've 'cursor'-ed them:
>   my $cursor =3D $entries->cursor;
>   while ( my @row_values =3D $cursor->next ) {
> and that seems to give some improvements in that area...
>
> Best regards Hugh
>
> On 30 October 2012 15:24, Lukas Thiemeier <spamcatcher at thiemeier.net>
> wrote:
>
> Hm... how to measure the overhead of a module?
>
> There is a XS version of the module which is used if you have a C
> compiler. I don't know the exact overhead, but I know that it is fast.
>
> I have no experience with the pure perl version of that module.
>
> If all you have to do with the dates is the simple string transformation
> you are right. As I said before: I recommend to use DT if you are
> working with dates a lot. Doing math on dates and times is annoying,
> because of leap years, epochs, timezones and so on. If you need this:
> Using DateTime is recommended. If not: Its not :)
>
> If you are ONLY using pure perl modules:
> You can include all required modules in your distribution. It should run
> on any perl installation, even in a shared host environment.
>
> App::FatPacker helps you doing this...
>
> But this doesn't work as soon as you use XS modules.
>
>
> On 10/30/2012 04:03 PM, Craig Chant wrote:
> > Thanks Lukas,
> >
> > I appreciate there is DateTime , though I have so much legacy code that
> uses my helper class re-writing everything will be a mammoth task.
> >
> > I hand rolled a lot when I first started out with Perl, didn't know much
> about CPAN or PPM, and couldn't load any modules that weren't part of the
> core install on the original 'shared' hosting I was using.
> >
> > Plus I always felt loading an entire module to re-arrange a tiny string
> seems a bit OTT?
> >
> > Dunno, what's the overhead of DateTime?
> >
> > Craig.
> >
> > -----Original Message-----
> > From: Lukas Thiemeier [mailto:spamcatcher at thiemeier.net]
> > Sent: 30 October 2012 14:52
> > To: catalyst at lists.scsys.co.uk
> > Subject: Re: [Catalyst] Global 'helper' methods
> >
> > You can also define your constants in "YourApp/Constants.pl", and "use"
> > YourApp::Constants wherever you need them.
> >
> > YourApp/Constants.pm:
> >   use constant { FOO =3D> 1 };
> >   1;
> >
> > Controller.pm:
> >
> >   use YourApp::Constants;
> >
> >   # and in some method
> >   ...
> >   my $global_foo =3D FOO;
> >
> > There might be a better way, but this works...
> >
> > For handling dates, I recommend "DateTime", available on cpan:
> >
> > Another reason to use DBIC:
> > DBIx::Class::Inflatecolumn::DateTime automatically transforms dates
> stored in a database into a DateTime object, which can be used like this:
> >
> > my $uk_string =3D $datetime->dmy('/');
> > my $us_string =3D $datetime->ymd('-');
> >
> > But DateTime is not related to DBIC, DBIC just makes using it easy.
> >
> > Use it if you have to work with dates a lot. It has lots of methods for
> outputting dates, times or both in different formats, and it allows
> datetime-math...
> >
> >
> > On 10/30/2012 03:39 PM, Craig Chant wrote:
> >> Well I opted for putting my globals (methods and constants) in
> >> MyApp.pm
> >>
> >> It's working grand with $c->myMethod or $c->MY_CONSTANT
> >>
> >> I use to have them working as a bareword within my application , but
> $c->MY_CONSTANT is just as easy!
> >>
> >> Many thanks for all the input and help, it really is appreciated.
> >>
> >> -----Original Message-----
> >> From: Lukas Thiemeier [mailto:spamcatcher at thiemeier.net]
> >> Sent: 30 October 2012 13:56
> >> To: catalyst at lists.scsys.co.uk
> >> Subject: Re: [Catalyst] Global 'helper' methods
> >>
> >> Hi Craig,
> >>
> >> Writing helpers in your main App.pm and using roles is not either-or.
> >>
> >> Roles are one possibility to modify your classes in a reusable way.
> >>
> >> If your helpers are really global, which means that they are used by
> all, or almost all your controllers, I would put them into your main
> application class.
> >>
> >> If you have more than one application which make use of the same
> >> helpers: Put them into a role:
> >>
> >> YourHelperRole.pm:
> >>
> >>   package YourHelperRole;
> >>   use Moose::Role;
> >>
> >>   has "some_attribute" =3D> ( ... ); # if you need attributes
> >>
> >>   sub helpermethod1{
> >>         my ($self, $other, $args) =3D @_;
> >>         do_something();
> >>   }
> >>
> >>   sub helpermethod2{
> >>         my ($self, $other, $args) =3D @_;
> >>         do_something_different();
> >>   }
> >>
> >>   no Moose::Role; # or use namespace::autoclean or MooseX::MarkAsMethod
> >>   1;
> >>
> >> App.pm:
> >>
> >>   use Catalyst qw( ... );
> >>   extends "Catalyst";
> >>   with qw/YourHelperRole/;
> >>
> >>   ...
> >>
> >> In my opinion, extending your main App.pm with roles is only useful if
> you need the same helpers in different locations, too.
> >> If you only need them for that single application,  avoid the overhead
> related to using roles.
> >>
> >> If you have helpers which are only needed by some controllers, create a
> role for your controllers. You can not only implement helpers in you role=
s,
> you can also create method-modifiers, which change the way your methods
> behave.
> >>
> >> Here is an example, which writes sth to the log, after the "delete"
> >> method was called:
> >>
> >> YourLogRole.pm:
> >>
> >>   package YourLogRole;
> >>
> >>   use Moose::Role;
> >>   requires qw/delete/; #die if the consuming class has no "delete"
> >>
> >>   after "delete" =3D> sub{
> >>         my ($self, $c) =3D @_;
> >>         $c->log->debug("DELETE called");
> >>   };
> >>
> >>   no Moose::Role;
> >>   1;
> >>
> >> Controller1.pm: (has the helpers, but no logging)
> >>
> >>   package Controller1;
> >>   use Moose;
> >>   extends "Catalyst::Controller";
> >>   with qw/
> >>         YourHelperRole
> >>   /;
> >>
> >>   sub someaction :Local {
> >>         my ($self, $c) =3D at _;
> >>         $self->helpermethod1();
> >>   }
> >>
> >>   ...
> >>
> >> Controller2.pm: (has helpers AND logging)
> >>
> >>   package Controller2;
> >>   use Moose;
> >>   extends "Catalyst::Controller";
> >>   with qw/
> >>         YourLogRole
> >>         YourHelperRole
> >>   /;
> >>
> >>   sub delete :Local :Args(1) { ... }
> >>
> >> Controller3.pm (has logging, but no helpers)
> >>
> >>   package Controller3;
> >>   use Moose;
> >>   extends "Catalyst::Controller";
> >>   with qw/
> >>         YourLogRole
> >>   /;
> >>
> >>   sub delete :Local :Args(1) { ... }
> >>
> >> Roles are very powerful tools. I use them a lot.
> >> Read the Moose docs for more information.
> >>
> >> If you don't want to learn Moose, roles and so on now, just remember:
> >>
> >> 1. write sth in a role
> >> 2. consume the role in a moose class, using "with"
> >> 3. your roles methods and attributes will be available in the
> >> consuming class
> >>
> >> Lukas
> >>
> >> On 10/30/2012 02:03 PM, Craig Chant wrote:
> >>> Hi,
> >>>
> >>>
> >>>
> >>> Please could you advise the best way of having a global 'helper'
> >>> class that has all commonly used methods in it accessible for any
> >>> part of the catalyst app.
> >>>
> >>>
> >>>
> >>> I found this thread
> >>> http://stackoverflow.com/questions/11941836/catalyst-global-subroutin
> >>> e
> >>> s
> >>>
> >>>
> >>>
> >>> With one indicating it's ok to put them in the main MyApp.pm and
> >>> another saying to use Moose & Roles.
> >>>
> >>>
> >>>
> >>> What is considered the correct way and could you provide an example
> >>> of how I create this helper class and bolt it to the Catalyst
> application.
> >>>
> >>>
> >>>
> >>> Many thanks,
> >>>
> >>>
> >>>
> >>> */Craig Chant/*
> >>>
> >>> I.T. Manager
> >>>
> >>> Description: cid:image001.png at 01CD5F4A.17E848D0
> >>>
> >>> Main Line            01903 602664
> >>>
> >>> Direct Line           01903 227753
> >>>
> >>> Visit our website http://www.homeloanpartnership.com
> >>>
> >>> *HomeLoan Partnership have been named the Best Mortgage Network,
> >>> 2012, at the myintroducer.com Industry Awards*
> >>>
> >>>
> >>>
> >>> This Email and any attachments contain confidential information and
> >>> is intended solely for the individual to whom it is addressed. If
> >>> this Email has been misdirected, please notify the author as soon as
> >>> possible. If you are not the intended recipient you must not
> >>> disclose, distribute, copy, print or rely on any of the information
> >>> contained, and all copies must be deleted immediately. Whilst we take
> >>> reasonable steps to try to identify any software viruses, any
> >>> attachments to this e-mail may nevertheless contain viruses, which
> >>> our anti-virus software has failed to identify. You should therefore
> >>> carry out your own anti-virus checks before opening any documents.
> >>> HomeLoan Partnership will not accept any liability for damage caused
> >>> by computer viruses emanating from any attachment or other document
> supplied with this e-mail.
> >>> HomeLoan Partnership reserves the right to monitor and archive all
> >>> e-mail communications through its network. No representative or
> >>> employee of HomeLoan Partnership has the authority to enter into any
> >>> contract on behalf of HomeLoan Partnership by email. HomeLoan
> >>> Partnership is a trading name of H L Partnership Limited, registered
> >>> in England and Wales with Registration Number 5011722. Registered
> >>> office: 26-34 Old Street, London, EC1V 9QQ. H L Partnership Limited
> >>> is authorised and regulated by the Financial Services Authority.
> >>>
> >>>
> >>> _______________________________________________
> >>> List: Catalyst at lists.scsys.co.uk
> >>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> >>> Searchable archive:
> >>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> >>> Dev site: http://dev.catalyst.perl.org/
> >>
> >>
> >> _______________________________________________
> >> List: Catalyst at lists.scsys.co.uk
> >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> >> Searchable archive:
> >> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> >> Dev site: http://dev.catalyst.perl.org/ This Email and any attachments
> >> contain confidential information and is intended solely for the
> >> individual to whom it is addressed. If this Email has been
> >> misdirected, please notify the author as soon as possible. If you are
> >> not the intended recipient you must not disclose, distribute, copy,
> >> print or rely on any of the information contained, and all copies must
> >> be deleted immediately. Whilst we take reasonable steps to try to
> >> identify any software viruses, any attachments to this e-mail may
> >> nevertheless contain viruses, which our anti-virus software has failed
> >> to identify. You should therefore carry out your own anti-virus checks
> >> before opening any documents. HomeLoan Partnership will not accept any
> >> liability for damage caused by computer viruses emanating from any
> >> attachment or other document supplied with this e-mail. HomeLoan
> >> Partnership reserves the right to monitor and archive all e-mail
> >> communications through its network. No representative or employee of
> >> HomeLoan Partn
> >  ership ha
> > s the authority to enter into any contract on behalf of HomeLoan
> Partnership by email. HomeLoan Partnership is a trading name of H L
> Partnership Limited, registered in England and Wales with Registration
> Number 5011722. Registered office: 26-34 Old Street, London, EC1V 9QQ. H L
> Partnership Limited is authorised and regulated by the Financial Services
> Authority.
> >>
> >> _______________________________________________
> >> List: Catalyst at lists.scsys.co.uk
> >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> >> Searchable archive:
> >> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> >> Dev site: http://dev.catalyst.perl.org/
> >
> >
> > _______________________________________________
> > List: Catalyst at lists.scsys.co.uk
> > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> > Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> > Dev site: http://dev.catalyst.perl.org/
>
> > This Email and any attachments contain confidential information and is
> intended solely for the individual to whom it is addressed. If this Email
> has been misdirected, please notify the author as soon as possible. If you
> are not the intended recipient you must not disclose, distribute, copy,
> print or rely on any of the information contained, and all copies must be
> deleted immediately. Whilst we take reasonable steps to try to identify a=
ny
> software viruses, any attachments to this e-mail may nevertheless contain
> viruses, which our anti-virus software has failed to identify. You should
> therefore carry out your own anti-virus checks before opening any
> documents. HomeLoan Partnership will not accept any liability for damage
> caused by computer viruses emanating from any attachment or other document
> supplied with this e-mail. HomeLoan Partnership reserves the right to
> monitor and archive all e-mail communications through its network. No
> representative or employee of HomeLoan Partn
>
>  ership ha
> s the authority to enter into any contract on behalf of HomeLoan
> Partnership by email. HomeLoan Partnership is a trading name of H L
> Partnership Limited, registered in England and Wales with Registration
> Number 5011722. Registered office: 26-34 Old Street, London, EC1V 9QQ. H L
> Partnership Limited is authorised and regulated by the Financial Services
> Authority.
> >
> > _______________________________________________
> > List: Catalyst at lists.scsys.co.uk
> > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> > Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> > Dev site: http://dev.catalyst.perl.org/
>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
>
>
>
>
> --
> http://www.hughbarnard.org
> http://www.twitter.com/hughbarnard
> http://www.big-wave-heuristics.com/
>  This Email and any attachments contain confidential information and is
> intended solely for the individual to whom it is addressed. If this Email
> has been misdirected, please notify the author as soon as possible. If you
> are not the intended recipient you must not disclose, distribute, copy,
> print or rely on any of the information contained, and all copies must be
> deleted immediately. Whilst we take reasonable steps to try to identify a=
ny
> software viruses, any attachments to this e-mail may nevertheless contain
> viruses, which our anti-virus software has failed to identify. You should
> therefore carry out your own anti-virus checks before opening any
> documents. HomeLoan Partnership will not accept any liability for damage
> caused by computer viruses emanating from any attachment or other document
> supplied with this e-mail. HomeLoan Partnership reserves the right to
> monitor and archive all e-mail communications through its network. No
> representative or employee of HomeLoan Partnership has the authority to
> enter into any contract on behalf of HomeLoan Partnership by email.
> HomeLoan Partnership is a trading name of H L Partnership Limited,
> registered in England and Wales with Registration Number 5011722.
> Registered office: 26-34 Old Street, London, EC1V 9QQ. H L Partnership
> Limited is authorised and regulated by the Financial Services Authority.
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
>
>


-- =

http://www.hughbarnard.org
http://www.twitter.com/hughbarnard
http://www.big-wave-heuristics.com/
<http://www.hackney-environment-network.org.uk/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20121030/7ddce=
dd5/attachment.htm


More information about the Catalyst mailing list