<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Cauan Cabral &#187; Projetos</title> <atom:link href="http://cauancabral.net/category/projetos/feed/" rel="self" type="application/rss+xml" /><link>http://cauancabral.net</link> <description>Geek, nerd e apaixonado por tecnologia</description> <lastBuildDate>Sat, 24 Sep 2011 22:13:29 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Mantendo uma base de código organizada e documentada</title><link>http://cauancabral.net/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/</link> <comments>http://cauancabral.net/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/#comments</comments> <pubDate>Sun, 09 Jan 2011 16:17:43 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[Programação]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[ambiente de trabalho]]></category> <category><![CDATA[desenvolvimento]]></category> <category><![CDATA[dicas]]></category> <category><![CDATA[ferramentas]]></category> <category><![CDATA[Radig]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=257</guid> <description><![CDATA[Uma problemática comum de quem desenvolve sistemas é como manter a documentação em dia, se que isso comprometa os prazos de desenvolvimento. Digamos que isso é um problema de otimização: um código bem documentado facilita e muito a sua manutenção; &#8230; <a
href="http://cauancabral.net/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Uma problemática comum de quem desenvolve sistemas é como manter a documentação em dia, se que isso comprometa os prazos de desenvolvimento.</p><p>Digamos que isso é um problema de otimização:</p><ol><li>um código bem documentado facilita e muito a sua manutenção;</li><li>documentar código leva tempo;</li><li>tempo é um recurso escasso em desenvolvimento de software;</li></ol><p>Olha o problema&#8230; sem tempo, não há documentação e sem documentação você precisará de mais tempo para dar manutenção &#8211; oras, mas você já <strong>não tinha tempo</strong> para documentar, como vai ter <strong>mais tempo</strong> agora para dar manutenção?</p><p>Tentando equacionar esse problema surgiram várias ferramentas que visam facilitar todas as atividades relacionadas ao desenvolvimento.</p><p>Como a maior parte do meu tempo dedico ao PHP e CakePHP, tomarei estes como base para as ferramentas, porém várias delas podem ser utilizadas com outras linguagens/frameworks sem grandes problemas ou então possuem similares em outras linguagens.</p><h3>Padrão de código</h3><p>A primeira etapa, e talvez a mais importante, seja definir e disponibilizar um conjunto de regras explicando como o código foi escrito.</p><p>Este padrão envolve nome de classes, atributos, métodos, comentários, tabelas e colunas do banco de dados, organização de diretórios dentre outras coisas. Até coisas simples como a indentação deve ser padronizada.</p><p>Veja alguns guias de codificação para ter um exemplo do que quero dizer:</p><ul><li><a
title="Coding Standards do WordPress" href="http://codex.wordpress.org/WordPress_Coding_Standards" onclick="pageTracker._trackPageview('/outgoing/codex.wordpress.org/WordPress_Coding_Standards?referer=');">WordPress</a></li><li><a
title="Princípios do CakePHP" href="http://book.cakephp.org/view/892/Basic-Principles-of-CakePHP" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/view/892/Basic-Principles-of-CakePHP?referer=');">CakePHP</a></li><li><a
title="Joomla! Coding style and standards" href="http://docs.joomla.org/Coding_style_and_standards" onclick="pageTracker._trackPageview('/outgoing/docs.joomla.org/Coding_style_and_standards?referer=');">Joomla!</a></li></ul><h3>Versionamento de código</h3><p>Um dos recursos mais importantes durante o desenvolvimento é a capacidade de se desfazer determinada alteração e manter um registro de todas as alterações feitas durante o desenvolvimento.</p><p>Atualmente, minha ferramenta favorita para versionamento é o <a
title="Git SCM" href="http://git-scm.com/" onclick="pageTracker._trackPageview('/outgoing/git-scm.com/?referer=');">Git</a> um sistema distribuído de controle de versão. Porém existem vários outros que podem agradar, como o centralizador <a
title="Home of Subversion project" href="http://subversion.apache.org/" onclick="pageTracker._trackPageview('/outgoing/subversion.apache.org/?referer=');">SVN</a> e os também distribuídos <a
title="Hg/Mercurial SCM" href="http://mercurial.selenic.com/" onclick="pageTracker._trackPageview('/outgoing/mercurial.selenic.com/?referer=');">Mercurial</a> e <a
title="página oficial do Bazaar" href="http://bazaar.canonical.com/en/" onclick="pageTracker._trackPageview('/outgoing/bazaar.canonical.com/en/?referer=');">Bazaar</a>.</p><p>É muito fácil trabalhar com qualquer um destes sistemas e após conhecer as facilidades que o versionamento de código lhe proporcionam, você terá dificuldade em trabalhar com código sem controle de versão, pode apostar.</p><p>Caso você opte por um sistema distribuído, dê uma olhada neste modelo de organização para seu código: <a
title="texto em inglês" href="http://nvie.com/posts/a-successful-git-branching-model/" onclick="pageTracker._trackPageview('/outgoing/nvie.com/posts/a-successful-git-branching-model/?referer=');">A successful Git branch model</a></p><h3>Versionamento do Banco de Dados</h3><p>Por melhor que seja o projeto do seu sistema uma coisa sempre ocorrerá: mudança. E isso envolve mais do que código, muitas vezes alterações na estrutura do banco são necessárias.</p><p>Como controlar essas alterações? A resposta é &#8220;Migrations&#8221;</p><p>No CakePHP precisamos de plugins para dar essa capacidade a aplicação, há dois largamente utilizados:</p><ul><li>Projeto do <a
title="Perfil de Juan Basso no Twitter" href="http://twitter.com/jrbasso" onclick="pageTracker._trackPageview('/outgoing/twitter.com/jrbasso?referer=');">Juan Basso</a>: <a
title="Juan Basso Migrations" href="https://github.com/jrbasso/migrations" onclick="pageTracker._trackPageview('/outgoing/github.com/jrbasso/migrations?referer=');">https://github.com/jrbasso/migrations</a></li><li>Projeto do <a
title="Cake Development Corporation" href="http://cakedc.com" onclick="pageTracker._trackPageview('/outgoing/cakedc.com?referer=');">CakeDC</a>: <a
title="CakeDC Migrations" href="https://github.com/CakeDC/migrations" onclick="pageTracker._trackPageview('/outgoing/github.com/CakeDC/migrations?referer=');">https://github.com/CakeDC/migrations</a></li></ul><p>Outros frameworks fornecem suporte &#8220;nativo&#8221; ao recurso, como o <a
title="Página do framework Rails para Ruby" href="http://rubyonrails.org/" onclick="pageTracker._trackPageview('/outgoing/rubyonrails.org/?referer=');">Ruby on Rails</a> e <a
title="Página do Doctrine" href="http://www.doctrine-project.org/" onclick="pageTracker._trackPageview('/outgoing/www.doctrine-project.org/?referer=');">Doctrine </a>para PHP em geral.</p><h3>Testes unitários</h3><p>Acredito que todos os frameworks modernos fornecem suporte a criação de testes unitários em seus projetos. Os testes são uma fase importante do design do software e fundamental para documentação de qualidade.</p><p>O CakePHP até sua versão 1.3 utiliza o framework de testes <a
title="SimpleTest: Teste Unitários para PHP" href="http://www.simpletest.org/" onclick="pageTracker._trackPageview('/outgoing/www.simpletest.org/?referer=');">SimpleTest</a>, porém passará a utilizar o <a
title="Repositório do PHPUnit, padrão &quot;de fato&quot; para testes em PHP" href="https://github.com/sebastianbergmann/phpunit/" onclick="pageTracker._trackPageview('/outgoing/github.com/sebastianbergmann/phpunit/?referer=');">PHPUnit</a> em sua versão 2.0 (atualmente em desenvolvimento).</p><p>Não sabe o que são testes unitários? Bom, segue alguns links sobre o assunto:</p><ul><li><a
title="TDD" href="http://www.improveit.com.br/xp/praticas/tdd" onclick="pageTracker._trackPageview('/outgoing/www.improveit.com.br/xp/praticas/tdd?referer=');">Desenvolvimento Orientado a Testes</a></li><li><a
title="Verbete a respeito de testes" href="http://pt.wikipedia.org/wiki/Teste_de_unidade" onclick="pageTracker._trackPageview('/outgoing/pt.wikipedia.org/wiki/Teste_de_unidade?referer=');">Wikipedia: Testes de Unidade/Unitário</a></li><li><a
title="Outro post sobre o assunto" href="http://www.profissionaisti.com.br/2009/11/tdd-desenvolvimento-orientado-a-testes/" onclick="pageTracker._trackPageview('/outgoing/www.profissionaisti.com.br/2009/11/tdd-desenvolvimento-orientado-a-testes/?referer=');">TDD: Desenvolvimento Orientado a Testes</a></li><li><a
title="Cookbook para versão 1.3" href="http://book.cakephp.org/pt/view/1196/Testes" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/1196/Testes?referer=');">Criando Testes com CakePHP</a></li><li><a
title="apresentação de João José Pedrini" href="http://www.slideshare.net/joaojose/testes-automatizados-no-cakephp" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/joaojose/testes-automatizados-no-cakephp?referer=');">Testes Automatizados no CakePHP</a></li><li><a
title="ótimo texto do Gustavo Dutra a respeito" href="http://gustavodutra.com/post/412/como-fazer-testes-unitarios-em-models-no-cakephp/" onclick="pageTracker._trackPageview('/outgoing/gustavodutra.com/post/412/como-fazer-testes-unitarios-em-models-no-cakephp/?referer=');">Como fazer testes unitários em Models no CakePHP</a></li></ul><p>Testes são como controle de versão&#8230; depois que você usa, não vive sem.</p><h3>Documentação</h3><p>Como comentado anteriormente, um passo importante para documentação são os testes unitários. Porém não devem ser o único.</p><p>Uma forma muito eficiente de documentação são os blocos de comentários, no PHP, o padrão PHPDoc é o mais utilizado.</p><p>Existem várias ferramentas que varrem o código de sua aplicação e identificam esses blocos para gerar a documentação, alguns deles são:</p><ul><li><a
title="casa do phpDocumentor" href="http://phpdoc.org" onclick="pageTracker._trackPageview('/outgoing/phpdoc.org?referer=');">phpDocumentor</a>: ferramenta mais utilizada no mundo PHP</li><li><a
title="explicação em português sobre PHPDoc" href="http://www.worldlingo.com/ma/enwiki/pt/PHPDoc" onclick="pageTracker._trackPageview('/outgoing/www.worldlingo.com/ma/enwiki/pt/PHPDoc?referer=');">Mais informação em português sobre PHPDoc</a></li><li><a
title="post ensinando a utilizção do phpDocumentor" href="http://luishenrique.org/blog/posts/php-doc-instalacao-e-uso" onclick="pageTracker._trackPageview('/outgoing/luishenrique.org/blog/posts/php-doc-instalacao-e-uso?referer=');">Documente seu código PHP usando PHPDoc</a></li><li><a
title="Api Generator - plugin para geração de API, baseado no PHPDoc" href="http://cakephp.lighthouseapp.com/projects/42879/home" onclick="pageTracker._trackPageview('/outgoing/cakephp.lighthouseapp.com/projects/42879/home?referer=');">Gerador de Api para CakePHP</a></li></ul><p>Quando sua documentação é concisa e completa, entender o funcionamento da aplicação passa a ser fácil, independente de quando ela foi criada. Quando isso é aliado aos testes unitários, fazer manutenção passa a ser uma atividade mais fácil e gratificante.</p><p>Por fim, é preciso saber o que/quando está errado e como/quando foi corrigido, ajudando na manutenção do histórico e acompanhamento da evolução do software. Para isso temos o tópico a seguir.</p><h3>Controle de Bugs/Atividades</h3><p>Como controlar o que, quando e por quem uma determinada atividade deve ser feita? E como verificar por quem e quando determinada funcionalidade foi implementada? O controle de versão pode fornecer parte destas respostas, mas ficar analisando logs normalmente não é muito comodo. A melhor maneira é utilizar uma ferramenta de controle de bugs/atividades.</p><p>Utilizo no meu dia-a-dia o excelente <a
title="Redmine - Sistema de controle de atividades" href="http://redmine.org" onclick="pageTracker._trackPageview('/outgoing/redmine.org?referer=');">Redmine, </a>um sistema simples porém poderoso para controle de tarefas. Suporta diferentes projetos, sub-projetos, integra-se com vários sistemas de versionamento de código, permite criação de wikis para documentação além de vários outros recursos.</p><p>Além deste, existem vários outros sistemas como o <a
title="página do Bugzilla" href="http://www.bugzilla.org/" onclick="pageTracker._trackPageview('/outgoing/www.bugzilla.org/?referer=');">Bugzilla</a>, <a
title="Trac" href="http://trac.edgewall.org/" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/?referer=');">Trac</a>, <a
title="Mantis - feito em PHP" href="http://www.mantisbt.org/" onclick="pageTracker._trackPageview('/outgoing/www.mantisbt.org/?referer=');">Mantis</a> e <a
title="PHProjekt" href="http://phprojekt.com" onclick="pageTracker._trackPageview('/outgoing/phprojekt.com?referer=');">PHProjekt</a>.</p><h3>Conclusão?</h3><p>Não, não tem conclusão. O texto visa apenas apresentar algumas atividades que juntas ao planejamento e desenvolvimento de software tendem a tornar a vida dos desenvolvedores melhor, seja diminuindo o stress causado por alterações dos requisitos ou manutenção de código mal projetado/escrito, seja tornando o desenvolvimento mais ágil, permitindo mais horas de lazer e descanso e menos fios de cabelo branco.</p><p>A intenção nunca foi cobrir todos os tópicos a exaustão, mas sim apresentar alguns exemplos e motivos para adoção de tais ferramentas/ideias. Caso tenha surgido dúvida a respeito de qualquer item, deixe um comentário =]</p><p>Sentiu a falta de algum item? Utiliza algo de forma diferente? Deixe um comentário também.</p><p>&#8212;&#8212;&#8212;&#8212;-<br
/> Postado originalmente no <a
title="blog mantido pela equipe da Radig TI" href="http://www.radig.com.br/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/?referer=');">blog da Radig</a></p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2010/01/26/cakephp-1-3-quase-assad/" rel="bookmark" class="crp_title">CakePHP 1.3 quase assado</a></li><li><a
href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a
href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li><li><a
href="http://cauancabral.net/2010/02/08/dica-rapida-otimizando-codigo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; Otimizando código</a></li><li><a
href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</title><link>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/</link> <comments>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/#comments</comments> <pubDate>Tue, 10 Aug 2010 02:12:01 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[comitiva]]></category> <category><![CDATA[phpms]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=239</guid> <description><![CDATA[No último post falei um pouco sobre o sistema de permissões que implantamos no Comitiva. Acontece que após a adição de uma nova funcionalidade (submissão de trabalhos) aquele sistema de permissão começou a ficar ineficiente, e apesar de eu ter &#8230; <a
href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>No <a
href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" title="[Comitiva] Como utilizar controle de permissão no sistema">último post</a> falei um pouco sobre o sistema de permissões que implantamos no Comitiva.</p><p>Acontece que após a adição de uma nova funcionalidade (submissão de trabalhos) aquele sistema de permissão começou a ficar ineficiente, e apesar de <a
href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/comment-page-1/#comment-298">eu ter dito</a> nos comentários que o ideal era implementar o <a
href="http://api.cakephp.org/class/acl-component" onclick="pageTracker._trackPageview('/outgoing/api.cakephp.org/class/acl-component?referer=');">Acl</a> para este controle no sistema, acabei por implementar a <a
href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/comment-page-1/#comment-297">solução sugerida</a> pelo grande <a
href="http://twitter.com/begnini" onclick="pageTracker._trackPageview('/outgoing/twitter.com/begnini?referer=');">Humberto</a> &#8211; que, tomando como ponto inicial o que tínhamos, era o jeito mais simples de solucionar os problemas.</p><p><strong>Então o que mudou?</strong></p><ul><li>Os usuários não possuem mais um &#8220;tipo&#8221;, agora eles pertencem a &#8220;grupos&#8221; (um ou mais);</li><li>A verificação de permissão é feita na classe AppController, de forma genérica, o que elimina a necessidade de reescrever a função de autorização a cada controlador;</li><li>Os grupos que um usuário pertence ficam definidos em um campo &#8220;groups&#8221;, do tipo varchar e são guardados codificados no formato <em>json</em></li><li>Defini um método protegido no AppController para verificar se o usuário logado pertence a um grupo qualquer, facilitando essa operação quando necessário. (o método chama-se <strong><a
href="http://github.com/CauanCabral/Comitiva/blob/master/app_controller.php#L246" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva/blob/master/app_controller.php_L246?referer=');">AppController::__checkGroup($string)</a></strong> )</li></ul><p><strong>O que não mudou?</strong></p><ul><li>As ações continuam tendo como prefixo o grupo que pode acessa-la, sendo assim, a ação <em>ProposalsController::participant_add()</em> está disponível a todos os usuários que pertençam ao grupo &#8220;participant&#8221;</li><li>Todos os usuários registrados pertencem inicialmente ao grupo &#8216;participant&#8217;, porém podem vir a pertencer a outros grupos posteriormente (em adição ao grupo &#8216;participant&#8217;)</li><li>Continua sendo muito fácil saber se o  usuário logado pode ou não efetuar uma ação, basta usar o método supracitado <em>__checkGroup.</em></li></ul><p>Exemplo de como verificar se o usuário é administrador</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>__checkGroup<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O usuário logado é administrador'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O usuário logado não é administrador'</span><span style="color: #339933;">;</span></pre></div></div><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema</a></li><li><a
href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a
href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li><li><a
href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a
href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>[Comitiva] Como utilizar controle de permissão no sistema</title><link>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/</link> <comments>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/#comments</comments> <pubDate>Sun, 01 Aug 2010 16:14:10 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[comitiva]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=235</guid> <description><![CDATA[Como escrevi anteriormente, o PHPMS mantém um sistema para gerenciar eventos &#8211; desde a divulgação de informações, cadastro de eventos, inscrições, pagamentos, envio de mensagens para inscritos e check-in. Mas o objetivo deste post não é dizer o que já &#8230; <a
href="http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Como <a
title="Comitiva - Cuide bem do seu evento" href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/">escrevi anteriormente</a>, o PHPMS mantém um sistema para gerenciar eventos &#8211; desde a divulgação de informações, cadastro de eventos, inscrições, pagamentos, envio de mensagens para inscritos e check-in.</p><p>Mas o objetivo deste post não é dizer o que já foi dito, quero iniciar uma série de posts onde vou explicar o funcionamento de alguns recursos dentro do <em><a
href="http://github.com/CauanCabral/Comitiva" title="Pegue uma cópia do Comitiva e contribua" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Comitiva</a></em>, convidando todos os desenvolvedores a opinar sobre implementação e contribuir com o projeto.</p><p>O assunto de hoje é controle de acesso, então vamos ao que interessa.</p><p><strong>Como funciona o controle de acesso no Comitiva?</strong></p><p>Utilizamos o componente <em>Auth</em> do CakePHP para cuidar da autenticação (efetuar login, verificar se o usuário está logado e efetuar logout).<br
/> Mas precisávamos ir um pouco além da configuração básica, definindo diferentes opções para diferentes tipos de usuários. Para isso, consideramos duas opções iniciais: usar também o <strong>Acl</strong> <em>Behavior</em> ou ficar apenas com o AuthComponent e criar diferentes <em>actions</em> para diferentes tipos de usuários.</p><p>Como possuímos apenas dois tipos de usuários (<em>admin</em> e <em>participant</em>) decidimos pela que seria mais simples inicialmente &#8211; mesmo sabendo que a manutenção no futuro poderia ser mais complicada &#8211; que foi criar diferentes <em>actions</em> para os tipos de usuários.</p><p>Para criar essa funcionalidade, definimos inicialmente um prefixo para cada tipo de usuário (prefixos &#8216;<em>admin</em>&#8216; e &#8216;<em>participant</em>&#8216;). Em seguida configuramos o <strong>AuthComponent</strong> desta maneira (código extraído do <em>AppController</em>):</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Configure AuthComponent</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Auth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">authorize</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'controller'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> Configure<span style="color: #339933;">::</span><span style="color: #004000;">read</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Routing.prefixes'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// all non-prefixed actions are allowed</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Auth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">allow</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'*'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Ou seja, toda ação que não tiver prefixo ou o prefixo não estiver definido nas configurações de rota serão públicas (assim é possível, por exemplo, deixar uma página com instruções acessível à qualquer usuário).</p><p>Mas como fica essa verificação de tipos no controlador? Como definimos o método de autorização do Auth como &#8216;controller&#8217;, precisamos definir em todos os controladores o método <strong>isAuthorized</strong> que deve retornar <em>true</em> quando o acesso é aprovado e <em>false</em> caso contrário.<br
/> Seguindo a ideia de que cada tipo de usuário possui um prefixo próprio nas ações, nosso método <em>isAuthorized</em> fica desta forma:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">userLogged</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">TRUE</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'prefix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> User<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span></pre></div></div><p>Onde o atributo <em>$this->userLogged</em> pertence a classe <em>AppController</em> e sua função é reduzir chamada ao método <em>$Auth->login()</em> e na segunda parte da condição temos uma comparação entre o prefixo da url acessada e o tipo do usuário &#8211; se ambos forem iguais, então o acesso está liberado.</p><p>Por fim, devemos criar nossas ações para cada tipo de usuário, onde o prefixo será usado para validar o acesso à aquela ação, veja o exemplo da ação &#8220;listar pagamentos&#8221;:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// ação exclusiva para admin - tem acesso aos pagamentos de todos os outros usuários</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> admin_index<span style="color: #009900;">&#40;</span><span style="color: #000088;">$event_id</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Subscription</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">recursive</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$event_id</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'conditions'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
				<span style="color: #0000ff;">'event_id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$event_id</span>
			<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">compact</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'event_id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'subscriptions'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// ação exclusiva para participant - tem acesso somente aos próprios pagamentos</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> participant_index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Subscription</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">recursive</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'subscriptions'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginate</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user_id'</span> <span style="color: #339933;">=&gt;</span> User<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Como podem ver, isso permite a criação de diferentes regras de negócio para os diferentes tipos de usuários e embora aumente a quantidade de código &#8220;redundante&#8221; por repetir alguns procedimentos para todos os tipos de usuários, a leitura e entendimento do código é facilitada &#8211; basta ver o prefixo do método (ação) para saber quem terá acesso a ele.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2010/04/05/dica-rapida-cakephp-1-3-link-com-prefixo/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP 1.3, link com prefixo</a></li><li><a
