<?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>Keep Learning &#187; Dicas</title>
	<atom:link href="http://www.makemesimple.com/blog/category/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.makemesimple.com/blog</link>
	<description>Conhecimento nunca é o bastante</description>
	<lastBuildDate>Wed, 28 Apr 2010 21:28:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>O ActiveSupport mexeu no seu logger? Recupere a formatação original!</title>
		<link>http://www.makemesimple.com/blog/2009/09/18/o-activesupport-mexeu-no-seu-logger-recupere-a-formatacao-original/</link>
		<comments>http://www.makemesimple.com/blog/2009/09/18/o-activesupport-mexeu-no-seu-logger-recupere-a-formatacao-original/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 18:11:44 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=301</guid>
		<description><![CDATA[Recentemente estava escrevendo um script de manutenção utilizando o logger padrão do Ruby e tudo estava indo muito bem. A formatação padrão do logger oferece uma boa quantidade de informação, com timestamp, id do processo, nível da mensagem (erro, informação etc), como na imagem abaixo:
Pouco depois, resolvi utilizar o ActiveRecord (que carrega junto o ActiveSupport) [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente estava escrevendo um script de manutenção utilizando o logger padrão do Ruby e tudo estava indo muito bem. A formatação padrão do logger oferece uma boa quantidade de informação, com timestamp, id do processo, nível da mensagem (erro, informação etc), como na imagem abaixo:</p>
<div id="attachment_302" class="wp-caption aligncenter" style="width: 657px"><a href="http://www.makemesimple.com/blog/wp-content/uploads/2009/09/Picture-1.png"><img src="http://www.makemesimple.com/blog/wp-content/uploads/2009/09/Picture-1.png" alt="Formatação padrão do logger" title="default logger" width="485" height="56" class="size-full wp-image-302" /></a><p class="wp-caption-text">Formatação padrão do logger</p></div>
<p>Pouco depois, resolvi utilizar o ActiveRecord (que carrega junto o ActiveSupport) no script. Feito isso, o output do logger mudou para:</p>
<div id="attachment_303" class="wp-caption aligncenter" style="width: 405px"><a href="http://www.makemesimple.com/blog/wp-content/uploads/2009/09/Picture-2.png"><img src="http://www.makemesimple.com/blog/wp-content/uploads/2009/09/Picture-2.png" alt="Formatação com ActiveSupport" title="ActiveSupport logger output" width="315" height="41" class="size-full wp-image-303" /></a><p class="wp-caption-text">Formatação com ActiveSupport</p></div>
<p>Isso não é bom. Pesquisei um pouco e descobri que o ActiveSupport modifica a formatação padrão utilizando uma classe chamada SimpleFormatter ao invés da classe Formatter padrão do logger. </p>
<p>Desta forma, recuperar a formatação original é simples, basta modificar o formater utilizado pela sua instância do logger:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">log = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>STDOUT<span style="color:#006600; font-weight:bold;">&#41;</span>
log.<span style="color:#9900CC;">datetime_format</span> = <span style="color:#996600;">&quot;%d-%m-%Y %H:%M:%S&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Recuperando a formatação original</span>
log.<span style="color:#9900CC;">formatter</span> = <span style="color:#6666ff; font-weight:bold;">Logger::Formatter</span>.<span style="color:#9900CC;">new</span></pre></div></div>

<p>Também é possível alterar o formatter padrão na classe Logger. Dessa forma todas as instâncias utilizarão o formato padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Fazer isso após carregar o ActiveSupport para reverter a alteração do formatter</span>
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC00FF; font-weight:bold;">Logger</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> formatter
    <span style="color:#0066ff; font-weight:bold;">@formatter</span> = Formatter.<span style="color:#9900CC;">new</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2009/09/18/o-activesupport-mexeu-no-seu-logger-recupere-a-formatacao-original/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como aumentei minha produtividade eliminando distrações</title>
		<link>http://www.makemesimple.com/blog/2009/08/27/como-aumentei-minha-produtividade-eliminando-distracoes/</link>
		<comments>http://www.makemesimple.com/blog/2009/08/27/como-aumentei-minha-produtividade-eliminando-distracoes/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 16:23:20 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=261</guid>
		<description><![CDATA[(ou: Como deixei de me preocupar e deixei de assinar muitos feeds)
Não, ainda não sou uma pessoa super-mega-produtiva, mas aqui está como consegui aumentar minha produtividade usando alguns truques (e o incrível sistema operacional que é o Mac OS X em conjunto com ótimas aplicações):

Não verifique seu e-mail mais de quatro vezes ao dia: se [...]]]></description>
			<content:encoded><![CDATA[<p>(ou: Como deixei de me preocupar e deixei de assinar muitos feeds)</p>
<p>Não, ainda não sou uma pessoa super-mega-produtiva, mas aqui está como consegui aumentar minha produtividade usando alguns truques (e o incrível sistema operacional que é o Mac OS X em conjunto com ótimas aplicações):</p>
<ul>
<li>Não verifique seu e-mail mais de quatro vezes ao dia: se você está esperando algum e-mail importante, peça para quem for enviá-lo que te avise quando isso acontecer, usando, por exemplo, uma SMS;</li>
<li>Não verifique seu e-mail se você sabe que não estará apto a agir sobre alguma mensagem imediatamente: por exemplo, verificar seu e-mail de trabalho no final da tarde de Sexta &#8211; deixe para fazer isso na Segunda;</li>
<li>Livre-se dos feeds que você assina: você não vai realmente sentir falta deles sem ficar um tempo longe. Se, após alguns dias, você sentir muita falta de ler um deles, assine-o novamente, mas não verifique seus feeds mais do que uma vez ao dia. Essa é uma excelente técnica para descobrir o que é realmente importante dentre tudo que você consome;</li>
<li>Deixe que as pessoas sejam seu filtro: acredite em mim, se algo é realmente importante (ou banal, mas &#8220;quente&#8221;), vai chegar a você. Você não precisa ficar garimpando. O recurso de &#8220;shared items&#8221; do Google Reader é excelente nesse ponto &#8211; estou à caminho de usar apenas ele, me livrando de todos os feeds que assino (são por volta de oito hoje). Quando realmente precisar encontrar algo, o Google é seu amigo;</li>
<li>Desabilite notificações desnecessárias: como muitas do Growl ou os &#8220;contadores vermelhos&#8221; nos ícones de aplicações na Dock do OS X &#8211; mantenha apenas as que você realmente precisa (por exemplo, eu mantenho as notificações do <a target="_blank" href="http://propaneapp.com/">Propane</a>, já que é importante saber o que meus colegas de trabalho dizem no Campfire);</li>
<li>Não use um monitor muito grande: isso pode parecer estranho, mas <a target="_blank" href="http://lifehacker.com/367391/do-larger-monitors-make-you-more-productive">pesquisas</a> mostram que, após aproximadamente 26 polegadas, o tamanho do monitor diminui a produtividade. É óbvio: muitas coisas no seu campo visual vão lhe distrair. Use o Spaces e divida as telas de acordo com a tarefa (uma para programação, uma para navegação na internet etc);</li>
<li>Aumente o espaço livre na sua tela eliminando itens do seu Desktop: configura o Finder para não exibir discos rígidos (eu deixo apenas discos ópticos e dispositivos removíveis). Elimine da Dock as aplicações que você não usa muito frequentemente. Use o QuickSilver ou algo similar para acessar as aplicações e arquivos que você não usa frequentemente, apenas não deixe que eles se empilhem na Dock e no Desktop;</li>
<li>Elimine da Menu Bar os itens que você não precisa, como o ícone de status do Bluetooth, o indicador AM/PM se você usa o formato americano (é fácil saber isso olhando pela janela), o ícone do Time Machine etc;</li>
<li>Use o <a target="_blank" href="http://adium.im/">Adium</a> e configure-o para que fique oculto a menos que seja a aplicação ativa (veja aqui: <a target="_blank" href="http://yfrog.com/amactivep">ativo</a>, <a target="_blank" href="http://yfrog.com/ajinactive2p">inativo</a>, <a target="_blank" href="http://yfrog.com/e3picture2fuap">configurações 1</a>, <a target="_blank" href="http://yfrog.com/avpicture12xp">configurações 2</a>);</li>
<li>Use o <a target="_blank" href="http://fluidapp.com/">Fluid</a> para criar SSBs para as aplicações web que você precisa para trabalhar: o motivo para isso é evitar ter um browser repleto de abas abertas te distraindo enquanto você usa uma aplicação para trabalhar. Com as aplicações Fluid você pode focar apenas na tarefa à mão;</li>
<li>Use o <a target="_blank" href="http://www.gravityapps.com/tags/">Tags</a> para facilitar o processo de organização e busca de arquivos.</li>
</ul>
<p>É difícil tomar algumas dessas ações, como se livrar dos feeds que você assina &#8211; especialmente porque o número de feeds assinados geralmente é motivo de &#8220;disputazinhas&#8221; entre nerds/geeks. É estupidez pura, como competir para ver <a target="_blank" href="http://37signals.com/svn/posts/1006-sleep-deprivation-is-not-a-badge-of-honor">quem dorme menos e fica acordado programando por mais tempo</a>.</p>
<p>De qualquer modo, dê uma chance. Após algum tempo (eu recomendo tentar por, pelo menos, dez dias), você vai sentir falta das coisas que realmente precisa e pode tê-las novamente assim que quiser.</p>
<p><strong>Update</strong>: Como bem notado pelo <a target="_blank" href="http://www.arthurgeek.net/">ArthurGeek</a>, a imagem de configuração do Adium para que a lista de contatos se esconda automaticamente estava errada (a que eu chamei de &#8220;configuração 2&#8243;). Arrumei o link e deixo aqui também: <a target="_blank" href="http://yfrog.com/avpicture12xp">http://yfrog.com/avpicture12xp</a>.</p>
<p>&#8211;</p>
<p>Também <a target="_blank" href="http://lucashungaro.github.com/productivity/2009/08/27/how-i-increased-my-productivity.html">em inglês</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2009/08/27/como-aumentei-minha-produtividade-eliminando-distracoes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Obtendo informações de uma instalação do Ruby</title>
		<link>http://www.makemesimple.com/blog/2009/05/03/obtendo-informacoes-de-uma-instalacao-do-ruby/</link>
		<comments>http://www.makemesimple.com/blog/2009/05/03/obtendo-informacoes-de-uma-instalacao-do-ruby/#comments</comments>
		<pubDate>Sun, 03 May 2009 04:09:16 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=196</guid>
		<description><![CDATA[Existem algumas maneiras de obter informações sobre uma instalação do Ruby, mas uma que conheci hoje é através do próprio irb, utilizando uma biblioteca chamada rbconfig, presente na instalação padrão do Ruby.
Para iniciar o irb já com essa lib carregada, basta executar o comando: irb -r rbconfig (a flag -r diz ao irb para carregar [...]]]></description>
			<content:encoded><![CDATA[<p>Existem algumas maneiras de obter informações sobre uma instalação do Ruby, mas uma que conheci hoje é através do próprio <code>irb</code>, utilizando uma biblioteca chamada <code>rbconfig</code>, presente na instalação padrão do Ruby.</p>
<p>Para iniciar o irb já com essa lib carregada, basta executar o comando: <code>irb -r rbconfig</code> (a flag -r diz ao irb para carregar uma lib ao iniciar). Para obter algumas configurações da instalação Ruby, acesse o hash <code>Config::CONFIG</code>. Veja alguns exemplos (clique para ver a imagem maior):</p>
<p><a href="http://www.makemesimple.com/blog/wp-content/uploads/2009/05/ishot-1.jpg" target="_blank"><img src="http://www.makemesimple.com/blog/wp-content/uploads/2009/05/ishot-1.jpg" alt="irb with rbconfig" title="irb with rbconfig" width="478" height="248" class="aligncenter size-medium" /></a></p>
<p><strong>Nota</strong>: em algumas instalações, essa biblioteca já é carregada com o <code>irb</code> por padrão.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2009/05/03/obtendo-informacoes-de-uma-instalacao-do-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Treinando seu Mac Fu! Dicas para Mac OS X</title>
		<link>http://www.makemesimple.com/blog/2009/03/13/treinando-seu-mac-fu-dicas-para-mac-os-x/</link>
		<comments>http://www.makemesimple.com/blog/2009/03/13/treinando-seu-mac-fu-dicas-para-mac-os-x/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 14:26:48 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[MacOS]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=184</guid>
		<description><![CDATA[Post rápido, com algumas dicas para melhorar a já muito boa experiência de uso no Mac OS X:

Forçando o esvaziamento da lixeira: às vezes o Mac OS se recusa a limpar algum arquivo da lixeira, pois este, teoricamente, está em uso. Uma maneira de forçar o esvaziamento da lixeira é abrir uma sessão no Terminal [...]]]></description>
			<content:encoded><![CDATA[<p>Post rápido, com algumas dicas para melhorar a já muito boa experiência de uso no Mac OS X:</p>
<ul>
<li><strong>Forçando o esvaziamento da lixeira</strong>: às vezes o Mac OS se recusa a limpar algum arquivo da lixeira, pois este, teoricamente, está em uso. Uma maneira de forçar o esvaziamento da lixeira é abrir uma sessão no Terminal e executar o comando:
<pre>rm -rf ~/.Trash/</pre>
</li>
<li><strong>Invocando o Quicksilver via terminal</strong>: um modo muito útil do Quicksilver é o &#8220;Command Window with Selection&#8221;, onde a janela do programa se abre com um arquivo selecionado, possibilitando a execução rápida de arquivos sobre o mesmo. Além de configurar um atalho para isso nas preferências, é possível também instalar o plugin &#8220;Command Line Tool&#8221; e, na linha de comando, invocar o Quicksilver com um arquivo selecionado através do comando:
<pre>qs nome_do_arquivo</pre>
<p> Para mais informações, execute:
<pre>qs --help</pre>
</li>
<li><strong>Melhorando o alternador de janelas (Cmd+Tab)</strong>: instale o <a href="http://www.manytricks.com/witch/" target="_blank">Witch</a>, configure um atalho e você terá um alternador de janelas mais prático e informativo do que o padrão do Finder. Vale a pena dar uma olhada nas outras aplicações da Many Tricks.</li>
<li><strong>Mudando o mapeamento das teclas modificadoras</strong>: entre os usuários do emacs é comum mapear a tecla Caps Lock como a tecla Control, pois facilita a digitação. Para fazer isso, entre outras coisas, basta acessar System Preferences, Keyboard &#038; Mouse, acessar a aba Keyboard e clicar no botão &#8220;Modifier Keys&#8230;&#8221;. No pop-up que se abre é possível modificar a ação executada por cada tecla modificadora.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2009/03/13/treinando-seu-mac-fu-dicas-para-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um pouco mais sobre named_scopes</title>
		<link>http://www.makemesimple.com/blog/2008/07/30/um-pouco-mais-sobre-named_scopes/</link>
		<comments>http://www.makemesimple.com/blog/2008/07/30/um-pouco-mais-sobre-named_scopes/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 03:23:13 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=135</guid>
		<description><![CDATA[Um pouco mais? Mas cadê o primeiro artigo sobre isso? Bom, não o escrevi, mas vou partir do ponto em que parou o Nando Vieira em seu artigo sobre named_scopes. Logo, assumo que você já sabe o que é um named_scope e conhece algumas possibilidades, como condições dinâmicas e encadeamento de named_scopes.
Apenas lendo uma introdução [...]]]></description>
			<content:encoded><![CDATA[<p>Um pouco mais? Mas cadê o primeiro artigo sobre isso? Bom, não o escrevi, mas vou partir do ponto em que parou o <a href="http://simplesideias.com.br/" target="_blank">Nando Vieira</a> em seu <a href="http://simplesideias.com.br/utilizando-o-named_scope-no-activerecord-do-ruby-on-rails-21/" target="_blank">artigo sobre named_scopes</a>. Logo, assumo que você já sabe o que é um named_scope e conhece algumas possibilidades, como condições dinâmicas e encadeamento de named_scopes.</p>
<p>Apenas lendo uma introdução aos named_scopes já dá pra ficar bem empolgado. É um recurso simples e, ao mesmo tempo, poderoso e, quando bem utilizado, pode resulta no código bonito e sucinto que buscamos todo dia.</p>
<p>Vamos, então, explorar mais algumas possibilidades desse recurso.</p>
<p><span id="more-135"></span><br />
<strong>Modificadores para filtros</strong></p>
<p>Além de estabelecer condições de filtro, podemos aplicar modificadores a eles. Um exemplo é aplicando ordenação:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:boys</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;gender = ?&quot;</span>, <span style="color:#996600;">'M'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:girls</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;gender = ?&quot;</span>, <span style="color:#996600;">'F'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:created_since</span>, <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>days<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:conditions <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;created_at &gt;= ?&quot;</span>, days<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
 <span style="color:#008000; font-style:italic;">#modificando o filtro com ordenação</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:by_first_name</span>, <span style="color:#ff3333; font-weight:bold;">:order</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;first_name ASC&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Isso possibilita os seguintes usos:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">User.<span style="color:#9900CC;">girls</span>.<span style="color:#9900CC;">by_first_name</span>
User.<span style="color:#9900CC;">boys</span>.<span style="color:#9900CC;">by_first_name</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#ou, somente:</span>
User.<span style="color:#9900CC;">by_first_name</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#encadeando como se não houvesse amanhã e operando sobre o resultado!</span>
User.<span style="color:#9900CC;">girls</span>.<span style="color:#9900CC;">created_since</span><span style="color:#006600; font-weight:bold;">&#40;</span>5.<span style="color:#9900CC;">days</span>.<span style="color:#9900CC;">ago</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">by_first_name</span>.<span style="color:#9900CC;">map</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&amp;</span>:first_name<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p><strong>Flexibilizando os escopos</strong></p>
<p>Que tal um filtro aplicável a diferentes atributos do modelo? Vamos lá:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#adding the scope to ActiveRecord::Base so it's available to all models</span>
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:contains</span>, <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>column, text<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:conditions <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;lower(#{column}) LIKE ?&quot;</span>, <span style="color:#996600;">&quot;%#{text.downcase}%&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Utilizando:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">User.<span style="color:#9900CC;">contains</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first_name</span>, <span style="color:#996600;">&quot;%mat%&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
User.<span style="color:#9900CC;">contains</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:last_name</span>, <span style="color:#996600;">&quot;Sinclair&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#encadeando...</span>
User.<span style="color:#9900CC;">boys</span>.<span style="color:#9900CC;">contains</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:last_name</span>, <span style="color:#996600;">&quot;S%&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">by_first_name</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#enlouquecendo...</span>
User.<span style="color:#9900CC;">girls</span>.<span style="color:#9900CC;">contains</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:first_name</span>, <span style="color:#996600;">&quot;Je%&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">created_since</span><span style="color:#006600; font-weight:bold;">&#40;</span>5.<span style="color:#9900CC;">days</span>.<span style="color:#9900CC;">ago</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">by_first_name</span>.<span style="color:#9900CC;">map</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&amp;</span>:first_name<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p><strong>Mesclando finders dinâmicos e escopos</strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">User.<span style="color:#9900CC;">boys</span>.<span style="color:#9900CC;">find_all_by_first_name</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Peter&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Note que o finder deve ser o último método na cadeia, pois retorna um Array, onde seus escopos não existem:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">=&gt;</span> User.<span style="color:#9900CC;">find_all_by_first_name</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;A%&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">boys</span>
<span style="color:#CC00FF; font-weight:bold;">NoMethodError</span>: undefined method <span style="color:#996600;">`boys' for #&lt;Array:0x21e7bf0&gt;</span></pre></div></div>

<p><strong>Testando named_scopes</strong></p>
<p>É claro que temos que testar se os escopos estão formando as condições da maneira que desejamos. Existem alguns métodos que ajudam a fazer isso:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">should <span style="color:#996600;">&quot;correctly generate the 'boys' scope&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  expected = <span style="color:#006600; font-weight:bold;">&#123;</span>:conditions <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;gender = ?&quot;</span>, <span style="color:#996600;">&quot;M&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
  assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span>expected, User.<span style="color:#9900CC;">boys</span>.<span style="color:#9900CC;">proxy_options</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p><strong>Update Fev/2009:</strong> Na verdade, <strong>nunca</strong> teste named_scopes dessa maneira. Quando estamos desenvolvendo com TDD, não nos interessa saber se algo está codificado numa classe mas, sim, se essa classe possui o comportamento esperado. O teste que coloquei acima apenas verifica se há um named_scope declarado no model e isso, definitivamente, não é bom. Segue um outro exemplo de teste:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">setup <span style="color:#9966CC; font-weight:bold;">do</span>
  <span style="color:#0066ff; font-weight:bold;">@boys</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
  3.<span style="color:#9900CC;">times</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#0066ff; font-weight:bold;">@boys</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> Factory<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:gender</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;M&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    Factory<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:user</span>, <span style="color:#ff3333; font-weight:bold;">:gender</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;F&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
should <span style="color:#996600;">&quot;be able to list just the users that are boys&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  assert_equal<span style="color:#006600; font-weight:bold;">&#40;</span>@boys, User.<span style="color:#9900CC;">boys</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Agora sim estamos usando o teste da maneira correta. Não nos importa <strong>como</strong> esse filtro está escrito, apenas se ele nos proporciona o <strong>comportamento</strong> esperado.</p>
<p><strong>Observação:</strong> os exemplos são para ilustrar o que pode ser feito com esse recurso. Tome muito cuidado com os encadeamentos que executar, sempre observando as queries resultantes. Um pequeno deslize pode significar um gargalo significativo. </p>
<p><strong>Leia mais:</strong><br />
<a target="_blank" href="http://www.pathf.com/blogs/2008/06/more-named-scope-awesomeness/">More Named Scope Awesomeness</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/07/30/um-pouco-mais-sobre-named_scopes/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ruby quick tip: Blocos para fallback em hash lookups</title>
		<link>http://www.makemesimple.com/blog/2008/07/13/ruby-quick-tip-blocos-para-fallback-em-hash-lookups/</link>
		<comments>http://www.makemesimple.com/blog/2008/07/13/ruby-quick-tip-blocos-para-fallback-em-hash-lookups/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 01:50:35 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=134</guid>
		<description><![CDATA[Normalmente, ao tentar fazer um lookup em um hash com uma chave não existente, você tem o seguinte comportamento:

&#62;&#62; h = &#123;:foo =&#62; &#34;bar&#34;&#125;
=&#62; &#123;:foo=&#62;&#34;bar&#34;&#125;
&#62;&#62; h&#91;:other_foo&#93;
=&#62; nil

Você pode adicionar um bloco para tratar esses casos:

&#62;&#62; h = Hash.new &#123; &#124;hash, key&#124; &#34;#{key} is not here&#34;&#125;
=&#62; &#123;&#125;
&#62;&#62; h&#91;:foo&#93;
=&#62; &#34;foo is not here&#34;

É possível, inclusive, alterar o [...]]]></description>
			<content:encoded><![CDATA[<p>Normalmente, ao tentar fazer um lookup em um hash com uma chave não existente, você tem o seguinte comportamento:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h = <span style="color:#006600; font-weight:bold;">&#123;</span>:foo <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;bar&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:foo<span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#996600;">&quot;bar&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:other_foo</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span></pre></div></div>

<p>Você pode adicionar um bloco para tratar esses casos:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h = <span style="color:#CC00FF; font-weight:bold;">Hash</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>hash, key<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#996600;">&quot;#{key} is not here&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:foo</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;foo is not here&quot;</span></pre></div></div>

<p>É possível, inclusive, alterar o hash em questão:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h = <span style="color:#CC00FF; font-weight:bold;">Hash</span>.<span style="color:#9900CC;">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>hash, key<span style="color:#006600; font-weight:bold;">|</span> hash<span style="color:#006600; font-weight:bold;">&#91;</span>key<span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">&quot;value for #{key}&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> h<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:foo</span><span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;value for foo&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/07/13/ruby-quick-tip-blocos-para-fallback-em-hash-lookups/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dica: Migrations com comandos SQL e problemas com testes no Rails</title>
		<link>http://www.makemesimple.com/blog/2008/06/11/dica-migrations-sql-e-testes-no-rails/</link>
		<comments>http://www.makemesimple.com/blog/2008/06/11/dica-migrations-sql-e-testes-no-rails/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 19:43:09 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=131</guid>
		<description><![CDATA[Se você utiliza o método execute em suas migrations para rodar comandos SQL na criação de sua base de dados, cuidado ao rodar os testes de sua aplicação. Na criação da base de testes, o Rails não roda as migrations, ele utiliza o script contido no arquivo schema.rb. O problema é que, ao fazer o [...]]]></description>
			<content:encoded><![CDATA[<p>Se você utiliza o método <em>execute</em> em suas migrations para rodar comandos SQL na criação de sua base de dados, cuidado ao rodar os testes de sua aplicação. Na criação da base de testes, o Rails não roda as migrations, ele utiliza o script contido no arquivo schema.rb. O problema é que, ao fazer o dump da base para esse arquivo, o Rails não utiliza os comandos SQL definidos nas migrations e sim os métodos da DSL de manipulação de estrutura e dados (como add_index, create_table, add_column etc).</p>
<p>Devido a isso, se você utilizou alguma particularidade do sistema gerenciador de banco de dados que utiliza ao definir sua base, muito provavelmente ocorrerá um erro no banco de dados ao tentar rodar os testes de sua aplicação.</p>
<p>Exemplo:</p>
<p>Em uma migration:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&#40;</span>...<span style="color:#006600; font-weight:bold;">&#41;</span>
  create_table <span style="color:#ff3333; font-weight:bold;">:tests</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>t<span style="color:#006600; font-weight:bold;">|</span>
    t.<span style="color:#9900CC;">column</span> <span style="color:#ff3333; font-weight:bold;">:test_column</span>,         <span style="color:#ff3333; font-weight:bold;">:text</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  execute<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;ALTER TABLE test ADD INDEX test_index(test_column(200));&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">&#40;</span>...<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>No MySQL é necessário definir um comprimento para índices em colunas dos tipos TEXT e BLOB e, como não há essa opção no método add_index, utilizamos um comando SQL. No entanto, no arquivo schema.rb, a criação do índice é feita da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  add_index <span style="color:#996600;">&quot;tests&quot;</span>, <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;test_column&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;test_index&quot;</span></pre></div></div>

<p>E isso causa um erro no MySQL. Para corrigí-lo, procure em seu arquivo environment.rb pela seguinte linha:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  config.<span style="color:#9900CC;">active_record</span>.<span style="color:#9900CC;">schema_format</span> = <span style="color:#ff3333; font-weight:bold;">:sql</span></pre></div></div>

<p>Por padrão ela vem comentada. Retire o comentário para fazer com que o banco de dados de testes seja criado diretamente com comandos SQL. Caso não a encontre comentada, adicione-a dentro do bloco <em>Rails::Initializer.run</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/06/11/dica-migrations-sql-e-testes-no-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>21 truques de Ruby que você deveria estar usando</title>
		<link>http://www.makemesimple.com/blog/2008/05/28/21-truques-de-ruby-que-voce-deveria-estar-usando/</link>
		<comments>http://www.makemesimple.com/blog/2008/05/28/21-truques-de-ruby-que-voce-deveria-estar-usando/#comments</comments>
		<pubDate>Wed, 28 May 2008 13:59:32 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=129</guid>
		<description><![CDATA[Creio que a maioria já viu o artigo 21 Ruby Tricks You Should Be Using In Your Own Code no Ruby Inside. O texto contém truques realmente interessantes, mas esse post é apenas para uma dica: se você ainda não assina o feed do Ruby Inside, faça-o agora!  
]]></description>
			<content:encoded><![CDATA[<p>Creio que a maioria já viu o artigo <a href="http://www.rubyinside.com/21-ruby-tricks-902.html" target="_blank">21 Ruby Tricks You Should Be Using In Your Own Code</a> no <a href="http://www.rubyinside.com/" target="_blank">Ruby Inside</a>. O texto contém truques realmente interessantes, mas esse post é apenas para uma dica: se você ainda não assina o feed do Ruby Inside, <a href="http://www.rubyinside.com/feed" target="_blank">faça-o agora</a>! <img src='http://www.makemesimple.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/05/28/21-truques-de-ruby-que-voce-deveria-estar-usando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conheça suas gems</title>
		<link>http://www.makemesimple.com/blog/2008/05/17/conheca-suas-gems/</link>
		<comments>http://www.makemesimple.com/blog/2008/05/17/conheca-suas-gems/#comments</comments>
		<pubDate>Sat, 17 May 2008 21:45:56 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Gem]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=127</guid>
		<description><![CDATA[Uma boa forma de aprender mais sobre Ruby é &#8220;fuçar&#8221; no código-fonte de gems. Vagando pelo GitHub e RubyForge esses dias, encontrei um conjunto de pequenos utilitários escritos por Dr Nic (que deve ser um robô ou extraterrestre).
Um desses utilitários chama-se find_gem (não achei um site oficial, apenas esse arquivo de texto explicando como configurar [...]]]></description>
			<content:encoded><![CDATA[<p>Uma boa forma de aprender mais sobre Ruby é &#8220;fuçar&#8221; no código-fonte de gems. Vagando pelo <a href="http://github.com/" target="_blank">GitHub</a> e <a href="http://rubyforge.org/" target="_blank">RubyForge</a> esses dias, encontrei um conjunto de pequenos utilitários escritos por <a href="http://drnicwilliams.com/" target="_blank">Dr Nic</a> (que deve ser um robô ou extraterrestre).</p>
<p>Um desses utilitários chama-se <a href="http://drnicutilities.rubyforge.org/svn/find_gem/trunk/website/index.txt" target="_blank">find_gem</a> (não achei um site oficial, apenas esse arquivo de texto explicando como configurar e usar). Ele instala dois comandos em seu sistema:</p>
<ul>
<li>find_gem &lt;<em>nome_da_gem</em>&gt;: retorna o caminho completo da gem passada como parâmetro.</li>
<li>edit_gem &lt;<em>nome_da_gem</em>&gt;: abre os fontes da gem passada como parâmetro no editor configurado com a variável de ambiente EDITOR. Assim você pode vasculhar o código-fonte das gems com mais comodidade. <img src='http://www.makemesimple.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>No MacOS X Leopard funciona muito bem. Outra funcionalidade legal é o auto-complete no comando <em>gem</em> (tanto para os comandos, como <em>install</em> e <em>list</em>, quanto para nomes de gems).</p>
<p><a href="http://rubyforge.org/projects/drnicutilities/" target="_blank">Veja aqui a lista de utilitários</a> do Dr Nic Utilities. Estou utilizando também o git_autocomplete e recomendo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/05/17/conheca-suas-gems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Doctype</title>
		<link>http://www.makemesimple.com/blog/2008/05/16/google-doctype/</link>
		<comments>http://www.makemesimple.com/blog/2008/05/16/google-doctype/#comments</comments>
		<pubDate>Fri, 16 May 2008 07:14:26 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Anúncios]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/?p=125</guid>
		<description><![CDATA[O mais novo lançamento da Google chama-se Doctype. Trata-se de uma enciclopédia aberta (a la Wikipedia) para documentar padrões web abertos como HTML e CSS e outros tópicos sobre desenvolvimento como segurança e caching. De quebra ainda estão disponíveis 8 mil linhas de Javascript que formam a biblioteca Javascript desenvolvida pela Google.
A intenção é criar [...]]]></description>
			<content:encoded><![CDATA[<p>O mais novo lançamento da Google chama-se <a href="http://code.google.com/doctype/" target="_blank">Doctype</a>. Trata-se de uma enciclopédia aberta (a la Wikipedia) para documentar padrões web abertos como HTML e CSS e outros tópicos sobre desenvolvimento como segurança e caching. De quebra ainda estão disponíveis 8 mil linhas de Javascript que formam a biblioteca Javascript desenvolvida pela Google.</p>
<p>A intenção é criar uma referência completa sobre padrões web, tudo com casos de teste. Uma iniciativa muito interessante, vale a pena conferir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.makemesimple.com/blog/2008/05/16/google-doctype/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.718 seconds -->
