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

<channel>
	<title>Macoli&#039;s Corner</title>
	<atom:link href="http://macoli.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://macoli.wordpress.com</link>
	<description>Minha esquina, minhas regras!</description>
	<lastBuildDate>Sat, 14 Jan 2012 19:45:50 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='macoli.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/c9e5f48b4f126c8708d5c49637b7cc8b?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Macoli&#039;s Corner</title>
		<link>http://macoli.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://macoli.wordpress.com/osd.xml" title="Macoli&#039;s Corner" />
	<atom:link rel='hub' href='http://macoli.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Steve Jobs</title>
		<link>http://macoli.wordpress.com/2011/10/05/steve-jobs/</link>
		<comments>http://macoli.wordpress.com/2011/10/05/steve-jobs/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 01:44:19 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=84</guid>
		<description><![CDATA[Não estou aqui pra puxar saco, nem pra dar uma de macfag. Assim como sou capaz de aplaudir o triunfo de um time rival ou um show bem feito de uma banda que eu não gosto nem desgosto, acho justo falar de Steve Jobs. Não acompanhei sua carreira, nem sei muita coisa sobre ele e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=84&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Não estou aqui pra puxar saco, nem pra dar uma de macfag.</p>
<p>Assim como sou capaz de aplaudir o triunfo de um time rival ou um show bem feito de uma banda que eu não gosto nem desgosto, acho justo falar de Steve Jobs.</p>
<p>Não acompanhei sua carreira, nem sei muita coisa sobre ele e seus meios, mas tenho certeza de uma coisa.</p>
<p>Senhor Jobs soube valorizar o que há de mais importante em seus produtos: o consumidor final. Isso é um trunfo inestimável.</p>
<p>Hoje em dia não há nenhum produto da apple que não seja de impecável qualidade, seja em acabamento ou experiência do usuário. Sempre disse isso aos mais chegados: não existe, simplesmente não existe concorrência para a Apple no quesito qualidade. Não importa se são caros ou se alguém diz que seus produtos realizam lavagem cerebral em seus usuários. São ótimos produtos e ouso dizer que valem seu preço. Sou usuário e fã do android e digo que o mesmo está milênios atrás do iOS em experiência do usuário.</p>
<p>Ainda existem muitos paradigmas de mercado a serem quebrados para que existam mais produtos com qualidade tão boa quanto as dos produtos da empresa de Jobs. Não conheço outra empresa que preze tanto pela qualidade quanto a Apple.</p>
<p>Ele se foi. Pra onde, vai da crença de cada um. Pra mim, o que importa é seu legado. Jobs deixou sua marca na vida de milhões de pessoas, seus produtos conquistaram o mundo por mérito. Se ele pudesse ler minhas palavras, eu deixaria a minha mensagem:</p>
<blockquote><p>Steve Jobs,</p>
<p>O pior já passou. Ponha um sorriso no rosto para cada sorriso de satisfação que você causou com seus gadgets, filmes ou outras obras e terá sorrisos para toda a eternidade. Você fez diferença neste mundo.</p></blockquote>
<p>Esta é minha humilde homenagem.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/84/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=84&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2011/10/05/steve-jobs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>
	</item>
		<item>
		<title>Noobs, Armazenamento e Deleção Segura de Arquivos</title>
		<link>http://macoli.wordpress.com/2011/01/02/noobs-e-delecao-segura-de-arquivos/</link>
		<comments>http://macoli.wordpress.com/2011/01/02/noobs-e-delecao-segura-de-arquivos/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 01:04:43 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Armazenamento]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=72</guid>
		<description><![CDATA[Hoje estava zapeando na tv com Mô e passamos por uma chamada do Olhar Digital para uma matéria sobre recuperação de dados. Aí veio a pergunta de Mô: Ué, mas quando eu mando apagar alguma coisa do computador, ele não apaga? Sim, e não! Expliquei pra ela o por quê e achei que essa deveria [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=72&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoje estava zapeando na tv com Mô e passamos por uma chamada do <a title="Olhar Digital" href="http://olhardigital.uol.com.br/" target="_blank">Olhar Digital</a> para uma matéria sobre recuperação de dados.</p>
<p>Aí veio a pergunta de Mô:</p>
<blockquote><p>Ué, mas quando eu mando apagar alguma coisa do computador, ele não apaga?</p></blockquote>
<p>Sim, e não!</p>
<p>Expliquei pra ela o por quê e achei que essa deveria ser uma dúvida frequente pra usuários e resolvi escrever esse post.</p>
<p>Vou tentar explicar a <em><strong>grosso modo</strong></em> como funciona a deleção de arquivos.</p>
<p><span id="more-72"></span></p>
<h1>A Resposta</h1>
<p>Sim, logicamente e não, fisicamente.</p>
<h1>A Memória</h1>
<p>Primeiro precisamos entender um pouco sobre os tipos de memória que um computador usa.</p>
<p>São dois: a principal (RAM) e o Disco Rígido (HD):</p>
<h2>A Memória Principal</h2>
<div class="wp-caption alignright" style="width: 190px"><img title="Um Pente de Memória" src="http://img1.mlstatic.com/jm/img?s=MLB&amp;f=139605072_3250.jpg&amp;v=O" alt="Um Pente de Memória" width="180" height="180" /><p class="wp-caption-text">Um Pente de Memória</p></div>
<p>A memória principal é chamada de <em>Random Access Memory</em>, ou memória de acesso aleatório e é composta completamente de componentes eletrônicos, por isso é extremamente rápida, porém tem uma capacidade reduzida. É um tipo de memória volátil, ou seja, quando o computador desliga, ela perde todos os dados guardados nela. Sem ela, o computador não funciona.</p>
<h2>O HD</h2>
<div class="wp-caption alignleft" style="width: 260px"><img title="O Disco Rígido" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hard_drive-en.svg/250px-Hard_drive-en.svg.png" alt="O Disco Rígido" width="250" height="179" /><p class="wp-caption-text">Os discos magnéticos são extremamente rígidos, por isso o nome do drive.</p></div>
<p>O HD é composto basicamente de discos magnéticos que giram e um braço mecânico com uma cabeça de leitura que se desloca sobre o disco magnético.</p>
<p>Por ter esse componente mecânico o HD é bastante lento, comparado à memória principal (cerca de um milhão de vezes mais lento). Apesar da velocidade relativamente baixa, HDs permitem o armazenamento muito maior do que a memória principal e por isso são o principal meio de armazenamento massivo hoje em dia. O Disco Rígido é uma memória não-volátil, ou seja, quando o computador é desligado, os dados persistem.</p>
<div class="wp-caption alignright" style="width: 226px"><img title="Divisão do Disco" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Disk-structure2.svg/600px-Disk-structure2.svg.png" alt="Divisão do disco" width="216" height="216" /><p class="wp-caption-text">Trilhas (A) e Setores (C)</p></div>
<p>Os discos magnéticos são divididos em Trilhas, que por sua vez são divididas em setores, de tamanho configurável. Dentro e através dos setores ficam os dados referentes aos nossos vídeos, fotos, textos, etc.</p>
<p>Estes dados são gravados em bytes e para ler esses dados, o Sistema Operacional precisa informar a trilha, o setor, o byte de início e o quantos bytes serão lidos, o que se traduz, por exemplo, nisso:</p>
<p>A03FBB410012F144, que chamamos de endereço físico e é muito mais feio que C:\Meus documentos\xxx\videoSecreto.avi, que chamamos de endereço lógico.</p>
<p>O Sistema operacional conversa com o disco através de uma interface que sabe traduzir o endereço lógico para o endereço físico e além disso gerencia a escrita e a leitura através de um sistema de arquivos, que define um formato para os dados no Disco Rígido (daí o termo <em>formatar</em>). Este formato é puramente lógico, ou seja, não muda nada na estrutura física do disco. A grosso modo, é apenas a forma como o Sistema Operacional &#8220;enxerga&#8221; os dados no disco.</p>
<p>Além de outras funções, o sistema de arquivos é responsável por dizer onde se pode escrever no disco.</p>
<h1>Apagando arquivos</h1>
<div id="attachment_75" class="wp-caption alignleft" style="width: 310px"><a href="http://macoli.files.wordpress.com/2011/01/deletarvideosecreto.png"><img class="size-medium wp-image-75" title="Deletar Video Secreto" src="http://macoli.files.wordpress.com/2011/01/deletarvideosecreto.png?w=300&#038;h=149" alt="Deletar Video Secreto" width="300" height="149" /></a><p class="wp-caption-text">Adeus!</p></div>
<p>Quando apagamos um arquivo através de um comando do Sistema Operacional, o que ocorre na verdade é a deleção lógica do arquivo, ou seja, todas as referências feitas para este arquivo pelo Sistema Operacional são apagadas e o espaço ocupado por este arquivo é marcado como livre pelo sistema de arquivos.</p>
<p>Aí é onde reside o problema: fisicamente os dados do arquivo ainda estarão no HD até que sejam reescritos.</p>
<p>Se um programa qualquer acessa o disco diretamente (sem passar pelo sistema de arquivos) e usa o endereço físico do arquivo, vai conseguir ler o arquivo que você apagou (se nada foi escrito em seu lugar, obviamente).</p>
<h2>Deleção segura</h2>
<p>É seguro concluir, então que uma maneira segura de deletar arquivos é além de apagá-los, escrever qualquer coisa no lugar deles. Assim, se algum programa tentar procurar algo no endereço físico de um arquivo que você deletou, encontrará uma sequência aleatória de bytes. Esta técnica é chamada de <em>data shredding</em>.</p>
<p>Existem muitas ferramentas capazes de fazer isso, você pode ver algumas aqui: <a href="http://en.softonic.com/windows/safe-delete">http://en.softonic.com/windows/safe-delete</a>.</p>
<p>Apesar de bem eficiente, os dados apagados com essa técnica podem ser recuperados, usando métodos de laboratório. A não ser que esse vídeo secreto seja algo digno de wikileaks, você não precisa se preocupar com isso <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Outra maneira de evitar transtornos com ferramentas de recuperação de dados é usar criptografia no disco, pois mesmo recuperando os dados, eles estarão criptografados e se você tomou cuidado com sua chave privada, ninguém vai conseguir olhar seus segredos.</p>
<div class="wp-caption alignright" style="width: 330px"><img class=" " title="HD Destruído" src="http://pccopilots.com/pccopilots/wp-content/images/destroyed-hd.jpg" alt="HD Destruído" width="320" height="243" /><p class="wp-caption-text">Esse não queria mesmo que assistissem o videoSecreto.avi :p</p></div>
<p>Obviamente, a maneira mais segura de apagar algum dado é destruí-lo. Se você realmente quer que ninguém veja seus dados, destrua-os. Destrua mesmo!</p>
<p>Pegue seu HD, dê 3 tiros, jogue ácido sulfúrico, bote no forno pré-aqucido, asse por uma hora, fatie-o em pedaços e depois jogue no fundo do oceano <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=72&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2011/01/02/noobs-e-delecao-segura-de-arquivos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>

		<media:content url="http://img1.mlstatic.com/jm/img?s=MLB&#38;f=139605072_3250.jpg&#38;v=O" medium="image">
			<media:title type="html">Um Pente de Memória</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hard_drive-en.svg/250px-Hard_drive-en.svg.png" medium="image">
			<media:title type="html">O Disco Rígido</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Disk-structure2.svg/600px-Disk-structure2.svg.png" medium="image">
			<media:title type="html">Divisão do Disco</media:title>
		</media:content>

		<media:content url="http://macoli.files.wordpress.com/2011/01/deletarvideosecreto.png?w=300" medium="image">
			<media:title type="html">Deletar Video Secreto</media:title>
		</media:content>

		<media:content url="http://pccopilots.com/pccopilots/wp-content/images/destroyed-hd.jpg" medium="image">
			<media:title type="html">HD Destruído</media:title>
		</media:content>
	</item>
		<item>
		<title>O Profissional de BI</title>
		<link>http://macoli.wordpress.com/2010/12/28/65/</link>
		<comments>http://macoli.wordpress.com/2010/12/28/65/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 06:24:25 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[BI]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Business Intelligence]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=65</guid>
		<description><![CDATA[Estamos na Era da Informação. Isto quer dizer que ela é o recurso em foco hoje em dia, e convenhamos: informação é poder. A grosso modo, informação é o resultado de processamento, manipulação e organização de dados. No mundo corporativo, dados são coletados por Sistemas de Informação, que ajudam na execução geral e organização do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=65&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estamos na Era da Informação. Isto quer dizer que ela é o recurso em foco hoje em dia, e convenhamos: informação é poder.</p>
<p>A grosso modo, informação é o resultado de processamento, manipulação e organização de dados.</p>
<p>No mundo corporativo, dados são coletados por Sistemas de Informação, que ajudam na execução geral e organização do negócio. A extração, transformação e análise desses dados gera informações que oferecem suporte a gestão de negócios, em especial a tomada de decisões. A empresa que tem acesso mais rápido à informação de qualidade toma decisões mais rapidamente, o que geralmente cria vantagem sobre suas concorrentes.</p>
<p>O processo de coleta, transformação, organização, análise e monitoramento de dados para a geração de informação útil para a gestão de negócios é chamada de Business Intelligence (BI).</p>
<p>Para a realização do BI, faz-se necessário uma conexão entre as áreas de Gestão Empresarial (Conhecimento do domínio do negócio) e de TI (Conhecimento técnico para criação da informação) que, em geral, são departamentos muito distintos onde o analista de negócio não possui conhecimentos técnicos para com a Tecnologia de Informação e o Profissional de TI não possui conhecimento do domínio de negócios.</p>
<p>Surge então a necessidade de um novo tipo de perfil de trabalho: o profissional de BI.</p>
<p><span id="more-65"></span></p>
<p>Já fazia tempo que eu queria voltar a escrever aqui. Mas queria escrever algo bom e boas ideias não vêm tão facilmente. Durante um papo com o <a href="http://twitter.com/#!/carlosfelippe" target="_blank">@carlosfelippe</a>, ele me fez a seguinte indagação:</p>
<blockquote><p>Por que um profissional de BI é tão bem pago hoje em dia? Ele faz algo que já não era feita antes via queries? Ou é por estar apoiando a alta gerência e dando gráficos bonitinhos que ele passa a ser mais valorizado?</p></blockquote>
<p>BI hoje em dia é muito valorizado. Mas por quê? A forma de apresentar dados em relatórios bonitos cheios de gráficos coloridos, do jeito que os homens de terno gostam é tão diferente de entregar uma tabela?</p>
<p>É.</p>
<p>Gráficos são mais interessantes e intuitivos por que uma das coisas que menos se presta atenção são os números. Não me importa se eu vendi 55.364 produtos no mês 3. Me importa o quão maior é a minha barrinha do mês 4 comparada à do mês 3.</p>
<p>Sendo menos grosseiro: o que importa para os analistas de negócio são indicadores. Eles querem ver índices de crescimento, onde estão indo bem, onde estão indo mal, onde não progridem e nada melhor que uma representação gráfica de valores para comparação visual.</p>
<p>Veja você mesmo: Onde é mais fácil perceber que empresa teve o maior crescimento no espaço de 12 meses?</p>
<p>Nesta tabela:</p>
<table class="ta1" border="0" cellspacing="0" cellpadding="0">
<col width="99"></col>
<col width="130"></col>
<col width="108"></col>
<tbody>
<tr class="ro1">
<td class="ce1" style="text-align:left;width:2.267cm;">Vendas/Mês</td>
<td class="ce1" style="text-align:left;width:2.974cm;">Nossa Empresa</td>
<td class="ce1" style="text-align:left;width:2.475cm;">Empresa rival</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">1</td>
<td class="ce2" style="text-align:right;width:2.974cm;">55461</td>
<td class="ce2" style="text-align:right;width:2.475cm;">42813</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">2</td>
<td class="ce2" style="text-align:right;width:2.974cm;">55800</td>
<td class="ce2" style="text-align:right;width:2.475cm;">36544</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">3</td>
<td class="ce2" style="text-align:right;width:2.974cm;">46630</td>
<td class="ce2" style="text-align:right;width:2.475cm;">25763</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">4</td>
<td class="ce2" style="text-align:right;width:2.974cm;">30666</td>
<td class="ce2" style="text-align:right;width:2.475cm;">18003</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">5</td>
<td class="ce2" style="text-align:right;width:2.974cm;">34406</td>
<td class="ce2" style="text-align:right;width:2.475cm;">18396</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">6</td>
<td class="ce2" style="text-align:right;width:2.974cm;">38831</td>
<td class="ce2" style="text-align:right;width:2.475cm;">18888</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">7</td>
<td class="ce2" style="text-align:right;width:2.974cm;">41910</td>
<td class="ce2" style="text-align:right;width:2.475cm;">28870</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">8</td>
<td class="ce3" style="text-align:right;width:2.974cm;">44820</td>
<td class="ce2" style="text-align:right;width:2.475cm;">33480</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">9</td>
<td class="ce2" style="text-align:right;width:2.974cm;">48457</td>
<td class="ce2" style="text-align:right;width:2.475cm;">47059</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">10</td>
<td class="ce2" style="text-align:right;width:2.974cm;">51920</td>
<td class="ce2" style="text-align:right;width:2.475cm;">55875</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">11</td>
<td class="ce2" style="text-align:right;width:2.974cm;">55900</td>
<td class="ce2" style="text-align:right;width:2.475cm;">61092</td>
</tr>
<tr class="ro1">
<td class="ce2" style="text-align:right;width:2.267cm;">12</td>
<td class="ce2" style="text-align:right;width:2.974cm;">62359</td>
<td class="ce2" style="text-align:right;width:2.475cm;">67133</td>
</tr>
</tbody>
</table>
<p>Ou neste Gráfico?</p>
<div class="wp-caption alignnone" style="width: 410px"><img title="Gráfico" src="http://chart.apis.google.com/chart?chxr=0,0,12|1,0,67&amp;chxs=0,676767,11.5,0,lt,676767&amp;chxt=x,y&amp;chs=400x220&amp;cht=lxy&amp;chco=3072F3,FF9900&amp;chds=0,12,0,65359,0,12,0,67133.792&amp;chd=t:1,2,3,4,5,6,7,8,9,10,11,12|55461,55800,46630,30666,34406,38831,41910,44820,48457,51920,55900,62359|1,2,3,4,5,6,7,8,9,10,11,12|42813,36544,25763,18003,18396,18888,28870,33480,47059,55875,61092,67133&amp;chdl=Nossa+empresa|Empresa+rival&amp;chdlp=b&amp;chls=2|2&amp;chma=5,5,5,25|0,5&amp;chtt=Vendas+por+M%C3%AAs&amp;chts=676767,15.5" alt="Gráfico" width="400" height="220" /><p class="wp-caption-text">Viva o Google Charts API!</p></div>
<p>BI não serve apenas para responder perguntas triviais como a apresentada no gráfico, mas técnicas avançadas permitem olhar os dados de várias &#8220;ângulos&#8221; diferentes e responder questões mais complicadas, como por exemplo, por quê a Nossa empresa conseguiu se manter na frente crise entre os meses 2 e 6, mas o crescimento foi inferior ao da Empresa rival? Por quê o nossa taxa de crescimento continuou a mesma entre os meses 6 e 11 e a da Empresa rival cresceu muito mais?</p>
<p>Tudo bem, mas por quê o cara que faz BI ganha mais?</p>
<p>Um profissional de BI é a ligação entre a gerência de negócio e o departamento de TI. Precisa ser alguém que conheça muito bem o domínio da empresa e seja técnico o suficiente para gerar consultas e relatórios, geralmente complexos.</p>
<p>Pense no &#8220;cara de BI&#8221; como o geek de terno e gravata. E sim, ele vale mais.</p>
<p>Afinal, os gerentes contrataram a equipe de TI para facilitar o trabalho deles. Se o pessoal de TI não entende bem do negócio da empresa, ocorre o oposto do planejado: o trabalho é dificultado. Pra suprir esse &#8220;gap&#8221; de conhecimento entre TI e Gerência, surgem os homens do BI, que muitas vezes conhecem mais do domínio da empresa do que a própria gerência, justamente por lidar diretamente com os dados da mesma.</p>
<p>Em 2010/1, junto com os amigos <a href="http://twitter.com/#!/flavio_frow" target="_blank">@flavio_frow</a>, <a href="http://twitter.com/#!/martins_di" target="_blank">@martins_d</a>i e o <a href="http://twitter.com/#!/erickzotte" target="_blank">@erickzotte</a>, fiz um texto que tem bastante conteúdo técnico e teórico sobre BI. Ficamos orgulhosos desse trabalho e vale a pena ler. Pra quem se interessou sobre essa área o artigo é uma bela introdução. Você pode baixá-lo aqui: <a href="http://macoli.files.wordpress.com/2010/12/bi.pdf">Business Intelligence</a>.</p>
<p>Tenho que agradecer ao <a href="http://twitter.com/#!/carlosfelippe" target="_blank">@carlosfelippe</a> pelo tema do post. Muito Obrigado, CFC! :p</p>
<p>Aguardo feedback! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=65&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2010/12/28/65/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>

		<media:content url="http://chart.apis.google.com/chart?chxr=0,0,12&#124;1,0,67&#38;chxs=0,676767,11.5,0,lt,676767&#38;chxt=x,y&#38;chs=400x220&#38;cht=lxy&#38;chco=3072F3,FF9900&#38;chds=0,12,0,65359,0,12,0,67133.792&#38;chd=t:1,2,3,4,5,6,7,8,9,10,11,12&#124;55461,55800,46630,30666,34406,38831,41910,44820,48457,51920,55900,62359&#124;1,2,3,4,5,6,7,8,9,10,11,12&#124;42813,36544,25763,18003,18396,18888,28870,33480,47059,55875,61092,67133&#38;chdl=Nossa+empresa&#124;Empresa+rival&#38;chdlp=b&#38;chls=2&#124;2&#38;chma=5,5,5,25&#124;0,5&#38;chtt=Vendas+por+M%C3%AAs&#38;chts=676767,15.5" medium="image">
			<media:title type="html">Gráfico</media:title>
		</media:content>
	</item>
		<item>
		<title>Novo Tema</title>
		<link>http://macoli.wordpress.com/2010/06/14/novo-tema/</link>
		<comments>http://macoli.wordpress.com/2010/06/14/novo-tema/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 17:18:43 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=43</guid>
		<description><![CDATA[Ativei um novo tema, pois vi que muitos blogs utilizam o antigo. Gostei desse, por ser escuro, mas o texto continua fácil de ler. Feedback please :p!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=43&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ativei um novo tema, pois vi que muitos blogs utilizam o antigo. Gostei desse, por ser escuro, mas o texto continua fácil de ler. Feedback please :p!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=43&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2010/06/14/novo-tema/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>
	</item>
		<item>
		<title>Umas coisas que aprendi no trabalho</title>
		<link>http://macoli.wordpress.com/2010/05/18/umas-coisas-que-aprendi-no-trabalho/</link>
		<comments>http://macoli.wordpress.com/2010/05/18/umas-coisas-que-aprendi-no-trabalho/#comments</comments>
		<pubDate>Tue, 18 May 2010 23:44:22 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Eu]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=30</guid>
		<description><![CDATA[Estou há um pouco mais de um ano e meio trabalhando (estagiando) no mesmo local e além do conhecimento técnico, aprendi muitas coisas importantes que eu gostaria de compartilhar. Muitas delas não se aplicam apenas ao ambiente de trabalho, mas acho que pra qualquer atividade que envolva esforço mental, individual ou coletivo essas coisas são [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=30&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estou há um pouco mais de um ano e meio trabalhando (estagiando) no mesmo local e além do conhecimento técnico, aprendi <strong>muitas</strong> coisas importantes que eu gostaria de compartilhar. Muitas delas não se aplicam apenas ao ambiente de trabalho, mas acho que pra qualquer atividade que envolva esforço mental, individual ou coletivo essas coisas são úteis. Lá vai:</p>
<p><strong><strong>Conheça seus limites</strong></strong></p>
<p>Quando você não souber o que está fazendo, não faça. Principalmente se isso envolve sérios riscos, como por exemplo mexer em ambientes de produção ativos. Pare, analise a situação, planeje e pergunte. Pergunte pra alguém mais experiente se o modo que você planejou fazer aquilo é razoável. Peça dicas sobre como realizar os passos, sugestões no planejamento, que cueca usar, whatever. Se puder fazê-lo supervisionado, nem pense duas vezes, faça.</p>
<p>A primeira vez que eu fui mexer em um ambiente de produção, foi justamente para configurá-lo e o expor ao mundo. Se eu fizesse alguma besteira, nenhum sistema iria cair, nem o mundo iria acabar, mas os primeiros momentos não foram bons.</p>
<p>A tarefa era relativamente simples, mas a ideia de que aquilo iria pro cliente e que se falhasse a responsabilidade era minha me deixou estressado. Fiquei umas duas ou três horas fazendo as tarefas iniciais. Um probleminha ali outro aqui, nada demais, porém eu já sentia um pouco de torcicolo e sentia umas dores no ombro. Parei.</p>
<p><span id="more-30"></span></p>
<p>O prazo não era longo, nem curto. Eu podia parar por ali pra continuar no dia seguinte. Foi a melhor coisa que eu fiz. Tomei uma coca e fui pra casa ouvindo música. Tive tempo de, no caminho, perceber que meu nervosismo era bobo. Eu sabia o que fazer e como fazer. Era a primeira vez que eu fazia aquilo. Foi um choque inicial, mas quem liga? Se alguém me incumbiu com aquela tarefa, era por que confiava em mim e em minhas habilidades para fazer aquele trabalho importante.</p>
<p>Na manhã seguinte, como esta era minha única tarefa, nem fui pro local de trabalho. Loguei via ssh nas máquinas e terminei relativamente rápido a tarefa.</p>
<p><strong><strong>Cansaço mental</strong></strong></p>
<p>Tem horas que simplesmente não dá pra continuar. Seja estudando ou trabalhando, quando você enfrenta um problema daqueles cabeludos, que envolve toda a filosofia da ferramenta que você usa ou que simplesmente requerem muita queimação de neurônios, você começa a ficar viciado em algumas tentativas de solução. Pelo menos eu fico. Tento uma, outra. Volto pra uma, tento a outra novamente e este processo cansa. Cansa muito.</p>
<p>Já houveram vezes em que eu me sentia cansado como se tivesse feito alguma atividade física pesada, apesar de ter ficado o dia inteiro na frente do computador e assistindo aula. O cansaço mental é muito pior, pois não causa aquela sensação boa que a prática de um esporte trás. Ao invés disso, deixa angústia, baixa a auto-estima e me deixa triste.</p>
<p>O que fazer então, quando você está há três horas encarando aquela stacktrace supimpa e suas idéias acabaram? É hora de dar uma descarga em todo o lixo que está na cabeça. Eu leio feeds de humor, vou tomar um café, comer alguma coisa&#8230; Chamo o pessoal pra ir junto e bater um papo. Esqueça aquele problema. Fale do que você fez no fim de semana passado, daquele jogo novo que saiu, etc.</p>
<p>Sabe aquele insights que o House tem quando está infernizando a Cuddy e resolvem o caso num piscar de olhos? Isso realmente acontece às vezes. E quando acontece, não há sensação melhor de realização. Veja bem: não disse que isso vai resolver seu problema, mas esfriar a cabeça é o primeiro passo para resolvê-lo, com certeza. Quando o negócio está feio mesmo, eu apelo pra uma noite de sono. Faz milagres. Essa é mais infalível do que a &#8220;descarga mental&#8221;. Já cansei de ir pra casa estressado com algum problema, dormir, sentar no dia seguinte e pimba! Achei a solução! De primeira mesmo e sem usar game shark <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> !</p>
<p><strong><strong>Nada é simples</strong></strong></p>
<div id="_mcePaste">Essa aqui é decorrente da lei de Murphy. Seu chefe pede pra você mudar o nome de uma variável. Simples, não? NÃO! Vai dar merda, capitão. Nem que seja um bug no seu ambiente de desenvolvimento, mas algum galho vai dar. É incrível como no ramo da computação sempre existe uma mágica pra atrapalhar. Principalmente com hardware. Montar algum pc sempre dá uma titica. Encaixou mal a memória, sujou uns conectores, cabos soltos&#8230;</div>
<div id="_mcePaste">Programando não é diferente: já cansei de ter que aturar tpm do Eclipse pra resolver alguma coisa simples.</div>
<div id="_mcePaste">Se algum superior lhe pedir pra implementar ou fazer alguma manutenção simples, esteja preparado. Nunca fale &#8220;isso é facil, faço em 5 minutos!&#8221;, &#8220;isso é só mudar duas linhas naquele xml&#8230;&#8221; a não ser que seja acompanhado de &#8220;&#8230;se não der nenhum galho&#8221;, ou &#8220;se não quebrar alguma coisa&#8230;&#8221;.</div>
<p><strong><strong>Ambiente descontraído</strong></strong></p>
<p>Não há nada melhor que trabalhar com os amigos. Fazer aquela piada sobre a dondoca horrorosa que alguém pegou no fim de semana, zoar o notebook lerdo do amigo do lado, registrar no quadro uma frase comprometedora que escapou&#8230; Enfim, rir e fazer alguém rir integra as pessoas e torna o ambiente mais agradável.</p>
<p><a title="instantsfun.es" href="http://instantsfun.es">intantsfun.es</a> aberto na aba ao lado é sempre uma promessa de boas risadas <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><strong><strong>Trabalhar em par</strong></strong></p>
<p>Onde eu trabalho usamos <a title="eXtreme Programming" href="http://www.extremeprogramming.org/" target="_blank">eXtreme Programming</a>. Um dos valores do XP é a programação em par. Por experiência própria, eu digo que não existe modo mais produtivo de programar. A quantidade de erros bobos diminui absurdamente e a troca de experiências é fantástica. Não existe modo melhor de aprender e ensinar a programar como programando em par.</p>
<p><strong><strong>Acompanhar Listas de desenvolvimento/usuários/commits</strong></strong></p>
<p>Eu tinha muito medo de olhar o código de ferramentas que eu uso. Medo bobo, de achar que não estou num nível bom para entender como os frameworks funcionam. Foi a coisa mais ingênua da minha vida. Certo dia, eu estava com dificuldades na integração do <a href="http://www.seamframework.org" target="_blank">Seam</a> com o <a href="http://www.jboss.org/drools" target="_blank">Drools</a> 5 e queria saber a quantas andava a integração no desenvolvimento. Assinei a lista de desenvolvimento do <a href="http://www.seamframework.org" target="_blank">Seam</a> e perguntei se havia algum pra integração ficar pronta, dando alguns exemplos de funcionalidades que me seriam úteis. Calhou de que algumas funcionalidades que eu falei nem terem sido pensadas por eles e as idéias acabaram sendo adotadas, dizendo que as implementariam.</p>
<p>Assinei então a lista de commits do <a href="http://www.seamframework.org" target="_blank">Seam</a>, pra acompanhar o desenvolvimento das features que sugeri. E comecei a ler os códigos que recebia por email dos commits e pra minha surpresa, eram claros como água de nascente. Comecei a ter mais &#8220;coragem&#8221; pra olhar os códigos e acabei tendo um aprendizado enorme sobre a ferramenta através do seu código.</p>
<p>Acho esse medo até natural para alguém que começou a programar agora, mas quanto mais cedo esse medo for superado, melhor será para seu aprendizado.</p>
<p>Listas de desenvolvimento/usuários também são uma ótima maneira de se informar sobre bugs, features novas e mudanças quaisquer no projeto que você participa/usa.</p>
<p>É isso. Existem outros tópicos, certamente, mas estes ficam pra um próximo post <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/30/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/30/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/30/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=30&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2010/05/18/umas-coisas-que-aprendi-no-trabalho/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>
	</item>
		<item>
		<title>Noobs e StackTraces</title>
		<link>http://macoli.wordpress.com/2010/02/20/noobs-e-stacktraces/</link>
		<comments>http://macoli.wordpress.com/2010/02/20/noobs-e-stacktraces/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 05:09:46 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[stacktraces]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=14</guid>
		<description><![CDATA[Vejo por aí muitos casos de pessoas em listas de discussão e fóruns sobre desenvolvimento Java postarem uns problemas no mínimo absurdos. Não absurdos de difíceis, mas absurdos de serem postados. São problemas do tipo IndexOutOfBounds, NullPointers bobos e até FileNotFoundException. Tudo bem que alguém que está começando pode ficar assustado quando vê seu terminal [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=14&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vejo por aí muitos casos de pessoas em listas de discussão e fóruns sobre desenvolvimento Java postarem uns problemas no mínimo absurdos. Não absurdos de difíceis, mas absurdos de serem postados. São problemas do tipo IndexOutOfBounds, NullPointers bobos e até FileNotFoundException. Tudo bem que alguém que está começando pode ficar assustado quando vê seu terminal cuspindo linhas e linhas repetitivas, cheios de &#8216;at&#8217; e &#8217;caused by&#8217;. Algumas dão até náusea, mas vamos lá, Stack Traces existem pra ajudar e não para trazer uma mensagem de satã dizendo que seu computador será destruído.</p>
<p>O problema é que muita gente nem se dá ao trabalho de ler o que está escrito alí. Vê aquele monte de caracteres intimidadores no terminal e acha que é algo sério demais para sua cabeça processar. Se você se encontrar numa situação dessas, não se desespere e corra pro fórum/lista mais próximo. Respire fundo. Pense que poderia ser pior: Seu programa sai do nada, sem dizer nada, do mesmo jeito de quando sua namorada fica calada, com aquela cara de bolada e você pergunta &#8220;O que foi, amor&#8221; e recebe um convincente &#8220;Nada!&#8221;. Não ia dar nem pra correr pra algum lugar. Imagine um post numa lista:</p>
<blockquote><p>Subject: U R G E N T E!!!! AJUDA POR FAVOR!!!<br />
Gente, tava usando meu programa maneiro aqui aí quando eu cliquei no botão XPTO ele saiu! Alguem sabe o que é?</p></blockquote>
<p>Meio dificil de responder, convenhamos. Mas o Java não te deixa na mão. Seu programa falha, mas a stack trace está lá, pra te apontar exatamente onde ocorreu o erro fatal. Isso facilita a vida do desenvolvedor e do noob, que vai correr atrás de alguém pra ajudar.</p>
<p>Agora vamos lá! Noob que é noob não quer mais ser noob. Faca nos dentes e vamos tentar aprender a ler Stack Traces.</p>
<p><span id="more-14"></span></p>
<p>Considere a seguinte classe:</p>
<p><pre class="brush: java;">

package br.stacktraces.exemplo;

public class Exemplo {
 public static void main(String[] args) {
   Exemplo ex = new Exemplo();

   ex.foo();
 }

 public void foo() {
   bar();
 }

 public void bar() {
   throw new RuntimeException(&quot;OMG! StackTraces!&quot;);
 }
}

</pre></p>
<p>Se rodarmos o main, teremos o seguinte output:</p>
<p><pre class="brush: java;">

Exception in thread &quot;main&quot; java.lang.RuntimeException: OMG! StackTraces!
 at br.stacktraces.exemplo.Exemplo.bar(Exemplo.java:15)
 at br.stacktraces.exemplo.Exemplo.foo(Exemplo.java:11)
 at br.stacktraces.exemplo.Exemplo.main(Exemplo.java:7)

</pre></p>
<p>Agora vamos lá, como nosso velho amigo Jack: por partes.</p>
<p><pre class="brush: java; light: true;">

Exception in thread &quot;main&quot; java.lang.RuntimeException: OMG! StackTraces!

</pre></p>
<p>A sintaxe é: <em>Exception in thread &#8220;<strong>&lt;Nome da thread&gt;</strong>&#8221; <strong>&lt;Nome da</strong> <strong>exceção&gt;</strong>: <strong>&lt;Mensagem da exceção&gt;</strong></em></p>
<ul>
<li> Nome da thread: se você usa multithreading no seu programa, isso te ajuda a descobrir em qual thread ocorreu a exceção.</li>
<li>Tipo da Exceção: a classe que representa a exceção. Geralmente é um nome curto que especifica o tipo do problema, como NumberFormatException e FileNotFoundException.</li>
<li>Mensagem da Exceção: <strong>geralmente </strong>uma explicação mais específica do problema.</li>
</ul>
<p><pre class="brush: java; light: true;">

at br.stacktraces.exemplo.Exemplo.bar(Exemplo.java:15)
at br.stacktraces.exemplo.Exemplo.foo(Exemplo.java:11)
at br.stacktraces.exemplo.Exemplo.main(Exemplo.java:7)

</pre></p>
<p>A sintaxe é: <em>at <strong>&lt;Nome completo do método&gt;</strong>(<strong>&lt;Arquivo fonte&gt;</strong>:<strong>&lt;linha&gt;</strong>)<br />
</em></p>
<ul>
<li>Nome completo do método: nome completo é a concatenação dos nomes do pacote, da classe e do método.</li>
<li>Arquivo fonte: o arquivo no qual se encontra o código do método em questão.</li>
<li>Linha: a linha na qual o ocorreu o erro.</li>
</ul>
<p>Agora vamos aprender a ler esse bagulho. O nome Stack não é a toa. Se você notar, o texto que contém os &#8220;at&#8221; forma uma pilha de chamadas, ou seja, é todo o caminho das chamadas de métodos que seu programa fez até a exceção ser lançada.</p>
<p>No topo, temos a linha onde a exceção foi lançada:</p>
<p><pre class="brush: java; light: true;">
throw new RuntimeException(&quot;OMG! StackTraces!&quot;);
</pre></p>
<p>Logo abaixo, a linha em que chamamos o método que lançou a exceção:</p>
<p><pre class="brush: java; light: true;">

bar();

</pre></p>
<p>E assim vai até o método main, que é onde ocorre a chamada que desencadeia a exceção:</p>
<p><pre class="brush: java; light: true;">
ex.foo();
</pre></p>
<p>Ler esta Stack Trace é fácil. Ela só indica métodos que nós mesmos escrevemos. E quando ela faz referências a métodos que não escrevemos e nem sabíamos que existiam?</p>
<p>Considere o próximo exemplo:</p>
<p><pre class="brush: java;">

public class Exemplo {
 public static void main(String[] args) {
   Exemplo ex = new Exemplo();

   ex.getNumeroUm();
 }

 public Number getNumeroUm() {
   return new Integer(&quot;um&quot;);
 }

}

</pre></p>
<p>Com o output:</p>
<p><pre class="brush: java;">
Exception in thread &quot;main&quot; java.lang.NumberFormatException: For input string: &quot;um&quot;
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.&lt;init&gt;(Unknown Source)
 at br.stacktraces.exemplo.Exemplo.getNumeroUm(Exemplo.java:19)
 at br.stacktraces.exemplo.Exemplo.main(Exemplo.java:7)
</pre></p>
<p>Vejamos o que mudou na Stack Trace do exemplo anterior:</p>
<p><pre class="brush: java; light: true;">
Exception in thread &quot;main&quot; java.lang.NumberFormatException: For input string: &quot;um&quot;
</pre></p>
<ul>
<li>Tipo da Exceção: java.lang.NumberFormatException. Opa! Agora já sabemos que é uma exceção de formato de número.</li>
<li>Mensagem da Exceção: For input string: &#8220;um&#8221;. Parece que o Java não sabe criar números a partir de Strings por extenso.</li>
</ul>
<p>Agora já temos noção de sobre o que se trata o erro. Vamos descobrir onde ele está e consertá-lo:</p>
<p><pre class="brush: java; light: true;">
at java.lang.NumberFormatException.forInputString(Unknown Source)
</pre></p>
<p>O método que lançou a exceção se chama forInputString. Não fomos nós que escrevemos e não temos o código fonte dele, mas sabemos que é um método java.lang, então o problema não deve ser alí. O que fazer agora? Vamos para a linha seguinte:</p>
<p><pre class="brush: java; light: true;">
at java.lang.Integer.parseInt(Unknown Source)
</pre></p>
<p>Não fomos felizes desta vez. Próxima linha:</p>
<p><pre class="brush: java; light: true;">
at java.lang.Integer.&lt;init&gt;(Unknown Source)
</pre></p>
<p>Outro java.lang&#8230; Próxima:</p>
<p><pre class="brush: java; light: true;">
at br.stacktraces.exemplo.Exemplo.getNumeroUm(Exemplo.java:19)
</pre></p>
<p>Opa! Esse é meu! Vamos olhar:</p>
<p><pre class="brush: java; light: true;">
return new Integer(&quot;um&quot;);
</pre></p>
<p>É, acho que o java não cria números com Strings por extenso&#8230;</p>
<p>Pronto! Achamos nosso problema e agora podemos consertá-lo. Graças à quem? À mensageira demoníaca, dona Stack Trace.</p>
<p>Agora falta mostrar apenas mais um componente da famigerada StackTrace: o caused by.</p>
<p>Este é bem simples, como os outros. Quando uma exceção é lançada por causa de outra exceção, o caused by aparece. Aproveitando o último exemplo, considere a seguinte modificação ao método getNumeroUm():</p>
<p><pre class="brush: java;">
public Number getNumeroUm() {
 try {
   return new Integer(&quot;um&quot;);
 } catch (NumberFormatException nfe) {
   throw new RuntimeException(&quot;Deu ruim!&quot;, nfe);
 }
}
</pre></p>
<p>Que nos gera o output:</p>
<p><pre class="brush: java;">
Exception in thread &quot;main&quot; java.lang.RuntimeException: Deu ruim!
 at br.stacktraces.exemplo.Exemplo.getNumeroUm(Exemplo.java:22)
 at br.stacktraces.exemplo.Exemplo.main(Exemplo.java:7)
Caused by: java.lang.NumberFormatException: For input string: &quot;um&quot;
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.&lt;init&gt;(Unknown Source)
 at br.stacktraces.exemplo.Exemplo.getNumeroUm(Exemplo.java:20)
</pre></p>
<p>Agora repare que nossa RuntimeException não apenas diz que &#8220;Deu ruim!&#8221;, mas também nos indica que &#8220;Deu ruim!&#8221; por causa de uma outra exceção: a NumberFormatException.</p>
<p>Caused by&#8217;s são comuns em exceções lançadas por frameworks, ou métodos que encapsulam outras tarefas. Imagine que o nosso getNumeroUm() fizesse parte de um framework de uma determinada aplicação e dado o erro de formato de número, precisássemos também lançar uma exceção proprietária, para notificar a aplicação que houve um erro interno. O caused by seria uma informação mais &#8220;underground&#8221; sobre o problema ocorrido e facilitaria a vida do estagiário que tentaria resolver o problema.</p>
<p>Espero que agora a nossa amiga Stack Trace deixe de ser uma mensageira de satã e passe a ser sua companheira na hora de corrigir erros no seu código. Tenha em mente as seguintes dicas:</p>
<ul>
<li>É muito, mas muito provável mesmo que alguém já teve o mesmo problema que você e tenha buscado ajuda. Google é seu amigo. Pesquise bastante antes de procurar ajuda. A informação que você procura pode ser dificil, mas lendo casos semelhantes, mesmo que não resolvam especificamente o seu problema, agregam conhecimento.</li>
</ul>
<ul>
<li>Quando a Stack Trace for muito cabeluda, do tipo de dezenas ou centenas de linhas, treine seu olho para procurar nomes de pacotes que você criou, como o dos exemplos: br.stacktraces. Assim você pode passar o olho rápido perto dos &#8220;at&#8221; até encontrar um nome familiar e começar a investigar dali.</li>
</ul>
<ul>
<li>Stack Traces genéricas. Essas são um pesadelo. São aquelas que são tão úteis quanto &#8220;java.lang.RuntimeException: Deu ruim!&#8221;. Na dificuldade de debugar alguma dessas, considere utilizar uma ferramenta de debug. O eclipse tem uma ótima e é muito facil de usar.</li>
</ul>
<ul>
<li>Uma possibilidade pouco provável, mas vale nota. Se você usa algum framework em desenvolvimento, já tentou de tudo pra consertar seu código e o erro persiste, considere baixar o código do framework (se disponível) e dê uma olhada. Ja presenciei casos de horas e horas perdidas por bug no framework.</li>
</ul>
<ul>
<li>Quando ao desenvolver uma aplicação houver necessidade de lançar uma exceção, procure bastante uma exceção que especifique a classe do problema, se não achar ou tiver preguiça, crie uma e seja absolutamente claro no texto da mensagem.</li>
</ul>
<p>Lembre-se: StackTraces estão aí pra ajudar. Ficar assustado no início é perfeitamente normal, mas coragem e esforço pra lê-las pagam. Depois de um curto tempo você não será mais o cara que pergunta, mas o cara que responde <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=14&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2010/02/20/noobs-e-stacktraces/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello, world!</title>
		<link>http://macoli.wordpress.com/2010/02/17/hello-world-2/</link>
		<comments>http://macoli.wordpress.com/2010/02/17/hello-world-2/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 16:33:02 +0000</pubDate>
		<dc:creator>macoli</dc:creator>
				<category><![CDATA[Eu]]></category>
		<category><![CDATA[post inicial]]></category>

		<guid isPermaLink="false">http://macoli.wordpress.com/?p=3</guid>
		<description><![CDATA[Acordei dez pra uma da tarde. De praxe, levantei sonolento e fui tomar banho, pois estava suado devido ao calor desse verão carioca. Quarta-feira de cinzas com cara de domingo. Tomei banho e, sem fome, fui olhar meus emails. Um email de propaganda, outro que me motivou a escrever este texto. Começou assim: Ontem teve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=3&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Acordei dez pra uma da tarde. De praxe, levantei sonolento e fui tomar banho, pois estava suado devido ao calor desse verão carioca.</p>
<p>Quarta-feira de cinzas com cara de domingo. Tomei banho e, sem fome, fui olhar meus emails. Um email de propaganda, outro que me motivou a escrever este texto. Começou assim:</p>
<p>Ontem teve jogo do Milan contra o Manchester United, pelas oitavas de final da Champions League. Não sou fã de futebol há muito tempo, mas é suficiente pra acompanhar o campeonato italiano, pois torço pelo Milan. Meu time italiano anda mal das pernas, por motivos técnicos, julgo eu. Então, satisfeito com o jogo e insatisfeito com o resultado, resolvi escrever sobre o jogo e postar no google buzz. Pensei que ninguém ia ler, pois o texto ficou grande. Mas tive uma boa surpresa: haviam lido! E melhor 2 pessoas deixaram sua marca. Uma delas foi de um colega da faculdade/trabalho, que marcou que gostou do texto. A outra foi um comentário do meu primo: <em>&#8220;Está na hora de vc criar um blog. =D&#8221;</em>.</p>
<p>E criei <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Já fazia tempo que eu queria mesmo. Gosto de escrever, apesar de não fazê-lo frequentemente e também não me considerar muito bom no português. Sou melhor escrevendo Java ou C :p. Não tinha feito um blog antes, pois tinha medo de abandoná-lo depois de 3 textos, mas depois de ver os blogs de uns colegas, principalmente o <a title="2 papos" href="http://2papos.wordpress.com/" target="_blank">2papos</a>, que tem 2 textos com espaço de um ano, perdi o medo.</p>
<p>Agora eu fico pensando num tema. Sobre o quê que eu vou escrever? Sei lá. Java, desenvolvimento de aplicações web usando algum framework opensource da vida, configurando servidor de aplicações, modelagens de alguns projetos que eu comecei, pra ver se alguem se interessa e continua, Linux, jogos, futebol, que manjo pouco, enfim&#8230; Só esta lista já valia um post completo.</p>
<p>Uma coisa engraçada é que eu li o comentário do meu primo e abri logo a página do wordpress pra criar um blog, mas exitei. Comecei a procurar sobre Home Office e acabei perdendo o foco, até que a empregada pediu pra varrer o quarto e eu saí. Pensei em almoçar logo, mas estava sem fome. Aí decidi tomar foco e escrever o primeiro post.</p>
<p>Um benefício por criar o blog, eu já encontrei: me ajudar a focar em alguma coisa, pois eu sou mestre de começar algo maneiro e largar no meio do caminho por distrações, o que só me faz ser pouco produtivo em casa. Farei um post sobre uns projetos que comecei e larguei.</p>
<p>Outro benefício que enxergo é, de fato, aumentar minha produtividade: Escrever é aprender. Pra não dar bobeira é preciso pesquisar sobre tudo que se escreve, logo, aumentando meu conhecimento sobre algo, pode me tornar mais eficiente ao fazê-lo. Posts técnicos vão requerer testes e exercícios, outros teóricos, pesquisa. Pra mim é só alegria :p.</p>
<p>Agora, se me dão licença, vou almoçar <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/macoli.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/macoli.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/macoli.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=macoli.wordpress.com&amp;blog=12089887&amp;post=3&amp;subd=macoli&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://macoli.wordpress.com/2010/02/17/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3223a5cc39430332b60a95f2f1d7a35a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">macoli</media:title>
		</media:content>
	</item>
	</channel>
</rss>
