[SP-pm] Opiniões sobre Catalyst Web Framework

Rogerio Ferreira rogeriotux at gmail.com
Fri Jan 7 12:20:50 PST 2011


Hernan,

Pô valeu pelo "tutorial" !

O projeto que vou iniciar, vamos usar CouchDB.

Hernan você já teve experiência usando Catalyst com CouchDB (ou MongoDB)?


2011/1/7 Hernan Lopes <hernanlopes em gmail.com>

> Catalyst é sem dúvidas o melhor framework web do momento. E vai continuar
> sendo por muito tempo.
> Vá em frente, você não vai se arrepender, ninguem se arrepende.
> Leia o manual do catalyst no cpan, lá tem tudo que você irá precisar
> inicialmente. A documentação é bastante farta e completa.
> Recomendo HTML::FormHandler para trabalhar formulários web.
> É bom se familiarizar também com DBIx::Class, conforme suas dúvidas forem
> aparecendo.... aqui estão todas as respostas para as questões de acesso a
> banco de dados... leia aqui antes de perguntar, garanto que a resposta está
> em alguma página do DBIx::Class.
>
> Um exemplo de acesso à tabela produtos com DBIx::Class:
>
> my $products = $c->model('DB::Product')
>   ->search({
>     categoria => 'computadores',                              #traz tudo
> que é categoria computadores
>     preco => { '>=', 500 },                                        # traz
> tudo com preço >= 500
>     },{
>       rows=> 5,
> #opcional, a busca vai trazer limitar a 5 linhas
>       page=> 1,
> #opcional,  vai trazer apenas esta página
>       order_by => { -asc => [qw/created/] },               #opcional, vai
> ordenar por data de criação
>       });
>
> ai vc pode fazer um loop nos produtos ex:
>
>  while (my $p = $products->next) {
>     $c->log->debug('nome do produto', $p->nome );
>     $c->log->debug('nome do produto', $p->categoria );
>     $c->log->debug('nome do produto', $p->preco );
>     }
>
> Se você percebeu, esses códigos seriam executados nos controllers... como
> seria isso em uma view ? o catalyst utiliza o Template::Toolkit, que tem um
> excelente manual tb: ex
> http://template-toolkit.org/docs/manual/VMethods.html#method_match
>
> então seguindo o exemplo acima, vamos supor que eu selecionei os
> $products... então o próximo passo seria jogar esses $products no "stash" do
> catalyst..
> O "stash" é um espaço/hash reservado onde você pode armazenar dados que
> serão acessados em outros métodos/view/partes do código.
> Então para setar os $products no stash faremos o seguinte:
>
> $c->stash(
> products => $products,
> template => 'template-legal.tt2',
> current_view => 'TemplatePadrao',
> );
>
> pronto, eu poderia ir para outro método e acessar o $c->stash->{products} ,
> ou, posso ir para minha View e acessá-lo, conforme o exemplo:
>
> (no template-legal.tt2):
>
> <div>
> ....
> [% WHILE (product = products.next) %]
> Nome: [% product.nome %]
> Preço: [% product.preco %]
> Categoria: [% product.categoria %]
> [% END %]
> ....
> </div>
>
>
>
> Ok, agora só falta um exemplo de formulário com HTML::FormHandler:
>
>         my $form = HTML::FormHandler->new(
>             field_list =>   [
>
>             nome => {
>               type => 'Text',
>               label => 'Nome',
>               required => 1,
>               required_message => 'Campo obrigatório' ,
>             },
>
>             sexo => {
>               type => 'Select',
>               label => 'Sexo',
>               required => 1,
>               required_message => 'Campo obrigatório' ,
>               options => [
>               { label => 'SIM', value => 'SIM'},
>               { label => 'NÃO', value => 'NÃO'},
>               ],
>             },
>
>             submit => {
>               type => 'Submit',
>               value => 'Salvar',
>             },
>
>             ]);
>
>
>
>
>
>          if ($c->req->method eq 'POST') {                    #Assim podemos
> verificar o methodo do request
>            $form->process( params => $c->req->params );              # E
> acessar as chaves/valores do formulario postado
>          }
>
>          $c->stash( form => $form );                          # Jogamos o
> form no stash para acessar na view
>
>
>          return unless $form->validated;                      # Tentamos
> validar o formulario
>
>          $c->response->redirect($c->uri_for('/'));               # e assim
> redirecionamos para a url /
>
>
> Certo, depois para renderizar isto na view é muito simples... apenas:
>
> <div>
> ...
> [% form.render %]
> ...
> </div>
>
>
>
>
> Espero ter ajudado a visualizar um pouco como as coisas básicas funcionam.
>
> Fora isso o resto é auto explicativo, catalyst é bastante direto e sem
> complicações.
> e conforme já foi dito, é possível criar aplicações simples e complexas.
>
> dá gosto trabalhar com catalyst!!!o melhor framework web, sem dúvidas!
>
> att
>
> Hernan
>
>
>
> 2011/1/7 Blabos de Blebe <blabos em gmail.com>
>
> Eu tenho usado bastante o Mojolicious::Lite para prototipação.
>>
>> Experimentei brevemente o Dancer e gostei da documentação.
>>
>> Mojo e Dancer tem uma curva de aprendizagem bem suave. Você passa o
>> olho na doc e sai fazendo.
>>
>> Já o Catalyst, por ser mais parrudo é mais chatinho no começo, depois
>> melhora.
>>
>> ...
>>
>> Divagando...
>>
>> Não que seja o caso, nem é o foco da thread e talvez até contextualize
>> o tom da brincadeira, mas se eu vejo uma frase começando com 'não me
>> importo em *ter que* X', ou 'não tenho *problema* em Y', acende aquele
>> sinal de alerta.
>>
>> *Se* passa pela cabeça a expressão 'ter que programar em Perl' um
>> conselho que eu dou: *Não faça isso*.
>>
>> Perl será uma linguagem iadequada, feia, cheia de caracteres
>> estranhos, write-only, não importa qual framework utilizado.
>>
>> End of divagation
>>
>> Abraços
>>
>> 2011/1/7 Rogerio Ferreira <rogeriotux em gmail.com>:
>> > ,
>> >
>> > Eu não tenho problema em escrever em Perl, Python, ou outra coisa
>> qualquer.
>> > Só quero escolher um framework pra acelerar as coisas pro Projeto que
>> vou
>> > iniciar.
>> >
>> > Mas já valeu pelo cases que o Breno passou que usam Catalyst.
>> >
>> > Em 7 de janeiro de 2011 15:13, Blabos de Blebe <blabos em gmail.com>
>> escreveu:
>> >>
>> >> Escrever Perl é como sexo.
>> >>
>> >> Pode ser prazeroso ou dolorozo dependendo de como você fizer.
>> >>
>> >> Por isso é uma diversão melhor indicada para adultos que sabem o que
>> >> estão fazendo :)
>> >>
>> >> Abraços
>> >>
>> >> 2011/1/7 Rogerio Ferreira <rogeriotux em gmail.com>:
>> >> > Valeu Breno!
>> >> >
>> >> > Como ainda não tomei a decisão sobre qual Framework vou usar, a sua
>> >> > explanação vai dar alguma orientação. Mas vou fazer mais alguns
>> testes
>> >> > com o
>> >> > Catalyst, e como não sou religioso de linguagem alguma, a pesar de já
>> >> > ter
>> >> > sido com Python, quando desenvolvia com Zope/Plone, não me importo em
>> >> > ter
>> >> > que escrever código em Perl.
>> >> >
>> >> > Obrigado pelas informações.
>> >> >
>> >> > Em 7 de janeiro de 2011 12:56, breno <breno em rio.pm.org> escreveu:
>> >> >>
>> >> >> 2011/1/7 Rogerio Ferreira <rogeriotux em gmail.com>:
>> >> >> > Oi Pessoal,
>> >> >> >
>> >> >>
>> >> >> Oi Rogério, bem-vindo!
>> >> >>
>> >> >> > Estou postando essa mensagem na lista, pois acredito que não lugar
>> >> >> > melhor
>> >> >> > para chegar a uma conclusão. Já conheço alguns Frameworks, CMSs,
>> >> >> > etc...,
>> >> >> > e
>> >> >> > algumas linguagens de scripting. Eu tenho um projeto para iniciar
>> e
>> >> >> > andei
>> >> >> > pesquisando sobre o Catalyst, apesar de conhecer Rails, e como não
>> >> >> > gosto
>> >> >> > muito de Django, a pesar de gostar de python, eu tenho pretensão
>> de
>> >> >> > usar
>> >> >> > o
>> >> >> > Catalyst neste projeto. Por isso gostaria de saber de vocês, já
>> que
>> >> >> > aqui
>> >> >> > é a
>> >> >> > vossa praia, sobre suas experiências com o Framework, tais como:
>> >> >> > Agilidade
>> >> >> > para Produzir Resultados, Performance, Manutenção de
>> >> >> > Código Produzido e
>> >> >> > projetos que já usam Catalyst em ambiente de grande demanda de
>> >> >> > acessos
>> >> >> > simultaneos.
>> >> >> >
>> >> >> > Quem puder compartilhar comigo algo a respeito, eu ficarei grato.
>> >> >> >
>> >> >>
>> >> >> O Catalyst é um excelente framework, estável e robusto, e permite o
>> >> >> desenvolvimento de aplicações escaláveis desde a primeira linha de
>> >> >> código. De fato, ele foi projetado pra isso, então o primeiro
>> >> >> resultado pode não ser tão rápido quando em um framework mais
>> simples,
>> >> >> mas o quinto resultado será muito mais rápido e gratificante. Se vc
>> >> >> leu o XKCD dessa semana[http://xkcd.com/844/], o Catalyst faz um
>> >> >> esforço bastante válido e razoável pra ligar o "code right" com o
>> >> >> "code fast" (e, quem sabe, te tirar eventualmente do loop infinito e
>> >> >> levar ao mítico "good code") :-)
>> >> >>
>> >> >> A agilidade para produzir resultados, infelizmente, e
>> >> >> consequentemente, depende do seu grau de conhecimento. Mais ainda
>> >> >> (alguns diriam até que principalmente), é importante que ele se
>> >> >> encaixe com seu modo de pensar. Como o Catalyst é a grande cola
>> entre
>> >> >> soluções de templating e ORMs, vc precisa saber usar todas essas
>> >> >> pontas para chegar a resultados palpáveis. Do lado das Views temos o
>> >> >> Template Toolkit como escolha da maioria. Já para o Model você pode
>> ir
>> >> >> do robusto DBIx::Class a alternativas como MongoDB, CouchDB ou mesmo
>> >> >> KiokuDB.
>> >> >>
>> >> >> Experimente fazer o
>> >> >> tutorial[http://search.cpan.org/perldoc?Catalyst::Manual::Tutorial]
>> e
>> >> >> ver se vc se sente confortável com o Catalyst. O tutorial cobre
>> ainda
>> >> >> o básico de Template Toolkit e DBIx::Class. Se gostar, pode comprar
>> o
>> >> >> livro
>> >> >>
>> >> >> [
>> http://www.amazon.co.uk/Definitive-Guide-Catalyst-Maintainable-Applications/dp/1430223650?&camp=2486&linkCode=wey&tag=enligperlorga-21&creative=8882
>> ].
>> >> >> Se não gostar, não vale muito a pena insistir, e o mundo Perl está
>> >> >> cheio de alternativas bacanas para outros meios de pensar, como o
>> >> >> Mojolicious e o Dancer.
>> >> >>
>> >> >> O desempenho de soluções web depende muito da infraestrutura por
>> >> >> baixo. Se vc vem de Rails, sabe que um bom hardware faz toda a
>> >> >> diferença, que o grande gargalo é o banco, e que muitas vezes sai
>> mais
>> >> >> em conta pagar por uma melhoria na infra do que pagar um ou mais
>> devs
>> >> >> pra otimizar o código. Dito isso, sim, as facilidades oferecidas
>> pelo
>> >> >> Catalyst compensam e muito o overhead que ele causa, ainda mais
>> >> >> rodando em cima de um fastcgi.
>> >> >>
>> >> >> Ao contrário de muitas soluções, o Catalyst não coloca propaganda em
>> >> >> headers ou coisa que o valha, então é difícil listar sites com ele a
>> >> >> menos que o dev procure a comunidade e avise. Se vc quer um exemplo
>> de
>> >> >> "projetos que já usam Catalyst em ambiente de grande demanda de
>> >> >> acessos simultânos", um bom exemplo é o YouPorn[
>> http://www.youporn.com
>> >> >> - NSFW], que circula entre os 50 sites mais visitados do mundo. O
>> >> >> iPlayer da BBC não é muito conhecido aqui no Brasil, mas também é de
>> >> >> altíssimo tráfego.
>> >> >>
>> >> >> Espero ter ajudado. Se sobrou alguma dúvida, tamos aí pra isso :-)
>> >> >>
>> >> >> []s
>> >> >>
>> >> >> -b
>> >> >> =begin disclaimer
>> >> >>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> >> =end disclaimer
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Rogerio Ferreira
>> >> > http://rogerioferreira.objectis.net
>> >> > http://www.howtoday.com.br
>> >> > http://events.linuxfoundation.org/events/linuxcon-brazil/schedule
>> >> > http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf
>> >> > Fone: (11) 9424-0419
>> >> > --------------------------------------------------------
>> >> > LPI 302 (Mixed Environment) Specialty
>> >> > Senior Level Linux Professional (LPIC-3)
>> >> > Advanced Level Linux Professional (LPIC-2)
>> >> > Junior Level Linux Professional (LPIC-1)
>> >> >
>> >> > =begin disclaimer
>> >> >   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >> >  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >> >  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> > =end disclaimer
>> >> >
>> >> >
>> >> =begin disclaimer
>> >>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> >> =end disclaimer
>> >
>> >
>> >
>> > --
>> > Rogerio Ferreira
>> > http://rogerioferreira.objectis.net
>> > http://www.howtoday.com.br
>> > http://events.linuxfoundation.org/events/linuxcon-brazil/schedule
>> > http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf
>> > Fone: (11) 9424-0419
>> > --------------------------------------------------------
>> > LPI 302 (Mixed Environment) Specialty
>> > Senior Level Linux Professional (LPIC-3)
>> > Advanced Level Linux Professional (LPIC-2)
>> > Junior Level Linux Professional (LPIC-1)
>> >
>> > =begin disclaimer
>> >   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> >  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>> >  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> > =end disclaimer
>> >
>> >
>> =begin disclaimer
>>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>
>
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Rogerio Ferreira
http://rogerioferreira.objectis.net
http://www.howtoday.com.br
http://events.linuxfoundation.org/events/linuxcon-brazil/schedule
http://www.xen.org/files/XDBrazil2010/SpeakerProfiles.pdf
Fone: (11) 9424-0419
--------------------------------------------------------
LPI 302 (Mixed Environment) Specialty
Senior Level Linux Professional (LPIC-3)
Advanced Level Linux Professional (LPIC-2)
Junior Level Linux Professional (LPIC-1)
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110107/8d7f5094/attachment-0001.html>


More information about the SaoPaulo-pm mailing list