<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Cássio Marques</title>
	<atom:link href="http://cassiomarques.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cassiomarques.wordpress.com</link>
	<description>Relatos de um programador em contínua aprendizagem.</description>
	<lastBuildDate>Thu, 19 Jan 2012 02:47:34 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cassiomarques.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Cássio Marques</title>
		<link>http://cassiomarques.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cassiomarques.wordpress.com/osd.xml" title="Cássio Marques" />
	<atom:link rel='hub' href='http://cassiomarques.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Curso Imersão JavaScript pela e-Genial</title>
		<link>http://cassiomarques.wordpress.com/2011/10/05/curso-imersao-javascript-pela-e-genial/</link>
		<comments>http://cassiomarques.wordpress.com/2011/10/05/curso-imersao-javascript-pela-e-genial/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 14:36:34 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[egenial]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=559</guid>
		<description><![CDATA[Nos dias 19 e 26 de Novembro, 03 e 10 de Dezembro vou ministrar um curso sobre Imersão JavaScript pela e-Genial. O curso ocorrerá em 4 sábados, com 3 horas de aula por dia, totalizando 12 horas de curso. Mais detalhes sobre a grade e preços podem ser vistos em http://www.egenial.pro/pt/javascript. JavaScript é uma das [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=559&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nos dias 19 e 26 de Novembro, 03 e 10 de Dezembro vou ministrar um curso sobre Imersão JavaScript pela e-Genial. O curso ocorrerá em 4 sábados, com 3 horas de aula por dia, totalizando 12 horas de curso.</p>
<p>Mais detalhes sobre a grade e preços podem ser vistos em <a href="http://www.egenial.pro/pt/javascript" title="Curso Imersão JavaScript" target="_blank">http://www.egenial.pro/pt/javascript</a>.</p>
<p>JavaScript é uma das linguagens do momento. Presente em praticamente qualquer aplicação web e sendo também cada vez mais usada no servidor, saber JavaScript já se tornou requisito obrigatório para qualquer desenvolvedor. O problema é que ainda hoje muitas pessoas usam JavaScript como uma &#8220;linguagem de brinquedo&#8221;, sem realmente conhecer todos os detalhes da linguagem e como a mesma realmente funciona. A idéia do curso Imersão JavaScript é resolver esse problema. </p>
<p>Provavelmente você já escreveu código JavaScript que apresentava um ou mais dos seguintes problemas: </p>
<p>- Funções muito longas e dificeis de entender<br />
- Variáveis globais que mudavam de valor em momentos inesperados e introduziam bugs<br />
- Código JavaScript inline nos seus elementos HTML<br />
- Código procedural, com muitas funções bagunçando o escopo global<br />
- Falta de organização</p>
<p>JavaScript não é uma linguagem perfeita. Diversos problemas em sua implementação criam riscos para o código escrito, como efeitos inesperados, problemas de manutenção, entre outros. Porém, é possível criar aplicações organizadas e com código seguro seguindo-se alguns padrões e evitando-se as características ruins da linguagem, usando somente a parte boa. Neste curso vamos aprender diversos recursos do JavaScript, tais como:</p>
<p>- Conceitos básicos da linguagem<br />
- Como o JavaScript implementa orientação a objetos<br />
- Programação funcional com JavaScript<br />
- Tratamentos de exceções<br />
- Metaprogramação<br />
- Design Patterns<br />
- e muito mais!</p>
<p>O curso tem como público alvo desenvolvedores e estudantes com ou sem experiência em JavaScript que queiram aprender como escrever código JavaScript seguro, organizado e fácil de manter, além de entender como são implementados alguns conceitos dos frameworks JavaScript utilizados atualmente.</p>
<p>Para participar do curso é necessário que você já tenha experiência em pelo menos uma linguagem de programação. Já ter alguma experiência prévia especificamente com JavaScript é desejável, mas não é um requisito obrigatório. Caso você não conheça a linguagem essa será uma excelente oportunidade para aprender!</p>
<p>Vejo vocês nas aulas!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/559/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/559/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/559/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=559&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/10/05/curso-imersao-javascript-pela-e-genial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Contrate o Cássio Marques!</title>
		<link>http://cassiomarques.wordpress.com/2011/09/07/contrate-o-cassio-marques/</link>
		<comments>http://cassiomarques.wordpress.com/2011/09/07/contrate-o-cassio-marques/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 14:19:37 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Profissão]]></category>
		<category><![CDATA[contrate]]></category>
		<category><![CDATA[desenvolvedor]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=554</guid>
		<description><![CDATA[UPDATE:Estou procurando também projetos para trabalho full-time! Estamos mudando algumas coisas na estrutura da DailyDigital e vou passar a trabalhar menos horas por dia no projeto. Como resultado passei a ter mais horas livres para desenvolver outros coisas. Inicialmente acredito que terei cerca de 6 horas diárias para dedicar a esses trabalhos, mas dependendo do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=554&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3><strong>UPDATE:</strong>Estou procurando também projetos para trabalho full-time!</h3>
<p>Estamos mudando algumas coisas na estrutura da <a href="http://dailydigital.com">DailyDigital</a> e vou passar a trabalhar menos horas por dia no projeto. Como resultado passei a ter mais horas livres para desenvolver outros coisas. Inicialmente acredito que terei cerca de 6 horas diárias para dedicar a esses trabalhos, mas dependendo do projeto posso trabalhas em tempo integral.</p>
<p>Se você tem algum projeto bacana usando Ruby, Rails, JavaScript, BDD, etc, entre em contato! Meu email é cassiommc arroba gmail ponto com.</p>
<p>Obrigado!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/554/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=554&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/09/07/contrate-o-cassio-marques/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>O desrespeito do Banco Santander: Como não tratar seu clientes</title>
		<link>http://cassiomarques.wordpress.com/2011/07/19/o-desrespeito-do-banco-santander-como-nao-tratar-seu-clientes/</link>
		<comments>http://cassiomarques.wordpress.com/2011/07/19/o-desrespeito-do-banco-santander-como-nao-tratar-seu-clientes/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 13:35:09 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bancos]]></category>
		<category><![CDATA[cambio]]></category>
		<category><![CDATA[operacaodecambio]]></category>
		<category><![CDATA[problemas]]></category>
		<category><![CDATA[santander]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=548</guid>
		<description><![CDATA[Sempre usei esse blog para falar sobre desenvolvimento de software, mas como é um dos melhores canais de comunicação que possuo, vou utilizá-lo para me manifestar quanto aos imensos transtornos que o Banco Santander vem me causando. Peço desculpas a todo mundo que lê o blog e garanto que isso não se tornará algo frequente. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=548&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sempre usei esse blog para falar sobre desenvolvimento de software, mas como é um dos melhores canais de comunicação que possuo, vou utilizá-lo para me manifestar quanto aos imensos transtornos que o Banco Santander vem me causando. Peço desculpas a todo mundo que lê o blog e garanto que isso não se tornará algo frequente. Esse continuará sempre sendo um blog sobre programação de computadores.</p>
<p>Há 4 meses venho tendo problemas com o Banco Santander. Sou cliente deles desde 2003, mas infelizmente chegou em um ponto que não dá mais para manter. Por trabalhar para uma empresa americana, preciso realizar uma operação de câmbio a cada 15 dias, período no qual recebo as remunerações pelo meu trabalho. Desde a primeira vez esse processo se mostrou extremamento complexo e desorganizado. É necessário levar o contrato que eu tenho com a empresa, tive que levar minha declaração de imposto de renda, preencher trocentos papéis, perder dia de trabalho, perder horas e mais horas dentro da agência&#8230; E cada vez que recebo dinheiro dessa forma eles cobram uma taxa de R$ 90,00.<br />
Para que esse processo funcione, é necessário que seja feito um cadastro, indicando que eu estou apto a receber dinheiro do exterior (e que não sou um laranja servindo para lavar dinheiro ilícito, etc). Até ai tudo bem. Mas, como as coisas funcionam super bem, fizeram meu cadastro de forma errada e não conseguem corrigir. Resultado? A cada 15 dias preciso voltar ao banco, levar novamente o meu contrato, que é enviado por FAX (2011, alguém?!) e preencher um papel que eu preciso assinar na agência. O processo todo, desde quando o dinheiro é enviado dos EUA até que eu consiga tê-lo em minha conta leva cerca de 6 dias. Absurdo, pra dizer o mínimo, pois mesmo o dinheiro já estando liberado na central de câmbio do Santander, ainda preciso esperar 3 dias para que o mesmo caia na minha conta.<br />
O cúmulo do absurdo aconteceu agora, no pagamento que eu deveria ter recebido até o dia 15. No dia 13/07 fui até a agência assinar novamente o boleto de câmbio e levar meu contrato para ser enviado por FAX para a central. Com isso, acreditava que até o dia 15 estaria com o dinheiro. Até ontem, dia 18, nada do dinheiro. Liguei novamente, falei com a gerência da minha conta, na agência da cidade de Caieiras-SP (agência n° 0821) e apesar da boa vontade de quem está me atendendo, nada foi feito. O Santander possui uma organização estúpida, onde um gerente e nada é a mesma coisa, pois eles não possuem alçada nenhuma para resolver os problemas, tendo que enviar EMAILS e aguardar que a central de câmbio resolva.<br />
Sabem o que aconteceu? Ontem à noite, 18/07, o SANTANDER COBROU A TAXA DE R$ 90,00 PELA OPERAÇÃO DE CÂMBIO, *ANTES* DO VALOR SER CREDITADO NA MINHA CONTA. Esse foi o cúmulo do absurdo. Já se passaram 6 dias desde que fui ao banco assinar o boleto de câmbio, tenho contas que venceram e das quais terei que pagar multas, etc. Quem arca com isso? E meus planos? E meu orçamento? Santander, vocês são um lixo. Possuem um slogan &#8220;Vamos fazer juntos?&#8221;, que com certeza significa &#8220;fazer piada&#8221;. Aliás, &#8220;juntos&#8221; deve ser vocês e meu dinheiro, que está sendo investido para vocês lucrarem, ao invés de devidamente depositado em minha conta. Fica aqui minha tremenda insatisfação com o serviço prestado por vocês. Vocês não merecem me ter em seu banco, pois não respeitam seus clientes. Santander nunca mais.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/548/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=548&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/07/19/o-desrespeito-do-banco-santander-como-nao-tratar-seu-clientes/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Palestra sobre a gem VCR no Guru-SP</title>
		<link>http://cassiomarques.wordpress.com/2011/06/22/palestra-sobre-a-gem-vcr-no-guru-sp/</link>
		<comments>http://cassiomarques.wordpress.com/2011/06/22/palestra-sobre-a-gem-vcr-no-guru-sp/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 18:09:12 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[vcr]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=538</guid>
		<description><![CDATA[No último dia 11 de junho ocorreu o 16º encontro do Guru-SP, onde fiz uma rápida palestra sobre a gem VCR. Seguem o vídeo e os slides da apresentação. Agradeço ao Lucas Catón por ter filmado e feito a edição. Valeu Lucas!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=538&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No último dia 11 de junho ocorreu o 16º encontro do Guru-SP, onde fiz uma rápida palestra sobre a gem <a title="VCR" href="https://github.com/myronmarston/vcr" target="_blank">VCR</a>. Seguem o vídeo e os slides da apresentação.</p>
<p>Agradeço ao <a title="Lucas Catón" href="http://blog.lucascaton.com.br/" target="_blank">Lucas Catón</a> por ter filmado e feito a edição. Valeu Lucas!</p>
<div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/25419576' width='400' height='300' frameborder='0'></iframe></div>
<iframe src='http://www.slideshare.net/slideshow/embed_code/8391371' width='425' height='348' scrolling='no'></iframe>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/538/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/538/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/538/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=538&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/06/22/palestra-sobre-a-gem-vcr-no-guru-sp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabalho novo, vida nova</title>
		<link>http://cassiomarques.wordpress.com/2011/03/11/trabalho-novo-vida-nova/</link>
		<comments>http://cassiomarques.wordpress.com/2011/03/11/trabalho-novo-vida-nova/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 18:40:32 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=532</guid>
		<description><![CDATA[Há um ano e meio atrás topei aceitar um convite para trabalhar com a equipe da Surgeworks. Aceitei imediatamente, era um chance muito boa de aprender coisas novas e trabalhar com uma equipe de pessoas experientes. Eu só tinha a ganhar. Antes disso, tinha passado 3 anos trabalhando sozinho. Sentia falta de trabalho em equipe. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=532&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Há um ano e meio atrás topei aceitar um convite para trabalhar com a equipe da <a href="http://surgeworks.com">Surgeworks</a>. Aceitei imediatamente, era um chance muito boa de aprender coisas novas e trabalhar com uma equipe de pessoas experientes. Eu só tinha a ganhar. Antes disso, tinha passado 3 anos trabalhando sozinho. Sentia falta de trabalho em equipe.<br />
Eu não deixei de trabalhar nos meus outros projetos durante esse tempo. Continuei desenvolvendo soluções para o <a href="http://www.shhsjc.com.br">Serviço de Hemoterapia de São José dos Campos</a>, dividindo meu tempo diário entre esses dois clientes. No começo tudo ia bem, afinal eu gosto muito de programar e os projetos eram divertidos. O problema veio com o passar dos meses. Fui ficando cada vez mais cansado, mas não fisicamente, mentalmente. O corpo se acostuma rápido com essas coisas, acordar 07:30h e ir dormir 01:30h rapidamente se torna algo natural. Mas a cabeça, pelo menos a minha, começa a sentir. Nos últimos meses fiquei esgotado. Problemas que sei que sou capaz de resolver rapidamente levavam horas. A criatividade foi diminuindo. E eu, muito idiota, continuava trabalhando feito doido. Muitas vezes aos fins de semana.</p>
<p>Durante esse período muitas propostas de trabalho me foram feitas, e agradeço por todo o interesse que as pessoas e empresas demonstraram por mim. Acabei recusando todas elas, por estar muito envolvido nos projetos e ter diversas expectativas com os mesmos. </p>
<p>Essa semana recebi uma proposta interessante, de uma pequena empresa americana chamada <a href="http://dailydigital.com">Daily Digital</a>. O projeto me pareceu interessante e eu teria a oportunidade de trabalhar em um único projeto, me focar de verdade e fazê-lo evoluir. Nos outros clientes, eu vinha mantendo 5 projetos diferentes, todos de grandes dimensões. Isso, somado ao meu total cansaço mental, me fizeram repensar o que eu estava fazendo com a minha vida. No fim escolhi mudar. Não foi uma decisão fácil, definitivamente.</p>
<p>Gostaria de deixar aqui registrado o meu mais sincero carinho e respeito por todas as pessoas com quem trabalhei no Serviço de Hemoterapia de São José dos Campos e na Taoweb/Surgeworks. Aprendi muito durante todos esses anos, fiz amigos e me diverti.</p>
<p>Agora é a hora de colocar as coisas no lugar por aqui e seguir nessa nova empreitada!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/532/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/532/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/532/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=532&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/03/11/trabalho-novo-vida-nova/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Testando HTTP Basic Auth em request specs</title>
		<link>http://cassiomarques.wordpress.com/2011/02/02/testando-http-basic-auth-em-request-specs/</link>
		<comments>http://cassiomarques.wordpress.com/2011/02/02/testando-http-basic-auth-em-request-specs/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 10:44:34 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[rack::test]]></category>
		<category><![CDATA[request]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=522</guid>
		<description><![CDATA[O Rspec2 fornece um novo tipo de spec group chamado requests. Esses testes ficam em spec/requests e são uma boa opção para escrever testes de integração. Comecei a usar por aqui e tem me ajudado bastante em casos onde usar o Cucumber seria overkill. Em um projeto atual um dos meus controllers usa HTTP Basic [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=522&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O Rspec2 fornece um novo tipo de spec group chamado requests. Esses testes ficam em spec/requests e são uma boa opção para escrever testes de integração. Comecei a usar por aqui e tem me ajudado bastante em casos onde usar o Cucumber seria overkill.</p>
<p>Em um projeto atual um dos meus controllers usa HTTP Basic Authentication. Esse controller serve apenas como endpoint de uma API que a aplicação fornece e nunca será acessado via browser. Como a API será consumida apenas por um único cliente, dentro de uma rede conhecida, acho que HTTP Basic Auth está de bom tamanho neste caso. O problema foi pra descobrir como testar isso. Para os testes de controller costuma ser fácil, basta fazer algo como:</p>
<p><pre class="brush: ruby;">
describe FoosController, &quot;handling PUT /foos/123/save&quot; do
  it &quot;is successful with correct username and password&quot; do
    request.env[&quot;HTTP_AUTHORIZATION&quot;] = ActionController::HttpAuthentication::Basic.encode_credentials('some_username', &quot;some_password&quot;)
    put :save, {:some =&gt; parameter}
    response.should be_success
  end
end
</pre></p>
<p>O problema é que nas request specs não temos acesso direto ao request. Tentar fazer o que mostrei acima não funciona, pois <code>request</code> é nil. A solução foi usar Rack::Test diretamente na minha spec. Primeiro, fiz a inclusão dos métodos do Rack::Test nas minhas request specs. No spec_helper.rb:</p>
<p><pre class="brush: ruby;">
require 'rack/test'

Rspec.configure do |config|
  config.include Rack::Test::Methods, :type =&gt; :request
end
</pre></p>
<p>E no meu teste, bastou usar o método <code>authorize</code> do Rack::Test para enviar as credenciais para autenticação:</p>
<p><pre class="brush: ruby;">
describe &quot;my API endpoint&quot; do
  let(:username) { 'valid_username' }
  let(:password) { 'valid_password' }

  it &quot;should work with valid auth credentials&quot; do
    authorize(username, password)
    put &quot;/my/path/123/save&quot;, {:some =&gt; parameter}
    response.status.should == 200
  end
end
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/522/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/522/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=522&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/02/02/testando-http-basic-auth-em-request-specs/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Porque não se deve testar métodos privados</title>
		<link>http://cassiomarques.wordpress.com/2011/01/24/porque-nao-se-deve-testar-metodos-privados/</link>
		<comments>http://cassiomarques.wordpress.com/2011/01/24/porque-nao-se-deve-testar-metodos-privados/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 11:56:53 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=516</guid>
		<description><![CDATA[Esta é uma pergunta frequente: - Devo testar meus métodos privados? E minha resposta é sempre a mesma: - Não. Aliás, essa é a resposta que muitas pessoas darão à pergunta acima. Mas porque raios não é uma boa idéia testar métodos privados? Considere o fluxo básico do TDD: Escreva um caso de teste Assista [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=516&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta é uma pergunta frequente:</p>
<p>- Devo testar meus métodos privados? </p>
<p>E minha resposta é sempre a mesma: </p>
<p>- Não.</p>
<p>Aliás, essa é a resposta que muitas pessoas darão à pergunta acima. Mas porque raios não é uma boa idéia testar métodos privados? </p>
<p>Considere o fluxo básico do TDD: </p>
<ol>
<li>Escreva um caso de teste</li>
<li>Assista o teste falhar (ok, eu raramente sigo esta etapa, vou direto prá próxima)</li>
<li>Escreva o código mais simples possível capaz de fazer o teste passar. </li>
<li>Refatore, se for o caso.</li>
<li>Repita para novos casos de teste, até que sua mente cruel não seja capaz de criar novas formas de sacanear seu código.</li>
</ol>
<p>Definir métodos como privados é algo que faz parte do processo de refatoração. Um método não deve nascer como privado pura e simplesmente. Na maioria das vezes, se você começa a escrever a implementação que faz um teste passar definindo métodos como privados, você está <strong>pensando demais</strong>. Ou seja, está se concentrando em detalhes de implementação e deixando o comportamento em segundo plano. Lembre-se: você deve inicialmente escrever o código mais simples possível capaz de fazer o teste passar. Ou seja, não esquente a cabeça em escrever o código mais elegante do mundo logo de cara. Escreva algo simples e até mesmo feio, mas que você seja capaz de compreender e que faça o teste passar, ou melhor, <strong>que implemente o comportamento esperado</strong>. Após isso feito, identifique pontos de possível refatoração. Geralmente, extrair métodos a partir de trechos de código repetidos leva à criação de métodos privados.</p>
<p>Outro efeito negativo de se testar métodos privados é que os mesmos estão frequentemente sujeitos a mudarem ou até mesmo desaparecem. Conforme seu código evolui e mais refatorações são realizadas, muitos métodos privados podem não fazer mais sentido, o que fará com que você tenha um monte de testes quebrados, inúteis e que não refletem a realidade.</p>
<p>Por fim, lembre-se que além de testar o comportamento do seu código, testes unitários podem ser utilizados como documentação executável. Assim como ocorre com a documentação escrita através de comentários especiais no código (como feito com o Rdoc, Javadoc, etc), você não deve exportar documentação que contenha métodos privados, pois os mesmos <strong>são detalhes de implementação e não devem ser acessados diretamente</strong>. Infelizmente muitos programadores não são suficientemente educados e, se você mostrá-los como, eles vão invadir as entranhas de seus objetos e usar coisas como <code>my_object.send(:some_private_method)</code>. Além disso, incluir métodos privados na documentação só faz com que a mesma seja mais bagunçada e difícil de consultar.</p>
<p>No fim das contas, seus métodos privados estarão sendo testados, mas indiretamente. Eles não são o objetivo final, mas sim apenas um meio, uma etapa na execução do método sendo testado. Este última sim é importante, pois provavelmente faz parte da API pública do seu objeto.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/516/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/516/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=516&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/01/24/porque-nao-se-deve-testar-metodos-privados/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby Masters Conf</title>
		<link>http://cassiomarques.wordpress.com/2011/01/07/ruby-masters-conf/</link>
		<comments>http://cassiomarques.wordpress.com/2011/01/07/ruby-masters-conf/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 16:02:52 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[evento]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubymastersconf]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=512</guid>
		<description><![CDATA[No dia 26 de fevereiro de 2011 irei palestrar no Ruby Masters Conf. O Ruby Masters Conf será uma maratona de palestras on-line que será realizada nos dias 25 e 26 de fevereiro de 2011 e que contará com grandes nomes da comunidade Ruby e Rails internacional e Brasileira. O evento tem por objetivo compartilhar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=512&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No dia 26 de fevereiro de 2011 irei palestrar no <a href="http://rubymastersconf.com/">Ruby Masters Conf</a>. </p>
<p>O Ruby Masters Conf será uma maratona de palestras on-line que será realizada nos dias 25 e 26 de fevereiro de 2011 e que contará com <a href="http://rubymastersconf.com/speakers">grandes nomes da comunidade Ruby e Rails internacional e Brasileira</a>. O evento tem por objetivo compartilhar o conhecimento e ainda arrecadar fundos para projetos opensource. Serão 12 palestras on-line ao vivo em dois dias, usando um ambiente de eventos multimídia onde os palestrantes vão compartilhar seus temas através de recursos de áudio, vídeo, slides e chat.</p>
<p>A idéia é doar toda a renda arrecadada com as inscrições para projetos opensource, ajudando assim os desenvolvedores a continuarem trabalhando em projetos que facilitam nossa vida diariamente. O legal é além de poder assistir no dia, quem participar ainda poderá fazer download das gravações e assim posteriormente. </p>
<p>As doações podem ser feitas em três valores diferentes: R$ 35,00/45,00/55,00. Qualquer um deste valores já dá direito a assistir o evento integralmente. Mas se você está se sentindo generoso e acha que o trabalho em projetos como o <a href="http://rubyinstaller.org/">RubyInstaller</a> e o <a href="http://modrails.com/">Passenger</a>merecem todo o seu apoio, doe o valor máximo!</p>
<p>Me senti extremamente honrado por ter sido convidado a participar deste evento e palestrar junto com profissionais tão relevantes. </p>
<p><strong>Minha palestra: Analisando Complexidade de Código Ruby</strong></p>
<p>A idéia é falar um pouco sobre os tipos de complexidade/smells do código (complexidade clicomática, métricas ABC, duplicação, smells conhecidos, etc, etc). Falar sobre ferramentas para identificar essas coisas no código (basicamente o metric_fu, mas explicando em maiores detalhes as técnicas empregadas em cada uma das gems que o compõe), além de abordar também algumas técnicas para eliminar os problemas encontrados.</p>
<p>Você também pode ajudar a divulgar o evento colocando em seu site/blog <a href="http://rubymastersconf.com/disclose">um banner</a>.</p>
<p>Abraço e até o evento!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/512/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/512/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=512&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2011/01/07/ruby-masters-conf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Meu Ambiente de Desenvolvimento</title>
		<link>http://cassiomarques.wordpress.com/2010/12/28/meu-ambiente-de-desenvolvimento/</link>
		<comments>http://cassiomarques.wordpress.com/2010/12/28/meu-ambiente-de-desenvolvimento/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 02:43:44 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[environment]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=504</guid>
		<description><![CDATA[Alguém começou com a idéia de descrever seu ambiente de desenvolvimento e passar a bola para outros desenvolvedores, criando uma sequência de posts sobre o assunto. O Cairo Noleto descreveu o ambiente dele e passou a bola para mim e mais alguns outros. Aqui vai minha participação. Máquinas / Sistemas Operacionais Uso um MacBook Pro [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=504&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Alguém começou com a idéia de descrever seu ambiente de desenvolvimento e passar a bola para outros desenvolvedores, criando uma sequência de posts sobre o assunto. O <a href="http://caironoleto.com/">Cairo Noleto</a> <a href="http://caironoleto.com/post/2489317803/meu-ambiente-de-desenvolvimento-em-7-itens">descreveu o ambiente dele</a> e passou a bola para mim e mais alguns outros. Aqui vai minha participação.</p>
<h2>Máquinas / Sistemas Operacionais</h2>
<p>Uso um MacBook Pro 13&#8243; como minha máquina principal para desenvolver. Tenho outro notebook com Ubuntu que no momento está fora de combate, com o HD danificado. Quando estou com ambas as máquinas funcionando uso o <a href="http://synergy2.sourceforge.net/">Sinergy</a> para compartilhar teclado e mouse entre as duas máquinas, funciona muito bem. Quando estou em casa mantenho o Mac ligado o tempo todo a um monitor externo de 22&#8243;, deixando no monitor do Mac somente um terminal aberto com algum log que precise acompanhar ou coisas do tipo.</p>
<h2>Terminal</h2>
<p>Inicia automaticamente quando ligo a máquina. Tentei usar o zsh mas acabei voltando pro bash. Talvez tenha sido falta de paciência para configurar melhor as coisas e parar para aprender de verdade. Ou não. :)</p>
<p>Mantenho sempre pelo menos 3 abas abertas. Se estou trabalhando em um projeto Rails, por exemplo, mantenho uma aba só para os logs, outra rodando uma sessão do <a href="http://tmux.sourceforge.net/">tmux</a> dividida ao meio, um lado para rake tasks, rodar testes, etc, e o outro lado com o console do Rails. A terceira aba deixo para uso geral, independente do projeto. Às vezes posso ter mais uma outra aba aberta conectada a algum servidor via ssh. E como citado acima, às vezes mantenho outra janela do terminal aberta no monitor do notebook.</p>
<h2>Editor</h2>
<p>Passo 100% do tempo com o MacVim aberto. Já era usuário do Vim antes de usar Mac e comecei a usar bem antes da nova moda :) Não cheguei a usar TextMate porque quando usava Linux já me virava bem com o Vim e não vi porque aprender outro editor quando fui pro Mac. Tenho estudado Objective-C e estou tentando usar o XCode só para interagir com o projeto e criar as telas, mas tento editar o código sempre pelo Vim também. Sempre que tento usar outro editor, digito como se estivesse no Vim e só faço besteira. Esse foi um dos motivos que me fez usar o <a href="http://eclim.org/">Eclim</a> para desenvolver em Java, quando preciso, o que tem sido raro.<br />
Tenho usado o <a href="http://peepcode.com/products/peepopen">PeepOpen</a> para abrir arquivos no MacVim e tem sido legal. Mas em aplicações Rails ainda prefiro bem mais usar os atalhos do Rails.vim.</p>
<h2>Browser</h2>
<p>Mantenho o Chrome 100% do tempo aberto e uso como browser principal enquanto estou desenvolvendo. Só abro outros browsers para testar o resultado final das coisas (e fecho o mais rápido possível). Preciso me educar melhor e tentar manter menos abas abertas ao mesmo tempo, mas quando tenho 20 abas abertas, considero que estou me controlando :)</p>
<h2>Outros softwares</h3>
<ul>
<li><a href="http://code.google.com/p/tunnelblick/">Tunnelblick</a>: Cliente opensource para VPNs que usem o OpenVPN. Preciso estar conectado o dia todo à rede de um dos meus clientes e esse programinha funciona perfeitamente bem.</li>
<li>Adium e Skype: Indispensáveis para quem trabalha remotamente como eu e precisa fazer reuniões com a equipe, falar com os clientes, etc</li>
<li>iTunes: Aberto 100% do tempo.</li>
<li>Git: Porque eu versiono tudo que posso, não só projetos mas também documentos pessoais</li>
</ul>
<h2>Música</h2>
<p>Ouço música 100% do tempo quando estou trabalhando. Além de ser viciado (quem não gosta de música é louco), por trabalhar em casa e ter N distrações que podem me atrapalhar, a música ajuda a me manter concentrado e manter o foco.</p>
<p>É isso. Acho que meu ambiente é bastante simples, nada que fuja do normal acredito eu. Passo a bola agora pro <a href="http://twitter.com/jtadeulopes">@jtadeulopes</a>, pro <a href="http://twitter.com/thiagopradi">@thiagopradi</a> e pro <a href="http://twitter.com/qmx">@qmx</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/504/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/504/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=504&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2010/12/28/meu-ambiente-de-desenvolvimento/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando filter-objects para organizar melhor o códigos dos controllers</title>
		<link>http://cassiomarques.wordpress.com/2010/11/01/usando-filter-objects-para-organizar-melhor-o-codigos-dos-controllers/</link>
		<comments>http://cassiomarques.wordpress.com/2010/11/01/usando-filter-objects-para-organizar-melhor-o-codigos-dos-controllers/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 12:05:30 +0000</pubDate>
		<dc:creator>cassiomarques</dc:creator>
				<category><![CDATA[OO]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[controllers]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[forwardable]]></category>

		<guid isPermaLink="false">http://cassiomarques.wordpress.com/?p=495</guid>
		<description><![CDATA[O recurso de filtros do Rails é bem útil. É difícil encontrar controllers em apps Rails que não possuam pelo menos um filtro sendo executado. Às vezes esses filtros são simples, como os filtros para verificar permissões ou se o usuário está autenticado. Entretanto muitas vezes a lógica envolvida em um filtro é complexa. Nestes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=495&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O recurso de filtros do Rails é bem útil. É difícil encontrar controllers em apps Rails que não possuam pelo menos um filtro sendo executado. Às vezes esses filtros são simples, como os filtros para verificar permissões ou se o usuário está autenticado. Entretanto muitas vezes a lógica envolvida em um filtro é complexa. Nestes casos é fácil perder o controle e começar a escrever filtros extremamente longos e complexos, poluindo nossos controllers. Além de bagunçado, começa a ficar bem difícil testar esses filtros.</p>
<p>Imagine o seguinte controller:</p>
<p><pre class="brush: ruby;">
class FoosController &lt; ApplicationController
  before_filter :do_something_complex

  protected
  def do_something_complex
    # dezenas de linhas ...
  end
end
</pre></p>
<p>Esse é o esquema padrão de escrever filtros em Rails. Mas pode ficar ainda pior&#8230;</p>
<p><pre class="brush: ruby;">
class FoosController &lt; ApplicationController
  before_filter :do_something_complex

  protected
  def do_something_complex
    check_whatever
    destroy_the_world
  end

  def check_whatever
    # dezenas de linhas ....
  end

  def destroy_the_world
    # dezenas de linhas...
  end
end
</pre></p>
<p>Haja código bagunçando nosso controller!</p>
<h3>Filtros como objetos</h3>
<p>O Rails permite o uso de classes como filtros, para tirar a lógica do controller. Algo mais ou menos assim:</p>
<p><pre class="brush: ruby;">
class FoosController &lt; ApplicationController
  before_filter MyAwesomeFilter  # continua aceitando as opções :only e :exclude
end

class MyAwesomeFilter
  def self.filter(controller)
    # ...
  end
end
</pre></p>
<p>Já é melhor do que entupir nosso controller com código que não deveria estar ali, mas ainda não é o ideal, visto que usa métodos de classe, transformando nosso filtro em nada mais do que um namespace para funções procedurais. O fato é que o <code>before_filter</code> aceita qualquer objeto que responda ao método <code>filter(controller)</code> (lembre-se que em Ruby uma classe é também um objeto!). Podemos melhorar o design fazendo algo como:</p>
<p><pre class="brush: ruby;">
class FoosController &lt; ApplicationController
  before_filter MyAwesomeFilter.new 
end

class MyAwesomeFilter
  def filter(controller)
    # sua lógica, mas seja bacana e refatore!
  end
end
</pre></p>
<p>Bem melhor! Mas ainda temos um problema. Nosso filtro é uma classe comum e não possui acesso direto à nada disponível dentro do nosso controller, pois o escopo aqui é outro. A prática comum é usar a instância do controller que o método <code>filter</code> recebe:</p>
<p><pre class="brush: ruby;">
class MyAwesomeFilter
  def filter(controller)
    SomeObject.run controller.params[:foobar]  
    controller.flash[:notice] = &quot;Some message&quot;
    controller.redirect_to some_path
  end
end
</pre></p>
<p>Estamos delegando um monte de chamadas para o nosso controller, mas acho que não é necessário escrever <code>controller</code> tantas vezes. Vamos delegar da maneira Ruby:</p>
<p><pre class="brush: ruby;">
require 'forwardable'
class MyAwesomeFilter
  extend Forwardable

  def_delegators :@controller, :redirect_to, :render, :params, :flash # .. e qualquer outro método que você queira 

  def filter(controller)
    @controller = controller
    flash[:notice] = &quot;Some message&quot;
    redirect_to some_path
  end
end
</pre></p>
<p>Com o module <code>Forwardable</code> podemos declarar quais chamadas serão delegadas e para quem. Ele é nativo do Ruby, dê uma olhada na documentação.</p>
<p>Mas e se formos criar outros filtros? Vamos ter que declarar os delegators novamente? Não!</p>
<p><pre class="brush: ruby;">
require 'forwardable'
class MyBaseFilter
  extend Forwardable

  def_delegators :@controller, :redirect_to, :render, :params, :flash

  def filter(controller)
    @controller = controller
  end
end

class MyAwesomeFilter &lt; MyBaseFilter
  def filter(controller)
    super(controller)

    # sua lógica de filtro
  end
end
</pre></p>
<p>Com essa estratégia, você pode criar outros delegators usados somente em um filtro específico. Esses delegators serão somados aos já declarados na classe base:</p>
<p><pre class="brush: ruby;">
class MyAwesomeFilter &lt; MyBaseFilter
  def_delegators :@controller, :foo, :bar
end
</pre></p>
<p>Onde salvar esses arquivos com os filtros? Eu gosto de criar uma pasta em <code>app/controllers/filters</code> e colocar os filtros ali. Para facilitar as coisas, adicione essa nova pasta ao autoload do Rails:</p>
<p><pre class="brush: ruby;">
module YourApp
  class Application &lt; Rails::Application
    config.autoload_paths &lt;&lt; &quot;#{Rails.root}/app/controllers/filters&quot;
  end
end
</pre></p>
<p>Espero que com isso você possa organizar um pouco melhor seus controllers, além de poder testar melhor os filtros.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cassiomarques.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cassiomarques.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cassiomarques.wordpress.com/495/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cassiomarques.wordpress.com&amp;blog=962386&amp;post=495&amp;subd=cassiomarques&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cassiomarques.wordpress.com/2010/11/01/usando-filter-objects-para-organizar-melhor-o-codigos-dos-controllers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e9202d96b693676af44a254915e1a48f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cassiomarques</media:title>
		</media:content>
	</item>
	</channel>
</rss>
