<?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/" version="2.0">

<channel>
	<title>Felipe Lima</title>
	
	<link>http://blog.felipel.com</link>
	<description>weblog</description>
	<lastBuildDate>Tue, 26 Jul 2011 02:51:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/felipel" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="felipel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>ThoughtWorks 6 meses depois</title>
		<link>http://blog.felipel.com/2011/07/thoughtworks-6-meses-depois/</link>
		<comments>http://blog.felipel.com/2011/07/thoughtworks-6-meses-depois/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 04:14:08 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[tw]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=80</guid>
		<description><![CDATA[Desde Janeiro estou trabalhando como consultor na ThoughtWorks, no &#8220;prédio novo&#8221; do TecnoPUC. Posso afirmar com plena convicção que estou muito feliz de ter tomado essa decisão e, por isso, resolvi que seria legal compartilhar um pouco de como é o nosso dia-a-dia lá dentro. A primeira impressão ao entrar no escritório é de que [...]]]></description>
			<content:encoded><![CDATA[<p>Desde Janeiro estou trabalhando como consultor na ThoughtWorks, no &#8220;prédio novo&#8221; do TecnoPUC. Posso afirmar com plena convicção que estou muito feliz de ter tomado essa decisão e, por isso, resolvi que seria legal compartilhar um pouco de como é o nosso dia-a-dia lá dentro.</p>
<p>A primeira impressão ao entrar no escritório é de que algo ali é diferente das empresas de TI tradicionais. Não há baias, apenas grandes mesas sem divisórias. Pessoas trabalhando em pares, ou seja, dois para cada computador, <em><a href="http://en.wikipedia.org/wiki/Nerf_Blasters" target="_blank">NERF darts</a></em> pelo chão, video-games no <em>lounge</em> e pessoas falando alto.</p>
<p style="text-align: left;"><img class="aligncenter" title="ThoughtWorks Brazil - playing videogame" src="http://a.yfrog.com/img736/1552/xebt.jpg" alt="" width="536" height="717" /></p>
<p style="text-align: left;">A ThoughtWorks é conhecida mundialmente por ser uma das pioneiras na prática de metodologias ágeis. Isto faz com que ela tenha uma cultura à parte, que incentiva a colaboração e entrega de alto valor agregado. A empresa tem uma missão um tanto quanto ousada: &#8220;Revolucionar a TI&#8221;. Para tal, possui um modelo de <a href="http://martinfowler.com/bliki/ThreePillars.html" target="_blank">três pilares</a> que descrevem os seus principais propósitos: <strong><em>Sustainable Business</em></strong> (negócio sustentável), <strong><em>Software Excellence </em></strong>(excelência em software)  e <strong><em>Social Justice </em></strong>(justiça social). Os dois primeiros são totalmente esperados para uma empresa de TI, entretanto, justiça social é um valor que poucas empresas valorizam tanto quanto a ThoughtWorks. Isto faz com que procuremos antender apenas clientes que se alinhem com o nosso perfil, evitando fazer negócios com aquelas que vão de encontro com estes valores.</p>
<p style="text-align: left;">Entretanto, o que mais me chamou a atenção lá foi a autonomia que é dada a cada funcionário. Em primeiro lugar, não há uma hierarquia definida e nem um conceito de &#8220;chefe&#8221;. Cada um exerce seu papel e é exigido de acordo com o que é esperado dele. Caso você não esteja satisfeito com alguma coisa, você tem toda a liberdade para propor uma sugestão ou conversar com seus colegas para tentar identificar problemas e propor soluções. Essa é uma característica bastante única na minha opinião e foi a que levei mais tempo para assimilar completamente. Por estes motivos, não é raro ouvir pessoas falando que é necessário &#8220;desconstruir&#8221; para então &#8220;reconstruir&#8221; vários conceitos quando se entra na empresa, quase como uma lavagem cerebral. <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">O processo seletivo da ThoughtWorks é bastante completo, exigente e extensivo. A empresa se propõe a ser um lugar para as mentes mais brilhantes naquilo que fazem. Por isso, costuma-se <a href="http://www.thoughtworks.com/our-process" target="_blank">dizer</a> que ser um <em>Thoughtworker</em> não é para qualquer um. São testadas várias características do candidato, desde valores e perfil até capacidade de raciocínio lógico e habilidades como programador. São várias etapas classificatórias e eliminatórias. O processo todo não costuma levar menos de um mês por candidato, conversando com cerca de 10 pessoas no total. Apesar de difícil, não é impossível, afinal, eu consegui. <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">A TW também é uma empresa global por natureza. Com diversos escritórios pelo mundo todo, a rotação entre países é incentivada. Com isso, é muito comum termos muitos Thoughtworkers viajando entre escritórios e trabalhando nos clientes. Durante qualquer período do ano, temos pelo menos 10% de <em>expats</em> (TWers que vieram de outros países) no escritório da TW Brazil. Lá dentro, a língua oficial é o Inglês. O <a href="http://www.leonardoborges.com/writings/2011/04/25/one-year-of-thoughtworks-a-retrospective/" target="_blank">Leonardo Borges</a>, que trabalha na TW Austrália e escreveu sobre as experiências dele, não me deixa mentir! Nenhum escritório tem mais de aproximadamente 150 funcionários. Quando ele atinge este limite, geralmente ele pára de crescer e procura-se outro lugar para abrir um novo. O motivo disto é muito simples: Depois de uma certa quantidade de pessoas dentro de um escritório, acaba se tornando muito difícil de conhecer todo mundo e de se manter um relacionamento estreito entre as pessoas. Por isso, existe este limite que procura garantir a identidade da empresa e a interação entre as pessoas.</p>
<p style="text-align: center;"><img class="aligncenter" title="twbr whiteboard" src="http://farm5.static.flickr.com/4068/4644495269_aae6fa26d9_z.jpg" alt="" width="576" height="432" /></p>
<p style="text-align: left;">Com esse post, espero ter passado uma noção de como funciona nosso dia-a-dia na TW e ter mostrado como ela é uma empresa realmente diferente. Para quem já trabalhou em uma startup ou uma empresa bem pequena (menos de uns 20 funcionários, por exemplo), vai se sentir em casa lá dentro, pois, apesar de ter mais de 1600 funcionários no mundo todo, a TW parece continuar mantendo as boas características de startups de tecnologia onde tudo é flexível e se trabalha com prazer. <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Se você curtiu a TW, é apaixonado pelo que faz e gostaria trabalhar conosco, não deixe de entrar em contato. Afinal, <a href="http://www.thoughtworks.com/current-opportunities" target="_blank">estamos contratando</a>. <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2011/07/thoughtworks-6-meses-depois/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Dica de ferramenta para Mac: TotalFinder</title>
		<link>http://blog.felipel.com/2011/04/dica-de-ferramenta-para-mac-totalfinder/</link>
		<comments>http://blog.felipel.com/2011/04/dica-de-ferramenta-para-mac-totalfinder/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 22:05:11 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=78</guid>
		<description><![CDATA[Assistindo esse screencast muito interessante do Paul Irish sobre o build script do ótimo projeto HTML5 boilerplate, também criado por ele mesmo, prestei atenção nas ferramentas que ele utiliza no Mac. Entre elas, pude notar o iTerm 2, que é um ótimo substituto para o Terminal padrão do Mac, e o excelente TotalFinder, que adiciona [...]]]></description>
			<content:encoded><![CDATA[<p>Assistindo <a href="http://net.tutsplus.com/tutorials/html-css-techniques/automated-optimization-with-html5-boilerplate-build/" target="_blank">esse</a> screencast muito interessante do Paul Irish sobre o build script do ótimo projeto HTML5 boilerplate, também criado por ele mesmo, prestei atenção nas ferramentas que ele utiliza no Mac. Entre elas, pude notar o <a href="http://www.iterm2.com/#/section/home" target="_blank">iTerm 2</a>, que é um ótimo substituto para o Terminal padrão do Mac, e o excelente <a href="http://totalfinder.binaryage.com/" target="_blank">TotalFinder</a>, que adiciona várias funcionalidades muito úteis ao Finder padrão, como Tabs e Cut &amp; Paste por exemplo, ambas extremamente úteis, na minha opinião. Fica aqui então a recomendação destas duas ótimas ferramentas pra Mac, especialmente o TotalFinder <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Até mais!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2011/04/dica-de-ferramenta-para-mac-totalfinder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que eu aprendi empreendendo e porque você também deveria tentar</title>
		<link>http://blog.felipel.com/2011/03/o-que-eu-aprendi-empreendendo-e-porque-voce-tambem-deveria-tentar/</link>
		<comments>http://blog.felipel.com/2011/03/o-que-eu-aprendi-empreendendo-e-porque-voce-tambem-deveria-tentar/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 03:54:44 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[empreendedorismo]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=74</guid>
		<description><![CDATA[Me motivei a escrever um pouco sobre empreendedorismo pois tenho visto muitas pessoas que no fundo têm vontade de inovar, empreender, mudar, mas geralmente sentem medo de dar uma virada brusca em suas vidas, sair da zona de conforto e arriscar. Pois eu vou relatar um pouco sobre o que eu aprendi com isso tudo [...]]]></description>
			<content:encoded><![CDATA[<p>Me motivei a escrever um pouco sobre empreendedorismo pois tenho visto muitas pessoas que no fundo têm vontade de inovar, empreender, mudar, mas geralmente sentem medo de dar uma virada brusca em suas vidas, sair da zona de conforto e arriscar. Pois eu vou relatar um pouco sobre o que eu aprendi com isso tudo durante o último ano, em que eu me envolvi bastante com este tópico.</p>
<p>Em primeiro lugar, vejo o perfil de empreendedor como sendo, antes de tudo, um <em>mindset.</em> Você não precisa desistir do seu emprego, abrir uma empresa, arriscar tudo o que tem tentando um negócio feito louco só pra ver como é empreender. Vejo este perfil em algumas pessoas que não necessariamente arriscaram tudo, assim como eu fiz, mas mesmo assim possuem este <em>mindset.</em> Eu me refiro a pensar &#8220;fora da caixa&#8221;, inovar, arriscar, tentar coisas diferentes. Essa semana um aluno de Ciência da Computação da UFRGS criou um site chamado <a href="http://poabus.com.br" target="_blank">poabus.com.br</a> para mapear as linhas de ônibus de Porto Alegre, já que o sistema que a EPTC oferece é praticamente inusável. Eu certamente diria que este cidadão chamado Bruno Jurkovski tem um perfil empreendedor, pois teve atitude para pensar diferente e experimentar uma nova solução para um problema existente. Eu diria que este tipo de perfil já caracteriza um empreendedor. Ou seja, você não precisa largar seu emprego de full-time para ser um empreendedor. Você pode começar hoje mesmo pensando em como você pode fazer alguma coisa para mudar o mundo à sua volta, utilizar as suas <em>skills</em> para contribuir para um mundo melhor. Um bom começo é contribuir para um projeto open source, por exemplo. Caso você não seja da área de TI, procure outras formas de inovar, solucionar problemas e deixe sua contribuição para a humanidade fazendo algo diferente, que tenha impacto sobre o mundo ao seu redor.</p>
<p>Alguns podem se perguntar &#8220;por que&#8221;? Por que isso é legal? O que eu ganho com isso? Eu posso afirmar que você ganha muito, tanto como pessoa, quanto como profissional. No meu caso, como um dos fundadores da <a href="http://quavio.com.br" target="_blank">Quavio</a>, aprendi tanto em um ano como se tivesse se passado 5 anos. Você aprende aquilo que nenhum colégio te ensina: como se virar sozinho, como contratar um funcionário, como cuidar das finanças da empresa, como atender bem o cliente, como vender o seu produto, como se posicionar no mercado, entre muitas outras coisas que você acaba nem notando! No final das contas, o resultado disso tudo é que você acaba se tornando uma pessoa melhor. E isto é extraordinário! Fundar uma empresa pra mim foi uma tempestade de novas experiências a cada dia. Não vou dizer que tudo são mil maravilhas, pois não são. Você acaba tendo que engolir muito sapo, aceitar críticas, aceitar perder, errar, cair e tentar novamente. Errar faz parte do processo diário. É apenas errando que realmente aprendemos como não fazer <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Certa vez eu li em algum lugar que, geralmente, aquilo que te faz sentir um nervoso, um frio na barriga e apreensão é aquilo que te trará um aprendizado que não irá esquecer. E isto acontece todo dia na vida de um empreendedor <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hoje não faço mais parte da Quavio por motivos principalmente financeiros meus, entretanto, mantenho meu <strong>mindset</strong> empreendedor, sempre tentando encontrar maneiras de resolver problemas de um jeito diferente. É por isso que este tipo de pessoa costuma sempre ter uma idéia brilhante para compartilhar e receber feedback de um amigo. Até porque, se você acha que a sua idéia é brilhante e valiosa demais para ser aberta para os outros, provavelmente você está errado <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Se você tem medo que alguém roube sua idéia revolucionária, não se preocupe com isso. Uma idéia não vale nada. Muito mais vale uma idéia bem executada. Se alguém roubar a sua idéia e colocá-la em prática, isto significa que provavelmente aquela era a pessoa certa para executá-la, e não você <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Atualmente tenho me dedicado a um projeto pessoal com alguns amigos, chamado <a href="http://noitehoje.com.br" target="_blank">Noite Hoje</a>. Nossa idéia é mudar a maneira como as pessoas procuram uma festa ou um show para ir, acessando de uma maneira simples e rápida de qualquer lugar, tanto o seu computador, quando seu smartphone.</p>
<p>Para quem quiser ler mais, o site <a href="http://www.softwarebyrob.com/" target="_blank">Software by Rob</a> é focado no assunto e tem ótimas boas leituras. Enfim, espero ter plantado a semente em alguém que esteja se sentindo desconfortável com a sua atual situação de vida e quer dar um real sentido para ela. Este é o seu momento hehehe.</p>
<p>Até a próxima <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2011/03/o-que-eu-aprendi-empreendendo-e-porque-voce-tambem-deveria-tentar/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Heroku + MongoHQ + Mongoid</title>
		<link>http://blog.felipel.com/2011/01/heroku-mongohq-mongoid/</link>
		<comments>http://blog.felipel.com/2011/01/heroku-mongohq-mongoid/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 02:00:08 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[heroku]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[mongohq]]></category>
		<category><![CDATA[mongoid]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=71</guid>
		<description><![CDATA[O Heroku possui um Add-on muito interessante para trabalhar com MongoDB chamado MongoHQ. Como de costume, existe tanto um plano grátis, quanto planos pagos. Isso significa que é possível levantar um site com Ruby on Rails ou Sinatra e MongoDB rapidinho e sem desembolsar um centavo com o Heroku.. Damn good. Como nem tudo é [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://heroku.com" target="_blank">Heroku</a> possui um Add-on muito interessante para trabalhar com <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> chamado <a href="https://mongohq.com/home" target="_blank">MongoHQ</a>. Como de costume, existe tanto um plano grátis, quanto planos pagos.</p>
<p>Isso significa que é possível levantar um site com Ruby on Rails ou Sinatra e MongoDB rapidinho e sem desembolsar um centavo com o Heroku.. Damn good.</p>
<p>Como nem tudo é perfeito, a <a href="http://docs.heroku.com/mongohq#gem-options-and-setup" target="_blank">documentação</a> do add-on MongoHQ ainda é um tanto quanto &#8220;magra&#8221; e praticamente nem fala no Mongoid. Perdi uns vários minutos googleando e nada. Até que então encontrei o método from_uri na classe Connection do driver de mongo para Ruby.</p>
<p>Ao habilitarmos este add-on, o Heroku seta uma variável de ambiente chamada MONGOHQ_URL, que utilizamos para estabelecer a conexão com o Mongo server. Não encontrei em lugar nenhum como fazer esta conexão, então deixo aqui caso alguém precise:</p>
<p><script src="https://gist.github.com/805268.js?file=Mongoid%20connection%20snippet%20for%20MongoHQ%20%2B%20Heroku"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2011/01/heroku-mongohq-mongoid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Problemas com IFrame no IE?</title>
		<link>http://blog.felipel.com/2011/01/problemas-com-iframe-no-ie/</link>
		<comments>http://blog.felipel.com/2011/01/problemas-com-iframe-no-ie/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 18:03:33 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[p3p]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=67</guid>
		<description><![CDATA[Pois é. Você não é o único. Apesar de funcionar às mil maravilhas em outros navegadores, o IE parece considerar o IFrame uma ameaça de segurança e se recusa a aceitar cookies de sites de terceiros dentro de um IFrame. Legal né? Isto dificulta qualquer tentativa de colocar um formulário de login dentro de um [...]]]></description>
			<content:encoded><![CDATA[<p>Pois é. Você não é o único. Apesar de funcionar às mil maravilhas em outros navegadores, o IE parece considerar o IFrame uma ameaça de segurança e se recusa a aceitar cookies de sites de terceiros dentro de um IFrame. Legal né? Isto dificulta qualquer tentativa de colocar um formulário de login dentro de um IFrame, por exemplo ou, ainda mais comum, colocar a janela de pagamento de um gateway (no meu caso, <a href="https://pagseguro.uol.com.br/" target="_blank">PagSeguro</a>) dentro de um IFrame funcionando como uma sobretela. Isto funciona perfeitamente, mas não no IE.</p>
<p>A questão toda é que o IE não irá aceitar nenhum cookie do PagSeguro, pois ele está fora do domínio principal do site que está sendo acessado no momento (o site onde você está tentando comprar algum produto, por exemplo). A maneira para contornarmos esse problema, seria implementando um mecanismo chamado <a href="http://www.w3.org/P3P/" target="_blank">P3P</a>.O que este negócio aí faz, é criar um mecanismo de expor para o browser qual é a política de privacidade do site de maneira programática (através de um cabeçalho no response).</p>
<p>Exemplo:</p>
<pre>response["P3P"] = 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'</pre>
<p>Cada uma destas siglas de 3 ou 4 letras acima tem um significado, como por exemplo, expor como o site utiliza os dados do usuário. Esta propriedade deve ser incluida no cabeçalho de todas as páginas que setam um cookie no browser. Mais informações <a href="http://stackoverflow.com/questions/389456/cookie-blocked-not-saved-in-iframe-in-internet-explorer">aqui</a> e <a href="http://adamyoung.net/IE-Blocking-iFrame-Cookies">aqui</a>.</p>
<p>Isto é o que acontece quando os seus cookies forem bloqueados <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://blog.felipel.com/wp-content/uploads/2011/01/p3p.png"><img class="alignleft size-medium wp-image-68" title="p3p" src="http://blog.felipel.com/wp-content/uploads/2011/01/p3p-300x211.png" alt="" width="300" height="211" /></a></p>
<p>No caso do PagSeguro, o que acabava acontecendo é um erro dizendo &#8220;Sua sessão expirou.&#8221;.</p>
<p>Na minha opinião, é responsabilidade do PagSeguro implementar P3P em suas páginas para possibilitar que os desenvolvedores possam utilizar este recurso, já que, como não temos controle sobre o PagSeguro, não temos como implementar o cabeçalho customizado do P3P nas responses.</p>
<p>Com isso, acabamos tendo que mudar a interface para não utilizarmos mais o IFrame, pois não encontramos solução para o problema!</p>
<p>Bom, fica aí mais um motivo pra você que já odiava o IE, agora tem um motivo a mais <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2011/01/problemas-com-iframe-no-ie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Problemas de Timezone com Ruby?</title>
		<link>http://blog.felipel.com/2010/12/problemas-de-timezone-com-ruby/</link>
		<comments>http://blog.felipel.com/2010/12/problemas-de-timezone-com-ruby/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 01:45:15 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[timezone]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=63</guid>
		<description><![CDATA[Timezones podem ser uma dor de cabeça quando trabalhamos muito com datas. Em ruby, existem pelo menos três classes diferentes para manipulação de data/hora: Date, Time e DateTime. O nosso grande problema foi que, ao salvar uma data/hora no banco mySQL via ActiveRecord, o timezone estava sendo normalizado para UTC +00:00, enquanto o timezone do [...]]]></description>
			<content:encoded><![CDATA[<p>Timezones podem ser uma dor de cabeça quando trabalhamos muito com datas. Em ruby, existem pelo menos três classes diferentes para manipulação de data/hora: Date, Time e DateTime.</p>
<p>O nosso grande problema foi que, ao salvar uma data/hora no banco mySQL via ActiveRecord, o timezone estava sendo normalizado para UTC +00:00, enquanto o timezone do sistema é GMT -02:00, pois estamos em horário brasileiro de verão. Normalmente seria GMT -03:00).</p>
<p>Isto se torna um problema quando precisamos comparar datas, que vêm do banco de dados, com a data atual. Utilizando Time.now, estávamos observando um offset de 2h dado pela diferença entre o timezone do banco e o do sistema.</p>
<p>Para solucionar o problema, precisamos normalizar os dois objetos para o mesmo timezone. Resolvemos isto utilizando o método Time.utc, que monta um novo objeto Time baseado no UTC:</p>
<pre>module ApplicationHelper

def self.get_utc_time
now = Time.now
Time.utc(now.year, now.month, now.day, now.hour, now.min, now.sec)
end

end</pre>
<p>Caso alguém tenha uma solução mais elegante para o problema, aceito sugestões <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2010/12/problemas-de-timezone-com-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traduzindo HTML utilizando a API do Google Translate</title>
		<link>http://blog.felipel.com/2010/11/traduzindo-html-utilizando-a-api-do-google-translate/</link>
		<comments>http://blog.felipel.com/2010/11/traduzindo-html-utilizando-a-api-do-google-translate/#comments</comments>
		<pubDate>Tue, 23 Nov 2010 16:44:42 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[google translate]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=59</guid>
		<description><![CDATA[Pessoal, Para quem quiser utilizar a API do Google Translate para traduzir partes de um documento HTML, segue uma implementação que tive que fazer recentemente utilizando jQuery e ASP.NET MVC: Controller Action para fazer o request para a API REST: [ValidateInput(false)] public ActionResult Translate(FormCollection vars) { string reqUri = "https://www.googleapis.com/language/translate/v2?key=YOUR_GOOGLE_API_KEY&#38;source=pt&#38;target=en&#38;format=html"; var webRequest = (HttpWebRequest)WebRequest.Create(reqUri); webRequest.ContentType [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal,</p>
<p>Para quem quiser utilizar a API do Google Translate para traduzir partes de um documento HTML, segue uma implementação que tive que fazer recentemente utilizando jQuery e ASP.NET MVC:</p>
<ul>
<li>Controller Action para fazer o request para a API REST:</li>
</ul>
<p><code><br />
[ValidateInput(false)]<br />
public ActionResult Translate(FormCollection vars) {<br />
string reqUri = "https://www.googleapis.com/language/translate/v2?key=YOUR_GOOGLE_API_KEY&amp;source=pt&amp;target=en&amp;format=html";</code></p>
<p><code> </code></p>
<p><code> var webRequest = (HttpWebRequest)WebRequest.Create(reqUri);</code></p>
<p><code> </code></p>
<p><code> webRequest.ContentType = "application/x-www-form-urlencoded";<br />
webRequest.Method = "POST";</code></p>
<p><code>byte[] bytes = Encoding.UTF8.GetBytes("q=" + vars["q"]);<br />
webRequest.ContentLength = bytes.Length;<br />
webRequest.Headers.Add("X-HTTP-Method-Override", "GET");</code></p>
<p><code>using (Stream outputStream = webRequest.GetRequestStream()) {<br />
outputStream.Write(bytes, 0, bytes.Length);<br />
}</code></p>
<p><code> </code></p>
<p><code> using (WebResponse webResponse = webRequest.GetResponse()) {<br />
if (webResponse == null) {<br />
return null;<br />
}<br />
using (StreamReader sr = new StreamReader(webResponse.GetResponseStream())) {<br />
return Content(sr.ReadToEnd().Trim(), "text/json");<br />
}<br />
}<br />
}<br />
</code></p>
<p>Algumas considerações sobre esta action:</p>
<ul>
<li>Não estamos validando o parâmetro <strong>q</strong> de entrada. Seria interessante validar a presença deste parâmetro no form e lançar uma exceção caso ele não esteja presente;</li>
<li>Não esqueça de passar para o parâmetro <strong>key</strong> a sua chave da API do google;</li>
<li>Uma melhoria seria receber via form também o código do idioma fonte e destino (parâmetros <strong>source</strong> e <strong>target</strong> da URL).</li>
</ul>
<p>Vamos agora para o código de cliente (JavaScript) para atualizar a view:</p>
<p><code>var translateUrl = '&lt;%= Url.Action("Translate") %&gt;';</code></p>
<p><code>$(function () {<br />
translateElement("caseText");<br />
translateElement("caseTitle");<br />
});</code></p>
<p><code> </code></p>
<p><code>function translateElement(elemId) {<br />
$.ajax({<br />
url: translateUrl,<br />
dataType: 'json',<br />
type: 'POST',<br />
data: {<br />
q: $("#" + elemId).html()<br />
},<br />
success: function (json) {<br />
// TODO: I've found that the returned translated text from Google may be incomplete<br />
// if we send any   elements within the text. We should remove any occurrences<br />
// of this in the input string.<br />
$("#" + elemId).html(unescape(json.data.translations[0].translatedText));<br />
}<br />
});<br />
}</code></p>
<p>O que este código faz é apenas chamar a Action <strong>Translate</strong> que, por sua vez, chama a API do Google e retorna o JSON com o texto traduzido. Feito isso, a função <strong>translateElement</strong> apenas atualiza o conteúdo do elemento com a tradução.</p>
<p>Acredito que o código seja auto explicativo. Qualquer dúvida, por favor perguntem nos comentários <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Documentação da api <a href="http://code.google.com/apis/language/translate/v2/using_rest.html" target="_blank">aqui</a> e <a href="http://code.google.com/apis/language/translate/v2/getting_started.html#JSONP" target="_blank">aqui</a>.</p>
<p>Abraços!</p>
<p>Felipe</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2010/11/traduzindo-html-utilizando-a-api-do-google-translate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configurando uma ferramenta de diff visual para SVN no Linux</title>
		<link>http://blog.felipel.com/2010/11/configurando-uma-ferramenta-de-diff-visual-para-svn-no-linux/</link>
		<comments>http://blog.felipel.com/2010/11/configurando-uma-ferramenta-de-diff-visual-para-svn-no-linux/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 02:37:56 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[diff]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=55</guid>
		<description><![CDATA[Cá estou eu aqui postando após vários dias parado. Tenho trabalhado diariamente com Ubuntu durante os últimos dias devido a um projeto em Rails 3 que estamos tocando aqui na Quavio. Por isso, tenho penado bastante com configuração de ambiente, familiarização com o framework (ainda estou aprendendo muito) e, consequentemente, tenho tido ainda menos tempo [...]]]></description>
			<content:encoded><![CDATA[<p>Cá estou eu aqui postando após vários dias parado. Tenho trabalhado diariamente com Ubuntu durante os últimos dias devido a um projeto em Rails 3 que estamos tocando aqui na <a href="http://www.quavio.com.br" target="_blank">Quavio</a>. Por isso, tenho penado bastante com configuração de ambiente, familiarização com o framework (ainda estou aprendendo muito) e, consequentemente, tenho tido ainda menos tempo do que o usual.</p>
<p>Vou aproveitar só para deixar um rápido passo-a-passo que utilizei para configurar uma ferramenta de diff visual para SVN no Ubuntu. No Windows eu vinha usando o ótimo <a href="http://winmerge.org/" target="_blank">WinMerge</a>. No Linux, fui recomendado ao <a href="http://meld.sourceforge.net/">meld</a> nesta <a href="http://stackoverflow.com/questions/1141686/visual-svn-diff-and-compare-tools-for-linux">pergunta</a> no stackoverflow. Bom, vamos aos passos:</p>
<ul>
<li><code>sudo apt-get install meld</code></li>
<li><code>gedit ~/diffwrap.sh</code></li>
<li>Cole o seguinte conteúdo dentro do arquivo recém criado e salve (adaptado <a href="http://svnbook.red-bean.com/en/1.2/svn.advanced.externaldifftools.html" target="_blank">daqui</a>):</li>
</ul>
<pre>!/bin/sh

# Configure your favorite diff program here.
DIFF="/usr/local/bin/my-diff-tool"

# Subversion provides the paths we need as the sixth and seventh
# parameters.
LEFT=${6}
RIGHT=${7}

# Call the diff command (change the following line to make sense for
# your merge program).
$DIFF $LEFT $RIGHT

# Return an errorcode of 0 if no differences were detected, 1 if some were.
# Any other errorcode will be treated as fatal.
</pre>
<ul>
<li><code>chmod a+x diffwrap.sh</code></li>
<li><code>gedit ~/.subversion/config</code></li>
<li>Procure a linha onde diz &#8220;diff-cmd&#8221; (linha 57, no meu arquivo)</li>
<li>Remove o &#8220;#&#8221; do início da linha para descomentá-la</li>
<li>Digite /home/&lt;nome do seu usuário&gt;/diffwrap.sh no final da linha. O resultado deve ser algo assim: <code>diff-cmd = /home/&lt;nome do usuario&gt;/diffwrap.sh<br />
</code>. Não esqueça de trocar <strong>&lt;nome do usuário&gt;</strong> pelo nome real do seu usuário no sistema</li>
<li>Pronto. Ao digitar <code>svn diff arquivo.rb</code>, o meld será executado com dois arquivos abertos: o seu, com suas modificações locais, e a cópia origina que está no repositório.</li>
</ul>
<p>Por hoje é isso. Nos próximos dias pretendo escrever um guia sobre como publicar uma aplicação Rails 3 do zero num cloud server do Rackspace.</p>
<p>Até mais!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2010/11/configurando-uma-ferramenta-de-diff-visual-para-svn-no-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Opções de hospedagem para Ruby</title>
		<link>http://blog.felipel.com/2010/10/opcoes-de-hospedagem-para-ruby/</link>
		<comments>http://blog.felipel.com/2010/10/opcoes-de-hospedagem-para-ruby/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 02:34:37 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hospedagem]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://blog.felipel.com/?p=45</guid>
		<description><![CDATA[Na Quavio, empresa onde trabalho e sou um dos sócios, uma boa parcela dos projetos executados são basicamente sites e hotsites de clientes. Isto implica em necessidades específicas de hospedagem, como por exemplo, uma boa infraestrutura para envio/recebimento de emails (com webmail), painel de controle, suporte técnico para eventuais problemas de instabilidade, baixo custo mensal, [...]]]></description>
			<content:encoded><![CDATA[<p>Na Quavio, empresa onde trabalho e sou um dos sócios, uma boa parcela dos projetos executados são basicamente sites e hotsites de clientes. Isto implica em necessidades específicas de hospedagem, como por exemplo, uma boa infraestrutura para envio/recebimento de emails (com webmail), painel de controle, suporte técnico para eventuais problemas de instabilidade, baixo custo mensal, pouca utilização de espaço em disco, backup automático, etc. Basicamente, não queremos nos responsabilizar pelo gerenciamento da infra-estrutura que abriga cada um destes projetos, que acabam se tornando muitos com o passar do tempo.</p>
<p>Resumindo, precisamos de um fornecedor de hospedagem que atenda a estas necessidades e que, ao mesmo tempo, ofereça um bom suporte às tecnologias que utilizamos.</p>
<p>Recentemente, decidimos por utilizar exclusivamente Ruby e, preferencialmente, Sinatra (ou Rails) para este tipo de projeto devido a uma série de fatores. Eu diria que os principais seriam a extrema simplicidade de uso e alta produtividade que obtemos com estas ferramentas.</p>
<p>Esta decisão, por sua vez, implica em uma maior dificuldade na escolha do nosso fornecedor de hospedagem, visto que a maioria deles simplesmente não possui suporte a estas tecnologias ou, se possui, é bastante precária ou ineficiente.</p>
<p>Vínhamos utilizando até então, preferencialmente, a <a href="http://www.kinghost.com.br">Kinghost</a> para este fim. Entretanto, chegamos à conclusão de que o suporte a Ruby on Rails é bastante precário e limitado. Isso pra não falar de Sinatra. Ao ligar para o Call Center, o atendente, que se dizia técnico, me pediu que soletrasse a palavra &#8220;Sinatra&#8221; para ele. Desisti na hora.</p>
<p>Outra opção era a <a href="http://www.kinghost.com.br">Locaweb</a>, que também vinhamos utilizamos em alguns casos específicos e que se mostrou relativamente satisfatória em se tratando de suporte a Ruby. Entretanto, considero o custo/benefício da Locaweb baixo (o preço da hospedagem compartilhada parte de R$ 29/mês) quando comparada a outras hospedagens gringas. Além disso, tivemos uns problemas sérios lá com SSH recentemente, o que nos deixou bastante insatisfeitos com o serviço da Locaweb também.</p>
<p>Não nos restaram muitas opções no Brasil, por isso estamos pensando seriamente em procurar alternativas fora daqui para hospedar nossos projetos. Eu realmente não queria ter que fazer isso, pois queriamos muito fomentar o desenvolvimento das hospedagens para essas tecnologias no Brasil, mas infelizmente não nos resta outra alternativa, já que não encontramos um fornecedor que nos atenda de forma satisfatória por aqui.</p>
<p>Não é à toa que vemos manifestações <a href="http://blog.kinghost.com.br/2010/09/empresas-de-hospedagem-de-sites-divulgam-esclarecimento/">deste tipo</a> no mercado brasileiro, pois concordo que a reclamação dos consumidores tem fundamento.</p>
<p>Aceito sugestões de boas hospedagens para Ruby/Sinatra/Rails no Brasil ou fora.</p>
<p>Me surpreendi positivamente esses dias com o excelente serviço que <a href="http://heroku.com">heroku</a> oferece. Achei fantástico. O deploy é simplesmente um git push. Mais fácil, impossível!</p>
<p>Seria muito bom termos algo nesse nível aqui no Brasil!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2010/10/opcoes-de-hospedagem-para-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to map subdomains in Windows 7</title>
		<link>http://blog.felipel.com/2010/08/how-to-map-subdomains-in-windows-7/</link>
		<comments>http://blog.felipel.com/2010/08/how-to-map-subdomains-in-windows-7/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 13:10:00 +0000</pubDate>
		<dc:creator>felipecsl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[membership]]></category>
		<category><![CDATA[subdomains]]></category>

		<guid isPermaLink="false">/post/How-to-map-subdomains-in-Windows-7.aspx</guid>
		<description><![CDATA[Over the last days, I&#8217;ve been working on implementing multiple subdomains with authentication in asp.net for the webapp I&#8217;m currently working on. There are a few steps needed in order to configure IIS, DNS and authentication. 1. Select the website you&#8217;re working on, in the IIS Manager screen, in the left side tree. Then, click [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Over the last days, I&#8217;ve been working on implementing multiple subdomains with authentication in asp.net for the webapp I&#8217;m currently working on.</p>
<p>There are a few steps needed in order to configure IIS, DNS and authentication.</p>
<p>1. Select the website you&#8217;re working on, in the IIS Manager screen, in the left side tree. Then, click the &#8220;Bindings&#8221; option in the right pane</p>
<div style="text-align: center;"><img src="/wp-content/uploads/2010/8/bindings.png" alt="" width="494" height="275" /></div>
<div style="text-align: left;">2. In the Site Bindings window, add each subdomain that you want to map to your site. Unfortunately, wildcard mapping is not supported, so you&#8217;ll have to manually type all the subdomains before using it.</div>
<div style="text-align: left;">3. In the windows hosts file (C:\Windows\system32\drivers\etc\hosts), add up each subdomain again, pointing to 127.0.0.1 (see below):</div>
<div style="text-align: center;"><img src="/wp-content/uploads/2010/8/hosts.png" alt="" width="516" height="535" /></div>
<div style="text-align: left;">4. Lastly, you&#8217;ll need to update your web.config cookies configuration, so that it is set to work with any subdomain. By default, your login cookies will only be valid for the default subdomain (example.com and www.example.com)</div>
<div style="text-align: left;">&lt;authentication mode=&#8221;Forms&#8221;&gt;</div>
<div style="text-align: left;">&lt;forms loginUrl=&#8221;~/Account/Login&#8221; timeout=&#8221;500000&#8243; <strong>domain=&#8221;.example.com&#8221;</strong> /&gt;</div>
<div style="text-align: left;">&lt;/authentication&gt;</div>
<div style="text-align: left;">Pay attention for the starting dot in the domain attribute. It is needed in order to work with any subdomain <img src='http://blog.felipel.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://blog.felipel.com/2010/08/how-to-map-subdomains-in-windows-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

