<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Diego Doná &#124; Designer, Developer</title>
	<atom:link href="http://diegodonah.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://diegodonah.wordpress.com</link>
	<description>O caderno de rascunho virtual de um garoto que tem muito pra rabiscar.</description>
	<lastBuildDate>Fri, 04 Nov 2011 02:49:07 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='diegodonah.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/2755813db7ad99e861ea3d3b27435d0e?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Diego Doná &#124; Designer, Developer</title>
		<link>http://diegodonah.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://diegodonah.wordpress.com/osd.xml" title="Diego Doná &#124; Designer, Developer" />
	<atom:link rel='hub' href='http://diegodonah.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Dicas de Netbeans com PHP</title>
		<link>http://diegodonah.wordpress.com/2011/10/12/dicas-de-netbeans-com-php/</link>
		<comments>http://diegodonah.wordpress.com/2011/10/12/dicas-de-netbeans-com-php/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 17:22:23 +0000</pubDate>
		<dc:creator>diegodonah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpdoc]]></category>

		<guid isPermaLink="false">http://diegodonah.wordpress.com/?p=766</guid>
		<description><![CDATA[Ultimamente, venho estudando mais PHP e OOP. Por necessidade, encontrei algumas dicas de como facilitar a minha vida com a OOP do PHP. Por exemplo, aprendi que você consegue ter uma leve &#8220;tipagem&#8221; de parâmetros de uma função! Isso já ajuda bastante. Também aprendi como fazer o autocomplete do Netbeans te ajudar um pouco mais, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=766&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ultimamente, venho estudando mais PHP e OOP. Por necessidade, encontrei algumas dicas de como facilitar a minha vida com a OOP do PHP.</p>
<p>Por exemplo, aprendi que você consegue ter uma leve &#8220;tipagem&#8221; de parâmetros de uma função! Isso já ajuda bastante.</p>
<p>Também aprendi como fazer o autocomplete do Netbeans te ajudar um pouco mais, usando o PHPDoc.</p>
<p><span id="more-766"></span></p>
<h2>Estrutura</h2>
<p>Neste artigo, vamos lidar com a seguinte estrutura de pastas:</p>
<p><strong>Sua pasta root</strong><br />
- Classes (pasta)<br />
&#8212;- Pessoa.php<br />
- index.php</p>
<p>A nossa classe será simples, apenas 2 campos (nome, dtnascimento) &#8211; cada um com seus getters e setters.</p>
<p>Ficará mais ou menos assim:</p>
<pre class="brush: php;">
&lt;?php

/**
 * Description of Pessoa
 *
 * @author Diego
 *
 */
class Pessoa {

    private $nome;
    private $dtnascimento;

    public function getNome() {
        return $this-&gt;nome;
    }

    public function setNome($nome) {
        $this-&gt;nome = $nome;
    }

    public function getDtnascimento() {
        return $this-&gt;dtnascimento;
    }

    public function setDtnascimento($dtnascimento) {
        $this-&gt;dtnascimento = $dtnascimento;
    }

    function __construct($dateTime = null) {

        if($dateTime == null)
            $dateTime = new DateTime();

        $this-&gt;setDtnascimento($dateTime);

    }

}

?&gt;
</pre>
<h2>Autocomplete (Intelisense) com netbeans e PHPDoc</h2>
<p>Já se pegou tentando usar a orientação a objeto do PHP? Quando você sai de uma linguagem fortemente tipada (Java, C#) e cria um método em PHP, a primeira coisa que você se assusta é em como usá-lo.</p>
<p>Óbvio, estou falando do <del>operador -&gt; que é bem mais xarope de usar do que o .</del> fato do PHP não ter tipagem. Ou seja, se o seu método <strong>deveria</strong> retornar um objeto da classe DateTime, fica complicado fazer o seguinte:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/01.png"><img class="aligncenter size-full wp-image-767" title="01" src="http://diegodonah.files.wordpress.com/2011/10/01.png?w=451&#038;h=136" alt="" width="451" height="136" /></a></p>
<p>Sem sugestões. Ou seja, a ferramenta não vai te ajudar. Mas não se desespere (nem xingue)! Com PHPDoc, podemos dar uma melhorada na situação.</p>
<p>Basta ir até a classe e, no getter, adicionar o PHPDoc:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/02.png"><img class="aligncenter size-full wp-image-768" title="02" src="http://diegodonah.files.wordpress.com/2011/10/02.png?w=318&#038;h=112" alt="" width="318" height="112" /></a></p>
<p>Sim, o PHPDoc é essa porrada de asteriscos e o @return (mas não limitado a isso!). No caso, especificamos que o retorno será a classe DateTime.</p>
<p>Voltemos ao exemplo anterior, tentando autocompletar o getDtnascimento:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/03.png"><img class="aligncenter size-full wp-image-769" title="03" src="http://diegodonah.files.wordpress.com/2011/10/03.png?w=500&#038;h=213" alt="" width="500" height="213" /></a>Bem melhor, hein? Isso também vale para <strong>suas</strong> classes. Você pode ter um método que retorne &#8220;Porco&#8221;, &#8220;Linguica&#8221; ou qualquer outra classe que exista.</p>
<h2>Tipagem dos parâmetros</h2>
<p>Outro &#8216;probleminha&#8217; da falta de tipagem do PHP: Num método que planejamos receber DateTime, podemos acabar com uma string ou int.</p>
<p>Em outras <em>imagens</em>, isso:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/04.png"><img class="aligncenter size-full wp-image-771" title="04" src="http://diegodonah.files.wordpress.com/2011/10/04.png?w=440&#038;h=66" alt="" width="440" height="66" /></a>Vai gerar isso (se você usar o XDEBUG):</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/05.png"><img class="aligncenter size-full wp-image-772" title="05" src="http://diegodonah.files.wordpress.com/2011/10/05.png?w=500&#038;h=69" alt="" width="500" height="69" /></a></p>
<p>Mas não tema, com PHP <del>sempre tem uma gambiarra</del> não há problema! Nós podemos tipar o que o método/função espera:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/06.png"><img class="aligncenter size-full wp-image-773" title="06" src="http://diegodonah.files.wordpress.com/2011/10/06.png?w=495&#038;h=43" alt="" width="495" height="43" /></a></p>
<p>Agora, nós temos até o intelisense do netbeans para nos dar a dica que o método espera um DateTime. Ainda é possível inserir um número no método, mas isso vai gerar um erro fatal:</p>
<blockquote><p><span style="font-size:xx-small;">Catchable fatal error: Argument 1 passed to Pessoa::setDtnascimento() must be an instance of DateTime, integer given, called in E:\ServidorPHP\Apache2\htdocs\Aprendizado\OOPArticle\index.php on line 13 and defined in E:\ServidorPHP\Apache2\htdocs\Aprendizado\OOPArticle\Classes\Pessoa.php on line <em>30</em></span></p></blockquote>
<p>Pelo menos é bem descritivo. Já sabemos que passamos um valor errado, em qual método e o que ele espera realmente.</p>
<h2>Getters and Setters</h2>
<p>Última díca rápida! O Netbeans pode gerar automaticamente para você os getters and setters da classe. O problema é que ele fica um pouco escondido.</p>
<p>Basta ir até o arquivo da classe e apertar ALT + Insert. Surgirá um menu de contexto com as opções:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/07.png"><img class="aligncenter size-full wp-image-776" title="07" src="http://diegodonah.files.wordpress.com/2011/10/07.png?w=500&#038;h=338" alt="" width="500" height="338" /></a>Tchans! Basta escolher os campos que você deseja gerar e pronto:</p>
<p><a href="http://diegodonah.files.wordpress.com/2011/10/08.png"><img class="aligncenter size-full wp-image-777" title="08" src="http://diegodonah.files.wordpress.com/2011/10/08.png?w=451&#038;h=384" alt="" width="451" height="384" /></a></p>
<p>Achei interessante citar, pois esse menu fica meio escondido no netbeans com PHP ;).</p>
<h2>Referências e fonte de estudo:</h2>
<ul>
<li><a href="http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/" target="_blank">NetTuts+</a></li>
<li><a href="http://www.edmondscommerce.co.uk/netbeans/netbeans-autocomplete-on-class-properties-using-phpdoc/" target="_blank">edmondscommerce</a></li>
<li>www.google.com.br  (=P)</li>
</ul>
<h2>Passando a régua e fechando a conta</h2>
<p>São algumas dícas que eu encontrei pra me ajudar com o PHP! Espero que sejam úteis para você também.</p>
<p>Até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diegodonah.wordpress.com/766/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diegodonah.wordpress.com/766/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diegodonah.wordpress.com/766/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=766&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diegodonah.wordpress.com/2011/10/12/dicas-de-netbeans-com-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>-22.724977 -47.647601</georss:point>
		<geo:lat>-22.724977</geo:lat>
		<geo:long>-47.647601</geo:long>
		<media:content url="http://0.gravatar.com/avatar/e22a87ec503b23850027dc3e913fcabc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Doná</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/01.png" medium="image">
			<media:title type="html">01</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/02.png" medium="image">
			<media:title type="html">02</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/03.png" medium="image">
			<media:title type="html">03</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/04.png" medium="image">
			<media:title type="html">04</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/05.png" medium="image">
			<media:title type="html">05</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/06.png" medium="image">
			<media:title type="html">06</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/07.png" medium="image">
			<media:title type="html">07</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/10/08.png" medium="image">
			<media:title type="html">08</media:title>
		</media:content>
	</item>
		<item>
		<title>Encontrar todos os arquivos e pastas de um diretório</title>
		<link>http://diegodonah.wordpress.com/2011/09/11/encontrar-todos-os-arquivos-e-pastas-de-um-diretorio/</link>
		<comments>http://diegodonah.wordpress.com/2011/09/11/encontrar-todos-os-arquivos-e-pastas-de-um-diretorio/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 17:44:32 +0000</pubDate>
		<dc:creator>diegodonah</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[diego doná]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[diretorio]]></category>
		<category><![CDATA[função]]></category>
		<category><![CDATA[pastas]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scandir]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://diegodonah.wordpress.com/?p=762</guid>
		<description><![CDATA[De volta ao PHP (de novo e outra vez). Dessa vez eu precisei de uma função que me listasse todos os arquivos e diretórios de um determinado caminho. De cara eu encontrei o scandir. Só que ele listaria apenas a primeira &#8220;camada&#8221; de arquivos. Quero mais! Queria uma função que me permitisse ver todos os [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=762&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>De volta ao PHP (de novo e outra vez).</p>
<p>Dessa vez eu precisei de uma função que me listasse todos os arquivos e diretórios de um determinado caminho.</p>
<p><span id="more-762"></span></p>
<p>De cara eu encontrei o <a href="http://php.net/manual/en/function.scandir.php" target="_blank">scandir</a>. Só que ele listaria apenas a primeira &#8220;camada&#8221; de arquivos.</p>
<h2>Quero mais!</h2>
<p>Queria uma função que me permitisse ver todos os arquivos e pastas presentes num diretório, entrando em cada pasta existente desde a raiz. Por ex:</p>
<ul>
<li>Pasta BLA</li>
</ul>
<ul>
<li>Arquivo.php</li>
<li>imagem.jpg</li>
<li><strong>Nova Pasta</strong></li>
</ul>
<ul>
<li><span style="color:#ff0000;">readme.txt</span></li>
<li><span style="color:#ff0000;">formatacao.css</span></li>
</ul>
<li><strong>Outra Pasta</strong></li>
<ul>
<li><a href="http://www.youtube.com/watch?v=9Ky7f62fZrc&amp;feature=player_detailpage#t=259s" target="_blank"><span style="color:#ff0000;">OutroGato.txt</span></a></li>
</ul>
<p>Usar o scandir só me listou os nomes das pastas e não os arquivos dentro dela.</p>
<h2>Então faça!</h2>
<p>O algoritmo é simples:</p>
<ul>
<li>Pegar todos os arquivos de um caminho</li>
<li>Jogar para um array</li>
<li>Verificar se algum dos itens do array é uma pasta</li>
</ul>
<ul>
<li><span style="color:#ff0000;">Se for, criar um array para a nova pasta</span></li>
<li><span style="color:#ff0000;">Chamar a função recursivamente para preencher o array com os arquivos e pastas</span></li>
</ul>
<li>Retornar o array</li>
<p>Quando chamamos o scandir, seguindo a estrutura apresentada de pastas apresentadas antes, teremos um array com os seguintes dados:</p>
<p>[0]Arquivo.php (string)<br />
[1]imagem.jpg (string)<br />
[2]Nova Pasta (string)<br />
[3]Outra Pasta (string)</p>
<p>Como &#8220;Nova Pasta&#8221; e &#8220;Outra Pasta&#8221; são pastas (DUH), elas podem conter N itens dentro delas, por isso transformamos o item num array.</p>
<p>Chamamos a função recursivamente pois já temos o comportamento da função pronto (pegue os arquivos e retorne), só não sabemos quantas pastas encontraremos no caminho.</p>
<p>Se ela não for chamada recursivamente, apenas encontraremos um nível de pastas abaixo da inicial.</p>
<h2>Hora do código!</h2>
<p>Aqui vai&#8230;</p>
<pre class="brush: php;">

            function GetDirectoriesAndFiles($dirPath)
            {
                //pega todos os arquivos e pastas do diretório
                $files = scandir($dirPath);

                //vamos olhar em um por um
                foreach ($files as $key =&gt; $file)
                {

                    //se for a pasta ou diretório corrente,
                    //remova e pule pra próxima
                    if ($file == '..' || $file == '.')
                    {
                        unset($files[$key]);
                        continue;
                    }

                    //diretório + arquivo atual
                    $currentDirPath = $dirPath.&quot;\\&quot;.$file;

                    //vendo se é um diretorio
                    //se for, precisamos pegar os arquivos e pastas dele tbem
                    if(is_dir($currentDirPath))
                    {
                        //lembrando do nome atual
                        $dirName = $file;
                        //transforma em array (primeiro item é o nome do dir)
                        $file = array($dirName);
                        //pegando todos os arquivos e pastas nele... (recursivo)
                        $file[] = GetDirectoriesAndFiles($currentDirPath);

                        //destrói o item original do array
                        unset ($files[$key]);
                        //coloca o novo array no lugar,
                        //com os arquivos e pastas encontrados
                        $files[$key] = $file;
                    }

                }

                return $files;
            }
</pre>
<p>Para testar você pode colocar essa função num arquivo que tenha pastas no mesmo nível e rodar. Ex:</p>
<pre class="brush: php;">
            echo &quot;&lt;pre&gt;&quot;;
            echo print_r(GetDirectoriesAndFiles(__DIR__));
            echo &quot;&lt;/pre&gt;&quot;;
</pre>
<p>É isso! Agora você decide o que fazer com o conteúdo do array. Qualquer coisa, basta mandar um comentário.</p>
<p>Passa a régua e fecha a conta!</p>
<p>Até mais.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diegodonah.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diegodonah.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diegodonah.wordpress.com/762/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=762&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diegodonah.wordpress.com/2011/09/11/encontrar-todos-os-arquivos-e-pastas-de-um-diretorio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>-22.724977 -47.647601</georss:point>
		<geo:lat>-22.724977</geo:lat>
		<geo:long>-47.647601</geo:long>
		<media:content url="http://0.gravatar.com/avatar/e22a87ec503b23850027dc3e913fcabc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Doná</media:title>
		</media:content>
	</item>
		<item>
		<title>Jedi me &#8211; 2011</title>
		<link>http://diegodonah.wordpress.com/2011/07/18/jedi-me-2011/</link>
		<comments>http://diegodonah.wordpress.com/2011/07/18/jedi-me-2011/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 23:44:35 +0000</pubDate>
		<dc:creator>diegodonah</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[jogo rápido]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[diego doná]]></category>
		<category><![CDATA[diversao]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[jedi]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[sabre de luz]]></category>

		<guid isPermaLink="false">http://diegodonah.wordpress.com/?p=757</guid>
		<description><![CDATA[Minha camisa é vermelha, não uso cheat pra te arrebentar :D Tinha esquecido como era gostoso mexer com o photoshop e jedificar uma situação!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=757&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Minha camisa é vermelha, não uso cheat pra te arrebentar :D</p>
<p>Tinha esquecido como era gostoso mexer com o photoshop e jedificar uma situação!</p>
<div id="attachment_758" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-758 " title="Doná Jedi 2011" src="http://diegodonah.files.wordpress.com/2011/07/edt_sam_0560.jpg?w=500&#038;h=538" alt="Doná Jedi 2011 " width="500" height="538" /><p class="wp-caption-text">Sabre de luz verde = keep distance for your safety</p></div>
<p style="text-align:center;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diegodonah.wordpress.com/757/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diegodonah.wordpress.com/757/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diegodonah.wordpress.com/757/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=757&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diegodonah.wordpress.com/2011/07/18/jedi-me-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>-22.724977 -47.647601</georss:point>
		<geo:lat>-22.724977</geo:lat>
		<geo:long>-47.647601</geo:long>
		<media:content url="http://0.gravatar.com/avatar/e22a87ec503b23850027dc3e913fcabc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Doná</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/07/edt_sam_0560.jpg" medium="image">
			<media:title type="html">Doná Jedi 2011</media:title>
		</media:content>
	</item>
		<item>
		<title>Comunicação e interação entre janelas com Javascript</title>
		<link>http://diegodonah.wordpress.com/2011/07/08/comunicacao-e-interacao-entre-janelas-com-javascript/</link>
		<comments>http://diegodonah.wordpress.com/2011/07/08/comunicacao-e-interacao-entre-janelas-com-javascript/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 21:38:26 +0000</pubDate>
		<dc:creator>diegodonah</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[diego doná]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[referencia entre janelas]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://diegodonah.wordpress.com/?p=746</guid>
		<description><![CDATA[Fala galera! Sumi por uns tempos devido a provas na faculdade e um super projeto que demos o sangue pra terminar no prazo. Some isso a mais algumas aulinhas de CFC (9, cada uma de 5 horas) e desconte o que sobrar do meu banco de horas como blogueiro. =D Na execução do projeto, precisávamos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=746&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Fala galera!</p>
<p>Sumi por uns tempos devido a provas na faculdade e um super projeto que demos o sangue pra terminar no prazo.</p>
<p>Some isso a mais algumas aulinhas de CFC (9, cada uma de 5 horas) e desconte o que sobrar do meu banco de horas como blogueiro. =D</p>
<p>Na execução do projeto, precisávamos fazer com que duas janelas de HTML comunicassem uma com a outra. Depois de pensar um pouco, arranjei uma solução.</p>
<p><span id="more-746"></span></p>
<h1>O objeto Window</h1>
<p>Acho que é a primeira coisa que usamos no javascript, mesmo sem saber. Ou vai dizer que você nunca mandou um <em>alert(&#8216;Oi Mundo&#8217;);</em> ?</p>
<blockquote><p>Consulte também: <a href="http://www.criarweb.com/artigos/331.php">Referência sobre a Window</a></p></blockquote>
<p>O importante para nós é que tudo que todo o javascript publico / global de uma página, pode ser acessado através da referência da janela.</p>
<p>Por exemplo:</p>
<pre class="brush: jscript;">
&lt;html&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;

		var a = 12;

		alert(this.a);

	&lt;/script&gt;

	&lt;body&gt;
		Asd!
	&lt;/body&gt;

&lt;/html&gt;
</pre>
<p>Bem bobo (e simplificado), mas isso te dá muito poder. Você pode tratar cada janela como um objeto e acessar o que precisar!</p>
<blockquote><p>Consulte também: <a href="http://snook.ca/archives/javascript/global_variable">Global Variables in JavaScript</a> (em inglês)</p></blockquote>
<h1>Mantendo a referência de uma janela</h1>
<p>Vamos dizer que, ao clicar num determinado botão da página &#8220;A&#8221;, o seu usuário terá uma nova janela filha (&#8220;B&#8221;) aberta.</p>
<p>E se você precisar executar, através da &#8220;A&#8221;, uma atualização na &#8220;B&#8221;? Sabendo que podemos simplesmente acessar o que está no &#8220;objeto&#8221;, fica fácil! É só acessar o objeto B e invocar a função.</p>
<p>Toda vez que abrimos uma janela (<em>window.open</em>, certo?) temos um retorno: a referência da janela. Vejamos:</p>
<p><strong>Página A (teste1.html):</strong></p>
<pre class="brush: jscript;">
&lt;html&gt;
	&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;

		//para guardar a referência da janela
		var B;

		function VisualizarHora()
		{
			//se for NULL ou foi fechada, criamos a dita cuja
			if(B == null || B.closed)
			{
				B = window.open(&quot;teste2.html&quot;);
			}

			//como vamos acessar os elementos de um objeto janela,
			//precisamos garantir que o objeto já está pronto para ser usado
			//por isso usamos o LOAD
			$(B).load(function(){

				//chama a função novamente, quando a janela B tiver sido carregada completamente
				VisualizarHora();
				return;

			})

			//se chegou até aqui, podemos chamar a função com seguraça
			//(a janela já está carregada e temos a referência)
			B.InserirHora();

		}

	&lt;/script&gt;

	&lt;body&gt;

		&lt;a href=&quot;javascript:VisualizarHora();&quot;&gt; Visualizar hora&lt;/a&gt;

	&lt;/body&gt;

&lt;/html&gt;
</pre>
<p>E o código da página B:</p>
<p><strong>Página B (teste2.html):</strong></p>
<pre class="brush: jscript;">
&lt;html&gt;
	&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;

		function InserirHora()
		{
			var date = new Date();
			$(&quot;#area&quot;).append(date.getTime() + &quot;&lt;br /&gt;&quot;);
		}

	&lt;/script&gt;

	&lt;body&gt;

		&lt;div id=&quot;area&quot;&gt;&lt;/div&gt;

	&lt;/body&gt;

&lt;/html&gt;
</pre>
<p>Precisei usar algo de JQuery, em especial o <em>load</em>, para evitar que tentássemos acessar a janela enquanto ela ainda não estivesse carregada.</p>
<h1>E com Iframes?</h1>
<p>Parece mais fácil, mas é um pouco xarope. Tem algumas pegadinhas que são mortais pro código funcionar ou não:</p>
<p><strong>Página C (teste3.html):</strong></p>
<pre class="brush: jscript;">
&lt;!-- http://forum.jquery.com/topic/calling-function-inside-an-iframe --&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Janela C&lt;/title&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;&gt;&lt;/script&gt;

    &lt;script type=&quot;text/javascript&quot;&gt;

        $(document).ready(function () {

            $(&quot;#btnOk&quot;).click(function () {

                //pega o frame
                var mf = $(&quot;#meuFrame&quot;);
                //buscando no conteúdo do frame
                $(mf).contents().find(&quot;div&quot;).css(&quot;background-color&quot;, &quot;#FF0000&quot;);

                //recuperando o Document do frame
                var mfDoc = $(mf)[0].contentWindow.document;
                //chamando método
                mfDoc.Falar();

            });

        });

    &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
    &lt;iframe id='meuFrame' src=&quot;teste4.html&quot; width=&quot;100%&quot; height=&quot;300&quot;&gt;&lt;/iframe&gt;

    &lt;input type=&quot;button&quot; id=&quot;btnOk&quot; value=&quot;OK&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>Página D (teste4.html):</strong></p>
<pre class="brush: jscript;">
&lt;html&gt;

&lt;head&gt;
&lt;title&gt;Janela D&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;

    function Falar() {
        alert('Falei...')
    }

    document.Falar = Falar;

&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id=&quot;teste&quot;&gt;Testando! &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>A variável &#8220;mf&#8221; contêm o iframe em si. O método &#8220;<em>.contents()</em>&#8221; nos permite acessar todo o conteúdo. Fazendo uma busca (<em>.find()</em>) e inserimos um estilo de forma dinâmica.</p>
<p>Para executar a função, nós pegamos o document da página (variável mfDoc). Importante notar que nos, explicitamente, associados a função ao <em>document</em> na página D, se não a função não ficará acessível.</p>
<h1>Notas finais e fechando a conta</h1>
<p>É um artigo bem rápido com algumas dícas que eu acho importantes. Tudo aqui foi demonstrado de uma maneira bem simples, mas você pode utilizar isso em camadas mais complexas.</p>
<p><strong>Atenção!</strong></p>
<p>Os testes foram feitos no FireFox 3.6.18, IE8 e Chrome 12.0.742.112. Acredito que funcione bem nos navegadores modernos &#8211; acredito que vá falhar catastróficamente num IE6 da vida :D.</p>
<p><span style="text-decoration:underline;">Os códigos não tiveram um comportamento legal no Chrome, quando eu utilizei as páginas diretamente no sistema de arquivos</span>, sem colocar no meu webserver local. Parece que ele é um tanto paranóico. Quando rodei no servidor local do Visual Studio, tudo funcionou.</p>
<p>Foi essa a jogada que tivemos para o projeto. Espero que seja útil para você também! Qualquer erro, correção, é só mandar um comentário.</p>
<p>Até mais!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diegodonah.wordpress.com/746/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diegodonah.wordpress.com/746/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diegodonah.wordpress.com/746/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=746&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diegodonah.wordpress.com/2011/07/08/comunicacao-e-interacao-entre-janelas-com-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>-22.724977 -47.647601</georss:point>
		<geo:lat>-22.724977</geo:lat>
		<geo:long>-47.647601</geo:long>
		<media:content url="http://0.gravatar.com/avatar/e22a87ec503b23850027dc3e913fcabc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Doná</media:title>
		</media:content>
	</item>
		<item>
		<title>SQL Server e Stored Procedures &#8211; Tratando exceções</title>
		<link>http://diegodonah.wordpress.com/2011/04/23/sql-server-e-stored-procedures-tratando-excecoes/</link>
		<comments>http://diegodonah.wordpress.com/2011/04/23/sql-server-e-stored-procedures-tratando-excecoes/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 17:55:09 +0000</pubDate>
		<dc:creator>diegodonah</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[diego doná]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server 2008]]></category>
		<category><![CDATA[stored procedure]]></category>

		<guid isPermaLink="false">http://diegodonah.wordpress.com/?p=723</guid>
		<description><![CDATA[Complicando um pouco Seguindo a estrutura de trabalho do post anterior, vamos brincar um pouco com lançamento e tratamento de erros. Lançando mensagens e exceções Usando .NET, nós podemos usar o comando &#8220;Throw&#8221; para lançar exceções conforme achamos necessário. O Sql também pode fazer isso, usando o comando RAISERROR. RAISERROR é usado para devolver mensagens [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=723&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Complicando um pouco</h2>
<p>Seguindo a estrutura de trabalho do <a href="http://diegodonah.wordpress.com/2011/04/22/sql-server-e-stored-procedures/">post anterior</a>, vamos brincar um pouco com lançamento e tratamento de erros.</p>
<h2><span id="more-723"></span>Lançando mensagens e exceções</h2>
<p>Usando .NET, nós podemos usar o comando &#8220;Throw&#8221; para lançar exceções conforme achamos necessário.</p>
<p>O Sql também pode fazer isso, usando o comando <strong>RAISERROR</strong>.</p>
<blockquote><p>RAISERROR é usado para devolver mensagens a aplicativos usando o mesmo formato que um erro do sistema ou mensagem de aviso gerada pelo Mecanismo de banco de dados do SQL Server.</p></blockquote>
<p>Seus parâmetros básicos são:</p>
<ol>
<li>Id da mensagem (caso uma mensagem já esteja registrada no banco)</li>
<li>Mensagem do erro (caso não seja registrada no banco)</li>
<li>Severidade do erro</li>
<li>Estado</li>
</ol>
<p>Se você informar o Id de mensagem, não precisa passar a mensagem e vice versa.</p>
<p>A severidade do erro indicará quando cairemos num bloco de exceção ou se apenas mostraremos a mensagem. Se for menor ou igual a 10, apenas exibiremos a mensagem. Se for maior que 10, indicamos que o erro é grave e geramos exceção.</p>
<p>Vamos forçar alguns erros e ver o que acontece, na prática:</p>
<pre class="brush: sql;">
CREATE PROCEDURE usp_GenerateError
AS BEGIN

	DECLARE @i int
	SET @i = 9

	DECLARE @Msg VARCHAR(40)

	WHILE @i &lt; 14
	BEGIN

		IF @i &lt; 11
		BEGIN
			set @Msg = 'Erro...'
		END
		ELSE
		BEGIN
			set @Msg = 'Erro grave! Fujam pras montanhas!'
		END

		print @i

		RAISERROR(@Msg,@i,1)
		set @i = @i + 1

	END

END
</pre>
<p>Executando essa SP:</p>
<p><img class="aligncenter size-full wp-image-727" title="01" src="http://diegodonah.files.wordpress.com/2011/04/012.gif?w=479&#038;h=222" alt="" width="479" height="222" /></p>
<p>Mensagem em vermelho raramente é coisa boa pra quem programa. Inclusive, se não tratarmos essa exceção no SQL, ela cairá para a aplicação, no try/catch da linguagem que você utilizar, ou pior, diretamente na aplicação:</p>
<p><img class="aligncenter size-full wp-image-730" title="02" src="http://diegodonah.files.wordpress.com/2011/04/021.gif?w=500&#038;h=171" alt="" width="500" height="171" /></p>
<h2>Tratando exceções no SQL</h2>
<p>Nós também temos TRY/CATCH no SQL Server, a partir da versão 2005. Vejamos o que a documentação diz sobre a sintaxe:</p>
<blockquote>
<pre>BEGIN TRY
     { sql_statement | statement_block }
END TRY
BEGIN CATCH
     [ { sql_statement | statement_block } ]
END CATCH
[ ; ]</pre>
</blockquote>
<p>Bem simples né? Usando no nosso exemplo anterior:</p>
<pre class="brush: sql;">
ALTER PROCEDURE [dbo].[usp_GenerateError]
AS BEGIN

	DECLARE @i int
	SET @i = 9

	DECLARE @Msg VARCHAR(40)

	BEGIN TRY

		WHILE @i &lt; 14
		BEGIN

			IF @i &lt; 11
			BEGIN
				set @Msg = 'Erro...'
			END
			ELSE
			BEGIN
				set @Msg = 'Erro grave! Fujam pras montanhas!'
			END

			print @i

			RAISERROR(@Msg,@i,1)
			set @i = @i + 1

		END
	END TRY
	BEGIN CATCH

		print ''
		print 'Erro ocorreu!'
		print 'Mensagem: ' + ERROR_MESSAGE()
		print 'Procedure: ' + ERROR_PROCEDURE()

	END CATCH

END
</pre>
<p>A nossa nova saída será essa:</p>
<p><img class="aligncenter size-full wp-image-734" title="03" src="http://diegodonah.files.wordpress.com/2011/04/032.gif?w=326&#038;h=170" alt="" width="326" height="170" /></p>
<p>Muito melhor sem as mensagens em vermelho! Perceba que o try/catch só agiu quando a variável tinha o valor 11. Os erros anteriores foram meramente expostos no console.</p>
<p>Agora que nós já sabemos algumas coisas sobre exceções em procedures, vamos adiante, num exemplo um pouco mais prático.</p>
<h2>Juntando as peças</h2>
<p>Já perdi muitos fios de cabelo com procedures que não eram executadas corretamente, tudo por falta de dados.</p>
<p>Dependendo do seu Design Pattern (padrão de projeto), poderíamos colocar uma verificação dentro dela, lançando exceção caso algum parâmetro esteja invalidado.</p>
<p>No nosso banco de dados, imagine que eu quero consultar todos os presentes de uma dada categoria. É só enviar o id da categoria e colocar no where.</p>
<p>Eu posso querer <strong>um erro</strong> se eu enviar um id de categoria inexistente para a pesquisa. Usando nossos conhecimentos de sql, stored procedure e exceções:</p>
<pre class="brush: sql;">
CREATE PROCEDURE usp_EncontrarPresentesDeUmaCategoria
	@cat_id INT
AS BEGIN

	--para verificar se o Id existe mesmo
	DECLARE @isIdExistente INT
	SET @isIdExistente = (select COUNT(C.cat_id) FROM Categorias c where c.cat_id = @cat_id)

	IF(@isIdExistente = 0)
	BEGIN
		--lançando a exceção
		RAISERROR('Id de categoria não existente!',11,1)
	END

	SELECT
				p.pres_id,
				p.pres_nome,
				p.pres_desc
	FROM		Presentes p
	WHERE		p.pres_cat_id = @cat_id

END
</pre>
<p>Exemplo bobo, mas com técnicas que podem ser úteis a nós.</p>
<h2>Concluindo</h2>
<p>Tratar erros numa stored procedure é tão simples como no asp.net. Às vezes pode ser mais prático &#8220;enterrar&#8221; o erro por lá, do que trazer algo inútil para a nossa aplicação.</p>
<p>Mais informações:</p>
<ul>
<li><a href="http://msdn.microsoft.com/pt-br/library/ms177497.aspx">Documentação da MSDN</a> sobre RAISERROR (PT-BR)</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms178592.aspx">Documentação da MSDN</a> sobre RAISERROR  (em inglês)</li>
<li><a href="http://stackoverflow.com/questions/963379/storing-sqlservers-raiserror-message-in-c">Stack Overflow</a>.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms175976%28v=SQL.100%29.aspx">Documentação sobre TRY/CATCH</a> (em inglês)</li>
</ul>
<p>Até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/diegodonah.wordpress.com/723/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/diegodonah.wordpress.com/723/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/diegodonah.wordpress.com/723/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=diegodonah.wordpress.com&amp;blog=6859583&amp;post=723&amp;subd=diegodonah&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://diegodonah.wordpress.com/2011/04/23/sql-server-e-stored-procedures-tratando-excecoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<georss:point>-22.724977 -47.647601</georss:point>
		<geo:lat>-22.724977</geo:lat>
		<geo:long>-47.647601</geo:long>
		<media:content url="http://0.gravatar.com/avatar/e22a87ec503b23850027dc3e913fcabc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Doná</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/04/012.gif" medium="image">
			<media:title type="html">01</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/04/021.gif" medium="image">
			<media:title type="html">02</media:title>
		</media:content>

		<media:content url="http://diegodonah.files.wordpress.com/2011/04/032.gif" medium="image">
			<media:title type="html">03</media:title>
		</media:content>
	</item>
	</channel>
</rss>
