<?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>Bruno Mentges de Carvalho</title>
	<atom:link href="http://www.brunocarvalho.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brunocarvalho.com</link>
	<description>Desenvolvimento de software</description>
	<lastBuildDate>Thu, 07 Jan 2010 17:01:28 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Usando jQuery no console do firebug</title>
		<link>http://www.brunocarvalho.com/07/01/2010/usando-jquery-no-console-do-firebug/</link>
		<comments>http://www.brunocarvalho.com/07/01/2010/usando-jquery-no-console-do-firebug/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 16:58:12 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=88</guid>
		<description><![CDATA[Recentemente procurei como fazer pra usar o jQuery no console do firebug, e encontrei essa solução:
Adicione esse bookmarklet na barra de favoritos do firefox e clique toda vez que quiser injetar o jquery num site para voce poder manipular com facilidade:
Load jQuery
O código é simples, como podemos ver abaixo:

j=document.createElement("SCRIPT");
j.src="http://code.jquery.com/jquery-latest.pack.js";
document.getElementsByTagName("HEAD")[0].appendChild(j);

Fonte em inglês:
http://techrageo.us/2008/03/05/jquery-for-firebug/
Uma alternativa praticamente igual:
http://ajaxian.com/archives/hacking-digg-with-firebug-and-jquery
Espero que [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente procurei como fazer pra usar o jQuery no console do <a href="http://getfirebug.com/">firebug</a>, e encontrei essa solução:</p>
<p>Adicione esse bookmarklet na barra de favoritos do firefox e clique toda vez que quiser injetar o jquery num site para voce poder manipular com facilidade:</p>
<p><a href="javascript:void((function(){j=document.createElement("SCRIPT");j.src="http://code.jquery.com/jquery-latest.pack.js";document.getElementsByTagName("HEAD")[0].appendChild(j);})())">Load jQuery</a></p>
<p>O código é simples, como podemos ver abaixo:</p>
<pre name="code" class="JavaScript">
j=document.createElement("SCRIPT");
j.src="http://code.jquery.com/jquery-latest.pack.js";
document.getElementsByTagName("HEAD")[0].appendChild(j);
</pre>
<p>Fonte em inglês:<br />
<a href="http://techrageo.us/2008/03/05/jquery-for-firebug/">http://techrageo.us/2008/03/05/jquery-for-firebug/</a><br />
Uma alternativa praticamente igual:<br />
<a href="http://ajaxian.com/archives/hacking-digg-with-firebug-and-jquery">http://ajaxian.com/archives/hacking-digg-with-firebug-and-jquery</a></p>
<p>Espero que ajude <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/07/01/2010/usando-jquery-no-console-do-firebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git &#8211; como usar tags</title>
		<link>http://www.brunocarvalho.com/13/11/2009/git-como-usar-tags/</link>
		<comments>http://www.brunocarvalho.com/13/11/2009/git-como-usar-tags/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 13:56:11 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=86</guid>
		<description><![CDATA[Alguns comandos para usar tags com git:

Listar tags: git tag
Criar uma tag do branch local: git tag minha-tag
Fazer push das tags: git push &#8211;tags origin master
Renomear uma tag: git tag -m minha-tag minha-nova-tag
Deletar uma tag local: git tag -d minha-tag
Deletar uma tag remota, no origin: git push origin :refs/tags/minha-tag

]]></description>
			<content:encoded><![CDATA[<p>Alguns comandos para usar tags com git:</p>
<ul>
<li>Listar tags: git tag</li>
<li>Criar uma tag do branch local: git tag <em>minha-tag</em></li>
<li>Fazer push das tags: git push &#8211;tags origin master</li>
<li>Renomear uma tag: git tag -m <em>minha-tag minha-nova-tag</em></li>
<li>Deletar uma tag local: git tag -d <em>minha-tag</em></li>
<li>Deletar uma tag remota, no origin: git push origin :refs/tags/<em>minha-tag</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/13/11/2009/git-como-usar-tags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semana 1 Dia 1 (W1D1) &#8211; Couch to 5k</title>
		<link>http://www.brunocarvalho.com/21/09/2009/semana-1-dia-1-w1d1-couch-to-5k/</link>
		<comments>http://www.brunocarvalho.com/21/09/2009/semana-1-dia-1-w1d1-couch-to-5k/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 14:46:38 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[c25k]]></category>
		<category><![CDATA[running]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=80</guid>
		<description><![CDATA[Hoje comecei o programa couch to 5k (do sofá para 5 kilometros). Este programa visa capacitar uma pessoa completamente sedentária a correr 5km sem parar, tudo isso em apenas 9 semanas. Cada semana contém 3 treinos com um dia pelo menos de espaço entre cada treino, e cada treino é específico.
Se quiser ver os detalhes [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje comecei o programa <a href="http://www.c25k.com">couch to 5k</a> (do sofá para 5 kilometros). Este programa visa capacitar uma pessoa completamente sedentária a correr 5km sem parar, tudo isso em apenas 9 semanas. Cada semana contém 3 treinos com um dia pelo menos de espaço entre cada treino, e cada treino é específico.</p>
<p>Se quiser ver os detalhes dos treinos pode ver aqui: <a href="http://www.cairnscommunications.com/fitness/couch-to-5k.htm">http://www.cairnscommunications.com/fitness/couch-to-5k.htm</a></p>
<p>Daqui pra frente vou apenas relatar como foi e fazer o running log desse dia. É bem pessoal ! <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Acordei hoje as 7:00 da manhã e meu cérebro começou a trabalhar contra, como de costume: &#8220;Dorme mais 10 minutinhos&#8221; &#8220;Ta frio, fica ae, dorme mais&#8221; eram pensamentos comuns. Mesmo com essa dificuldade, segui um conselho que ouvi de um camarada, Claudio Luz, que dizia &#8220;Vira pro lado e levanta!&#8221;.</p>
<p>Ao levantar fui ao banheiro e minha mulher continuou dormindo. A movimentação comum nessa hora lá em casa não rolou porque minha enteada (de 7 anos) conseguiu matar aula hoje reclamando que tinha ido dormir tarde e fazendo minha mulher se sentir culpada, haha criança é fogo. Tomei um copo de Ades e comecei a me arrumar. É, to substituindo o café com leite integral por Ades. Devo começar uma dieta em breve.</p>
<p>Minha mulher levantou e se arrumou para ir comigo me dar força! Muito legal. Saímos para começar o programa, e o controlador era uma aplicação que comprei pro Iphone: Couch to 5k da Felt Tip Inc. Nessa aplicação, ela marca o tempo que tenho de aquecimento (5 minutos de caminhada) e depois me avisa quando devo alternar entre correr e caminhar. Nessa primeira semana, devo correr 1 minuto e andar 1 minuto e meio durante 20 minutos.</p>
<p>Começamos a caminhar e iniciei o programa no telefone. Quando o programa mandava, corríamos, e quando mandava denovo, andávamos. Ao final da 3a corrida minha mulher preferiu só andar e eu continuei. Corria quando mandava e voltava andando quando era pra andar pra reencontrá-la. No final, consegui completar o dia inteiro e a sensação foi muito boa de dever cumprido. Minha mulher também ficou super feliz e vai se empenhar pra seguir o programa.</p>
<p>Voltamos, passamos na padaria, compramos pão e fomos pra casa. Ao chegar em casa entrei no banho, frio claro, e alonguei. Depois comi um pedaço de pao com manteiga e mais um copo de Ades e vim trabalhar.</p>
<p>Foi muito boa a experiência. O corpo ficou um pouco dolorido, principalmente as pernas, mas estava muito feliz de ter conseguido. Devo continuar o programa daqui a dois dias <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>É isso aí !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/21/09/2009/semana-1-dia-1-w1d1-couch-to-5k/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mantendo contexto usando ajax</title>
		<link>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/</link>
		<comments>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/#comments</comments>
		<pubDate>Fri, 08 May 2009 04:07:19 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[contexto]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[semantica]]></category>
		<category><![CDATA[tralhacontroller]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=69</guid>
		<description><![CDATA[Digamos que você tenha uma página com um vídeo e um box ao lado com vídeos relacionados. Neste box de vídeos relacionados há uma paginação e você não quer que o usuário clique ali e o site faça o reload, fazendo seu usuário recarregar o vídeo todo denovo.
A maioria dos sites implementa chamadas AJAX usando [...]]]></description>
			<content:encoded><![CDATA[<p>Digamos que você tenha uma página com um vídeo e um box ao lado com vídeos relacionados. Neste box de vídeos relacionados há uma paginação e você não quer que o usuário clique ali e o site faça o reload, fazendo seu usuário recarregar o vídeo todo denovo.</p>
<p>A maioria dos sites implementa chamadas <a href="http://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)">AJAX</a> usando o atributo onClick da tag html <strong>a</strong>. Ex:</p>
<pre name="code" class="HTML">
  <a href="#"
  onClick="atualizarBoxVideosFavoritos('pagina=2');">
    Próxima Página
  </a>
</pre>
<p>Até aí tudo bem. Funciona que é uma beleza, o youtube usa isso, etc. O href=&#8217;#&#8217; é usado para não gerar um request pro servidor, usando um recurso simples do html, a âncora. </p>
<p>Se você paginou até a 7a página e quer passar o vídeo para um amigo, com a 7a página selecionada para mostrar alguns vídeos que lá estão, de repente um seu que está ali por exemplo, só com o recurso onClick não seria possível. Teria que pedir para ele paginar e olhar. Mas há uma maneira de fazer isso, e um amigo lá do trabalho, <a href="http://programandosemcafeina.blogspot.com/">Tiago Motta</a>, fez uma classe javascript que possibilita passar o contexto de todos os boxes da sua página que funcionam com ajax no link para seus amigos.</p>
<p>É o projeto TralhaController: <a href="http://github.com/timotta/TralhaController/tree/master">http://github.com/timotta/TralhaController/tree/master</a></p>
<p>Mas Bruno, comofas/ </p>
<p>Esta classe javascript, após você adicionar um observador, ela começa a monitorar a URL do usuário por mudanças na âncora (#). Vamos aos exemplos:</p>
<pre name="code" class="JavaScript">
<script>
var paginacao_box_videos_relacionados = {
      update: function(url) {
          // faz o parsing da URL
          // faz um request ajax e atualiza o box de videos relacionados
      }
  }
TralhaController.addObserver( paginacao_box_videos_relacionados );
</script>
</pre>
<p>A partir daí o TralhaController passa a monitorar a URL do usuário. Vejamos como montar o link que muda de página no box:</p>
<pre name="code" class="HTML">
  <a href="#pagina_box_videos_relacionados=2">
    Próxima Página
  </a>
</pre>
<p>Dessa forma, quando a URL mudar, o observador que programou e adicionou ao TralhaController será notificado e o método update será chamado com a url &#8220;http://seu-site-aqui/#pagina_box_videos_relacionados=2&#8243;, sem mudar de página, possibilitando que seu observador faça uma chamada ajax atualizando o box.</p>
<p>Até aqui o onClick também faria. A novidade é que se você copiar este link e passar para um amigo, ele conseguirá ver o vídeo/página/qualquer coisa que estava vendo e o box estaria paginado na segunda página, ou seja, o mesmo contexto que você via, o seu amigo também verá pois ao acessar a página seu observador será notificado e atualizará o box com a página certa.</p>
<p>Espero que este projeto os ajude. Ele implementa um padrão de projeto conhecido: O <a href="http://en.wikipedia.org/wiki/Observer_pattern">Observer</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/08/05/2009/mantendo-contexto-usando-ajax/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Rails e Rspec sem ActiveRecord</title>
		<link>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/</link>
		<comments>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 00:12:40 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[activerecord]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[rspec-rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=51</guid>
		<description><![CDATA[Caso seus models não tenham representação no banco ou não seja ActiveResource, você precisará mudar umas coisinhas para fazer o rspec e rspec-rails funcionar. Este post se refere a: rails 2.3.2, rspec 1.2.2, rspec-rails 1.2.2, mas deve funcionar com algumas versões anteriores.
O primeiro passo é desabilitar o framework ActiveRecord no arquivo config/environment.rb

# config/environment.rb
Rails::Initializer.run do &#124;config&#124;
 [...]]]></description>
			<content:encoded><![CDATA[<p>Caso seus models não tenham representação no banco ou não seja ActiveResource, você precisará mudar umas coisinhas para fazer o rspec e rspec-rails funcionar. Este post se refere a: rails 2.3.2, rspec 1.2.2, rspec-rails 1.2.2, mas deve funcionar com algumas versões anteriores.</p>
<p>O primeiro passo é desabilitar o framework ActiveRecord no arquivo config/environment.rb</p>
<pre name="code" class="ruby">
# config/environment.rb
Rails::Initializer.run do |config|
  config.frameworks -= [:active_record, :active_resource]
  # outras configuracoes aqui
end
</pre>
<p>Agora voce deve deletar o arquivo <strong>config/database.yml</strong> e comentar as seguintes linhas do arquivo spec/spec_helper.rb</p>
<pre name="code" class="ruby">
# spec/spec_helper.rb
Spec::Runner.configure do |config|
  # config.use_transactional_fixtures = true
  # config.use_instantiated_fixtures  = false
  # config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
  # nao comente outras configuracoes
end
</pre>
<p>Agora o rspec funcionará numa boa. Você também notará que não conseguirá usar o <strong>logger</strong> do rails como usava em seus models do ActiveRecord. Para utiliza-lo, basta usar a constante RAILS_DEFAULT_LOGGER. Exemplo:</p>
<pre name="code" class="ruby">
# app/models/aluno.rb
class Aluno
  def ola
    RAILS_DEFAULT_LOGGER.info "falando ola mundo"
    #PPDD - Passei por aqui driven development
    RAILS_DEFAULT_LOGGER.debug "passei por aqui"
    "Ola mundo"
  end
end
</pre>
<p>Fica aqui a dica <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/06/04/2009/rails-sem-activerecord-e-rspec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Buscando ser mais produtivo</title>
		<link>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/</link>
		<comments>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 05:39:22 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Produtividade]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[pomodoro]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/?p=44</guid>
		<description><![CDATA[Onde trabalho, temos uma política de feedback contínuo e pensando neles (os feedbacks que recebi) percebi que precisava melhorar minha produtividade e lutar mais contra uma característica que tenho: a procrastinação.  Essa característica é um dos motivos que meu blog tem estado as traças, sem atualização.
Identificado o problema, comecei a pensar sobre tudo o [...]]]></description>
			<content:encoded><![CDATA[<p>Onde trabalho, temos uma política de feedback contínuo e pensando neles (os feedbacks que recebi) percebi que precisava melhorar minha produtividade e lutar mais contra uma característica que tenho: a <a href="http://pt.wikipedia.org/wiki/Procrastina%C3%A7%C3%A3o">procrastinação</a>.  Essa característica é um dos motivos que meu blog tem estado as traças, sem atualização.</p>
<p>Identificado o problema, comecei a pensar sobre tudo o que eu fazia durante o dia, sobre o que precisava ser melhorado para que eu pudesse ter mais performance, mais produtividade e gerar mais valor em menos tempo. A primeira coisa que reparei foi que as ferramentas que eu usava estavam me atrapalhando. Olhei em volta e percebi que um dos meus amigos (<a href="http://vp.blog.br">Vitor Pellegrino</a>) no trabalho usa um editor de texto não usual como IDE e que com aquele editor ele se mantinha mais focado.</p>
<p>Este editor é o <a href="http://www.gnu.org/software/emacs/">emacs</a>. Vitor Pellegrino, como de costume, ficou empolgado em saber que eu queria aprender sobre o emacs, me enviou um monte de material sobre o emacs e se prontificou a me ajudar no que fosse preciso para que aprendesse mais rápido. Inclusive, faço propaganda aqui de um screencast do peepcode sobre o emacs que é muito bom: <a href="https://peepcode.com/products/meet-emacs">Emacs Peepcode</a>.</p>
<p>Depois disso, veio a organização do desktop do Ubuntu. A primeira dica foi o <a href="http://github.com/rmm5t/dotfiles/tree/master">projeto dotfiles do Ryan McGeary no github</a>. Nele, há todos os arquivos que começam com ponto (.), ou <em>dotfiles</em>, do seu home guardados no github com um install.rb para instalar no seu terminal linux. Isso facilita muito ao formatar/trocar de micro pois todas as suas configurações ficam lá. Inclusive todas do emacs também. O meu dotfiles no github fica <a href="http://github.com/bmentges/dotfiles/tree/master">aqui</a>.</p>
<p>Continuando no desktop, configurei meus desktops virtuais para uma matriz 2&#215;3. No primeiro desktop fica o emacs e um terminal. No segundo, tudo de comunicação: email e gtalk/y!, no terceiro fica tudo que me faz procrastinar: basicamente o google reader, no 4o fica o browser onde testo a aplicação que ta sendo desenvolvida no primeiro desktop, no 5o e 6o alguns terminais rodando os servidores/logs/e qualquer lixo que eu resolva abrir. Denovo, dando o mérito a quem é de direito, isso também foi dica do Vitor Pellegrino.</p>
<p>O próximo passo era gerenciar meu tempo melhor. Ainda não tinha achado nada eficiente para resolver esse problema. É engraçado, quando você fica genuinamente querendo resolver um problema para melhorar sua vida e só aí passa a enxergar as soluções a sua volta. Coincidentemente, o <a href="http://twitter.com/unclebobmartin">@unclebobmartin</a> twittou outro dia sobre a técnica do tomate (<a href="http://www.pomodorotechnique.com">Pomodoro Technique</a>). Por mais engraçado e simples que esta técnica possa parecer, resolvi testar, até porque o Uncle Bob e o Jim Weirich, duas pessoas que admiro, a utilizam. Venho tendo muito sucesso, meus amigos até me perguntam se eu estou dentro de um &#8220;pomodoro&#8221; quando querem falar comigo.</p>
<p>A técnica do pomodoro consiste basicamente em ter um timer (aqueles de cozinha) setado para 25 minutos, o que ele chama de um Pomodoro, e trabalhar em uma tarefa do seu to-do list. Ao acabar o pomodoro, devo descansar 5 minutos antes de iniciar o próximo. A cada 4 pomodoros, descanso 15 minutos. Entre cada pomodoro é a única hora que posso ir para meu desktop da procrastinação (o terceiro desktop), fazer pausa para ir ao banheiro, encher a garrafa de água, enfim, qualquer coisa não relacionada ao trabalho. Existem mais detalhes sobre a técnica, como por exemplo como registrar os pomodoros (to-do list), etc. Recomendo a leitura do livro no site (é gratuito) a quem interessar.</p>
<p>É claro que todas essas escolhas funcionaram para mim, mas podem não funcionar para todos. Não existe uma única maneira eficiente de melhorar sua produtividade, acredito que cada um deve buscar a sua. O mais importante é tentar melhorar continuamente e ser honesto consigo mesmo, identificando o que realmente pode estar atrapalhando tudo (dica: Geralmente é algo que você gosta muito).</p>
<p>Gostaria aqui de agradecer ao pessoal do meu time por todo o apoio, feedback e toda a ajuda para que eu pudesse identificar e implementar tudo isso, em especial agradeço a: <a href="http://vp.blog.br/">Vitor Pellegrino</a>, <a href="http://gcirne.wordpress.com/">Guilherme Cirne</a>, <a href="http://www.anselmoalves.com/">Anselmo Alves</a> e <a href="http://programandosemcafeina.blogspot.com/">Tiago Motta</a>. Sou fã de todos vocês individualmente !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/05/04/2009/buscando-ser-mais-produtivo/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Rails Summit, eu vou</title>
		<link>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/</link>
		<comments>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 16:00:09 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/</guid>
		<description><![CDATA[Dias 15 e 16 de outubro estarei em São Paulo para prestigiar o evento Rails Summit. Vou com o Guilherme Chapiewski e espero encontrar todo mundo lá. O evento vai contar com palestras de desenvolvedores importantes como David Chelimsky, Chad Fowler, Jay Fields, Carlos Vilella, Os koreanos da Phusion (]]></description>
			<content:encoded><![CDATA[<p>Dias 15 e 16 de outubro estarei em São Paulo para prestigiar o evento <a title="http://site.locaweb.com.br/railssummit" href="http://site.locaweb.com.br/railssummit">Rails Summit</a>. Vou com o Guilherme Chapiewski e espero encontrar todo mundo lá. O evento vai contar com palestras de desenvolvedores importantes como David Chelimsky, Chad Fowler, Jay Fields, Carlos Vilella, Os koreanos da Phusion (<3 passenger), Charles Nutter, Danilo Sato, Fabio Kung e Obie Fernandez.</p>
<p>Nos vemos lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/26/09/2008/rails-summit-eu-vou/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Criando um Product Backlog, parte 1</title>
		<link>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/</link>
		<comments>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 00:26:48 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Sem Categoria]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/</guid>
		<description><![CDATA[Recentemente um dos nossos clientes internos na globo.com pediu para que nós os ajudássemos a elaborar um product backlog para uma nova versão de seu produto. Eu representando o lado técnico, um product owner, um arquiteto da informação e um designer fomos escolhidos para tal atividade.
Product backlog é um documento de alto nível do projeto. [...]]]></description>
			<content:encoded><![CDATA[<p>Recentemente um dos nossos clientes internos na <a title="http://www.globo.com" href="http://www.globo.com">globo.com</a> pediu para que nós os ajudássemos a elaborar um product backlog para uma nova versão de seu produto. Eu representando o lado técnico, um product owner, um arquiteto da informação e um designer fomos escolhidos para tal atividade.</p>
<p>Product backlog é um documento de alto nível do projeto. Nele é contido todas as features, wish-lists, etc. que o cliente deseja para o sistema descritas de uma maneira bem abrangente e na linguagem do cliente, que chamamos de &#8220;histórias&#8221;. Cada história contém também uma estimativa de complexidade e o valor de negócio da mesma para o cliente, para facilitar na priorização.</p>
<p>Um exemplo de uma história é o seguinte: &#8220;<em>Para poder ter uma experiência melhor assistindo um vídeo, eu como usuário gostaria de poder assistir o vídeo em tela cheia</em>&#8220;.</p>
<p>A primeira etapa foi marcar uma reunião com os envolvidos para ouvir deles o que eles tem hoje, o que os atrapalha, e o que eles querem para resolver seus problemas. Do ponto de vista técnico, que é o que vos apresento, o maior desafio é se ater ao &#8220;O QUÊ&#8221; ao invés do &#8220;COMO&#8221;. Ouvir o que eles querem fazer, o que eles precisam, o que os atrapalha, etc. Por vezes me peguei com vontade de perguntar se queriam isso dessa ou daquela forma, e precisei me conter para não tirar o foco da reunião.</p>
<p>Depois dessa reunião nós tivemos uma visão mais clara da necessidade de nossos futuros clientes e resolvemos reunir o time e conversar a respeito, visto que serão eles (e eu) que iremos desenvolver o produto. Essa reunião foi muito produtiva pois levantou diversos pontos que ainda precisavam ser trabalhados.</p>
<p>Já aí temos alguns pontos desse nosso processo:</p>
<p>1. Se reunir com o time do cliente e o cliente e ouvir deles os &#8220;<strong>o quês</strong>&#8221;<br />
2. Se reunir com o seu time e discutir os pontos levantados<br />
3. Marcar uma reunião com o cliente e o time do cliente para dar este primeiro <em>feedback</em>.</p>
<p>Como podemos ver, a presença do cliente é fundamental. E esse ciclo de reuniões já produz um primeiro <em>feedback</em>. Tivemos uma nova reunião para passar o feedback e atacar os pontos levantados. Tudo isso foi feito em menos de uma semana, o que é o mote das práticas ágeis: ciclos curtos de feedback.</p>
<p>A partir destes 3 pontos já é possível rascunhar um primeiro product backlog. E, como seguimos o <a title="http://en.wikipedia.org/wiki/Scrum_(development)" href="http://en.wikipedia.org/wiki/Scrum_(development)">scrum</a> e práticas ágeis, isso não é nenhum problema, pois o product backlog é aberto e modificável.</p>
<p>Essa foi a parte 1 do processo de criação do product backlog. Em breve estarei escrevendo o próximo da série, enquanto avançamos com a criação product backlog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/14/09/2008/criando-um-product-backlog-parte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O desafio de criar a visão do projeto</title>
		<link>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/</link>
		<comments>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/#comments</comments>
		<pubDate>Thu, 22 May 2008 03:48:50 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Negócios]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/</guid>
		<description><![CDATA[No Scrum nosso de cada dia, existe um papel que eu considero o mais difícil de todos: o Product Owner (daqui pra frente, P.O). No Scrum, o P.O. representa o interesse do cliente e é o responsável por definir a visão do projeto, traçar uma estratégia para atingir essa visão incluindo histórias no backlog e [...]]]></description>
			<content:encoded><![CDATA[<p>No <a title="http://en.wikipedia.org/wiki/Scrum_(development)" href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> nosso de cada dia, existe um papel que eu considero o mais difícil de todos: o <strong>Product Owner</strong> (daqui pra frente, P.O). No Scrum, o P.O. representa o interesse do cliente e é o responsável por definir a visão do projeto, traçar uma estratégia para atingir essa visão incluindo histórias no backlog e definir o que será desenvolvido e entregue nos Sprints pelo time. Ou seja, ele é o responsável direto pelo <strong>ROI</strong> (Retorno do Investimento).</p>
<p>O meu post hoje foca na visão do projeto e as dificuldades em criá-la, principalmente para um produto já existente, que é o caso da empresa <a title="www.globo.com" href="http://www.globo.com">onde trabalho</a>, que há algum tempo resolveu adotar o Scrum.</p>
<p>A <strong>visão do projeto</strong> é basicamente o que o nome diz: é o motivo para ele existir, sua filosofia e seus conceitos de negócio. No cenário de projetos, existe uma característica que os difere de produtos: projetos tem início, meio e fim. Já para produtos, que é o nosso caso, o P.O. deve não apenas criar uma visão, como também uma expectativa a longo prazo para o produto, e definir limites. Até onde é responsabilidade do produto e até onde queremos chegar.</p>
<p>Essa visão deve ser adaptativa, pois o mundo muda muito rápido, e agilidade em mudar de rumo é vantagem competitiva hoje. Nisso, o Scrum ganha de longe de outras metodologias: você tem entregas em sprints curtos e a próxima entrega ainda será definida, o que dá muita margem para mudanças.</p>
<p>E como fazer quando você quer migrar pro Scrum e você não tinha apenas um stakeholder, de um produto que já existe há pelo menos cinco anos, mas sim vários ?</p>
<p>A primeira coisa a se fazer, acredito, seria pegar todos os requisitos pendentes, ou seja, os já existentes do sistema e organizá-los em histórias, do tipo: &#8220;Eu como usuário gostaria de assistir vídeos no linux (em flash)&#8221;, ou &#8220;Eu como Product Owner gostaria de disponibilizar o player para que outros sites possam incluí-lo (embedded)&#8221;. Com todas essas histórias que o produto tinha pela frente postas no papel você consegue ter uma visão geral da direção que o produto estava seguindo.</p>
<p>Descobrindo essa direção você pode: ou se ater à direção atual ou definir uma nova e criar novas histórias para que o produto começe a mudar de direção. O importante é ter essa direção, que não é fácil, diga-se de passagem. Com a direção definida você provavelmente terá agora mais facilidade em estimar o <strong>valor de negócio</strong> de cada história (valor esse de 0 a 100). O valor de negócio é uma métrica de quanto uma história traria de valor para a empresa em comparação com outra.</p>
<p>Para iniciar essa definição, pegue a história que tenha o menor valor de negócio e estime um número baixo para usar de referência, como 2 por exemplo. Daí, vá pegando as outras histórias e comparativamente dando seus valores de negócio. Rapidamente você terá um quadro bem definido com quais histórias provavelmente você irá atacar nos próximos sprints e conseguirá antever pelo menos 2 ou 3 entregas.</p>
<p>Nisso, é hora de comunicar ao time a estratégia do produto e as histórias que você pretende atacar no futuro próximo. No Sprint Planning 1, que é a primeira de duas reuniões que definem um sprint, o time irá estimar <strong>a complexidade</strong> que cada história tem e encaixar no Sprint (que no nosso caso leva 2 semanas) aquilo que o time consegue se comprometer em entregar. São também definidos nessa reunião, pelo P.O., o <a title="http://agilefaq.net/2007/10/24/what-is-definition-of-done/" href="http://agilefaq.net/2007/10/24/what-is-definition-of-done/">DoD</a> (Definition of Done, ou em português: Definição de Terminado) e os critérios de aceitação.</p>
<p>Com isso tudo feito, é só correr para o abraço. Com o time a par da visão e o sprint definido e bem detalhado, o P.O. poderá ter a certeza que caso ele precise mudar de estratégia, será tão simples como colocar mais itens no backlog do produto, estimar o valor de negócio, re-estimar ou mesmo remover histórias do backlog (não os do sprint atual, claro).</p>
<p>Uma experiência legal que tivemos aqui foi que a nossa P.O. marcou uma reunião para nos passar a visão do projeto, ouvir idéias e ter um feedback do que o time gostaria de sugerir para a plataforma <a title="http://video.globo.com/" href="http://video.globo.com/">que trabalhamos</a>. O formato da reunião foi o seguinte: Reunimos os dois times que participam do projeto dessa plataforma e de outra plataforma relacionada, misturamos todos e dividimos em dois grupos. Cada grupo teve meia hora para fazer um brainstorm de idéias, colocá-las no papel, sem que ninguém pudesse criticar a idéia do outro, apenas contribuir com as suas. Depois disso (por incrível que pareça, eram 4 folhas A4 de idéias para cada grupo), nós deveríamos discutir as idéias por mais meia hora, eliminando as idéias que fossem claramente ruins. Após essa primeira eliminação e discussão, cada grupo teve 10 minutos para escolher as top 10 idéias.</p>
<p>Foi impressionante como as idéias se mesclavam no final. Das duas listas top 10, conseguimos 12 ou 13 idéias muito boas, e as outras 7 que sobraram eram repetidas. O timebox da reunião foi de 2:30 horas. Em 2 horas e meia conseguimos ver qual a visão a médio e longo prazo da plataforma, ter uma noção muito maior do que é a nossa plataforma para a empresa como um todo e sugerir idéias para melhorar, mudar e acrescentar valor ao projeto.</p>
<p>Off-topic: Como as reuniões estão mais produtivas, depois que adotamos o Scrum&#8230; mas isso é assunto pra outro post. Voltando ao tópico e para concluir, esse é o maior desafio, na minha opinião, em uma migração para Scrum: Definir a visão dos projetos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/22/05/2008/o-desafio-de-criar-a-visao-do-projeto/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Daily Meeting é comprometimento</title>
		<link>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/</link>
		<comments>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/#comments</comments>
		<pubDate>Mon, 19 May 2008 15:15:04 +0000</pubDate>
		<dc:creator>Bruno Mentges de Carvalho</dc:creator>
				<category><![CDATA[Negócios]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/</guid>
		<description><![CDATA[Desde que adotamos Scrum na empresa que trabalho, tivemos um impacto enorme no resultado de nossos projetos. A velocidade, conformidade com os requisitos e qualidade dos nossos produtos aumentaram drasticamente. Mas isso não quer dizer que não tivemos nossos problemas ao implementar o Scrum. Hoje quero falar um pouco de uma das mais importantes práticas [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que adotamos <a title="http://en.wikipedia.org/wiki/Scrum_%28development%29" href="http://en.wikipedia.org/wiki/Scrum_%28development%29">Scrum</a> na <a title="www.globo.com" href="http://www.globo.com">empresa que trabalho</a>, tivemos um impacto enorme no resultado de nossos projetos. A velocidade, conformidade com os requisitos e qualidade dos nossos produtos aumentaram drasticamente. Mas isso não quer dizer que não tivemos nossos problemas ao implementar o Scrum. Hoje quero falar um pouco de uma das mais importantes práticas do Scrum e alguns dos empecilhos que encontramos.</p>
<p>O <a title="http://en.wikipedia.org/wiki/Scrum_%28development%29#The_Scrum_meeting" href="http://en.wikipedia.org/wiki/Scrum_%28development%29#The_Scrum_meeting">Daily Meeting</a> é uma reunião do Scrum que ocorre todos os dias e tem as seguintes características:</p>
<ul>
<li>Ela deve ocorrer diariamente e sempre no mesmo horário, que pode ser decidido pelo time no Sprint Planning, e preferencialmente ser sempre pela manhã.</li>
<li>O Time e o Scrum Master devem estar presentes.</li>
<li>A reunião tem um timebox de 15 minutos e não deve ultrapassar esse tempo.</li>
<li>Cada participante do time deve responder a tres perguntas: &#8220;O que fiz ontem?&#8221;, &#8220;O que farei hoje?&#8221; e &#8220;O que está me impedindo?</li>
<li>Todos devem estar de pé. (Afinal, são só 15 minutos)</li>
<li>Qualquer um pode assistir a reunião, como chicken* (chicken não pode falar durante a reunião).</li>
</ul>
<p>Eu faço parte de um time, composto por desenvolvedores, designer e arquiteto da informação. Somos 8 pessoas e o<strong> comprometimento</strong> e a <strong>participação ativa</strong> de todos do time é extremamente importante para o sucesso do sprint e consequentemente do projeto como um todo.</p>
<p>O horário oficial de chegada da empresa é as 9:30 da manhã,  e nosso time decidiu que o Daily Meeting aconteceria as 10:45. Ainda assim, temos pessoas que chegam atrasado, por motivos diversos. Quando alguém atrasa e não avisa, acontecem diversos efeitos colaterais nocivos ao scrum, como o time não saber se aquela pessoa terminou o trabalho dela, se ela tá tendo problemas ou impedimentos, e o que ela planejava fazer hoje.</p>
<p>Nosso time, em conjunto com o scrum master, começou a elaborar punições. A primeira punição foi que se alguém atrasasse e não tivesse um motivo convincente pra isso (ex. Problemas médicos e tal), o Daily Meeting seria adiantado 15 minutos até o fim do Sprint. Ou seja, alguém atrasou, o Daily Meeting iria pra 10:30, depois 10:15, depois 10:00&#8230; até chegar na hora oficial da empresa (9:30).</p>
<p>Essa primeira punição ficou muito rígida, pois não tinha uma contra-moeda pra voltar o tempo e quanto mais cedo o Daily Meeting ficava, mais difícil era de ter todo mundo presente em tempo (trabalhamos num local distante no Rio de Janeiro). Então adaptamos para que se o time ficasse 4 dias sem atrasar, e tivesse alguma penalidade já em prática, essa penalidade seria reduzida em 15 minutos, ou seja, se alguém do time se atrasasse e o daily meeting caísse de 10:45 para 10:30, bastava o time conversar com o cara e o time todo vir 4 dias sem atraso algum para voltar pra 10:45.</p>
<p>Inacreditavelmente isso ainda não funcionou. Ainda assim continuávamos tendo problemas de atraso. Todos sempre esporádicos, mais ainda assim acontecia (no final do Sprint de 10 dias, o daily meeting já estava em 10:15). Todos sentamos pra conversar e ver se não havia ninguém desestimulado, ou com vontade de trocar de time, ou insatisfeito em geral com qualquer coisa, mesmo que pessoal. Após uma longa conversa chegamos a um novo e mais flexível sistema de punição: Se qualquer pessoa for se atrasar por qualquer motivo, deve ligar com pelo menos ~20 minutos de antecedência do daily meeting para o Scrum Master e avisar que vai se atrasar, e contar o que fez e o que está impedindo.</p>
<p>Se isso fosse respeitado, o daily meeting continuaria no mesmo horário e demonstraria que a pessoa estava comprometida em não prejudicar o time todo, mesmo que tivesse um problema qualquer (trânsito, despertador que não toca, sono profundo, etc). E ficaria a cargo do Scrum Master e da gerência controlar quem abusa e quem não abusa de chegar atrasado, ou seja, separar os casos esporádicos dos crônicos e resolver como a empresa achar correto.</p>
<p>Ficamos de usar esse processo flexível nesse sprint para ver como vamos nos sair. Queria saber como você, que também tem esse problema, o enfrenta (E quem não tem, qual a fórmula mágica <img src='http://www.brunocarvalho.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) ? Comente !</p>
<p>UPDATE: (Acertos para refletir o que espero do post)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brunocarvalho.com/19/05/2008/daily-meeting-e-comprometimento/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
