[SP-pm] [was: Validar session no Catalyst] Compartilhando experiências com frameworks web em produção

Nelson Ferraz nferraz at gmail.com
Fri Jul 15 03:47:12 PDT 2011


2011/7/15 Hernan Lopes <hernanlopes em gmail.com>:
> catalyst é perfeito...

Se ele é perfeito, significa que não pode ser melhorado. Eu me recuso
a pensar dessa maneira.

E se ele *não é* perfeito, a questão que fica é: como pode ser
melhorado? Todos nós sabemos -- e eu sou o primeiro a admitir -- que o
Catalyst é extremamente flexível e poderoso. Qualquer melhoria nessa
área trará apenas ganhos marginais, e não nos ajudará a atingir a
ubiquidade. (Se é que este é o nosso objetivo.)

> depois de trabalhar com .net por 1 ano e pouco,
> tive aula de struts na faculdade e te confesso que fiz o trabalho final em um final
> de semana após a primeira semana de aula...  acabei indo estudar e trabalhar um
> pouco com COBOL em uma oportunidade de estágio que me apareceu... depois
> dessas experiências estava me formando em ciência da computação e o assunto
> do momento eram "frameworks"

Você estudou ciência da computação, tem experiência com .Net, PHP, e
até COBOL. Definitivamente não é o público-alvo que me preocupa.

Aliás: posso estar enganado, mas a maioria daqueles que defenderam o
Catalyst nessa thread estudam (ou estudaram) Ciência da Computação.

Vamos pensar sobre isso.

E aqui eu peço um favor: não entrem em modo de defesa automático, não
tentem proteger o seu framework preferido; ajudem-me a identificar
falhas, pontos que podem ser melhorados.

Eu quero saber como é que o sujeito que *não* estudou computação e mal
sabe HTML -- ou seja, 99% da população -- vai usar o Catalyst.

Vamos fazer o seguinte exercício: uma página web simples, com um
formulário que ao ser enviado responda "Hello, $nome!". É assim que a
maioria das pessoas vai tomar o primeiro contato com o seu framework.


1) PHP

Abra um editor de texto e salve estes dois arquivos, em qualquer lugar:

==== index.php =====

<form method="post" action="hello.php">
  <input type="text" name="name">
  <input type="submit">
</form>

==== /index.php =====


==== hello.php =====

<h1><?php echo( $_POST["name"] ) ?></h1>

==== /hello.php =====

Isso é tudo. Dois arquivos, em qualquer lugar, e está funcionando.


2) Mojolicious::Lite

==== hello.pl =====

#!/usr/bin/perl

use Mojolicious::Lite;

get '/' => 'index';

post '/hello' => sub {
    my $self = shift;
    my $name = $self->param('name');
    $self->stash( name => $name );
} => 'hello';

app->start();

__DATA__
@@ index.html.ep
<form method="post" action="/hello">
  <input type="text" name="name">
  <input type="submit">
</form>

@@ hello.html.ep
<h1>Hello, <%= $name %></h1>

==== /hello.pl =====

Execute o programa com: ./hello.pl daemon

Isso é tudo. Um arquivo, em qualquer lugar, e está pronto.


3) Catalyst

Vou seguir o tutorial em
http://search.cpan.org/~bobtfish/Catalyst-Manual/lib/Catalyst/Manual/Tutorial/02_CatalystBasics.pod

    $ catalyst.pl Hello
    created "Hello"
    created "Hello/script"
    created "Hello/lib"
    created "Hello/root"
    ...
    created "Hello/script/hello_create.pl"
    Change to application directory and Run "perl Makefile.PL" to make
sure your install is complete
    $ cd Hello

    $ script/hello_create.pl view HTML TT


Open the lib/Hello/Controller/Root.pm file in your editor.

    sub index :Path :Args(0) {
        my ( $self, $c ) = @_;

        $c->stash(template => 'index.tt');
    }

Create a root/index.tt template file (put it in the root under the
Hello directory that is the base of your application).

    <form method="post" action="/hello">
        <input type="text" name="name">
        <input type="submit">
    </form>

==== Neste ponto eu precisei buscar na documentação como obter um
parâmetro do request ($c->req->params), pois a informação só aparece
duas páginas do tutorial adiante - WTF???? =====

    sub hello :Path :Args(0) {
        my ( $self, $c ) = @_;

        my $name = $c->req->params->{name};

        $c->stash(
            name => $name,
            template => 'hello.tt',
        );
    }

Create a root/index.tt template file (put it in the root under the
Hello directory that is the base of your application).

    <h1>Hello, [% name %]</h1>


Isso é tudo... pelo menos eu acho, pois não consegui instalar o
Catalyst no meu Mac [one dependency not OK
(MooseX::Role::WithOverloading)]. WTF?!?!?!?!?!!

Espero que vocês consigam entender a minha frustração. Imaginem um
usuário iniciante, com pouca experiência em Perl!

[]s

Nelson


More information about the SaoPaulo-pm mailing list