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

Hernan Lopes hernanlopes at gmail.com
Sat Jan 8 11:53:33 PST 2011


Nunca trabalhei com mongo nem com couch.. mas até onde eu sei eles servem
muito bem para poucos casos... não sei se vc já trabalhou com estes... caso
não tenha trabalhado ainda, recomendo tester muito bem antes o que vc quer
fazer, pq nosql funciona bem para casos bem específicos. ex, se vc precisar
de transactions ou joins, pode esquecer nosql..
Até hoje eu nunca precisei utilizar nosql, mas se for a ferramenta certa eu
com certeza irei nesse caminho.

Sorte ai,
Daqui um tempo quero ver vc de volta e concordar com minha afirmação que o
catalyst é o melhor framework para web do momento!

att,

Hernan



2011/1/7 Rogerio Ferreira <rogeriotux at gmail.com>

> 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 at 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 at 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 at 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 at 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 at 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
>>>>>> >> > 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 at rio.pm.org> escreveu:
>>> >> >>
>>> >> >> 2011/1/7 Rogerio Ferreira <rogeriotux at 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 at 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 at 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 at 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 at 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 at 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 at 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 at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110108/b62e075e/attachment-0001.html>


More information about the SaoPaulo-pm mailing list