Front page | perl.beginners |
Postings from April 2011
Re: unable to print loader image properly until the backend process finishes.
Thread Previous
|
Thread Next
From:
Shlomi Fish
Date:
April 19, 2011 00:51
Subject:
Re: unable to print loader image properly until the backend process finishes.
Message ID:
201104191050.58300.shlomif@iglu.org.il
Hi Agnello,
a few more comments on your code:
On Monday 18 Apr 2011 18:31:30 Agnello George wrote:
> On Mon, Apr 18, 2011 at 6:17 PM, Shlomi Fish <shlomif@iglu.org.il> wrote:
> > Hi Agnello,
> >
> > some comments on your code.
> >
> > On Monday 18 Apr 2011 15:18:22 Agnello George wrote:
> > > Hi
> > >
> > > I am trying my hand in CGI , i have script that runs svn list
> > > on-submit which obviously takes 30 to 40 secs for the page to load , i
> > > plan to use
> >
> > a
> >
> > > ajax loader to be printed untill those 30 to 40 seconds. But even
> > > after the page has finished loading i can still see the image. I am
> > > not good in java script but can this be done using perl only .. here
> > > is a snip of my code ..
> >
> > Please include your entire code - not a snippet of it.
> >
> > > my @all_svn;
> > >
> > > unless (@all_svn) {
> >
> > This will always be executed since @all_svn is empty.
> >
> > > print '<p> <img alt="" src="
> >
> > http://192.168.1.25/template/ajax-loader.gif"
> >
> > > /></p>';
> > > }
> > >
> > > @all_svn = qx(svn list -R $virticals{$sitei}{svnurl}) ;
> >
> > 1. You've misspelled "verticals".
> >
> > 2. What is "sitei"?
> >
> > 3. Be careful from interpolating strings into qx/.../ :
> >
> > http://community.livejournal.com/shlomif_tech/35301.html
> >
> > > s/\s+$// for @all_svn;
> >
> > Subversion has Application Programmers Interfaces (APIs) for that, so you
> > don't need to parse its output non-reliably.
> >
> > > my %allsus = map {$_ => 1 } @filesi;
> >
> > What is "filesi"? What is "allsus"?
> >
> > > my @allgood = grep {defined $allsus{$_ } } @all_svn ;
> > > print "@allgood";
> >
> > Here you can have a cross site scripting attack:
> >
> > http://community.livejournal.com/shlomif_tech/35301.html
> >
> > Best Regards,
> >
> > Shlomi Fish
>
> I am sorry i had only posted a snip of my code , here is the whole code (
> which too is not complete ) .
>
> I am using template toolkit for output ( do you need me to paste my html
> code also )
>
> i have a simple UI , with a text area to input my files and a drop down
> menu to select which site i need to do deployment for .
>
> This code is not complete but among the many other issues I am facing ,
> the main issue is the ajax-loader.gif that i need to show on the UI whne
> the pages loads or on press of submit .
>
> #!/usr/bin/perl
>
> use strict ;
> use warnings ;
> use Template;
> use Data::Dumper;
> use CGI;
> my $query = new CGI;
>
That should be:
my $cgi = CGI->new;
1. Avoid indirect object notation:
http://perl-begin.org/tutorials/bad-elements/#indirect-object-notation
2. Call the CGI handle in something more descriptive than $query.
> print "Content-type: text/html\n\n";
>
After this, you will serve HTML regardless of what you wish to serve, so
serving an image won't be acceptable at all. CGI.pm has the $cgi->header()
method for that, BTW.
> my $tt = Template->new( INCLUDE_PATH => "/var/www/html/template" ) || die
> "template process failed:$!";
"||" here should be an "or".
>
> my %tag ;
> my %verticals = ( 'website1_v' => { 'tempdir' => '/temp/auto' , 'svnurl' =>
> 'http://svn.int.com/repos/branch/website1' } );
>
> my ($files, $site,$valu,$ma_status);
You've misspelt "value" as "valu" and you should have more spaces after the
comments.
> if ($ENV{'REQUEST_METHOD'} eq "POST") {
> $files = $query->param('element_1');
> $site = $query->param('mydropdown');
> $ma_status = gtfls_cfe("$files");
>
> }
>
This code seems sub-optimal. Perhaps you'd like a subroutine call or an
object. gtfls_cfe($files) (not
http://perl-begin.org/tutorials/bad-elements/#vars_in_quotes , mind) may give
you an XSS attack.
> sub gtfls_cfe {
> my (@files,$status);
> @files = split(/\s+/, $_[0]) ;
Don't predeclare variables:
http://perl-begin.org/tutorials/bad-elements/#declaring_all_vars_at_top
> $valu = check_if_exist_in_svn(\@files,$site);
>
Why isn't $valu (better written as "$value") declared here.
>
> if ($$valu{ireturn} == 1){
This is better written as $value->{ireturn}. Also in that case $value should
be an object with accessors:
http://perl-begin.org/tutorials/bad-elements/#accessing_object_slots_directly
> $status = " the following files not exist in svn <BR> ";
> $status .= "$_<BR>" foreach @{$$valu{notgood}};
"<BR>" should be "<br />" preferably (XHTML).
Furthermore, you have a potential XSS attack here.
> } elsif ($$valu{ireturn} == 0 ) {
> $status = " the following files are OK to deployed in production
> server <BR> ";
> # Do more code here
> #
> }
> return $status
Missing trailing semicolon. It is a good idea to have one everywhere (see Perl
Best Practices).
> }
>
> sub check_if_exist_in_svn {
> my (@filesi) = @{$_[0]};
> my ($sitei )= $_[1];
Don't use positional indexes into @_:
http://perl-begin.org/tutorials/bad-elements/#subroutine-arguments
> my @all_svn;
> #my $WW = '<p> <img alt="" src="
> http://192.168.1.25/template/ajax-loader.gif" /></p>'; ### cant sem to
> make this work!!
What are you trying to do here.
> @all_svn = qx(svn list -R $verticals{$sitei}{svnurl}) ;
>
> s/\s+$// for @all_svn;
>
> my %allsus = map {$_ => 1 } @all_svn;
>
> my (@allgood,@notgood,%hash1 ) ;
>
> foreach (@filesi){
> if ( defined $allsus{$_} ){
> push (@allgood , $_);
> } elsif ( !defined $allsus{$_}) {
> push (@notgood, $_ ) ;
> }
>
>
> }
> if ( @notgood ) {
> %hash1 = ( 'ireturn' => 1 , notgood => \@notgood ) ;
> return (\%hash1) ;
> } elsif (@allgood){
> %hash1 = ( 'ireturn' => 0 , allgood => \@allgood ) ;
> return (\%hash1) ;
> }
>
Here you should use the Subversion API.
Regards,
Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
The Case for File Swapping - http://shlom.in/file-swap
Knuth is not God! God has already released TeX version 4.0.
Please reply to list if it's a mailing list post - http://shlom.in/reply .
Thread Previous
|
Thread Next