<?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>Herminio Torres &#187; Geral</title>
	<atom:link href="http://www.herminiotorres.com/blog/category/geral/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.herminiotorres.com/blog</link>
	<description>Ruby helps programmers have more fun!</description>
	<lastBuildDate>Wed, 21 Jul 2010 22:32:32 +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>Lista Redes Wifi Script</title>
		<link>http://www.herminiotorres.com/blog/2010/07/21/lista-redes-wifi-script/</link>
		<comments>http://www.herminiotorres.com/blog/2010/07/21/lista-redes-wifi-script/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 22:32:32 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[libnotify]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=186</guid>
		<description><![CDATA[Bem, hoje a tarde navegando em alguns blogs e um dos posts que me chamou atenção foi falando sobre o libnotify-bin e o outro era como melhorar o seu sinal wifi. Bem resolvi criar um script ruby que lista as redes wifi que seu computador achou e um outro script bash que pega o retorno [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, hoje a tarde navegando em alguns <em>blogs</em> e um dos <em>posts</em> que me chamou atenção foi falando sobre o <a href="http://http://silveiraneto.net/2010/01/28/miojo-script/"><em>libnotify-bin</em></a> e o outro era como melhorar o seu <a href="http://www.efetividade.net/2010/05/17/melhore-o-sinal-da-sua-rede-sem-fio-selecionando-um-canal-sem-interferencia-dos-vizinhos/">sinal <em>wifi</em></a>.<br />
Bem resolvi criar um <em>script ruby</em> que lista as redes <em>wifi</em> que seu computador achou e um outro <em>script bash</em> que pega o retorno do arquivo <em>ruby</em> e exibe essa notificação.<br />
Lembrar que precisa ter o <em>ruby</em> instalado, para isso digite no seu terminal <em>shell</em>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> ruby-full libmysql-ruby librmagick-ruby build-essential libssl-dev libreadline6-dev zlib1g-dev libopenssl-ruby libyaml-ruby libzlib-ruby libxml2-dev <span style="color: #c20cb9; font-weight: bold;">autoconf</span> curl <span style="color: #c20cb9; font-weight: bold;">bison</span></div></div>
<p>Logo após a instalação do <em>ruby</em>, instalar o <em>libnotify-bin</em>:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">~$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libnotify-bin</div></div>
<p>Agora você pode salvar em sua maquina um arquivo chamado <em>send.sh</em> com o seguinte código:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #007800;">info</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">eval</span> <span style="color: #ff0000;">&quot;$*&quot;</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
notify-send <span style="color: #660033;">-t</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">1000</span>+<span style="color: #000000;">300</span><span style="color: #000000; font-weight: bold;">*`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #007800;">$info</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> -w<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #660033;">-u</span> low <span style="color: #660033;">-i</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>icons<span style="color: #000000; font-weight: bold;">/</span>Humanity-Dark<span style="color: #000000; font-weight: bold;">/</span>devices<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span><span style="color: #000000; font-weight: bold;">/</span>network-wireless.svg <span style="color: #ff0000;">&quot;$*&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$info</span>&quot;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">2</span></div></div>
<p>Agora o código <em>ruby</em>, salve o arquivo <em>escaneadorwifi.rb</em>:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">redeswifi = <span style="color:#996600;">`iwlist wlan0 scan`</span>.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
arr_busca = <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#91;</span>Channel: Frequency: Quality ESSID<span style="color:#006600; font-weight:bold;">&#93;</span><br />
listawifi = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span><br />
<br />
redeswifi.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>redewifi<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; arr_busca.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>buscapalavra<span style="color:#006600; font-weight:bold;">|</span><br />
&nbsp; &nbsp; listawifi <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#996600;">&quot;#{redewifi}&quot;</span>.<span style="color:#9900CC;">lstrip</span> <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#006600; font-weight:bold;">/</span><span style="color:#008000; font-style:italic;">#{buscapalavra}/.match(&quot;#{redewifi}&quot;)</span><br />
&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Lista das redes wi-fi encontradas:&quot;</span><br />
<span style="color:#CC0066; font-weight:bold;">puts</span> listawifi.<span style="color:#9900CC;">reverse</span>!</div></div>
<p>Pronto, feito isso basta abrir um terminal <em>shell</em> e digitar:<br />
</code></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">sh</span> ~<span style="color: #000000; font-weight: bold;">/</span>Área\ de\ Trabalho<span style="color: #000000; font-weight: bold;">/</span>send.sh ruby ~<span style="color: #000000; font-weight: bold;">/</span>Área\ de\ Trabalho<span style="color: #000000; font-weight: bold;">/</span>escaneadorwifi.rb</div></div>
<p>E no canto superior direito irá aparecer uma imagem como está:<br />
<img src="http://web7.twitpic.com/img/133364368-8a159e9d4739ae1d905baee6af514f01.4c4774e8-full.png" alt="notity" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2010/07/21/lista-redes-wifi-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RVM &#8211; The Ruby Version Manager</title>
		<link>http://www.herminiotorres.com/blog/2010/07/08/rvm-the-ruby-version-manager/</link>
		<comments>http://www.herminiotorres.com/blog/2010/07/08/rvm-the-ruby-version-manager/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 12:27:22 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rvm]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[install]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=174</guid>
		<description><![CDATA[Instalando RVM Agora vamos ver como usar o RVM e o que podemos fazer com ele. RVM funciona em todos os sistemas *nix, se você tem um Linux/MacOSX ou FreeBSD, abra seu console e vamos começar com a instalação do RVM. O caminho recomendado do próprio desenvolvedor da gem é instalá-lo a partir do repositório [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Instalando RVM</strong><br />
Agora vamos ver como usar o RVM e o que podemos fazer com ele. RVM funciona em todos os sistemas *nix, se você tem um Linux/MacOSX ou FreeBSD, abra seu console e vamos começar com a instalação do RVM. O caminho recomendado do próprio desenvolvedor da gem é instalá-lo a partir do repositório GitHub com o seguinte comando:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> ~<span style="color: #000000; font-weight: bold;">/</span>.rvm<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span><br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.rvm<span style="color: #000000; font-weight: bold;">/</span>src <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-rf</span> .<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span><br />
$ <span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>wayneeseguin<span style="color: #000000; font-weight: bold;">/</span>rvm.git<br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> rvm<br />
$ .<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">install</span></div></div>
<p>(<strong>Nota:</strong> é preciso que você tenha o git instalado, se você não tiver o git instalado então faça download em <a href="http://git-scm.com">http://git-scm.com</a> e instale o git de acordo com o seu sistema operacional). Então vamos para a próxima etapa.</p>
<p>Antes de iniciar a instalação do nosso rubies e gems, é garantindo que o nosso RVM está na ultima versão então digite o seguinte comando:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ rvm update –<span style="color: #c20cb9; font-weight: bold;">head</span></div></div>
<p>Certifique-se de ler e seguir todas as instruções emitidas pela instalação da linha acima. Certifique-se de novo para ativar o RVM shells, colocando a linha:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000;">'if [[ -s $HOME/.rvm/scripts/rvm ]] ; then source<br />
$HOME/.rvm/scripts/rvm ; fi'</span></div></div>
<p>No final do arquivo em <strong>~/.bash_profile</strong> e <strong>~/.bashrc</strong> assegurar que não há uma linha que termina com &#8216;<strong>&#038;&#038; return</strong>&#8216; no seu <strong>~/.bashrc</strong>.</p>
<p><strong>Instalando rubies</strong><br />
Perfeito, agora temos a versão mais recente do RVM instalado. Agora, a parte que realmente precisamos para desenvolver nossas próprias aplicações com Ruby. Nós podemos escolher agora várias possibilidades dos interpretadores de ruby que desejar instalar. A mais comumente utilizada é a instalação de um nível de patch específico, que é o padrão. Vamos instalar três intérpretes ruby, especificando suas versões (MRI ruby é interpretador padrão):</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ rvm <span style="color: #c20cb9; font-weight: bold;">install</span> 1.8.6,1.8.7,1.9.1</div></div>
<p>Depois de executar este comando (e esperar por um tempo, dependendo da velocidade da CPU e da largura de banda da rede) devemos ter três interpretadores ruby instalado para cada um deles a última versão do patch. RVM obtém os níveis de patch padrão que são especificado no RVM &#8216;key=value&#8217; no arquivo <strong>~/.rvm/config/db</strong>, estas definições podem ser substituídas pelo usuário em  <strong>~/.rvm/config/user</strong>.<br />
Para ver os rubies instalados basta simplesmente digitar: <strong>rvm list</strong> ao qual devemos ver algo semelhante a:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm Rubies<br />
ruby-1.8.6-p398 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
ruby-1.8.7-p249 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
ruby-1.9.1-p378 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
System Ruby<br />
system <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span></div></div>
<p><strong>Selecionando Rubies</strong><br />
Se quisermos usar o Ruby 1.8.6, nós simplesmente podemos selecionar em nosso shell atual, digitando <strong>rvm 1.8.6</strong>. Podemos então verificar que versão od ruby está sendo utilizada, digitando <strong>ruby -v</strong> e também podemos verificar em qual ambiente está, digitando <strong>rvm info</strong>. RVM opera em uma base per-shell para este ambiente só está ativo para o shell atual, se abrir um novo shell, em seguida, estaremos de volta ao ambiente do sistema, o que nos traz para &#8230;</p>
<p><strong>Definir um Ruby padrão</strong><br />
Se quisermos usar uma versão específica do ruby como padrão para todas as outras versões instaladas, digamos, por exemplo, 1.9.1, vamos definir o padrão digitando: <strong>rvm 1.9.1 &#8211;default</strong>. Então quando nos digitamos <strong>rvm list</strong> vemos agora:</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">rvm Rubies<br />
ruby-1.8.6-p398 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
ruby-1.8.7-p249 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
=<span style="color: #000000; font-weight: bold;">&gt;</span> ruby-1.9.1-p378 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
Default Ruby <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">for</span> new shells<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
ruby-1.9.1-p378 <span style="color: #7a0874; font-weight: bold;">&#91;</span> x86_64 <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
System Ruby<br />
system <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span></div></div>
<p>Agora toda vez que abrir um novo shell vamos encontrar <strong>ruby -v</strong> o RVM 1.9.1 instalado e a <strong>gem list</strong> e as gems que podem ser instaladas no interpretador do RVM 1.9.1.</p>
<p><strong>Ruby Gems</strong><br />
Com isso agora podemos instalar gems, e os pequenos pacotes que tanto precisamos, a fim de produzir o nosso código magnífico! Depois de selecionar uma versão do ruby com rvm 1.9.1, podemos instalar gems usando <strong>gem install <nome da gem></nome></strong> <em>(aviso prévio, sem sudo!)</em>. RVM configura seu ambiente de tal forma que as gems instaladas em um diretório separado para cada interpretador Ruby distintas. Isto significa que devemos instalar as gems para cara interpretador Ruby instalado que queremos com as gems. RVM fornece uma maneira fácil de instalar uma única gem para vários interpretadores: <strong>rvm 1.8.6,1.8.7 gem install ruby-debug</strong> irá instalar ruby-debug para ambas 1.8.6 e 1.8.7, enquanto <strong>rvm 1.9.1 gem install ruby-debug19</strong> irá instalar o ruby-debug19 só para o ruby RVM&#8217;s 1.9.1. Para instalar uma gem a todos os interpretadores simplesmente omitir os seletores: <strong>rvm gem install shoulda</strong>. </p>
<p><strong>(não)sudo</strong><br />
É muito importante para deixar o hábito de usar &#8216;<strong>sudo</strong>&#8216; para instalar gems. Quando <strong>sudo gem install x</strong> é usado <strong>gem install X</strong> é executado como o usuário root com a instalação raiz do ambiente e não no ambiente RVM cuidadosamente construída.</p>
<p><strong>Resumo</strong><br />
Este é um breve tutorial. Para maiores informações e documentação mais detalhada, visite o site do RVM (<a href="http://rvm.beginrescueend.com">http://rvm.beginrescueend.com</a>). </p>
<p><strong>Créditos</strong>: <a href="http://railsmagazine.com/issues/6">http://railsmagazine.com/issues/6</a> page 31. RVM – The Ruby Version Manager by Markus Dreier.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2010/07/08/rvm-the-ruby-version-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Para que server o DOCTYPE?</title>
		<link>http://www.herminiotorres.com/blog/2010/03/29/para-que-server-o-doctype/</link>
		<comments>http://www.herminiotorres.com/blog/2010/03/29/para-que-server-o-doctype/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 00:09:06 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[sgml dtd doctype xhtml strict transitional frameset]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/2010/03/29/para-que-server-o-doctype/</guid>
		<description><![CDATA[O Standard Generalized Markup Language (SGML) é uma metalinguagem através da qual se pode definir linguagens de marcação para documentos. Documentos como (X)HTML e XML são derivadas do SGML. O DOCTYPE é um acrônimo para DTD (Definição de Tipo de Documento). É o doctype que diz para os user agents qual o tipo de documento [...]]]></description>
			<content:encoded><![CDATA[<p>O Standard Generalized Markup Language (SGML) é uma metalinguagem através da qual se pode definir linguagens de marcação para documentos. Documentos como (X)HTML e XML são derivadas do SGML. O DOCTYPE é um acrônimo para DTD (Definição de Tipo de Documento). É o doctype que diz para os user agents qual o tipo de documento que ele tem que interpretar (parsing) e como ele deve renderizar esse documento. A definição de um tipo de documento (doctype) informa quais as regras que os user agents devem utilizar do que é e o que não é permitido em uma determinada versão de um XML e de um (X)HTML. É uma forma de dizer a eles quais são as regras que aquele documento pretende seguir e quais as regras que o browser deve utilizar ao analisar (parsing) o documento. E basicamente existem 3 tipos de DOCTYPES que são: Strict, Transitional, Frameset.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2010/03/29/para-que-server-o-doctype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Campanha Anti-IF para um código mais simples</title>
		<link>http://www.herminiotorres.com/blog/2010/03/24/campanha-anti-if-para-um-codigo-mais-simples/</link>
		<comments>http://www.herminiotorres.com/blog/2010/03/24/campanha-anti-if-para-um-codigo-mais-simples/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 02:27:27 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[if anti-if padrao programação pattern]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=161</guid>
		<description><![CDATA[Bem fiz a tradução desse artigo Anti-IF. O problema básico é que o IF cria dependências, o acoplamento entre os módulos (métodos, objetos, componentes, etc) e aumenta os caminhos possíveis dentro do nosso código (o que reduz a legibilidade). Um IF parece ser uma maneira rápida e fácil de fazer mudanças, mas pelos motivos listados [...]]]></description>
			<content:encoded><![CDATA[<p>Bem fiz a tradução desse artigo <a href="http://www.antiifcampaign.com/articles/the-simplest-anti-if-code.html">Anti-IF</a>.</p>
<p>O problema básico é que o IF cria dependências, o acoplamento entre os módulos (métodos, objetos, componentes, etc) e aumenta os caminhos possíveis dentro do nosso código (o que reduz a legibilidade).</p>
<p>Um IF parece ser uma maneira rápida e fácil de fazer mudanças, mas pelos motivos listados acima, se após o IF, criamos software cheio de duplicações que não pode ser modificado.</p>
<p>Aqui está um exemplo simples:</p>
<div class="codecolorer-container java vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Bond class</span><br />
<span style="color: #000066; font-weight: bold;">double</span> calculateValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// look is here </span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>_type <span style="color: #339933;">==</span> BTP<span style="color: #009900;">&#41;</span> &nbsp;<span style="color: #009900;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> calculateBTPValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// look is here</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>_type <span style="color: #339933;">==</span> BOT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">return</span> calculateBOTValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">return</span> calculateEUBValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Toda mudança no tipo de vínculo, por exemplo, um novo laço para avaliar, conduz a uma modificação no nosso pedaço de código. Imagine o que seria necessário fazer para modificar os métodos com CASES e IF&#8217;s e suas opções!</p>
<div class="codecolorer-container java vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Bond class</span><br />
<span style="color: #000066; font-weight: bold;">double</span> calculateValue<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; _bondProfile.<span style="color: #006633;">calculate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">// AbstractBondProfile class</span><br />
<span style="color: #666666; font-style: italic;">//</span><br />
<span style="color: #666666; font-style: italic;">// look is here</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">double</span> calculate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #666666; font-style: italic;">// classe BTPBondProfile &gt;&gt; AbstractBondProfile</span><br />
<span style="color: #000066; font-weight: bold;">double</span> calculate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; ...<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">// classe BOTBondProfile &gt;&gt; AbstractBondProfile</span><br />
<span style="color: #000066; font-weight: bold;">double</span> calculate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; ...<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">// classe EUBondProfile &gt;&gt; AbstractBondProfile</span><br />
<span style="color: #000066; font-weight: bold;">double</span> calculate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; ...<br />
<span style="color: #009900;">&#125;</span></div></div>
<p>O que ganhamos tirando IF?</p>
<p>A vantagem é que, amanhã, podemos atender a solicitação para um novo tipo de ligação, basta criar uma nova classe, com a única lógica necessária para calcular o valor do novo Bond.</p>
<p>A solução não é sempre criar uma nova classe abstrata ou uma interface. Mas a solução será sempre fazer o software flexível, comunicativo, testável, prontos para a mudança.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2010/03/24/campanha-anti-if-para-um-codigo-mais-simples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eventos do Software Freedom Day em Fortaleza</title>
		<link>http://www.herminiotorres.com/blog/2009/09/15/eventos-do-software-freedom-day-em-fortaleza/</link>
		<comments>http://www.herminiotorres.com/blog/2009/09/15/eventos-do-software-freedom-day-em-fortaleza/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 12:57:08 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Sun Software Livre Evento]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=143</guid>
		<description><![CDATA[Essa semana teremos vários eventos do Dia da Liberdade do Software (ou Software Freedom Day) em Fortaleza. Para quem não conhece, o Software Freedom Day consiste em uma série de eventos focados em Software Livre e Aberto (FOSS) que acontecem em todo o mundo na semana do dia 19 de Setembro. Você pode achar mais [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://dl.getdropbox.com/u/737234/SFD09logo.png" alt="" /></p>
<p style="text-align: justify;">Essa semana teremos vários eventos do Dia da Liberdade do Software (ou Software Freedom Day) em Fortaleza. Para quem não conhece, o Software Freedom Day consiste em uma série de eventos focados em Software Livre e Aberto (FOSS) que acontecem em todo o mundo na semana do dia 19 de Setembro. Você pode achar mais informações no <a href="http://softwarefreedomday.org/about.ptBR" target="_blank">site oficial do SFD</a>.</p>
<p style="text-align: justify;">A Sun patrocina muitos desses eventos (<a href="http://osum.sun.com/events/event/search?q=sfd2009" target="_blank">veja alguns aqui</a>), fornecendo palestrantes, que quase sempre também assumem a organização, mídias para instalação de softwares Open Source e materiais para sorteio de brindes.</p>
<p style="text-align: justify;">Em Fortaleza, teremos eventos na Unifor, FIC, Faculdade Christus e UFC. Veja abaixo o cronograma dos eventos, com local, horário e palestras que serão realizadas:</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><strong>Terça-feira (15/09):</strong></span><br />
<strong>Local:</strong> Campus da Unifor &#8211; Auditório A3<br />
<strong>Horário: </strong>19:00<br />
<strong>Palestras:</strong>
</p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Apresentando o OpenSolaris</p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Linguagem e Filosofia Ruby</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><strong>Quinta-feira (17/09):</strong></span><br />
<strong>Local: </strong>FIC &#8211; Unidade Moreira Campos<br />
<strong>Horário: </strong>18:00
</p>
<p style="text-align: justify;"><strong>Palestras:</strong></p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Apresentando o OpenSolaris</p>
<p style="text-align: justify;"><strong>Local: </strong>Faculdade Christus &#8211; Dom Luís &#8211; Auditório I<br />
<strong>Horário: </strong>20:30
</p>
<p style="text-align: justify;"><strong>Palestras:</strong></p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Conhecendo o Framework Jboss Seam</p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Linguagem e Filosofia Ruby</p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Apresentando o OpenSolaris</p>
<p style="text-align: justify;"><span style="color: #ff0000;"><strong>Sexta-feira (18/09):</strong></span><br />
<strong>Local: </strong>UFC &#8211; Campus do Pici &#8211; Dept. de Engenharia de Teleinformática &#8211; Sala 2<br />
<strong>Horário: </strong>16:00
</p>
<p style="text-align: justify;"><strong>Palestras:</strong></p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Apresentando o OpenSolaris</p>
<p style="text-align: justify;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Linguagem e Filosofia Ruby</p>
<p style="text-align: justify;">Todos os eventos têm patrocínio da Sun, apoio das respectivas universidades/faculdades e contarão com distribuição de DVD packs do OpenSolaris e sorteio de brindes.</p>
<p style="text-align: justify;">Participe!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/09/15/eventos-do-software-freedom-day-em-fortaleza/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>RSpec &#8211; Objetos Mock com comportamento de Objetos Reais</title>
		<link>http://www.herminiotorres.com/blog/2009/08/25/rspec-objetos-mock-com-comportamento-de-objetos-reais/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/25/rspec-objetos-mock-com-comportamento-de-objetos-reais/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 19:08:39 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Teste]]></category>
		<category><![CDATA[rspec spec teste ruby mock]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=141</guid>
		<description><![CDATA[Objetos Mock com comportamento de Objetos Reais RSpec permite que você adicione o comportamento de objetos reais para objetos fictícios, para que possa definir as expectativas de mensagens ocultas e método em qualquer objeto em seu sistema. Uma utilização comum deste apoio é isolar exemplos do ActiveRecord e, portanto, o banco de dados em exemplos [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://rspec.info/documentation/mocks/partial_mocks.html" target="_blank">Objetos Mock com comportamento de Objetos Reais</a></strong></p>
<p>	RSpec permite que você adicione o comportamento de objetos reais para objetos fictícios, para que possa definir as expectativas de mensagens ocultas e método em qualquer objeto em seu sistema.</p>
<p>	Uma utilização comum deste apoio é isolar exemplos do ActiveRecord e, portanto, o banco de dados em exemplos no Ruby on Rails.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; MyModel.<span style="color:#9900CC;">should_receive</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:find</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">with</span><span style="color:#006600; font-weight:bold;">&#40;</span>id<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">and_return</span><span style="color:#006600; font-weight:bold;">&#40;</span>@mock_model_instance<span style="color:#006600; font-weight:bold;">&#41;</span></div></div>
<p>Controlar o comportamento dos métodos da classe de nível (por exemplo, tendo-lhes que devolver um objeto fictício, em vez de uma instância real da classe modelo) permite-lhe descrever seus controllers e views de forma isolada a partir da lógica de ocorrência de classes do seu model. Isso significa que você pode mudar as regras de validação de um modelo, por exemplo, e de unidade que nos exemplos modelos sem afetar o tratamento e exemplos de exibição.</p>
<p>	Isso também ajuda a manter o contexto do seu exemplo completamente em exibição (sem ter de olhar para fixtures/xyz.yml e ter que entender o que está acontecendo).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/25/rspec-objetos-mock-com-comportamento-de-objetos-reais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpec &#8211; Mocks and Stubs</title>
		<link>http://www.herminiotorres.com/blog/2009/08/25/rspec-mocks-and-stubs/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/25/rspec-mocks-and-stubs/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 15:52:19 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Teste]]></category>
		<category><![CDATA[rspec spec teste ruby mock stub]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=137</guid>
		<description><![CDATA[Mocks and Stubs Objetos Mock são objetos de dublê que dão maior controle declarativa sobre o seu comportamento no cursor da execução de um exemplo. Definindo mensagens de expectativas e métodos stubs de objetos permite que você especifique uma simulação como um objeto colaborar/corresponder com os outros antes desses objetos existirem. Você também pode usar [...]]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://rspec.info/documentation/mocks/" target="_blank">Mocks and Stubs</a></strong></p>
<p>	Objetos Mock são objetos de dublê que dão maior controle declarativa sobre o seu comportamento no cursor da execução de um exemplo. Definindo mensagens de expectativas e métodos stubs de objetos permite que você especifique uma simulação como um objeto colaborar/corresponder com os outros antes desses objetos existirem.</p>
<p>	Você também pode usar objetos dublê para isolar os seus exemplos de serviços que são complexos para configurar ou caros demais para serem executados e assim pode manter seu conjunto de exemplos funcionando rapidamente.</p>
<p>	RSpec possibilita ter objetos falsos, assim lhe permite criar objetos fictícios em seus exemplos de objetos mocks, tendo o mesmo comportamento de seus objetos existentes.</p>
<p>	<strong>Criando um objeto fictício</strong></p>
<p>	Você cria um objeto mock com o método de simulação:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; my_mock = mock<span style="color:#006600; font-weight:bold;">&#40;</span>name<span style="color:#006600; font-weight:bold;">&#41;</span></div></div>
<p>Isso cria uma nova simulação com esse name (uma string) e registra-lo. Quando terminar o exemplo, todas as simulações registradas são verificadas.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; my_mock = mock<span style="color:#006600; font-weight:bold;">&#40;</span>name, stubs_and_options<span style="color:#006600; font-weight:bold;">&#41;</span></div></div>
<p>Como acima, mas permite que você defina valores de retorno mínimo para determinadas mensagens e opções à ajustar a simulação do comportamento. Atualmente a única opção suportada é a seguinte :null_object. Definir isso como verdade instrui a ironizar a ignorar (baixo consumo) qualquer mensagem que não foi dita para esperar e retornar-se.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; my_mock = mock<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;blah&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:null_object</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span></div></div>
<p><strong>Notas</strong><br />
	Há muitos pontos de vista diferentes sobre o significado de mocks e stubs. Se você estiver interessado em aprender mais, aqui estão algumas leituras recomendadas:</p>
<p>	• Mock Objects: <a href="http://www.mockobjects.com/" target="_blank">http://www.mockobjects.com/</a><br />
  • Endo-Testing: <a href="http://www.mockobjects.com/files/endotesting.pdf" target="_blank">http://www.mockobjects.com/files/endotesting.pdf</a><br />
  • Mock Roles, Not Objects: <a href="http://www.mockobjects.com/files/mockrolesnotobjects.pdf" target="_blank">http://www.mockobjects.com/files/mockrolesnotobjects.pdf</a><br />
  • Test Double Patterns: <a href="http://xunitpatterns.com/Test%20Double%20Patterns.html" target="_blank">http://xunitpatterns.com/Test%20Double%20Patterns.html</a><br />
  • Mocks aren’t stubs: <a href="http://www.martinfowler.com/articles/mocksArentStubs.html" target="_blank">http://www.martinfowler.com/articles/mocksArentStubs.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/25/rspec-mocks-and-stubs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpec &#8211; Expectativas</title>
		<link>http://www.herminiotorres.com/blog/2009/08/25/rspec-expectativas/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/25/rspec-expectativas/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 03:21:31 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Teste]]></category>
		<category><![CDATA[expectativas rspec spec ruby teste matchers expectations]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=135</guid>
		<description><![CDATA[Spec::Expectations e Spec::Matchers Quando executa especificações do RSpec, que define #should e #should_not a cada objeto do sistema. Esses métodos são a sua entrada para a magia do RSpec. Veja Spec::Expectations e Spec::Matchers para mais informações.]]></description>
			<content:encoded><![CDATA[<p><a href="http://rspec.info/documentation/expectations.html" target="_blank">Spec::Expectations e Spec::Matchers</a></p>
<p>Quando executa especificações do RSpec, que define <strong>#should</strong> e <strong>#should_not</strong> a<br />
cada objeto do sistema. Esses métodos são a sua entrada para a magia do RSpec.</p>
<p>Veja <a href="http://rspec.rubyforge.org/rspec/1.2.8/classes/Spec/Expectations.html" target="_blank">Spec::Expectations</a> e <a href="http://rspec.rubyforge.org/rspec/1.2.8/classes/Spec/Matchers.html" target="_blank">Spec::Matchers</a> para mais informações.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/25/rspec-expectativas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpec &#8211; Exemplos de código executável</title>
		<link>http://www.herminiotorres.com/blog/2009/08/24/rspec-exemplos-de-codigo-executavel/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/24/rspec-exemplos-de-codigo-executavel/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 18:29:53 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Teste]]></category>
		<category><![CDATA[rspec spec teste ruby]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=132</guid>
		<description><![CDATA[Exemplos de código executável RSpec fornece uma Domain Specific Language(DSL) com o qual você pode expressar exemplos executável do comportamento esperado de seu código. Imagine que você estivesse falando com um cliente solicitando o software para o seu banco. Parte da conversa que bem poderia ser assim: &#160; &#160; Você: Descrever uma conta quando ela [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Exemplos de código executável</strong></p>
<p>	<a href="http://rspec.info/documentation/" target="_blank">RSpec</a> fornece uma <a href="http://blog.caelum.com.br/2008/12/30/dsls-nao-sao-para-gerentes/" target="_blank">Domain Specific Language</a>(DSL) com o qual você pode expressar exemplos executável do comportamento esperado de seu código.</p>
<p>	Imagine que você estivesse falando com um cliente solicitando o software para o seu banco. Parte da conversa que bem poderia ser assim:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; Você: Descrever uma conta quando ela é criada pela primeira vez.<br />
&nbsp; &nbsp; <span style="color:#9900CC;">Cliente</span>: Ele deve ter um saldo de $<span style="color:#006666;">0</span>.</div></div>
<p>Veja como podemos expressar essa conversa de RSpec:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; describe Account, <span style="color:#996600;">&quot;when first created&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; it <span style="color:#996600;">&quot;should have a balance of $0&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; …<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>O <strong>describe()</strong> é um método que retorna uma classe ExampleGroup, que contém um conjunto de exemplos de um comportamento específico do sistema que pretende descrever.</p>
<p>	O <strong>it()</strong> é um método que retorna uma instância da ExampleGroup em que esse exemplo é executado.</p>
<p>	Quando você executar esse exemplo, RSpec pode fornecer um relatório como este:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; Conta, quando criada pela primeira vez<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">-</span> Deve ter um saldo de $<span style="color:#006666;">0</span></div></div>
<p><strong>before() e after()</strong></p>
<p>	Você pode usar <strong>before()</strong> e/ou <strong>after()</strong> para definir um código que é executado antes e depois de cada exemplo, ou apenas uma vez por exampleGroup:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; describe Thing <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; before<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Este é executado apenas uma única vez, antes de todos os exemplos</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># e antes de qualquer blocks before(:each)</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; before<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:each</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Este é executado antes de cada exemplo</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; before <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># :each é o padrão, então este é o mesmo que before(:each)</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should do stuff&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># deve fazer coisas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; …<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should do more stuff&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># deve fazer mais coisas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; …<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; after<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:each</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># isto é, após cada exemplo</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; after <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># :each é o padrão, então este é o mesmo que after(:each)</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; after<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:all</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># Este é executado apenas uma única vez depois de todos os exemplos</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># E depois de qualquer blocks after(:each)</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p><strong>Atenção:</strong> A utilização do before(:all) e after(:all) é desencorajada porque ela introduz dependências entre os exemplos. Mesmo assim, pode ser útil para operações se você sabe o que está fazendo.</p>
<p><strong>Métodos Helper</strong></p>
<p>	Você pode escrever métodos helper(auxiliares) diretamente dentro de um Exemple Group:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; describe <span style="color:#996600;">&quot;…&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;…&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; helper_method<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> helper_method<br />
&nbsp; &nbsp; &nbsp; &nbsp; …<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p><strong>Métodos Helper Reutilizáveis</strong></p>
<p>	Você pode incluir métodos helper em vários ExampleGroups, basta colocar dentro de um módulo e em seguida, incluindo um módulo em seu exampleGroup:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">module</span> AccountExampleHelperMethods<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> helper_method<br />
&nbsp; &nbsp; &nbsp; &nbsp; …<br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; describe <span style="color:#996600;">&quot;A new account&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">include</span> AccountExampleHelperMethods<br />
&nbsp; &nbsp; &nbsp; before <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@account</span> = Account.<span style="color:#9900CC;">new</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should have a balance of $0&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; helper_method<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@account</span>.<span style="color:#9900CC;">balance</span>.<span style="color:#9900CC;">should</span> eql<span style="color:#006600; font-weight:bold;">&#40;</span>Money.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">0</span>, <span style="color:#ff3333; font-weight:bold;">:dollars</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Exemplo Grupos Compartilhados</p>
<p>	Você pode criar exemplo de grupos compartilhados e incluir os grupos em outros grupos.</p>
<p>	Suponha que você tenha algum tipo de comportamento que se aplica a todas as edições do seu produto, grandes e pequenos.</p>
<p>	Primeiro comportamento do fator de &#8220;compartilhamento&#8221;:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; shared_examples_for <span style="color:#996600;">&quot;all editions&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should behave like all editions&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>Então, quando você precisa definir o comportamento para as grandes e pequenas edições,<br />
	referência o comportamento compartilhado usando o método it_should_behave_like ()</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; describe <span style="color:#996600;">&quot;SmallEdition&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it_should_behave_like <span style="color:#996600;">&quot;all editions&quot;</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should also behave like a small edition&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; describe <span style="color:#996600;">&quot;LargeEdition&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it_should_behave_like <span style="color:#996600;">&quot;all editions&quot;</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should also behave like a large edition&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>it_should_behave_like irá procurar um ExampleGroup pela sua descrição, neste caso, &#8220;all editions&#8221;</p>
<p>	Todas abaixo são incluídas em um grupo compartilhado:<br />
		* before(:all)<br />
    * before(:each)<br />
    * after(:each)<br />
    * after(:all)<br />
    * all included modules<br />
    * all methods</p>
<p>	Exemplos de grupos compartilhados não podem extend(estender) as classes.</p>
<p>	Vários exemplos grupos compartilhados pode ser referenciado em um grupo não compartilhado.</p>
<p>	Exemplos de grupos compartilhados podem ser incluídos em outros grupos compartilhados:</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; shared_examples_for <span style="color:#996600;">&quot;All Employees&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should be payable&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@employee</span>.<span style="color:#9900CC;">should</span> respond_to<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:calculate_pay</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; shared_examples_for <span style="color:#996600;">&quot;All Managers&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; it_should_behave_like <span style="color:#996600;">&quot;All Employees&quot;</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should be bonusable&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@employee</span>.<span style="color:#9900CC;">should</span> respond_to<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:apply_bonus</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; describe Officer <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; before<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:each</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@employee</span> = Officer.<span style="color:#9900CC;">new</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; &nbsp; it_should_behave_like <span style="color:#996600;">&quot;All Managers&quot;</span><br />
<br />
&nbsp; &nbsp; &nbsp; it <span style="color:#996600;">&quot;should be optionable&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0066ff; font-weight:bold;">@employee</span>.<span style="color:#9900CC;">should</span> respond_to<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:grant_options</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<br />
&nbsp; &nbsp; $ spec officer_spec.<span style="color:#9900CC;">rb</span><br />
&nbsp; &nbsp; Officer<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">-</span> should be payable<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">-</span> should be bonusable<br />
&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">-</span> should be optionable</div></div>
<p><strong>Exemplos Pendentes</strong></p>
<p>	Há três formas de marcar um exemplo como &#8220;pendente&#8221;.<br />
	<strong>Deixar o bloco:</strong></p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; it <span style="color:#996600;">&quot;should say foo&quot;</span></div></div>
<p>A saída será dizer pendente (ainda não implementado).<br />
	<strong>Use o método pendente com nenhum bloco:</strong></p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; it <span style="color:#996600;">&quot;should say foo&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; pending<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;get the vocal chords working&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; subject.<span style="color:#9900CC;">should</span> say<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;foo&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>A saída será dizer PENDENTES (obter as cordas vocais de trabalho).<br />
	<strong>Use o método pendente com um bloco:</strong></p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; it <span style="color:#996600;">&quot;should say foo&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; pending<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;get the vocal chords working&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; subject.<span style="color:#9900CC;">should</span> say<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;foo&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>A saída será dizer PENDENTES (obter as cordas vocais de trabalho), e o exemplo falhará dizendo-lhe para que seja corrigido logo o bloco e não gera nenhum erro.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/24/rspec-exemplos-de-codigo-executavel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSpec &#8211; O Inicio, como testar com rspec.</title>
		<link>http://www.herminiotorres.com/blog/2009/08/24/rspec-o-inicio-como-testar-com-rspec/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/24/rspec-o-inicio-como-testar-com-rspec/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 16:39:32 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Gem]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[RSpec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Teste]]></category>
		<category><![CDATA[rspec spec gem teste ruby rubygems]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=105</guid>
		<description><![CDATA[Primeiramente vamos instalar Gem Spec. $ gem install rspec Agora vamos criar a nossa estrutura onde vamos trabalhar um exemplo simples. $ mkdir bowling $ cd bowling $ mkdir spec $ mkdir lib Comece com um exemplo muito simples que expressa algum comportamento básico desejado. # vamos criar um arquivo chamado bowling_spec.rb # dentro pasta [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Primeiramente vamos instalar <a href="http://wiki.github.com/dchelimsky/rspec/install" target="_blank">Gem Spec</a>.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ gem <span style="color: #c20cb9; font-weight: bold;">install</span> rspec</div></div>
</p>
<p style="text-align: justify;">Agora vamos criar a nossa estrutura onde vamos trabalhar um <a href="http://rspec.info/" target="_blank">exemplo simples</a>.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> bowling<br />
$ <span style="color: #7a0874; font-weight: bold;">cd</span> bowling<br />
$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> spec<br />
$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> lib</div></div>
</p>
<p style="text-align: justify;">Comece com um exemplo muito simples que expressa algum comportamento básico desejado.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># vamos criar um arquivo chamado bowling_spec.rb</span><br />
<span style="color:#008000; font-style:italic;"># dentro pasta spec que criamos agora a pouco</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span><br />
<span style="color:#008000; font-style:italic;"># o require a rubygems é para que eu possa</span><br />
<span style="color:#008000; font-style:italic;"># chamadar a gem spec e testar minha aplicação.</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec'</span><br />
<span style="color:#008000; font-style:italic;"># e este require é do meu arquivo de boliche</span><br />
<span style="color:#008000; font-style:italic;"># onde vou tentar validar seu código, com testes.</span><br />
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'lib/bowling'</span><br />
<br />
<span style="color:#008000; font-style:italic;"># aqui é onde vamos descrever um boliche</span><br />
describe Bowling <span style="color:#9966CC; font-weight:bold;">do</span><br />
<br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># vamos descrever um comportamento</span><br />
&nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># deve ter 0 escore na calha do jogo</span><br />
&nbsp; &nbsp; it <span style="color:#996600;">&quot;should score 0 for gutter game&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># cria um novo objeto</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bowling = Bowling.<span style="color:#9900CC;">new</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># passa o valor 0 pinos para o método hit</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006666;">20</span>.<span style="color:#9900CC;">times</span> <span style="color:#006600; font-weight:bold;">&#123;</span> bowling.<span style="color:#9900CC;">hit</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#008000; font-style:italic;"># aqui ele diz: score deveria ser igual a 0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; bowling.<span style="color:#9900CC;">score</span>.<span style="color:#9900CC;">should</span> == <span style="color:#006666;">0</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
</p>
<p style="text-align: justify;">Vamos executar o <a href="http://pt.wikipedia.org/wiki/Teste_de_software" target="_blank">teste</a> e vê-lo falhar.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ spec spec<span style="color: #000000; font-weight: bold;">/</span>bowling_spec.rb <span style="color: #660033;">--format</span> specdoc<br />
.<span style="color: #000000; font-weight: bold;">/</span>spec<span style="color: #000000; font-weight: bold;">/</span>bowling_spec.rb:<span style="color: #000000;">11</span>: uninitialized constant Bowling</div></div>
</p>
<p style="text-align: justify;">Agora, vamos escrever o código apenas o suficiente para fazê-lo passar.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#008000; font-style:italic;"># bowling - boliche</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">class</span> Bowling<br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> hit<span style="color:#006600; font-weight:bold;">&#40;</span>pins<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> score<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006666;">0</span><br />
&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
</p>
<p style="text-align: justify;">Execute o exemplo novamente e veja o teste passar.</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ spec spec<span style="color: #000000; font-weight: bold;">/</span>bowling_spec.rb <span style="color: #660033;">--format</span> specdoc<br />
<br />
Bowling<br />
- should score <span style="color: #000000;">0</span> <span style="color: #000000; font-weight: bold;">for</span> gutter game<br />
<br />
Finished <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000;">0.002854</span> seconds<br />
<br />
<span style="color: #000000;">1</span> example, <span style="color: #000000;">0</span> failures</div></div>
</p>
<p style="text-align: justify;">Tomar medidas pequenas(<a href="http://www.improveit.com.br/xp/principios/passos_bebe" target="_blank">baby-steps</a>)<br />
Não se apresse em escrever muito código. Em vez disso, adicionar outro exemplo, e deixá-lo guiar dizendo o que você tem que fazer a seguir. E não se esqueça de ter tempo para <a href="http://www.improveit.com.br/xp/praticas/refatoracao" target="_blank">refatorar</a> seu código antes que ele fique confuso. Você deve manter seu código limpo, a cada passo dado no seu caminho.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/24/rspec-o-inicio-como-testar-com-rspec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails: ActiveRecord::Validations para validar o formato e a veracidade dos e-mail</title>
		<link>http://www.herminiotorres.com/blog/2009/08/20/rails-activerecordvalidations-para-validar-o-formato-e-a-veracidade-dos-e-mail/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/20/rails-activerecordvalidations-para-validar-o-formato-e-a-veracidade-dos-e-mail/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 20:53:05 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Format]]></category>
		<category><![CDATA[Plugin Email_Veracity]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Validations]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=72</guid>
		<description><![CDATA[Todos nós sabemos que o Rails tem validações prontas para serem utilizadas. Isso se dá ao fato da sua classe de herdar do ActiveRecord. Uma maneira bastante utilizada é validar o formato de um email utilizando expressões regulares e tem o rubular para fazer testes desses matchers. Assim: class Person &#60; ActiveRecord::Base validates_format_of :email, :with [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Todos nós sabemos que o <a href="http://api.rubyonrails.org/" target="_blank">Rails</a> tem validações prontas para serem utilizadas. Isso se dá ao fato da sua classe de herdar do <a href="http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html" target="_blank">ActiveRecord</a>.</p>
<p style="text-align: justify;">Uma maneira bastante utilizada é validar o formato de um email utilizando <a href="http://guia-er.sourceforge.net/" target="_blank">expressões regulares</a> e tem o <a href="http://www.rubular.com/" target="_blank">rubular</a> para fazer testes desses matchers. Assim:</p>
<pre>class Person &lt; ActiveRecord::Base
    validates_format_of :email,
                        :with =&gt; /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
end</pre>
<p style="text-align: justify;">Bem, com isso conseguimos nossa validação de um formato mas não está 100% perfeita, pois permite que o usuário possa digitar um email não valido passando apenas no <a href="http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M002168" target="_blank">format</a>, por exemplo:</p>
<pre>#
# email invalido pois não tem nenhum servidor de email que responda por gmail.com em vez de gmail.com
#
alguma_coisa@gmaio.com</pre>
<p style="text-align: justify;">Por isso iremos utilizar o plugin <a href="http://github.com/heycarsten/email-veracity/tree/master" target="_blank">Email-Veracity</a>. E vamos melhorar a nossa validação, basta ir na pagina do <em>Email-Veracity</em> e fazer o download do plugin para a pasta <em><span style="text-decoration: underline;">vendor/plugins/</span></em> no seu projeto.</p>
<pre>require 'email_veracity'

class Person &lt; ActiveRecord::Base
    validates_format_of :email,
                        :with =&gt; /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
                        :if =&gt; :is_a_valid_email?

    def is_a_valid_email?
        address = EmailVeracity::Address.new("#{self.email}")
        address.valid?
    end
end</pre>
<p style="text-align: justify;">Bem, agora podemos verificar se é um email 100% validado, onde fazemos um <a href="http://blog.areacriacoes.com.br/2008/9/18/include-require-load-e-extend-em-ruby" target="_blank"><em>require</em></a> no <em>modulo</em> de <em>email_veracity</em> e incluimos um <em>if </em>no <em>validates_format_of </em>que faz uma chamada ao método <em>is_a_valid_email?</em> se esse método retorna <em>true</em> faz a validação se retorna <em>false</em> não valida, podemos notar que o método implicitamente da um <em>return</em> em <em>address.valid?</em> bem é isso espero que tenham gostado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/20/rails-activerecordvalidations-para-validar-o-formato-e-a-veracidade-dos-e-mail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Variáveis no Ruby</title>
		<link>http://www.herminiotorres.com/blog/2009/08/10/variaveis-no-ruby/</link>
		<comments>http://www.herminiotorres.com/blog/2009/08/10/variaveis-no-ruby/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:53:49 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[variaveis ruby]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=68</guid>
		<description><![CDATA[@Variáveis de Instância Variáveis que começam com uma arroba são variáveis de instância. @x @y @somente_o_maior_pedaco_de_bacon_que_eu_ja_vi # são exemplos. Estas variáveis são muito usadas para se definir atributos de alguma coisa. Por exemplo, você pode prover o Ruby com a largura da porta_da_frente criando a variável @largura dentro daquela porta_da_frente. Variáveis de instância são usadas [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><strong>@Variáveis de Instância</strong></p>
<p style="text-align: justify;">Variáveis que começam com uma arroba são variáveis de instância.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#0066ff; font-weight:bold;">@x</span><br />
<span style="color:#0066ff; font-weight:bold;">@y</span><br />
<span style="color:#0066ff; font-weight:bold;">@somente_o_maior_pedaco_de_bacon_que_eu_ja_vi</span><br />
<span style="color:#008000; font-style:italic;"># são exemplos.</span></div></div>
<p style="text-align: justify;">Estas variáveis são muito usadas para se definir atributos de alguma coisa. Por exemplo, você pode prover o Ruby com a largura da porta_da_frente criando a variável @largura dentro daquela porta_da_frente. Variáveis de instância são usadas para se definir características de um objeto em Ruby.</p>
<p style="text-align: justify;">Pense no símbolo arroba (at) como significando atributo.</p>
<p style="text-align: justify;"><strong>@@Variáveis de Classe</strong></p>
<p style="text-align: justify;">Variáveis que começam com duas arrobas são variáveis de classe.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@@@x@<br />
@@@y@<br />
@@@vou_pegar_seus_bacons_pedacudos_e_ensinar_uma_licao_a_voces_dois@<br />
<span style="color:#008000; font-style:italic;"># são exemplos.</span></div></div>
<p style="text-align: justify;">Variáveis de classe são usadas, também, para se definir atributos. Mas ao invés de definir um atributo a apenas um objeto no Ruby, variáveis de classe dão um atributo a vários objetos relacionados no Ruby. Se as variáveis de instância estipulam atributos para só uma porta_da_frente, então variáveis de classe estipulam atributos para tudo que for Porta.</p>
<p style="text-align: justify;">Pense no prefixo da dupla arroba significando atribua a todos. Adicionalmente, você pode pensar em um esquadrão de AT-ATs do Guerra nas Estrelas, que são comandados pelo Ruby. Você muda uma variável de classe e não apenas uma muda, todas elas mudam.</p>
<p style="text-align: justify;"><strong>$Variáveis Globais</strong></p>
<p style="text-align: justify;">Variáveis que começam com um cifrão são globais.</p>
<div class="codecolorer-container ruby vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color:#ff6633; font-weight:bold;">$x</span><br />
$<span style="color:#006666;">1</span><br />
<span style="color:#ff6633; font-weight:bold;">$pedacudo</span>; <span style="color:#ff6633; font-weight:bold;">$BAcOn_PeDAcUDo</span><br />
<span style="color:#008000; font-style:italic;"># são exemplos.</span></div></div>
<p style="text-align: justify;">A maioria das variáveis são temporárias por natureza. Algumas partes do seu programa são como casas. Você entra e elas têm suas próprias variáveis. Em um casa, você pode ter um pai que representa Archie, um caixeiro-viajante colecionador de esqueletos. Em outra casa, pai pode representar Peter, um domador de leões com grande apreço por flanela. Cada casa tem um sentido próprio para pai.</p>
<p style="text-align: justify;">Com variáveis globais, você garante que a variável será a mesma em cada casinha. O sinal de cifrão é bem apropriado. Todo lar Americano respeita o valor do cifrão. Somos doidos pela coisa. Tente bater em qualquer porta na América e dê a eles dinheiro. Eu posso garantir que você não verá a mesma reação se bater em uma porta e oferecer Peter, um domador de leões com grande apreço por flanela.</p>
<p style="text-align: justify;">Variáveis globais podem ser usadas em qualquer lugar no seu programa. Elas nunca saem da vista.</p>
<p style="text-align: justify;">Bem e como eu sei quais são todas essas variáveis globais?</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #7a0874; font-weight: bold;">&#91;</span>herminio<span style="color: #7a0874; font-weight: bold;">&#93;</span> ~$ ruby <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'puts global_variables.sort'</span><br />
<span style="color: #007800;">$!</span><br />
$<span style="color: #ff0000;">&quot;<br />
$$<br />
$&amp;amp;<br />
$'<br />
$*<br />
$+<br />
$,<br />
$-0<br />
$-F<br />
$-I<br />
$-K<br />
$-a<br />
$-d<br />
$-i<br />
$-l<br />
$-p<br />
$-v<br />
$-w<br />
$.<br />
$/<br />
$0<br />
$:<br />
$;<br />
$&amp;lt; $= $&amp;gt;<br />
$?<br />
$@<br />
<span style="color: #007800;">$DEBUG</span><br />
<span style="color: #007800;">$FILENAME</span><br />
<span style="color: #007800;">$KCODE</span><br />
<span style="color: #007800;">$LOADED_FEATURES</span><br />
<span style="color: #007800;">$LOAD_PATH</span><br />
<span style="color: #007800;">$PROGRAM_NAME</span><br />
<span style="color: #007800;">$SAFE</span><br />
<span style="color: #007800;">$VERBOSE</span><br />
$<span style="color: #000099; font-weight: bold;">\<br />
</span><span style="color: #007800;">$_</span><br />
$`<br />
<span style="color: #007800;">$deferr</span><br />
<span style="color: #007800;">$defout</span><br />
<span style="color: #007800;">$stderr</span><br />
<span style="color: #007800;">$stdin</span><br />
<span style="color: #007800;">$stdout</span><br />
$~</span></div></div>
<p><em><strong>Creditos: <a href="http://why.nomedojogo.com" target="_blank">Livro O Guia (comovente) de Ruby do Why.</a></strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/08/10/variaveis-no-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobre Escrever Artigos</title>
		<link>http://www.herminiotorres.com/blog/2009/07/05/sobre-escrever-artigos/</link>
		<comments>http://www.herminiotorres.com/blog/2009/07/05/sobre-escrever-artigos/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 17:17:48 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[escrever bloggar artigos]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=65</guid>
		<description><![CDATA[Escrever Artigos Escrever não é difícil. Escrever bem é difícil, mas você é um programador, então não precisa se preocupar com isso. Ninguém espera que você seja um bom escritor, eles ficariam felizes se você fosse, mas eles perdoam se você não for. Não utilize a pouca habilidade em escrever como uma desculpa. Não sei [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Escrever Artigos</strong></p>
<p>Escrever não é difícil. Escrever bem é difícil, mas você é um programador, então não precisa se preocupar com isso. Ninguém espera que você seja um bom escritor, eles ficariam felizes se você fosse, mas eles perdoam se você não for. Não utilize a pouca habilidade em escrever como uma desculpa.</p>
<p>Não sei o que escrever? As respostas estão todas ao seu redor. Tudo que você faz ou acha que seja interessante, há 100 pessoas pesquisando no Google para saber como fazê-lo. Qualquer questão que um amigo lhe perguntar, alguém está pesquisando no Google pela mesma resposta. Tudo que for valioso&#8230; Sim, alguém está Googlando por isso.</p>
<p>Aproveite o tempo para escrever sobre coisas interessantes no seu blog. As pessoas se lembrarão de você se seu blog aparecer continuamente em suas pesquisas no Google.</p>
<p>Crie um blog. <em><a href="http://www.blogger.com/">Blogger</a></em> é gratuito e é definitivamente bom o suficiente. Eis aqui algumas reflexões sobre blogar.</p>
<ul>
<li>Não      precisa criar o seu próprio blog, você não precisa ter dor de cabeça com      manutenção.</li>
<li>Dê um      nome simples para o Blog, mas não se esqueça de incluir o seu nome.      Divagações de Disco Stu é engraçado, mas você quer construir a sua marca,      não  a de Disco Stu.</li>
<li>Compre      um domínio com o seu nome e coloque o blog como um diretório (eu não fiz      isso corretamente). Se eu tivesse que fazer no meu blog seria em      http://jayfields.com/blog. Isto é importante para o Google Page      Rank.  Se você fizer isso da maneira que eu fiz, você terá diferentes      page rank para a sua página inicial e do seu blog. Não é o fim do mundo,      mas não seria ideal.</li>
<li>Mantenha-se      focado. Se você quiser escrever sobre programação e jogos de azar, crie      dois blogs diferentes. Também, evite posts do tipo &#8220;Desculpe-me não      ter escrito por algum tempo&#8221;. As pessoas não estão morrendo para o      seu próximo post. Eles subscreveram porque eles querem conteúdo técnico, e      não histórias sobre como você ficou ocupado remodelando sua casa.</li>
<li>Manter      postagens curtas se possível. Algo em      torno de 1500 palavras é o ideal para um artigo. Se você não conseguir      encontrar um lugar para publicar o artigo, então no seu blog está ótimo.      Mas, lembre-se que as pessoas não gostam de ler longos artigos no blog.</li>
</ul>
<p>Inicialmente, mantenha-se escrevendo posts no seu blog. Elas não são muito difíceis e não exigem um acabamento. Elas também permitem que você comece construir um catálogo de material. Uma vez que você tenha posts semelhantes suficientes, transformando-os em artigos para postar na <a href="http://64.233.169.132/translate_c?hl=pt-BR&amp;sl=en&amp;tl=pt&amp;u=http://www.infoq.com/&amp;rurl=translate.google.com&amp;usg=ALkJrhjaHjEm-PIVLCRY3ApNqEEL4tx_Vw">InfoQ</a> ou outros sites semelhantes. Eventualmente, se você escrever artigos suficientes, você pode reuni-los em um livro. Vai demorar anos, mas também demora ao escrever um livro a partir do zero e fazê-lo desta forma permite-lhe obter feedback constante, sem pressão para entrega.</p>
<p><em>Creditos: <a href="http://blog.jayfields.com/2008/08/be-your-start-up.html" target="_blank">Jay Fields</a></em> &#8211; Tradução desse artigo. Ajuda na revisão da tradução  <a href="mailto:philipefarias@gmail.com"><em>Philipe Farias</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/07/05/sobre-escrever-artigos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Efeito Stroop</title>
		<link>http://www.herminiotorres.com/blog/2009/06/29/efeito-stroop/</link>
		<comments>http://www.herminiotorres.com/blog/2009/06/29/efeito-stroop/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 13:23:23 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=61</guid>
		<description><![CDATA[Efeito Stroop, é um estudo do cérebro humano, onde o mesmo faz um processamento ocular da escrita e não da cor da palavra. Tente isto: A tabela abaixo contém uma lista de cores e nomes, cada um exibido em outra cor. Diga em voz alta a cor de cada palavra escrita abaixo, e não a [...]]]></description>
			<content:encoded><![CDATA[<p>Efeito <em>Stroop</em>, é um estudo do cérebro humano, onde o mesmo faz um processamento ocular da escrita e não da cor da palavra.<br />
<strong>Tente isto:</strong><br />
A tabela abaixo contém uma lista de cores e nomes, cada um exibido em outra cor. Diga em voz alta a cor de cada palavra escrita abaixo, e não a própria palavra.</p>
<p style="text-align: center;"><img class="size-full wp-image-62 aligncenter" title="effect_stroop" src="http://www.herminiotorres.com/blog/wp-content/uploads/2009/06/effect_stroop.png" alt="effect_stroop" width="440" height="105" /></p>
<p><strong>Como você faz?</strong><br />
Era difícil ignorar o que foi escrito e só ler a cor dos nomes?<br />
Seu cérebro quiser ler as palavras, não as cores. O conflito torna esta informação muito mais difícil do que deveria ser.<br />
A mesma coisa pode acontecer com você quando desenhar e escrever código. Você terá um tempo difícil para ignorar os nomes de classes, variáveis e funções. Dá-lhes bons nomes, ou as coisas podem ficar muito confuso, muito rápido, como a dissonância cognitiva interfere com o processamento normal do seu cérebro.<br />
Enfim, sempre dê estímulos ao seu cérebro, para que ele possa responder cada vez mais rapidamente e que consiga fazer essa separação da escrita e da cor da palavra. Bom treino.</p>
<p><em>*Créditos a <a href="http://www.pragprog.com/the-pragmatic-programmer/stroop-effect" target="_blank">The Pragmatic Programmer</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/06/29/efeito-stroop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando aplicação com uma determinada versão do Rails instalada em sua máquina</title>
		<link>http://www.herminiotorres.com/blog/2009/05/19/criando-aplicacao-com-uma-determinada-versao-do-rails-instalada-em-sua-maquina/</link>
		<comments>http://www.herminiotorres.com/blog/2009/05/19/criando-aplicacao-com-uma-determinada-versao-do-rails-instalada-em-sua-maquina/#comments</comments>
		<pubDate>Tue, 19 May 2009 13:04:43 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[escolher]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[versao]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=55</guid>
		<description><![CDATA[Aqui iremos vê como criar uma aplicação nova e informar qual versão do Rails iremos utilizar, dado que esteja mais de uma versão instalada em sua máquina. Bem digamos que eu tenha mais de uma versão do Rails instalada na minha maquina. Por exemplo a versão 2.3.2 e a 2.2.2 e eu quero criar uma [...]]]></description>
			<content:encoded><![CDATA[<p>Aqui iremos vê como criar uma aplicação nova e informar qual versão do Rails iremos utilizar, dado que esteja mais de uma versão instalada em sua máquina. Bem digamos que eu tenha mais de uma versão do Rails instalada na minha maquina. Por exemplo a versão 2.3.2 e a 2.2.2 e eu quero criar uma nova app que venha a utilizar a versão 2.2.2. Como eu faço para dizer que ela vai utilizar a versão que eu gostaria que utiliza-se? É super simples basta utilizar assim:</p>
<p><script type="text/javascript" src="http://gist.github.com/114074.js"></script></p>
<p>Veja que no comando eu passo rails versão e o nome da minha aplicação se eu inverter a ordem para rails nome da aplicação e versão ele irá utilizar a versão mais atual do rails. E como eu sei que deu certo esse comando? Ou qual versão a minha aplicação está utilizando? </p>
<p><script type="text/javascript" src="http://gist.github.com/114075.js"></script></p>
<p>Bem, estou postando esse comando, porque uma vez eu precisei e passei algumas horas para resolver esse meu problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/05/19/criando-aplicacao-com-uma-determinada-versao-do-rails-instalada-em-sua-maquina/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compilando/Instalando o Ruby, Rails e RubyGems no Ubuntu.</title>
		<link>http://www.herminiotorres.com/blog/2009/05/07/compilandoinstalando-o-ruby-rails-e-rubygems-no-ubuntu/</link>
		<comments>http://www.herminiotorres.com/blog/2009/05/07/compilandoinstalando-o-ruby-rails-e-rubygems-no-ubuntu/#comments</comments>
		<pubDate>Thu, 07 May 2009 14:05:38 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[compilando]]></category>
		<category><![CDATA[compilar]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[instalar]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=45</guid>
		<description><![CDATA[Bem, irei mostra como instalar/compilar o ruby, rails e rubygems no ubuntu, sem usar os pacotes debian based, e instalando da fonte. Escolhi a compilação aparti do instalador, para que ele fique otimizado para a minha distribuição, assim tendo um melhor desempenho. Outro motivo de não utilizar o &#8220;apt-get -y install pacote&#8221; é pelo simples [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, irei mostra como instalar/compilar o ruby, rails e rubygems no ubuntu, sem usar os pacotes debian based, e instalando da fonte.</p>
<p>Escolhi a compilação aparti do instalador, para que ele fique otimizado para a minha distribuição, assim tendo um melhor desempenho.</p>
<p>Outro motivo de não utilizar o <span style="color: #ff0000;"><em>&#8220;apt-get -y install pacote&#8221;</em></span> é pelo simples fato de que o patchlevel que contem no repositório é antigo em relação ao pacote mais atual com correções de bugs e otimizações. Então vamos iniciar a nossa instalação.</p>
<p>Pré-Requisitos<br />
Bem os pacotes que seram instalados, há suas razões como por exemplo o OpenSSL, o ruby por sua vez usa para funções de criptografia, acesso a serviços web sobre SSL&#8230; enfim:<br />
<script type="text/javascript" src="http://gist.github.com/108101.js"></script> <strong></strong></p>
<h3><strong>Instalando o Ruby</strong></h3>
<p>Primeiramente vamos fazer download da ultima versão 1.8.x do ruby. Então quando formos instalar o ruby vamos passar os caminhos dos pacotes que instalamos como OpenSSL, zlib readline, pois a maioria dos ambientes Rails fará uso deles. Faremos a instalação com o modo de super-usuário(root). Lembrando que em <a href="ftp://ftp.ruby-lang.org/pub/ruby/" target="_blank">ftp://ftp.ruby-lang.org/pub/ruby/</a> você pode escolher qual versão quer instalar, basta continuar a seguir os passos, aqui vamos instalar a versão 1.8.7 patchlevel 160. <script type="text/javascript" src="http://gist.github.com/108102.js"></script></p>
<p>Por padrão, o ruby é instalado em <span style="color: #ff0000;"><em>/usr/local</em></span>, mas um simples <span style="color: #ff0000;"><em>which ruby</em></span> será mostrado o local da instalação. E um <span style="color: #ff0000;"><em>ruby -v</em></span> irá mostrar a versão e o patchlevel do ruby instalado. No nosso caso<span style="color: #ff0000;"> ruby 1.8.7 (2008-08-11 patchlevel 160) [i686-linux]</span></p>
<p>Para se certificar de que todas as bibliotecas estão acessíveis a partir do Ruby, digite a seguinte linha no shell:<br />
<script type="text/javascript" src="http://gist.github.com/108103.js"></script> Se este comando só retornar a string<span style="color: #ff0000;"> instalacao_com_sucesso</span> é porque está funcionando como deveria.  Agora vamos colocar o auto-complete no<span style="color: #ff0000;"> irb</span>. <script type="text/javascript" src="http://gist.github.com/108104.js"></script></p>
<p>Quando termina de carregar o <span style="color: #ff0000;">irb</span> tente digitar &#8216;<span style="color: #ff0000;">Str</span>&#8216; e dê <span style="color: #ff0000;">tab</span> se ele mostrar as opções é porque está funcionando o auto-complete.</p>
<h3>Instalando o RubyGems</h3>
<p>Uma vez que seu ambiente ruby estiver funcionando é hora de instalar o RubyGems. Vamos no site <a href="http://rubyforge.org/projects/rubygems/" target="_blank">http://rubyforge.org/projects/rubygems/</a> e lá terá a lista da ultima versão do rubygems, clique em download e baixe a versão que termina com a compactação .tgz e a versão que estaremos utilizando é a 1.3.3, vamos instalar em modo super-usuário:<br />
<script type="text/javascript" src="http://gist.github.com/108107.js"></script> Novamente você pode utilizar o <em><span style="color: #ff0000;">which gem</span></em> e o <em><span style="color: #ff0000;">gem -v</span></em> e agora que temos o Ruby e o RubyGems instalados no Ubuntu, vamos adicionar nossas gems. Por exemplo: <script type="text/javascript" src="http://gist.github.com/108108.js"></script></p>
<p>Pronto âmbiente pronto para desenvolver aplicações <strong>Ruby</strong> e <strong>Rails</strong>. As demais instalações como banco de dados fica a seu criterio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/05/07/compilandoinstalando-o-ruby-rails-e-rubygems-no-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Minha Palestra no Primeiro Evento CearáOnRails&#8217;09</title>
		<link>http://www.herminiotorres.com/blog/2009/04/12/minha-palestra-no-primeiro-evento-cearaonrails09/</link>
		<comments>http://www.herminiotorres.com/blog/2009/04/12/minha-palestra-no-primeiro-evento-cearaonrails09/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 19:00:52 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[evento cearaonrails rails ruby palestra apresentação rotas routes]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=43</guid>
		<description><![CDATA[Minha Primeira Palestra no Primeiro Evento Ceará On Rails. Presentação-Herminio-CearaOnRails-08-04-09 View more presentations from hidenowt. Links Adicionais, Palestra-1 http://pt.wikipedia.org/wiki/Http http://pt.wikipedia.org/wiki/Crud http://pt.wikipedia.org/wiki/REST http://weblog.rubyonrails.org/search?q=route http://apidock.com/rails/ActionController/Routing/RouteSet http://apidock.com/rails/ActionController/Routing http://railscasts.com/episodes?search=route Espero que gostem e aproveitem o material. Alguma duvida ou sugestão deixar comentários, grato!]]></description>
			<content:encoded><![CDATA[<div id="__ss_1269899" style="width: 425px; text-align: left;"><strong>Minha Primeira Palestra no Primeiro Evento Ceará On Rails.</strong></div>
<div style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Presentação-Herminio-CearaOnRails-08-04-09" href="http://www.slideshare.net/hidenowt/presentaoherminiocearaonrails080409?type=powerpoint">Presentação-Herminio-CearaOnRails-08-04-09</a><object width="425" height="355" data="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=presherminio-090409141031-phpapp01&amp;stripped_title=presentaoherminiocearaonrails080409" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=presherminio-090409141031-phpapp01&amp;stripped_title=presentaoherminiocearaonrails080409" /><param name="allowfullscreen" value="true" /></object></div>
<div id="__ss_1269899" style="width: 425px; text-align: left;">
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/hidenowt">hidenowt</a>.</div>
</div>
<dl>
<dt>Links Adicionais, Palestra-1</dt>
<dd><a href="http://pt.wikipedia.org/wiki/Http" target="_blank">http://pt.wikipedia.org/wiki/Http</a></dd>
<dd><a href="http://pt.wikipedia.org/wiki/Crud" target="_blank">http://pt.wikipedia.org/wiki/Crud</a></dd>
<dd><a href="http://pt.wikipedia.org/wiki/REST" target="_blank">http://pt.wikipedia.org/wiki/REST</a></dd>
<dd><a href="http://weblog.rubyonrails.org/search?q=route" target="_blank">http://weblog.rubyonrails.org/search?q=route</a></dd>
<dd><a href="http://apidock.com/rails/ActionController/Routing/RouteSet" target="_blank">http://apidock.com/rails/ActionController/Routing/RouteSet</a></dd>
<dd><a href="http://apidock.com/rails/ActionController/Routing" target="_blank">http://apidock.com/rails/ActionController/Routing</a></dd>
<dd><a href="http://railscasts.com/episodes?search=route " target="_blank">http://railscasts.com/episodes?search=route </a></dd>
</dl>
<p>Espero que gostem e aproveitem o material. Alguma duvida ou sugestão deixar comentários, grato!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/04/12/minha-palestra-no-primeiro-evento-cearaonrails09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primeiro Encontro CearaOnRails Amanha 08-04-2009</title>
		<link>http://www.herminiotorres.com/blog/2009/04/07/primeiro-encontro-cearaonrails-amanha-08-04-2009/</link>
		<comments>http://www.herminiotorres.com/blog/2009/04/07/primeiro-encontro-cearaonrails-amanha-08-04-2009/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 00:58:06 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Ageis]]></category>
		<category><![CDATA[CearaOnRails]]></category>
		<category><![CDATA[Could]]></category>
		<category><![CDATA[Evento]]></category>
		<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Rotas]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=35</guid>
		<description><![CDATA[Primeiro encontro CearáOnRails’09 CearáOnRails – Grupo de Usuários Ruby e Rails do Ceará Website – http://www.cearaonrails.org Lista de Discussão &#8211; http://groups.google.com.br/group/cearaonrails Local: Faculdade Christus. Endereço: Campus Dom Luís, está situado na Avenida Dom Luís, 911, Bairro Aldeota, próximo ao Shopping Aldeota. Localização com o Google Maps. Contato: (85) 8884.8466 Data: Dia 08/04/2009 [quarta-feira] das 19:00h [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-align: center;" align="center"><strong><span style="font-size: 18pt;">Primeiro encontro CearáOnRails’09</span></strong></p>
<p class="MsoNormal" style="text-align: center;" align="center"><strong>CearáOnRails</strong> – Grupo de Usuários Ruby e Rails do Ceará</p>
<p class="MsoNormal" style="text-align: center;" align="center"><strong>Website</strong> – <a href="../">http://www.cearaonrails.org</a></p>
<p class="MsoNormal" style="text-align: center;" align="center"><strong>Lista de Discussão</strong> &#8211; <a href="http://groups.google.com.br/group/cearaonrails">http://groups.google.com.br/group/cearaonrails</a></p>
<p><strong>Local</strong>: <a href="http://www.fchristus.com.br/">Faculdade Christus.</a></p>
<p><strong>Endereço</strong>: <span class="conteudo">Campus Dom Luís, está situado na Avenida Dom Luís, 911, Bairro Aldeota, próximo ao Shopping Aldeota</span>. Localização com o <a href="http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;q=-3.734378,+-38.493294&amp;vps=3&amp;jsv=151e&amp;sll=-3.734336,-38.492918&amp;sspn=0.005717,0.011373&amp;ie=UTF8&amp;geocode=FZYEx_8dkqO0_Q&amp;split=0">Google Maps</a>.</p>
<p><strong>Contato:</strong> (85) 8884.8466</p>
<p><strong>Data</strong>: Dia 08/04/2009 [quarta-feira] das 19:00h as 22:00h no Auditório do primeiro andar.</p>
<p><strong><span style="font-size: 13.5pt;">Palestras</span></strong></p>
<p>19:00 às 19:10<span> </span><em>Abertura do Evento.</em></p>
<p style="margin-left: 106.2pt; text-align: justify; text-indent: -106.2pt;">19:10 às 19:50<span> </span><em>Palestra</em>: <strong>Roteamento Rails de fora para dentro.</strong><br />
<em>Resumo</em>: Entender como é o funcionamento das rotas, como o rails trata as requisições http enviadas a ele por interação de request/response E se há rotas mapeadas no sistema e finalmente como melhor utilizá-las, se tornando url’s intuitivas.<br />
<em>Palestrante</em>: <strong>Hermínio Torres &#8211; </strong>Ccoordenador/Membro do grupo CearáOnRails e Programador Ruby.</p>
<p style="margin-left: 106.2pt; text-align: justify; text-indent: -106.2pt;">19:50 às 20:40<span> </span><em>Palestra</em>: <strong>Gerência de Projetos com Scrum<strong>.</strong></strong><br />
<em>Resumo</em>: O Scrum é uma das metodologias de gerência de projetos. <span> </span>O que é Scrum? Os papéis no Scrum. O conceito de Sprint. Product Backlog. Sprint Planning Meeting. Scrum Daily Meeting. Sprint Review. Sprint Retrospective.<br />
<em>Palestrante</em>: <strong>Liliana Pedrosa Pinheiro Carrhá</strong> &#8211; Analista de sistemas, especialista em Engenharia de Software. Atuação na coordenação de projetos de desenvolvimento e suporte a soluções com foco em melhoria de processo em desenvolvimento, implantação e treinamento de projetos. Conhecimentos adquiridos: UML, RUP, Scrum, Gerência de Projetos, MPS.Br, CMMI, Java, SQL Server, MySQL, ITIL e Redes.</p>
<p style="margin-left: 106.2pt; text-indent: -106.2pt;">20:40 às 21:00<span> </span><em>Pausa do Evento(Coffe-Break).</em></p>
<p style="margin-left: 106.2pt; text-align: justify; text-indent: -106.2pt;">21:00 às 21:50<span> </span><em>Palestra</em>: <strong>Cloud On Rails.</strong><br />
<em>Resumo</em>: Conhecer como anda o mercado europeu e uma startup que utiliza programação em nuvem onde a idéia é ser algo similar ao twitter onde você pode seguir, adicionar amigos e dizer quem pode visualizar a suas musicas.<br />
<em>Palestrante</em>: <strong>Hannes Tydén – </strong>Programador Ruby e Membro do Ruby User Group Berlin, Developer Startup SoundCloud.</p>
<p style="margin-left: 106.2pt; text-indent: -106.2pt;">21:50 às 22:00<span> </span><em>Fechamento do Evento.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/04/07/primeiro-encontro-cearaonrails-amanha-08-04-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails para upload de arquivos e imagens usando o plugin paperclip</title>
		<link>http://www.herminiotorres.com/blog/2009/03/24/rails-para-upload-de-arquivos-e-imagens-usando-o-plugin-paperclip/</link>
		<comments>http://www.herminiotorres.com/blog/2009/03/24/rails-para-upload-de-arquivos-e-imagens-usando-o-plugin-paperclip/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 13:12:51 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[imagem]]></category>
		<category><![CDATA[paperclip]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=23</guid>
		<description><![CDATA[Bem, irei mostrar como fazer upload de arquivos utilizando o paperclip e poderemos notar como é super simples de utilizar. Se o arquivo for imagem iremos precisar do imagemagick instalado na maquina onde irá ficar sua aplicação, pois o plugin utiliza o imagemagick para mexer com imagens. Para o download do paperclip existe duas maneiras. [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, irei mostrar como fazer upload de arquivos utilizando o <a href="http://thoughtbot.com/projects/paperclip" target="_blank">paperclip</a> e poderemos notar como é super simples de utilizar. Se o arquivo for imagem iremos precisar do <a href="http://www.imagemagick.org" target="_blank">imagemagick</a> instalado na maquina onde irá ficar sua aplicação, pois o plugin utiliza o imagemagick para mexer com imagens.</p>
<p>Para o download do paperclip existe duas maneiras. Uma é baixando pelo próprio <a href="http://guides.rubyonrails.org/" target="_blank">rails</a> e a outra é indo no site e fazendo o download e descompactando na sua aplicação.</p>
<p><script type="text/javascript" src="http://gist.github.com/84048.js"></script></p>
<p>O paperclip por sua vez requerer algumas colunas no modelo para que seja necessário o seu funcionamento. E quais são elas?</p>
<p><script type="text/javascript" src="http://gist.github.com/84057.js"></script></p>
<p>Pois bem, digamos que na sua aplicação exista o modelo user, onde cada user contem uma imagem que é o seu avatar.  Podemos fazer o seguinte:</p>
<p><script type="text/javascript" src="http://gist.github.com/84061.js"></script></p>
<p>Agora iremos trabalhar o paperclip a nível de model. Vamos colocar toda a nossa regra de negocio e veremos como o sistema deverá tratar o upload de arquivos.</p>
<p><script type="text/javascript" src="http://gist.github.com/84064.js"></script></p>
<p>Bem não iremos fazer nenhuma modificação nos controllers. Então vamos partir para as views e finalizar o nosso tutorial.</p>
<p>Primeiramente vamos criar um partial, onde essa view será comum tanto para as telas de <em>new.html.erb</em> como <em>edit.html.erb</em>. Em sua aplicação vá até<em> SUA_APLICAÇÂO/app/view/users/</em> e crie um arquivo chamado <em>_user.html.erb</em> e veja como será o código desse arquivo.</p>
<p><script type="text/javascript" src="http://gist.github.com/84070.js"></script></p>
<p>Agora, que temos o partial <em>_user.html.erb</em> precisamos adaptar as telas de <em>edit.html.erb</em> e <em>new.html.erb</em> então vamos seguir o seguinte código:</p>
<p><script type="text/javascript" src="http://gist.github.com/84072.js"></script></p>
<p>E nas views <em>index.html.erb</em> e <em>show.html.erb</em> iremos fazer a chamada da imagem.</p>
<p><script type="text/javascript" src="http://gist.github.com/84094.js"></script></p>
<p>Finalmente terminamos o nosso objetivo de fazer com que a nossa aplicação faça upload de arquivos. E caso você queira saber mais sobre o paperclip basta acessar a sua Documentação/<a href="http://dev.thoughtbot.com/paperclip/" target="_blank">RDoc</a> ou entrar na <a href="http://groups.google.com/group/paperclip-plugin" target="_blank">lista de discussão</a> do paperclip. É isso pessoal espero que tenham gostado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/03/24/rails-para-upload-de-arquivos-e-imagens-usando-o-plugin-paperclip/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilizando o Rails 2.2 para enviar email via gmail por smtp/imap</title>
		<link>http://www.herminiotorres.com/blog/2009/02/27/utilizando-o-rails-22-para-enviar-email-via-gmail-por-smtp-imap/</link>
		<comments>http://www.herminiotorres.com/blog/2009/02/27/utilizando-o-rails-22-para-enviar-email-via-gmail-por-smtp-imap/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 02:32:02 +0000</pubDate>
		<dc:creator>Herminio</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[enviar]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[rails2.2]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://www.herminiotorres.com/blog/?p=15</guid>
		<description><![CDATA[Bem, irei mostrar como o Rails utilizará um servidor de email via smtp / imap para mandar emails. Onde teremos o uso do gmail, mas poderá ser qualquer provedor. 1. Primeiramente ter o rails instalado e funcionando. 2. Depois iremos instalar um plugin para agilizar o nosso trabalho, o plugin se chama action_mailer_optional_tls. Como instalar [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, irei mostrar como o Rails utilizará um servidor de email via <a href="ttp://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol" target="_blank">smtp</a> / <a href="http://pt.wikipedia.org/wiki/Imap" target="_blank">imap</a> para mandar emails. Onde teremos o uso do gmail, mas poderá ser qualquer provedor.</p>
<p>1. Primeiramente ter o rails instalado e funcionando.<br />
2. Depois iremos instalar um plugin para agilizar o nosso trabalho, o plugin se chama <a href="http://github.com/collectiveidea/action_mailer_optional_tls/tree/master" target="_blank">action_mailer_optional_tls</a>.</p>
<p>Como instalar o plugin? Existem duas maneiras.</p>
<p>A primeira maneira é instalar usando os scripts do próprio rails.</p>
<p><script type="text/javascript" src="http://gist.github.com/71839.js"></script> ou A segunda maneira é ir no site do plugin e clicar em download e descompactar na pasta:  <script type="text/javascript" src="http://gist.github.com/71841.js"></script></p>
<p>Após ter instalado o plugin, basta abrir o arquivo e incluir as seguintes linhas, em:</p>
<p><script type="text/javascript" src="http://gist.github.com/71843.js"></script> depois disto vamos criar um mailer:  <script type="text/javascript" src="http://gist.github.com/71844.js"></script></p>
<p>Após executar o comando acima, basta abrir este arquivo e incluir essas informações, para a funcionalidade de confirmar via email que a conta do usuário foi criada.</p>
<p><script type="text/javascript" src="http://gist.github.com/71845.js"></script> Esse será o template utilizado que será enviado no corpo da mensagem, e estamos utilizando texto, já pensando nas pessoas que só recebem emails do tipo texto.  <script type="text/javascript" src="http://gist.github.com/71848.js"></script></p>
<p>E para finalizar vamos colocar a chamada na action create do controller de users para que seja enviado email assim que o usuário for criado e savo no banco de dados.</p>
<p>Vamos incluir no controller:<br />
<script type="text/javascript" src="http://gist.github.com/71847.js"></script></p>
<p>Bem, agora basta você implementar na sua aplicação e testar, para mais informações basta acessar o <a href="http://guides.rubyonrails.org/action_mailer_basics.html" target="_blank">Rails Guides</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.herminiotorres.com/blog/2009/02/27/utilizando-o-rails-22-para-enviar-email-via-gmail-por-smtp-imap/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