href="http://cauancabral.net/2010/08/09/comitiva-como-utilizar-controle-de-permissao-no-sistema-quase-tudo-mudou/" rel="bookmark" class="crp_title">[Comitiva] Como utilizar controle de permissão no sistema &#8211; quase tudo mudou</a></li><li><a
href="http://cauancabral.net/2010/01/28/dica-rapida-cakephp-personalizando-as-paginas-de-erros/" rel="bookmark" class="crp_title">Dica Rápida &#8211; CakePHP &#8211; Personalizando as páginas de erros</a></li><li><a
href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/" rel="bookmark" class="crp_title">CakePHP &#8211; Dúvidas Comuns #2</a></li><li><a
href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/08/01/comitiva-como-utilizar-controle-de-permissao-no-sistema/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Delivery Fácil &#8211; Pedir comida na internet é muito fácil</title><link>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/</link> <comments>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/#comments</comments> <pubDate>Fri, 25 Jun 2010 23:30:25 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[noticias]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[deliveryfacil.net]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=229</guid> <description><![CDATA[Há mais ou menos três semanas foi lançado um novo serviço para o pessoal de Campo Grande/MS, o Delivery Fácil. Através dele você pode conferir o cardápio de diversos estabelecimentos em Campo Grande que fazem entrega de comida e pedir &#8230; <a
href="http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p
style="text-align: left;">Há mais ou menos três semanas foi lançado um novo serviço para o pessoal de Campo Grande/MS, o <a
title="Delivery Fácil - Pedir comida na internet é muito fácil" href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');">Delivery Fácil</a>. Através dele você pode conferir o cardápio de diversos estabelecimentos em Campo Grande que fazem entrega de comida e pedir seu prato pelo próprio site &#8211; simples assim.<br
/> Você não se preocupa com telefone ocupado, não precisa ficar perguntando o que tem no cardápio, quanto custa cada prato nem se atendem em sua região.<br
/> Além disso, todo pedido realizado pelo sistema te da pontos para trocar por prêmios.</p><p
style="text-align: left;">No lado do restaurante, o serviço cria mais um canal de venda sem a necessidade de se investir um grande volume de dinheiro para criar um e-commerce.</p><p
style="text-align: left;">O serviço é resultado de uma parceria entre a <a
title="Radig - Soluções em TI" href="http://radig.com.br" onclick="pageTracker._trackPageview('/outgoing/radig.com.br?referer=');">Radig (onde tenho prazer em trabalhar)</a> e dois grandes amigos, Samuel e Habib.</p><p
style="text-align: left;"><a
title="Delivery Fácil - Pedir comida na internet é muito fácil" href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');"><img
class="aligncenter size-medium wp-image-231" title="Delivery Fácil - Pedir pela internet é muito fácil" src="http://cauancabral.net/wp-content/uploads/2010/06/banner_deliveryfacil.png" alt="Banner de divulgação do Delivery Fácil" width="600" height="417" /></a><a
href="http://deliveryfacil.net" onclick="pageTracker._trackPageview('/outgoing/deliveryfacil.net?referer=');">Faça uma visita</a>, cadastre-se e peça sua comida preferida com todo o conforto que a internet lhe oferece.</p><p
style="text-align: left;">Não deixe de seguir o Delivery Fácil no twitter para acompanhar as novidades e promoções que realizarmos: <a
title="Twitter do Delivery Fácil" href="http://twitter.com/deliveryfacil" onclick="pageTracker._trackPageview('/outgoing/twitter.com/deliveryfacil?referer=');">@deliveryfacil</a></p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2008/07/16/software-freedom-day-08/" rel="bookmark" class="crp_title">Software Freedom Day 08</a></li><li><a
href="http://cauancabral.net/2009/03/29/fisl-10-eu-vou/" rel="bookmark" class="crp_title">FISL 10 &#8211; Eu vou!</a></li><li><a
href="http://cauancabral.net/2009/01/13/25-erros-mais-graves/" rel="bookmark" class="crp_title">25 erros de programação mais graves</a></li><li><a
href="http://cauancabral.net/2008/11/02/hoje-tem-final-da-f1-vai-la-massa/" rel="bookmark" class="crp_title">Hoje tem final da F1&#8230; vai lá Massa!</a></li><li><a
href="http://cauancabral.net/2011/09/24/aplicacoes-heterogeneas-e-a-busca-por-conhecimento/" rel="bookmark" class="crp_title">Aplicações heterogêneas e a busca por conhecimento</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Comitiva &#8211; Cuide bem do seu evento</title><link>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/</link> <comments>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/#comments</comments> <pubDate>Tue, 06 Apr 2010 02:48:18 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[CakePHP-1.3]]></category> <category><![CDATA[comitiva]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=215</guid> <description><![CDATA[Na última semana o PHPMS realizou seu 3º Workshop, que mais uma vez, foi um sucesso. Como comentei no post anterior, dessa vez minha participação foi focada em um ponto: criar uma solução para gerenciar as inscrições do evento. Dessa &#8230; <a
href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Na última semana o <a
title="Grupo de Desenvolvedores PHP de MS" href="http://phpms.org" onclick="pageTracker._trackPageview('/outgoing/phpms.org?referer=');">PHPMS</a> realizou seu <a
title="3º Workshop promovido pelo PHPMS" href="http://phpms.org/workshops/19-workshops/225-3d-workshop-do-phpms-inscricoes-abertas" onclick="pageTracker._trackPageview('/outgoing/phpms.org/workshops/19-workshops/225-3d-workshop-do-phpms-inscricoes-abertas?referer=');">3º Workshop</a>, que mais uma vez, foi um sucesso.</p><p>Como comentei no post anterior, dessa vez minha participação foi focada em um ponto: criar uma solução para gerenciar as inscrições do evento.</p><p>Dessa necessidade surgiu o <a
title="Casa do Comitiva" href="http://phpms.lighthouseapp.com/projects/49894-comitiva/overview" onclick="pageTracker._trackPageview('/outgoing/phpms.lighthouseapp.com/projects/49894-comitiva/overview?referer=');">Comitiva</a>, um sistema de gerenciamento de eventos, que nasceu a pouco e já passou pela sua primeira prova de teste (o próprio workshop).</p><p>No momento ele pode ser usado para cadastrar um evento, permitir que usuários se cadastrem e se inscrevam nos eventos cadastrados, mas vários outros recursos já estão em andamento.</p><p>A parte boa é que o sistema é livre &#8211; sim, open source, é gratuito e feito em <a
title="CakePHP home page" href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a> 1.3. Estamos utilizando o <a
title="Baixe o código e contribua com ele por aqui" href="http://github.com/CauanCabral/Comitiva" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Github</a> para gerenciar o código e hoje criei uma conta no <a
title="Reporte bugs e sugira recursos aqui!" href="http://phpms.lighthouseapp.com/projects/49894-comitiva/overview" onclick="pageTracker._trackPageview('/outgoing/phpms.lighthouseapp.com/projects/49894-comitiva/overview?referer=');">LighthouseApp</a> para gerenciar as tarefas. Aliás, queria agradecer e recomendar ambos os serviços que suportam, sem custos, projetos open source. Valeu =]</p><p>Veja um demo na versão instalada para o PHPMS: <a
title="Gerenciamento de eventos do PHPMS" href="http://comitiva.phpms.org" onclick="pageTracker._trackPageview('/outgoing/comitiva.phpms.org?referer=');">http://comitiva.phpms.org</a></p><p>Bom, como uma andorinha só não faz verão, o Comitiva contou com alguns colaboradores/apoiadores que gostaria de citar e agradecer aqui:</p><p><a
title="Blog do José Agripino Duarte" href="http://agripinoduarte.radig.com.br/" onclick="pageTracker._trackPageview('/outgoing/agripinoduarte.radig.com.br/?referer=');">Zé Agripino</a>: fez boa parte do trabalho sujo, hehehe. Criar as views, traduzir textos, corrigir bugs. Ajudou em todo o sistema, é O cara;<br
/> <a
title="linkei o currículo, nerd sem blog é foda" href="http://br.linkedin.com/in/felipevargasrigo/pt" onclick="pageTracker._trackPageview('/outgoing/br.linkedin.com/in/felipevargasrigo/pt?referer=');">Felipe V. Rigo</a>: começando a trabalhar com CakePHP agora, apanhou um pouco para conseguir rodar o sistema em sua máquina, mas graças a isso e sua persistência descobrimos e corrigimos vários bugs do sistema;<br
/> <a
title="Blog do Zehzinho" href="http://www.josericardo.eti.br/" onclick="pageTracker._trackPageview('/outgoing/www.josericardo.eti.br/?referer=');">José Ricardo</a>: estava ocupado no inicio do projeto, porém após o workshop ficou animadão e já fez algumas contribuições importantes, como a configuração do Migrations para o sistema;<br
/> <a
title="Blog do Bruno Porkaria" href="http://porkaria.com.br" onclick="pageTracker._trackPageview('/outgoing/porkaria.com.br?referer=');">Bruno Porkaria</a>: também estava bem corrido e cuidando de outras coisas do workshop, mas testou bastante o sistema e teve a paciência de reportar problemas e sugestões sempre que estas apareciam.</p><p>É isso aí, espero trazer mais novidades em breve, principalmente sobre o projeto =]</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/" rel="bookmark" class="crp_title">3º Workshop do PHPMS</a></li><li><a
href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/" rel="bookmark" class="crp_title">1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</a></li><li><a
href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li><li><a
href="http://cauancabral.net/2009/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a
href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/" rel="bookmark" class="crp_title">Obrigado pelos peixes SVN</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Últimas Novidades #2</title><link>http://cauancabral.net/2009/06/13/ultimas-novidades-2/</link> <comments>http://cauancabral.net/2009/06/13/ultimas-novidades-2/#comments</comments> <pubDate>Sat, 13 Jun 2009 16:23:28 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[dell]]></category> <category><![CDATA[desrespeito]]></category> <category><![CDATA[indignação]]></category> <category><![CDATA[novidades]]></category> <category><![CDATA[phpmobile]]></category> <category><![CDATA[phpms]]></category> <category><![CDATA[Radig]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=128</guid> <description><![CDATA[Vamos lá a mais notícias que talvez vos interessem ;] O PHPMS realizará no dia 11 de Julho seu primeiro workshop: PHP Extremo. A idéia é realizar um evento voltado a profissionais que trabalham com PHP, dando uma oportunidade para &#8230; <a
href="http://cauancabral.net/2009/06/13/ultimas-novidades-2/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Vamos lá a mais notícias que talvez vos interessem ;]</p><ol><li>O PHPMS realizará no dia 11 de Julho seu primeiro workshop: PHP Extremo. A idéia é realizar um evento voltado a profissionais que trabalham com PHP, dando uma oportunidade para reciclar e expandir seus conhecimentos. Os temas ainda não foram decididos e a chamada de trabalhos deve ser iniciado até segunda feira próxima. Para mais informações, acesse: <a
title="Workshop PHP Extremo" href="http://workshop.phpms.org" onclick="pageTracker._trackPageview('/outgoing/workshop.phpms.org?referer=');">http://workshop.phpms.org</a>;</li><li>O PHP Mobile continua de vento em polpa, acompanhe as notícias sobre o projeto seguindo o twitter ( <a
href="http://twitter.com/phpmobile" onclick="pageTracker._trackPageview('/outgoing/twitter.com/phpmobile?referer=');">@phpmobile</a> ) e site: <a
title="PHP para dispositivos móveis" href="http://www.phpmobile.com.br" onclick="pageTracker._trackPageview('/outgoing/www.phpmobile.com.br?referer=');">www.phpmobile.com.br</a>;</li><li><a
title="Radig - Soluções em TI" href="http://www.radig.com.br" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br?referer=');">Minha empresa</a> está indo muito bem obrigado, pretendo disponibilizar alguns artigos e ferramentas de trabalho do dia-a-dia no site dela em breve. Se estiver precisando de algum serviço relacionado a TI, entre em <a
title="Fale com a Radig" href="http://www.radig.com.br/fale-com-a-gente/" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br/fale-com-a-gente/?referer=');">contato</a>. Será um prazer atende-lo;</li><li>Atualizei o WordPress aqui do Blog (WP 2.8), de início a área administrativa ficou bugada, acusando falta de memória, tive de atualizar o php.ini aumentando o limite de memória de 32MiB para 64MiB. Achei um absurdo o sistema usar 64MiB (acho que 40MiB já seriam suficiente, mesmo assim achei muiita coisa);</li><li>O Joomla lançou atualização do CMS, <a
title="Joomla! 1.5.11, atualização de segurança" href="http://www.joomla.org/announcements/release-news/5235-joomla-1511-security-release-now-available.html" onclick="pageTracker._trackPageview('/outgoing/www.joomla.org/announcements/release-news/5235-joomla-1511-security-release-now-available.html?referer=');">versão 1.5.11</a>, possui 3 correções de segurança que devem ser aplicadas imediatamente (se você ainda não a fez);</li><li>Ainda hoje atualizo o tema aqui do blog.</li><li>Minha idéia dos scripts para administração está em andamento, infelizmente perdi acidentalmente uma das minhas classes principais e estou tendo de reescreve-la (como já havia comentado antes). Assim que tiver o mínimo de funcionalidade divulgo aqui.</li></ol><p>Por último, meu notebook chegou (no dia 10 de Junho de 2009) exatos 30 dias após o início da produção por parte da Dell &#8211; apesar de antes de fazer a compra ver estampado no site que notebooks montados no Brasil tinham prazo de 10 dias úteis para entrega (14 dias corridos). Não bastace a grande demora na entrega, o notebook veio faltando uma das peças que pedi e paguei. Entrei imediatamente em contato com a Dell, pediram que enviasse um email para &lt;pessoa&gt;@dell.com.br para que resolvessem o problema. Mais uma vez demora, mandei o email no dia 11 de Junho, hoje, dia 13 não recebi resposta alguma. O notebook possui desempenho satisfatório mas o antedimento da Dell me decepcionou, dúvido que a Dell norte-americana trate seus clientes assim.</p><p>Enfim, se for comprar um computador, escolha um HP, Apple, Acer ou Sony, possuem qualidade igual ou melhor a da Dell e respeitam seus clientes.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2009/05/24/ultimas-novidades/" rel="bookmark" class="crp_title">Últimas novidades</a></li><li><a
href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li><li><a
href="http://cauancabral.net/2010/03/20/3%c2%ba-workshop-do-phpms/" rel="bookmark" class="crp_title">3º Workshop do PHPMS</a></li><li><a
href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</a></li><li><a
href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/" rel="bookmark" class="crp_title">1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2009/06/13/ultimas-novidades-2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Últimas novidades</title><link>http://cauancabral.net/2009/05/24/ultimas-novidades/</link> <comments>http://cauancabral.net/2009/05/24/ultimas-novidades/#comments</comments> <pubDate>Sun, 24 May 2009 16:53:19 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[noticias]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[atualização]]></category> <category><![CDATA[dell]]></category> <category><![CDATA[phpmobile]]></category> <category><![CDATA[Radig]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=126</guid> <description><![CDATA[Faz um tempinho que não posto nada, vida corrida como sempre e alguns imprevistos&#8230; Primeiro, estou sem meu velho companheiro que me acompanhou nestes quase 3 anos: um Acer Aspire 5610. Precisava de uma máquina um pouco mais rápida e &#8230; <a
href="http://cauancabral.net/2009/05/24/ultimas-novidades/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Faz um tempinho que não posto nada, vida corrida como sempre e alguns imprevistos&#8230;</p><p>Primeiro, estou sem meu velho companheiro que me acompanhou nestes quase 3 anos: um Acer Aspire 5610. Precisava de uma máquina um pouco mais rápida e quando surgiu a oportunidade de vender meu velho companheiro, tratei logo de procurar um substituto.<br
/> Escolhi um Dell Vostro 1510, C2D T8100, 4GiB de RAM, HD 250GiB 7200RPM, nVidia 8400GS e algumas outras coisinhas. O único problema é que a entrega está demorando um pouco mais do que planejei (recebi a confirmação de compra na segunda-feira 11/05 e até agora o produto está em produção). Paciência =]</p><p>Segundo: a <a
title="Radig - Soluções em TI" href="http://www.radig.com.br" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br?referer=');">Radig</a> está a todo vapor, estamos com vários projetos em andamento e as perspectivas são muito boas.</p><p>Terceiro: estou participando de um projeto do meu amigo <a
title="Bruno Porkaria - Blog pessoal" href="http://porkaria.wordpress.com" onclick="pageTracker._trackPageview('/outgoing/porkaria.wordpress.com?referer=');">Bruno Porkaria</a>, o <a
title="PHP Mobile - Ferramentas para desenvolvimento Mobile" href="http://phpmobile.com.br/" onclick="pageTracker._trackPageview('/outgoing/phpmobile.com.br/?referer=');">PHP Mobile</a> e ele também está a todo vapor. Confira a página do projeto para entender mais <a
title="PHP Mobile - Veja mais informações aqui" href="http://www.phpmobile.com.br/sobre/" onclick="pageTracker._trackPageview('/outgoing/www.phpmobile.com.br/sobre/?referer=');">sobre</a>.</p><p>Por último, tive a idéia de condensar todas as pequenas classses e scripts que utilizo na manutenção de páginas e seus hosts em uma única interface, porém descobri que esqueci de fazer backup de algumas delas, então terei de reescrever boa parte. Em breve falo mais a respeito, a idéia é incluir métodos para migração de uma página de um provedor para outro, sem precisar de acesso SSH (somente PHP e FTP) e de forma automática, corrigir nomes de arquivos enviados pelo usuário (que possuem acentuação ou espaços), fazer backup de diretórios e recuperar estes backups. Enfim, as idéias são muitas, falta colocar tudo em prática.</p><p>Pretendo também alterar o layout do blog, não estou satisfeito com a formatação do conteúdo, acho que a leitura dos textos está sendo prejudicada pela fonte e espaçamentos.</p><p>Em breve dou mais detalhes sobre tudo que citei.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2009/06/13/ultimas-novidades-2/" rel="bookmark" class="crp_title">Últimas Novidades #2</a></li><li><a
href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a
href="http://cauancabral.net/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li><li><a
href="http://cauancabral.net/2008/01/06/sem-assunto-parte-3/" rel="bookmark" class="crp_title">Sem assunto &#8211; parte 3</a></li><li><a
href="http://cauancabral.net/2009/07/11/1%c2%ba-workshop-phpms-php-extremo-sucesso/" rel="bookmark" class="crp_title">1º Workshop PHPMS &#8211; PHP Extremo, SUCESSO</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2009/05/24/ultimas-novidades/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Projetos &#8211; começando</title><link>http://cauancabral.net/2008/07/15/projetos-comecando/</link> <comments>http://cauancabral.net/2008/07/15/projetos-comecando/#comments</comments> <pubDate>Tue, 15 Jul 2008 18:21:33 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[Projetos]]></category> <category><![CDATA[gerência]]></category> <category><![CDATA[planejamento]]></category> <category><![CDATA[riscos]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=38</guid> <description><![CDATA[Gerenciar projetos não é uma tarefa fácil, em qualquer área é assim, e não poderia ser diferente no desenvolvimento de softwares. Com este post, iniciarei uma nova série sobre o tema. Minha intenção é aprofundar os meus conhecimentos no assunto, &#8230; <a
href="http://cauancabral.net/2008/07/15/projetos-comecando/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Gerenciar projetos não é uma tarefa fácil, em qualquer área é assim, e não poderia ser diferente no desenvolvimento de softwares.</p><p>Com este post, iniciarei uma nova série sobre o tema. Minha intenção é aprofundar os meus conhecimentos no assunto, enquanto ajudo outros, que como eu, estão começando sua carreira nesta área.</p><p>Como &#8220;aperitivo&#8221;, indico a leitura do texto: <a
title="Página do artigo no iMasters" href="http://imasters.uol.com.br/artigo/9036" onclick="pageTracker._trackPageview('/outgoing/imasters.uol.com.br/artigo/9036?referer=');">EXPECTATIVA: o segredo de sucesso em projetos</a>.</p><p>Em breve darei minhas primeiras palavras.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/" rel="bookmark" class="crp_title">Joomla! 1.6 &#8211; O que está para chegar&#8230;</a></li><li><a
href="http://cauancabral.net/2008/06/25/ajude-os-projetos-que-te-ajudam/" rel="bookmark" class="crp_title">Ajude os projetos que te ajudam</a></li><li><a
href="http://cauancabral.net/2010/04/05/comitiva-cuide-bem-do-seu-evento/" rel="bookmark" class="crp_title">Comitiva &#8211; Cuide bem do seu evento</a></li><li><a
href="http://cauancabral.net/2008/11/19/gmail-estreia-novos-temas-para-sua-interface/" rel="bookmark" class="crp_title">GMail estréia novos temas para sua interface</a></li><li><a
href="http://cauancabral.net/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2008/07/15/projetos-comecando/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
