<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>Ideia Cabeluda</title>
	
	<link>http://www.davidpaniz.com</link>
	<description>David Paniz</description>
	<lastBuildDate>Wed, 11 Jan 2012 18:04:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/davidpaniz" /><feedburner:info uri="davidpaniz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Renomeando arquivos em ruby</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/g_AJ0uIAsLI/</link>
		<comments>http://www.davidpaniz.com/2012/01/10/renomeando-arquivos-em-ruby/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 21:19:54 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[dica rapida]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[renomear]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/?p=575</guid>
		<description><![CDATA[Primeiro post do ano ressuscitando a categoria dica rápida. Há uma ou duas semanas o PotHix me passou umas músicas, mas na hora de copiar, todos os arquivos vieram sem extensão. Depois de perder um tempo tentando resolver com bash, eu desisti e resolvi o problema em 10 min usando ruby. Se alguém puder postar [...]]]></description>
			<content:encoded><![CDATA[<p>Primeiro post do ano ressuscitando a categoria dica rápida.<br />
Há uma ou duas semanas o <a href="http://pothix.com/">PotHix</a> me passou umas músicas, mas na hora de copiar, todos os arquivos vieram sem extensão. Depois de perder um tempo tentando resolver com bash, eu desisti e resolvi o problema em 10 min usando ruby. Se alguém puder postar nos comentários a solução em bash eu agradeço!</p>
<p>Para a minha solução usei apenas os seguintes métodos:</p>
<pre class="brush: ruby; title: ; notranslate">
#Retorna um array de strings com todos os arquivos do diretório.
Dir.entries(&quot;dir&quot;)
</pre>
<pre class="brush: ruby; title: ; notranslate">
#Retorna se o arquivo é um diretório ou não.
File.directory?(&quot;arquivo&quot;)
</pre>
<pre class="brush: ruby; title: ; notranslate">
#Renomeia o arquivo.
File.rename(&quot;nome_antigo&quot;, &quot;nome_novo&quot;)
</pre>
<p>Minha solução final ficou assim:</p>
<pre class="brush: ruby; title: ; notranslate">
def rename_in_dir(dir)
  files = Dir.entries(dir)
  files.each do |f|
    # Usei esse if para ignorar os arquivos que já tinham
    # extensão e as referências '.' e '..'
    next if f == &quot;.&quot; or f == &quot;..&quot; or f =~ /.*\..{2,4}$/
    # é importante sempre usar o diretório junto, se não ele vai
    # procurar sempre no diretório onde o script está sendo executado
    if File.directory?(&quot;#{dir}/#{f}&quot;)
      # Se for um diretório faz a chamada recursiva
      puts &quot;DIR: #{dir}/#{f}&quot;
      rename_in_dir(&quot;#{dir}/#{f}&quot;)
    else
      puts &quot;renaming: #{dir}/#{f}&quot;
      # Adiciona a extensão .mp3 no arquivo
      File.rename(&quot;#{dir}/#{f}&quot;, &quot;#{dir}/#{f}.mp3&quot;)
    end
  end
end
# Começa a partir do diretório onde o arquivo está
rename_in_dir(&quot;.&quot;)
</pre>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/g_AJ0uIAsLI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2012/01/10/renomeando-arquivos-em-ruby/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2012/01/10/renomeando-arquivos-em-ruby/</feedburner:origLink></item>
		<item>
		<title>Minha opinião sobre ambiente de trabalho</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/rLjecoe3qmw/</link>
		<comments>http://www.davidpaniz.com/2011/10/31/minha-opiniao-sobre-ambiente-de-trabalho/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 14:50:25 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[baia]]></category>
		<category><![CDATA[mesas]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/?p=546</guid>
		<description><![CDATA[Muito palpite e pouco estudo na nossa área acabam gerando grandes discussões sobre o ambiente de trabalho. Afinal, baias são ruins, mesões geram barulho e distrações, as pessoas precisam ter o seu espaço, e tantas outras questões sempre são levadas aos pobres tomadores de decisão sobre a montagem da área de trabalho dos funcionários. Estou [...]]]></description>
			<content:encoded><![CDATA[<p>Muito palpite e pouco estudo na nossa área acabam gerando grandes discussões sobre o ambiente de trabalho. Afinal, baias são ruins, mesões geram barulho e distrações, as pessoas precisam ter o seu espaço, e tantas outras questões sempre são levadas aos pobres tomadores de decisão sobre a montagem da área de trabalho dos funcionários.<br />
Estou prestes a completar meu primeiro mês de Locaweb e tive vontade de escrever sobre assunto já que, embora tão parecido com a Caelum, minhas sensações são completamente diferentes, o que me fez refletir sobre o que realmente gosto e não gosto no assunto. Infelizmente esse post é apenas a opinião de mais um e nada além disso.</p>
<p>Eu adorava o ambiente que tinha na DClick e na Caelum e também estou gostando muito das coisas aqui na Locaweb, com regras apenas de bom senso: vista o que quiser, chegue na hora que quiser, apenas faça suas horas semanais e cumpra seus deveres não importa como. Na minha opinião isso deveria ser regra para área de desenvolvimento, mas na hora de comprar os móveis é que as dúvidas começam, então vou listar alguns itens que considero importantes e comentar sobre os prós e contras que vivi nesses últimos anos.</p>
<h3>Mesas</h3>
<p>Sempre fui defensor dos mesões. Sempre achei que o ganho em comunicação vale mais do que as eventuais distrações que podem gerar, porém tanto a DClick quanto a Caelum são empresas relativamente pequenas, em ambas a nossa &#8220;salona&#8221; tinha no máximo 20 devs. A experiência das mesonas aqui na Locaweb está sendo bem menos produtiva pra mim. Na minha primeira semana aqui tive dias de produtividade MUITO baixas que atribuí ao barulho na sala. Não sei qual seria o número máximo de pessoas, ou se o problema não é quantidade e sim o bom senso, mas a questão é que hoje preciso me controlar bem mais para render o que gostaria num dia de trabalho. Aqui, além das mesonas existe outro fator que talvez seja o real &#8220;vilão&#8221;, que são as brincadeiras. Na Caelum era comum ver uma pessoa ou outra brincando com os dardos ou fazendo malabares, mas aqui na Loca é comum ver pessoas fazendo &#8220;guerrinha&#8221; com suas NERFs. Embora seja óbvio que &#8220;guerrinha&#8221; seja uma distração muito grande, nas outras empresas também tínhamos momentos de &#8220;distração coletiva&#8221; ou simplesmente barulho intenso, por isso não tiro a &#8220;culpa&#8221; dos mesões para esse tipo de bagunça.<br />
Veredito: Use com bom senso. Claro que é mais fácil &#8220;controlar&#8221; 20 do que 500, mas mesmo para times grandes acho que vale a pena a utilização dos mesões, mas é necessário um pouco mais de responsabilidade dos funcionários.</p>
<h3>Lugares fixos</h3>
<p>Uma das coisas que mais senti falta quando fui para a Caelum era de ter o MEU lugar. Sempre gostei de ter a minha bagunça, fotos, planta (na DClick eu tínha um cactus na mesa, aqui na Loca ainda não), enfim, personalizar o lugar como você preferir. Tanto na DClick quanto aqui na Loca tenho essa possibilidade, mas na época de Caelum não tínhamos, e embora sentisse falta disso, lá faz muito sentido ser da maneira que é. Mais importante do que trazer a foto da familia é sentar próximo do seu time de trabalho. Aqui na Loca os time são bem definidos e pelo o que entendi, existe uma baixa rotatividade de pessoas entre times, na Caelum é exatamente o oposto. Lá não existe uma separação muito clara entre os times e a rotatividade é MUITO grande. Não faz o menor sentido você customizar seu lugar se vai trocar de lugar toda semana. Um ponto curioso sobre o assunto é que na DClick era mais ou menos o meio do caminho. Existem (pelo menos existiam) times bem definidos por projeto, mas a rotatividade era média e fazer a mudança eventualmente valia a pena. Durante o ano que trabalhei lá me lembro de ter remanejado minhas coisas pelo menos umas 3 ou 4 vezes.<br />
Veredito: Dê preferência por manter os times juntos e, se as mudanças não forem frequentes, vale a pena deixá-los fixos.</p>
<h3>Cadeiras</h3>
<p>Compre cadeiras boas para seus funcionários! Eu sei que não é barato, mas além de lei, faz toda a diferença chegar em casa após um dia de trabalho numa cadeirinha vagabunda ou numa cadeira que você pode configurar altura, encosto e etc.<br />
Veredito: Não precisa ser cadeira de presidente, mas compre pelo menos uma de rodinha com regulagem de altura, encosto e braços.</p>
<h3>Monitores</h3>
<p>Desde que usei dois monitores pela primera vez na DClick me apaixonei pela experiência. Poder ver o código e browser ao mesmo tempo ajuda MUITO no dia-a-dia. Se for optante pelos lugares fixos, compre 2 monitores pra todo mundo! (vai sair mais barato do que a cadeira), se não, deixe alguns espalhados pelas mesas para que as pessoas usem. Uma observação importante sobre essa opção é: quanto mais difícil for de usar, menos eles serão usados, então tente deixar tudo prontinho para apenas espetar o computador e sair usando.<br />
Veredito: Eu me sinto bem mais produtivo usando outro monitor. Acredito que vale o investimento.</p>
<h3>Copa/Cozinha/Banheiro</h3>
<p>Essa parte é bem mais difícil de gerenciar pois na maior parte dos casos não temos como colocar um banheiro a mais onde queremos, mas é um fator que não deveria ser completamente ignorado. Na DClick a copa era pra um lado e o banheiro pra o outro, mas ambos bem próximos da maioria. Na pior da hipóteses ou você sentaria bem perto de um e um pouco longe do outro. Na Caelum, na última configuração de sala que tínhamos quando saí de lá, a &#8220;copa&#8221; estava integrada à nossa sala o que era ótimo. O único problema que tivemos com isso foi a facilidade que as pessoas tinham em comer nas mesonas e acabava sujando um espaço coletivo. Bastou uma conversa e tudo se resolveu. Quanto aos banheiros lá, usavamos os da área comum do prédio. Relativamente próximos com a desvantagem de ter que levar uma chave com você, além de ser só um por andar (relativamente comum tentar ir ao banheiro e estar ocupado). Aqui na Loca, tanto o banheiro quanto a copa ficam nos cantos do prédio e em apenas 2 cantos. Pra piorar, o banheiro masculino é de um lado e o feminino é do outro, ou seja, dependendo de onde você se sente pode ser uma longa jornada até você se aliviar ou conseguir o seu café. Porém, se sentar perto do banheiro vai acabar vendo um grande fluxo de pessoas por perto. Embora veja isso como um desperdício (pra que já leu um pouco sobre lean sabe do que estou falando) não vejo uma solução plausível para esse caso.<br />
Veredito: Definitivamente comportar 500 pessoas é BEM mais difícil do que 20, mas tente se preocupar com esses detalhes na hora de escolher o prédio. Sem dúvidas seus funcionários precisão ir ao banheiro e quanto menos tempo eles demorarem, melhor pra todos! Prefira os ambientes com banheiros e copas (café) acessíveis e de preferência que sejam iguais para todos, independente de onde sentam.</p>
<p>Esses são os principais fatores físicos que acredito afetar a minha produtividade durante o dia-a-dia. Em nenhuma das 3 empresas que citei no post tive 100% dos itens que mais gosto e fui/sou muito feliz como funcionário de todas, então não se preocupe se não conseguir todos, mas tente fornecer o máximo desses itens para seus funcionários.<br />
Lembre-se do princípio ágil:<br />
&#8220;Construa projetos em torno de indivíduos motivados.<br />
Dê a eles o ambiente e o suporte necessário e confie neles para fazer o trabalho.&#8221;</p>
<p>Pra finalizar, fotos da minha mesa aqui na Locaweb:<br />
<a href="http://www.davidpaniz.com/wp-content/uploads/2011/10/IMG_20111031_095502.jpg"><img src="http://www.davidpaniz.com/wp-content/uploads/2011/10/IMG_20111031_095502.jpg" alt="" title="IMG_20111031_095502" class="alignleft size-full wp-image-572" /></a></p>
<p><a href="http://www.davidpaniz.com/wp-content/uploads/2011/10/IMG_20111031_082209.jpg"><img src="http://www.davidpaniz.com/wp-content/uploads/2011/10/IMG_20111031_082209.jpg" alt="" title="IMG_20111031_082209" class="alignright size-full wp-image-571" /></a></p>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/rLjecoe3qmw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2011/10/31/minha-opiniao-sobre-ambiente-de-trabalho/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2011/10/31/minha-opiniao-sobre-ambiente-de-trabalho/</feedburner:origLink></item>
		<item>
		<title>QConSP 2011</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/fyJl0D1uLZA/</link>
		<comments>http://www.davidpaniz.com/2011/09/13/qconsp-2011/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 15:39:05 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Palestras / Apresentações]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/?p=496</guid>
		<description><![CDATA[No final de semana passado aconteceu a segunda edição da QConSP e, novamente, tive a grande honra de ajudar na organização das Lightning talks (LT) no final do primeiro dia do evento como Host da track. Mais um evento organizado pela Caelum, obviamente com seus altos e baixos, mas muito mais altos do que baixos. [...]]]></description>
			<content:encoded><![CDATA[<p>No final de semana passado aconteceu a segunda edição da QConSP e, novamente, tive a grande honra de ajudar na organização das Lightning talks (LT) no final do primeiro dia do evento como Host da track.</p>
<p>Mais um evento organizado pela Caelum, obviamente com seus altos e baixos, mas muito mais altos do que baixos.</p>
<p>Questões como espaço, horário e lanches foram praticamente perfeitos e g<span style="color: #000000;">randes a</span>presentações como as do Jim Webber, Rebecca Parsons e o muito simpático Khawaja Shams com seus robôs dançantes e seu knob (botão) que cria máquinas na Amazon foram momentos de destaque do evento. Infelizmente alguns palestrantes acabaram decepcionando um pouco, mas este é o tipo de problema que não temos como prever e sempre vão acontecer em qualquer evento do mundo.</p>
<p>Outra grande vantagem desse tipo de evento é poder rever alguns amigos e ex-colegas de trabalho e matar a saudade do pessoal, além de conhecer novas pessoas e em alguns casos conhecer fisicamente algum grande amigo de internet (Acreditem, isso acontece! E muito!).</p>
<p>Gostaria de agradecer todos que participaram da organização do evento, os hosts das tracks e o <a href="http://twitter.com/#!/lbassi">Luiz Bassi</a> da Caelum, que foram as principais pessoas por trás deste grande evento. Além disso um agradecimento especial para todos que apresentaram LT comigo:<br />
<a href="http://twitter.com/#!/chrisreichel">Christian Reichel</a>, que apresentou &#8220;Por um Java mais funcional&#8221;, onde mostrou exemplos de funções como <em>map</em> e <em>reduce</em> em java usando o Guava;</p>
<p><a href="http://twitter.com/#!/dchohfi">Diego Chohfi</a>, que agora também faz parte do time da Caelum, mostrou um pouco do dinamismo não muito comentado do Objective-C;</p>
<p>E 3 grandes colaboradores do VRaptor falando sobre algumas funcionalidades extras do framework:</p>
<p><a href="http://twitter.com/#!/wbotelhos">Washington Botelho</a> que mostrou como implementar um controle de permissões baseado em perfis;</p>
<p><a href="http://twitter.com/#!/rodolfoliviero">Rodolfo Liviero</a>, autor do <a href="https://github.com/caelum/vraptor-scaffold">Vraptor-scaffold</a>, mostrou como criar e &#8220;deployar&#8221; uma aplicação VRaptor no heroku em menos de 5 min usando seu projeto;</p>
<p><a href="http://twitter.com/#!/guilhermecaelum">Guilherme Silveira</a> que comentou sobre os vários plugins já criados para o VRaptor e ainda deu um &#8220;puxão de orelha&#8221; no pessoal presente para que extraiam plugins e colaborem com o projeto.</p>
<p>A minha apresentação foi mais abstrata e basicamente questionei sobre a integração de sistemas usando frameworks MVC em vários pontos diferentes sobe o título &#8220;MVC além do MVC&#8221;. Slides:</p>
<div id="__ss_9241778" style="width: 425px;">
<p><strong style="display: block; margin: 12px 0 4px;"><a title="MVC além do MVC (LT at qconsp2011)" href="http://www.slideshare.net/davidpaniz/mvc-alm-do-mvc-lt-at-qconsp2011" target="_blank">MVC além do MVC (LT at qconsp2011)</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9241778" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/davidpaniz" target="_blank">David Paniz</a></div>
</div>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/fyJl0D1uLZA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2011/09/13/qconsp-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2011/09/13/qconsp-2011/</feedburner:origLink></item>
		<item>
		<title>Alguns projetos Open Source</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/HRbLD5o-ckI/</link>
		<comments>http://www.davidpaniz.com/2011/05/30/alguns-projetos-open-source/#comments</comments>
		<pubDate>Mon, 30 May 2011 18:34:29 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[amf]]></category>
		<category><![CDATA[bean validation]]></category>
		<category><![CDATA[blazeds]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[graniteds]]></category>
		<category><![CDATA[jsf2]]></category>
		<category><![CDATA[static_server]]></category>
		<category><![CDATA[stella]]></category>
		<category><![CDATA[vraptor]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=434</guid>
		<description><![CDATA[Antes de mais nada, me desculpem pelos meses que o blog anda sem atualizações, um dos motivos é justamente o que vou comentar neste post. Desde o começo do ano passei a contribuir um pouco mais com projetos Open Source e neste post vou falar um pouco sobre 3 colaborações que gostei muito de ter [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de mais nada, me desculpem pelos meses que o blog anda sem atualizações, um dos motivos é justamente o que vou comentar neste post. Desde o começo do ano passei a contribuir um pouco mais com projetos Open Source e neste post vou falar um pouco sobre 3 colaborações que gostei muito de ter participado e que o resultado final me agradou muito também.</p>
<h3>VRaptor Flex Plugin</h3>
<p>Em ordem cronológica o primeiro &#8220;grande&#8221; feito ao Open Source neste ano foi ter criado, com a ajuda do <a href="http://twitter.com/lucascs">Lucas Cavalcanti</a> e do <a>Erich Egert</a> um plugin para o VRaptor que possibilita as chamadas remotas usando o protocolo AMF. Na verdade não fizemos todo o trabalho de (de)serialização, mas assim como o suporte para Spring, EJB, etc.  O que fizemos foi criar uma factory que você deve registrar no framework que realmente sabe fazer a serialização para AMF. Por enquanto estamos suportanto o <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS</a> e o <a href="http://www.graniteds.org/confluence/pages/viewpage.action?pageId=229378">GraniteDS</a>.</p>
<p>Para saber um pouco mais sobre o plugin e como configurar e usar veja o página no próprio <a href="https://github.com/caelum/vraptor/tree/master/vraptor-plugin-flex">github</a> para issues podem usar a mesma página de <a href="https://github.com/caelum/vraptor/issues">issues do VRaptor</a>.</p>
<h3>Stella 2.0</h3>
<p>Alguns de vocês já deve ter ouvido falar no <a href="http://stella.caelum.com.br/">Stella</a>. Um projeto com um monte de utilidades para desenvolvedores brasileiros, como validadores de CPF e CNPJ, gerador de boleto, conversor de números por extenso e um pouco mais. Embora muito útil, o projeto andava meio parado e recentemente eu, o <a href="http://twitter.com/mario_fts">Mario Amaral</a> e o <a href="http://twitter.com/paulo_caelum">Paulo Silveira</a>, além de outras contribuições da comunidade, atualizamos o projeto para suportar as &#8220;novas&#8221; especificações do JEE6 como o JSF2 e Bean Validation, além de muita refatoração e algumas melhorias na API.</p>
<p>Acabamos de liberar um release beta e em breve devemos ter uma versão 2.0 final disponível.</p>
<h3>Static Server</h3>
<p>O último projeto que trabalhei recentemente surgiu no momento de subir o <a href="http://stella.caelum.com.br">site do Stella</a>. Na Caelum estamos numa tendência de cada vez mais tirar a responsabilidade de infra das nossas mãos, então mesmo com um site estático a gente queria subir no <a href="http://www.heroku.com/">Heroku</a> ou <a href="http://code.google.com/appengine/">Google App Engine</a>. Pensamos em criar uma aplicação rails e deixar todos os arquivos no public, mas não fazia o menor sentido, então comecei a fazer usando apenas <a href="http://rack.rubyforge.org/">Rack</a>, mas ficamos com o problema da home, aí comecei uma dsl pra configurar forward e redirect, fui refatorando até que surgiu o <a href="https://github.com/davidpaniz/StaticServer">StaticServer</a> que já está no rubygems como <a href="https://rubygems.org/gems/static_server">static_server</a>.</p>
<p>Em breve vou colocar uma documentação melhor, mas por enquanto vocês podem ver os exemplos nos <a href="https://github.com/davidpaniz/StaticServer/blob/master/test/integration/test_configuration.rb">testes de integração</a>.</p>
<h3>Ajude você também</h3>
<p>Esses e tantos outros projetos, brasileiros ou não, sempre precisam de ajuda, seja com código, documentação, exemplos e até mesmo encontrando e registrando bugs. Toda ajuda é bem vinda, sempre!</p>
<p>Em breve devo colocar mais exemplos e possivelmente escrever posts com mais detalhes da utilização de cada um deles.</p>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/HRbLD5o-ckI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2011/05/30/alguns-projetos-open-source/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2011/05/30/alguns-projetos-open-source/</feedburner:origLink></item>
		<item>
		<title>Melhorando os testes dos seus models do Rails 3 com RSpec 2 e Remarkable ou Shoulda</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/WrIfHtcLJHc/</link>
		<comments>http://www.davidpaniz.com/2011/01/26/melhorando-os-testes-dos-seus-models-do-rails-3-com-rspec-2-e-remarkable-ou-shoulda/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 18:11:51 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Testes]]></category>
		<category><![CDATA[rails3]]></category>
		<category><![CDATA[remarkable]]></category>
		<category><![CDATA[rspec2]]></category>
		<category><![CDATA[shoulda]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=418</guid>
		<description><![CDATA[Uma das coisas que mais me incomoda quando estou fazendo os meus testes,  é escrever testes para verificar os campos obrigatórios. Eu gosto muito de usar o RSpec e aqui está um exemplo comum de código que testa um modelo &#8216;Usuario&#8217; que tem os atributos &#8216;nome&#8217; e &#8216;idade&#8217; obrigatórios: Sempre que escrevo um código desses [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas que mais me incomoda quando estou fazendo os meus testes,  é escrever testes para verificar os campos obrigatórios. Eu gosto muito de usar o RSpec e aqui está um exemplo comum de código que testa um modelo &#8216;Usuario&#8217; que tem os atributos &#8216;nome&#8217; e &#8216;idade&#8217; obrigatórios:</p>
<pre class="brush: ruby; title: ; notranslate">
describe Usuario do
  before :all do
    @obrigatorios = {nome: 'David Paniz', idade: 25}
  end
  it &quot;deve ter Nome obrigatório&quot; do
    u = Usuario.new(@obrigatorios.merge(nome: nil))
    u.should_not be_valid
    u.should have_at_least(1).error_on(:nome)
  end
  it &quot;deve ter Idade obrigatório&quot; do
    u = Usuario.new(@obrigatorios.merge(idade: nil))
    u.should_not be_valid
    u.should have_at_least(1).error_on(:idade)
  end
  it &quot;Deve ser valido com todos os campos obrigatório&quot; do
    u = Usuario.new(@obrigatorios)
    u.should be_valid
  end
end
</pre>
<p>Sempre que escrevo um código desses sinto que estou testando o Rails e não o meu model. No fundo a única coisa que tenho que testar é se eu coloquei a linha do <strong>validates_presence_of :atributo</strong>. O resto do trabalho (deixar o valid? falso e criar o error no campo) é problema do Rails e não do meu modelo. Além desse sensação estranha de testar a coisa errada esse é o tipo de código que eu escrevo e na hora percebo que a abordagem não é nada <a href="http://pt.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>.</p>
<p>Dei uma olhada em 2 opções para melhorar a abordagem dos testes, o <a href="https://github.com/thoughtbot/shoulda">Shoulda</a> e o <a href="https://github.com/remarkable/remarkable">Remarkable</a>.</p>
<h2>Remarkable</h2>
<p>Para instalar o remarkable com o Rails 3 o RSpec 2 precisamos usar a versão 4 que ainda está em alpha, nesse instante 4.0.0.alpha4.<br />
Adicione ao seu Gemfile as dependências:</p>
<pre class="brush: ruby; title: ; notranslate">
gem &quot;rspec&quot;
gem &quot;rspec-rails&quot;
gem &quot;remarkable_activerecord&quot;, '4.0.0.alpha4'
</pre>
<p>Usando o Remakable você ganha alguns matcher especiais para verificar apenas se você realmente colocou a validação do atributo no seu model, por exemplo o matcher <strong>validate_presence_of</strong>. O código de teste equivalente ao de cima ficaria assim:</p>
<pre class="brush: ruby; title: ; notranslate">
describe Usuario do
  it {should validate_presence_of :nome }
  it {should validate_presence_of :idade }
end
</pre>
<p>Para que o RSpec reconheça esses matchers do Remakable é preciso um último detalhe de configuração que é adicionar um require do remarkable no seu <strong>spec_helper.rb</strong> logo abaixo do require &#8216;rspec/rails&#8217;</p>
<pre class="brush: ruby; highlight: [5]; title: ; notranslate">
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV[&quot;RAILS_ENV&quot;] ||= 'test'
require File.expand_path(&quot;../../config/environment&quot;, __FILE__)
require 'rspec/rails'
require 'remarkable/active_record'
</pre>
<h2>Shoulda</h2>
<p>O shoulda ficou muito famoso sendo utilizado com o TestUnit, mas existe um sub-projeto dele que é o &#8216;shoulda-matchers&#8217;, atualmente na versão 1.0.0.beta1, que é a gem que vamos usar com o Rails 3 o RSpec 2. Adicione ao seu Gemfile as dependências:</p>
<pre class="brush: ruby; title: ; notranslate">
gem &quot;rspec&quot;
gem &quot;rspec-rails&quot;
gem &quot;shoulda-matchers&quot;
</pre>
<p>Curiosamente para esses casos mais básicos o matcher do Shoulda é idêntico ao do Remakable e o código de teste fica idêntico ao dele:</p>
<pre class="brush: ruby; title: ; notranslate">
describe Usuario do
  it {should validate_presence_of :nome }
  it {should validate_presence_of :idade }
end
</pre>
<p>Dessa vez não é preciso nenhuma configuração extra, basta apenas executar os testes e:  Seja uma pessoa mais feliz!</p>
<h2>Conclusão</h2>
<p>Ambas são ótimas opções para dar uma bombada nos seus testes, cada um com suas vantagens e desvantagens. Recomendo uma lida nas respectivas documentações para conhecer mais de cada um deles e escolher o que melhor supre suas necessidades.</p>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/WrIfHtcLJHc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2011/01/26/melhorando-os-testes-dos-seus-models-do-rails-3-com-rspec-2-e-remarkable-ou-shoulda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2011/01/26/melhorando-os-testes-dos-seus-models-do-rails-3-com-rspec-2-e-remarkable-ou-shoulda/</feedburner:origLink></item>
		<item>
		<title>Meu ambiente de desenvolvimento em 7 itens</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/lleroDwzGSs/</link>
		<comments>http://www.davidpaniz.com/2010/12/29/meu-ambiente-de-desenvolvimento-em-7-itens/#comments</comments>
		<pubDate>Thu, 30 Dec 2010 01:28:31 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=409</guid>
		<description><![CDATA[Fui convidado para a brincadeira pelo Adriano Almeida e pelo Anderson Leite e aí vamos nós: Máquina / Sistema Operacional Minha máquina &#8220;oficial&#8221; é meu macbook white 13&#8243; que já está comigo desde 2008, mas com 4Gb e com upgrade pro Snow Leopard. Editor Pra arquivos texto no geral e RoR tenho e uso bastante [...]]]></description>
			<content:encoded><![CDATA[<p>Fui convidado para a brincadeira pelo <a href="http://twitter.com/#!/adrianoalmeida7">Adriano Almeida</a> e pelo <a href="http://twitter.com/#!/anderson_leite">Anderson Leite</a> e aí vamos nós:</p>
<h3>Máquina / Sistema Operacional</h3>
<p>Minha máquina &#8220;oficial&#8221; é meu macbook white 13&#8243; que já está comigo desde 2008, mas com 4Gb e com upgrade pro Snow Leopard.</p>
<h3>Editor</h3>
<p>Pra arquivos texto no geral e RoR tenho e uso bastante o TextMate. Já dei algumas chances pro Vim, mas ainda não me adaptei perfeitamente, recentemente decidi lhe dar outra e parece que agora vou ficar com ele mesmo. Estou usando as <a href="https://github.com/akitaonrails/vimfiles">configurações do Akita</a> e o <a href="https://github.com/adrianoalmeida7/vim-afc">Bundle de afc</a> que o Adriano fez. (afc é o formato que usamos pra escrever as apostilas da Caelum &#8211; Quem já teve curiosidade, conheça o <a href="https://github.com/caelum/tubaina">Tubaina</a>).<br />
Pra programar java não abro mão do Eclipse!</p>
<h3>Terminal</h3>
<p>O bom e velho bash mesmo. Algumas poucas frescuras no ~/.bash_profile pra adicionar cores e personalizar o PS1, mas nada de mais. Normalmente meu terminal está uma zona com pelo menos umas 5 ou 6 abas abertas. Costumo ter umas 2 ou 3 por projeto (server, testes e &#8220;outros&#8221;) e quase sempre tenho abas de mais de projeto aberta.</p>
<h3>Browser</h3>
<p>Hoje meu browser principal é o Chrome, tanto pro dia-a-dia quanto pra desenvolvimento, mas tenho e uso o FF e o Safari. Assim como meu Terminal, meu browser também é uma salada de abas, mas piorada. Aqui tenho umas abas que ficam semanas abertas aguardando para serem lidas.</p>
<h3>Software</h3>
<p>QuickSilver, Adium, Skype, TweetDeck, DropBox e Keynote, além dos indispensáveis serviços do Google: GMail, Calendar e Docs.</p>
<h3>Source-code</h3>
<p>Felizmente tenho usado apenas o git hoje em dia.</p>
<h3>Música</h3>
<p>Quando preciso de muita concentração coloco meus fones e um bom Power Metal pra me isolar do mundo. Independente disso, gosto bastante de ouvir música enquanto programo, mas dentro da Caelum acabo ficando com o volume mais baixo ou com o fone em apenas 1 dos ouvidos pra ouvir as discussões. Um ponto curioso sobre as músicas comigo é que não posso ouvir uma música que me empolga e eu não conheço ela perfeitamente (saber tocar e/ou cantar). Ou escuto uma música que domino ou uma música neutra, se não ela passa a atrapalhar ao invés de ajudar. Para conhecer meu gosto musical recomendo uma passada no meu perfil no <a href="http://www.last.fm/user/davidpaniz">Last.fm</a></p>
<p>Os meus convidados são: Todos autores do <a href="http://vidageek.net/">Vida Geek</a></p>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/lleroDwzGSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2010/12/29/meu-ambiente-de-desenvolvimento-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2010/12/29/meu-ambiente-de-desenvolvimento-em-7-itens/</feedburner:origLink></item>
		<item>
		<title>Eventos do segundo semestre</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/t1glBjYA65E/</link>
		<comments>http://www.davidpaniz.com/2010/11/03/eventos-segundo-semestre/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 09:17:27 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Palestras / Apresentações]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[lightning_talk]]></category>
		<category><![CDATA[qcon]]></category>
		<category><![CDATA[qconsp]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=373</guid>
		<description><![CDATA[QCon SP Em setembro aconteceu um dos eventos mais importantes de TI que já passou no nosso país. Pela primeira vez no Brasil ocorreu uma QCon e tive a felicidade de estar presente. Dessa vez não fui oficialmente um palestrante, mas fui convidado para ser o host de uma das tracks das lightning talks que [...]]]></description>
			<content:encoded><![CDATA[<h3>QCon SP</h3>
<p>Em setembro aconteceu um dos eventos mais importantes de TI que já passou no nosso país. Pela primeira vez no Brasil ocorreu uma QCon e tive a felicidade de estar presente. Dessa vez não fui oficialmente um palestrante, mas fui convidado para ser o host de uma das tracks das lightning talks que vou comentar no final do post.</p>
<p>O evento não foi importante apenas pelo nome QCon, mas sem dúvidas tivemos um evento verdadeiramente de alto nível, tanto os palestrantes brasileiros quanto os internacionais fizeram ótimas apresentações. Na MINHA opinião, entre as palestras que assisti, os destaque vão para o <a href="http://www.twitter.com/nk">Nick Kallen</a>, <a href="http://www.twitter.com/headius">Charles Nutter</a> e a palestra em dupla do <a href="http://www.twitter.com/porcelli">Alexandre Porcelli</a> e <a href="http://www.twitter.com/gleicon">Gleicon Moraes</a>.</p>
<p>Resumindo o evento em poucas palavras me parece que a preocupação geral dos arquitetos hoje é escalabilidade. Linguagens funcionais, filas, denormalização, nosql, cloud e outros meios/técnicas para melhorar a responsividade de nossas aplicações foram assuntos muito comentados por todas as tracks que passei.</p>
<p>Voltando as lightning talks, tivemos ótimas apresentações! Como já falei fui o host de uma das tracks e além da minha própria talk contei com as apresentações de: <a href="http://twitter.com/albertoleal">Alberto Leal</a>, Lucas Pérez, <a href="http://twitter.com/rviveiros">Rafael Viveiros</a>, <a href="http://www.twitter.com/cecifernandes">Cecilia Fernandes</a>, <a href="http://twitter.com/andreronsilva">André Luiz R. Silva</a>, <a href="http://twitter.com/hugobarauna">Hugo Baraúna</a> e um pequeno oi do pessoal do <a href="http://groups.google.com.br/group/ruby-sp/">GURU-SP</a> no final. Muito obrigado e parabéns para todos vocês. </p>
<h3>Rails Rumble</h3>
<p>No meio de outubro aconteceu a 3ª edição do Rails Rumble, esse ano não deixei passar e, pela primeira vez, participei da competição. <a href="http://rumbl.in/g/floating-non-breaking-spaces">Meu time</a> acabou não chegando na final, numa breve retrospectiva levantamos alguns pontos bobos onde falhamos, como não ter pensado num lugar pra tomar banho&#8230; (Sim, eu fiquei mais de 48h sem banho). Quem sabe ano que vem não aparecemos na final?! Pelo menos nossa app nos fez conhecer novos frameworks e nos trouxe algumas ideias de negócio que jamais imaginaríamos.</p>
<h3>RubyConf Brasil 2010</h3>
<p>O antigo Rails Summit Latin America agora está sob a franquia Ruby Conf, pela primeira vez com o nome novo, conseguiram trazer palestrantes ainda mais impressionantes do que os do <a href="http://www.davidpaniz.com/blog/2009/10/21/rails-summit-2009-eu-fu/">ano passado</a>, com destaque para os commiters do Rails <a href="http://twitter.com/#!/josevalim">Jose Valim</a>, <a href="http://twitter.com/#!/tenderlove">Aaron Patterson</a> e <a href="http://twitter.com/#!/wycats">Yehuda Katz</a>, além do <a href="http://twitter.com/#!/olabini">Ola Bini</a> e novamente o <a href="http://www.twitter.com/headius">Charles Nutter</a>. Mais um evento de altíssima qualidade levando o Brasil, cada vez mais, para um patamar de igualdade com outros países considerados polos tecnológicos.</p>
<p>Resumindo o evento em poucas palavras, acredito que as boas práticas são chave para o momento que a comunidade está passando, foram apresentadas várias melhorias no Rails e outros frameworks auxiliares e especialmente no ruby 1.9. Acredito que o interesse de todos agora é que toda a força de vontade que a comunidade tem, relembrada pelo <a href="http://twitter.com/#!/akitaonrails">Fabio Akita</a> na abertura do evento, seja catalisada para gerar valor real. </p>
<h3>Encontro Ágil 2010</h3>
<p>Pra finalizar os eventos do post, um evento que ainda não aconteceu. No próximo sábado, dia 06/11 vai acontecer o Encontro Ágil 2010, num formato completamente inovador, com muitos jogos, dojos e nada de palestras tradicionais, como eles anunciaram, um evento da comunidade para a comunidade, onde terei o prazer de falar sobre dívida técnica e como evita-la numa lightning talk que em breve estará disponível no meu <a href="http://www.slideshare.net/davidpaniz">Slideshare</a></p>
<p>Finalmente aqui estão slides da minha lightning talk na QCon:</p>
<div style="width:425px" id="__ss_5182599"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/davidpaniz/flex-alm-do-browser-lightning-talk-qcon" title="Flex além do browser - Lightning talk qcon ">Flex além do browser &#8211; Lightning talk qcon </a></strong><object id="__sse5182599" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lightningtalkqcon-100911224012-phpapp02&#038;stripped_title=flex-alm-do-browser-lightning-talk-qcon&#038;userName=davidpaniz" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5182599" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lightningtalkqcon-100911224012-phpapp02&#038;stripped_title=flex-alm-do-browser-lightning-talk-qcon&#038;userName=davidpaniz" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/davidpaniz">David Paniz</a>.</div>
</div>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/t1glBjYA65E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2010/11/03/eventos-segundo-semestre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2010/11/03/eventos-segundo-semestre/</feedburner:origLink></item>
		<item>
		<title>Oxente Rails 2010</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/KDYgKaJJC_8/</link>
		<comments>http://www.davidpaniz.com/2010/08/11/oxente-rails-2010/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 16:29:29 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=367</guid>
		<description><![CDATA[É com muito orgulho e satisfação que vou escrever sobre minha participação nesse evento maravilhoso! Antes de falar sobre minha palestra quero deixar aqui meus sinceros agradecimentos ao pessoal da organização. Esse evento foi provavelmente o melhor evento do ano até agora. Infelizmente eu e o Adriano Almeida tivemos um tempo bem limitado pra falar [...]]]></description>
			<content:encoded><![CDATA[<p>É com muito orgulho e satisfação que vou escrever sobre minha participação nesse evento maravilhoso! Antes de falar sobre minha palestra quero deixar aqui meus sinceros agradecimentos ao pessoal da organização. Esse evento foi provavelmente o melhor evento do ano até agora.</p>
<p>Infelizmente eu e o <a href="http://twitter.com/adrianoalmeida7">Adriano Almeida</a> tivemos um tempo bem limitado pra falar sobre um assunto tão amplo, mas acredito que alcançamos nosso objetivo e fizemos quem estava presente se questionar sobre as escolhas de tecnologia para persistência. Durante nossos 30 min falamos sobre o que é NOSQL, comentamos sobre a estrutura de alguns tipos de banco de dados não relacionais e finalmente apresentamos o <a href="http://neo4j.org/">Neo4j</a> como uma implementação de Graph Database. Terminamos mostrando como integrar com rails através do Binding JRuby ou através da API REST utilizando o <a href="http://restfulie.caelum.com.br/">Restfulie</a> para isso.<br />
Slides da apresentação:</p>
<div style="width:425px" id="__ss_4938259"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/davidpaniz/dando-o-prximo-passo-nos-seus-relacionamentos-persistindo-em-graph-databases-4938259" title="Dando o próximo passo nos seus relacionamentos: Persistindo em graph databases">Dando o próximo passo nos seus relacionamentos: Persistindo em graph databases</a></strong><object id="__sse4938259" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oxentegraphsemnotes-100810115400-phpapp01&#038;stripped_title=dando-o-prximo-passo-nos-seus-relacionamentos-persistindo-em-graph-databases-4938259" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4938259" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=oxentegraphsemnotes-100810115400-phpapp01&#038;stripped_title=dando-o-prximo-passo-nos-seus-relacionamentos-persistindo-em-graph-databases-4938259" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/davidpaniz">David Paniz</a>.</div>
</div>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/KDYgKaJJC_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2010/08/11/oxente-rails-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2010/08/11/oxente-rails-2010/</feedburner:origLink></item>
		<item>
		<title>Ruby + Rails no Mundo Real 2010 – Eu fui</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/1DKzKtIdNMw/</link>
		<comments>http://www.davidpaniz.com/2010/06/04/ruby-rails-no-mundo-real-2010/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:47:36 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Palestras / Apresentações]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=331</guid>
		<description><![CDATA[Assim como no post do Rails Summit 2009 eu ia começar o post com uma resenha do evento, mas acho que os posts do Marcelo Castellani e do Rodrigo Ribeiro já atacaram todos os pontos e não tenho mais nada a acrescentar a não ser os meus parabéns e meus agradecimentos a todos os envolvidos. [...]]]></description>
			<content:encoded><![CDATA[<p>Assim como no post do <a href="http://www.davidpaniz.com/2009/10/21/rails-summit-2009-eu-fu/">Rails Summit 2009</a> eu ia começar o post com uma resenha do evento, mas acho que os posts do <a href="http://marcelocastellani.com/ruby-e-rails-no-mundo-real-2010-2/">Marcelo Castellani</a> e do <a href="http://templariodatecnologia.wordpress.com/2010/05/31/minhas-impressoes-rubyrails-no-mundo-real-2010-290510/">Rodrigo Ribeiro</a> já atacaram todos os pontos e não tenho mais nada a acrescentar a não ser os meus parabéns e meus agradecimentos a todos os envolvidos.<br />
Fotos do evento podem ser vistas no <a href="http://picasaweb.google.com/gurusp.org/Rubyreal2010#">album do GURU-SP</a></p>
<p>Sobre a minha palestra com o <a href="http://twitter.com/leobessa">Leonardo Bessa</a>, infelizmente demos uma atrasadinha na primeira metade da palestra e não conseguimos falar de tudo o que queríamos, mas pelo feedback que tivemos acredito que os presentes gostaram e aprenderam. O que não deu tempo de falar no dia com certeza vai virar post aqui no futuro. Para os que não puderam ir, felizmente o pessoal da organização gravou o evento e o vídeo da nossa apresentação pode ser visto aqui:</p>
<p>
<embed src="http://blip.tv/play/hOdBgePKfgI" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Para aqueles que foram ou apenas viram o vídeo, aqui estão os slides da palestra:</p>
<div style="width:425px" id="__ss_4410184"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/davidpaniz/voodoo-e-prajacu-4410184" title="Ruby + Rails no Mundo Real 2010 - Voodoo é pra Jacu - Entendendo metaprogramação em ruby">Ruby + Rails no Mundo Real 2010 &#8211; Voodoo é pra Jacu &#8211; Entendendo metaprogramação em ruby</a></strong><object id="__sse4410184" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=voodooeprajacu-100604063620-phpapp01&#038;stripped_title=voodoo-e-prajacu-4410184" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4410184" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=voodooeprajacu-100604063620-phpapp01&#038;stripped_title=voodoo-e-prajacu-4410184" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/davidpaniz">David Paniz</a>.</div>
</div>
<p>E aqui o código gerado durante a apresentação:</p>
<pre class="brush: ruby; title: ; notranslate">
class Picapau
  def voa
    &quot;voando...&quot;
  end
  def anda
    &quot;andando...&quot;
  end
end
woody = Picapau.new
amigo = Picapau.new
#
# woody.voa
# amigo.voa
# woody.anda
# amigo.anda
#
# def woody.hehehe
#   p &quot;hehehe-hehehe-hehehehehe&quot;
#
# end
#
# woody.hehehe
#
# # amigo.hehehe
#
#
# p woody.class
# p amigo.class
# p woody.class == amigo.class
class Object
    def singleton_class
      # p self
      class &lt;&lt; self
        # p self
      self
      end
    end
end
# p woody.singleton_class
# p amigo.singleton_class
# p amigo.singleton_class == woody.singleton_class
#
# class Picapau
#   alias :metodo_voa :voa
#   def voa(param='')
#     result = metodo_voa(param)
#     p &quot;Chamando metodo voa com #{param.inspect} retornou #{result.inspect}&quot;
#     result
#   end
# end
#
# class Picapau
#   def self.log(metodo)
#     metodo_velho = self.instance_method(metodo)
#     define_method(metodo) do |*arg|
#       result =  metodo_velho.bind(self).call(arg)
#       p &quot;Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}&quot;
#     end
#   end
#   log :voa
# end
#
# class Picapau
#   def self.log(*metodos)
#     metodos.each do |metodo|
#       metodo_velho = self.instance_method(metodo)
#       define_method(metodo) do |*arg|
#         result =  metodo_velho.bind(self).call(arg)
#         p &quot;Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}&quot;
#       end
#     end
#   end
#   log :voa, :anda
# end
module Logger
  def log(*nome_do_metodos)
     nome_do_metodos.each do |nome_do_metodo|
       metodo_velho = self.instance_method(nome_do_metodo)
       define_method(nome_do_metodo) do
         result = metodo_velho.bind(self).call
         p &quot;Chamando metodo #{nome_do_metodo} e retornou #{result}&quot;
         result
       end
     end
   end
end
module Andador
  def anda2
    p &quot;novo metodo que anda&quot;
  end
end
class Picapau
  extend Logger
  include Andador
  log :voa, :anda
end
woody.voa
woody.anda
woody2 = Picapau.new
woody2.anda2
</pre>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/1DKzKtIdNMw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2010/06/04/ruby-rails-no-mundo-real-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2010/06/04/ruby-rails-no-mundo-real-2010/</feedburner:origLink></item>
		<item>
		<title>Ainda estou vivo</title>
		<link>http://feedproxy.google.com/~r/davidpaniz/~3/o_FKmAE3Gdo/</link>
		<comments>http://www.davidpaniz.com/2010/04/22/ainda-estou-vivo/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 13:18:12 +0000</pubDate>
		<dc:creator>David Paniz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.davidpaniz.com/blog/?p=311</guid>
		<description><![CDATA[Pois é pessoal, estou há alguns meses sem dar as caras por aqui, mas não estava parado! Antes de mais nada me desculpem pela sumida, mas como já falei, andei trabalhando, e muito, nesses meses que não escrevi aqui. Durante esses meses escrevi para o infoq.br sobre o lançamento do Flex 4. Esse mesmo artigo [...]]]></description>
			<content:encoded><![CDATA[<p>Pois é pessoal, estou há alguns meses sem dar as caras por aqui, mas não estava parado! Antes de mais nada me desculpem pela sumida, mas como já falei, andei trabalhando, e muito, nesses meses que não escrevi aqui. Durante esses meses escrevi para o infoq.br sobre o <a href="http://www.infoq.com/br/news/2010/03/flex4-flash-builder">lançamento do Flex 4</a>. Esse mesmo artigo com a revisão dos meus amigos Cecilia Fernandes e Luiz Fernando Oliveira Corte Real, ambos autores do <a href="http://www.vidageek.net">Vida Geek</a>, foi o primeiro post da infoq.br a ser publicado na <a href="http://www.infoq.com/news/2010/03/flex4-flash-builder">infoq internacional</a> desde que a Caelum cuida do portal.<br />
Ainda sobre Flex, no último mês escrevi um post sobre <a href="http://blog.caelum.com.br/2010/04/05/testando-seu-codigo-flex-teste-de-unidade-em-actionscript/">teste de unidade em ActionScript</a> no blog da Caelum e tivemos uma grande surpresa, que nos deixou muito orgulhosos, ao receber um comentário do criador do FlexUnit no post!<br />
Além desses textos publicados, nos meses de dezembro e janeiro finalizei o meu TCC da pós-graduação e finalmente estou oficialmente formado!<br />
No começo do mês eu e minha esposa arrumamos um cachorro pro nosso apartamento também. Aparentemente não é nada de mais, mas o filhotinho consome muito mais tempo do que imaginei.</p>
<p>Sobre o futuro, no dia 29 de maio estarei palestrando junto com o Leonardo Bessa no <a href="http://www.temporealeventos.com.br/?area=130">Ruby + Rails no mundo Real</a>. Vamos falar, novamente, sobre <a href="http://www.davidpaniz.com/blog/2009/12/07/metaprogramacao-em-ruby-magia-negra-nao-existe/">Metaprogramação em ruby</a>, mas dessa vez temos 1h e com certeza vamos ainda mais fundo nesse assunto.<br />
Já tenho alguns posts em draft e em breve devo voltar a média de pelo menos 1 post por mês.<br />
Até o próximo post!</p>
<img src="http://feeds.feedburner.com/~r/davidpaniz/~4/o_FKmAE3Gdo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.davidpaniz.com/2010/04/22/ainda-estou-vivo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.davidpaniz.com/2010/04/22/ainda-estou-vivo/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (Feed is rejected)
Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 602/735 objects using disk: basic

Served from: www.davidpaniz.com @ 2012-02-07 00:46:06 -->

