<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Blog Pronus</title>
	
	<link>http://pronus.eng.br/blog</link>
	<description />
	<lastBuildDate>Thu, 06 May 2010 12:45:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BlogPronus" /><feedburner:info uri="blogpronus" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Turmas de junho em São Paulo e Brasília do curso de Gerência de Configuração de Software com Trac e Subversion</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/LFfegQrTUqc/turmas-de-junho-em-sao-paulo-e-brasilia-do-curso-de-gerencia-de-configuracao-de-software-com-trac-e-subversion</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/turmas-de-junho-em-sao-paulo-e-brasilia-do-curso-de-gerencia-de-configuracao-de-software-com-trac-e-subversion#comments</comments>
		<pubDate>Thu, 06 May 2010 12:45:37 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[treinamento]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=437</guid>
		<description><![CDATA[Estão abertas as inscrições para as turmas de junho do curso de Gerência de Configuração de Software com Trac e Subversion que acontecerão em São Paulo &#8211; SP e Brasília &#8211; DF. As datas e os links para cada turma seguem abaixo: São Paulo &#8211; SP: Módulo Básico: 07 e 08 (manhã) de junho de [...]]]></description>
			<content:encoded><![CDATA[<p>Estão abertas as inscrições para as turmas de junho do curso de Gerência de Configuração de Software com Trac e Subversion que acontecerão em São Paulo &#8211; SP e Brasília &#8211; DF. As datas e os links para cada turma seguem abaixo:</p>
<p>São Paulo &#8211; SP:</p>
<ul>
<li><a href="http://www.pronus.eng.br/calendario/evento.php?turma=2161" target="_blank">Módulo Básico: 07 e 08 (manhã) de junho de 2010</a></li>
<li><a href="http://www.pronus.eng.br/calendario/evento.php?turma=2162">Módulo Avançado: 08 (tarde) e 09 de junho de 2010</a></li>
</ul>
<p>Brasília &#8211; DF:</p>
<ul>
<li><a href="http://www.pronus.eng.br/calendario/evento.php?turma=2159" target="_blank">Módulo Básico: 14 e 15 (manhã) de junho de 2010</a></li>
<li><a href="http://www.pronus.eng.br/calendario/evento.php?turma=2160" target="_blank">Módulo Avançado: 15 (tarde) e 16 de junho de 2010</a></li>
</ul>
<p>As reservas podem ser feitas através do <a href="http://www.pronus.eng.br/formularios/reserva_online.php">formulário de inscrição</a>.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/LFfegQrTUqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/turmas-de-junho-em-sao-paulo-e-brasilia-do-curso-de-gerencia-de-configuracao-de-software-com-trac-e-subversion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/turmas-de-junho-em-sao-paulo-e-brasilia-do-curso-de-gerencia-de-configuracao-de-software-com-trac-e-subversion</feedburner:origLink></item>
		<item>
		<title>Controle de versão distribuído é diferente, mas nem tanto</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/7mPm49WPhEA/controle-de-versao-distribuido-e-diferente-mas-nem-tanto</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-versao-distribuido-e-diferente-mas-nem-tanto#comments</comments>
		<pubDate>Mon, 19 Apr 2010 12:19:22 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[gerência de configuração de software]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[comparação]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=391</guid>
		<description><![CDATA[Não há dúvidas de que o controle de versão distribuído (Distributed Version Control System &#8211; DVCS) veio não só pra ficar, mas também para tomar o lugar das ferramentas de controle de versão centralizado. As etapas têm sido as mesmas de quando apareceu o Subversion com a proposta de substituir o CVS: 1. desconfiança, 2. [...]]]></description>
			<content:encoded><![CDATA[<p>Não há dúvidas de que o controle de versão distribuído (<em>Distributed Version Control System</em> &#8211; DVCS) veio não só pra ficar, mas também para tomar o lugar das ferramentas de controle de versão centralizado. As etapas têm sido as mesmas de quando apareceu o Subversion com a proposta de substituir o CVS: 1. desconfiança, 2. curiosidade, 3. interesse, 4. aceitação.</p>
<p>Quem está tendo o primeiro contato com o DVCS geralmente cai na fase 1 (desconfiança). Não conhece como funciona e, por isso, desconfia. Afinal, se funciona do jeito que está (mesmo que não muito bem), pra que mudar?</p>
<p>O pessoal da fase 2 (curiosidade) já leu algo a respeito e está intrigado com as <a href="http://pronus.eng.br/blog/http:/pronus.eng.br/blog/vantagens-e-desvantagens-do-controle-de-versao-distribuido" target="_blank">vantagens que &#8220;dizem&#8221; que o DVCS tem</a>. Mas ainda falta um empurrãozinho para pelo menos tentar experimentar um DVCS pra ver como é.</p>
<p>O objetivo deste artigo é apresentar um experimento simples e rápido mostrando que o modo de trabalho de um DVCS, especificamente o Mercurial, não muda tanto assim do usado no Subversion. Espera-se com isso, levar o leitor mais perto da fase 3: interesse.</p>
<p>O experimento simulará dois usuários trabalhando no mesmo projeto, executando algumas operações bem comuns e básicas de controle de versão através do Mercurial, comparando sempre com o mesmo passo feito pelo Subversion.</p>
<p>Para aproveitar melhor o experimento, é necessário:</p>
<ol>
<li>saber os <a title="Conceitos básicos de controle de versão centralizado e distribuído" href="http://www.pronus.eng.br/artigos_tutoriais/gerencia_configuracao/conceitos_basicos_controle_versao_centralizado_e_distribuido.php?pagNum=0" target="_blank">conceitos básicos do controle de 	versão distribuído</a>;</li>
<li>instalar o <a title="Download do Mercurial" href="http://mercurial.selenic.com/wiki/Download" target="_blank">Mercurial</a> ou o <a title="Download do TortoiseHg" href="http://tortoisehg.bitbucket.org/download/index.html" target="_blank">TortoiseHg</a> na sua 	máquina;</li>
<li>já ter usado o Subversion e ter ele ou o TortoiseSvn instalado na máquina;</li>
</ol>
<p><em>Observação</em>: O experimento será apresentado com operações pela linha de comando por questão de espaço e comodidade. O experimento pode ser feito também através das interfaces gráficas TortoiseHg e TortoiseSVN, que possuem os mesmos comandos usados no roteiro.</p>
<h3>1. Preparando os Repositórios</h3>
<p>Quando se sabe que no DVCS cada desenvolvedor tem um repositório e que um repositório pode se conectar com qualquer outro, logo se imagina que o modelo distribuído é uma anarquia. Na verdade, qualquer desenvolvimento sem regras vira uma bagunça. No modelo distribuído, os repositórios podem ser arranjados em várias topologias e a topologia cliente-servidor é uma delas.</p>
<p>Vamos criar 3 repositórios: um oficial, um para um user 1, e outro para o user 2, sendo esses dois últimos para simular os dois desenvolvedores. A convenção estabelece que não haverá comunicação direta entre o repositório dos desenvolvedores 1 e 2. Apenas através do repositório oficial, exatamente como acontece no modelo centralizado.</p>
<p>O acesso ao repositório oficial, tanto do Mercurial, quanto do Subversion, será feito por acesso local para manter o roteiro simples. No exemplo, será usado o diretório /tmp (que é o diretório temporário do linux) para manter todos os repositórios. Escolha um diretório que melhor lhe convier.</p>
<table class="modelo">
<tbody>
<tr>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<td class="code">hg init /tmp/oficial</td>
<td>svnadmin create /tmp/oficial</td>
</tr>
<tr>
<td>hg clone /tmp/oficial /tmp/user1<br />
hg clone /tmp/oficial /tmp/user2</td>
<td>svn checkout file:///tmp/oficial /tmp/user1<br />
svn checkout file:///tmp/oficial /tmp/user2</td>
</tr>
</tbody>
</table>
<h3><strong>2. Publicação Inicial</strong></h3>
<p>O próximo passo é fazer uma primeira publicação no repositório. Use um arquivo chamado numeros.txt que deverá ser criado no diretório do repositório/cópia de trabalho com o seguinte conteúdo:</p>
<pre class="code">um
dois
três</pre>
<table class="modelo">
<tbody>
<tr>
<th style="border: 0; background: transparent;"></th>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<th rowspan="4">user1</th>
<td>hg add numeros.txt</td>
<td>svn add numeros.txt</td>
</tr>
<tr>
<td>hg status</td>
<td>svn status</td>
</tr>
<tr>
<td>hg commit -m “primeiro commit” -u user1</td>
<td>svn commit -m “primeiro commit” &#8211;username user1</td>
</tr>
<tr>
<td>hg push</td>
<td></td>
</tr>
</tbody>
</table>
<p>O Mercurial teve um passo adicional para enviar ao repositório oficial o que foi feito no repositório local.</p>
<h3>3. Vendo o histórico do projeto?</h3>
<table class="modelo">
<tbody>
<tr>
<th style="border: 0; background: transparent;"></th>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<th rowspan="2">user1</th>
<td></td>
<td># é necessário atualizar a cópia de trabalho	antes para ficar na última revisão<br />
svn update</td>
</tr>
<tr>
<td>hg log</p>
<p>changeset: 0:aa3f592139e5<br />
tag: tip<br />
user: user1<br />
date: Sun Apr 18 15:31:40 2010 -0300<br />
summary: primeiro commit</td>
<td>svn log</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r1 | user1 | 2010-04-18 15:30:13 -0300 (Dom, 18 Abr 2010) | 1 line<br />
primeiro commit<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</td>
</tr>
</tbody>
</table>
<p>Note que o Mercurial também fornece uma numeração sequencial além da identificação da revisão por hash. Esta numeração é <em>válida apenas para o repositório local</em> e foi criada por comodidade, para facilitar a referência a uma revisão em comandos locais, ao invés de se usar o identificador <em>hash</em>.</p>
<h3>4. Atualização do Repositório do Usuário 2</h3>
<p>O usuário 2 está com seu repositório desatualizado em relação ao repositório oficial. A sincronização se dá pelo comando hg pull -u que já atualiza a área de trabalho acoplada com a última revisão.</p>
<table class="modelo">
<tbody>
<tr>
<th style="border: 0; background: transparent;"></th>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<th>user2</th>
<td>hg pull -u</td>
<td>svn update</td>
</tr>
</tbody>
</table>
<h3>5. Edição Concorrente</h3>
<p>Usuários 1 e 2 executarão mudanças concorrentes no mesmo arquivo. user 1 acrescentará a palavra “zero” na primeira linha enquanto usuário 2 acrescentará “quatro” na última linha. Como as mudanças acontecerão em partes diferentes do mesmo arquivo, a mesclagem ocorrerá sem conflitos.</p>
<table class="modelo">
<tbody>
<tr>
<th style="border: 0; background: transparent;"></th>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<th rowspan="4">user1</th>
<td># edita números.txt</td>
<td># edita números.txt</td>
</tr>
<tr>
<td>hg diff</td>
<td>svn diff</td>
</tr>
<tr>
<td>hg commit -m “zero” -u user1</td>
<td>svn commit -m “zero” &#8211;username user1</td>
</tr>
<tr>
<td>hg push</td>
<td></td>
</tr>
<tr>
<th rowspan="7">user2</th>
<td># edita números.txt</td>
<td># edita números.txt</td>
</tr>
<tr>
<td>hg diff</td>
<td>svn diff</td>
</tr>
<tr>
<td>hg commit -m “quatro” -u user2</td>
<td>svn commit -m “quatro” &#8211;username user2<br />
# falha 1. Veja obs.</td>
</tr>
<tr>
<td>hg push<br />
# falha 2. Veja obs.</td>
<td></td>
</tr>
<tr>
<td>hg pull<br />
hg merge</td>
<td>svn update</td>
</tr>
<tr>
<td>hg commit -m “merge” -u user1</td>
<td>svn commit -m “quatro” &#8211;username user2</td>
</tr>
<tr>
<td>hg push</td>
<td></td>
</tr>
</tbody>
</table>
<p>Descrição das falhas nas operações:</p>
<ol>
<li>O arquivo numeros.txt está desatualizado em relação à última revisão do repositório. É necessário atualizar/mesclar para que seja aceito.</li>
<li>Por padrão, a operação de <em>push</em> não permite que um ramo fique com mais de uma ponta, isto é, tenha bifurcações após a combinação dos grafos de revisões. Qualquer linha individual de desenvolvimento deve ser antes unificada localmente com a linha presente no repositório-oficial antes de ser enviada.</li>
</ol>
<h3>6. Visualização do Grafo de Revisões</h3>
<p>O histórico de revisões do DVCS é um grafo acíclico direcionado (Directed Acyclic Graph – DAG). Na interface gráfica, é possível ver os caminhos sendo bifurcados e reunificados. Pela linha de comando, é necessário antes habilitar o plugin do Mercurial que conseguir ver o grafo textualmente.</p>
<p>Edite o arquivo de configuração do repositório do usuário 2, cujo caminho é /tmp/user2/.hg/hgrc e adicione as seguintes linhas ao final</p>
<pre class="code">[extensions]
hgext.graphlog =</pre>
<table class="modelo">
<tbody>
<tr>
<th style="border: 0; background: transparent;"></th>
<th>Mercurial</th>
<th>Subversion</th>
</tr>
<tr>
<th>user2</th>
<td>hg glog</td>
<td>svn log</td>
</tr>
</tbody>
</table>
<pre class="code">@ changeset: 3:3eddeb3252ea
|\ tag: tip
| | parent: 1:f01fe74e7279
| | parent: 2:c3664eb01670
| | user: user2
| | date: Sun Apr 18 22:06:03 2010 -0300
| | summary: merge
| |
| o changeset: 2:c3664eb01670
| | parent: 0:b353a0bdea31
| | user: user2
| | date: Sun Apr 18 22:05:21 2010 -0300
| | summary: quatro
| |
o | changeset: 1:f01fe74e7279
|/ user: user1
| date: Sun Apr 18 22:05:43 2010 -0300
| summary: zero
|
o changeset: 0:b353a0bdea31
user: user1
date: Sun Apr 18 22:04:40 2010 -0300
summary: primeiro commit</pre>
<p>O grafo apresentado mostra que as revisões produzidas pelos usuários 1 e 2 formaram linhas independentes de desenvolvimento que depois foram reunificadas.</p>
<h3>Conclusões</h3>
<p>Usando o Mercurial na topologia cliente-servidor, com um repositório oficial equivalente ao repositório central do Subversion, nota-se que não há nenhuma grande mudança na forma do trabalho, nem nos comandos, que são idênticos para a maioria das operações. A impressão que se tem é de que o Mercurial é um Subversion com <em>push</em> e <em>pull</em>.</p>
<p>À primeira vista, parece que o Mercurial precisa de mais comandos para fazer a mesma coisa que se faz no Subversion. A razão disso, e que só é mostrado quando se vê o grafo de revisões, é que cada desenvolvedor trabalha em uma linha independente, equivalente a um ramo privativo, no qual pode publicar suas revisões sem a obrigatoriedade de mesclar com outra revisão a cada etapa, que é o que acontece no Subversion. O resultado é um fluxo de trabalho ainda melhor que no modelo centralizado.</p>
<p>No Mercurial, e em DVCS em geral, todo desenvolvedor trabalha naturalmente em um ramo privativo. O mesmo resultado poderia ser obtido no Subversion definindo-se ramos privativos para cada desenvolvedor a cada tarefa, bug etc. a ser implementado. Quem já usou ou tentou usar uma solução assim no Subversion, sabe quanto é trabalhoso e complicado fazer isso.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/7mPm49WPhEA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-versao-distribuido-e-diferente-mas-nem-tanto/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-versao-distribuido-e-diferente-mas-nem-tanto</feedburner:origLink></item>
		<item>
		<title>Livros de programação disponíveis para download</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/D49bbwntKXE/livros-de-programacao-disponiveis-para-download</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/livros-de-programacao-disponiveis-para-download#comments</comments>
		<pubDate>Fri, 09 Apr 2010 21:19:50 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[gerência de configuração de software]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=384</guid>
		<description><![CDATA[Indico um link para diversos livros (em inglês) de programação disponíveis para download grátis. São livros sobre diversas linguagens de programação: Python, Ruby, C, C#, C++, CGI, JavaScript, Perl, Delphi, Pascal, Haskell, Java, Lisp, PHP e Prolog além de programação de jogos e engenharia de software. Os livros estão em formatos para leitura online e [...]]]></description>
			<content:encoded><![CDATA[<p>Indico um <a href="http://www.e-booksdirectory.com/programming.php" target="_blank">link para diversos livros (em inglês) de programação disponíveis para download grátis</a>. São livros sobre diversas linguagens de programação: Python, Ruby, C, C#, C++, CGI, JavaScript, Perl, Delphi, Pascal, Haskell, Java, Lisp, PHP e Prolog além de programação de jogos e engenharia de software.</p>
<p>Os livros estão em formatos para leitura online e para download.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/D49bbwntKXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/livros-de-programacao-disponiveis-para-download/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/livros-de-programacao-disponiveis-para-download</feedburner:origLink></item>
		<item>
		<title>Lançada a versão 1.5 do Mercurial e a versão 1.0 do TortoiseHg</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/Zkg-A7nuzaw/lancada-a-versao-1-5-do-mercurial-e-a-versao-1-0-do-tortoisehg</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-5-do-mercurial-e-a-versao-1-0-do-tortoisehg#comments</comments>
		<pubDate>Fri, 12 Mar 2010 15:07:13 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=371</guid>
		<description><![CDATA[Mercurial continua evoluindo em ritmo firme e constante. Chega agora a versão 1.5 com diversas melhorias no núcleo, extensões, interface web, Windows e documentação. A lista completa está disponível neste link mas aí vão alguns destaques: Melhoria no comportamento do comando heads para ramos nomeados. Nova opção -b/--branch para definir um ramo específico para os comandos [...]]]></description>
			<content:encoded><![CDATA[<p>Mercurial continua evoluindo em ritmo firme e constante. Chega agora a versão 1.5 com diversas melhorias no núcleo, extensões, interface web, Windows e documentação. A lista completa está disponível <a href="http://mercurial.selenic.com/wiki/WhatsNew" target="_blank">neste link</a> mas aí vão alguns destaques:</p>
<ul>
<li>Melhoria no comportamento do comando <tt>heads</tt> para ramos nomeados.</li>
<li>Nova opção <tt>-b/--branch</tt> para definir um ramo específico para os comandos <tt>clone, bundle, incoming, outgoing, pull</tt> e <tt>push</tt>.</li>
<li>Suporte a certificados de servidor SSL e melhoria no suporte a IPv6</li>
<li><tt>subrepos</tt> agora com suporte básico ao Subversion. <tt>Subrepos</tt> é uma área do Mercurial que tem evoluído bastante. O objetivo é tratar um repositório e seus subrepositórios como um grupo, tal como é feito no Subversion com o <tt>svn:externals</tt>.</li>
<li>Suporte a plugins de autorização.</li>
<li>Adição de script WSGI para IIS isapi-wsgi</li>
</ul>
<p>A atualização de versão é recomendada a todos os usuários.</p>
<p>Para quem usa Linux e linha de comando, a melhor forma de instalar continua sendo o <tt><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">easy_install</span></tt>, ao invés dos pacotes da distribuição Linux. Note que o Mercurial precisa compilar umas partes escritas em C e por isso precisa do pacote <tt><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">python-dev</span></tt>. A seguir os comandos necessários para instalar o Mercurial no Ubuntu:</p>
<pre class="code">sudo apt-get install python-setuptools python-dev
sudo easy_install Mercurial</pre>
<p>Para quem usa Windows, a melhor opção é instalar pelo TortoiseHg, que já instala o Mercurial automaticamente.</p>
<h2>TortoiseHg 1.0</h2>
<p>O <a href="http://tortoisehg.bitbucket.org/">TortoiseHg</a> também está com versão nova: <a href="http://bitbucket.org/tortoisehg/stable/wiki/ReleaseNotes#tortoisehg-10" target="_blank">versão 1.0</a>. O pacote de instalação pode ser obtido a partir <a href="http://tortoisehg.bitbucket.org/download/index.html" target="_self">deste link</a>.</p>
<p>O TortoiseHg também funciona no Linux, e ajuda bastante em algumas operações tais como visualização de diferenças e do histórico de log, que são ruins de ver pela linha de comando só usando o <tt>hg diff</tt> ou <tt>hg log</tt> por exemplo. A não ser que você use o  <tt>Gnome/Nautilus</tt>, com o qual se integra, a ativação do TortoiseHg no Linux é ser feita pela linha de comando usando o comando <tt>hgtk</tt> e seus subcomandos.</p>
<p>A instalação do TortoiseHg no Linux pode ser feita pelos pacotes da distribuição ou pelo <tt>easy_install</tt>:</p>
<pre class="code">sudo easy_install http://bitbucket.org/tortoisehg/targz/downloads/tortoisehg-1.0.tar.gz</pre>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/Zkg-A7nuzaw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-5-do-mercurial-e-a-versao-1-0-do-tortoisehg/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-5-do-mercurial-e-a-versao-1-0-do-tortoisehg</feedburner:origLink></item>
		<item>
		<title>Controle de Mudança Distribuído é necessário?</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/g2y3nMF4cxg/controle-de-mudanca-distribuido-e-necessario</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-mudanca-distribuido-e-necessario#comments</comments>
		<pubDate>Tue, 09 Feb 2010 11:34:36 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[gerência de configuração de software]]></category>
		<category><![CDATA[bug tracking]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=355</guid>
		<description><![CDATA[Controle de mudança distribuído (Distributed Bug Tracking &#8211; DBT)  parece ser um complemento natural para o controle de versão distribuído (DVCS &#8211; Distributed Version Control Systems); o desenvolvedor trabalharia de modo autônomo em seus tickets e depois sincronizaria com os outros desenvolvedores, da mesma forma que faz com o DVCS. Projetos open source de DVCS [...]]]></description>
			<content:encoded><![CDATA[<p>Controle de mudança distribuído (Distributed Bug Tracking &#8211; DBT)  <em>parece</em> ser um complemento natural para o controle de versão distribuído (DVCS &#8211; Distributed Version Control Systems); o desenvolvedor trabalharia de modo autônomo em seus tickets e depois sincronizaria com os outros desenvolvedores, da mesma forma que faz com o DVCS.</p>
<p>Projetos open source de DVCS começaram a aparecer em 2005 e vêm se tornando cada vez mais populares a cada dia, particularmente o Mercurial e o Git. Mas é curioso notar que não há nenhum projeto de DBT de renome, nem tem aparecido variações ou extensões de ferramentas centralizadas que as tornem distribuídas. Algumas tentativas de produzir um DBT não prosperaram; os projetos se encontram parados ou se tornaram apenas uma prova de conceito, sem conseguir grande aceitação:</p>
<ul type="disc">
<li><a href="http://bugseverywhere.org/be/show/HomePage">Bugs Everywhere</a>. Embora a página do projeto tenha sido revisada em 06/02/2010, o projeto parece abandonado, documentação inexistente e o link para o código fonte do projeto está quebrado (pelo menos no momento em que esse artigo está sendo escrito).</li>
<li><a href="http://www.distract.wellquite.org/">DisTract</a>. Parado desde 2007.</li>
<li><a href="http://www.ditrack.org/">DITrack</a>. Abandonado em junho de 2008</li>
<li><a href="http://ditz.rubyforge.org/">Ditz</a>. Parado desde novembro de 2008.</li>
<li><a href="http://wiki.github.com/schacon/ticgit">TicGit</a>. Tem tido alguma <a href="http://github.com/jeffWelling/ticgit/commits/master">atividade recente</a>.</li>
<li><a href="http://wiki.github.com/schacon/ticgit"></a><a href="http://www.fossil-scm.org" target="_blank">Fossil</a>. Controle integrado de versão e de mudança distribuído. Não é baseado em nenhuma outra ferramenta distribuída já existente tal como o Mercurial. Vem sendo <a href="http://www.fossil-scm.org/fossil/timeline" target="_blank">produzido ativamente</a>.</li>
</ul>
<h2>Por que o Controle de Mudança Distribuído não Vingou?</h2>
<p>O fato é que <strong>controle de versão é uma ferramenta para o programador, mas o controle de mudança é uma ferramenta para o projeto</strong>.</p>
<p>O controle de mudança tem o papel de aglutinar as necessidades do projeto, coordenar os esforços dos desenvolvedores e direcionar a evolução do projeto. É uma ferramenta de comunicação e colaboração entre desenvolvedores que funciona melhor de modo centralizado.</p>
<p>Imagine uma situação em que toda a equipe use um DBT. Cada desenvolvedor cria seus próprios tickets, páginas wiki, define milestones e organiza suas prioridades. Como juntar depois todas essas informações de uma maneira coerente para o projeto? Quem definiria as prioridades?</p>
<p>A facilidade de criar e editar tickets offline não compensa a complicação que um DBT introduziria no processo de desenvolvimento. Embora um DBT seja tecnicamente interessante, é uma aplicação procurando uma necessidade para preencher.</p>
<p>Acredito que o controle de versão vai caminhar para o modelo distribuído, mas o controle de mudança permanecerá centralizado.</p>
<h2>Links Relacionados</h2>
<ul>
<li><a href="http://www.ericsink.com/entries/dbts_fossil.html" target="_blank">DVCS and Bug Tracking</a>.</li>
<li><a href="http://community.livejournal.com/evan_tech/248736.html" target="_blank">http://community.livejournal.com/evan_tech/248736.html</a></li>
<li><a href="http://dist-bugs.kitenet.net/software/" target="_blank">http://dist-bugs.kitenet.net/software/</a>. Uma lista mais completa de ferramentas de DBT.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/g2y3nMF4cxg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-mudanca-distribuido-e-necessario/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/controle-de-mudanca-distribuido-e-necessario</feedburner:origLink></item>
		<item>
		<title>Codeplex passa a usar Mercurial como controle de versão padrão</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/4QMn4qmwOYs/codeplex-passa-a-usar-mercurial-como-controle-de-versao-padrao</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/codeplex-passa-a-usar-mercurial-como-controle-de-versao-padrao#comments</comments>
		<pubDate>Wed, 03 Feb 2010 22:27:19 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[gerência de configuração de software]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=344</guid>
		<description><![CDATA[Codeplex é um portal da Microsoft para hospedagem de projetos open source, similar ao SourceForge e Google Code. Conforme anunciado, o Codeplex agora passa a suportar nativamente o Mercurial como controle de versão (a outra opção é o TeamSource, da própria Microsoft). Entre os motivos apontados para a escolha do Mercurial, está a popularidade da [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codeplex.com/" target="_blank">Codeplex</a> é um portal da Microsoft para hospedagem de projetos open source, similar ao <a href="http://sourceforge.net/" target="_blank">SourceForge</a> e <a href="http://code.google.com/intl/pt-BR/" target="_blank">Google Code</a>. Conforme <a href="http://blogs.msdn.com/codeplex/archive/2010/01/22/codeplex-now-supporting-native-mercurial.aspx" target="_blank">anunciado</a>, o Codeplex agora passa a suportar nativamente o <a href="http://mercurial.selenic.com/" target="_blank">Mercurial</a> como controle de versão (a outra opção é o TeamSource, da própria Microsoft).</p>
<p>Entre os motivos apontados para a escolha do Mercurial, está a popularidade da ferramenta e o ótimo suporte ao Windows, o que é particularmente importante para o Codeplex, claro.</p>
<p>Sem entrar nos méritos da combinação Microsoft e open source, o fato é que o Mercurial vem sendo usado cada vez mais por provedores de hospedagem de projetos. Os próprios SourceForge e Google Code já oferecem suporte ao Mercurial.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/4QMn4qmwOYs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/codeplex-passa-a-usar-mercurial-como-controle-de-versao-padrao/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/codeplex-passa-a-usar-mercurial-como-controle-de-versao-padrao</feedburner:origLink></item>
		<item>
		<title>Curso de Gerência de Configuração de Software em São Paulo em Fevereiro de 2010</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/qB2WYxi_sVI/curso-de-gerencia-de-configuracao-de-software-em-sao-paulo-em-fevereiro-de-2010</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/curso-de-gerencia-de-configuracao-de-software-em-sao-paulo-em-fevereiro-de-2010#comments</comments>
		<pubDate>Mon, 14 Dec 2009 17:05:30 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[subversion]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[treinamento]]></category>
		<category><![CDATA[treinamento gcs]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=341</guid>
		<description><![CDATA[Estão abertas as inscrições para a próxima turma de Gerência de Configuração de Software com Trac e Subversion. O curso será nos dias 01, 02 e 03 de fevereiro de 2010, em São Paulo &#8211; SP, na av. Paulista. Para mais detalhes, clique nos links dos dias do curso diretamente no calendário de eventos: 01 e 02 [...]]]></description>
			<content:encoded><![CDATA[<p>Estão abertas as inscrições para a próxima turma de Gerência de Configuração de Software com Trac e Subversion. O curso será nos dias 01, 02 e 03 de fevereiro de 2010, em São Paulo &#8211; SP, na av. Paulista. Para mais detalhes, clique nos links dos dias do curso diretamente no <a title="Calendário de Eventos" href="http://www.pronus.eng.br/calendario/index.php?yearID=2010" target="_blank">calendário de eventos</a>:</p>
<ul>
<li><a title="Módulo básico" href="http://www.pronus.eng.br/calendario/evento.php?turma=2150" target="_blank">01 e 02 de fevereiro &#8211; Módulo Básico (12 horas)</a></li>
<li><a title="Módulo de Administração da Ferramentas" href="http://www.pronus.eng.br/calendario/evento.php?turma=2151" target="_blank">02 de fevereiro &#8211; Módulo de Administração das Ferramentas de GCS (4 horas)</a></li>
<li><a title="Módulo Avançado" href="http://www.pronus.eng.br/calendario/evento.php?turma=2152" target="_blank">03 de fevereiro &#8211; Módulo Avançado (8 horas)</a></li>
</ul>
<p>Reservas podem ser feitas diretamente através do <a title="formulário de reserva online" href="http://www.pronus.eng.br/formularios/reserva_online.php" target="_blank">formulário próprio</a>.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/qB2WYxi_sVI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/curso-de-gerencia-de-configuracao-de-software-em-sao-paulo-em-fevereiro-de-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/curso-de-gerencia-de-configuracao-de-software-em-sao-paulo-em-fevereiro-de-2010</feedburner:origLink></item>
		<item>
		<title>Light-Bot: Jogo em Flash com Elementos de Programação</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/fmEdCcPbAbo/light-bot-jogo-em-flash-com-elementos-de-programacao</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/light-bot-jogo-em-flash-com-elementos-de-programacao#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:28:28 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[gerência de configuração de software]]></category>
		<category><![CDATA[ensino]]></category>
		<category><![CDATA[jogo]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=327</guid>
		<description><![CDATA[Sempre fui a favor do uso de jogos para ensino. Em sala de aula,  já usei &#8220;paciência&#8221; para ensinar a mexer com o mouse (arrastar, soltar, duplo clique etc.),  &#8221;campo minado&#8221; para desenvolver certo tipo de raciocínio lógico e Commandos: Behind Enemy Lines (Atrás das linhas Inimigas) em que há alguns recursos com características próprias e [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.howtogeek.com/games/light-bot/" target="_blank"><img class="size-full wp-image-330  aligncenter" title="Light Bot" src="http://pronus.eng.br/blog/wp-content/uploads/2009/08/light_bot.jpg" alt="Jogo de raciocínio relacionado com programação" width="585" height="288" /></a></p>
<p>Sempre fui a favor do uso de jogos para ensino. Em sala de aula,  já usei &#8220;paciência&#8221; para ensinar a mexer com o mouse (arrastar, soltar, duplo clique etc.),  &#8221;campo minado&#8221; para desenvolver certo tipo de raciocínio lógico e <a title="Commandos: Behind Enemy Lines" href="http://pt.wikipedia.org/wiki/Commandos:_Beyond_the_Call_of_Duty" target="_blank">Commandos: Behind Enemy Lines (Atrás das linhas Inimigas)</a> em que há alguns recursos com características próprias e limitadas  que precisam ser usados de maneira combinada e planejada para se conseguir um objetivo.</p>
<p><a title="Light-Bot" href="http://www.howtogeek.com/games/light-bot/" target="_blank">Light-Bot</a> é um jogo simples, inteligente e divertido que utiliza algumas idéias básicas de programação: <strong>sequências</strong> e <strong>rotinas</strong>. O objetivo do jogo é programar o robozinho para acender todas as posições marcadas em azul no tabuleiro. O número de passos são limitados e pode ser necessário usar funções (rotinas) para repetir algumas sequências mais comuns.</p>
<p>Bom divertimento!</p>
<p style="text-align: center;">
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/fmEdCcPbAbo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/light-bot-jogo-em-flash-com-elementos-de-programacao/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/light-bot-jogo-em-flash-com-elementos-de-programacao</feedburner:origLink></item>
		<item>
		<title>Plugin do Mercurial para usar um servidor Git</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/0Vuahqze7DU/plugin-do-mercurial-para-usar-um-servidor-git</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/plugin-do-mercurial-para-usar-um-servidor-git#comments</comments>
		<pubDate>Tue, 18 Aug 2009 12:40:44 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=308</guid>
		<description><![CDATA[Um dos fatores do sucesso do Git é, sem dúvida alguma o GitHub: design elegante e funcional, gráficos interessantes etc.. Suponha que você deseje participar do GitHub ou mesmo usar algum projeto armazenado lá, só resta a opção de usar o Git, certo? Não mais! Com o plugin do Mercurial Hg-Git seus problemas acabaram: você [...]]]></description>
			<content:encoded><![CDATA[<p>Um dos fatores do sucesso do Git é, sem dúvida alguma o <a title="GitHub" href="http://github.com/" target="_blank">GitHub</a>: design elegante e funcional, gráficos interessantes etc.. Suponha que você deseje participar do GitHub ou mesmo usar algum projeto armazenado lá, só resta a opção de usar o Git, certo?</p>
<p>Não mais! Com o <a title="Hg-Git Mercurial Plugin" href="http://hg-git.github.com/" target="_blank">plugin do Mercurial Hg-Git</a> seus problemas acabaram: você pode continuar usando o Mercurial mesmo que o repositório oficial do projeto esteja em Git! Do próprio site:</p>
<blockquote><p>Este é o Hg-Git plugin para Mercurial, que adiciona a habilidade de push e pull de um repositório Git para um repositório Hg. Isto significa que pode-se colaborar em projetos baseados em Git a partir do Hg, ou usar um servidor Git como um ponto de colaboração de um time de desenvolvedores usando tanto o Git quanto o Hg.</p></blockquote>
<p>O plugin foi desenvolvido pelo próprio pessoal do GitHub com o claro e justo intuito de aumentar o público-alvo dos seus serviços, mas amplia bastante as possibilidades de trabalho dos desenvolvedores e projetos que, tal como nós da Pronus, escolheram o Mercurial como DVCS.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/0Vuahqze7DU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/plugin-do-mercurial-para-usar-um-servidor-git/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/plugin-do-mercurial-para-usar-um-servidor-git</feedburner:origLink></item>
		<item>
		<title>Lançada a versão 1.3.1 do Mercurial e a versão 0.8.1 do TortoiseHg</title>
		<link>http://feedproxy.google.com/~r/BlogPronus/~3/Ol_dekd_KBs/lancada-a-versao-1-3-1-do-mercurial</link>
		<comments>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-3-1-do-mercurial#comments</comments>
		<pubDate>Sat, 25 Jul 2009 01:00:39 +0000</pubDate>
		<dc:creator>André Felipe Dias</dc:creator>
				<category><![CDATA[mercurial]]></category>
		<category><![CDATA[lançamento]]></category>

		<guid isPermaLink="false">http://pronus.eng.br/blog/?p=317</guid>
		<description><![CDATA[Nem faz tanto tempo que saiu a versão 1.3 e já lançaram a versão 1.3.1 do Mercurial. Esta versão chega com várias pequenas correções sobre a versão anterior. Entre elas, destacam-se: consertado o uso excessivo de memória para operações de diff e strip resolvido o problema de lentidão no cálculo de heads de ramos resolvido [...]]]></description>
			<content:encoded><![CDATA[<p>Nem faz tanto tempo que <a title="Lançada a versão 1.3 do Mercurial" href="http://pronus.eng.br/blog/http:/pronus.eng.br/blog/acaba-de-sair-a-versao-1-3-do-mercurial" target="_blank">saiu a versão 1.3</a> e já lançaram a versão 1.3.1 do Mercurial. Esta versão chega com várias pequenas correções sobre a versão anterior. Entre elas, destacam-se:</p>
<ul>
<li>consertado o uso excessivo de memória para operações de <em>diff</em> e <em>strip</em></li>
<li>resolvido o problema de lentidão no cálculo de <em>heads</em> de ramos</li>
<li>resolvido o problema de lentidão na extensão <em>fetch</em></li>
<li><em>update &#8211;check</em> agora mostra vários ramos</li>
<li>Vários pequenas alterações na documentação e outros pequenos defeitos corrigidos</li>
</ul>
<p>A lista completa de alterações está disponível <a title="O que há de novo no Mercurial" href="http://mercurial.selenic.com/wiki/WhatsNew" target="_blank">neste link</a>.</p>
<p>A atualização de versão é recomendada a todos os usuários. Para quem usa Linux e linha de comando, a melhor forma é usar o easy_install</p>
<pre>sudo easy_install -U Mercurial</pre>
<h3>TortoiseHg 0.8.1</h3>
<p>Para quem usa o TortoiseHg, saiu a versão 0.8.1 que já vem com a versão 1.3.1 do Mercurial. Sendo assim, basta <a title="Download do TortoiseHg 0.8.1 para Windows" href="http://bitbucket.org/tortoisehg/stable/downloads/TortoiseHg-0.8.1-hg-1.3.1.exe" target="_blank">instalar essa nova versão no Windows</a> e pronto.</p>
<p>Há várias outras correções nessa versão. A lista completa está <a title="TortoiseHg 0.8.1 Release Notes" href="http://bitbucket.org/tortoisehg/stable/wiki/ReleaseNotes" target="_blank">aqui</a>. Uma das mudanças é a inclusão do <a title="Livro sobre Mercurial" href="http://hgbook.red-bean.com/" target="_blank">livro do Mercurial</a> em formato PDF no pacote.</p>
<img src="http://feeds.feedburner.com/~r/BlogPronus/~4/Ol_dekd_KBs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-3-1-do-mercurial/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pronus.eng.br/blog/http:/pronus.eng.br/blog/lancada-a-versao-1-3-1-do-mercurial</feedburner:origLink></item>
	</channel>
</rss>
