<p>Na verdade eu estou curioso para ver como o catalyst vai resolver o problema da complexidade.</p>
<p>A resposta do Eden foi interessante pois mostrou que as diferenças não são tão grandes assim.</p>
<p>Aliás -- acho que o projeto do Eden é muito promissor.</p>
<p>[]s</p>
<div class="gmail_quote">Op 12 jul. 2011 20:30 schreef "Blabos de Blebe" <<a href="mailto:blabos@gmail.com">blabos@gmail.com</a>> het volgende:<br type="attribution">>> e tal mas isso me faz questionar quantas pessoas realmente estão usando<br>
>> o mojolicious em produção, porque basic http auth é uma funcionalidade<br>> <br>> <a href="http://news.bbc.co.uk/2/hi/8499859.stm">http://news.bbc.co.uk/2/hi/8499859.stm</a><br>> <br>> ... isso me faz questionar quantas pessoas realmente estão usando o<br>
> windows em produção...<br>> <br>> <a href="http://blogmal.42.org/tidbits/tcp-bug.story">http://blogmal.42.org/tidbits/tcp-bug.story</a><br>> <br>> ... isso me faz questionar quantas pessoas realmente estão usando o<br>
> TCP em produção...<br>> <br>> <a href="http://www.osnews.com/story/19731/The-25-Year-Old-UNIX-Bug">http://www.osnews.com/story/19731/The-25-Year-Old-UNIX-Bug</a><br>> <br>> ... isso me faz questionar quantas pessoas realmente estão usando o<br>
> BSD em produção...<br>> <br>> <a href="http://blogs.westword.com/showandtell/01%20your%20argument%20is%20invalid.jpg">http://blogs.westword.com/showandtell/01%20your%20argument%20is%20invalid.jpg</a><br>> <br>
> Pronto, trolei um.<br>> <br>> Com comentários desnecessários e exemplo de código ruim, colocar o<br>> Mojolicious nessa conversa foi um desfavor à discussão e ao framework.<br>> A pergunta foi sobre sessões e Catalyst. Pra que botar Mojo na<br>
> história? Só pra gerar flame? Palhaçada isso.<br>> <br>> Trolei outro.<br>> <br>> ;)<br>> <br>> Abraços<br>> <br>> <br>> <br>> 2011/7/12 Eden Cardim <<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>>:<br>
>>>>>>> "Nelson" == Nelson Ferraz <<a href="mailto:nferraz@gmail.com">nferraz@gmail.com</a>> writes:<br>>><br>>>    Nelson> Sem querer iniciar uma flamewar, mas este é apenas mais um exemplo<br>
>>    Nelson> onde o Catalyst complica demais algo que deveria ser simples.<br>>><br>>> Apesar do título da mensagem original ser sobre sessões, a dúvida do<br>>> Lucas era sobre outra coisa, então o exemplo não procede.<br>
>><br>>> A princípio, não entendi o código de exemplo porque sessões e usuários<br>>> são conceitos ortogonais, mas ok, pra fazer exatamente a mesma coisa no<br>>> catalyst (mesmo sem fazer sentido):<br>
>><br>>>    Nelson> Veja como isso pode ser feito no Mojolicious:<br>>><br>>> ,----[ # 1: verificar uma variável de sessão ]<br>>> | get '/' => sub {<br>>> |     my $self = shift;<br>
>> |     my $username = $self->session('username');<br>>> |     self->redirect_to('/login') if !$username;<br>>> |     $self->render( text => "Hello, $username" );<br>
>> | };<br>>> `----<br>>><br>>> sub root :Path('/') {<br>>>    my($self, $c) = @_;<br>>>    my $username = $c->session->{username};<br>>>    $c->res->redirect('/login') if !$username;<br>
>>    $c->res->body("Hello $username");<br>>> }<br>>><br>>> Não muda muita coisa, e se fosse só pelo golf, o Catalyst ainda levava.<br>>><br>>> ,----[ 2: definir uma variável de sessão ]<br>
>> | get '/login' => sub {<br>>> |     my $self = shift;<br>>> |<br>>> |     my $username = $self->param('username');<br>>> |     my $password = $self->param('password');<br>
>> |<br>>> |     if ($username eq 'foo' and $password eq 'bar') {<br>>> |         $self->session( username => $username );<br>>> |         $self->redirect_to('/');<br>
>> |     }<br>>> |<br>>> |     $self->render( text => "Please use:<br>>> | <a href="http://localhost:3000/login?username=xxx;password=yyy">http://localhost:3000/login?username=xxx;password=yyy</a>" );<br>
>> | };<br>>> `----<br>>><br>>> sub login :Path {<br>>>    my($self, $c) = @_;<br>>><br>>>    my($username, $password) = @{$self->params}<br>>>      {qw(username password)};<br>
>><br>>>    if($username eq 'foo' and $password eq 'bar') {<br>>>      $c->session->{username} = $username;<br>>>      $c->res->redirect('/');<br>>>    }<br>
>><br>>>    $c->res->body("Please use: <a href="http://localhost:3000/login?username=xxx;password=yyy">http://localhost:3000/login?username=xxx;password=yyy</a>");<br>>> }<br>>><br>
>>    Nelson> # 3: remover uma variável de sessão<br>>><br>>> ,----[ 3: remover uma variável de sessão ]<br>>> | get '/logout' => sub {<br>>> |     my $self = shift;<br>>> |<br>
>> |     my $username = $self->session('username');<br>>> |     $self->session( username => undef ); # poderia ter usado "expire"<br>>> |<br>>> |     $self->render( text => "Bye bye, $username" );<br>
>> | };<br>>> `----<br>>><br>>> sub logout :Path {<br>>>    my($self, $c) = @_;<br>>>    my $username = delete $c->session->{username};<br>>>    $c->res->body("Bye, bye, $username");<br>
>> }<br>>><br>>> Claro que eu nunca recomendaria que se usasse autenticação dessa forma,<br>>> a abordagem padrão do catalyst para autenticação é bem mais simples que<br>>> isso:<br>>><br>
>> sub login :Path {<br>>>    my($self, $c) = @_;<br>>>    $c->authenticate()<br>>>      and $c->res->redirect('/'), return;<br>>>    $c->res->body('wrong username or password');<br>
>> }<br>>><br>>> sub login :Path {<br>>>    my($self, $c) = @_;<br>>>    $c->logout();<br>>> }<br>>><br>>> O sistema de autenticação do Catalyst é extremamente flexível, robusto e<br>
>> completo, e tudo funciona colando os pedaços que você precisa, assim a<br>>> aplicação não enche de bloat. Por exemplo, outro dia precisei<br>>> implementar uma funcionalidade de sudo (um usuário com privilégios<br>
>> suficientes, precisaria ser capaz de trocar sua sessão pruma sessão de<br>>> outro usuário qualquer). Um desenvolvedor do projeto, que aprendeu a<br>>> programar perl há 4 meses implementou (completo, com testes, etc.), em 2<br>
>> horas de trabalho. 30 minutos pra implementar a funcionalidade, 90 pra<br>>> implementar os testes unitários e de integração. No final das contas, o<br>>> core do código funcional ficou assim:<br>>><br>
>> $c->authenticate({ email => $email,  pasword => 'DUMMY' }, 'sudo')<br>>>  if $c->user->check_user_roles('admin');<br>>><br>>> Inclusive, eu experimentei novamente o mojolicious outro dia porque o<br>
>> thiago precisa de autenticação prum projeto dele, mas o plugin que<br>>> implementava basic http auth tava bugado por incompatibilidade com uma<br>>> versão que saiu a mais de 10 releases atrás. O thiago submeteu um patch<br>
>> e tal mas isso me faz questionar quantas pessoas realmente estão usando<br>>> o mojolicious em produção, porque basic http auth é uma funcionalidade<br>>> trivial e muito exigida em apps do mundo real, se tivesse alguém usando<br>
>> em produção, já teriam esbarrado com o problema e atualizado o plugin na<br>>> versão seguinte.<br>>><br>>>    Nelson> PS: Até onde eu sei, o Eden estava trabalhando em um projeto que<br>>>    Nelson> traria esse tipo de simplicidade para o Catalyst. Em que pé está esse<br>
>>    Nelson> projeto, Eden?<br>>><br>>> Na verdade, não é um projeto pra trazer simplicidade, a simplicidade já<br>>> está no core. Só é uma extensão que inclui uma forma alternativa de<br>>> declarar regras de dispatch:<br>
>><br>>> <a href="https://github.com/edenc/Catalyst-Lite/blob/master/lib/Catalyst/Lite.pm">https://github.com/edenc/Catalyst-Lite/blob/master/lib/Catalyst/Lite.pm</a><br>>><br>>> Estou investindo meu tempo livre aos poucos pra incluir mais sintaxe, o<br>
>> problema é que esse projeto não tá com uma prioridade muito alta na<br>>> minha fila porque a única utilidade pra ele é brincar de golf.<br>>><br>>> --<br>>>   Eden Cardim       Need help with your Catalyst or DBIx::Class project?<br>
>>  Code Monkey                    <a href="http://www.shadowcat.co.uk/catalyst/">http://www.shadowcat.co.uk/catalyst/</a><br>>>  Shadowcat Systems Ltd.  Want a managed development or deployment platform?<br>>> <a href="http://blog.edencardim.com/">http://blog.edencardim.com/</a>            <a href="http://www.shadowcat.co.uk/servers/">http://www.shadowcat.co.uk/servers/</a><br>
>> <a href="http://twitter.com/#!/edenc">http://twitter.com/#!/edenc</a><br>>> =begin disclaimer<br>>>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/">http://sao-paulo.pm.org/</a><br>>>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
>>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>>> =end disclaimer<br>>><br>> =begin disclaimer<br>>    Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/">http://sao-paulo.pm.org/</a><br>
>  SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>>  L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
> =end disclaimer<br></div>