<?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; Desenvolvimento Web</title> <atom:link href="http://cauancabral.net/category/desenvolvimento-web/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>Aplicações heterogêneas e a busca por conhecimento</title><link>http://cauancabral.net/2011/09/24/aplicacoes-heterogeneas-e-a-busca-por-conhecimento/</link> <comments>http://cauancabral.net/2011/09/24/aplicacoes-heterogeneas-e-a-busca-por-conhecimento/#comments</comments> <pubDate>Sat, 24 Sep 2011 22:13:29 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[eventos]]></category> <category><![CDATA[braziljs]]></category> <category><![CDATA[capacitação]]></category> <category><![CDATA[comunidade]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=264</guid> <description><![CDATA[Estive muito tempo sem escrever neste espaço por dois motivos: falta de tempo hábil e de um tema &#8220;supimpa&#8221;, que não fosse o mesmo abordado milhões de vezes por milhões de outros blogs. Felizmente a falta de tempo ainda é &#8230; <a
href="http://cauancabral.net/2011/09/24/aplicacoes-heterogeneas-e-a-busca-por-conhecimento/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Estive muito tempo sem escrever neste espaço por dois motivos: falta de tempo hábil e de um tema &#8220;supimpa&#8221;, que não fosse o mesmo abordado milhões de vezes por milhões de outros blogs.</p><p>Felizmente a falta de tempo ainda é um problema, graças aos trabalhos na <a
title="Radig Soluções em TI, empresa que trabalho" href="http://radig.com.br" onclick="pageTracker._trackPageview('/outgoing/radig.com.br?referer=');">Radig</a>. Digo felizmente por que é muito bom trabalhar no que você gosta, <a
title="grande parceiro Habib" href="http://twitter.com/#!/habibasseiss" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/habibasseiss?referer=');">com</a> <a
title="José Agripino, o Grande" href="http://twitter.com/#!/agripinoduarte" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/agripinoduarte?referer=');">grandes</a> <a
title="o Japa" href="http://twitter.com/#!/rafa_sake/" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/rafa_sake/?referer=');">amigos</a> <a
title="Morto, o caçula da turma" href="http://twitter.com/#!/marcelgrassi" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/marcelgrassi?referer=');">e</a> possibilidades infinitas. Mas agora os assuntos estão fervilhando na minha cabeça.</p><p>Hoje quero falar um pouco de <strong>aplicações heterogêneas</strong>. Não sei nem se o termo é utilizado, busquei  no <a
title="ó grande sábio" href="http://google.com.br" onclick="pageTracker._trackPageview('/outgoing/google.com.br?referer=');">oráculo</a> e não encontrei referências, tentei por sistemas heterogêneos mas o que vem são informações sobre química e soluções heterogêneas.</p><p>Mas se o termo não existe, o que quero dizer com aplicações heterogêneas? São aplicações que mesclam tecnologias diferentes com um mesmo propósito, por exemplo: uso de dois modelos de SGDB&#8217;s ou duas linguagens de programação <em>server-side</em>, mas que compartilham informações de modo altamente acoplado.</p><p>Venho trabalhando em alguns produtos (um deles é o <a
title="Sistema para gesstão para escritórios de advocacia da Radig" href="http://www.radig.com.br/produtos/juris/" onclick="pageTracker._trackPageview('/outgoing/www.radig.com.br/produtos/juris/?referer=');">Juris</a>, conhece?) e um dos recursos que implementamos são notificações em tempo real sobre ações dentro do sistema para os usuários de interesse.</p><p>No projeto do sistema de notificações nós tínhamos os requisitos:</p><ul><li>Baixo tempo de resposta entre a ação e o disparo de notificação</li><li>Escalabilidade &#8211; suportar, sem sobrecarregar o servidor, mais de 1000 conexões simultâneas</li><li>Fácil manutenção</li><li>Independência do sistema &#8211; acoplamento baixo em código, mas alto em relação aos dados</li></ul><p>Nossos principais sistemas foram desenvolvidos em PHP, portanto parecia natural escolher a triad PHP+APACHE+(MySQL/PostgreSQL) para o sistema de notificação. Parecia.</p><p>Em abril deste ano tive a felicidade de participar do evento <a
title="Página do evento, deve ser atualizada a cada ano" href="http://braziljs.com.br/#!/home" onclick="pageTracker._trackPageview('/outgoing/braziljs.com.br/_/home?referer=');">BrazilJS</a>, onde pude ver feras como <a
title="web opener na Opera Software" href="http://twitter.com/#!/miketaylr" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/miketaylr?referer=');">Mike Taylor</a>, <a
title="perfil do Richard Worth, desenvolvedor do jQuery UI" href="http://twitter.com/#!/rworth" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/rworth?referer=');">Richard Worth</a> e seu irmão* <a
title="desenvolvedor do Yahoo!" href="http://twitter.com/#!/gchapiewski" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/gchapiewski?referer=');">Guilherme Chapiewski</a>, o lendário <a
title="O Dinossouro das CSS" href="http://maujor.com" onclick="pageTracker._trackPageview('/outgoing/maujor.com?referer=');">Maujor</a>, os gaúchos <a
title="twitter do Jaydson" href="http://twitter.com/#!/jaydson" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/jaydson?referer=');">Jaydson</a> e <a
title="twitter do Felipe Nascimento" href="http://twitter.com/#!/felipenmoura" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/felipenmoura?referer=');">Felipe Nascimento</a> que organizaram um evento do outro lado do país, o <a
title="você quis dizer: Dr Ricardo Coelho" href="http://twitter.com/#!/ramcoelho" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/ramcoelho?referer=');">Ricardo Coelho</a> &#8211; segundo maranhense mais conhecido e influente do país (perde só para nosso querido² Sarney) além do velho conhecido <a
title="Página pessoal do Bruno PorKaria" href="http://porkaria.com.br" onclick="pageTracker._trackPageview('/outgoing/porkaria.com.br?referer=');">PorKaria</a>.</p><p>Duas coisas realmente me chamaram atenção durante o evento: o extensivo uso que tem sido feito da linguagem JavaScript para rodar aplicações no servidor, através do Node.js, e a possibilidade de criação de aplicações com resposta em tempo real com baixo custo computacional através de bibliotecas como <a
title="Biblioteca que provê funcionalidades do websocket mesmo em navegadores incompatíveis" href="http://socket.io" onclick="pageTracker._trackPageview('/outgoing/socket.io?referer=');">Socket.io</a> e <a
title="An open source query based message hub" href="http://pubsub.io" onclick="pageTracker._trackPageview('/outgoing/pubsub.io?referer=');">PubSub.io</a> ou mesmo protocolos adicionados aos browsers recentes como o websocket.</p><p>Estes dois ingredientes (JavaScript no servidor + Websocket) atenderiam perfeitamente os requisitos de minhas aplicações. E a escolha foi feita. Desenvolvi, com poucas linhas de código, toda a aplicação, porém uma parte ficou nebulosa: como compartilhar as notificações geradas em um sistema com outra aplicação? E como saber se a pessoa que está conectada ao servidor de notificações é realmente o usuário autorizado a acessar o sistema? A resposta que encontrei foi compartilhar as sessões.</p><p>Como fiz isso? Armazenando a sessão do sistema principal em um banco de dados (escolhi para isso o <a
title="banco de dados NoSQL" href="http://mongodb.org" onclick="pageTracker._trackPageview('/outgoing/mongodb.org?referer=');">MongoDB</a>, pela velocidade e escalabilidade), enquanto no servidor de notificação só acesso as sessões disponíveis no banco e verifico se o usuário que tenta acessar notificações está realmente autenticado.</p><p>Para implementar isso foi preciso um pouco de pesquisa e adaptação tanto no servidor de notificações quanto no sistema principal, mas os detalhes deixarei para uma próxima oportunidade.</p><p>Quero deixar registrado aqui meu tardio parabéns a organização e aos palestrantes do BrazilJS, o evento foi sensacional.<br
/> E que o texto sirva de inspiração para aqueles que acreditam na &#8220;bala de prata&#8221; (ela não existe).<br
/> Não deixe de participar de eventos, comunidades ou fóruns. Nunca pare de estudar, algo que era uma boa solução à 1 ano hoje pode ser uma péssima alternativa perto das demais.</p><p>* Piada interna do evento.<br
/> ² &#8211; [/sarcasm]</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/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/" rel="bookmark" class="crp_title">Delivery Fácil &#8211; Pedir comida na internet é muito fácil</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/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/2011/01/09/mantendo-uma-base-de-codigo-organizada-e-documentada/" rel="bookmark" class="crp_title">Mantendo uma base de código organizada e documentada</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2011/09/24/aplicacoes-heterogeneas-e-a-busca-por-conhecimento/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <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>Dica Rápida &#8211; Evitando problemas com uso de jQuery e imagens</title><link>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/</link> <comments>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/#comments</comments> <pubDate>Fri, 13 Aug 2010 20:45:09 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[dica]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=243</guid> <description><![CDATA[Algumas vezes precisamos recuperar, em tempo de execução, o tamanho de uma determinada imagem para aplica-la corretamente ao layout da página, porém essa verificação pode acontecer antes da hora, o que geraria erros inesperados. Todo mundo que trabalha com a &#8230; <a
href="http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Algumas vezes precisamos recuperar, em tempo de execução, o tamanho de uma determinada imagem para aplica-la corretamente ao layout da página, porém essa verificação pode acontecer antes da hora, o que geraria erros inesperados.</p><p>Todo mundo que trabalha com a biblioteca jQuery conhece a chamada:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">//seu código javascript</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>Ela diz ao browser para executar o bloco interno somente quando o <strong>DOM</strong> do seu documento tiver sido totalmente carregado, isso permite que ele faça o <em>parser</em> de seu documento utilizando os seletores sem esquecer de nenhum item. Porém quando carregamos estruturas externas ao DOM, como uma imagem, não temos garantia de que o código dentro do bloco anterior será executado quando a imagem já tiver sido carregada.<br
/> Dessa maneira, caso você precise de informações sobre a imagem, seu script falhará.</p><p>Para contornar isso, podemos utilizar uma outra chamada, que é disparada somente quando <strong>TODO</strong> o documento tiver sido carregado:</p><div
class="wp_syntax"><div
class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">//seu código javascript</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div><p>As duas diferenças, além do comportamento são:</p><ol><li>Saí o &#8216;seletor&#8217; <strong>document</strong> para a entrada do <strong>window</strong>;</li><li>Saí o evento <strong>ready</strong> para a entrada do <strong>load</strong>;</li></ol><p>A primeira alteração ocorre por conta da segunda, já que o evento <em>load</em> não pode ser associado a um <em>document</em>.</p><p>Com essa pequena alteração você garante que seu script rodará apenas quando todo o documento tiver sido carregado &#8211; o que é essencial em algumas situações, como a citada anteriormente, porém dispensável na maioria das vezes.</p><p>Fonte: <a
title="documentação do jQuery" href="http://api.jquery.com/load-event/" onclick="pageTracker._trackPageview('/outgoing/api.jquery.com/load-event/?referer=');">http://api.jquery.com/load-event/</a></p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/01/14/ajax-com-prototype/" rel="bookmark" class="crp_title">AJAX com Prototype</a></li><li><a
href="http://cauancabral.net/2008/10/22/usar-google-analytics-para-paginas-em-flash-ou-ajax-e-mole/" rel="bookmark" class="crp_title">Usar Google Analytics para páginas em Flash ou Ajax? É mole&#8230;</a></li><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></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/08/13/dica-rapida-evitando-problemas-com-uso-de-jquery-e-imagens/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Joomla! 1.6 &#8211; O que está para chegar&#8230;</title><link>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/</link> <comments>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/#comments</comments> <pubDate>Sat, 30 Jan 2010 23:06:53 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[Joomla!]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[joomla 1.6]]></category> <guid
isPermaLink="false">http://cauancabral.net/?p=190</guid> <description><![CDATA[Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança. Desde meados de 2009 quem utiliza o Joomla! só pensa na &#8230; <a
href="http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança.</p><p>Desde meados de 2009 quem utiliza o Joomla! só pensa na próxima grande atualização do CMS, a versão 1.6. Ela deve incluir alguns dos itens mais requisitados pela comunidade como:</p><ul><li>Sistema de permissões, com possibilidade de se criar novos grupos e definir o que cada grupo pode fazer;</li><li>União das Seções e Categorias, ao mesmo tempo que agora pode-se ter infinitas subcategorias;</li><li>Suporte a outros sistemas de banco de dados;</li><li>Assistente para adicionar link para um artigo enquanto estamos escrevendo outro artigo;<span
id="more-190"></span></li></ul><p>Agora parece que estamos perto do lançamento da próxima grande atualização do Joomla!, e pensando nisso baixei a versão atual em desenvolvimento do SVN e tirei alguns screenshot da área administrativa dessa nova versão, mostrando alguns dos recursos novos:</p> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_dashboard/' title='joomla16_dashboard'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_dashboard-150x150.png" class="attachment-thumbnail" alt="joomla16_dashboard" title="joomla16_dashboard" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_administracao_menu/' title='joomla16_administracao_menu'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_administracao_menu-150x150.png" class="attachment-thumbnail" alt="joomla16_administracao_menu" title="joomla16_administracao_menu" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_grupos/' title='joomla16_grupos'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_grupos-150x150.png" class="attachment-thumbnail" alt="joomla16_grupos" title="joomla16_grupos" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_nivel-de-acesso/' title='joomla16_nivel-de-acesso'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_nivel-de-acesso-150x150.png" class="attachment-thumbnail" alt="joomla16_nivel-de-acesso" title="joomla16_nivel-de-acesso" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_categorias-conteudo/' title='joomla16_categorias-conteudo'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_categorias-conteudo-150x150.png" class="attachment-thumbnail" alt="joomla16_categorias-conteudo" title="joomla16_categorias-conteudo" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_administracao-conteudo/' title='joomla16_administracao-conteudo'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_administracao-conteudo-150x150.png" class="attachment-thumbnail" alt="joomla16_administracao-conteudo" title="joomla16_administracao-conteudo" /></a> <a
href='http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/joomla16_edicao-artigo/' title='joomla16_edicao-artigo'><img
width="150" height="150" src="http://cauancabral.net/wp-content/uploads/2010/01/joomla16_edicao-artigo-150x150.png" class="attachment-thumbnail" alt="joomla16_edicao-artigo" title="joomla16_edicao-artigo" /></a><p>As últimas informações sobre o planejamento (incluindo o que deve ser feito e o que já foi feito) podem ser vistas <a
title="Feature Patches for Joomla! 1.6" href="http://developer.joomla.org/coordinator-blog/292-feature-patches-for-16.html" onclick="pageTracker._trackPageview('/outgoing/developer.joomla.org/coordinator-blog/292-feature-patches-for-16.html?referer=');">nesta notícia</a> e nesta <a
title="Joomla! 1.6 status" href="http://www.joomla.org/component/content/article/5252.html" onclick="pageTracker._trackPageview('/outgoing/www.joomla.org/component/content/article/5252.html?referer=');">página de status</a>.</p><p>Podemos aguardar, na melhor das hipóteses, um release final do Joomla! 1.6 para março de 2010, o que não está muito longe, felizmente =]</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/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/2010/01/17/trabalhando-com-php-5-2-no-opensuse-11-2-downgrade-do-php-5-3-para-5-2/" rel="bookmark" class="crp_title">Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)</a></li><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></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/01/30/joomla-1-6-o-que-esta-para-chegar/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Latinoware 2009 &#8211; COLAPHP &#8211; Evento fantástico</title><link>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/</link> <comments>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/#comments</comments> <pubDate>Sat, 16 Jan 2010 14:56:24 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[eventos]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[flex]]></category> <category><![CDATA[latinoware]]></category> <category><![CDATA[mini-curso]]></category> <category><![CDATA[palestra]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=155</guid> <description><![CDATA[Eae pessoal, tudo tranquilo? Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá. &#8230; <a
href="http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Eae pessoal, tudo tranquilo?</p><p>Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá.</p><p>Desde o dia 21/10/2009 estou em Foz do Iguaçu &#8211; PR, para participar do Latinoware 2009, um dos maiores eventos de software livre das Américas.<br
/> Estou tendo a oportunidade de ministrar um minicurso e apresentar uma palestra no &#8220;subevento&#8221; COLAPHP &#8211; Congresso Latinoamericano de PHP, que possui uma trilha dedicada a linguagem dentro do  Latinoware.</p><p>A experiência não poderia estar sendo melhor. Pude conhecer excelentes profissionais e fazer muitas amizades.</p><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; fim do rascunho 1 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p><p>Nos dias 23 e 24 de outubro tive a oportunidade de ministrar um minicurso e uma palestra dentro da trilha COLAPHP do Latinoware.</p><p>Ambos tratavam do CakePHP, no caso do minicurso fizemos uma introdução no framework, falando um pouco de seu funcionamento, suas convenções e criamos rapidamente uma aplicação simples utilizando o terminal com o Bake.</p><p>O slides utilizado no minicurso foi este:</p><p><object
style="margin:0px" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><param
name="wmode" value="transparent" /><embed
src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2474507&amp;doc=cakephp-091111083152-phpapp01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p><p>No caso da palestra, falei novamente sobre a integração de aplicações escritas em CakePHP e Flex, dando uma revisada na apresentação. Ela ficou assim:</p><p><object
style="margin:0px" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><param
name="wmode" value="transparent" /><embed
src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=id=2928697&amp;doc=flexphp-100116083159-phpapp02" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355" wmode="transparent"></embed></object></p><p>Aproveito o espaço (e a disponibilidade de tempo) para agradecer todos que participaram do evento como um todo, seja na organização, apoio ou assistindo, perguntando, corrigindo e ajudando a gente durante as apresentações. Obrigado a todos.</p><p>&#8212;&#8212;&#8212;&#8212;&#8212;- fim do rascunho 2 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p><p>O texto do rascunho 1 foi escrito em 23/10/2009, o do rascunho 2 logo após o evento, hoje é 16/01/2010 e o textos ainda estevam como rascunho para ser publicado no blog. Pois é, esse final de ano foi realmente muito corrido, mas valeu a pena.</p><p>Agora é hora de se organizar para poder ter um 2010 ainda mais proveitoso (de começo ele já está sendo muito melhor).</p><p>Até breve.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/09/24/2%c2%ba-workshop-phpms/" rel="bookmark" class="crp_title">2º Workshop PHPMS</a></li><li><a
href="http://cauancabral.net/2008/09/21/software-freedom-day-08-sucesso/" rel="bookmark" class="crp_title">Software Freedom Day 08 &#8211; Sucesso!</a></li><li><a
href="http://cauancabral.net/2008/05/08/voltando-a-ativa-no-bom-sentido/" rel="bookmark" class="crp_title">Voltando a ativa ( no bom sentido )</a></li><li><a
href="http://cauancabral.net/2009/06/14/workshop-php-extremo/" rel="bookmark" class="crp_title">Workshop PHP Extremo</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2010/01/16/latinoware-2009-colaphp-evento-fantastico/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Workshop PHP Extremo</title><link>http://cauancabral.net/2009/06/14/workshop-php-extremo/</link> <comments>http://cauancabral.net/2009/06/14/workshop-php-extremo/#comments</comments> <pubDate>Mon, 15 Jun 2009 01:35:44 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[eventos]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[php-extremo]]></category> <category><![CDATA[phpms]]></category> <category><![CDATA[workshop]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=130</guid> <description><![CDATA[Como havia comentado no post anterior, o PHPMS realizará seu primeiro worksop: Workshop PHP Extremo. Citando a página do evento: O que é o Workshop PHP Extremo? Trata-se de um evento voltado a profissionais, em especial os que trabalham com &#8230; <a
href="http://cauancabral.net/2009/06/14/workshop-php-extremo/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Como havia comentado no post anterior, o PHPMS realizará seu primeiro worksop: Workshop PHP Extremo.</p><p>Citando a página do evento:</p><blockquote><p><strong>O que é o Workshop PHP Extremo?</strong></p><p>Trata-se de um evento voltado a profissionais, em especial os que trabalham com PHP.  O Workshop visa a capacitar os desenvolvedores PHP do estado e permitir a troca de experiências e networking,  elevando o nível dos atuais desenvolvedores PHP e profissionais da área.</p></blockquote><p>Como é possível ver pela breve introdução, é um evento voltado para desenvolvedores, como diria Steve Ballmer: &#8220;developers! developers! developers!&#8221;</p><p>Se você tem interesse em participar do evento corra, pois as vagas são bem limitadas (30 pessoas) e o valor está muito baixo &#8211; apenas R$ 15,00 antes de evento &#8211; e de quebra você leva uma camiseta. Visite a página do<a
title="PHP Extremo" href="http://workshop.phpms.org" onclick="pageTracker._trackPageview('/outgoing/workshop.phpms.org?referer=');"> Workshop PHP Extremo</a> e siga os passos para fazer sua inscrição.</p><p>Caso além de querer participar você queira um espaço para compartilhar seu conhecimento, um lugar apresentar algo e discutir com profissionais da área, então é sua chance de apresentar um trabalho no Workshop. Serão 3 apresentações durante o workshop, uma pode ser a sua, basta submeter sua proposta de trabalho <a
title="Submissão de trabalho para Workshop PHP Extremo" href="http://spreadsheets.google.com/viewform?formkey=cklxc3A4SWptYjBzRHhERzFUb3JCOFE6MA.." onclick="pageTracker._trackPageview('/outgoing/spreadsheets.google.com/viewform?formkey=cklxc3A4SWptYjBzRHhERzFUb3JCOFE6MA..&amp;referer=');">neste formulário</a>. Mas corra, as submissões tem de ser feitas até o dia 20 de Junho.</p><p>Vamos participar para que possamos realizar outros destes no futuro.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/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/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/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/14/workshop-php-extremo/feed/</wfw:commentRss> <slash:comments>0</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>Lançado Internet Explorer 8 (IE8) &#8211; Morte ao IE7</title><link>http://cauancabral.net/2009/03/19/lancado-internet-explorer-8-ie8-morte-ao-ie7/</link> <comments>http://cauancabral.net/2009/03/19/lancado-internet-explorer-8-ie8-morte-ao-ie7/#comments</comments> <pubDate>Thu, 19 Mar 2009 23:32:34 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[browser]]></category> <category><![CDATA[css]]></category> <category><![CDATA[ie]]></category> <category><![CDATA[ie8]]></category> <category><![CDATA[padrões]]></category> <category><![CDATA[w3c]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/2009/03/19/lancado-internet-explorer-8-ie8-morte-ao-ie7/</guid> <description><![CDATA[Hoje a Microsoft liberou a versão final do IE8. Dando uma pesquisada na página do lançamento, fico feliz que o suporte a padrões realmente foi aprimorado (mesmo ainda tendo chão para alcançar o Opera/Webkit/Firefox)&#8230; fico apenas com uma coisa em &#8230; <a
href="http://cauancabral.net/2009/03/19/lancado-internet-explorer-8-ie8-morte-ao-ie7/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Hoje a Microsoft liberou a versão final do IE8. Dando uma pesquisada na página do lançamento, fico feliz que o suporte a padrões realmente foi aprimorado (mesmo ainda tendo chão para alcançar o Opera/Webkit/Firefox)&#8230; fico apenas com uma coisa em mente: vamos estender a campanha Morte ao IE6 ao IE7? Por uma web melhor.</p><p>Caso queira conferir as novidades no suporte a HTML e CSS, acesse: http://msdn.microsoft.com/pt-br/library/cc817571(en-us).aspx</p><p>Para ter detalhes específicos do suporte a CSS a melhor página é: http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a
href="http://cauancabral.net/2009/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</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/2008/12/12/3f-ferias-da-faculdade-finalmente/" rel="bookmark" class="crp_title">3F: Férias da Faculdade, Finalmente.</a></li><li><a
href="http://cauancabral.net/2008/07/15/jogar-quake-direto-no-browser/" rel="bookmark" class="crp_title">Jogar Quake direto no Browser?</a></li><li><a
href="http://cauancabral.net/2009/06/13/ultimas-novidades-2/" rel="bookmark" class="crp_title">Últimas Novidades #2</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2009/03/19/lancado-internet-explorer-8-ie8-morte-ao-ie7/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>CakePHP &#8211; Dúvidas Comuns #2</title><link>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/</link> <comments>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/#comments</comments> <pubDate>Thu, 26 Feb 2009 00:36:54 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[CakePHP]]></category> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Programação]]></category> <category><![CDATA[i10n]]></category> <category><![CDATA[i18n]]></category> <category><![CDATA[validação]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=111</guid> <description><![CDATA[Dúvida: Como usar habilitar a internacionalização &#8211; o famoso I18N &#8211; nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views? Habilitar a internacionalização e ter a localização em &#8230; <a
href="http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Dúvida: Como usar habilitar a internacionalização &#8211; o famoso I18N &#8211; nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views?</p><p>Habilitar a internacionalização e ter a localização em uma aplicação com CakePHP desde a versão 1.2  é relativamente simples: basta uma lida no nosso <a
title="Internacionalizando uma aplicação em CakePHP" href="http://book.cakephp.org/pt/view/161/Internacionalizando" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/161/Internacionalizando?referer=');">Cookbook</a> e pronto.</p><p>Outra coisa que é relativamente simples de se fazer é validar os dados, basta termos um atributo em nosso modelo chamado &#8220;validate&#8221; e seguir as dicas do <a
title="Validação de dados com CakePHP" href="http://book.cakephp.org/pt/view/125/Valida%C3%A7%C3%A3o-de-dados" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/125/Valida_C3_A7_C3_A3o-de-dados?referer=');">livro de receitas</a>.</p><p>Mas pelo Cookbook somos induzidos a fornecer a mensagem de erro na hora de criar a View, algo que eu particularmente não gosto. É até comum termos um modelo que é usado por Controllers diferentes e consequêntemente por Views diferentes.</p><p>Uma maneira de evitar isso, é definir as mensagens de erro já na definição das regras de validação, dentro do atributo &#8220;validate&#8221; do seu modelo. O grande problema é que para traduzir uma determinada expressão utilizamos um método, e a chamada de método na definição estática de um atributo não é permitida no PHP (dúvida? tente fazer o código abaixo)</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Modelo <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validate</span> <span style="color: #339933;">=</span> _<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ola mundo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//esse código não devera ser executado</span></pre></div></div><p>A solução para isso é a atribuição das regras de validação no momento da instanciação da classe, ou seja, no seu método construtor, da seguinte maneira</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">class</span> Modelo <span style="color: #000000; font-weight: bold;">extends</span> AppModel <span style="color: #009900;">&#123;</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$validate</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</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;">validate</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #666666; font-style: italic;">/* aqui você pode definir as regras e mensagens,mesmo chamando um método */</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div><p>Qualquer dúvida não deixem de utilizar os comentários ;]</p><p>&#8212;&#8212;&#8211;<br
/> Atualizado: havia esquecido da chamada ao construtor da superclasse AppModels ( através do parent::__construct() ) no último código mostrado.<br
/> &#8212;&#8212;&#8211;<br
/> <strong>Atualizado</strong></p><p>Obrigado ao José Tranca e Thiago Goulart pelos comentários, as soluções propostas por eles devem ser adotada em detrimento da minha, já que melhora consideravelmente a modularidade e reusabilidade das traduções.</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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><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/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/2008/01/02/validacao-de-dados-em-php5-parte-1/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 1</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></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Ainda não tem hospedagem? Aproveite</title><link>http://cauancabral.net/2009/02/15/ainda-nao-tem-hospedagem-aproveite/</link> <comments>http://cauancabral.net/2009/02/15/ainda-nao-tem-hospedagem-aproveite/#comments</comments> <pubDate>Sun, 15 Feb 2009 15:40:02 +0000</pubDate> <dc:creator>Cauan Cabral</dc:creator> <category><![CDATA[Desenvolvimento Web]]></category> <category><![CDATA[Tecnologia]]></category> <category><![CDATA[bluehost]]></category> <category><![CDATA[dreamhost]]></category> <category><![CDATA[hospedagem]]></category> <category><![CDATA[promoção]]></category> <guid
isPermaLink="false">http://geek.cauancabral.net/?p=100</guid> <description><![CDATA[Acredito que a maior parte dos visitantes deste blog trabalhem com internet. E neste trabalho, não ter um serviço de hospedagem para colocar seus serviços em produção ou mesmo durante o desenvolvimento é tão complicado quanto um médico clínico-geral não &#8230; <a
href="http://cauancabral.net/2009/02/15/ainda-nao-tem-hospedagem-aproveite/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Acredito que a maior parte dos visitantes deste blog trabalhem com internet. E neste trabalho, não ter um serviço de hospedagem para colocar seus serviços em produção ou mesmo durante o desenvolvimento é tão complicado quanto um médico clínico-geral não ter um estetoscópio.</p><p>As vezes nos esbarramos em alguns problemas para ter nosso espaço na web: se quiser ter um servidor em casa/escritório este terá de ter um IP fixo ou algum serviço de DNS como o NO-IP.com; se quiser ter um servidor dedicado fora de casa terá de pagar uma boa quantia; caso não disponha de muito dinheiro, terá de se satisfazer com várias limitações de recursos, certo? Não neste caso.</p><p>Infelizmente aqui no Brasil ainda é muito caro ter um servidor de hospedagem com bons recursos e preço baixo, mas lá fora isso já é realidade, então o que fazer para aproveitar isso? Primeira coisa é ter um cartão de crédito internacional (já que temos de pagar em moeda estrangeira) e se possível uma conta no PayPal (para aumentar a segurança de nossas &#8220;comprinhas&#8221;), depois disso é só escolher o host.</p><p>Atualmente trabalho com a <a
title="Serviço de hospedagem com espaço ilimitado e preço promocional" href="http://www.bluehost.com/track/cauancabral/post1" onclick="pageTracker._trackPageview('/outgoing/www.bluehost.com/track/cauancabral/post1?referer=');">Bluehost</a>[en], mas ontem me inscrevi e outro grande serviço: a <a
title="Serviço de hospedagem nos EUA" href="http://www.dreamhost.com/r.cgi?503888" onclick="pageTracker._trackPageview('/outgoing/www.dreamhost.com/r.cgi?503888&amp;referer=');">Dreamhost</a>[en].</p><p>Ambos possuem ótimas características, dentre elas:</p><ul><li>Espaço em disco ilimitado;</li><li>Trafego de dados ilimitado;</li><li>Domínios e subdomínios ilimitados;</li><li>Acesso SSH;</li></ul><p>Além de vários outros. A diferença de preço entre elas não é muito grande, normalmente. Mas de vez em quando aparece uma grande promoção. Hoje é um desses dias.</p><p>Na <a
title="Hospedagem com ótimo preço" href="http://www.dreamhost.com/r.cgi?503888" onclick="pageTracker._trackPageview('/outgoing/www.dreamhost.com/r.cgi?503888&amp;referer=');">Dreamhost</a>, se você utilizar o código promocional <strong>777</strong> você paga somente $9,24 por um ano de hospedagem e ganha o registro de um domínio internacional na faixa. Mas só pode ser aproveitado até hoje, 15 de fevereiro de 2009. Então se tiver com uma conta PayPal ou um cartão internacional em mãos, não perca tempo.</p><p>Na <a
title="Hospedagem nos EUA" href="http://www.bluehost.com/track/cauancabral/post1" onclick="pageTracker._trackPageview('/outgoing/www.bluehost.com/track/cauancabral/post1?referer=');">Bluehost</a> você pagará a bagatela de $6,95 por mês no plano de hospedagem (para pagamento anual). Isso dá menos de R$15,00/mês por um plano ilimitado, não é uma pechincha? Então se hoje não é 15 de fevereiro, utilize o banner abaixo e se inscreva na Bluehost para ter um ótimo serviço por um preço absurdamente baixo.</p><p>&#8211; Atualizado &#8211;</p><p>Caso tenha perdido a promoção do dia 15/02/2009, não perca as esperanças, utilize o código promocional <strong>CAUANCABRAL</strong> para registrar sua conta na <a
title="Assine utilizando o PROMOCODE CAUANCABRAL" href="http://www.dreamhost.com" onclick="pageTracker._trackPageview('/outgoing/www.dreamhost.com?referer=');">Dreamhost</a> e ganhe um bom desconto: são $50.00 para assinatura mensal (custo normal $60.90), $75.00(de $119.40) para assinatura anual e $79.00(de $214.80) para assinatura bienal. Aproveite ;P</p><div
id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/2010/06/25/delivery-facil-pedir-comida-na-internet-e-muito-facil/" rel="bookmark" class="crp_title">Delivery Fácil &#8211; Pedir comida na internet é muito fácil</a></li><li><a
href="http://cauancabral.net/2008/03/11/quem-ta-vivo-sempre-aparece/" rel="bookmark" class="crp_title">Quem ta vivo sempre aparece&#8230;</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/01/03/sem-assunto/" rel="bookmark" class="crp_title">Sem assunto</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://cauancabral.net/2009/02/15/ainda-nao-tem-hospedagem-aproveite/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
