<?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 - Geek &#187; Programação</title>
	<atom:link href="http://cauancabral.net/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 25 Jun 2010 23:31:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Obrigado pelos peixes SVN</title>
		<link>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/</link>
		<comments>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 13:08:59 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[CakePHP-1.3]]></category>
		<category><![CDATA[comitiva]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[swiftmailer]]></category>

		<guid isPermaLink="false">http://cauancabral.net/?p=220</guid>
		<description><![CDATA[Há alguns anos descobri o fantástico mundo do controle de versão, naquele momento me perguntei &#8220;como vivi sem isso até hoje?&#8221;. Dali em diante podia alterar arquivos sem medo, qualquer erro era só voltar uma versão e tudo certo. Trabalhar &#8230; <a href="http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Há alguns anos descobri o fantástico mundo do controle de versão, naquele momento me perguntei &#8220;como vivi sem isso até hoje?&#8221;. Dali em diante podia alterar arquivos sem medo, qualquer erro era só voltar uma versão e tudo certo. Trabalhar em equipe finalmente se tornava algo fácil, graças ao <a title="Página do Subversion SCM" href="http://subversion.apache.org/" onclick="pageTracker._trackPageview('/outgoing/subversion.apache.org/?referer=');">Subversion &#8211; SVN</a>.</p>
<p>Porém os anos passaram e algumas coisas começaram a fazer falta: como faço quando estou desenvolvendo algo grande, fico sem commitar até ter algo estável/usável? crio um branch para isso? mas e depois para unir os branches, e os conflitos? além disso, se só eu estou trabalhando em cima disso, porque commitar para todo mundo algo não pronto?</p>
<p>Foi aí que descobri o <a title="Página com documentação do Git SCM" href="http://git-scm.com/" onclick="pageTracker._trackPageview('/outgoing/git-scm.com/?referer=');">GIT</a>, um sistema de controle de versão distribuído, open source e gratuito. Ok, ele é gratuito e open source, mas isso não é motivo suficiente. Como disse, ele é um sistema de controle de versão distribuído, isso quer dizer que cada um que tem uma cópia do repositório tem de fato uma cópia dele, e pode servir outras pessoas, ver histórico, tudo localmente.</p>
<p>Então de quebra, ele resolve o problema de ter de criar um branch para desenvolver uma funcionalidade que só eu vou mexer, posso controlar cada alteração minha localmente, e quando quiser &#8211; se quiser &#8211; posso sincronizar meu repositório local com um outro central (que eu considero central, já que essa figura não existe no GIT). E mais, ele é <strong>MUITO RÁPIDO</strong>. Acho que para ajudar na argumentação de que é rápido basta dizer que ele foi feito por alguns desenvolvedores do Kernel Linux, e gerencia todo o código trabalhado por eles &#8211; e não é pouca coisa.</p>
<p>Ainda estou caminhando com o <a href="http://git-scm.com/" onclick="pageTracker._trackPageview('/outgoing/git-scm.com/?referer=');">GIT</a>, tenho aproveitado minha ânsia de aprende-lo junto com a de contribuir com softwares open source para criar e disponibilizar projetos no <a title="Plataforma para centralização de repositórios Git" href="http://github.com" onclick="pageTracker._trackPageview('/outgoing/github.com?referer=');">GitHub</a>.</p>
<p>A grande maioria dos projetos é voltado ao <a title="CakePHP Framework" href="http://cakephp.org" onclick="pageTracker._trackPageview('/outgoing/cakephp.org?referer=');">CakePHP</a>, mas há outras coisas também. Alguns projetos que podem interessar são:</p>
<ul>
<li><a title="Sistema de gerenciamento de eventos escrito em CakePHP" href="http://github.com/CauanCabral/Comitiva" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Comitiva?referer=');">Comitiva</a> &#8211; Sistema construído em CakePHP 1.3 para gerenciamento de eventos;</li>
<li><a title="Plugin que serve de wrapper para utilização da biblioteca SwiftMailer dentro do CakePHP" href="http://github.com/CauanCabral/Mailer" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/Mailer?referer=');">Plugin Mailer</a> &#8211; Um plugin que ajuda na utilização da biblioteca PHP <a title="Página da lib SwiftMailer" href="http://swiftmailer.org" onclick="pageTracker._trackPageview('/outgoing/swiftmailer.org?referer=');">SwiftMailer</a> dentro do CakePHP;</li>
<li><a title="Behavior para transformação de dados" href="http://github.com/CauanCabral/CakePHP-Locale-Behavior" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/CakePHP-Locale-Behavior?referer=');">Behavior Locale</a> &#8211; Um behavior para transformar dados vindo do usuário de seu padrão local para um padrão internacional (de banco de dados)</li>
<li><a title="Classes de apoio em PHP" href="http://github.com/CauanCabral/libs" onclick="pageTracker._trackPageview('/outgoing/github.com/CauanCabral/libs?referer=');">Libs</a> &#8211; uma coleção de pequenos scripts PHP que fui fazendo ao longo da vida. Há coisas boas, coisas úteis, coisas não tão úteis, mas tudo pode ser usado ao menos como ponto inicial para uma implementação mais elaborada.</li>
</ul>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/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/2008/01/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li><li><a href="http://cauancabral.net/2008/05/15/vida-pos-vista/" rel="bookmark" class="crp_title">Vida pós-Vista</a></li><li><a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2010/04/11/obrigado-pelos-peixes-svn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Classe para fazer Contagem de Linhas e Bônus</title>
		<link>http://cauancabral.net/2009/07/26/classe-para-fazer-contagem-de-linhas-e-bonus/</link>
		<comments>http://cauancabral.net/2009/07/26/classe-para-fazer-contagem-de-linhas-e-bonus/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 01:40:37 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=139</guid>
		<description><![CDATA[Classe para contar número de linhas &#8220;codadas&#8221; de uma aplicação. Foi escrita em PHP, pensando em extensões comuns nesse tipo de sistema, mas pode facilmente ser adaptado para contar linhas de sistemas em Java, C/C++ dentre outras. A idéia por &#8230; <a href="http://cauancabral.net/2009/07/26/classe-para-fazer-contagem-de-linhas-e-bonus/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Classe para contar número de linhas &#8220;codadas&#8221; de uma aplicação. Foi escrita em PHP, pensando em extensões comuns nesse tipo de sistema, mas pode facilmente ser adaptado para contar linhas de sistemas em Java, C/C++ dentre outras.</p>
<p>A idéia por trás da classe foi matar a curiosidade geek de ver o tamanho de uma &#8220;criança&#8221; que ajudei a criar, além disso quero estudar uma forma de fazer melhores estimativas para custo e prazo para desenvolvimento de software.</p>
<p>A classe está disponível livremente, sob a licença MIT. Faça o download dela <a title="Classe Metrics" href="http://geek.cauancabral.net/wp-content/uploads/2009/07/metrics.class.php" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/wp-content/uploads/2009/07/metrics.class.php?referer=');"></a><a href="http://geek.cauancabral.net/wp-content/uploads/2009/08/metrics.zip" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/wp-content/uploads/2009/08/metrics.zip?referer=');">metrics.class.php</a>. Qualquer dúvida sobre sua utilização, deixe nos comentários ou entre em contato comigo.</p>
<p>Vou aproveitar e disponibilizar a atualização da classe para validação de dados e outras &#8220;firulas&#8221; mais que já disponibilizei anteriormente, porém agora com pequenas adições. Visualize ela <a href="http://geek.cauancabral.net/wp-content/uploads/2009/08/validation.zip" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/wp-content/uploads/2009/08/validation.zip?referer=');">validation.class.php</a><a title="Classe para validação e outros bônus" href="http://geek.cauancabral.net/wp-content/uploads/2009/07/validation.class.php" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/wp-content/uploads/2009/07/validation.class.php?referer=');"></a>.</p>
<p>Qualquer sugestão sobre ambas as classes pode ser feita nos comentários. Espero que seja útil para alguém.</p>
<p>Até a próxima.</p>
<p>&#8212;&#8212;&#8212;&#8211;</p>
<p>Atualizado: troquei os arquivos por equivalentes compactados em arquivo .zip . Valeu Gelinho e Felipe ;]</p>
<p>&#8212;&#8212;&#8212;&#8211;</p>
<p>Atualizado novamente: à um bom tempo meu amigo <a href="http://sites.google.com/site/raphoxaraujo/" onclick="pageTracker._trackPageview('/outgoing/sites.google.com/site/raphoxaraujo/?referer=');">Raphox</a> indicou na lista do <a title="Grupo de Usuários PHP de MS" href="http://www.phpms.org" onclick="pageTracker._trackPageview('/outgoing/www.phpms.org?referer=');">PHPMS</a> uma classe criada pelo grande <a title="Criador, dentre outras coisas, do PHPUNIT" href="http://sebastian-bergmann.de" onclick="pageTracker._trackPageview('/outgoing/sebastian-bergmann.de?referer=');">Sebastian Bergmann</a> para mensurar softwares em PHP, o nome da classe é PHPLOC e ela está disponível neste endereço: http://github.com/sebastianbergmann/phploc . Vale a pena conferir</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/11/19/google-analytics-e-adobe-facilitando-a-sua-vida/" rel="bookmark" class="crp_title">Google Analytics e Adobe &#8211; facilitando a sua vida</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/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</a></li><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/01/14/ajax-com-prototype/" rel="bookmark" class="crp_title">AJAX com Prototype</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/07/26/classe-para-fazer-contagem-de-linhas-e-bonus/feed/</wfw:commentRss>
		<slash:comments>3</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 lendo <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.</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/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><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/02/25/cakephp-duvidas-comuns-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; dúvidas comuns #1</title>
		<link>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/</link>
		<comments>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 19:47:02 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[dúvidas]]></category>
		<category><![CDATA[habtm]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=105</guid>
		<description><![CDATA[Como já comentei algumas vezes, estou desenvolvendo com um framework MVC em PHP chamado CakePHP. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao Ruby e o Ruby on Rails). Se precisar de &#8230; <a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como já comentei algumas vezes, estou desenvolvendo com um framework <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Model_E2_80_93view_E2_80_93controller?referer=');">MVC</a> em PHP chamado <a title="Página oficial do framework CakePHP" href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a>. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao <a href="http://www.ruby-lang.org/pt/" onclick="pageTracker._trackPageview('/outgoing/www.ruby-lang.org/pt/?referer=');">Ruby</a> e o <a href="http://www.rubyonrails.pro.br/" onclick="pageTracker._trackPageview('/outgoing/www.rubyonrails.pro.br/?referer=');">Ruby on Rails</a>). Se precisar de mais informações sobre o framework sugiro leitura do seu <a title="Documentação oficial do CakePHP" href="http://book.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org?referer=');">Cookbook</a> e de outros blogs a respeito.</p>
<p>Desde que descobri o CakePHP faço parte do grupo <a title="Grupo de discussão sobre CakePHP em português" href="http://groups.google.com/group/cakephp-pt/" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/cakephp-pt/?referer=');">CakePHP Tuga</a> e ocasionalmente no canal de IRC do grupo #cakephp-pt na rede Freenode.org, e já tive a oportunidade de aprender e ajudar diversas vezes.</p>
<p>Vamos as dúvidas:</p>
<ol>
<li>Como salvar dados de um formulário que envolva um relacionamenteo de &#8220;muitos para muitos&#8221;/many-to- many ou ainda de HasAndBelongToMany (HABTM) ?</li>
</ol>
<p>Nesta dúvida temos que ter em mente que o CakePHP faz todas as ligações entre nossos modelos desde que sigamos suas convenções, caso façamos isso, não haverá dificuldades.<br />
Mas quais são essas convenções? <a title="Conveções do CakePHP" href="http://book.cakephp.org/pt/view/22/Conven%C3%A7%C3%B5es-no-CakePHP" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/22/Conven_C3_A7_C3_B5es-no-CakePHP?referer=');">Veja você mesmo</a>.</p>
<p>Um detalhe que não podemos esquecer é que por padrão o CakePHP está preparado para tratar suas convenções em inglês, então, se não quisermos ter de modificar as configurações padrões, temos de desenvolver em inglês. Ok?</p>
<p>Seguindo todas as conveções o que fica faltando? É preciso saber como um relacionamento HABTM se manifesta em um formulário, ou seja, como ele é apresentado. No CookBook temos um <a title="Salvando dados em um HABTM" href="http://book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/pt/view/85/Salvando-dados-em-tabelas-relacionadas-HABTM?referer=');">texto</a> sobre o caso. Resumindo, o que temos de ter é:</p>
<ul>
<li>Um formulário com o nome de um dos modelos envolvidos no relacionamento. Por exemplo, em um blog temos um modelo Post e outro Tags, os dois estão ligados por um HABTM, então no formulário para inserir um Post, o nome de formulário seria Post.</li>
<li>Um ou mais campos identificados com o outro modelo parte do relacionamento e sua chave. No nosso exemplo seriam um ou mais campos com o nome &#8216;Tag.Tag&#8217;.</li>
</ul>
<p>No item anterior que surge a principal dúvida: como definir o nome do meu campo? que tipo de campo usar?</p>
<p>Primeiro definimos o tipo de campo a se utilizar: normalmente utilizamos um Select box para multiplas seleções OU um conjunto de Checkbox. Qualquer que seja a escolha o restante é bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/*
$tag é o retorno de um find('list') com os campos id e name selecionados
$tags = array( array('id' =&gt; 1, 'name' =&gt; 'tag 1'), array('id' =&gt; 2, 'name' =&gt; 'tag 2') );
&nbsp;
o índice 'multiple' só deve ser utilizado quando quiser um conjunto de checkbox
*/</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Tag.Tag'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'type'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'select'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'multiple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$tags</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'labels'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Selecione as tags'</span>
	<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Com isso seu formulário já retornará o que é esperado pelo CakePHP e tudo que será necessário para salvar os dados do relacionamento é utilizar o método &#8216;saveAll&#8217; ao invés de &#8216;save&#8217;.</p>
<p>Ainda esta semana comentarei das dúvidas sobre validação.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><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/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/2008/09/21/desenvolvimento-rapido/" rel="bookmark" class="crp_title">Desenvolvimento rápido</a></li><li><a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</a></li><li><a href="http://cauancabral.net/2010/01/27/dica-rapida/" rel="bookmark" class="crp_title">Dica rápida</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX com Prototype</title>
		<link>http://cauancabral.net/2009/01/14/ajax-com-prototype/</link>
		<comments>http://cauancabral.net/2009/01/14/ajax-com-prototype/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 13:37:56 +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[ajax]]></category>
		<category><![CDATA[comentários]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=91</guid>
		<description><![CDATA[Prototype é uma biblioteca javascript bastante utilizada, mas que pra mim nunca chamou atenção (ao contrário do JQuery), mas como tenho utilizado o CakePHP e em sua estrutura de Helpers ele usa esta biblioteca, tive de &#8220;perder&#8221; um tempinho estudando-a. &#8230; <a href="http://cauancabral.net/2009/01/14/ajax-com-prototype/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Página da biblioteca Prototype" href="http://www.prototypejs.org" onclick="pageTracker._trackPageview('/outgoing/www.prototypejs.org?referer=');">Prototype</a> é uma biblioteca javascript bastante utilizada, mas que pra mim nunca chamou atenção (ao contrário do <a title="A fantástica biblioteca js JQuery" href="http://jquery.com" onclick="pageTracker._trackPageview('/outgoing/jquery.com?referer=');">JQuery</a>), mas como tenho utilizado o <a title="Página do framework CakePHP" href="http://cakephp.org" onclick="pageTracker._trackPageview('/outgoing/cakephp.org?referer=');">CakePHP</a> e em sua estrutura de Helpers ele usa esta biblioteca, tive de &#8220;perder&#8221; um tempinho estudando-a.</p>
<p>Para isso, fiz como meu amigo <a title="PorKaria's blog" href="http://porkaria.wordpress.com" onclick="pageTracker._trackPageview('/outgoing/porkaria.wordpress.com?referer=');">PorKaria</a> e montei um sisteminha simples de comentários (na verdade o dele era o <a title="Livro Livre" href="http://phpbrasil.com/scripts/script.php/id/1661" onclick="pageTracker._trackPageview('/outgoing/phpbrasil.com/scripts/script.php/id/1661?referer=');">guestbook</a>, mas no fim fazem a mesmo coisa, hehehe).</p>
<p>Descrição do sistema:</p>
<p>Sistema usando AJAX (na verdade o X aqui é de XHTML, porque não utilizo XML) Permite a inserção de comentários, salvando-os em um banco de dados (MySQL), tudo de forma assíncrona. A bibliote utilizada para implementação da parte em javascript é a Prototype, a formatação (CSS) foi retirada de um tutorial do <a title="Referência em Web Semântica" href="http://www.tableless.com.br" onclick="pageTracker._trackPageview('/outgoing/www.tableless.com.br?referer=');">Tableless</a> sobre formatação de formulários e o PHP foi escrito por mim. Além do cadastro, fiz o que pode se chamar início de um sistema de busca com sugestão (famoso autocomplete). Digo o início porque ele não avalia bem o momento de se fazer a busca e não é possível clicar nos resultados, apenas vê-los.</p>
<p><span id="more-91"></span><br />
Estrutura:</p>
<ul>
<li>main.php : é a página onde está todo o sistema, apartir dela que é feito a leitura dos comentários e o envio de novos comentários;</li>
<li>adiciona_comentario.php : nesta página fazemos o processamento dos dados vindos do formulário e os salvamos no banco;</li>
<li>le_comentario.php : arquivo que recupera do banco todos os comentarios e retorna os dados em uma lista html;</li>
<li>busca_comentario.php : script que faz a busca dos comentários no banco para o &#8220;autocomplete&#8221; e retorna-os como uma lista;</li>
<li>validation.class.php : velho conhecido que faz a validação dos dados&#8230; a classe ainda está em implementação, mas já está mais completa do que a versão anterior que compartilhei.</li>
</ul>
<p>Irei comentar apenas a parte javascript, qualquer dúvida sobre o restante, deixe nos comentários ou email-me.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Funcao que recupera os dados do banco para apresentar ao usuário</span>
<span style="color: #003366; font-weight: bold;">function</span> recupera<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Updater</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'comentarios'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'adiciona_comentario.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O trecho acima define uma função que cria uma nova instância de Ajax.Updater, que fará uma chamada ao arquivo adiciona_comentario.php e usará a resposta para substituir o conteúdo da tag XHTML com ID &#8216;comentarios&#8217;. Ou seja, é essa função que ira carregar os comentários feitos na página.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Funcao que envia os dados do formulário para serem salvos no banco</span>
<span style="color: #003366; font-weight: bold;">function</span> envia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'adiciona_comentario.php'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
		method<span style="color: #339933;">:</span> <span style="color: #3366CC;">'post'</span><span style="color: #339933;">,</span>
		parameters<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;adiciona&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		onCreate<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'adiciona'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'enviando'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		onSuccess<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>transport<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'enviando'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'adiciona'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			recupera<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		onFailure<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Alguma coisa não deu certo...'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Este outro trecho define a função envia os dados do formulário para o arquivo adiciona_comentario. Aí é utilizado o objeto Ajax.Request, que é a implementação mais genérica do Prototype para Ajax.<br />
O que é passado para o objeto:</p>
<ol>
<li>O arquivo que receberá a requisição</li>
<li> Aqui vem o segundo parâmetro que é composto por vários subparâmetros
<ol>
<li>Método de envio: POST;</li>
<li>Variáveis enviadas: utilizo a função &#8216;serialize()&#8217; no formulário, ela transforma os dados dele em uma lista de variáveis, entendíveis pelo navegador e PHP;</li>
<li>Uma função callback que é disparada quando é criado a requisição. Uso ela para mostrar uma mensagem &#8216;Enviando&#8230;&#8217;;</li>
<li>Uma função callback que é disparada quando é concluído com sucesso a requisição. Ela esconde a mensagem mostrada anteriormente e chama a função &#8216;recupera()&#8217; para recarregar os comentários;</li>
<li>Por última uma função callback que é disparada quando ocorre um erro na requisição.</li>
</ol>
</li>
</ol>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Funcao que faz uma busca em Ajax e retorna os resultados como em um autocompletar</span>
<span style="color: #003366; font-weight: bold;">function</span> fazBusca<span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">new</span> Ajax.<span style="color: #660066;">Request</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'busca_comentario.php'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#123;</span>
		method<span style="color: #339933;">:</span> <span style="color: #3366CC;">'post'</span><span style="color: #339933;">,</span>
		parameters<span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'termo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		onCreate<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'resultados'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		onSuccess<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>transport<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'resultados'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">update</span><span style="color: #009900;">&#40;</span>transport.<span style="color: #660066;">responseText</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'resultados'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	onFailure<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Alguma coisa não deu certo...'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Aqui uma função que faz a busca pelos termos digitados. Utiliza o mesmo objeto da função anterior, o Ajax.Request, então não entrarei em detalhes.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Evento que é disparado quando o documento termina de carregar sua estrutura</span>
document.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;dom:loaded&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'enviando'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'carregando'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'resultados'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	recupera<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'busca'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">observe</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'keydown'</span><span style="color: #339933;">,</span> fazBusca<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Por ultimo utilizo a função &#8216;observe()&#8217; no elemento &#8216;document&#8217; para que após concluída o carregamento da página (não incluído aí o carregamento de possíveis imagens), execute alguns comandos:<br />
Com a função &#8216;hide()&#8217; escondo os elementos de aviso ao usuário;<br />
Com a última linha, faço com que sempre que uma tecla for pressionada (keydown) no elemento com ID &#8216;busca&#8217;, execute a função &#8216;fazBusca&#8217;.</p>
<p>Um bônus:</p>
<p>Muitas pessoas enfrentam problemas com codificação quando trabalham com AJAX, para poupar dores de cabeça é recomendado o uso de UTF8 tanto no seu editor de texto (na hora de criar os códigos), quanto nos header dos documentos e no banco de dados. Tendo certeza que está tudo em UTF8, você provavelmente não terá problemas. Só não esqueça de um detalhe: o <a title="Página do PHP" href="http://br.php.net/" onclick="pageTracker._trackPageview('/outgoing/br.php.net/?referer=');">PHP</a> não trabalha nativamente com UTF8, então, antes de usar qualquer função que trate uma string, use a função <a title="documentação da função utf8_decode" href="http://br.php.net/manual/pt_BR/function.utf8-decode.php" onclick="pageTracker._trackPageview('/outgoing/br.php.net/manual/pt_BR/function.utf8-decode.php?referer=');">utf8_decode</a> do PHP e depois, mas antes de salvar no banco de dados, utilize a função <a title="Documentação da função utf8_encode" href="http://br.php.net/manual/pt_BR/function.utf8-encode.php" onclick="pageTracker._trackPageview('/outgoing/br.php.net/manual/pt_BR/function.utf8-encode.php?referer=');">utf8_encode</a>. Isso será necessário até o lançamento do <a title="Unicode no PHP" href="http://www.php.net/~derick/meeting-notes.html" onclick="pageTracker._trackPageview('/outgoing/www.php.net/_derick/meeting-notes.html?referer=');">PHP 6</a>.</p>
<p><a title="Arquivos do post" href="http://geek.cauancabral.net/wp-content/uploads/2009/01/comentarios.zip" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/wp-content/uploads/2009/01/comentarios.zip?referer=');">Download de todos os arquivos do exemplo.</a><br />
obs.: descompacte os arquivos numa mesma pasta, em seguida crie um novo diretório chamado &#8216;lib&#8217; e mova o arquivo validation.class.php para ele.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; final</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/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/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><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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/01/14/ajax-com-prototype/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>25 erros de programação mais graves</title>
		<link>http://cauancabral.net/2009/01/13/25-erros-mais-graves/</link>
		<comments>http://cauancabral.net/2009/01/13/25-erros-mais-graves/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 18:33:18 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=85</guid>
		<description><![CDATA[Divulgada uma lista com os 25 erros de programação que mais causam prejuízos no mundo. <a href="http://cauancabral.net/2009/01/13/25-erros-mais-graves/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Foi divulgado pelo <a title="SANS Institute - Top 25 [en]" href="http://www.sans.org/top25errors/" onclick="pageTracker._trackPageview('/outgoing/www.sans.org/top25errors/?referer=');">SANS Institute[en]</a> uma lista com os 25 erros de programação que mais causam prejuízos no mundo. Esta lista foi elaborada por especialistas de mais de 30 instituições dos EUA e organizações internacionais de segurança digital.</p>
<div id="attachment_88" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-88" title="BSOD no braço" src="http://geek.cauancabral.net/wp-content/uploads/2009/01/bsod_no_braco-300x244.jpg" alt="tradicional erro de segurança" width="300" height="244" /><p class="wp-caption-text">um erro tradicional</p></div>
<p>A lista foi subdivida em três categorias: &#8220;Interação Insegura entre Componentes&#8221;, &#8220;Risco no Gerenciamento de Recursos&#8221; e &#8220;Defesa Porosa&#8221; &#8211; no original: Insecure Interaction Between Components, Risky Resource Management e Porous Defenses.</p>
<p>Há na lista falhas como possibilidade de injeção de códigos, utilização de algorítmos de criptografia defasado e transferência de dados sensíveis sem criptografia.</p>
<p>No <a title="Top 25 errors [en]" href="http://www.sans.org/top25errors/" onclick="pageTracker._trackPageview('/outgoing/www.sans.org/top25errors/?referer=');">artigo original[en]</a> há várias informações sobre os erros e comentários de renomadas empresas de segurança sobre a importância da lista.</p>
<p>Sem dúvida um texto que vale a pena para todo desenvolvedor.</p>
<p>via: <a title="Fonte da notícia" href="http://idgnow.uol.com.br/seguranca/2009/01/12/governo-e-empresas-dos-eua-listam-os-25-piores-erros-de-programacao/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/idgnow.uol.com.br/seguranca/2009/01/12/governo-e-empresas-dos-eua-listam-os-25-piores-erros-de-programacao/?referer=');">IDG NOW!</a></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/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/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/07/16/software-freedom-day-08/" rel="bookmark" class="crp_title">Software Freedom Day 08</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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2009/01/13/25-erros-mais-graves/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento rápido</title>
		<link>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/</link>
		<comments>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 22:41:27 +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[ágil]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/2008/09/21/desenvolvimento-rapido/</guid>
		<description><![CDATA[Últimamente está na moda a palavra &#8220;ágil&#8221;. Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil. E apesar do PHP fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens &#8230; <a href="http://cauancabral.net/2008/09/21/desenvolvimento-rapido/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Últimamente está na moda a palavra &#8220;ágil&#8221;.<br />
Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil.</p>
<p>E apesar do <a href="http://br.php.net" onclick="pageTracker._trackPageview('/outgoing/br.php.net?referer=');">PHP</a> fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens mais novas como Ruby ou Python, principalmente quando juntamos a estas seus grandes frameworks &#8211; Rails no caso do Ruby e Django no caso do Python.</p>
<p>Mas a comunidade PHP tem suas cartas na manga, vários frameworks agilizam o desenvolvimento tanto em aplicações simples como em aplicações sofisticadas.<br />
E são várias as opções. Tem para todos os gostos, nos próximo posts vou falar um pouco deles.</p>
<p>Hoje começo com o <a href="http://www.cakephp.org" onclick="pageTracker._trackPageview('/outgoing/www.cakephp.org?referer=');">CakePHP</a>:</p>
<p><span style="font-weight: bold;">Descrição:</span><br />
Compete de frente com o Rails. Possui uma base bem estruturada, código bem organizado, comunidade participativa e uma licensa flexivel. Seu grande destaque está no baker, que gera ações básicas (criar,ler,atualizar e apagar entradas) para uma tabela do banco de dados.</p>
<p><span style="font-weight: bold;">Como usa-lo?</span><br />
É muito fácil, basta ir a página <a href="http://cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">dele</a> e fazer o download do último lançamento. Recomendo a versão 1.2.xx , apesar de ser RC2 (candidata a estável) ela já está bem estável e possui vários melhoramentos em relação a versão 1.1.xx.<br />
Em seguida descompacte o arquivo onde achar melhor (dentro de seu servidor web) e pronto. Agora só falta você configurar o arquivo &#8220;/app/config/database.php&#8221;. Nele você encontra instruções de como inserir as informações para acessar o seu banco de dados, há até um exemplo de como fazer.<br />
Agora é só acessar, através do navegador, a pasta que você descompactou o CakePHP.</p>
<p><span style="font-weight: bold;">Onde encontrar material para estudo?</span><br />
Como comentei antes, o CakePHP possui uma comunidade bem participativa, mas a maioria não fala português, então você encontrará bastante informação em inglês, aqui listo alguns sites e blogs com informações sobre o tema, bons estudos:</p>
<ul>
<li><a href="http://cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/cakephp.org/?referer=');">CakePHP</a> &#8211; A página oficial, sempre com novidades (inglês)</li>
<li><a href="http://book.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/book.cakephp.org/?referer=');">The Cookbook</a> &#8211; O manual oficial do cake. Possui conteúdo para versão 1.1 e 1.2, sendo que a segunda esta sendo finalizada. Obrigatório. (em inglês com parte do conteúdo em português, só alterar no rodapé da página).</li>
<li><a href="http://api.cakephp.org/" onclick="pageTracker._trackPageview('/outgoing/api.cakephp.org/?referer=');">API for CakePHP</a> &#8211; A documentação das classes, métodos e funcionalidades do CakePHP. Não é muito rica em detalhes, mas está melhorando. Obrigatório. (inglês)</li>
<li><a href="http://lemoncake.wordpress.com/" onclick="pageTracker._trackPageview('/outgoing/lemoncake.wordpress.com/?referer=');">lemoncake</a> &#8211; Um blog com várias discussões sobre CakePHP e dicas/tutoriais de como usar recursos do Cake. Muito recomendado. (inglês).</li>
<li><a href="http://aranworld.com/article/161/cakephp-acl-tutorial-what-is-it" onclick="pageTracker._trackPageview('/outgoing/aranworld.com/article/161/cakephp-acl-tutorial-what-is-it?referer=');">aranworld</a> &#8211; Um blog que tem posts esporádicos a respeito do CakePHP, mas no link que vinculei, há uma série de posts sobre o sistema de controle de acesso do CakePHP, uma ferramente extremamente poderosa mas que pode parecer complicada de utilizar no inicio. Muito recomendado. (inglês)</li>
<li><a href="http://cakephp.com.br" onclick="pageTracker._trackPageview('/outgoing/cakephp.com.br?referer=');">CakePHP &#8211; Brasil</a> &#8211; Portal brasileiro sobre CakePHP, ótimo para quem não arrisca muito o inglês, possui dicas e até uma versão traduzida do manual. Muito recomendado. (português)</li>
</ul>
<p>E podem esperar que em breve haverá vários posts a respeito. Estou utilizando bastante o CakePHP e tenho gostado muito. Colocarei algumas dicas aqui logo logo.</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/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/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><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/17/sentiram-falta/" rel="bookmark" class="crp_title">Sentiram falta?</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2008/09/21/desenvolvimento-rapido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jogar Quake direto no Browser?</title>
		<link>http://cauancabral.net/2008/07/15/jogar-quake-direto-no-browser/</link>
		<comments>http://cauancabral.net/2008/07/15/jogar-quake-direto-no-browser/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 23:45:43 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[flashplayer]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opesource]]></category>
		<category><![CDATA[tamarin]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=39</guid>
		<description><![CDATA[Parece um absurdo, mas não é. A Fundação Mozilla está desenvolvendo uma Máquina Virtual que implementa o ECMAScript(linguagem que deu origem ao ActionScript do Flash, similar ao JavaScript) versão 4, e graças a idéia de um de seus desenvolvedores, será &#8230; <a href="http://cauancabral.net/2008/07/15/jogar-quake-direto-no-browser/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Parece um absurdo, mas não é.</p>
<p>A Fundação Mozilla está desenvolvendo uma Máquina Virtual que implementa o ECMAScript(linguagem que deu origem ao ActionScript do Flash, similar ao JavaScript) versão 4, e graças a idéia de um de seus desenvolvedores, será possível rodar aplicativos escritos no Muito Bom e também muito velho C. Sim, aquela linguagem que é preferida por pessoas como Linus Torvalds e Paulo Adonis.</p>
<p>Além do C, já é possível rodar aplicações Python com esta máquina virtual, e no futuro será possível utilizar várias outras linguagens.</p>
<p>Para provar o feito, a equipe do Tamarin rodou Quake e Zelda ( rodando em um emulador de Nintendo escrito em C ). Tudo funcionou, som e imagem, mas claro, a perfomance não é a mesma. Segundo o desenvolvedor, é aceitável.</p>
<p>Esta pode ser mais uma arma da Mozilla e uma carta na manga da Adobe para enfrentar a Microsoft e seu Silverlight+Visual Studio( que já permite a utilização de linguagen .NET ). Se isso vai gerar bons frutos, só na prática saberemos.</p>
<p>A grande notícia relacionada ao projeto, é que além de tornar possível rodar estas linguagens, o Tamarin poderá substituir o flashplayer nos navegadores, sendo uma alternativa Open Source ( e integrada ao navegador ).</p>
<p>Fontes: <a title="Web Gear" href="http://info.abril.com.br/blog/webgear/20080715_listar.shtml?94789" onclick="pageTracker._trackPageview('/outgoing/info.abril.com.br/blog/webgear/20080715_listar.shtml?94789&amp;referer=');">INFO Online</a>, <a title="Explicação do feito [en]" href="http://www.toolness.com/wp/?p=52" onclick="pageTracker._trackPageview('/outgoing/www.toolness.com/wp/?p=52&amp;referer=');">The Web at Toolness</a>[en], <a title="Página do projeto" href="http://www.mozilla.org/projects/tamarin/" onclick="pageTracker._trackPageview('/outgoing/www.mozilla.org/projects/tamarin/?referer=');">Tamarin Project[en]</a>.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/01/18/novidades/" rel="bookmark" class="crp_title">Novidades&#8230;</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/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</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/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/2008/07/15/jogar-quake-direto-no-browser/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Liberando tudo&#8230; (nem tudo)</title>
		<link>http://cauancabral.net/2008/05/28/liberando-tudo-nem-tudo/</link>
		<comments>http://cauancabral.net/2008/05/28/liberando-tudo-nem-tudo/#comments</comments>
		<pubDate>Thu, 29 May 2008 03:54:09 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[armarios]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=33</guid>
		<description><![CDATA[Como prometido, pretendo falar a qualquer momento sobre programação em ActionScript 3, esta linguagem que é vinculada ao Flash, Flex e agora ao Air, todos da Adobe. Antes de começar, irei disponibilizar um sistema que iniciei e não terminei, feito &#8230; <a href="http://cauancabral.net/2008/05/28/liberando-tudo-nem-tudo/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como prometido, pretendo falar a qualquer momento sobre programação em ActionScript 3, esta linguagem que é vinculada ao Flash, Flex e agora ao Air, todos da Adobe.</p>
<p>Antes de começar, irei disponibilizar um sistema que iniciei e não terminei, feito puramente em AS3.0. O projeto consistia em um sistema para auxiliar no cadastramento e recadastramento dos armários administrados pelo <a title="CACOM - UFMS" href="http://www.ufms.br/cacom" onclick="pageTracker._trackPageview('/outgoing/www.ufms.br/cacom?referer=');">Centro Acadêmico de Ciência da Computação da UFMS</a>. Ele começou como exercício de estudo meu e de alguns amigos, usando ActionScript 2, mas logo no início todos desanimaram, onde eu fui a única excessão. Como já trabalhava com AS2 e tinha curiosidade de mexer com AS3 resolvi reescrever tudo o que havíamos feito usando AS3 e implementar o que faltava. Até que cheguei no ponto onde necessitava de uma linguagem externa para manipular um arquivo XML.</p>
<p>Por questões de infra-estrutura( local onde o sistema rodaria ), optei por usar o Java, e pedi a um amigo que fizesse a implementação. Ele o fez, mas eu acabei não integrando ao sistema pois já havíamos feito todo o trabalho daquele ano manualmente.</p>
<p>Agora estou liberando todas as classes que utilizei para que quem quiser ajudar, ou estudar possa fazer.</p>
<p>Bom proveito.</p>
<p>ps.: Estarei explicando mais pra frente o que cada classe faz.<br />
ps2.: A versão do SuSE que utilizei no primeiro contato com um GNU/Linux foi 8.2</p>
<p><a rel="attachment wp-att-36" href="http://geek.cauancabral.net/2008/05/28/liberando-tudo-nem-tudo/sistema-armarios/" onclick="pageTracker._trackPageview('/outgoing/geek.cauancabral.net/2008/05/28/liberando-tudo-nem-tudo/sistema-armarios/?referer=');">sistema-armarios</a></p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/01/18/novidades/" rel="bookmark" class="crp_title">Novidades&#8230;</a></li><li><a href="http://cauancabral.net/2008/11/19/google-analytics-e-adobe-facilitando-a-sua-vida/" rel="bookmark" class="crp_title">Google Analytics e Adobe &#8211; facilitando a sua vida</a></li><li><a href="http://cauancabral.net/2008/02/25/falta-de-tempo/" rel="bookmark" class="crp_title">Falta de tempo&#8230;</a></li><li><a href="http://cauancabral.net/2008/05/15/vida-pos-vista/" rel="bookmark" class="crp_title">Vida pós-Vista</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/2008/05/28/liberando-tudo-nem-tudo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diário de bordo</title>
		<link>http://cauancabral.net/2008/05/14/diario-de-bordo/</link>
		<comments>http://cauancabral.net/2008/05/14/diario-de-bordo/#comments</comments>
		<pubDate>Wed, 14 May 2008 04:35:04 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[anambi]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[phpms]]></category>
		<category><![CDATA[testfest]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/?p=31</guid>
		<description><![CDATA[Tentando manter este espaço ativo, irei relatar minhas últimas atividades, e talvez as futuras. Como comentei no post anterior, terminei a pouco o novo site para a Empresa de Análise Ambiental &#8211; Anambi, e como fiz a página utilizando o &#8230; <a href="http://cauancabral.net/2008/05/14/diario-de-bordo/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tentando manter este espaço ativo, irei relatar minhas últimas atividades, e talvez as futuras.</p>
<p>Como comentei no post anterior, terminei a pouco o novo site para a <a title="Anambi, Análise Ambiental" href="http://www.anambi.com.br" onclick="pageTracker._trackPageview('/outgoing/www.anambi.com.br?referer=');">Empresa de Análise Ambiental &#8211; Anambi</a>, e como fiz a página utilizando o Adobe Flash e ActionScript2 ( não utilizei o ActionScript3 por conta do flashplayer ter de ser mais novo e reduzir o número de possíveis clientes ), os problemas que encontrei e como contornei. Acredito que será uma boa troca de experiência ( tem até uma parte de SEO, gostaria de saber se o que fiz é o melhor ou não ).</p>
<p>O <a title="PHPMS" href="http://www.phpms.org" onclick="pageTracker._trackPageview('/outgoing/www.phpms.org?referer=');">PHPMS</a> organizou o TestFest que havia comentado, e estive lá com a rapaziada. Foi divertido, apesar de não termos conseguido fazer muitos testes ( o sistema de testes é impressionante ), conseguimos discutir bastante sobre as funcionalidades do PHP 5.3. Tiramos algumas fotos e fiz um pequeno video, que estou upando para o YouTube neste exato momento. Se estiver interessado em ver, o enderço para as fotos é: <a title="Flickr do Grupo" href="http://www.flickr.com/photos/26464783@N02/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/26464783_N02/?referer=');">http://www.flickr.com/photos/26464783@N02/</a> e para os videos veja em: <a title="Canal no YouTube do PHPMS" href="http://br.youtube.com/phpms" onclick="pageTracker._trackPageview('/outgoing/br.youtube.com/phpms?referer=');">http://br.youtube.com/phpms</a>.</p>
<p>Por falar em video, trabalhar com video foi extremamente complicado pra mim. Como não tenho intenção nenhuma de mexer com esta área, não quero comprar nem aprender a usar programas complexos para edição de videos, e achar uma programa simples para isso é uma tarefa quase impossível, tanto no Windows quanto no Linux. Estou usando o openSUSE e o Windows Vista Business, e em ambos os sistemas tive muita dificuldade para conseguir fazer uma edição dos videos. Na verdade, no openSUSE eu nem consegui faze-lo. O programa simplesmente parava de responder toda vez que tentava adicionar um arquivo. Já no Windows eu tive de baixar o Nero e utilizar o Vision, já que o Movie Maker insistia em travar toda vez que tentava &#8220;compilar&#8221; o projeto.</p>
<p>Alguém aí já trabalhou com videos no Linux? Estou tentando abandonar o Windows de vez e uma das coisas que ainda me prende nele é descarregar minha filmadora ( uma Sony DCR-DVD, sem porta FireWare, que por acaso só tem driver para Windows ) e um programa para trabalhar com os videos descarregados. Alguem saberia um programa para fazer isso?</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/05/15/vida-pos-vista/" rel="bookmark" class="crp_title">Vida pós-Vista</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/2008/12/15/youtube-symphony/" rel="bookmark" class="crp_title">Youtube Symphony</a></li><li><a href="http://cauancabral.net/2008/01/04/sem-assunto-2/" rel="bookmark" class="crp_title">Sem assunto &#8211; parte 2</a></li><li><a href="http://cauancabral.net/2009/02/06/novidades-de-janeiro/" rel="bookmark" class="crp_title">Novidades de janeiro</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2008/05/14/diario-de-bordo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
