<?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>Blog do PacMan &#187; Uncategorized</title>
	<atom:link href="http://pacman.blog.br/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://pacman.blog.br/blog</link>
	<description>Varias Coisas, por Tiago Peczenyj</description>
	<lastBuildDate>Thu, 26 Jan 2012 13:51:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Testando o wordpress 3.0</title>
		<link>http://pacman.blog.br/blog/uncategorized/testando-o-wordpress-3-0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=testando-o-wordpress-3-0</link>
		<comments>http://pacman.blog.br/blog/uncategorized/testando-o-wordpress-3-0/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 02:04:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=118</guid>
		<description><![CDATA[Este blog volta a ativa, com muitas novidades, aguarde]]></description>
			<content:encoded><![CDATA[<p>Este blog volta a ativa, com muitas novidades, aguarde <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/testando-o-wordpress-3-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pesquisa: o que te desmotiva no trabalho?</title>
		<link>http://pacman.blog.br/blog/uncategorized/pesquisa-o-que-te-desmotiva-no-trabalho/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pesquisa-o-que-te-desmotiva-no-trabalho</link>
		<comments>http://pacman.blog.br/blog/uncategorized/pesquisa-o-que-te-desmotiva-no-trabalho/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 14:46:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/pesquisa-o-que-te-desmotiva-no-trabalho/</guid>
		<description><![CDATA[Nem sempre estamos satisfeito no ambiente de trabalho, seja pelo transito, paredes que dão choques ou projetos malucos que fazem a gente varar a noite. Pensando no que os meus colegas e eu ja passamos, quero fazer uma pesquisa: alguem &#8230; <a href="http://pacman.blog.br/blog/uncategorized/pesquisa-o-que-te-desmotiva-no-trabalho/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nem sempre estamos satisfeito no ambiente de trabalho, seja pelo transito, paredes que dão choques ou projetos malucos que fazem a gente varar a noite.</p>
<p>Pensando no que os meus colegas e eu ja passamos, quero fazer uma pesquisa: alguem ja passou por estas situações e quais são as piores, no sentido de arrebentar com a nossa incrivel motivação no trabalho?<br />
- Falta de equipamentos adequados (quem nunca pensou em comprar um pente de memória com o dinheiro do bolso pra levar pro trabalho);<br />
- Falta de café, chá ou ar condicionado (ou quando tem é ruim);<br />
- Colegas doidos que te levam a loucura;<br />
- Internet bloqueada (incluindo o google);<br />
- Ter que trabalhar depois do horario (as vezes sem receber por isso);<br />
- Codigos que parecem ter saido de um conto de H.P. Lovecraft;<br />
- Projetos que parecem não ter sentido ou importância;<br />
- Chefes que parecem ter saido de uma tirinha do Dilbert;<br />
- Chefes truculentos, desses que da medo falar o nome;<br />
- Resistência a mudanças (riem de Ruby on Rails e desenvolvem em Java como se fosse Cobol);<br />
- Buzzwords são mais importantes do que atender aos clientes;</p>
<p>Os profissionais de informática, especialmente os desenvolvedores, possuem formas de encarar o trabalho que, de acordo com o ambiente, a vontade de fazer algo bom some restando cinismo, péssimo humor e curriculos atualizados prontos para zarpar para outras oportunidades. Algumas vezes é inevitavel, afinal somos humanos, mas o que nos leva a aguentar, enfrentar ou desistir desses problemas?</p>
<p>Uma caracteristica é bem clara: gostamos de fazer coisas especiais. É ironicamente engraçado ver as reações de alguns profissionais quando estão fazendo algo ordináriol, comum ou que julguem sem importância pois muitos <em>odeiam</em> isso, porém estão fazendo por algum motivo: geralmente existe alguma extratégia da empresa que deveria ser respeitada. Creio que este tipo de &#8220;soberba&#8221; afeta o nosso rendimento pois é muito facil ver reações emocionais e não tanto racionais.</p>
<p>No aguardo da flame-war</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/pesquisa-o-que-te-desmotiva-no-trabalho/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>RPG em Ruby com apenas 15 linhas</title>
		<link>http://pacman.blog.br/blog/uncategorized/rpg-em-ruby-com-apenas-15-linhas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rpg-em-ruby-com-apenas-15-linhas</link>
		<comments>http://pacman.blog.br/blog/uncategorized/rpg-em-ruby-com-apenas-15-linhas/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 20:48:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MUD]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/rpg-em-ruby-com-apenas-15-linhas/</guid>
		<description><![CDATA[Achei este link bem interessante: MUD in 15 Lines of Ruby. Para quem não sabe MUD é uma familia de jogos textuais inspirados em RPGs conhecidos: normalmente vc escolhe uma raça e uma classe e, dentro do jogo, evolui através &#8230; <a href="http://pacman.blog.br/blog/uncategorized/rpg-em-ruby-com-apenas-15-linhas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Achei este link bem interessante: <a href="http://redhanded.hobix.com/bits/mudIn15LinesOfRuby.html">MUD in 15 Lines of Ruby</a>. Para quem não sabe MUD é uma familia de jogos <em>textuais</em> inspirados em RPGs conhecidos: normalmente vc escolhe uma raça e uma classe e, dentro do jogo, evolui através da morte de criaturas controladas pelo jogo e através de missões varias como recuperar itens ou decifrar enigmas, são os avós dos MMORPGs modernos.</p>
<p>O codigo foi um tanto obsfuscado, na verdade são umas 77 linhas, mas não deixa de ser interessante o poder das linguagens scripts <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/rpg-em-ruby-com-apenas-15-linhas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desculpas dos Programadores aos Testadores</title>
		<link>http://pacman.blog.br/blog/uncategorized/desculpas-dos-programadores-aos-testadores/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=desculpas-dos-programadores-aos-testadores</link>
		<comments>http://pacman.blog.br/blog/uncategorized/desculpas-dos-programadores-aos-testadores/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 12:07:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/desculpas-dos-programadores-aos-testadores/</guid>
		<description><![CDATA[Muito interessante esta lista das desculpas mais comuns. De fato eu nunca vi a atividade de teste como uma tarefa para prejudicar o desenvolvimento e sim uma atividade que agrega (em alguns casos, muito) valor. Mas que as desculpas são &#8230; <a href="http://pacman.blog.br/blog/uncategorized/desculpas-dos-programadores-aos-testadores/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Muito interessante esta <a href="http://guj.com.br/posts/list/115910.java">lista das desculpas mais comuns</a>.</p>
<p>De fato eu nunca vi a atividade de teste como uma tarefa para prejudicar o desenvolvimento e sim uma atividade que agrega (em alguns casos, muito) valor. Mas que as desculpas são engraçadas, isso são <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/desculpas-dos-programadores-aos-testadores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleTalk em Python</title>
		<link>http://pacman.blog.br/blog/uncategorized/googletalk-em-python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=googletalk-em-python</link>
		<comments>http://pacman.blog.br/blog/uncategorized/googletalk-em-python/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:29:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/googletalk-em-python/</guid>
		<description><![CDATA[Com a biblioteca xmpp eu posso criar o client de Jabber, acessando a rede do GTalk. import xmpp login = 'login' # @gmail.com pwd = 'senha' cnx = xmpp.Client('gmail.com') cnx.connect( server=('talk.google.com',5223) ) cnx.auth(login,pwd, 'python-xmpp') cnx.send( xmpp.Message( "teste123@gmail.com" ,"Hello World from &#8230; <a href="http://pacman.blog.br/blog/uncategorized/googletalk-em-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Com a biblioteca <a href="http://xmpppy.sourceforge.net">xmpp</a> eu posso criar o client de Jabber, acessando a rede do GTalk.</p>
<pre>
import xmpp

login = 'login' # @gmail.com
pwd   = 'senha'

cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )

cnx.auth(login,pwd, 'python-xmpp')

cnx.send( xmpp.Message( "teste123@gmail.com" ,"Hello World from Python" ) )
</pre>
<p>Basta incluir a biblioteca (apt-get install python-xmpp) e pronto. O codigo eu me baseei neste <a href="http://www.larsen-b.com/Article/214.html">artigo</a>. Facil não?</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/googletalk-em-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pra descontrair</title>
		<link>http://pacman.blog.br/blog/uncategorized/pra-descontrair/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pra-descontrair</link>
		<comments>http://pacman.blog.br/blog/uncategorized/pra-descontrair/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:09:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/pra-descontrair/</guid>
		<description><![CDATA[http://xkcd.com/257/]]></description>
			<content:encoded><![CDATA[<p><img src="http://imgs.xkcd.com/comics/code_talkers.png" alt="xkcd code talkers" width="350" height="278" /></p>
<p><a href="http://xkcd.com/257/">http://xkcd.com/257/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/pra-descontrair/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Closures em Javascript: o metodo each</title>
		<link>http://pacman.blog.br/blog/uncategorized/closures-em-javascript-o-metodo-each/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=closures-em-javascript-o-metodo-each</link>
		<comments>http://pacman.blog.br/blog/uncategorized/closures-em-javascript-o-metodo-each/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:05:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Closures]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/closures-em-javascript-o-metodo-each/</guid>
		<description><![CDATA[Estou escutando uma discussão acalorada sobre Closures, Ruby e Javascript. Detalhes a parte, Javascript suporta funções anônimas (que não são closures) que podem ser passados como argumentos para outras funções. Não seria otimo que um Array em javascript tivesse o &#8230; <a href="http://pacman.blog.br/blog/uncategorized/closures-em-javascript-o-metodo-each/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou escutando uma discussão acalorada sobre Closures, Ruby e Javascript. Detalhes a parte, Javascript suporta funções anônimas (que não são closures) que podem ser passados como argumentos para outras funções.</p>
<p>Não seria otimo que um Array em javascript tivesse o método each para executar um bloco de código para cada elemento desse array? Usando o prototype da entidade Array eu posso adicionar um método each que faz isso:</p>
<pre>Array.prototype.each = function(fun) {
	if (typeof fun != "function") return;
	for (var i=0; i&lt;this.length; i++) {
		if(i in this) fun(this[i]);
	}
	return this;
}

var x = ["cat", "dog", "mouse", "bird"];
x.each(function(i) {
	alert(i);
});</pre>
<p>Simples, não? Eu ainda posso adicionar outros métodos uteis como o <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map">map</a> e o <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce">reduce</a>.</p>
<p>São recursos interessantes que podemos utilizar quando for conveniente. Interessante foi descobrir a propriedade <a href=", olhando estas funções, do array arguments">arguments</a>, um array com todos os argumentos passados para a função que, se eu conhecesse alguns meses atrás, teria me solucionado alguns problemas <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>É claro que tudo isso ja vem no <a href="http://www.prototypejs.org/">Prototype</a> (né <a href="http://www.peleteiro.net/">peleteiro</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/closures-em-javascript-o-metodo-each/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Trabalhando com Serviços Assíncronos</title>
		<link>http://pacman.blog.br/blog/uncategorized/trabalhando-com-servicos-assincronos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trabalhando-com-servicos-assincronos</link>
		<comments>http://pacman.blog.br/blog/uncategorized/trabalhando-com-servicos-assincronos/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 21:23:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=39</guid>
		<description><![CDATA[Geralmente desenvolvemos serviços síncronos, mesmo quando uma grande quantidade de etapas precisa ser executada, em detrimento de serviços assíncronos. Imagine um sistema que, em dado momento, precisa enviar emails. Podem ser aqueles emails para convidar outras pessoas para usar a &#8230; <a href="http://pacman.blog.br/blog/uncategorized/trabalhando-com-servicos-assincronos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Geralmente desenvolvemos serviços síncronos, mesmo quando uma grande quantidade de etapas precisa ser executada, em detrimento de serviços assíncronos.</p>
<p>Imagine um sistema que, em dado momento, precisa enviar emails. Podem ser aqueles emails para convidar outras pessoas para usar a plataforma, algo que vc faz uns 50 ou 100 de uma vez. O desenvolvimento natural é ler essa lista de emails e, iterativamente, enviar um convite para cada pessoa (com algum codigo que identifique esse convite para evitar fraudes, por exemplo). Coisa que, dependendo do numero de emails e como cada passo é processado pode demorar <em>um pouco</em>.</p>
<p>Precisa ser síncrono? Vc precisa enviar esses convites naquele momento? Faz diferença se demorar uns minutinhos? Como esta solução sincrona afeta a performance do resto da minha aplicação (coisa que posso avaliar num teste de carga)? São perguntas que podemos nos fazer e dão algumas pistas, abrindo alas para a verdadeira pergunta: como a minha aplicação escala?</p>
<p>Se esta etapa pode demorar um tempinho e ela afeta (ou pode afetar) negativamente a experiência do usuario ao demorar para enviar 50 ou 100 convites, pode ser o momento de separar a minha aplicação do serviço de &#8216;convites por e-mail&#8217;, que ira trabalhar assincronamente sem concorrer tanto com CPU (ex: usando nice ou rodando em outro servidor). A minha aplicação apenas iria dizer &#8220;essas são as informações: nome do usuario e lista de emails para convites&#8221; que o sistema sabe se virar. </p>
<p>E como essa integração é feita? Existem varias formas. Eu posso fazer através do banco de dados, inserindo numa tabela que o meu sistema lê, porém integração pelo banco nunca é algo simples e frequentemente causa problemas (principalmente se a documentação se perde e altera alguma coisa no banco, prejudicando outras aplicações que ninguem sonha que trabalhem assim). Uma boa forma seria passar uma mensagem com todos os dados para o servidor de alguma forma inequivoca, como um POST HTTP (que retorna &#8220;ok, recebido, logo vou processar isso&#8221;) ou, simplesmente, escrevendo num arquivo em um determinado diretorio. O serviço trata de ler essa requisição e colocar em uma fila ou outra estrutura de dados para atender no prazo que for possivel.</p>
<p>No caso de uma lista de emails escrever em um arquivo parece grosseria mas se eu estivesse trabalhando com fotos, em um serviço de geração de thumbnails, por exemplo, parece ser uma saida bem simples. Nesse caso em particular eu posso criar um &#8220;vigia de diretorios&#8221;, alguem que vigia uma pasta de tempos em tempos e, quando surge algo novo, executa alguma ação propriamente dita. A forma como eu trabalho pode ser bem simples, como: acordar, listar fotos, executar ação, apagar fotos. Se eu quiser trabalhar com uma maquina de estados eu posso criar pastas como: chegada, processando, fim. O serviço trata de olhar a pasta de chegada e, quando precisa, move as fotos ou outras entidades para o diretorio processando e, então, executa alguma ação.</p>
<p>Nesse ponto algumas coisas precisam ser acertadas: se eu vou trabalhar com estados das minhas fotos, convites, ou qualquer outra entidade, posso modelar este serviço de forma que, se a minha entidade esta na pasta X, então ela tem um determinado estado. Isso é interessante pois caso o meu serviço seja interrompido basta mover tudo o que estava sendo processado para a pasta de chegada! Nesse ponto temos que ter bem claro o que acontece em cada transição de estado, os fluxos possiveis e estabelecer os corretos tratamento de erros.</p>
<p>Se tudo der certo, eu posso rumar para uma aplicação que, para escalar, bastaria subir um segundo serviço em outra maquina (ou aproveitando outra CPU). É claro que existem muitas outras formas de chegar a este resultado e muitas tecnologias disponiveis, porém soluções simples e robustas são sempre bem vindas: percebam que existem muitos pontos de falha que temos que tratar então com a suites de testes apropriada e uma documentação consisa podemos ter um bom serviço assincrono que só vem a agregar valor.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/trabalhando-com-servicos-assincronos/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Inversão de Controle e Injeção de Dependências</title>
		<link>http://pacman.blog.br/blog/uncategorized/inversao-de-controle-e-injecao-de-dependencias/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=inversao-de-controle-e-injecao-de-dependencias</link>
		<comments>http://pacman.blog.br/blog/uncategorized/inversao-de-controle-e-injecao-de-dependencias/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 17:30:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/uncategorized/inversao-de-controle-e-injecao-de-dependencias/</guid>
		<description><![CDATA[Fui surpreendido por uma pergunta hoje: o que é IOC (inversion of control)? Lembrei agora que um bom exemplo de IOC é programação orientada a eventos: lembram daquelas telas de Visual Basic que criavamos arrastando os componentes e adicionando codigo &#8230; <a href="http://pacman.blog.br/blog/uncategorized/inversao-de-controle-e-injecao-de-dependencias/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fui surpreendido por uma pergunta hoje: o que é IOC (inversion of control)?</p>
<p>Lembrei agora que um bom exemplo de IOC é programação orientada a eventos: lembram daquelas telas de Visual Basic que criavamos arrastando os componentes e adicionando codigo no &#8220;onClick&#8221; de um botão? Isso é uma forma de IOC pois não criamos o código que, dado o clique em um determinado componente, executa a ação, apenas jogamos um trecho e deixamos que a IDE &#8220;se virasse&#8221; para adicionar aquilo ao programa principal. Assim deixamos de controlar todo o fluxo para controlar uma parte dele.</p>
<p>Podemos pensar que IOC tem haver com &#8220;o que&#8221; e não, diretamente, &#8220;como&#8221;. Uma leitura interessante é o artigo do Martin Fowler intitulado <a href="http://www.javafree.org/artigo/871453/">Inversion Of Control &#8211; Containers de Inversão de Controle e o padrão Dependency Injection</a>, com exemplos em Java. </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/inversao-de-controle-e-injecao-de-dependencias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Certificação para testes &#8211; vale a pena?</title>
		<link>http://pacman.blog.br/blog/uncategorized/certificacao-para-testes-vale-a-pena/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=certificacao-para-testes-vale-a-pena</link>
		<comments>http://pacman.blog.br/blog/uncategorized/certificacao-para-testes-vale-a-pena/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 13:01:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=19</guid>
		<description><![CDATA[Sou suspeito para falar, aprendi a testar por necessidade, começando por um sistema muito complexo e cheio de bugs com documentação zero. Certificação pode valer a pena quando vc tem que seguir um processo bem burocratico, onde vc precisa de &#8230; <a href="http://pacman.blog.br/blog/uncategorized/certificacao-para-testes-vale-a-pena/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sou suspeito para falar, aprendi a testar por necessidade, começando por um sistema muito complexo e cheio de bugs com documentação zero. Certificação pode valer a pena quando vc tem que seguir um processo bem burocratico, onde vc precisa de 1024 documentos e mais diversas ferramentas de apoio. Pessoalmente eu discordo dessa abordagem por um bom motivo: ruído.</p>
<p>Pode haver muito ruído entre o que o cliente quer (ou acha que quer) e todos os envolvidos, uma vez que nem sempre o cliente sabe o que quer exatamente ou pode não saber se expressa muito bem. Imagine agora isso colocando em uma coleção de documentos que circula entre os envolvidos e que exige um esforço considerável para manter-se atualizado. Pode ser a receita para o desastre <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Uma condição interessante para o sucesso do projeto é a dedicação dos mesmos frente a honestidade. Muitos analistas, programadores ou testadores querem mesmo é tirar o seu da reta, uma vez que vivem sob um mundo medieval onde os chefes são temidos pelos urros guturais e ameaças perturbadoras, nesse caso o sentimento gostoso de &#8220;estou num projeto bom que produz um software de boa qualidade&#8221; passa a ser &#8220;caramba, se isso não funcionar não é culpa minha e sim do X&#8221;. Um bom exemplo é testadores que se limitam a seguir um manual de testes de forma exata e não fazem nada alem disso. Se um bug for encontrado, o testador se defende &#8220;mas eu segui o documento de testes  #542&#8243;. Nesse caso ninguem precisa se defender: testar não elimina bugs, eles podem ser encontrados em situações muito <em>peculiares</em> e de dificil reprodução, nesse caso um bug deveria alimentar um documento de testes e não gerar pânico, dor e morte. Todo o software tem bugs, paciência.</p>
<p>Lembro de uma tela que poderia receber o campo &#8220;dia util do mês&#8221;. A tela funcionava quando eu informava 01, 02, 03, 10, 20, 28, etc. A tela parecia 100% dentro do uso normal até que alguem colocou o dia 08: um grande erro de javascript aparecia para o usuario! E com 09 também. Depois de muita pesquisa descobriram que, em javascript, um numero que começa com 0 é considerado octal e, em octal, não existe 8 nem 9, nesse caso a máscara desse campo era a origem desse comportamento estranho. Esse tipo de coisa só se resolve com <strong>trabalho,</strong> pois poderiamos ficar discutindo sobre quem errou, o testador ou o desenvolvedor, por horas, até acabar o projeto. O que importa é que 8 e 9 são dias úteis válidos e a funcionalidade ficaria comprometida com esse bug.</p>
<p>Alias, testar é uma atividade muito legal, se vc é curioso. Basicamente vc tem que procurar comportamentos erráticos e descobrir como reproduzi-los. Hoje em dia eu ainda me pego testando SQL Injection em alguns sites ou estudando paginação de dados, etc. Testar através de ferramentas é mais divertido ainda, não aqueles monstros que funcionam na base do Record/Playback: testar sites usando Shell Script (curl + grep), <a href="http://seleniumhq.org/">Selenium</a> ou soluções próprias (como uma classe que se conecta com um webservice, um script Perl que envia dezenas de requests ou mesmo incorporar o Internet Explorer numa dll escrita em C# para integrar com algum sistema complexo de testes) é uma arte que traz benefícios como eliminar horas de trabalho braçal propenso a erros.</p>
<p>Não que alguem certificado em testes seria desonesto ou covarde mas a minha percepção é que esse universo de testes utiliza documentos, ferramentas e certificações também subterfúgios, tiro isso de conversas com gerentes dessa área que querem saber: quem é o desenvolvedor que <em>produz</em> mais bugs, quem demora mais pra desenvolver, quem demora mais pra testar, quem testa de verdade, etc. Quando vc pergunta específicamente essas coisas vc não quer métricas, vc quer dados para <strong>ferrar</strong> com alguem. Neste tipo de ambiente, tão comum ai por fora, a honestidade é soterrada pela mediocridade de gerentes e outros figurões e, geralmente, se resolve mudando de emprego ou fazendo parte de uma célula que implanta uma mudança de pensamento dentro da empresa. Geralmente chegamos a essa opção quando cansamos de trocar de emprego.</p>
<p>Por fim: conhecimento não pesa nem ocupa espaço, biológicamente falando. IMHO honestidade para o desenvolvedor, testador ou gerente é muito mais importante do que o cinismo. Experiência é mais importante que certificações. Conhecimento é mais importante do que um mero diploma. O resto é dançar conforme a música.</p>
<p>Eu gosto de citar este artigo: <a href="http://blog.fragmental.com.br/2007/08/15/introduzindo-agilidade-num-ambiente/">Introduzindo Agilidade num Ambiente</a>, do Phillip Calçado, que me mostrou um novo mundo e me inspirou a sair do mundo de testes para o mundo onde se faz de tudo um pouco. Então, se alguem se perguntar se certificação, mesmo para testes, vale a pena, lembre-se que a sua postura profissional conta <strong>muito</strong> mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/uncategorized/certificacao-para-testes-vale-a-pena/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

