<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gustavo Soares</title>
	<atom:link href="http://gustavosoares.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://gustavosoares.com/blog</link>
	<description>tecnologia, infraestrutura web, mobile e afins</description>
	<lastBuildDate>Thu, 29 Mar 2012 00:36:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Melhor Solução de Infraestrutura &#8211; Projeto Automação com Puppet</title>
		<link>http://gustavosoares.com/blog/2012/03/28/melhor-solucao-de-infraestrutura-projeto-automacao-com-puppet/</link>
		<comments>http://gustavosoares.com/blog/2012/03/28/melhor-solucao-de-infraestrutura-projeto-automacao-com-puppet/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 00:36:35 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=308</guid>
		<description><![CDATA[Aconteceu em março de 2012, no cinemark Downtown Barra a premiação da primeira edição do Javali de Ouro Awards. Trata-se de uma premiação anual da Globo.com para premiar os melhores projetos em diferentes categorias, a saber: Projeto do Ano, Inovação, Melhor Experiência Social, Melhor Engenharia de Software, Melhor Solução em Infraestrutura, Melhor Solução de UX, [...]]]></description>
			<content:encoded><![CDATA[<p>Aconteceu em março de 2012, no cinemark Downtown Barra a premiação da primeira edição do Javali de Ouro Awards. Trata-se de uma premiação anual da Globo.com para premiar os melhores projetos em diferentes categorias, a saber: Projeto do Ano, Inovação, Melhor Experiência Social, Melhor Engenharia de Software, Melhor Solução em Infraestrutura, Melhor Solução de UX, Colaboração entre times e Disseminação do Conhecimento.</p>
<p>E na categoria melhor solução em Infraestrutura<em> &#8220;the Javali de Outro goes to&#8230;&#8221;</em></p>
<div id="attachment_312" class="wp-caption aligncenter" style="width: 682px"><a href="http://gustavosoares.com/blog/wp-content/uploads/2012/03/premiacao_javali.jpg"><img class="size-full wp-image-312 " title="Premiação Javali de Ouro" src="http://gustavosoares.com/blog/wp-content/uploads/2012/03/premiacao_javali.jpg" alt="" width="672" height="447" /></a><p class="wp-caption-text">Recebendo a premiação das mãos do Diretor de Operações e Datacenter.</p></div>
<p>Não tinha a menor expectativa de ganhar, mas acabei vencendo com o projeto Automação com <a href="http://puppetlabs.com/" target="_blank">Puppet</a>. Sala do cinema lotada&#8230; tive que descer lá para receber o prêmio e depois fazer um discurso. Obviamente eu não tinha planejado e treinado discurso nenhum e ele não saiu bem como eu gostaria. <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Quem trabalha com infraestrutura em TI sabe o quão difícil é inovar nesta área. Os profissionais dessa área costumam ser muito resistentes a mudança, principalmente para um projeto como este. Este projeto quebrou muitos paradigmas e mudou a forma que os Sysadmin&#8217;s da Globo.com trabalham/enxergam infraestrutura. Trouxe mais agilidade para o dia a dia das pessoas e eu arrisco dizer que ele aproximou Dev&#8217;s de Op&#8217;s. Antes a configuração dos servidores era uma caixa preta para os desenvolvedores . Com o puppet a configuração, mais do que nunca, passa a ser enxergada como código (<em>Infrastructure as A Code</em>). Além disso, houve uma grande difusão de conhecimento sobre esta tecnologia. Foram feitos inúmeros workshops, treinamentos, techtalks&#8230; tudo para &#8220;evangelizar&#8221;, difundir e consolidar o uso do Puppet dentro da organização.</p>
<div id="attachment_315" class="wp-caption aligncenter" style="width: 586px"><a href="http://gustavosoares.com/blog/wp-content/uploads/2012/03/discurso_javali.jpg"><img class="size-full wp-image-315 " title="discurso_javali" src="http://gustavosoares.com/blog/wp-content/uploads/2012/03/discurso_javali.jpg" alt="" width="576" height="383" /></a><p class="wp-caption-text">Premiação Javali de Ouro Awards - Discurso</p></div>
<p>Até a presente data, mais de 1000 servidores (físicos e virtuais) foram puppetizados na empresa. E mais estão por vir!!</p>
<p>e galera&#8230;. inovar é preciso!!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2012%2F03%2F28%2Fmelhor-solucao-de-infraestrutura-projeto-automacao-com-puppet%2F&amp;title=Melhor%20Solu%C3%A7%C3%A3o%20de%20Infraestrutura%20%26%238211%3B%20Projeto%20Automa%C3%A7%C3%A3o%20com%20Puppet" id="wpa2a_2"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2012/03/28/melhor-solucao-de-infraestrutura-projeto-automacao-com-puppet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando o RVM no OSX</title>
		<link>http://gustavosoares.com/blog/2012/01/17/instalando-o-rvm-no-osx/</link>
		<comments>http://gustavosoares.com/blog/2012/01/17/instalando-o-rvm-no-osx/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:47:27 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[procedimento]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=304</guid>
		<description><![CDATA[Opa! Essa semana precisei instalar  rvm no meu macbook. Procurei alguns procedimentos na internet (aka google), e alguns não funcionaram como esperado. Juntei o que cada procedimento tinha de melhor e acabei escrevendo um novo procedimento que me atendeu bem. Um cara aqui do trabalho acabou batendo cabeça com alguns procedimentos inválidos que ele achou [...]]]></description>
			<content:encoded><![CDATA[<p>Opa!</p>
<p>Essa semana precisei instalar  <a href="https://rvm.beginrescueend.com/">rvm</a> no meu macbook. Procurei alguns procedimentos na internet (aka google), e alguns não funcionaram como esperado. Juntei o que cada procedimento tinha de melhor e acabei escrevendo um novo procedimento que me atendeu bem.</p>
<p>Um cara aqui do trabalho acabou batendo cabeça com alguns procedimentos inválidos que ele achou e acabei passando meu para ele&#8230; e voilá! Funcionou! Pensei: Bem, se ele teve este problema, outras pessoas podem ter&#8230; sendo assim resolvi compartilhar o procedimento aqui também. É bem simples. O rvm será instalado no $HOME do usuário.</p>
<blockquote><p>mkdir -p ~/.rvm/src/ &amp;&amp; cd ~/.rvm/src &amp;&amp; rm -rf ./rvm/</p>
<p>git clone <a>git://github.com/wayneeseguin/rvm.git</a><br />
cd rvm<br />
git checkout 1.8.6<br />
./install</p>
<p>vim ~/.bash_profile ou ~/.profile</p>
<p>#RVM<br />
[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;&amp; source &#8220;$HOME/.rvm/scripts/rvm&#8221;  # This loads RVM into a shell session.</p>
<p>rvm install 1.8.7<br />
rvm system ; rvm gemset export system.gems ; rvm 1.8.7 ; rvm gemset import system<br />
rvm &#8211;default 1.8.7</p>
<p>echo “gem: &#8211;no-ri &#8211;no-rdoc” &gt;&gt; $HOME/.gemrc</p></blockquote>
<p>Feito isso, basta abri e fechar o terminal (ou digitar source ~/.profile) e começar a trabalhar com o rvm normalmente. Crie um gemset e comece a utilizá-lo.</p>
<blockquote><p>Ex.:</p>
<p>rvm gemset create test</p>
<p>rvm gemset use test</p></blockquote>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2012%2F01%2F17%2Finstalando-o-rvm-no-osx%2F&amp;title=Instalando%20o%20RVM%20no%20OSX" id="wpa2a_4"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2012/01/17/instalando-o-rvm-no-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando types e providers no Puppet</title>
		<link>http://gustavosoares.com/blog/2011/12/01/criando-types-e-providers-no-puppet/</link>
		<comments>http://gustavosoares.com/blog/2011/12/01/criando-types-e-providers-no-puppet/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 18:43:20 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=301</guid>
		<description><![CDATA[Dia desses precisei me aprofundar em como criar types e providers no Puppet. Providers são recursos fornecidos pelo Puppet para gerenciar diversos itens de configuração. Um exemplo é o package: provider para gerenciar pacotes. Ok, mas onde entra o &#8220;type&#8221; nisso? Ele entra para especificar (ou especializar) o tipo de pacote que se deseja gerenciar. [...]]]></description>
			<content:encoded><![CDATA[<p>Dia desses precisei me aprofundar em como criar <em>types</em> e <em>providers</em> no Puppet. <em>Providers</em> são recursos fornecidos pelo Puppet para gerenciar diversos itens de configuração. Um exemplo é o package: provider para gerenciar pacotes. Ok, mas onde entra o &#8220;<em>type</em>&#8221; nisso? Ele entra para especificar (ou especializar) o tipo de pacote que se deseja gerenciar. O Puppet fornece alguns tipos por padrão: rpm, yum, gem e etc.</p>
<p>A primeira referência, que por sinal foi muito boa, foi <a href="http://www.amazon.com/Pro-Puppet-James-Turnbull/dp/1430230576" target="_blank">o livro Pro Puppet do James Turnbull e do Jeff McCune</a>. Pesquisando mais um pouco (aka, Google), cheguei no excelente link <a href="http://www.masterzen.fr/2011/11/02/puppet-extension-point-part-2" target="_blank">http://www.masterzen.fr/2011/11/02/puppet-extension-point-part-2</a> que resolvi compartilhar com vocês.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2011%2F12%2F01%2Fcriando-types-e-providers-no-puppet%2F&amp;title=Criando%20types%20e%20providers%20no%20Puppet" id="wpa2a_6"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2011/12/01/criando-types-e-providers-no-puppet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PuppetConf aí vou eu!!!</title>
		<link>http://gustavosoares.com/blog/2011/09/21/puppetconf-ai-vou-eu/</link>
		<comments>http://gustavosoares.com/blog/2011/09/21/puppetconf-ai-vou-eu/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 00:15:30 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=294</guid>
		<description><![CDATA[Foi tudo decidido em cima da hora e cá estou eu para participar da primeira conferência voltada para o Puppet: PuppetConf. Para vocês terem idéia, eu fiquei sabendo que iria vir na sexta-feira, dia 16/09/2011 e depois disso foi aquela correria para fazer inscrição, arrumar as passagens, hospedagem e o adiantamento. Cheguei hoje (quarta-feira, dia [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://gustavosoares.com/blog/wp-content/uploads/2011/09/puppetconf.jpg"><img class="aligncenter size-full wp-image-295" title="puppetconf" src="http://gustavosoares.com/blog/wp-content/uploads/2011/09/puppetconf.jpg" alt="" width="649" height="211" /></a></p>
<p>Foi tudo decidido em cima da hora e cá estou eu para participar da primeira conferência voltada para o Puppet: <a href="http://puppetconf.com/" target="_blank">PuppetConf</a>. Para vocês terem idéia, eu fiquei sabendo que iria vir na sexta-feira, dia 16/09/2011 e depois disso foi aquela correria para fazer inscrição, arrumar as passagens, hospedagem e o adiantamento. Cheguei hoje (quarta-feira, dia 21/09/2011) em Portland e amanhã já começa. Ainda bem que costumo me adaptar rápido ao fuso horário, espero que dessa vez não seja diferente.</p>
<p>Comecei a usar o puppet em 2009, e hoje 2 anos depois, é com muito entusiasmo que fico em poder assistir uma série de palestras dessa tecnologia que mudou a forma com que os servidores são instalados, configurados e mantidos na <a href="http://www.globo.com/" target="_blank">empresa que trabalho atualmente</a>. Realmente considero o puppet uma ferramenta fantástica e juntamente com o Chef, eles são os <em>big players</em> do mercado para sistemas de gerência de configuração. Já <a href="http://gustavosoares.com/blog/2010/05/25/gerencia-de-configuracao-com-o-puppet-conceitos-basicos/">escrevi</a> <a href="http://gustavosoares.com/blog/2010/08/03/agregador-de-blogs-sobre-o-puppet/">alguns</a> <a href="http://gustavosoares.com/blog/2010/10/05/automatizando-testes-de-sintaxe-no-puppet/">artigos</a> aqui no blog sobre puppet.</p>
<p>A programação das palestras você encontra <a href="http://puppetconf.com/puppetconf-2011-schedule/" target="_blank">aqui</a>. Pela descrição de algumas, vai ter momento que vou querer me dividir em 2!!</p>
<p>Para finalizar este post uma coincidência que aconteceu&#8230; Meu aniversário é no dia 6/11, o número do quarto que fiquei é o 611. E eu com isso, certo!? Você deve estar pensando&#8230; <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ))))</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2011%2F09%2F21%2Fpuppetconf-ai-vou-eu%2F&amp;title=PuppetConf%20a%C3%AD%20vou%20eu%21%21%21" id="wpa2a_8"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2011/09/21/puppetconf-ai-vou-eu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De volta!</title>
		<link>http://gustavosoares.com/blog/2011/07/30/de-volta/</link>
		<comments>http://gustavosoares.com/blog/2011/07/30/de-volta/#comments</comments>
		<pubDate>Sun, 31 Jul 2011 00:13:03 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[todos]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=290</guid>
		<description><![CDATA[Ufa! problemas com provedor antigo + falta de tempo = site fora do ar por 2 meses!!! Hoje consegui parar para finalizar a migração para um novo provedor de web hosting. De volta!!]]></description>
			<content:encoded><![CDATA[<p>Ufa!</p>
<p>problemas com provedor antigo + falta de tempo = <strong>site fora do ar por 2 meses</strong>!!!</p>
<p>Hoje consegui parar para finalizar a migração para um novo provedor de <em>web hosting</em>.</p>
<p>De volta!!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2011%2F07%2F30%2Fde-volta%2F&amp;title=De%20volta%21" id="wpa2a_10"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2011/07/30/de-volta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobre a Engenharia Semiótica da interação com Sistemas de Monitoração</title>
		<link>http://gustavosoares.com/blog/2010/11/05/sobre-a-engenharia-semiotica-da-interacao-com-sistemas-de-monitoracao/</link>
		<comments>http://gustavosoares.com/blog/2010/11/05/sobre-a-engenharia-semiotica-da-interacao-com-sistemas-de-monitoracao/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 01:51:25 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[DIE]]></category>
		<category><![CDATA[dissertação]]></category>
		<category><![CDATA[engenharia semiótica]]></category>
		<category><![CDATA[ihc]]></category>
		<category><![CDATA[pesquisa]]></category>
		<category><![CDATA[sistemas de monitoração]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=273</guid>
		<description><![CDATA[Ufa! Depois de muita ralação, muitas noites indo dormir tarde, fins de semana estudando e muita dedicação consegui terminar meu mestrado na PUC-Rio no departamento de informática. Devo admitir que foi bastante difícil, pois apesar de atuar no mercado de T.I há anos minha formação é em outra área: Engenharia Eletrônica pela UERJ. Defendi minha [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://gustavosoares.com/blog/wp-content/uploads/2010/11/capa_dissertacao.png"><img class="aligncenter size-full wp-image-280" title="capa_dissertacao" src="http://gustavosoares.com/blog/wp-content/uploads/2010/11/capa_dissertacao.png" alt="" width="422" height="482" /></a></p>
<p>Ufa! Depois de muita ralação, muitas noites indo dormir tarde, fins de semana estudando e muita dedicação consegui terminar meu mestrado na <a href="http://www.inf.puc-rio.br/">PUC-Rio</a> no departamento de informática. Devo admitir que foi bastante difícil, pois apesar de atuar no mercado de T.I há anos minha formação é em outra área: Engenharia Eletrônica pela UERJ.</p>
<p>Defendi minha dissertação em junho de 2010, mas só em novembro de 2010 consegui finalizar todos os ajustes que a banca pediu. O título da minha dissertação é: <strong>Sobre a Engenharia Semiótica da interação com Sistemas de Monitoração</strong>. Tive o prazer de ter sido orientado pela professora <a href="http://www-di.inf.puc-rio.br/~clarisse/" target="_blank">Clarisse Sieckenius de Souza</a>, cuja orientação e paciência foram imprescindíveis para a conclusão da minha dissertação.</p>
<p>Apesar de nunca ter estudado ou tido contato na faculdade, a área de concentração da minha pesquisa foi a área de <a href="http://pt.wikipedia.org/wiki/Intera%C3%A7%C3%A3o_humano-computador" target="_blank">IHC</a>. Para tentar esclarecer um pouco do que se trata, estou copiando um resumo que preparei.</p>
<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Times New Roman'} --></p>
<blockquote><p>Sistemas de Monitoração de aplicações e serviços na Internet são,<br />
atualmente, fonte de informação e tomada de decisão ágil para Administradores<br />
de Sistemas. Em ambientes com grande volume de acesso e infraestrutura de<br />
centenas de servidores, comunicar eventos com problemas em uma interface<br />
acessível para navegadores Web é um grande desafio de design de interfaces e<br />
interação, principalmente, em situações nas quais informação e decisão sejam<br />
críticas. Nesse sentido, o foco desta dissertação é o estudo de sistemas de<br />
monitoração em uma grande empresa de Internet. Sobre eles, é feita inicialmente<br />
uma avaliação criteriosa e, em seguida, é elaborada, implementada e avaliada a<br />
proposta de um modelo de design para sistemas de monitoração. Este modelo<br />
demonstra como a <a href="http://www-di.inf.puc-rio.br/~clarisse/index.php?option=com_content&amp;view=article&amp;id=4&amp;Itemid=3" target="_blank">Engenharia Semiótica</a>, uma teoria semiótica de IHC, pode ser<br />
combinada com elementos de uma teoria da área de fatores humanos e psicologia<br />
ecológica, o Design de Interfaces Ecológicas, para elaborar a comunicabilidade e<br />
interação no projeto de sistemas de monitoração. A combinação destas abordagens<br />
agrega certas características de representação e comunicação às interfaces,<br />
sugerindo que, conforme avaliações realizadas nesta pesquisa, o suporte à decisão<br />
torna-se mais eficiente e ágil para usuários inseridos no domínio estudado.</p></blockquote>
<p>Caso tenha se interessado ou &#8220;curiosidade&#8221; basta baixar a dissertação, <a title="Dissertação de Mestrado: Sobre a Engeharia Semiótica da interação com Sistemas de Monitoração" href="http://gustavosoares.com/blog/wp-content/uploads/2010/11/dissertacao_engenharia_semiotica_gustavo.pdf">clicando aqui</a>.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2010%2F11%2F05%2Fsobre-a-engenharia-semiotica-da-interacao-com-sistemas-de-monitoracao%2F&amp;title=Sobre%20a%20Engenharia%20Semi%C3%B3tica%20da%20intera%C3%A7%C3%A3o%20com%20Sistemas%20de%20Monitora%C3%A7%C3%A3o" id="wpa2a_12"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2010/11/05/sobre-a-engenharia-semiotica-da-interacao-com-sistemas-de-monitoracao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Automatizando testes de sintaxe no puppet</title>
		<link>http://gustavosoares.com/blog/2010/10/05/automatizando-testes-de-sintaxe-no-puppet/</link>
		<comments>http://gustavosoares.com/blog/2010/10/05/automatizando-testes-de-sintaxe-no-puppet/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 15:14:26 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[automação]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[hooks]]></category>
		<category><![CDATA[puppet]]></category>
		<category><![CDATA[sintaxe]]></category>
		<category><![CDATA[teste]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=244</guid>
		<description><![CDATA[Resolvi escrever sobre uma dica MUITO útil para quem está utilizando o puppet e que com certeza irá evitar alguns problemas no futuro. Trata-se de uma forma para automatizar o teste de sintaxe dos seus arquivos puppet (*.pp) e os templates ERB antes que tais arquivos sejam enviados para o seu puppetmaster. Para fazer isso, [...]]]></description>
			<content:encoded><![CDATA[<p>Resolvi escrever sobre uma dica <strong>MUITO</strong> útil para quem está utilizando o puppet e que com certeza irá evitar alguns problemas no futuro. Trata-se de uma forma para automatizar o teste de sintaxe dos seus arquivos puppet (*.pp) e os templates ERB antes que tais arquivos sejam enviados para o seu puppetmaster. Para fazer isso, você deve utilizar os <em>hooks</em> que tanto quanto o <a href="http://svnbook.red-bean.com/en/1.0/svn-book.html#svn-ch-5-sect-2.1">SVN</a> quanto o <a href="http://www.kernel.org/pub/software/scm/git/docs/githooks.html">GIT</a> oferecem. Resumindo, hooks são mecanismos que tais sistemas de controle de versão oferecem para execução de qualquer comando antes ou após a atualização de código no repositório.</p>
<h2>git-hooks e puppet</h2>
<p>Como utilizo o git como repositório, daqui para frente vou me concentrar apenas nele. O git oferece hooks do tipo pre-commit, post-commit e update. Os primeiros dois hook são do tipo cliente, enquanto que último atua no lado do servidor, isto é, sempre que é feito um git push. Para configurar os hooks do tipo cliente, basta criar o diretório <strong>hooks</strong> dentro do diretório <strong>.git</strong> na raiz do projeto e criar os arquivos <strong>pre-commit</strong> e <strong>post-commit</strong>. Para habilitar ou desabilitar um determinado tipo de hook, basta adicionar ou remover a permissão de execução do script. Como estamos interessados em rodar um teste de sintaxe nos arquivos puppet e template o hook mais indicado seria o <span style="text-decoration: underline;">pre-commit</span>, para evitar que sejam comitados códigos com o potencial de quebrar a execução do puppetmaster. O trecho abaixo é o conteúdo do arquivo que venho utilizando.</p>
<pre class="brush: bash;">

#!/bin/sh

syntax_errors=0
error_msg=$(mktemp /tmp/error_msg.XXXXXX)

if git rev-parse --quiet --verify HEAD &gt; /dev/null
then
    against=HEAD
else
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# Get list of new/modified manifest and template files to check (in git index)
cmd=&quot;git diff-index --diff-filter=AM --name-only --cached $against | egrep '\.(pp|erb)'&quot;
echo &quot;cmd: $cmd&quot;
for indexfile in `git diff-index --diff-filter=AM --name-only --cached $against | egrep '\.(pp|erb)'`
do
    # Don't check empty files
    if [ `git cat-file -s :0:$indexfile` -gt 0 ]
    then
        echo &quot;Arquivo alterado: $indexfile&quot;
        case $indexfile in
            *.pp )
                # Check puppet manifest syntax
                git cat-file blob :0:$indexfile | puppet --color=false --parseonly --ignoreimport &gt; $error_msg ;;
            *.erb )
                # Check ERB template syntax
                git cat-file blob :0:$indexfile | erb -x -T - | ruby -c 2&gt; $error_msg &gt; /dev/null ;;
        esac
        if [ &quot;$?&quot; -ne 0 ]
        then
            echo -n &quot;$indexfile: &quot;
            cat $error_msg
            syntax_errors=`expr $syntax_errors + 1`
        fi
    fi
done

rm -f $error_msg

if [ &quot;$syntax_errors&quot; -ne 0 ]
then
    echo &quot;Error: $syntax_errors syntax errors found, aborting commit.&quot;
    exit 1
fi
</pre>
<p>O script acima irá rodar o teste de sintaxe apenas nos arquivos com extensão pp e erb, que são as extensões mais utilizadas para os arquivos puppet e os arquivos de template do puppet. É necessário ter o puppet instalado na sua máquina. Para isso, veja qual a versão do puppet que o seu servidor puppetmaster está rodando e instale-a com o comando: <em>sudo gem install puppet -v [VERSÃO]</em></p>
<p>O exemplo de instalação do puppet que dei anteriormente, foi via <a href="http://rubygems.org/">rubygems</a>, mas ela poderia ser feita de outras formas. (yum/macports/rpm/apt-get e etc).</p>
<p>É isso! Espero ter ajudado!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2010%2F10%2F05%2Fautomatizando-testes-de-sintaxe-no-puppet%2F&amp;title=Automatizando%20testes%20de%20sintaxe%20no%20puppet" id="wpa2a_14"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2010/10/05/automatizando-testes-de-sintaxe-no-puppet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como virar root no milestone com android 2.1</title>
		<link>http://gustavosoares.com/blog/2010/08/27/como-virar-root-no-milestone-com-android-2-1/</link>
		<comments>http://gustavosoares.com/blog/2010/08/27/como-virar-root-no-milestone-com-android-2-1/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 13:16:20 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[todos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[milestone]]></category>
		<category><![CDATA[motorola]]></category>
		<category><![CDATA[root]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=232</guid>
		<description><![CDATA[Se você, assim como eu ficou revoltado em saber que a motorola fez pouco caso dos usuários do milestone na América Latina e no México (vide figura abaixo) e não vai liberar o upgrade do Android 2.2 (AKA Froyo) fique calmo! Ainda tem uma esperança para ter algumas das principais funcionalidades oferecidas pelo Froyo como [...]]]></description>
			<content:encoded><![CDATA[<p>Se você, assim como eu ficou revoltado em saber que a motorola fez pouco caso dos usuários do milestone na América Latina e no México (vide <a href="https://supportforums.motorola.com/community/manager/softwareupgrades?pubid=987654">figura abaixo</a>) e não vai liberar o upgrade do Android 2.2 (AKA Froyo) fique calmo!</p>
<p><a href="http://gustavosoares.com/blog/wp-content/uploads/2010/08/morotola_software_updates.gif"><img class="aligncenter size-full wp-image-233" title="morotola_software_updates" src="http://gustavosoares.com/blog/wp-content/uploads/2010/08/morotola_software_updates.gif" alt="" width="742" height="116" /></a></p>
<p>Ainda tem uma esperança para ter algumas das principais funcionalidades oferecidas pelo Froyo como por exemplo o <a href="http://en.wikipedia.org/wiki/Tethering">Tethering</a> e a possibilidade de instalar aplicativos no cartão de memória. <strong>RROOOOTTTTT!!!!!! </strong>(Antes de seguir lendo, não custa avisar que essa é uma operação &#8220;arriscada&#8221; portanto, faça por sua própria conta..  Eu não sou responsável por nada que venha a acontecer no seu milestone, ok? <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>É isso mesmo! Só nos resta &#8220;rootear&#8221; (provavelmente essa palavra não existe&#8230;rs) o aparelho. Pesquisando no fórum <a href="http://forum.xda-developers.com/forumdisplay.php?f=668">xda-developers</a>, encontrei um app chamado &#8220;Universal Androot&#8221;. Basta instalá-lo no seu celular e voialá! Nada de baixa firmware, colocar o celular &#8220;recovery mode&#8221; ou qualquer coisa parecida&#8230; o processo todo é feito pelo próprio aparelho. O passo a passo de como instalá-lo e virar root você encontra no link <a href="http://www.addictivetips.com/mobile/how-to-root-android-devices-with-universal-androot-app/">http://www.addictivetips.com/mobile/how-to-root-android-devices-with-universal-androot-app/</a>. Depois de ter virado root é bom dar um boot no aparelho. Recomendo instalar o programa <a href="http://en.wikipedia.org/wiki/BusyBox">busybox</a> pelo market&#8230; você vai precisar dele no futuro! <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Depois quando eu tiver um pouco mais de tempo vou explicar como faz para instalar apps no cartão de memória.. tem vários procedimentos pela internet.. alguns requerem que seja instalada uma ROM específica, mas dá para fazer sem isso.</p>
<p>18/09/2010 (Atualizado) &#8211; A motorola (@motorola_br) voltou atrás na sua decisão e informou que lançará a atualização do Froyo (Android 2.2) no primeiro trimestre de 2011.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2010%2F08%2F27%2Fcomo-virar-root-no-milestone-com-android-2-1%2F&amp;title=Como%20virar%20root%20no%20milestone%20com%20android%202.1" id="wpa2a_16"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2010/08/27/como-virar-root-no-milestone-com-android-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agregador de blogs sobre o puppet</title>
		<link>http://gustavosoares.com/blog/2010/08/03/agregador-de-blogs-sobre-o-puppet/</link>
		<comments>http://gustavosoares.com/blog/2010/08/03/agregador-de-blogs-sobre-o-puppet/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 18:46:35 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=220</guid>
		<description><![CDATA[Fuçando a Internet (AKA Google ) dia desses achei um site que agrega os principais blogs sobre o puppet. Achei a idéia muito interessante e resolvi compartilhar o link aqui no blog. Segue o link: http://www.planetpuppet.org/]]></description>
			<content:encoded><![CDATA[<p>Fuçando a Internet (AKA Google <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) dia desses achei um site que agrega os principais blogs sobre o puppet. Achei a idéia muito interessante e resolvi compartilhar o link aqui no blog. Segue o link: <a href="http://www.planetpuppet.org/">http://www.planetpuppet.org/</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2010%2F08%2F03%2Fagregador-de-blogs-sobre-o-puppet%2F&amp;title=Agregador%20de%20blogs%20sobre%20o%20puppet" id="wpa2a_18"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2010/08/03/agregador-de-blogs-sobre-o-puppet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centralização de logs com o Scribe</title>
		<link>http://gustavosoares.com/blog/2010/07/14/centralizacao-de-logs-com-o-scribe/</link>
		<comments>http://gustavosoares.com/blog/2010/07/14/centralizacao-de-logs-com-o-scribe/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 22:54:14 +0000</pubDate>
		<dc:creator>Gustavo Soares</dc:creator>
				<category><![CDATA[infraestrutura]]></category>
		<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[centralizacao]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[scribe]]></category>
		<category><![CDATA[splunk]]></category>
		<category><![CDATA[spread]]></category>
		<category><![CDATA[syslog]]></category>

		<guid isPermaLink="false">http://gustavosoares.com/blog/?p=188</guid>
		<description><![CDATA[Scribe O scribe é uma aplicação criada e utilizada pelo Facebook para centralização de logs. Existem outras soluções que focam neste mesmo assunto como por exemplo o Splunk e diversas outras com o já conhecido Syslog, ou até o mesmo o Spread. Ainda sobre o syslog, existe um projeto bem legal, o php-syslog ou logZilla, que [...]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://gustavosoares.com/blog/wp-content/uploads/2010/07/scribe_topology.png"></a>Scribe</h1>
<p>O <a href="http://wiki.github.com/facebook/scribe/">scribe</a> é uma aplicação criada e utilizada pelo Facebook para centralização de logs. Existem outras soluções que focam neste mesmo assunto como por exemplo o <a href="http://www.splunk.com/">Splunk</a> e diversas outras com o já conhecido <a href="http://www.balabit.com/network-security/syslog-ng/">Syslog</a>, ou até o mesmo o <a href="http://www.spread.org/">Spread</a>. Ainda sobre o syslog, existe um projeto bem legal, o <a href="http://code.google.com/p/php-syslog-ng/">php-syslog</a> ou <a href="http://nms.gdd.net/index.php/LogZilla">logZilla</a>, que fornece uma interface web para apresentar as mensagens de log processadas pelo syslog. Essas mensagens são armazenada em um banco de dados MySql.</p>
<p>Já testei o splunk e achei ele excepcional.. com apenas uma ressalva: é pago! O php-syslog também é legal, e dependendo da sua necessidade ele pode atender bem. Para início de conversa acho que uma solução de centralização de logs em um ambiente web e para aplicações que já estão no ar e funcionando, deveria ser não intrusiva na aplicação. Independente da tecnologia que se vá utilizar. O que quero dizer com isso é que deveria-se tentar evitar qualquer alteração na aplicação para que ela enviasse os seus logs para o servidor central A ou B. Se a aplicação já está gerando log em arquivos no filesystem, é bom deixar assim e um outro &#8220;processo&#8221; por fora se encarrega de enviar o log para o lugar correto.</p>
<p>Bem, voltemos ao scribe&#8230; segue a descrição no repositório do próprio facebook.</p>
<blockquote><p>Scribe is a server for aggregating log data streamed in real time from a large number of servers. It is designed to be scalable, extensible without client-side modification, and robust to failure of the network or any specific machine.</p></blockquote>
<p>Sua arquitetura é do tipo client-server. Temos um servidor central, ou master, que é responsável por agregar (centralizar) as mensagens enviadas pelos clientes.</p>
<p style="text-align: center;"><a href="http://gustavosoares.com/blog/wp-content/uploads/2010/07/scribe_topology.png"><img class="aligncenter size-full wp-image-215" title="Funcionamento básico do Scribe" src="http://gustavosoares.com/blog/wp-content/uploads/2010/07/scribe_topology.png" alt="Funcionamento básico do Scribe" width="668" height="375" /></a></p>
<p>No arquivo de configuração, que fica no servidor master, definimos uma série de informações como por exemplo:</p>
<ul>
<li>o diretório onde as mensagens serão salvas</li>
<li>se queremos criar um diretório com o nome do hostname que a mensagem foi enviada</li>
<li>se vamos querer enviar a mensagem para um outro servidor master</li>
<li>se vamos querer rotacionar o log</li>
<li>frequência de rotacionamento</li>
<li>e etc..etc..etc..</li>
</ul>
<p>Para saber todos os parâmetros de configuração a melhor forma é consultar o link <a href="http://wiki.github.com/facebook/scribe/scribe-configuration">http://wiki.github.com/facebook/scribe/scribe-configuration</a></p>
<h1>Instalação</h1>
<p>A instalação do scribe é meio complicada&#8230; ele tem uma série de dependências. Na empresa que trabalho precisei gerar uma série de pacotes rpm para adequar algumas coisas particulares a nossa infra-estrutura. Se você tiver sorte, pode ser que já tenha algum pacote pronto dependendo do SO que você queira instalar o scribe. As principais dependências, na ordem que devem ser instaladas, são:</p>
<ul>
<li>python</li>
<li><a href="http://www.monkey.org/~provos/libevent/">libevent</a></li>
<li><a href="http://go2.wordpress.com/?id=725X1342&amp;site=tomdzk.wordpress.com&amp;url=http%3A%2F%2Fwww.boost.org%2F&amp;sref=http%3A%2F%2Ftomdzk.wordpress.com%2F2010%2F01%2F19%2Fhow-to-install-scribe-with-hdfs-support-on-ubuntu-karmic%2F">boost</a> v 1.36</li>
<li><a href="http://incubator.apache.org/thrift/download/">thrift</a></li>
<li>fb303 (incluído no Thrift no diretório contrib/fb303)</li>
</ul>
<p>Caso precise compilar alguns desses pacotes, é bom dar uma olhada nos argumentos que o ./configure recebe <img src='http://gustavosoares.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h1>Configuração do scribe master</h1>
<p>A configuração do scribe não é muito complicada (complicado é instalar e compilar as deps). A seguir coloco um exemplo de um arquivo de configuração.</p>
<blockquote>
<pre>##
## Sample Scribe configuration
##

# This file configures Scribe to listen for messages on port 1463 and write
# them to /tmp/scribetest

port=1463
max_msg_per_second=2000000
check_interval=3

# DEFAULT

category=default

#file
type=file
fs_type=std
file_path=/tmp/scribetest
use_hostname_sub_directory=yes
rotate_period=daily
rotate_hour=23
rotate_minute=59
write_meta=yes
base_filename=test_scribe
max_size=1000000000
add_newlines=0</pre>
</blockquote>
<p>Acho que o arquivo é autoexplicativo. Copie o conteúdo e salve o arquivo em algum lugar da sua máquina. Em seguida, inicie o daemon do scribe no master com o seguinte comando:</p>
<blockquote><p>scribed -c [CAMINHO PARA O ARQUIVO]</p></blockquote>
<h1>Configuração do scribe client</h1>
<p>Beleza, você já tem o scribe master escutando na porta 1463. Agora precisa enviar mensagens para ele. Aqui vem o pulo do gato. Para enviar mensagens para o master, você deve utilizar a api do scribe para isso. Se você procurar no google vai achar alguns exemplos. Uma solução é criar um script python utilizando uma classe python para tail e a própria api em python do scribe. Desta forma, você poderia utilizar o script como se fosse o comando tail do unix. A medida que novas linhas vão sendo escritas no arquivo elas vão sendo enviadas diretamente para o scribe server.</p>
<p>Ao enviar as mensagens para o scribe master, você precisará especificar no cliente qual categoria no master você estará enviando. O scribe permite você agrupar os logs em categorias. Desta forma logs de um servidor apache poderiam ser enviadas para uma categoria apache por exemplo. Desta forma, quando o master receber mensagens da sua categoria apache, ele vai salvá-las dentro da pasta apache. Isso permite uma melhor organização e estruturação da informação no seu servidor central.</p>
<p>A seguir listo um exemplo de utilização da api python, obtido do próprio repositório do scribe.</p>
<pre class="brush: python;">
#!/usr/bin/python

##  Copyright (c) 2007-2008 Facebook
##
##  Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
##  you may not use this file except in compliance with the License.
##  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
##  Unless required by applicable law or agreed to in writing, software
##  distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
##  See the License for the specific language governing permissions and
##  limitations under the License.
##
## See accompanying file LICENSE or visit the Scribe site at:
## http://developers.facebook.com/scribe/

'''scribe_cat: A simple script for sending messages to scribe.'''

import sys
from scribe import scribe
from thrift.transport import TTransport, TSocket
from thrift.protocol import TBinaryProtocol

if len(sys.argv) == 2:
  category = sys.argv[1]
  host = '127.0.0.1'
  port = 1463
elif len(sys.argv) == 4 and sys.argv[1] == '-h':
  category = sys.argv[3]
  host_port = sys.argv[2].split(':')
  host = host_port[0]
  if len(host_port) &gt; 1:
    port = int(host_port[1])
  else:
    port = 1463
else:
  sys.exit('usage (message is stdin): scribe_cat [-h host[:port]] category')

log_entry = scribe.LogEntry(category=category, message=sys.stdin.read())

socket = TSocket.TSocket(host=host, port=port)
transport = TTransport.TFramedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocol(trans=transport, strictRead=False, strictWrite=False)
client = scribe.Client(iprot=protocol, oprot=protocol)

transport.open()
result = client.Log(messages=[log_entry])
transport.close()

if result == scribe.ResultCode.OK:
  sys.exit()
elif result == scribe.ResultCode.TRY_LATER:
  print &gt;&gt; sys.stderr, &quot;TRY_LATER&quot;
  sys.exit(84)  # 'T'
else:
  sys.exit(&quot;Unknown error code.&quot;)
</pre>
<p>Uma vez o log centralizado, fica mais fácil para você tratar o dado bruto armazenado e extrair informações e métricas importantes para a regra de negócio da empresa. Para mais informações, consulte as referências que listo logo a seguir.</p>
<h1>Referências</h1>
<ol>
<li><a href="http://wiki.github.com/facebook/scribe">http://wiki.github.com/facebook/scribe</a></li>
<li><a href="http://wiki.github.com/facebook/scribe"></a><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><a href="http://groups.google.com/group/scribe-server/">http://groups.google.com/group/scribe-server/</a></span></li>
<li><a href="http://github.com/facebook/scribe">http://github.com/facebook/scribe</a></li>
</ol>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fgustavosoares.com%2Fblog%2F2010%2F07%2F14%2Fcentralizacao-de-logs-com-o-scribe%2F&amp;title=Centraliza%C3%A7%C3%A3o%20de%20logs%20com%20o%20Scribe" id="wpa2a_20"><img src="http://gustavosoares.com/blog/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://gustavosoares.com/blog/2010/07/14/centralizacao-de-logs-com-o-scribe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
