<?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>ensandecer de um computólogo &#187; Computação</title>
	<atom:link href="http://danielmartins.eti.br/blog/category/ciencia-da-computacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielmartins.eti.br/blog</link>
	<description>return 1;</description>
	<lastBuildDate>Thu, 15 Dec 2011 05:05:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Ubuntu 10.04 + Acer Aspire 1410</title>
		<link>http://danielmartins.eti.br/blog/2010/04/28/ubuntu-10-04-acer-aspire-1410/</link>
		<comments>http://danielmartins.eti.br/blog/2010/04/28/ubuntu-10-04-acer-aspire-1410/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 18:21:05 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[acer]]></category>
		<category><![CDATA[acer aspire 1410]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=581</guid>
		<description><![CDATA[﻿ Recentemente comprei um Notebook Aspire 1410 de 11.6&#8243;,  e depois de instalar o Ubuntu 10.04 eu vinha experimentando problemas de performance, e recorrentes problemas de IO do HD, sempre tinha que reinstalar o sistema, pois corrompia o raiz(/) do sistema, até que resolvi estudar os comentários sobre esse notebook e achei a origem dos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="ACER-ASPIRE-AS1410" src="http://danielmartins.eti.br/blog/wp-content/uploads/2010/04/ACER-ASPIRE-AS1410-84-R130008-0.jpg" alt="" width="450" height="438" />﻿</p>
<p>Recentemente comprei um Notebook Aspire 1410 de 11.6&#8243;,  e depois de instalar o Ubuntu 10.04 eu vinha experimentando problemas de performance, e recorrentes problemas de IO do HD, sempre tinha que reinstalar o sistema, pois corrompia o raiz(/) do sistema, até que resolvi estudar os comentários sobre esse notebook e achei a origem dos problemas. Acabou que descobri que existe um bug na BIOS, no módulo AHCI, que é uma funcionalidade de SATA 2, então resolvi atualizar a BIOS, porém lendo mais fórums sobre a instalação nesse notebook e sobre essa tecnologia AHCI, ela somente dá suporte a <strong>hot swapping</strong> e <strong>NCQ</strong>, o hot swapping é a possibilidade de desconectar o hd com a placa ligada(o que eu não vou fazer) e NCQ é uma tecnologia de acesso a disco mais eficaz em ambientes de intensa leitura e gravação de dados no HD, suporta cache e etc, o que também não é o meu caso. Portanto eu não preciso dessa tecnologia AHCI, e na BIOS o SATA MODE estava configurado para AHCI, troquei para IDE MODE e pronto. Os problemas pararam de ocorrer e a máquina ficou mais rápida e o boot já não leva 5 minutos.</p>
<p>Com o Ubuntu 9.10 eu instalei e funcionou corretamente, mas de vez em quando aparecia uns erros estranhos envolvendo HD no /var/log/syslog. O que não me deixava feliz e me deixava preocupado.</p>
<p>Portanto fica a dica, se você tiver um computador igual ao meu Aspire 1410 (11&#8243;6), desabilite o modo AHCI que muito provavelmente você não vai utilizar os recursos e poupará dores de cabeça e depois instale o seu Ubuntu 10.04. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://danielmartins.eti.br/blog/wp-content/uploads/2010/04/acer-aspire-timeline-1410-1810t.jpg"><img class="aligncenter size-full wp-image-585" title="acer-aspire-timeline-1410" src="http://danielmartins.eti.br/blog/wp-content/uploads/2010/04/acer-aspire-timeline-1410-1810t.jpg" alt="" width="500" height="500" /></a></p>
<p>Tirando esse problema, esse notebook é show de bola, tenho usado ele para trabalhar também e ele segura o trabalho sem frescuras, as vezes ele se esquenta  ;-) , mas agente acaba se entendendo. Cheguei até a me arrepender de ter comprado ele, mas já pedi desculpa dele e estamos felizes. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
<p>Só queria deixar registrado a dica!</p>
<p>:wq!</p>
<div><span style="color: #0071bb; -webkit-text-decorations-in-effect: underline;"><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2010/04/28/ubuntu-10-04-acer-aspire-1410/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Bossa Conference &#8217;10 &#8211; em Manaus</title>
		<link>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/</link>
		<comments>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:47:36 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[amazonas]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[indt]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[n810 maemo]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[qml]]></category>
		<category><![CDATA[qt]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=573</guid>
		<description><![CDATA[Faz algum tempo que estou querendo escrever vários posts técnicos e da minha viagem a sampa que fiz em janeiro, mas realmente o tempo está escasso. Mas não podia deixar passar em branco a divulgação do Bossa Conference que é um evento que sempre tive vontade de participar e que era realizado em Porto de [...]]]></description>
			<content:encoded><![CDATA[<p>Faz algum tempo que estou querendo escrever vários posts técnicos e da minha viagem a sampa que fiz em janeiro, mas realmente o tempo está escasso. Mas não podia deixar passar em branco a divulgação do Bossa Conference que é um evento que sempre tive vontade de participar e que era realizado em Porto de Galinhas. Esse ano o Bossa Conference &#8217;10 será realizado em Manaus &#8211; Amazonas. Uma chance dos nerds nortistas poderem participar até onde sabemos deste excelente evento.</p>
<p><a href="http://danielmartins.eti.br/blog/wp-content/uploads/2010/03/divulgacao-bossa.png"><img class="aligncenter size-medium wp-image-574" title="divulgacao-bossa" src="http://danielmartins.eti.br/blog/wp-content/uploads/2010/03/divulgacao-bossa-212x300.png" alt="" width="212" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2010/03/02/bossa-conference-10-em-manaus/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>__hg_ps1 &#8211; Nome da branche na linha de comando do bash</title>
		<link>http://danielmartins.eti.br/blog/2009/11/04/__hg_ps1-nome-da-branche-na-linha-de-comando-do-bash/</link>
		<comments>http://danielmartins.eti.br/blog/2009/11/04/__hg_ps1-nome-da-branche-na-linha-de-comando-do-bash/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 15:33:02 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[ps1]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=541</guid>
		<description><![CDATA[Pra quem já usou git, sabe que existe o __git_ps1 que você pode usar para colocar na linha de comando do bash para lhe mostrar qual a branch atual de trabalho. Sem essa funcionalidade fica difícil trabalhar com as branches sem se perder de vez em quando. Procurando por algo similar no mercurial, achei o [...]]]></description>
			<content:encoded><![CDATA[<p>Pra quem já usou git, sabe que existe o __git_ps1 que você pode usar para colocar na linha de comando do bash para lhe mostrar qual a branch atual de trabalho. Sem essa funcionalidade fica difícil trabalhar com as branches sem se perder de vez em quando. Procurando por algo similar no mercurial, achei o <a href="http://bitbucket.org/krbullock/hg_ps1/wiki/Home" target="_blank">__hg_ps1</a>.</p>
<p>Muito simples de instalar:</p>
<ol>
<li> <a href="http://bitbucket.org/krbullock/hg_ps1/get/tip.tar.gz" target="_blank">baixe o tarball</a></li>
<li>instale como qualquer aplicação python ( python setup.py install )</li>
<li>configure PS1 no <strong>~/.bashrc</strong></li>
</ol>
<blockquote><p>wget -c http://bitbucket.org/krbullock/hg_ps1/get/tip.tar.gz</p>
<p>tar xvf tip.tar.gz</p>
<p>cd hg_ps1/</p>
<p>sudo python setup.py install</p></blockquote>
<p>Coloque no ~/.bashrc o seguinte:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">PS1</span>=<span style="color: #ff0000;">'${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\] $(A=`__hg_ps1`  &amp;&amp; echo &quot;[$A]&quot; ) \[\033[0m\] \[\033[00m\]$  '</span></div></td></tr></tbody></table></div>
<p>Se você tiver também o git instalado, coloque este abaixo:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">PS1</span>=<span style="color: #ff0000;">'${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;33m\]$(__git_ps1 &quot; [%s]&quot;) $(A=`__hg_ps1` &amp;&amp; echo &quot;[$A]&quot; ) \[\033[0m\] \[\033[00m\]$  '</span></div></td></tr></tbody></table></div>
<p>Como pode ser visto no comando acima, tem também o __git_ps1, se você entrar em algum repositório git, também funciona, a melhor configuração para manter os dois foi essa acima. Isso é muito útil. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/11/04/__hg_ps1-nome-da-branche-na-linha-de-comando-do-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabalhando com o Mercurial &#8211; HG</title>
		<link>http://danielmartins.eti.br/blog/2009/11/03/trabalhando-com-o-mercurial-hg/</link>
		<comments>http://danielmartins.eti.br/blog/2009/11/03/trabalhando-com-o-mercurial-hg/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 04:48:25 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[hg]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=482</guid>
		<description><![CDATA[Introdução Nos últimos tempos estou conscientizando os meus colegas de trabalho sobre os benefícios da utilização de um controle de código distribuído. Fiz uma análise nas vantagens e desvantagens do Git e HG (Mercurial) e escolhemos o Mercurial pois precisamos trabalhar em um ambiente heterogeneo e o suporte do Git ao windows  ainda é precário, até [...]]]></description>
			<content:encoded><![CDATA[<h1>Introdução</h1>
<p>Nos últimos tempos estou conscientizando os meus colegas de trabalho sobre os benefícios da utilização de um controle de código distribuído. Fiz uma análise nas vantagens e desvantagens do Git e HG (Mercurial) e escolhemos o Mercurial pois precisamos trabalhar em um ambiente heterogeneo e o suporte do Git ao windows  ainda é precário, até achamos algumas iniciativas como o MSysGit, porém ainda possuem  um longo caminho pela frente para se tornar uma ferramenta que atenda as nossas necessidades(realidade). A comunidade do mercurial está mais evoluida neste sentido, e ao que estudamos o Mercurial disponibiliza todas as funcionalidades que almejamos em um gerenciador  de código distribuído.</p>
<p>O objetivo deste post é mostrar o fluxo de trabalho com mercurial, comentando os comandos executados em um fluxo de trabalho escolhido por mim. Alguns devem se perguntar, &#8220;Por que escolhido por você ?&#8221;, porque com o gerenciador de código distribuído não existe um fluxo de trabalho obrigatório a ser seguido, as ferramentas oferecem recursos para você adaptar fácilmente o fluxo de trabalho, portanto uma vez que você entende os conceitos do gerenciador de código distribuído você nota que é você quem faz seu fluxo de trabalho.</p>
<p>Não se assuste com as sequências de códigos, logo abaixo segue os comentários sobre as operações efetuadas, uma das coisas legais do mercurial é que a maioria dos comandos são legíveis, portanto tente entender somenter ao ler os comandos, senão entender, leia os comentários e avalie novamente os comandos, tudo deve fazer sentido, pelo menos eu espero que faça sentido. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Como dito anteriormente o objetivo não é explicar os conceitos. Portanto para entender os conceitos por trás do que é um gerenciador de código distribuído recomendo a leitura dos seguintes textos:</p>
<ul>
<li><span style="background-color: #ffffff;"><a 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 de controle de versão de softwew: Centralizado e Distribuído.</a></span></li>
<li><span style="background-color: #ffffff;"><a href="http://akitaonrails.com/2008/10/2/entendendo-git-e-instalando-gitorious-git-via-web" target="_blank">Entendendo git e instalando gitorious.</a> Nesse post recomendo os capítulos <strong>Mudança de paradigma</strong>, <strong>Problemas da centralização 1, 2 e 3</strong>, <strong>Git: Ferramenta para pessoas sem paciência</strong>, <strong>Mundo ideal .</strong></span></li>
<li><span style="background-color: #ffffff;"><a href="http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/" target="_blank">Introdução ao controle de versão distribuído (Ilustrado)</a>. (Inglês)</span></li>
</ul>
<h1>Configuração</h1>
<p>Para este post estou usando mercurial 1.3.1 instalado no ubuntu através do easy_install.</p>
<p>Recomendo configurar também o __hg_ps1, como <a href="http://danielmartins.eti.br/blog/2009/11/04/__hg_ps1-nome-da-branche-na-linha-de-comando-do-bash/" target="_blank">nesse post</a>.</p>
<p>Antes de começar configure seu <strong>.hgrc</strong>. Crie um arquivo no seu home:</p>
<blockquote><p>touch ~/.hgrc</p></blockquote>
<p>E então edite com seu editor favorito e coloque as seguinte informações sobre a aparência do hg:</p>
<blockquote><p>[ui]</p>
<p>username = Seu Nome &lt;seu@email.com.br&gt;</p>
<p>style = compact</p></blockquote>
<p>Antes de continuarmos, uma coisa que é muito legal no mercurial são as extensões. O mercurial já vem com uma série de extensões incluídas, para uma lista completa <a href="http://mercurial.selenic.com/wiki/UsingExtensions" target="_blank">clique aqui</a>, abaixo algumas que julgo essenciais, embora eu não vá explicar a utilização de todas nesse post, já deixe habilitado, não custa nada <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  com certeza explicarei nos posts seguintes.</p>
<ul>
<li>mercurialqueue</li>
<li>rebase</li>
<li>graphlog</li>
</ul>
<p>Para habilitar adicione ao arquivo <strong>~/.hgrc</strong> também uma nova seção para as extensões: <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<blockquote><p>[extensions]</p>
<p>hgext.graphlog =</p>
<p>hgext.mq =</p>
<p>hgext.rebase =</p></blockquote>
<h1>Comandos básicos</h1>
<p>Tendo em mente que você já sabe os conceitos, vamos fazer uma lista breve de comandos básicos que você deve saber na ponta do dedo.</p>
<blockquote><p><strong>hg clone &lt;url&gt;</strong></p></blockquote>
<p>faz uma cópia local do repositório informado</p>
<blockquote><p><strong>hg pull </strong></p></blockquote>
<p>faz download das mudanças no repositório de origem (pai)</p>
<blockquote><p><strong>hg push</strong></p></blockquote>
<p>faz upload das mudanças no repositório de origem (pai)</p>
<blockquote><p><strong>hg status</strong></p></blockquote>
<p>verifica se há alterações locais</p>
<blockquote><p><strong>hg tip</strong></p></blockquote>
<p>verifica qual a versão que está a frente no repositório, ou se preferir no topo(HEAD)</p>
<blockquote><p><strong>hg incoming</strong></p></blockquote>
<p>verifica o que tem de novo no repositório de origem, frequentemente usado antes de fazer um hg pull, para saber o que se esperar.</p>
<blockquote><p><strong>hg outgoing</strong></p></blockquote>
<p>verifica o que você tem de novo em relação ao repositório de origem, frequentemente usado antes de fazer hg push</p>
<blockquote><p><strong>hg merge</strong></p></blockquote>
<p>uni duas branches ou changeset transformando em uma.</p>
<h1>Trabalhando</h1>
<p>Vamos agora iniciar o trabalho, você vai codificar um projeto novo, então você cria uma pasta, inicia o repositório e adiciona inicialmente um arquivo de README com instruções ou informações sobre o projeto:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src $  <span style="color: #c20cb9; font-weight: bold;">mkdir</span> projetonovo<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src $  <span style="color: #7a0874; font-weight: bold;">cd</span> projetonovo<span style="color: #000000; font-weight: bold;">/</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  <span style="color: #c20cb9; font-weight: bold;">ls</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg init<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Este projeto vai dominar o mundo&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> README<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg add README<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Adicionado arquivo de README com informações sobre o projeto&quot;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg tip<br />
<span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p>Agora temos uma pasta com o nosso projeto e que está sendo versionado pelo mercurial, adicionamos um arquivo com informações para ser rastreado, fizemos o commit e depois verificamos qual o tip(head) do repositório. Você pode verificar que a saída do <strong>hg tip </strong>foi algo bem resumido, isso por que configuramos no <strong>~/.hgrc</strong> na seção <strong>[ui]</strong> , o estilo compacto <strong>style = compact</strong> . Se você deseja que o output dos comandos do mercurial sejam mais verbosos, basta comentar o style = compact ou remover do <strong>~/.hgrc</strong>.</p>
<p>Dentro de uma equipe de desenvolvimento de software, existem pelo menos 2 ciclos básicos que ficam em loop olhando pela perspectiva de implementação e não de análise, eu chamo de ciclo implementativo e corretivo.</p>
<p>Abaixo apresento minha solução para os ciclos em um mundo ideal. Há quem diga que não vivemos em um mundo ideal, mas eu acho importante para entender e fixar os conceitos. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<h2>Ciclo implementativo</h2>
<ol>
<li>Identicar nova funcionalidade e traçar funcionamento básico</li>
<li>Abrir uma ramificação(branch) do projeto</li>
<li>Codificar e testar na branch criada <strong>SOMENTE</strong> para esta feature</li>
<li>Unir(merge) tip da branche da nova feature ao tip da mainline (branche default) e commitar</li>
<li>Fechar a ramificação da branche da nova feature</li>
</ol>
<p>Claro, aqui não é usado nenhuma formalidade nem nome bonito. É simplesmente como eu resumo minhas tarefas implementativas ao meu gosto. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Esse processo pode variar, o mercurial dá a liberdade de você fazer isso como quiser, abaixo eu demonstro como eu faço isso. Uma coisa interessante de ser mencionada é que as branchs são operações no repositório e portanto entram para o histórico do repositório, não esqueça que as branches precisam ser <strong>commitadas</strong>, dependendo do seu projeto você pode não querer saber como cada desenvolvedor criou a branch ou que nome deu para a branch, eu acho interessante e não vejo problema nisso, muito pelo contrário, temos um histórico fidedigno do desenvolvimento do projeto.</p>
<p>Então vou criar a branche para implementar a funcionalidade <strong>UltraMegaBoga</strong> de todos os tempos <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~/src/projetonovo $  hg branch NovaFeature_UltraMegaBoga<br />
marked working directory as branch NovaFeature_UltraMegaBoga<br />
:~/src/projetonovo $  hg ci -m &quot;Criado branch para implementar NovaFeature UltraMegaBoga&quot;<br />
:~/src/projetonovo $  hg branches<br />
NovaFeature_UltraMegaBoga      1:7fc70f299283<br />
default                        0:b65bb6ffc97c (inactive)</div></td></tr></tbody></table></div>
<p>Dae você pode ver que usamos o <strong>hg branch</strong> para nomear a branche padrão atual (<strong>default</strong>) e depois criamos de fato através do <strong>commit</strong> (<strong>ci</strong>), e depois confirmamos usando o<strong> hg branches</strong> para verificar quais as branches que temos no repositório. E agora sim podemos codificar a funcionalidade. No commit automaticamente somos movidos para a branch nova que acabamos de criar.</p>
<p>Então, implementando uma nova feature:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;<span style="color: #c20cb9; font-weight: bold;">touch</span> teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;print('Hellowww mercurial')&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;python teste.py<br />
Hellowww mercurial<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg status<br />
? teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg add teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg status<br />
A teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Criado arquivo da funcionalidade UltraMegaBoa&quot;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span> &nbsp;<span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; c192d84f042a &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">1</span> &nbsp; 7fc70f299283 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">0</span> &nbsp; b65bb6ffc97c &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
Adicionado arquivo de README com informações sobre o projeto<br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;import this&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg status<br />
M teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Nova funcionalidade UltraMegaBoga implementada&quot;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span> &nbsp;<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; f337dc212ea0 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">2</span> &nbsp; c192d84f042a &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">1</span> &nbsp; 7fc70f299283 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">0</span> &nbsp; b65bb6ffc97c &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
Adicionado arquivo de README com informações sobre o projeto<br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;print('Testando funcionalidade ultramegaboga...')&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg status<br />
hg M teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Implementado TesteUnitario e tudo funcionando como esperado&quot;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span> &nbsp;<span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; 63ddafc85f03 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">3</span> &nbsp; f337dc212ea0 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">2</span> &nbsp; c192d84f042a &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">1</span> &nbsp; 7fc70f299283 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">0</span> &nbsp; b65bb6ffc97c &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p>Opa!, muita informação?&#8230; nada, só algumas sendo repitidas. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><strong>Linhas 1 ~ 10</strong>: Nestas linhas apenas criamos um arquivo, colocamos conteúdo dentro dele, executamos, verificamos o status do repositório e eles nos diz que o arquivo novo não foi adicionado e então o adicionamos ao projeto para ser rastreado e então commitamos. Simples hein ?!</p>
<p><strong>Linhas 11</strong>: Na linha 11 há um comando novo que ainda não comentamos, o comando <strong>hg glog </strong>que mostra o log do repositório através de um grafo, o que facilita bastante a vida quando estamos trabalhando com branches(ramificações), para entender melhor veja bem que o <strong>glog</strong> traz a arvore de forma natural, ou seja,  da raiz até o topo ou nós. Na primeira coluna mostra os nós e aonde você está em relação aos nós da arvore, cada nó desse representa um <strong>commit</strong>, os nós são representados por <strong>o</strong> e onde você está através do <strong>@</strong>, na segunda coluna estão as revisões de números inteiros e sequencias que você pode usar para se direcionar ou situar na árvore ou histórico, o mercurial usa revisões sequencias e hashs para controlar o histórico e os changesets(conjuntos de mudanças).</p>
<p>E então esses procedimentos se repetem até o <strong>nó 4</strong> ou changeset <strong>63ddafc85f03</strong>, conforme pode ser visto localizando o @ no resultado do comando <strong>hg glog</strong>.</p>
<p>Vamos voltar para o branche default para fazer o merge e incorporar as modificações da branche UltraMegaBoga</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg update default<br />
<span style="color: #000000;">0</span> files updated, <span style="color: #000000;">0</span> files merged, <span style="color: #000000;">1</span> files removed, <span style="color: #000000;">0</span> files unresolved<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $ &nbsp;hg glog<br />
o &nbsp;<span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; 63ddafc85f03 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">3</span> &nbsp; f337dc212ea0 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">2</span> &nbsp; c192d84f042a &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o &nbsp;<span style="color: #000000;">1</span> &nbsp; 7fc70f299283 &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 <span style="color: #660033;">-0400</span> &nbsp; root<br />
<span style="color: #000000; font-weight: bold;">|</span> &nbsp; &nbsp;Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">@</span> &nbsp;<span style="color: #000000;">0</span> &nbsp; b65bb6ffc97c &nbsp; <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> <span style="color: #660033;">-0400</span> &nbsp; root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p>Outro comando novo, <strong>hg update</strong>, com esse comando você pode alternar entre as branches(ramificações) do seu projeto e nas revisões também bastando passar o parâmetro <strong>hg update -r REV</strong>, na linha 1 alternei para a branch <strong>default</strong> e você pode perceber na saída do comando <strong>hg glog</strong> que o<strong> @</strong> voltou para <strong>revisão 0</strong> que é onde a revisão default parou, certo ? os outros commits foram da branche <strong>NovaFeature_UltraMegaBoga</strong>.</p>
<p>Agora vamos fazer o merge das duas branches.</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg merge NovaFeature_UltraMegaBoga<br />
<span style="color: #000000;">1</span> files updated, <span style="color: #000000;">0</span> files merged, <span style="color: #000000;">0</span> files removed, <span style="color: #000000;">0</span> files unresolved<br />
<span style="color: #7a0874; font-weight: bold;">&#40;</span>branch merge, dont forget to commit<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg tip<br />
<span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
Implementado TesteUnitario e tudo funcionando como esperado<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">3</span>   f337dc212ea0   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">2</span>   c192d84f042a   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">1</span>   7fc70f299283   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">0</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto<br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Incorporando branch NovaFeature_UltraMegaBoga a arvore principal de desenvolvimento&quot;</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span>    <span style="color: #000000;">5</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<span style="color: #000000;">0</span>,<span style="color: #000000;">4</span>   b270c2750162   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">24</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>\     Incorporando branch NovaFeature_UltraMegaBoga a arvore principal de desenvolvimento<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">4</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">3</span>   f337dc212ea0   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">2</span>   c192d84f042a   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">1</span>   7fc70f299283   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/</span>     Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">0</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p><strong>hg merge &lt;nome_do_branch&gt;</strong> e então a união é feita, mas você pode ver pela saída do <strong>hg glog</strong> da linha 7 que o @ aparece tanto na revisão <strong>0</strong> quanto na <strong>4</strong>, porque faltou criar o nó que significa a união dos projetos e que será ponto de partida para novas alterações, e eles nos avisa ao fazer o merge <strong>não esqueça de fazer o commit.</strong> E então fizemos o commit informando que estamos incorporando a nova funcionalidade. e então você pode ver o resultado do glog novamente, gerou-se a revisão 5 e novo hash. Agora percebesse que o glog é realmente muito útil né ? <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Agora para finalizar o ciclo, precisamos fechar a branch que criamos para desenvolver a feature, essa é uma funcionalidade que veio no mercurial 1.2, pois antes disso o mercurial não permite deletar branch, imagine a quantidade de branches que perduravam a vida toda no repositório ?!.</p>
<p>Encerrando as atividades da branch UltraMegaBoga.</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg update NovaFeature_UltraMegaBoga<br />
<span style="color: #000000;">0</span> files updated, <span style="color: #000000;">0</span> files merged, <span style="color: #000000;">0</span> files removed, <span style="color: #000000;">0</span> files unresolved<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg ci <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Fechando branch, feature implementada e incorporada a arvore principal&quot;</span> <span style="color: #660033;">--close-branch</span><br />
created new <span style="color: #c20cb9; font-weight: bold;">head</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg branches<br />
default                        <span style="color: #000000;">5</span>:b270c2750162<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">6</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<span style="color: #000000;">4</span>   7992ab50038d   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">26</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Fechando branch, feature implementada e incorporada a arvore principal<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">5</span>:<span style="color: #000000;">0</span>,<span style="color: #000000;">4</span>   b270c2750162   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">24</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/|</span>    Incorporando branch NovaFeature_UltraMegaBoga a arvore principal de desenvolvimento<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">4</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">3</span>   f337dc212ea0   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">2</span>   c192d84f042a   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">1</span>   7fc70f299283   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/</span>     Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">0</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p>Basicamente na saída acima, voltamos para a branch da funcionalidade UltraMegaBoga e fazemos um commit de encerramento, com o parâmetro<strong> &#8211;close-branch</strong>. Com isso damos fim ao <strong>Ciclo Implementativo</strong>.</p>
<h2>Ciclo corretivo</h2>
<p>No ciclo corretivo, existem 2 aspectos:</p>
<ol>
<li>Você encontrou o problemas durante o desenvolvimento, antes de lançar uma versão.</li>
<li>Você encontrou ou encontraram pra você depois de ter lançado a versão.</li>
</ol>
<p>Para primeira ocasião você pode usar o mesmo mecanismo do ciclo implementativo para fazer as correções. Agora na segunda ocasião eu sugiro uma abordagem diferente, o ideal é corrigir o problema e gerar patches para serem incorporados uma vez que o software já foi congelado(lançado a versão) e está apenas sofrendo correções esporádicas e não mais vivendo em um intenso processo de produção, para isso eu uso a extensão do mercurial chamada <strong>MercurialQueues</strong>, que é um conjunto de comandos para gerenciamentos de uma fila de patchs no estilo LIFO(Last-In / First-Out), o ciclo corretivo se divide em:</p>
<ol>
<li>Identificar a causa do problema</li>
<li>Consertar o bug</li>
<li>Gerar patch e exportar</li>
</ol>
<p>Alguns devem ser perguntar o porque de eu sugerir <strong>MercurialQueues</strong>, pelo motivo de que os commits são maleáveis, no padrão os commits do mercurial são imutáveis, já com o MQ posso trabalhar em varios patches ao mesmo tempo somente manipulando a fila ao invés de ter que ficar importando e/ou exportando patches, posso também mesclar patches sem que isso interfira nos commits. IMHO, é mais conveniente. Você pode também usar o patch para aplicar a correção na versão que está em desenvolvimento</p>
<h3>Comandos básicos</h3>
<blockquote>
<h3><strong>hg qinit</strong></h3>
<h3><strong>hg qnew</strong></h3>
<p><strong>hg qrefresh</strong></p>
<p><strong>hg qpop</strong></p>
<p><strong>hg qpush</strong></p>
<p><strong>hg qfinish</strong></p>
<p><strong>hg qimport</strong></p></blockquote>
<p>Abaixo um exemplo de como criar uma fila e desenvolver um patch usando mercurial queues.</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qinit <span style="color: #660033;">-c</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qseries<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qapplied<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qnew fix_bug_01.patch<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;print('fixing bug')&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> mat.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qseries<br />
fix_bug_01.patch<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qapplied<br />
fix_bug_01.patch<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>fix_bug_01.patch,qtip,tip,qbase<span style="color: #7a0874; font-weight: bold;">&#93;</span>   b3f8a3b6f155   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">22</span>:<span style="color: #000000;">55</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    <span style="color: #7a0874; font-weight: bold;">&#91;</span>mq<span style="color: #7a0874; font-weight: bold;">&#93;</span>: fix_bug_01.patch<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">8</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>qparent<span style="color: #7a0874; font-weight: bold;">&#93;</span>   709a2b46c4cd   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">29</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Implementada feature nova e fechando branche<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">7</span>   cd5986a79612   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">28</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    criando branche para feature nova<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">6</span>:<span style="color: #000000;">4</span>   7992ab50038d   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">26</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Fechando branch, feature implementada e incorporada a arvore principal<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">5</span>:<span style="color: #000000;">0</span>,<span style="color: #000000;">4</span>   b270c2750162   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">24</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/|</span>    Incorporando branch NovaFeature_UltraMegaBoga a arvore principal de desenvolvimento<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">4</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">3</span>   f337dc212ea0   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">2</span>   c192d84f042a   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">1</span>   7fc70f299283   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/</span>     Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">0</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qrefresh<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;a = 1&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> teste.py<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg <span style="color: #c20cb9; font-weight: bold;">diff</span><br />
<span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> 2ae8338b6a9c teste.py<br />
<span style="color: #660033;">---</span> a<span style="color: #000000; font-weight: bold;">/</span>teste.py    Mon Nov 02 <span style="color: #000000;">23</span>:04:04 <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
+++ b<span style="color: #000000; font-weight: bold;">/</span>teste.py    Mon Nov 02 <span style="color: #000000;">23</span>:07:04 <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">1</span>,<span style="color: #000000;">3</span> +<span style="color: #000000;">1</span>,<span style="color: #000000;">4</span> <span style="color: #000000; font-weight: bold;">@@</span><br />
print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Hellowww mercurial'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
import this<br />
print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Testando funcionalidade ultramegaboga...'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
+a = <span style="color: #000000;">1</span><br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qdiff<br />
<span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> 709a2b46c4cd mat.py<br />
<span style="color: #660033;">---</span> a<span style="color: #000000; font-weight: bold;">/</span>mat.py    Mon Nov 02 <span style="color: #000000;">17</span>:<span style="color: #000000;">29</span>:<span style="color: #000000;">50</span> <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
+++ b<span style="color: #000000; font-weight: bold;">/</span>mat.py    Mon Nov 02 <span style="color: #000000;">23</span>:07:07 <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">1</span>,<span style="color: #000000;">1</span> +<span style="color: #000000;">1</span>,<span style="color: #000000;">2</span> <span style="color: #000000; font-weight: bold;">@@</span><br />
print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">2</span>+<span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
+print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'fixing bug'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #c20cb9; font-weight: bold;">diff</span> <span style="color: #660033;">-r</span> 709a2b46c4cd teste.py<br />
<span style="color: #660033;">---</span> a<span style="color: #000000; font-weight: bold;">/</span>teste.py    Mon Nov 02 <span style="color: #000000;">17</span>:<span style="color: #000000;">29</span>:<span style="color: #000000;">50</span> <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
+++ b<span style="color: #000000; font-weight: bold;">/</span>teste.py    Mon Nov 02 <span style="color: #000000;">23</span>:07:07 <span style="color: #000000;">2009</span> <span style="color: #660033;">-0400</span><br />
<span style="color: #000000; font-weight: bold;">@@</span> -<span style="color: #000000;">1</span>,<span style="color: #000000;">3</span> +<span style="color: #000000;">1</span>,<span style="color: #000000;">4</span> <span style="color: #000000; font-weight: bold;">@@</span><br />
print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Hellowww mercurial'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
import this<br />
print<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Testando funcionalidade ultramegaboga...'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
+a = <span style="color: #000000;">1</span><br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qapplied<br />
fix_bug_01.patch<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qpop<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qseries<br />
fix_bug_01.patch<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qapplied<br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg qcommit<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg tip<br />
<span style="color: #000000;">8</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>   709a2b46c4cd   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">29</span> -0400   root<br />
Implementada feature nova e fechando branche<br />
<br />
:~<span style="color: #000000; font-weight: bold;">/</span>src<span style="color: #000000; font-weight: bold;">/</span>projetonovo $  hg glog<br />
<span style="color: #000000; font-weight: bold;">@</span>  <span style="color: #000000;">8</span><span style="color: #7a0874; font-weight: bold;">&#91;</span>tip<span style="color: #7a0874; font-weight: bold;">&#93;</span>   709a2b46c4cd   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">29</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Implementada feature nova e fechando branche<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">7</span>   cd5986a79612   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">28</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    criando branche para feature nova<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">6</span>:<span style="color: #000000;">4</span>   7992ab50038d   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">26</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span>    Fechando branch, feature implementada e incorporada a arvore principal<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
<span style="color: #000000; font-weight: bold;">|</span> o  <span style="color: #000000;">5</span>:<span style="color: #000000;">0</span>,<span style="color: #000000;">4</span>   b270c2750162   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">24</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/|</span>    Incorporando branch NovaFeature_UltraMegaBoga a arvore principal de desenvolvimento<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">4</span>   63ddafc85f03   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">21</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Implementado TesteUnitario e tudo funcionando como esperado<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">3</span>   f337dc212ea0   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">19</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Nova funcionalidade UltraMegaBoga implementada<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">2</span>   c192d84f042a   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:<span style="color: #000000;">16</span> -0400   root<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span>    Criado arquivo da funcionalidade UltraMegaBoa<br />
<span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">|</span><br />
o <span style="color: #000000; font-weight: bold;">|</span>  <span style="color: #000000;">1</span>   7fc70f299283   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">17</span>:01 -0400   root<br />
<span style="color: #000000; font-weight: bold;">|/</span>     Criado branch para implementar NovaFeature UltraMegaBoga<br />
<span style="color: #000000; font-weight: bold;">|</span><br />
o  <span style="color: #000000;">0</span>   b65bb6ffc97c   <span style="color: #000000;">2009</span>-<span style="color: #000000;">11</span>-02 <span style="color: #000000;">14</span>:<span style="color: #000000;">55</span> -0400   root<br />
Adicionado arquivo de README com informações sobre o projeto</div></td></tr></tbody></table></div>
<p><strong>Linhas 1 ~ 10</strong>: É iniciada uma fila através do comando <strong>hg qinit -c</strong> , -c significa que a fila será versionada e portanto poderá ser usado o comando <strong>hg qcommit</strong>. Depois verificamos se está tudo zerado usando os comandos <strong>hg qseries</strong> e <strong>hg qapplied</strong> , o <strong>qseries</strong> nos permite verificar quais patchs estão na fila e o <strong>qapplied</strong> quais patchs estão aplicados efetivamente no repositório. Para criar um novo patch basta executar o <strong>hg qnew &lt;nome_do_patch&gt;</strong> que no exemplo acima atribui o nome fix_bug_01.patch. Alteramos o arquivo e podemos ver com o <strong>glog</strong> que ao criar o patch, já é aplicado automaticamente no repositório e por padrão coloca como msg do commit <strong>[mq]</strong>:  nome_do_patch.</p>
<p><strong>Linhas 40 ~ 51</strong>: É incluídas as alterações feitas no patch atual através do comando <strong>hg qrefresh</strong>. É feita uma alteração no arquivo teste.py  e pra ver a diferença entre <strong>hg diff</strong> e <strong>hg qdiff</strong> é executado hg diff que é a última alteração que o repostório reconhece, quando executamos o <strong>hg qrefresh</strong> ele pega as alterações e armazena internamente no patch e as alterações não ficam mais no repositório comum e sim no patch que está sendo desenvolvido com mercurial queue. O <strong>hg qdiff</strong> mostra todas as alterações incluídas(através do <strong>qrefresh</strong>) no patch.</p>
<p><strong>Linhas 67 ~ 75</strong>: É verificado que o patch continua aplicado (através do <strong>qapplied</strong>) e já que o patch está completo está na hora de armazena-lo e retirá-lo da lista de aplicados através do comando <strong>hg qpop</strong> que remove do topo da fila o patch e como o único e no topo é o <strong>fix_bug_01.patch</strong> não retorna nada o comando <strong>hg qapplied</strong> e então o patch é commitado através do <strong>hg qcommit</strong> essa fila de patchs é um outro repositório interno do mercurial, se você quiser confirmar é só entrar no .<strong>hg/patches</strong> do se repositório e rodar o comando <strong>hg glog</strong> para constatar o sub-repositório de patches criado pelo <strong>MercurialQueue</strong>.</p>
<p>Para exportar o patch pode usar o comando <strong>hg export &lt;nome_do_patch&gt;</strong> e para importar para o repositório normal use <strong>hg import </strong>ou se quiser importar para uma outra lista de patches <strong>hg qimport</strong> e então o patch será adicionado ao <strong>hg qseries</strong>.</p>
<p>Enfim as possibilidades são enormes com o MercurialQueue, e isso foi só uma demonstração básica do uso de MercurialQueues.</p>
<p><em>Ufa! Espero que alguém tenha paciência pra ler. Essa tá longe de ser a versão final desse post. Publiquei logo para ter um norte. Portanto agradeceria bastante as sugestões de melhoria, críticas, correções e etc. </em></p>
<h3>Próximos posts(Aguardem) <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> :</h3>
<ul>
<li>Trabalhando com o Mercurial &#8211; Mais sobre MercurialQueues</li>
<li>Trabalhando com o Mercurial &#8211; Rebaseando</li>
<li>Trabalhando com o Mercurial &#8211; Resolvendo Conflitos</li>
</ul>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1121px; width: 1px; height: 1px;"> <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/11/03/trabalhando-com-o-mercurial-hg/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Compilação distribuída com ICECC no Debian/Ubuntu</title>
		<link>http://danielmartins.eti.br/blog/2009/08/12/compilacao-distribuida-com-icecc-no-debianubuntu/</link>
		<comments>http://danielmartins.eti.br/blog/2009/08/12/compilacao-distribuida-com-icecc-no-debianubuntu/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 02:38:30 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[cc]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[icecc]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=410</guid>
		<description><![CDATA[Para quem já compilou um projeto grande, ou seja, que possui uma quantidade considerável de código fonte sabe que demora bastante tempo para compilar, um exemplo disso é o Qt, que demora aproximadamente ~2 horas  em uma máquina com 2 núcleos. Optando pela dica de um amigo, consegui diminuir esse tempo de compilação para aproximadamente [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem já compilou um projeto grande, ou seja, que possui uma quantidade considerável de código fonte sabe que demora bastante tempo para compilar, um exemplo disso é o Qt, que demora aproximadamente ~2 horas  em uma máquina com 2 núcleos.</p>
<p>Optando pela dica de um <a href="http://brankinhu.eti.br" target="_blank">amigo</a>, consegui diminuir esse tempo de compilação para aproximadamente ~50 minutos usando 6 núcleos no total, 2 núcleos do meu notebook e mais 4 da minha estação de trabalho.</p>
<p>É algo bem simples de fazer, let&#8217;s do it <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Primeiramente você precisa instalar o ICECC nos computadores que você irá compartilhar recursos para compilação e nada mais óbvio do que usar o apt-get ou aptitude:</p>
<blockquote><p>~$ aptitude install icecc</p></blockquote>
<p>Depois de instalado nas máquinas que você deseja utilizar os recursos é necessário configura-lás em um grupo para que elas possam se comunicar, em uma analogia equivalente seria como configurar um grupo de rede onde cada máquina consegue enxergar as outras porque estão no mesmo grupo. Para configurar essa rede é preciso editar o arquivo <strong>/etc/icecc/icecc.conf</strong> e colocar a seguinte diretiva apontando para o nome da rede:</p>
<blockquote><p>ICECC_NETNAME=&#8221;<em>nome_da_sua_rede</em>&#8220;</p></blockquote>
<p>onde tem <em>nome_da_sua_rede</em> substitua pelo o nome de sua preferência para a rede de compilação e configure essa diretiva com o nome que você definiu para cada máquina que você irá utilizar para a compilação e depois reinicie o daemon delas com:</p>
<blockquote><p>sudo invoke-rc.d icecc restart</p></blockquote>
<p>Nessa rede é preciso que ao menos uma das máquinas seja a responsável por distribuir os dados de compilação, pegar o retorno e juntar tudo. A essa máquina damos o nome de &#8220;Scheduler&#8221;, para configurar uma máquina como scheduler é preciso que o arquivo <strong>/etc/default/icecc</strong> esteja da seguinte forma:</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"># Defaults for icecc initscript</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;"># sourced by /etc/init.d/icecc</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">START_ICECC=&#8221;true&#8221;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">START_ICECC_SCHEDULER=&#8221;true&#8221;</div>
<blockquote><p># Defaults for icecc initscript</p>
<p># sourced by /etc/init.d/icecc</p>
<p>START_ICECC=&#8221;true&#8221;</p>
<p>START_ICECC_SCHEDULER=&#8221;true&#8221;</p></blockquote>
<p>E depois reiniciar o daemon com:</p>
<blockquote><p>ICECC_NETNAME=&#8221;<em>nome_da_sua_rede&#8221;</em></p></blockquote>
<p>Dai em diante é só compilar algum código grande que você verá a diferença, também existe uma ferramenta para você monitar a compilação é o <strong>icecc-monitor</strong>, para instalar (nada mais óbvio):</p>
<blockquote><p>sudo aptitude install icecc-monitor</p></blockquote>
<p>Depois adicione o path do icecc ao seu <strong>$PATH</strong>, inserindo o seguinte comando no seu ~/.bashrc :</p>
<blockquote><p>export PATH=/usr/lib/icecc/bin/:$PATH</p>
<p>source ~/.bashrc</p></blockquote>
<p>E boa compilação, keep hacking! <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/08/12/compilacao-distribuida-com-icecc-no-debianubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando nokia n810</title>
		<link>http://danielmartins.eti.br/blog/2009/01/21/configurando-nokia-n810/</link>
		<comments>http://danielmartins.eti.br/blog/2009/01/21/configurando-nokia-n810/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:49:52 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[n810 maemo]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=361</guid>
		<description><![CDATA[Configurar o nokia n810 no ubuntu é bem simples. Fiz um resumão.. Atualizando FirmWare Eu tive que atualizar o firmware, para isso basta fazer o flashing. Faça o download do utilitário, depois faça o download do último firmware, recarrege a bateria do tablet, de preferência estando desligado. Após isso, se o tablet não estiver desligado, [...]]]></description>
			<content:encoded><![CDATA[<p>Configurar o nokia n810 no ubuntu é bem simples. Fiz um resumão..</p>
<p><strong>Atualizando FirmWare</strong></p>
<p style="text-align: left;">Eu tive que atualizar o firmware, para isso basta fazer o flashing. Faça o <a href="http://tablets-dev.nokia.com/d3.php" target="_blank">download do utilitário</a>, depois faça o <a href="http://tablets-dev.nokia.com/nokia_N810.php" target="_blank">download do último firmware</a>, recarrege a bateria do tablet, de preferência estando desligado. Após isso, se o tablet não estiver desligado, desligue-o e ligue o cabo usb e então basta executar:</p>
<blockquote style="text-align: left;">
<p style="text-align: left;">./flasher-3.0 -F <a href="http://tablets-dev.nokia.com/nokia_N810.php?f=RX-44_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin">RX-44_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin</a> -f -R</p>
</blockquote>
<p style="text-align: left;">Dae, ele jogará na tela algumas mensages e a última será:</p>
<p style="text-align: left;"><strong>Suitable USB device not found, waiting</strong></p>
<p style="text-align: left;">Dae você liga o tablet novamente e pronto ele irá atualizar o firmware. Para habilitar o R&amp;D Mode,<br />
basta fazer o mesmo processo só que ao invés de fazer o flashing da imagem basta fazer o seguinte:</p>
<blockquote style="text-align: left;"><p>./flasher-3.0 &#8211;enable-rd-mode</p></blockquote>
<p style="text-align: left;">E então ligue o tablet para ele atualizar para o modo R&amp;D. Depois reiniciei o tablet.</p>
<p style="text-align: left;"><strong>Conectividade usb</strong></p>
<p style="text-align: left;">Você precisa instalar no tablet um pacote chamado <a href="http://maemo.org/downloads/product/raw/OS2008/maemo-pc-connectivity/?get_installfile  ">maemo-pc-connectivity</a> e após instalado o pacote, basta configura<br />
o pc. Primeiro é preciso configurar o módulo responsável pela criação de interface de rede através da usb,  o <strong>usbnet</strong></p>
<blockquote>
<p style="text-align: left;">sudo modprobe usbnet</p>
</blockquote>
<p style="text-align: left;">Basta editar o arquivo <span style="font-family: 'Courier New',monospace;">&#8220;/etc/udev/rules.d/85-ifupdown.rules&#8221; e trocar:</span></p>
<blockquote style="text-align: left;"><p>SUBSYSTEM==&#8221;net&#8221;, DRIVERS==&#8221;?*&#8221;, TEST==&#8221;/var/run/network/initialized&#8221;, GOTO=&#8221;net_start&#8221;</p></blockquote>
<p style="text-align: left;">por:</p>
<blockquote style="text-align: left;"><p>SUBSYSTEM==&#8221;net&#8221;, TEST==&#8221;/var/run/network/initialized&#8221;, GOTO=&#8221;net_start&#8221;</p></blockquote>
<p style="text-align: left;">Depois acrescentar no /etc/network/interfaces:</p>
<blockquote style="text-align: left;"><p>auto usb0<br />
allow-hotplug usb0<br />
mapping hotplug<br />
script grep<br />
map usb0</p>
<p>iface usb0 inet static<br />
address 192.168.2.14<br />
netmask 255.255.255.0<br />
network 192.168.2.0<br />
broadcast 192.168.2.255<br />
up iptables -t nat -A POSTROUTING -s 192.168.2.15 -j MASQUERADE<br />
up echo 1 &gt; /proc/sys/net/ipv4/ip_forward<br />
down iptables -t nat -D POSTROUTING -s 192.168.2.15 -j MASQUERADE<br />
down echo 0 &gt; /proc/sys/net/ipv4/ip_forward</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/01/21/configurando-nokia-n810/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Estudando python EFL &#8211; edição especial :-P</title>
		<link>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/</link>
		<comments>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 05:06:38 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[python efl enlightenment]]></category>
		<category><![CDATA[python efl treinamento]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=333</guid>
		<description><![CDATA[Bom, irei participar de um treinamento de python EFL onde o instrutor será o Gustavo Barbiery, tentarei fazer um resumo do curso até mesmo para que me sirva de referência futura e postarei aqui no blog, tenho conhecidos que trabalham e estudam também EFL e python e que ficaram tristes por não poderem participar do [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, irei participar de um treinamento de python EFL onde o instrutor será o <a href="http://blog.gustavobarbieri.com.br/" target="_blank">Gustavo Barbiery</a>, tentarei fazer um resumo do curso até mesmo para que me sirva de referência futura e postarei aqui no blog, tenho conhecidos que trabalham e estudam também EFL e python e que ficaram tristes por não poderem participar do treinamento, infelizmente não é possível que todos participem. Mas como sou um cara legal e sempre gostei de compartilhar conhecimento <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  , além de fazer o resumo do curso que conterá muito código de exemplo. Irei também reportar a evolução do curso pelo <a href="http://twitter.com/daniel_martins" target="_blank">meu Twitter</a> em tempo real. Para isso instalei um widget no sidebar do wordpress, o qual vocês podem acompanhar ao seu lado direito da tela.</p>
<p>Para quem tem twitter, pode me seguir e fazer perguntas sobre a tecnologia em tempo real, para quem não tiver, pode deixar comentário no blog pois ficarei o tempo todo on line. Não atenderei todas as perguntas, irei filtrar as mais interessantes, portanto caprichem nas perguntas (se houver) que na primeira oportunidade que surgir perguntarei ao Gustavo e postarei no resumo do blog a resposta, sei que muitas das minhas dúvidas são as dúvidas de outros que começaram a trabalhar com EFL a pouco tempo, portanto muita coisa será respondida no resumo que farei do curso e não de forma imediata.</p>
<p>Qualquer coisa, seja sugestão ou crítica comenta ai. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Update</strong>: Posts só sairão, no final de semana. Tá cruel, muita coisa pra fazer/estudar. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/12/16/estudando-python-efl-edicao-especial-p/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SPL (Standard PHP Library)  &#8211;  DirectoryIterator</title>
		<link>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/</link>
		<comments>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/#comments</comments>
		<pubDate>Tue, 15 May 2007 02:58:14 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[php tags php5 spl]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/05/14/spl-standard-php-library-directoryiterator-2/</guid>
		<description><![CDATA[Você conhece a SPL(Standard PHP Library) ? É uma biblioteca de componentes inteiramente escritos em PHP5 dentro do paradigma de Orientação a Objetos para lidar com problemas cotidianos na vida dos programadores que trabalham com PHP. O ambiente onde este artigo foi desenvolvido/testado: PHP 5.2.1 SAPI CLI (Command Line Interface) Ubuntu Feisty Fawn O que [...]]]></description>
			<content:encoded><![CDATA[<p>Você conhece a <a href="http://php.net/spl">SPL(Standard PHP Library)</a> ? É uma biblioteca de componentes inteiramente escritos em PHP5 dentro do paradigma de <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto">Orientação a Objetos</a> para lidar com problemas cotidianos na vida dos programadores que trabalham com PHP.</p>
<p>O ambiente onde este artigo foi desenvolvido/testado:</p>
<ul>
<li>PHP 5.2.1 SAPI CLI (Command Line Interface)</li>
<li>Ubuntu Feisty Fawn</li>
</ul>
<p>O que você precisa saber para aprender melhor o conteúdo ?</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objeto">Orientação a objetos</a></li>
<li><a href="http://www.php.net/manual/pt_BR/language.exceptions.php">Exceptions</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Uml">UML (Opcional)</a></li>
</ul>
<p><span id="more-141"></span><br />
Um dos problemas que encontramos sempre é a questão de trabalharmos com iteração de diretórios, por exemplo um script para backup, localizar algum determinado tipo de arquivo dentro de um diretório com muitos sub-diretórios,  efetuar mudança de nomes de forma recursiva dentre outros. Precisávamos de um solução elegante e legível para efetuarmos manutenção seja corretiva e ou implementativa, isso se torna mais importante quando você trabalha em equipe ou quando você deixa um código para que outro programador seja responsável pela manutenção. Outro ponto forte para a criação e utilização desta biblioteca é a questão de termos um ponto central de soluções(amplamente suportados) para problemas cotidianos assim agilizando o processo de desenvolvimento de software, ou seja, ao invés de termos que criar sempre uma solução para um problema que já tem solução(não seria re-inventar a roda ?!) ou fazer reutilização de software através de CTRL + C e CTRL V ( como era feito e que ainda é muito utilizado ).</p>
<p>Minha contribuição para que possamos melhorar o desenvolvimento de software onde tem como tecnologia de programação PHP5/6 é iniciar uma série de artigos explanando a utilização da SPL, tendo como início uma classe chamada DirectoryIterator.</p>
<p>Para entendermos melhor o DirectoryIterator precisamos dá uma olhadinha neste diagrama de colaboração, através da figura 1 abaixo:</p>
<p align="center"><img src="http://danielmartins.eti.br/blog/wp-content/uploads/2007/05/classdirectoryiterator-coll-graph.png" alt="" align="middle" /><small><small><span style="font-style: italic;">Figura 1.</span></small></small></p>
<p><small><small></small></small></p>
<p><small><small></small></small>Como podemos interpretar esse diagrama de colaboração(Figura 1) o DirectoryIterator é uma classe que implementa a interface Iterator e extende a classe SplFileInfo.<br />
O design da interface Iterator é segundo seu diagrama de colaboração o seguinte:</p>
<p align="center"><img src="http://danielmartins.eti.br/blog/wp-content/uploads/2007/05/interfaceiterator-coll-graph.png" alt="" /> <small><small><span style="font-style: italic;">Figura 2</span></small></small></p>
<p>Basicamente a interface Iterator diz que a classe <span style="font-style: italic;">DirectoryIterator</span> deve obrigatoriamente implementar os métodos <span style="font-style: italic;">current(), key(), next(), rewind(), valid()</span>. Portanto isto quer dizer que um objeto DirectoryIterator pode ser atravessado/iterado/percorrido e que deve ter os controles básico para uma boa iteração de fila como ir para frente( <span style="font-style: italic;">next() </span>), voltar( <span style="font-style: italic;">rewind() </span>), atual ( <span style="font-style: italic;">current() </span>) e controle condicional ( <span style="font-style: italic;">valid()</span> ).</p>
<p>Como ele extende a classe SplFileInfo, isso quer dizer que podemos acessar os métodos públicos desta classe, métodos como isFile(), isDir() , isExecutable()  dentre outros.</p>
<p>Com esse raciocínio básico podemos ir para o código, afinal &#8220;Talks is cheap, show me the code&#8221;.</p>
<p><coolcode lang="php"><br />
$dirName = &#8220;/tmp&#8221;;<br />
$dirObj = new DirectoryIterator($dirName);</p>
<p>$i = 0;<br />
for(; $dirObj->valid() ; $dirObj->next() )<br />
{<br />
     if( !$dirObj->isDot() )<br />
    {<br />
          print &#8220;$i -> {$dirObj->getPathname()} &#8220;.&#8221; ->; {$dirObj->getType()}\n&#8221;;<br />
          $i++;<br />
     }<br />
}<br />
</coolcode><br />
O código acima mostra os arquivos e diretórios de um determinado diretório informado no construtor do objeto<span style="font-style: italic;"> DirectoryIterator</span>.</p>
<p>Basicamente na linha 2 é informado o diretório para ser visualizado e percorrido, na linha 3 é instanciado um objeto <span style="font-style: italic;">DirectoryIterator</span> e o percorremos através de um <span style="font-weight: bold;">for</span> conforme visto na linha 5 e nos condicionais deste <span style="font-weight: bold;">for</span> podemos ver que estamos utilizando os métodos implementados na classe <span style="font-style: italic;">DirectoryIterator</span> conforme a interface <span style="font-style: italic;">Iterator</span> manda e isso nos dá os condicionais básicos e iteradores para percorrer/iterar este objeto.</p>
<p>Gostou ?! vamos dá um upgrade neste exemplo&#8230; vamos criar 2 funções recursivas, uma para guardar o enderecamento dos diretórios, sub-diretórios e seus arquivos em um <span style="font-weight: bold;">Array</span> e outra função para imprimir isso de forma recursiva:</p>
<p><coolcode lang="php"><br />
/**<br />
* Função para guardar os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente em um vetor(Array) de forma recursiva<br />
*<br />
* @params string $dirName<br />
* @return array $arr<br />
*/<br />
function throughDir($dirName)<br />
{<br />
    $dirObj = new DirectoryIterator($dirName);<br />
    for(; $dirObj->valid() ; $dirObj->next() )<br />
   {<br />
        if( $dirObj->isDir() and !$dirObj->isDot() )<br />
       {<br />
            $arr[$dirObj->getPathname()] = throughDir($dirObj->getPathname());<br />
       }<br />
    }<br />
    return $arr;<br />
}</p>
<p>/**<br />
* Função para imprimir os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente de um vetor(Array) de forma recursiva<br />
*<br />
* @params Array $dirName<br />
* @return void<br />
*/<br />
function printDir($arrDirs)<br />
{<br />
     if(is_array($arrDirs))<br />
     {<br />
          foreach($arrDirs as $dir => $subDir)<br />
         {<br />
              echo $dir.&#8221;\n&#8221;;<br />
              printDir($subDir);<br />
         }<br />
      }else{<br />
              echo $arrDirs.&#8221;\n&#8221;;<br />
      }<br />
}</p>
<p>$arrDirs = throughDir(&#8220;/home/daniel/Desktop/&#8221;);<br />
printDir($arrDirs);<br />
</coolcode><br />
Gostaram ?!  é muito legal, tudo muito bom e claro perfeito senão tivessemos problemas para serem tratados.</p>
<p>Um dos problemas que podem ocorrer durante a execução de seu script é a falta de permissão para ler e ou abrir diretórios e arquivos, e se isso acontecer irá comprometer a execução de seu programa, ou seja, será finalizado.</p>
<p>No exemplo do código acima você vai conseguir percorrer os diretórios e sub-diretórios que você possuir permissão de leitura mas ao tentar percorrer um sub-diretório onde você não possui permissão para ler, o seu script finalizará a execução.</p>
<p>Um exemplo é você alterar o script anterior para percorrer um diretório que você não tenha permissão, você pode trocar a string &#8220;/home/daniel/Desktop&#8221; por &#8220;/tmp&#8221;, geralmente em &#8220;/tmp&#8221; sempre tem algo que o proprietário é o root e assim não permitindo que você possa ler o conteúdo. No meu caso olha no que deu:</p>
<blockquote><p>daniel@blackforce:~/Desktop$ php teste2.php</p>
<p>Fatal error: Uncaught exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/gconfd-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}<br />
thrown in /home/daniel/Desktop/teste2.php on line 13</p></blockquote>
<p>Na maioria das vezes é possível fazer com que seu programa saiba com que tipo de erro está lidando e assim fazê-lo executar outros procedimentos para tentar ignorar o problema que o está impedindo de terminar com sucesso a execução.</p>
<p>Para tanto é necessário que você saiba como trabalhar com Exceptions, um exemplo de como capturar exceções no exemplo do código anterior é acrescentando um bloco de <span style="font-style: italic;">try / catch</span> na funcção <span style="font-weight: bold;">throughDir()</span> para capturar o erro como no exemplo abaixo:<br />
/**<br />
* Função para guardar os diretórios/sub-diretórios e seus arquivos<br />
* respectivamente em um vetor(Array) de forma recursiva<br />
*<br />
* @params string $dirName<br />
* @return array $arr<br />
*/<br />
function throughDir($dirName)<br />
{<br />
try{<br />
$dirObj = new DirectoryIterator($dirName);<br />
for(; $dirObj-&gt;valid() ; $dirObj-&gt;next() )<br />
{<br />
if( $dirObj-&gt;isDir() and !$dirObj-&gt;isDot() )<br />
{<br />
$arr[$dirObj-&gt;getPathname()] = throughDir($dirObj-&gt;getPathname());<br />
}<br />
}<br />
}catch(RuntimeException $erro){<br />
print $erro;<br />
}<br />
return $arr;<br />
}</p>
<p>Apenas com este tratamento de imprimir o erro olha o resultado da execução:</p>
<blockquote><p>daniel@blackforce:~/Desktop$ php teste2.php<br />
exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/gconfd-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/gconfd-roo&#8230;&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}exception &#8216;RuntimeException&#8217; with message &#8216;DirectoryIterator::__construct(/tmp/orbit-root): failed to open dir: Permission denied&#8217; in /home/daniel/Desktop/teste2.php:13<br />
Stack trace:<br />
#0 /home/daniel/Desktop/teste2.php(13): DirectoryIterator-&gt;__construct(&#8216;/tmp/orbit-root&#8217;)<br />
#1 /home/daniel/Desktop/teste2.php(18): throughDir(&#8216;/tmp/orbit-root&#8217;)<br />
#2 /home/daniel/Desktop/teste2.php(48): throughDir(&#8216;/tmp&#8217;)<br />
#3 {main}/tmp/.tmp<br />
/tmp/.tmp/tcx<br />
/tmp/hsperfdata_daniel<br />
/tmp/.ICE-unix<br />
/tmp/.X11-unix<br />
/tmp/.esd-1000<br />
/tmp/kde-daniel<br />
/tmp/gconfd-root<br />
/tmp/orbit-daniel<br />
/tmp/hsperfdata_root<br />
/tmp/ksocket-daniel<br />
/tmp/orbit-root<br />
/tmp/ssh-KcBsL23144<br />
/tmp/gconfd-daniel<br />
/tmp/gconfd-daniel/lock<br />
/tmp/virtual-daniel.XCv1fR<br />
/tmp/epiphany-daniel-OTEfiF<br />
/tmp/keyring-vrbWn3<br />
/tmp/.exchange-daniel<br />
/tmp/svbd9.tmp<br />
/tmp/plugtmp<br />
daniel@blackforce:~/Desktop$</p></blockquote>
<p>Como podemos ver, o erro foi impresso mas não gerou nenhum Fatal Error na execução do programa, o script continuou a execução até o fim e se por acaso tivesse ocorrido outro erro por falta de permissão, novamente ele iria imprimir o erro e seguir em diante, tudo isso porque o Fatal Error é gerado porque você não está tratando devidamente as ocilações de comportamento de seu programa de uma forma adequada.</p>
<p>A única exceção que vimos foi a <span style="font-weight: bold;">RuntimeException</span>, mas este post já está muito grande e não quero me estender mais para não ficar muito cansativo de ler, além do que este assunto sobre Exceptions geradas pela <a href="http://php.net/spl">SPL</a> merece um artigo somente tratando de explanar sua lógica, forma de captura e tratamento.</p>
<p>Com certeza isso é só o início da uma apresentação sobre a <a href="http://php.net/spl">SPL</a>. Espero que com essa introdução à classe DirectoryIterator tenha ajudado de alguma forma a tirar dúvidas sobre esta classe.</p>
<p>Qualquer <span style="font-weight: bold;">contribuição/sugestão/correção/reclamação</span> será bem vinda.</p>
<p>Comente! ajude a melhorar a qualidade do artigo.. compartilhe conhecimento.</p>
<p>Fontes:</p>
<ul>
<li><a href="http://www.php.net/~helly/php/ext/spl/">http://www.php.net/~helly/php/ext/spl/</a></li>
<li><a href="http://www.php.net/manual/en/ref.spl.php">http://www.php.net/manual/en/ref.spl.php</a></li>
</ul>
<p>Updates:<br />
Atualizado endereços das imagens para a nova url</p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/05/14/spl-standard-php-library-directoryiterator-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>O que há de errado com o Microsoft Windows Vista ?</title>
		<link>http://danielmartins.eti.br/blog/2007/03/19/o-que-ha-de-errado-com-o-microsoft-windows-vista-2/</link>
		<comments>http://danielmartins.eti.br/blog/2007/03/19/o-que-ha-de-errado-com-o-microsoft-windows-vista-2/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 17:39:25 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Comunidades]]></category>
		<category><![CDATA[Traduções]]></category>
		<category><![CDATA[computação windowsvista windows badvista gdd drm]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/03/19/o-que-ha-de-errado-com-o-microsoft-windows-vista-2/</guid>
		<description><![CDATA[O novo sistema operacional Windows Vista da Microsoft é um grande passo retrógrado para a liberdade dos usuários. Usualmente, novos softwares permitem você ir além com o seu computador. Vista, entretanto, é projetado para restringir o que você pode fazer. Vista aborda as novas formas de &#8220;Gestão de direitos autoriais (GDD)&#8221; do inglês &#8220;Digital Rights [...]]]></description>
			<content:encoded><![CDATA[<p><strong>O novo sistema operacional Windows Vista da Microsoft é um grande passo retrógrado para a liberdade dos usuários.</strong></p>
<p>Usualmente, novos softwares permitem você ir além com o seu computador. Vista, entretanto, é projetado para restringir o que você pode fazer.</p>
<p>Vista aborda as novas formas de <a href="http://pt.wikipedia.org/wiki/Gest%C3%A3o_de_direitos_digitais">&#8220;Gestão de direitos autoriais (GDD)&#8221;</a> do inglês &#8220;Digital Rights Management (DRM)&#8221;. GDD é exatamente chamado de Gestão de direitos autoriais, por causa que é a tecnologia que a grande mídia e companias de computador tentam impôr para nós todos, para obter o controle de como nossos computadores são utilizados.</p>
<p>O especialista em segurança tecnológica Bruce Schneier explica <a href="http://www.schneier.com/blog/archives/2007/02/drm_in_windows.html">mais concisamente</a>:</p>
<p><em>&#8220;Windows vista inclui uma série de &#8220;funcionalidades&#8221; que você não almeja. Estas funcionalidades irão tornar o seu computador menos confiável e menos seguro. Eles irão tornar seu computador menos estável e fazer com que funcione mais lento. Eles irão causar problemas técnicos. Eles irão requerir que você faça atualizações de alguns dos seus periféricos de hardware e softwares existentes. E essas funcionalidades não irão fazer nada útil. De fato, eles estão trabalhando contra você. Eles são a Gestão de direitos autorais que vem embutido dentro do Vista que está por trás da indústria do entretenimento &#8211; E você não pode recusá-los. &#8221;<br />
</em><br />
<strong>DRM dá mais poder para Microsoft e a Grande Mídia.</strong></p>
<ul>
<li>Eles decidem quais programas você pode e quais você não pode usar em seu computador.</li>
<li>Eles decidem quais funcionalidades do seu computador ou software você pode usar em um determinado momento.</li>
<li>Eles lhe forçam a instalar novos softwares mesmo que você não o queira (e, é claro, pagar pelo o privilégio).</li>
<li>Eles restrigem seu acesso a certos programas e também seus próprios arquivos de dados.</li>
</ul>
<p>DRM é reforçado por barreiras tecnológicas. Você tenta fazer algo, e seu computador diz que você não pode. Para isto se tornar efetivo, seu computador deve está constantemente monitorando o que você está fazendo. Este monitoramento usa recursos do computador e memória, e é a maior parte das razões do porque a Microsoft está dizendo que você tem que comprar novos e mais poderosos hardwares para utilizar o Vista. Eles querem que você compre novo hardware não por causa que você precisa, mais por causa que seu computador precisa para ser mais efetivo nas restrições do que você faz.</p>
<p>Microsoft e outras companias de computador, em alguns momentos referem a estas restrições como &#8220;Computação Confiável&#8221; do inglês &#8220;Trusted Computing&#8221;. Dado que estes foram projetados para fazer com o seu computador pare de confiar em você para começar a confiar na Microsoft, estas restrições são mais apropriadamente chamadas &#8220;Computação Traiçoeira&#8221; do inglês &#8220;Treacherous Computing&#8221;.</p>
<p><strong>Mesmo quando você compra o Vista, você não o possui.</strong></p>
<p>Windows Vista, como a versão anterior do Windows, é software proprietário: alugado para você por uma licença que restringe severamente como você pode usá-lo. e sem código fonte, portanto ninguém além da Microsoft pode alterá-lo ou mesmo verificar o que realmente ele faz.</p>
<p>Microsoft diz isto melhor:</p>
<blockquote><p>O software é licenciado, não vendido. Este acordo lhe dá somente alguns direitos de usar o software. Microsoft reserva todos os outros direitos. A menos que a lei aplicável lhe dê mais direitos apesar desta limitação, você talvez use o software somente como expressamente permitido neste acordo. Deste modo, você deve concordar com qualquer  limitações técnicas no software que  somente permite uso de certas maneiras.</p></blockquote>
<p>Para torná-lo ainda mais confuso, diferente versões do Vista  possuem diferentes restrições de licença. Você pode ler todas as licenças em : <span class="link-external"><a href="http://www.microsoft.com/about/legal/useterms/default.aspx.">http://www.microsoft.com/about/legal/useterms/default.aspx.</a></span></p>
<p>É doloroso ler estas licenças, e isto é o porque cada vez menos pessoas criam objeções para elas. Mas se nós não comerçamos com as objeções, nós iremos perder liberdades valiosas. Aqui estão algumas das restrições ridículas que você irá encontrar lendo:</p>
<ul>
<li>Se sua cópia do Vista vir com a compra de um novo computador, esta cópia do Vista só pode ser legalmente usado nesta máquina, para sempre.</li>
<li>Se você comprou o Vista em uma loja de varejo e o instalou em computador que você já possuia, você tem que o deletá-lo completamente da máquina antes de instalar em outra máquina.</li>
<li>Você dá a Microsoft o direito, através dos programas como Windows Defender, para <strong>deletar</strong> programas do seu sistema quando decidir que são spyware.</li>
<li>Você consente em ser espiado pela Microsoft, através do sistema &#8220;Windows Genuine Advantage&#8221;. O sistema tenta identificar instâncias de cópia que a Microsoft acha ilegítimo. Infelizmente, um estudo recente indicou que este sistema já foi mexido[1] em mais de 500.000 casos.</li>
</ul>
<p>Software livre como GNU/Linux não requer que você concorde com estes termos de licença absurdos.  É chamado  software livre porque você é livre para fazer quantas cópias você quiser, e compartilhá-lo com quantos amigos você desejar. Ninguém irá monitorar suas ações ou falsamente lhe chamar de ladrão.</p>
<p><strong>O que você pode fazer para ajudar a proteger sua liberdade</strong></p>
<p>Há uma batalha por trás entre aqueles que valorizam a liberdade, e corporações como a Microsoft cujo desejo é lucrar removendo esta liberdade. GDD e licenças absurdas são o coração da batalha. Porfavor junte-se a nós do lado da liberdade dizendo NÃO, não somente para o Windows Vista e outros produtos incorporados com GDD, mas para software proprietário em geral. Em troca, use produtos não-GDD, software livre como o sistema operacional GNU/Linux. Você pode trabalhar enquanto tendo certeza que seus direitos e liberdades não serão restringidos agora ou no futuro.</p>
<p>Como mais e mais coisas em nossa vida se tornam digital, é vital que nós protegemos nossa liberdade digital como nós sempre temos trabalhado para proteger nossa liberdade de expressão impressa e falada.</p>
<p><a href="https://www.fsf.org/associate/join/am_register_form1">Entre na campanha BadVista.org hoje!.</a></p>
<p>[1] em inglês é Screwed Up, eu não conseguir achar uma tradução melhor.<br />
&#8212;&#8212;&#8212;&#8211;x&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Esta é uma tradução NÃO-OFICIAL de um artigo escrito por <a href="http://badvista.fsf.org/author/johns">John Sullivan</a>, para esclarecer perguntas que são comuns (pela quantidade de vezes que são abordadas).</p>
<p>O texto original encontra-se em: <a href="http://badvista.fsf.org/what-s-wrong-with-microsoft-windows-vista">http://badvista.fsf.org/what-s-wrong-with-microsoft-windows-vista</a></p>
<p>Saiba mais sobre este assunto em <a href="http://defectivebydesign.org/">http://defectivebydesign.org/.</a></p>
<p>É fato que a GDD está cada vez mais no nosso dia a dia e necessário que este conhecimento chegue ao maior número de pessoas possíveis.</p>
<p>Aqui estão mais 25 cents de contribuição.</p>
<p>Em trechos desta tradução usei palavras cotidianas, para facilitar o entendimento dos leitores, sempre tento deixar o texto mais simples e fácil possível de ser bem entendido, mas é claro que cometo erros seja na tradução ou no português, se acharem algum erro entrem em contato comigo ou deixem comentários para que eu possa corrigí-los e deixar o devido agradecimento e crédito a quem corrigiu o texto.</p>
<p>No mesmo site achei um belo wallpaper:</p>
<div><a href="http://danielmartins.eti.br/blog/wp-content/uploads/2007/03/windowsvistaballmerpiraxz7.jpg"><img src="http://danielmartins.eti.br/blog/wp-content/uploads/2007/03/windowsvistaballmerpiraxz7-thumb.jpg" alt="" /></a></div>
<p><img alt="" /></p>
<p>:wq!</p>
<p class="poweredbyperformancing">powered by <a href="http://performancing.com/firefox">performancing firefox</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/03/19/o-que-ha-de-errado-com-o-microsoft-windows-vista-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Final de Semana</title>
		<link>http://danielmartins.eti.br/blog/2005/06/21/final-de-semana/</link>
		<comments>http://danielmartins.eti.br/blog/2005/06/21/final-de-semana/#comments</comments>
		<pubDate>Tue, 21 Jun 2005 03:15:30 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://www.jb0.org/daniel/?p=9</guid>
		<description><![CDATA[O final de semana passado foi bom, na sexta eu instalei o Ubuntu na minha máquina de trabalho, tive uns problema com as partições mas depois ocorreu tudo normalmente, o mesmo instalador do Debian e portanto me senti em casa, finalizando a instalação e indo direto pra faculdade não tive tempo de configurá-lo. No sabado, [...]]]></description>
			<content:encoded><![CDATA[<p>O final de semana passado foi bom, na sexta eu instalei o <a href="http://www.ubuntulinux.com.br">Ubuntu</a> na minha máquina de trabalho, tive uns problema com as partições mas depois ocorreu tudo normalmente, o mesmo instalador do <a href="http://www.debian.org">Debian</a> e portanto me senti em casa, finalizando a instalação e indo direto pra faculdade não tive tempo de configurá-lo.<br />
No sabado, já tinha prometido pra mim mesmo não sair pra canto algum, porém, havia um festival de rock e muitos amigos meus estavam me chamando pra ir, e advinha ? acabei indo!, foi legal, é muito bom sempre está na companhia dos amigos e tomando uma cerveja, falando sobre festivais de rocks passados que provavelmente iremos contar para nossos netos, são esses pequenos momentos que fazem a vida valer a pena, e mais uma vez eu na noite como Headbanguer Proletariado Metal!, bem considera-se um Headbanguer Proletariado Metal:</p>
<li> Vai pros shows sem um tostão sobrando.</li>
<li> Quando tem e quer beber, mistura qualquer bebida destilada vagabunda com algum outro liquido intragável (vodka e gury cola por exemplo)</li>
<li>Amanhece morgado na frente dos shows ou bares esperando o primeiro ônibus pra voltar pra casa, a não ser que more perto, e volte andando (perto mais ou menos 5 ou 10 km de distância). </li>
<p>Domingo de rei, passei o domingo praticamente todo dormindo e alguma horas morgado na frente do computador.<br />
Segunda feira, cheguei um tanto empolgado e ansioso no trabalho para configurar meu Ubuntu, e configurei todo meu ubuntu em apenas uma manhã! eu mesmo não acreditei quando havia acabado!, eu acostumado a configurar na munheca os softwares no meu debian, tais como java, flashplayer e etc.<br />
Configurei tudo isso com apenas o apt-get!, tudo muito fácil e prático! no canal #ubuntu-br da rede <a href="http://www.freenode.net">Freenode</a> (O qual frequentemente estou) vi um colega indicando o link <a href="http://www.ubuntuguide.org">Ubuntu Guide </a>, e foi apartir desse guia que configurei todo meu ubuntu! recomendo este guia ! fiquei muito feliz, por que obtive produtividade, pensei que ia demorar algum tempo configurando meu ubuntu, e pelo contrário, foi mais rápido do que imaginei, isso é muito bom e realmente segue a filosofia do Ubuntu, que significa &#8220;Humanidade aos outros&#8221; e que é voltada para facilidade de uso, e isto realmente é muito válido, existem usuários que não querem se apegar a coisas técnicas, eles querem simplicidade, querem chegar no seu computador ter um software bom e estável, escrever seu documento, ouvir música, navegar na internet, sem maiores problemas ou dificuldades, por exemplo: A pessoa estuda geografia e usa seu computador para fazer seus trabalhos, pesquisas, diversão e etc, você acha que essa pessoa vai se interessar em construção de pacotes,  compilar módulos, irq, polling ?, é injusto querer que todos sejam técnicos, eu acredito sim, todos devem conhecer o funcionamento básico de um computador e um sistema operacional, mas que não seja extremamente complexo para um usuário final como este estudante.<br />
Portanto, estou gostando muito do Ubuntu, e para meu trabalho caiu como uma luva, pois no trabalho preciso de produtividade, preciser ser esperto e sagaz para cumprir com os meus deveres e acho que a comunidade do Ubuntu está de parabéns e acabou de ganhar mais um adepto! e hoje entrei para a lista de discussão do <a href="http://www.ubuntu-br.org">Ubuntu-br</a>, 2 dos desenvolvedores residem na mesma cidade que eu e são membros da mesma comunidade, a <a href="http://www.comunidadesol.org">Comunidade Sol</a>, e posso trocar idéias e até ajudar no projeto <a href="http://www.ubuntu-br.org.br">Ubuntu-br</a>.<br />
Acho que por hoje é só. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ps: Em casa continuo com meu Debian(zaum) <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Links:<br />
<a href="http://www.ubuntulinux.org">Ubuntu &#8211; http://www.ubuntulinux.com.br</a><br />
<a href="http://www.ubuntu-br.org">Ubuntu-br &#8211; http://www.ubuntu-br.org</a><br />
<a href="http://www.debian.org">Debian &#8211; http://www.debian.org</a><br />
<a href="http://www.comunidadesol.org">Comunidade Sol &#8211; http://www.comunidadesol.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2005/06/21/final-de-semana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

