<?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>1up4developers &#187; quick tips</title>
	<atom:link href="http://1up4dev.org/category/quick-tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://1up4dev.org</link>
	<description>Nadando contra o Waterfall. tail -f /mind/realworld &#62;&#62; /blog</description>
	<lastBuildDate>Tue, 20 Mar 2012 03:57:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>[QuickTips] Habilitando auth_basic no Nginx e como gerar senhas do htpasswd</title>
		<link>http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/</link>
		<comments>http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 03:57:44 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=1134</guid>
		<description><![CDATA[TweetDica para quem usa o Nginx como web server de aplicações Rails e já apanhou para habilitar HTTP Basic Authentication ou para gerar as senhas criptografadas em MD5. Para habilitar o auth_basic, basta adicionar dentro do bloco server do arquivo &#8230; <a href="http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/" data-text="[QuickTips] Habilitando auth_basic no Nginx e como gerar senhas do htpasswd" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Dica para quem usa o <a href="http://wiki.nginx.org/Main" target="_blank">Nginx</a> como web server de aplicações Rails e já apanhou para habilitar <a href="http://wiki.nginx.org/HttpAuthBasicModule" target="_blank">HTTP Basic Authentication</a> ou para gerar as senhas criptografadas em MD5.</p>
<p>Para habilitar o <em>auth_basic</em>, basta adicionar dentro do bloco <em>server</em> do arquivo <em>nginx.conf</em>:</p>
<pre>location ~ / {
        auth_basic            "Restricted";
        auth_basic_user_file  htpasswd;
        passenger_enabled on;
}</pre>
<p>Um detalhe importante: se estiver rodando sua app com <a href="http://www.modrails.com/" target="_blank">Passenger</a>, inclua a linha <em>passenger_enabled on;</em></p>
<p>Ah, já estava esquecendo das senhas. Elas devem ficar no arquivo <em>htpasswd</em>, no mesmo diretório do arquivo<em> nginx.conf</em> e precisam seguir o formato user:senha em cada linha. Por exemplo:</p>
<pre>user:sd5dsjo23PwdSh
admin:mdePW2hgrPddSA</pre>
<p>O detalhe é que a senha precisa ser <a href="http://wiki.nginx.org/Faq#How_do_I_generate_an_htpasswd_file_without_having_Apache_tools_installed.3F" target="_blank">criptografada em MD5</a>. Uma maneira fácil (e que funciona) de fazer isso é executando:</p>
<pre>ruby -e "puts 'usuario:' + 'senha'.crypt('md5')" &gt;&gt; htpasswd</pre>
<p>Sucesso!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2012/03/quick-tips-habilitando-auth-basic-nginx-e-como-gerar-senhas-htpasswd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dica Rápida: Removendo o test unit de um projeto Rails 3</title>
		<link>http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/</link>
		<comments>http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 11:00:28 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=1114</guid>
		<description><![CDATA[TweetEste post serve mais como &#8220;cola&#8221; de referência, pois toda vez que vou fazer isso eu não encontro fácil no google e nunca lembro. Por sinal é mega simples, é só editar o config/application.rb e remover a linha: require 'rails/all' E substituir por: &#8230; <a href="http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/" data-text="Dica Rápida: Removendo o test unit de um projeto Rails 3" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Este post serve mais como &#8220;cola&#8221; de referência, pois toda vez que vou fazer isso eu não encontro fácil no google e nunca lembro. Por sinal é mega simples, é só editar o <em>config/application.rb</em> e remover a linha:</p>
<pre>require 'rails/all'</pre>
<p>E substituir por:</p>
<pre>require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"</pre>
<p>Após isso, já não aparece mais as tasks de testes, e você pode remover a pasta test.</p>
<pre>$ git rm -r test/</pre>
<p>Pra finalizar, já segue a dica de alterar a task <em>default</em>, no final do <em>Rakefile</em> é só colocar:</p>
<pre>Rake::Task[:default].prerequisites.clear
task :default =&gt; :spec  #no caso do rspec</pre>
<p>Sucesso!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/11/dica-rapida-removendo-o-test-unit-de-um-projeto-rails-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Tutorial] Configurando o ambiente de desenvolvimento Ruby: RVM</title>
		<link>http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/</link>
		<comments>http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 09:00:19 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=1069</guid>
		<description><![CDATA[TweetSe você ainda não trabalha com Ruby pois acha complicado demais instalá-lo, chega de desculpas! Esse tutorial for dummies ajudará a instalar o Ruby através do RVM de forma direta, sem enrolação. Partindo de uma instalação do Ubuntu 11.04 zerada, &#8230; <a href="http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/" data-text="[Tutorial] Configurando o ambiente de desenvolvimento Ruby: RVM" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Se você ainda não trabalha com <a href="http://www.ruby-lang.org/pt/" target="_blank">Ruby</a> pois acha complicado demais instalá-lo, chega de desculpas! Esse tutorial <del>for dummies</del> ajudará a instalar o Ruby através do <a href="http://beginrescueend.com/" target="_blank">RVM</a> de forma direta, sem enrolação.</p>
<p>Partindo de uma instalação do <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> 11.04 zerada, começamos com os pré-requisitos para instalar o RVM:</p>
<pre>user@ubuntu:~$ sudo apt-get install git-core curl</pre>
<p>Basta confirmar a instalação dos pacotes, em seguida executar o comando (extraído do site oficial do RVM):</p>
<pre>user@ubuntu:~$ bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)</pre>
<p>A seguir, o output completo gerado por esse comando indicará os pacotes e libs necessários para a instalação do Ruby.</p>
<pre>(...)

dependencies:
# For RVM
  rvm: bash curl git

# For Ruby (MRI &amp; ree)  you should install the following OS dependencies:
  ruby: /usr/bin/apt-get install <strong>build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake</strong>

(...)

Installation of RVM to /home/user/.rvm/ is complete.</pre>
<p>Agora, basta instalar essas libs através do apt-get:</p>
<pre>user@ubuntu:~$ sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake</pre>
<p>Com as dependências instaladas, abra um novo console (para re-carregar o RVM), e comece a instalar o Ruby, no caso, o MRI 1.8.7:</p>
<pre>user@ubuntu:~$ rvm install 1.8.7</pre>
<p>Esta operação levará alguns minutos. Quando concluída, você terá o Ruby 1.8.7 e o <a href="http://rubygems.org/" target="_blank">Rubygems</a> 1.8.6 instalados. Para testar tudo, execute os seguintes comandos:</p>
<pre>user@ubuntu:~$ rvm use --default 1.8.7
Using /home/user/.rvm/gems/ruby-1.8.7-p352</pre>
<pre>user@ubuntu:~$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]</pre>
<pre>user@ubuntu:~$ gem -v
1.8.6</pre>
<p>Pronto! Agora você tem o Ruby e Rubygems instalados e prontos para o uso. Caso queira conferir, o output dos comandos acima está disponível <a href="https://gist.github.com/1157378" target="_blank">neste gist</a>.</p>
<p>Fique ligado no próximo post: Gemsets e Bundler. Qualquer dúvida, use os comentários.</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/08/tutorial-configurando-o-ambiente-de-desenvolvimento-ruby-rvm/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>O que eu tenho feito da vida ou Links sobre temas variados</title>
		<link>http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/</link>
		<comments>http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 16:36:52 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[real world]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=947</guid>
		<description><![CDATA[TweetEm um mega resumo, trabalhando muito no Sitefique.me. Acho que este post é uma maneira de mostrar porque está difícil de postar coisas novas, e ao mesmo tempo, oferecer algum conteúdo para nossos leitores. Hoje em dia, com frameworks &#8220;modernos&#8221;, &#8230; <a href="http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/" data-text="O que eu tenho feito da vida ou Links sobre temas variados" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Em um mega resumo, trabalhando muito no <a href="http://sitefique.me/" target="_blank">Sitefique.me</a>. Acho que este post é uma maneira de mostrar porque está difícil de postar coisas novas, e ao mesmo tempo, oferecer algum conteúdo para nossos leitores.</p>
<p>Hoje em dia, com frameworks &#8220;modernos&#8221;, é relativamente rápido fazer um site e colocá-lo no ar. O difícil é escrever para o seu público alvo.</p>
<p>Quando se faz uma gem ou lib, o seu público alvo é o desenvolvedor e isto facilita muito, pois você sabe o que ele busca e espera do seu &#8220;produto&#8221;. Agora, lançar um produto onde o público alvo é o usuário iniciante/intermediário, muda muito as coisas.</p>
<p>Sem entrar em mais detalhes, <strong>preparei uma compilação do que venho lendo, estudando e usando</strong>, para ajudar nesta nova jornada de montar um produto do zero. São assuntos profundos, que toco de forma superficial (ficou legal né! <img src='http://1up4dev.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). Espero que aproveitem!</p>
<h2>Brainstorm</h2>
<p>Apesar de parecer, não é simples escrever. Montar textos como o <a href="http://blog.sitefique.me/post/4000593339/pesquisa-sitefiqueme" target="_blank">lançamento</a> e <a href="http://blog.sitefique.me/post/4556035664/informacoes-primeira-versao-sitefiqueme" target="_blank">roadmap</a>, é muito custoso para meros desenvolvedores como nós. Estamos usando o <a href="http://docs.google.com" target="_blank">Google Docs</a> para trabalhar remotamente e simultaneamente com muito êxito!</p>
<h2>Empreendedorismo</h2>
<p>Recomendo o blog <a href="http://www.saiadolugar.com.br">http://www.saiadolugar.com.br</a><br />
Muito boa esta apresentação, vale a pena conferir:<br />
Guy Kawasaki &#8211; A arte do começo (<a href="http://video.google.com/videoplay?docid=8206486082210767228#">link direto aqui</a>)</p>
<p><embed type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docid=8206486082210767228&amp;hl=en&amp;fs=true" style="width:640px;height:518px" allowFullScreen="true" allowScriptAccess="always" /></p>
<p>Fora isto, tem uma pá de livro sobre o assunto. Os clássicos modernos da 37signals, <a href="http://gettingreal.37signals.com/">Getting Real</a> e <a href="http://37signals.com/rework/">Rework</a>.</p>
<h2>Controle de Tarefas</h2>
<p>Somos em dois desenvolvedores e só! O nosso quadro de tarefas está no <a href="http://lessprojects.com/">lessprojects.com </a>(que por enquanto é de graça). É incrível como <a href="http://lesseverything.com/" target="_blank">os caras</a> são pragmáticos. Este foi um achado do <a title="Rodrigo Panachi" href="http://1up4dev.org/author/rodrigopanachi/">Panachi</a>.</p>
<h2>Frontend, Design, layout e cia.</h2>
<p>Este é um campo que é necessário ter <em>mindset</em> diferente. Até 2002, me virava muito bem com os layouts &#8220;divless&#8221;, ou melhor, usando <em>table</em> mesmo (<em>shame on me</em>). Depois da onda <a title="Tableless web design" href="http://en.wikipedia.org/wiki/Tableless_web_design">tableless</a>, sempre tive dificuldade em desenvolver o frontend (e também nunca fiz muita questão). Agora chegou a hora, e tenho que estudar. É muito importante ter ajuda de quem manja muito! <a title="Diego Costa" href="http://twitter.com/umdiegocosta">Diego</a>, <a title="Gustavo Cardoso - O Designer" href="http://gustavocardoso.com/">Gus</a> e <a title="Barbara Sousa" href="http://www.barbarasousa.com.br">Babi</a>. Valeu!</p>
<h2>Mail marketing</h2>
<p>Enviar e-mail é muito simples. Agora, enviar e-mail com layout legal, com informação relevante, sem ser barrado como spam e renderizar no máximo de webmails e clientes desktop é muito difícil! Encontrei ótimos materiais sobre o assunto:</p>
<ul>
<li><a title="email design guidelines" href="http://www.campaignmonitor.com/design-guidelines/">Email design guidelines</a></li>
<li><a title="16 Técnicas para otimizar a entrega do email marketing" href="http://www.templateria.com.br/blog/tecnologia/16-tecnicas-para-otimizar-a-entrega-do-email-marketing/">16 Técnicas para Otimizar a Entrega do Email Marketing</a></li>
<li><a href="http://www.email-standards.org/">Email Standards Project</a> &#8211; Achei animal o objetivo do site. Eles rodam um <em>acid test</em> para uma leva de webmails e clients desktop, e de quebra você ganha uma lista de quem suporta o que ao renderizar html do seu e-mail.</li>
</ul>
<h2>Private Server</h2>
<p>É onde hospedamos o produto, repositórios e o que precisar. O ponto é que você vai precisar! Estamos usando o <a title="Webbynode" href="http://webbynode.com/">http://webbynode.com</a>. Não tive problemas até hoje. Uma maravilha poder logar via ssh e fazer miséria.</p>
<h2>Foco</h2>
<p>Se tiver paciência (acho que o post já é um teste!) leia: <a title="How to get things done like a zen master" href="http://howtogetfocused.com/chapters/how-to-get-things-done-like-a-zen-master/">http://howtogetfocused.com/chapters/how-to-get-things-done-like-a-zen-master</a></p>
<p>Comentem. Me avisem se este tipo de post é chatão ou legal.</p>
<p>Valeu!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/04/o-que-eu-tenho-feito-da-vida-ou-links-sobre-temas-variados/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CoffeeScript quem?</title>
		<link>http://1up4dev.org/2011/04/coffescript-what/</link>
		<comments>http://1up4dev.org/2011/04/coffescript-what/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 13:20:26 +0000</pubDate>
		<dc:creator>Plínio Balduino</dc:creator>
				<category><![CDATA[novidades da semana]]></category>
		<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[coffee script]]></category>
		<category><![CDATA[coffeescript]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=934</guid>
		<description><![CDATA[TweetMuito buzz se formou depois que o DHH tornou público que a versão 3.1 do Rails virá com CofeeScript por padrão. Aproveitando a barulheira, que é comum a cada vez que o criador da plataforma abre a boca, vamos nos &#8230; <a href="http://1up4dev.org/2011/04/coffescript-what/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/04/coffescript-what/" data-text="CoffeeScript quem?" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/04/coffescript-what/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Muito buzz se formou depois que o DHH tornou público que a versão 3.1 do Rails virá com CofeeScript por padrão.</p>
<p>Aproveitando a barulheira, que é comum a cada vez que o criador da plataforma abre a boca, vamos nos ater ao que é importante e apresentar uma introdução ao resumo simplificado do CoffeeScript básico.</p>
<p>Confesso que minha opinião sobre essa ferramenta mudou nos primeiros instantes em que comecei a usar. No site do CoffeeScript (ok se eu começar a chamar de CS daqui para frente?) existe um link onde você digita o código do lado esquerdo e, imediatamente, do lado direito aparece o equivalente em JavaScript.</p>
<p>Fiz uma brincadeira lá usando um código que sempre me vem à cabeça ao tentar explicar o básico de programação funcional para alguem. Segue:</p>
<pre>mimimi = (operation, value) ->
   operation(value);

dobro = (value) ->
  value + value;

quadrado = (value) ->
  value * value;

zero = (value) ->
  value - value;

um = (value) ->
  value / value;

alert(mimimi(dobro, 3));
alert(mimimi(quadrado, 3));
alert(mimimi(zero, 3));
alert(mimimi(um, 3));</pre>
<p>Nada de outro mundo, certo? O equivalente JS é o código abaixo:</p>
<pre>var dobro, mimimi, quadrado, um, zero;
mimimi = function(operation, value) {
  return operation(value);
};
dobro = function(value) {
  return value + value;
};
quadrado = function(value) {
  return value * value;
};
zero = function(value) {
  return value - value;
};
um = function(value) {
  return value / value;
};
alert(mimimi(dobro, 3));
alert(mimimi(quadrado, 3));
alert(mimimi(zero, 3));
alert(mimimi(um, 3));</pre>
<p>CS permite também a checagem automática de valores e parâmetros opcionais, conforme o exemplo retirado do site:</p>
<pre>fill = (container, liquid = "coffee") -&gt;
  "Filling the #{container} with #{liquid}..."</pre>
<p>Ou o equivalente em JS:</p>
<pre>var fill;
fill = function(container, liquid) {
  if (liquid == null) {
    liquid = "coffee";
  }
  return "Filling the " + container + " with " + liquid + "...";
};</pre>
<p>Sem dúvida, muito mais legível e expressivo.</p>
<p>É uma ferramenta que eu pretendo usar em algum projeto pequeno, para testar e ver o quanto acelera meu trabalho. Em projetos maiores talvez eu demore um pouco mais para usar mas, considerando que umas das minhas aplicações já conta com 79% de código total escrito em JavaScript, segundo o GitHub, imagino que isso vai melhorar consideravelmente a manutenção do código.</p>
<p>E no mais, se o CS não te chamou a atenção e você não quer mesmo utilizar, basta remover o require do arquivo Gemfiles e a vida segue como se nada tivesse acontecido.</p>
<p>Links recomendados:</p>
<ul>
<li>Site do CoffeScript: <a title="http://jashkenas.github.com/coffee-script/" href="http://jashkenas.github.com/coffee-script/" target="_blank">http://jashkenas.github.com/coffee-script/</a></li>
<li>Mais do mesmo: <a title="http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html" href="http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html" target="_blank">http://www.rubyinside.com/rails-3-1-adopts-coffeescript-jquery-sass-and-controversy-4669.html</a></li>
<li>Exemplo bacana de como utilizar CS dentro da sua view: <a title="http://geekiriki.blogspot.com/2010/08/jquery-meets-coffeescript.html" href="http://geekiriki.blogspot.com/2010/08/jquery-meets-coffeescript.html" target="_blank">http://geekiriki.blogspot.com/2010/08/jquery-meets-coffeescript.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/04/coffescript-what/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Resenha do livro Crafting Rails Applications</title>
		<link>http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/</link>
		<comments>http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 12:05:53 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[real world]]></category>
		<category><![CDATA[resenhas]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[resenha]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=841</guid>
		<description><![CDATA[TweetNo final do ano passado, ao ver um twitty do José Valim, fiquei tentando a comprar o livro, mas depois do post Crafting Rails Applications: Why I wrote this book, tive certeza que não perderia este presente de Natal. Apesar &#8230; <a href="http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/" data-text="Resenha do livro Crafting Rails Applications" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>No final do ano passado, ao ver um <a href="http://twitter.com/josevalim/status/12537904249176064">twitty do José Valim</a>, fiquei tentando a comprar o livro, mas depois do post <a href="http://blog.plataformatec.com.br/2010/12/crafting-rails-applications-why-i-wrote-this-book/">Crafting Rails Applications: Why I wrote this book</a>, tive certeza que não perderia este presente de Natal.</p>
<div id="attachment_847" class="wp-caption alignleft" style="width: 200px"><a href="http://pragprog.com/titles/jvrails/crafting-rails-applications"><img class="size-full wp-image-847" title="Crafting Rails Applications: Expert Practices for Everyday Rails Development" src="http://1up4dev.org/wp-content/uploads/2011/02/jvrails.jpg" alt="Crafting Rails Applications: Expert Practices for Everyday Rails Development" width="190" height="228" /></a><p class="wp-caption-text">Crafting Rails Applications: Expert Practices for Everyday Rails Development</p></div>
<p>Apesar de poucas páginas, o livro tem muito conteúdo. Logo no começo, em &#8220;<em>Who should read this book ?</em>&#8221; é avisado, <strong>não é para iniciantes</strong>. Os capítulos são separados em tópicos interessantes, abordando diferentes maneiras de extender o Rails 3.</p>
<p>Aliás, extender é a palavra chave do livro. Dos projetos que compõe o Rails, somente o <em>Active Resource</em> não foi citado. O livro com certeza pula o básico, ou seja, não espere por explicações em como usar as funcionalidades do Rails.</p>
<p>-</p>
<h2>Detalhes que tornam o livro interessante.</h2>
<ul>
<li><a href="https://github.com/josevalim/enginex">Enginex</a> &#8211; é uma Ruby gem que cria um <em>Rails 3 Engine</em> com Rakefile, Gemfile e pronto para rodar testes em cima de uma aplicação &#8220;vendorizada&#8221;. Ou seja, no livro temos projetos reais, que são executados e tem testes !</li>
<li><a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> &#8211; todo código apresentado, é feito seguindo o <em>Test-driven Development</em>, mostra-se o teste falhando e vai implementando aos poucos, até tudo ficar verde.</li>
<li><span style="text-decoration: underline;">Como melhorar o seu código</span> &#8211; conhecendo <em>Responders</em> e o <em>Renderer Stack do Rails 3</em>, você com certeza irá ampliar o seu leque de possibilidades de como melhorar o fonte das suas aplicações. Tem bastante exemplos de <em>Rails Generators</em> também.</li>
<li><span style="text-decoration: underline;">Desmistificando Rails</span> &#8211; o Valim realmente conseguiu de forma majestosa explicar as entranhas do Rails 3. A cada capítulo e detalhe explicado, pude ver o verdadeiro trampo que fizeram no projeto, em comparação com o 2.x, o Rails mudou muito (internamente!).</li>
</ul>
<h2>Finalizando&#8230;</h2>
<p>Se você é um desenvolvedor que se preocupa em conhecer a fundo o framework que trabalha, <strong><a href="http://pragprog.com/titles/jvrails/crafting-rails-applications">compre agora</a></strong>! Confesso que depois da leitura, estou muito mais a vontade para navegar no fontes do Rails, inclusive passei a acompanhar os tickets no <a href="https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/overview">Lighthouse</a>. <img src='http://1up4dev.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <a href="https://github.com/rails/rails">Rails 3</a> definitivamente está mais flexível, e o José Valim conseguiu expor tudo isso com código e uma leitura agradável.</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/02/resenha-do-livro-crafting-rails-applications/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Deploy de várias aplicações no Nginx + Passenger usando subdomain ou suburi</title>
		<link>http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/</link>
		<comments>http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 10:00:59 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=770</guid>
		<description><![CDATA[TweetSe você está pensando em fazer o deploy da sua aplicação Rails em um server Nginx com Phusion Passenger, você está no caminho certo! Não apenas pela segurança e performance do Nginx, mas também pela facilidade de instalação e configuração &#8230; <a href="http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/" data-text="Deploy de várias aplicações no Nginx + Passenger usando subdomain ou suburi" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Se você está pensando em fazer o deploy da sua aplicação Rails em um server <a href="http://nginx.org/">Nginx</a> com <a href="http://www.modrails.com/">Phusion Passenger</a>, você está no caminho certo! Não apenas pela segurança e performance do Nginx, mas também pela facilidade de instalação e configuração quando comparado à outros web servers populares. </p>
<p>A <a href="http://wiki.nginx.org/Install">instalação do Nginx</a> bem como <a href="http://www.modrails.com/install.html">configuração do módulo do Passenger</a> são relativamente simples. A documentação de <a href="http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_installing_phusion_passenger">ambos é bem completa</a>. Você provavelmente não terá muita dificuldade. Eu recomendo seguir o passo-a-passo da instalação do Passenger:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  passenger-install-nginx-module</pre></div></div>

<p>Uma vez que tudo esteja instalado, é hora de configurar o Nginx editando o arquivo <code>nginx.conf</code> (provavelmente localizado em <code>/usr/local/nginx/conf/nginx.conf</code>)</p>
<h3>Usando sub URI</h3>
<p>O deploy como sub URI torna sua aplicação acessível com o endereço <code>http://dominio.com/app1</code>, sendo <code>app1</code> o nome da sua aplicação. Supondo que diretório público do Nginx esteja em <code>/var/www</code> e sua aplicação Rails em <code>/var/rails/app1</code>, configure-o assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">http <span style="color:#006600; font-weight:bold;">&#123;</span>
    ...
    <span style="color:#9900CC;">server</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
        listen <span style="color:#006666;">80</span>;
        server_name dominio.<span style="color:#9900CC;">com</span> www.<span style="color:#9900CC;">dominio</span>.<span style="color:#9900CC;">com</span>;
        root <span style="color:#006600; font-weight:bold;">/</span>var<span style="color:#006600; font-weight:bold;">/</span>www;
        passenger_enabled on;
        passenger_base_uri <span style="color:#006600; font-weight:bold;">/</span>app1;
    <span style="color:#006600; font-weight:bold;">&#125;</span>
    ...
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Ainda é preciso criar um link simbólico para que o contexto da aplicação Rails seja visível pelo document root em <code>/var/www</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>rails<span style="color: #000000; font-weight: bold;">/</span>app1<span style="color: #000000; font-weight: bold;">/</span>public <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>app1</pre></div></div>

<p>Reiniciando o Nginx, sua aplicação já estará rodando. Para adicionar outras aplicações, basta adicionar:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">        passenger_base_uri <span style="color:#006600; font-weight:bold;">/</span>app1;
        passenger_base_uri <span style="color:#006600; font-weight:bold;">/</span>app2;
        passenger_base_uri <span style="color:#006600; font-weight:bold;">/</span>app3;</pre></div></div>

<p>E em seguida criar os links simbólicos como descrito acima. Nota importante: em alguns casos, será necessário informar a URL relativa correta nas configurações do Rails:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   config.<span style="color:#9900CC;">action_controller</span>.<span style="color:#9900CC;">relative_url_root</span> = <span style="color:#996600;">&quot;/app1&quot;</span></pre></div></div>

<h3>Usando subdomain</h3>
<p>O deploy como subdomain torna sua aplicação acessível com o endereço <code>http://app1.dominio.com</code>. Basta configurar o Nginx como segue:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">http <span style="color:#006600; font-weight:bold;">&#123;</span>
    ...
    <span style="color:#9900CC;">server</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
        listen <span style="color:#006666;">80</span>;
        server_name app1.<span style="color:#9900CC;">dominio</span>.<span style="color:#9900CC;">com</span>;
        root <span style="color:#006600; font-weight:bold;">/</span>var<span style="color:#006600; font-weight:bold;">/</span>rails<span style="color:#006600; font-weight:bold;">/</span>app1<span style="color:#006600; font-weight:bold;">/</span>public;
        passenger_enabled on;
    <span style="color:#006600; font-weight:bold;">&#125;</span>
    ...
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Note que o <code>root</code> aponta diretamente para o diretório &#8220;public&#8221; da aplicação Rails. Para fazer o deploy de outras aplicações como subdomínio, basta configurar outro &#8220;server&#8221;, alterando <code>root</code> e o <code>server_name</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">http <span style="color:#006600; font-weight:bold;">&#123;</span>
    ...
    <span style="color:#9900CC;">server</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
        listen <span style="color:#006666;">80</span>;
        server_name app1.<span style="color:#9900CC;">dominio</span>.<span style="color:#9900CC;">com</span>;
        root <span style="color:#006600; font-weight:bold;">/</span>var<span style="color:#006600; font-weight:bold;">/</span>rails<span style="color:#006600; font-weight:bold;">/</span>app1<span style="color:#006600; font-weight:bold;">/</span>public;
        passenger_enabled on;
    <span style="color:#006600; font-weight:bold;">&#125;</span>
    ...
    <span style="color:#9900CC;">server</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
        listen <span style="color:#006666;">80</span>;
        server_name app2.<span style="color:#9900CC;">dominio</span>.<span style="color:#9900CC;">com</span>;
        root <span style="color:#006600; font-weight:bold;">/</span>var<span style="color:#006600; font-weight:bold;">/</span>rails<span style="color:#006600; font-weight:bold;">/</span>app2<span style="color:#006600; font-weight:bold;">/</span>public;
        passenger_enabled on;
    <span style="color:#006600; font-weight:bold;">&#125;</span>
    ...
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Uma vez que o DNS do host esteja corretamente configurado, suas aplicações estarão acessíveis em <code>http://app1.dominio.com</code>, <code>http://app2.dominio.com</code>, etc.</p>
<p>Dúvidas ou sugestões, utilizem os comentários. Sucesso!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/01/deploy-de-varias-aplicacoes-no-nginx-passenger-usando-subdomain-ou-suburi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Enviando emails no Rails através do Gmail</title>
		<link>http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/</link>
		<comments>http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 09:00:09 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=774</guid>
		<description><![CDATA[TweetEnviar emails de uma aplicação Rails é muito simples. A parte complicada fica com a configuração do ambiente e do servidor de email. Se você não souber ou não tiver muita paciência para fazer isso (por exemplo instalar e configurar &#8230; <a href="http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/" data-text="Enviando emails no Rails através do Gmail" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Enviar emails de uma aplicação Rails é <a href="http://guides.rubyonrails.org/action_mailer_basics.html">muito simples</a>. A parte complicada fica com a configuração do ambiente e do servidor de email. Se você não souber ou não tiver muita paciência para fazer isso (por exemplo instalar e configurar <a href="http://www.sendmail.org">sendmail</a>, <a href="http://www.mutt.org/">mutt</a>, etc), pode facilmente usar sua conta do <a href="http://lindsaar.net/2010/3/15/how_to_use_mail_and_actionmailer_3_with_gmail_smtp">Gmail</a> para enviar as mensagens da sua aplicação.</p>
<p>Basta incluir as seguintes configurações no bloco <code>config</code> dos respectivos ambientes da aplicação (por exemplo, <code>config/environments/production.rb</code>):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  config.<span style="color:#9900CC;">action_mailer</span>.<span style="color:#9900CC;">delivery_method</span> = <span style="color:#ff3333; font-weight:bold;">:smtp</span>
  config.<span style="color:#9900CC;">action_mailer</span>.<span style="color:#9900CC;">smtp_settings</span> = <span style="color:#006600; font-weight:bold;">&#123;</span>
    <span style="color:#ff3333; font-weight:bold;">:enable_starttls_auto</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
    <span style="color:#ff3333; font-weight:bold;">:authentication</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:plain</span>,
    <span style="color:#ff3333; font-weight:bold;">:address</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> smtp.<span style="color:#9900CC;">gmail</span>.<span style="color:#9900CC;">com</span>,
    <span style="color:#ff3333; font-weight:bold;">:port</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">587</span>,
    <span style="color:#ff3333; font-weight:bold;">:user_name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;seuemail@gmail.com&quot;</span>,
    <span style="color:#ff3333; font-weight:bold;">:password</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;suasenha&quot;</span>
  <span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>O toque mágico é a chave <code>:enable_startls_auto =&gt; true</code> para habilitar <a href="http://en.wikipedia.org/wiki/Transport_Layer_Security">TLS</a>. Sucesso!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/01/enviando-emails-no-rails-atraves-do-gmail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Criando um WebCrawler de modo fácil e rápido com Ruby e Nokogiri</title>
		<link>http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/</link>
		<comments>http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 09:00:41 +0000</pubDate>
		<dc:creator>Rodrigo Panachi</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[shellscript]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=725</guid>
		<description><![CDATA[TweetQuantas vezes você precisou buscar alguma informação externa para sua aplicação, como um número de telefone ou uma foto em algum site? A idéia é simples: criar um crawler script para fazer parse de algum conteúdo HTML. E basta apenas &#8230; <a href="http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/" data-text="Criando um WebCrawler de modo fácil e rápido com Ruby e Nokogiri" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Quantas vezes você precisou buscar alguma informação externa para sua aplicação, como um número de telefone ou uma foto em algum site? A idéia é simples: criar um <a href="http://en.wikipedia.org/wiki/Web_crawler" target="_blank">crawler</a> script para fazer parse de algum conteúdo HTML. E basta apenas Ruby e <a href="http://nokogiri.org/" target="_blank">Nokogiri</a>.</p>
<h3>Exemplo</h3>
<p>Digamos que eu queira obter a última versão de uma dada gem consultando diretamente no site <a href="http://rubygems.org/">http://rubygems.org</a> para me ajudar quando precisar instalar novas gems no meu ambiente. Vamos ao código:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/env ruby</span>
&nbsp;
require <span style="color: #ff0000;">&quot;rubygems&quot;</span>
require <span style="color: #ff0000;">&quot;open-uri&quot;</span>
require <span style="color: #ff0000;">&quot;nokogiri&quot;</span>
&nbsp;
gem = ARGV<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
site = open<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;http://rubygems.org/gems/#{gem}&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
document = Nokogiri::HTML<span style="color: #7a0874; font-weight: bold;">&#40;</span>site<span style="color: #7a0874; font-weight: bold;">&#41;</span>
version = document.css<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;.title h3&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.text
&nbsp;
puts <span style="color: #ff0000;">&quot;#{gem} version #{version}&quot;</span></pre></div></div>

<p>Vou salvar esse script no arquivo <code>gem-version.sh</code>, torna-lo executável com <code>chmod +x gem-version.sh</code> em seguida executar no terminal:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>gem-version rails
  rails version 3.0.3</pre></div></div>

<p>Pronto, agora você também pode brincar à vontade com <a href="http://github.com/tenderlove/nokogiri" target="_blank">Nokogiri</a> no seu shell!</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2011/01/criando-um-webcrawler-de-modo-facil-e-rapido-com-ruby-e-nokogiri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Teste de integração com Rspec 1.x e Capybara na sua app Rails</title>
		<link>http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/</link>
		<comments>http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 10:00:35 +0000</pubDate>
		<dc:creator>Roger Leite</dc:creator>
				<category><![CDATA[quick tips]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[testes unitários]]></category>

		<guid isPermaLink="false">http://1up4dev.org/?p=704</guid>
		<description><![CDATA[TweetEste não é daqueles posts que explicam o que é rspec, testes, diferenças entre teste funcional, integração e etc. Este post é só uma rapidinha, pra quem já conhece rspec e capybara. A documentação do Capybara é boa, mas deixa a desejar &#8230; <a href="http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-left"><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/" data-text="Teste de integração com Rspec 1.x e Capybara na sua app Rails" data-count="vertical" data-via="socializeWP" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="socialize-in-button socialize-in-button-left"><iframe src="http://www.facebook.com/plugins/like.php?href=http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=65" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:50px !important; height:65px;" allowTransparency="true"></iframe></div></div><p>Este não é daqueles posts que explicam o que é rspec, testes, diferenças entre teste funcional, integração e etc. Este post é só uma rapidinha, pra quem já conhece <a title="Rspec home" href="http://rspec.info/">rspec</a> e <a title="capybara" href="http://github.com/jnicklas/capybara">capybara</a>.</p>
<p>A documentação do Capybara é boa, mas deixa a desejar nas instruções de como integrá-lo somente com rspec. Com a ajuda do <a href="http://blog.georgeguimaraes.com/">George Guimarães</a> da <a href="http://blog.plataformatec.com.br/">Plataforma</a>, cheguei num passo a passo mega simples.</p>
<p>No <em>config/environments/test.rb</em> declare:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">config.<span style="color:#9900CC;">gem</span> <span style="color:#996600;">&quot;rspec&quot;</span>,            <span style="color:#ff3333; font-weight:bold;">:version</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">&quot;= 1.3.0&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">false</span>
config.<span style="color:#9900CC;">gem</span> <span style="color:#996600;">&quot;rspec-rails&quot;</span>,      <span style="color:#ff3333; font-weight:bold;">:version</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">&quot;= 1.3.2&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">false</span>
config.<span style="color:#9900CC;">gem</span> <span style="color:#996600;">&quot;capybara&quot;</span>,         <span style="color:#ff3333; font-weight:bold;">:version</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">&quot;= 0.3.9&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">false</span></pre></div></div>

<p>No <em>spec/spec_helper.rb</em> coloque:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'capybara/rails'</span>
<span style="color:#006600; font-weight:bold;">&#91;</span>...<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#6666ff; font-weight:bold;">Spec::Runner</span>.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>config<span style="color:#006600; font-weight:bold;">|</span>
&nbsp;
  <span style="color:#006600; font-weight:bold;">&#91;</span>...<span style="color:#006600; font-weight:bold;">&#93;</span>
  config.<span style="color:#9966CC; font-weight:bold;">include</span><span style="color:#006600; font-weight:bold;">&#40;</span>Capybara, <span style="color:#ff3333; font-weight:bold;">:type</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#ff3333; font-weight:bold;">:integration</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Pronto! Isto é o suficiente para utilizar o Capybara nos testes de integração.<br />
Para finalizar, você pode montar um teste simples de validação. Por exemplo:</p>
<p>Crie <em>spec/integration/site_spec.rb</em> e coloque:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'spec_helper'</span>
&nbsp;
describe <span style="color:#996600;">&quot;Site sample&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  context <span style="color:#996600;">&quot;root&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
    before <span style="color:#9966CC; font-weight:bold;">do</span>
      visit root_url
      save_and_open_page
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    it <span style="color:#996600;">&quot;should have Hello&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      page.<span style="color:#9900CC;">should</span> have_content<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Hello&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Para executar somente os testes de integração:</p>
<pre>rake spec:integration</pre>
<h2>have_content e um hot tip que pode te salvar muitas horas !</h2>
<p>Caso aconteça o erro:</p>
<pre>undefined method `have_content' for #&lt;ActionController::Integration::Session:0xb618ad10&gt;</pre>
<p>Graças a esta mensagem <a href="http://groups.google.com/group/ruby-capybara/browse_thread/thread/28467e031beb7ba1/19a368c21a278eb8?lnk=gst&amp;q=have_content#19a368c21a278eb8">Can&#8217;t make matchers work with cucumber and rails 2.3.2</a>, descobri que o <em>have_content</em> não funciona com o rails 2.3.2, eu resolvi o problema fazendo um upgrade para a última versão do rails. #ficaadica</p>
<p>Dúvidas, melhorias, sugestões e elogios são sempre bem vindos !</p>
]]></content:encoded>
			<wfw:commentRss>http://1up4dev.org/2010/08/teste-de-integracao-com-rspec-1-x-e-capybara-na-sua-app-rails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

