<?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/computacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielmartins.eti.br/blog</link>
	<description>return 1;</description>
	<lastBuildDate>Sat, 08 May 2010 17:51:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<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>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></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>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/11/03/trabalhando-com-o-mercurial-hg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download da palestra de GIT &#8211; Debian Day Amazonas</title>
		<link>http://danielmartins.eti.br/blog/2009/08/25/download-da-palestra-de-git-debian-day-amazonas/</link>
		<comments>http://danielmartins.eti.br/blog/2009/08/25/download-da-palestra-de-git-debian-day-amazonas/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 17:18:49 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[amazonas]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian am]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[debian day]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=473</guid>
		<description><![CDATA[No DebianDay 09 Ministrei a palestra Git: Economize Dorflex! Por vários fatores eu já esperava que a minha palestra fosse atrair poucos interessados, mas gostei muito dos participantes que estavam lá, pois como eram poucos foi possível fazer uma espécie de bate-papo e troca de experiências sobre o conteúdo. Também não posso deixar de agradecer]]></description>
			<content:encoded><![CDATA[<p>No DebianDay 09 Ministrei a palestra <strong>Git: Economize Dorflex</strong>!</p>
<p>Por vários fatores eu já esperava que a minha palestra fosse atrair poucos interessados, mas gostei muito dos participantes que estavam lá, pois como eram poucos foi possível fazer uma espécie de bate-papo e troca de experiências sobre o conteúdo.</p>
<p>Também não posso deixar de agradecer ao <a href="http://www.pronus.eng.br" target="_blank">André Felipe Dias</a> por permitir o uso das imagens do seu artigo <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 Código: Centralizado e Distribuído</a>.</p>
<p>Como prometido, segue aqui o link para <a href="http://danielmartins.eti.br/git_debianday09.pdf" target="_blank">download da palestra</a>.</p>
<p>Críticas construtivas são sempre bem vindas, <strong>comente</strong>!</p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/08/25/download-da-palestra-de-git-debian-day-amazonas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian Day 09 &#8211; Amazonas</title>
		<link>http://danielmartins.eti.br/blog/2009/08/18/debian-day-09-amazonas/</link>
		<comments>http://danielmartins.eti.br/blog/2009/08/18/debian-day-09-amazonas/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 14:53:41 +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[amazonas]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debian am]]></category>
		<category><![CDATA[debian day]]></category>
		<category><![CDATA[desafio programação]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=440</guid>
		<description><![CDATA[Debian Day é um evento realizado anualmente por vários grupos de Software Livre em todo o mundo. Também conhecido por Dia Debian e Dia D, este evento comemora o aniversário da distribuição GNU/Linux Debian, que neste ano (2009) completa 16 anos de existência. Em Manaus, o Debian Day é realizado pelo Grupo de Usuários Debian]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://diadebian.org/am/2009/imgs/debian-day-09-am.png" alt="" /></p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Debian Day é um evento realizado anualmente por vários grupos de Software Livre em todo o mundo. Também conhecido por Dia Debian e Dia D, este evento comemora o aniversário da distribuição GNU/Linux Debian, que neste ano (2009) completa 16 anos de existência.</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Em Manaus, o Debian Day é realizado pelo Grupo de Usuários Debian do Amazonas, conhecido por Debian-AM, sendo patrocinado pela UniLaSalle e com o apoio do Projeto Zagaia, AIT Technologies e Gráfica Silva.</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Neste ano, teremos um I Desafio DebianDay de Programação:</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; text-align: center; padding: 0px;"><a href="http://diadebian.org/desafio"><img class="size-full wp-image-442 aligncenter" title="cartaz" src="http://danielmartins.eti.br/blog/wp-content/uploads/2009/08/cartaz.png" alt="cartaz" width="483" height="179" /></a></p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">E também um convidado especial, o criador e mantenedor do site Viva o Linux (<a style="color: #2d83d5; text-decoration: underline; padding: 0px; margin: 0px;" href="http://vivaolinux.com.br">http://vivaolinux.com.br</a>), Fábio Berbert de Paula.</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Convidamos todos a participarem deste evento.<br style="padding: 0px; margin: 0px;" /><strong>Data:</strong> 22 de Agosto de 2009.<br style="padding: 0px; margin: 0px;" /><strong>Local:</strong> UniLaSalle, Dom Pedro I, em frente à praça de alimentação do Dom Pedro I.<br style="padding: 0px; margin: 0px;" /><strong>Horário:</strong> 9h &#8211; 17:30h, credenciamento de 8h &#8211; 9h.<br style="padding: 0px; margin: 0px;" /><strong>Entrada:</strong> 2Kg de alimentos não perecíveis, exceto sal.</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Para saber como participar do desafio de programação, visite o site de evento.</p>
<p style="margin-top: 4px; margin-right: 0px; margin-bottom: 7px; margin-left: 0px; line-height: 18px; padding: 0px;">Site: <a style="color: #2d83d5; text-decoration: underline; padding: 0px; margin: 0px;" href="http://diadebian.org/am/2009">http://diadebian.org/am/2009</a></p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/08/18/debian-day-09-amazonas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flisol &#8211; Manaus &#8211; Amazonas</title>
		<link>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/</link>
		<comments>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 13:46:49 +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[Programação]]></category>
		<category><![CDATA[amazonas]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[flisol-am python efl]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=390</guid>
		<description><![CDATA[O flisol em manaus foi um sucesso na minha opnião, graças ao comprometimento dos &#8220;pigs&#8221; da comunidade de software livre em manaus, pessoas como Antônio Junior, Davyd Smelk, Marcelo Mendes entre outros e a estes pigs deixo aqui postado meus parabéns. houve uma quantidade razoável de participantes, todas as palestras estavam cheias e as oficinas]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-391" title="flisol-manaus-logo" src="http://danielmartins.eti.br/blog/wp-content/uploads/2009/04/flisol-manaus-logo-300x162.png" alt="flisol-manaus-logo" width="300" height="162" />O flisol em manaus foi um sucesso na minha opnião, graças ao comprometimento dos &#8220;<a href="http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig" target="_blank">pigs</a>&#8221; da comunidade de software livre em manaus, pessoas como <a href="http://brankinhu.eti.br/" target="_blank">Antônio Junior</a>, Davyd Smelk, <a href="http://marcelomendes.eti.br/" target="_blank">Marcelo Mendes</a> entre outros e a estes pigs deixo aqui postado meus parabéns. houve uma quantidade razoável de participantes, todas as palestras estavam cheias e as oficinas foram também bastante frequentadas.</p>
<p>Tirei algumas fotos do evento apartir do meu E71, a câmera não é boa mas como estava de dia até que as fotos ficaram boas. Segue abaixo algumas fotos.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="Oficina de D-Bus" href="http://www.flickr.com/photos/danielelias/3474502331/"><img class="alignnone" src="http://farm4.static.flickr.com/3345/3474502331_dfeed09f02.jpg" alt="Oficina de D-Bus" width="500" height="375" /></a></p>
<p>A foto acima é da oficina de D-Bus.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="25/04/2009" href="http://www.flickr.com/photos/danielelias/3474487847/"><img class="alignnone" src="http://farm4.static.flickr.com/3345/3474487847_54118ac03d.jpg" alt="25/04/2009" width="500" height="375" /></a></p>
<p>Coordenação do Flisol indo almoçar.</p>
<p><a href="http://www.flickr.com/photos/danielelias/tags/flisolam/" target="_blank">Mais fotos no meu flickr</a>.</p>
<p>Também não pude deixar de contribuir e fiz uma palestra sobre Python com EFL e ajudei em algumas oficinas. Como prometi na minha palestra que iria postar a minha apresentação no blog, cá estou eu postando.</p>
<p><a href="http://danielmartins.eti.br/Python_Efl_Flisol.pdf">Slides Python e EFl</a></p>
<p>Segue abaixo os códigos que fiz de exemplo, mas faltou tempo para comentar linha a linha. Para quem quiser estudar segue código.</p>
<div class="codecolorer-container python 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 /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python2.5</span><br />
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span><br />
<span style="color: #808080; font-style: italic;"># Copyleft </span><br />
<span style="color: #808080; font-style: italic;">#</span><br />
<span style="color: #808080; font-style: italic;"># @author: Daniel Martins</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> ecore<br />
<span style="color: #ff7700;font-weight:bold;">from</span> ecore.<span style="color: black;">evas</span> <span style="color: #ff7700;font-weight:bold;">import</span> SoftwareX11<br />
<span style="color: #ff7700;font-weight:bold;">import</span> evas<br />
<span style="color: #ff7700;font-weight:bold;">import</span> edje<br />
<br />
X_DIRECTION, Y_DIRECTION = <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><br />
<br />
<br />
w, h = <span style="color: #ff4500;">800</span>, <span style="color: #ff4500;">480</span><br />
ee = ecore.<span style="color: black;">evas</span>.<span style="color: black;">SoftwareX11</span><span style="color: black;">&#40;</span>w=w, h=h<span style="color: black;">&#41;</span><br />
canvas = ee.<span style="color: black;">evas</span><br />
<br />
states = <span style="color: #ff4500;">0</span><br />
anime = <span style="color: #008000;">False</span><br />
anime_max = <span style="color: #ff4500;">0</span><br />
<br />
<br />
bg = canvas.<span style="color: black;">Rectangle</span><span style="color: black;">&#40;</span>color=<span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>, size=ee.<span style="color: black;">size</span><span style="color: black;">&#41;</span><br />
bg.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> change_object<span style="color: black;">&#40;</span>o, e<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> w, h, states, anime_max<br />
&nbsp; &nbsp; im_w, im_h = o.<span style="color: black;">image_size</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> states == <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>w-im_w, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">1</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x, y<span style="color: black;">&#41;</span> = o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x, h-im_h<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">2</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x, y<span style="color: black;">&#41;</span> = o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">3</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#40;</span>x, y<span style="color: black;">&#41;</span> = o.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; o.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; states = <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; states += <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; <br />
<br />
<br />
ball_object = canvas.<span style="color: black;">Image</span><span style="color: black;">&#40;</span><span style="color: #008000;">file</span>=<span style="color: #483d8b;">&quot;Generic_football.png&quot;</span>, geometry=<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">66</span>, <span style="color: #ff4500;">65</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
im_w, im_h = ball_object.<span style="color: black;">image_size</span><br />
ball_object.<span style="color: black;">fill_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span>, im_w, im_h<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">on_mouse_up_add</span><span style="color: black;">&#40;</span>change_object<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #808080; font-style: italic;"># Load and setup UI</span><br />
ee.<span style="color: black;">title</span> = <span style="color: #483d8b;">&quot;Exemplo de Python EFL&quot;</span><br />
<br />
<br />
ee.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
ecore.<span style="color: black;">main_loop_begin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Exemplo animado:</p>
<div class="codecolorer-container python 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 /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python2.5</span><br />
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span><br />
<span style="color: #808080; font-style: italic;"># Copyleft </span><br />
<span style="color: #808080; font-style: italic;">#</span><br />
<span style="color: #808080; font-style: italic;"># @author: Daniel Martins</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">import</span> ecore<br />
<span style="color: #ff7700;font-weight:bold;">from</span> ecore.<span style="color: black;">evas</span> <span style="color: #ff7700;font-weight:bold;">import</span> SoftwareX11<br />
<span style="color: #ff7700;font-weight:bold;">import</span> evas<br />
<span style="color: #ff7700;font-weight:bold;">import</span> edje<br />
<br />
X_DIRECTION, X_DIRECTION_NEGATIVE, Y_DIRECTION, Y_DIRECTION_NEGATIVE = <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span><br />
<br />
<br />
w, h = <span style="color: #ff4500;">800</span>, <span style="color: #ff4500;">480</span><br />
ee = ecore.<span style="color: black;">evas</span>.<span style="color: black;">SoftwareX11</span><span style="color: black;">&#40;</span>w=w, h=h<span style="color: black;">&#41;</span><br />
canvas = ee.<span style="color: black;">evas</span><br />
<br />
states = <span style="color: #ff4500;">0</span><br />
anime = <span style="color: #008000;">False</span><br />
anime_max = <span style="color: #ff4500;">0</span><br />
<br />
<br />
bg = canvas.<span style="color: black;">Rectangle</span><span style="color: black;">&#40;</span>color=<span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span>, <span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>, size=ee.<span style="color: black;">size</span><span style="color: black;">&#41;</span><br />
bg.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> anime_ball<span style="color: black;">&#40;</span>img_obj, direction<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> anime_max<br />
&nbsp; &nbsp; <span style="color: black;">&#40;</span>x,y<span style="color: black;">&#41;</span> = img_obj.<span style="color: black;">pos_get</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> direction == X_DIRECTION:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x+<span style="color: #ff4500;">5</span>,y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&gt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> direction == X_DIRECTION_NEGATIVE:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x-<span style="color: #ff4500;">5</span>,y<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> x <span style="color: #66cc66;">&lt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> direction == Y_DIRECTION:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x,y+<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&gt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> direction == Y_DIRECTION_NEGATIVE:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pos_set</span><span style="color: black;">&#40;</span>x,y-<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> y <span style="color: #66cc66;">&lt;</span> anime_max:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img_obj.<span style="color: black;">pass_events_set</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span><br />
&nbsp; &nbsp; &nbsp;<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> change_object<span style="color: black;">&#40;</span>o, e<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> w, h, states, anime_max<br />
&nbsp; &nbsp; im_w, im_h = o.<span style="color: black;">image_size</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> states == <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max = w-im_w<br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball, o, X_DIRECTION<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">1</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max = h-im_h<br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball, o, Y_DIRECTION<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">2</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max = <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball, o, X_DIRECTION_NEGATIVE<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">elif</span> states == <span style="color: #ff4500;">3</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; anime_max = <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ecore.<span style="color: black;">animator_add</span><span style="color: black;">&#40;</span>anime_ball, o, Y_DIRECTION_NEGATIVE<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; states = <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; states += <span style="color: #ff4500;">1</span><br />
<br />
<br />
ball_object = canvas.<span style="color: black;">Image</span><span style="color: black;">&#40;</span><span style="color: #008000;">file</span>=<span style="color: #483d8b;">&quot;Generic_football.png&quot;</span>, geometry=<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">66</span>, <span style="color: #ff4500;">65</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
im_w, im_h = ball_object.<span style="color: black;">image_size</span><br />
ball_object.<span style="color: black;">fill_set</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span>, im_w, im_h<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">on_mouse_up_add</span><span style="color: black;">&#40;</span>change_object<span style="color: black;">&#41;</span><br />
ball_object.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #808080; font-style: italic;"># Load and setup UI</span><br />
ee.<span style="color: black;">title</span> = <span style="color: #483d8b;">&quot;Exemplo de Python EFL Animado&quot;</span><br />
<br />
ee.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
ecore.<span style="color: black;">main_loop_begin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p><a href="http://danielmartins.eti.br/python_efl_flisol_src.tar.gz" target="_blank">Link para baixar tudo, inclusive a imagem.</a> Só não esqueça que para executar é preciso ter instalado as EFL e os python bindings.Para a instalação tenho um post sobre. <a href="http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/" target="_blank">Confira</a>.</p>
<p>Espero que tenham gostado do evento tanto quanto eu gostei. Qualquer dúvida, crítica e/ou sugestão pode colocar nos comentários.</p>
<p>Até a próxima.</p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2009/04/27/flisol-manaus-amazonas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lançamento do grupo Web2.0 Manaus com Harald Kirschner</title>
		<link>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/</link>
		<comments>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 15:21:38 +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[Programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[amazonas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[manaus]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[javascript mootools web2.0 manaus amazonas]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=208</guid>
		<description><![CDATA[Na sexta (12/09/08) foi o lançamento do grupo Web2.0 Manaus com o apoio do INdT e contou com um desenvolvedor do core do mootools falando sobre web2.0 e mostrando casos de uso do mootools. O Evento ocorreu no auditório da UniLasalle de manaus e contou com auditório cheio, eu inclusive que cheguei 15 minutos atrasado]]></description>
			<content:encoded><![CDATA[<p>Na sexta (12/09/08) foi o lançamento do grupo <a title="Web2.0 Manaus" href="http://groups.google.com.br/group/web20_manaus" target="_blank">Web2.0 Manaus</a> com o apoio do <a title="INdT" href="http://www.indt.org.br/institutional/index.php" target="_blank">INdT</a> e contou com um desenvolvedor do core do <a href="http://mootools.net/" target="_blank">mootools</a> falando sobre web2.0 e mostrando casos de uso do mootools.</p>
<p>O Evento ocorreu no auditório da <a href="http://www.lasalle.edu.br/unilasalle-am/" target="_blank">UniLasalle de manaus</a> e contou com auditório cheio, eu inclusive que cheguei 15 minutos atrasado tive que sentar no chão <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Bom, o evento foi composto por 2 palestras:</p>
<ul>
<li><span>Palestra 1:</span>
<ul>
<li><span> WEB 2.0  Oportunidades, e novas tendências.</span><span> <strong>Álvaro Mota Gonçalves</strong>, INdT</span><span> </span></li>
<li><span>Open-WEB</span><span>.  Harald Kirschner, WEB 2.0 developer and co-developer Mootools project</span></li>
</ul>
</li>
</ul>
<ul>
<li><span> </span><span>Palestra 2</span><span> </span>
<ul>
<li><span>WEB 2.0 v Overview de Tecnologias WEB   2.0. </span><span><a title="Harald Kirschner Journal and Project Repository" href="http://digitarald.de/" target="_blank"><strong>Harald  Kirschner</strong></a>, front-end web  developer specialist, core developer of  MooTools project </span></li>
</ul>
</li>
</ul>
<p>O Álvaro Mota Gonçalves começou falando da estratégia da Nokia que mudou, e agora tem um foco mais aberto para o provimento de serviços web e levar a mesma experiência encontrada no uso de serviços web no pc com browser só que através do celular de forma móvel(<strong>mobile</strong>), o que é uma tendência hoje em dia de <strong>fato</strong>. Uma tecnologia que corresponde a este incentivo da Nokia para com a melhor experiencia de serviços web no celular é o <a title="WebRunTime" href="http://www.forum.nokia.com/main/resources/technologies/browsing/widgets.html" target="_blank"><strong>WebRunTime</strong>(<strong>WRT</strong>)</a>. No quesito <strong>provimento de serviços</strong> a gente pode ver a investida da Nokia com o lançamento do <a title="Ovi Services por Nokia" href="http://www.ovi.com/services/" target="_self">Ovi.</a></p>
<p>Foi dito também que o mercado de trabalho estão a procura por profissionais de desenvolvimento web2.0, não lembro qual foi o site que o Álvaro mostrou onde ele fez uma pesquisa e retornou mais de 2000 empregos em aberto para se trabalhar com web2.0, ou seja, <strong>oportunidade</strong>.</p>
<p>A palestra mais esperada(pelo menos por mim), era a do Harald a qual pode ser encontrada <a href="http://digitarald.de/box/harald-web-20.zip" target="_blank">aqui</a> , achei que  ele iria se aprofundar mais na explicação de web2.0 falando sobre microformats, WRT e outros conceitos e tecnologias que ainda não parei para estudar, mais o foco da palestra dele era falar de web2.0 para pessoas que não sabiam ou sabiam pouco o que é web2.0.</p>
<p>O Harald falou um pouco desse &#8220;compra-compra&#8221; que vemos hoje em dia de grandes empresas comprando as menores que oferecem algum serviço interessante, e ele até comentou &#8220;<strong>Quer ficar milhionário ? É só fazer um serviço inovador e publicar na web..</strong>&#8221; e logo depois complementou &#8220;<strong>só não é tão fácil fazer um..</strong>&#8221; <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Um fato que me chamou atenção foi a compra do <a title="GrandCentral" href="http://www.grandcentral.com/home" target="_blank"><strong>GrandCentral</strong></a> pelo google, o qual eu nem fazia idéia que existia, trata-se de um serviço de gerenciamento de ligações, tem muitas funcionalidades interessantes, vale a pena dá uma olhada, é uma pena que o serviço ainda não está disponí­vel para o Brasil, mas vocé pode solicitar uma notificação quando o serviço estiver disponí­vel.</p>
<p>Além disso ele mostrou uma tabela de serviços comparativos, de 1.0 para 2.0</p>
<p>Como por exemplo:</p>
<table style="height: 116px;" border="0" width="313">
<tbody>
<tr>
<td style="text-align: center;"><strong>1.0</strong></td>
<td style="text-align: center;"><strong>2.0</strong></td>
</tr>
<tr>
<td style="text-align: center;">DoubleClick</td>
<td>
<p style="text-align: center;">Google AdSense</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Ofoto</td>
<td>
<p style="text-align: center;">Flickr</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Mp3.com</td>
<td>
<p style="text-align: center;">last.fm</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Britannica On line</td>
<td>
<p style="text-align: center;">Wikipedia</p>
</td>
</tr>
<tr>
<td style="text-align: center;">Personal Websites</td>
<td>
<p style="text-align: center;">Blogging</p>
</td>
</tr>
</tbody>
</table>
<p>E outros como pode ser visto na <a href="http://digitarald.de/box/harald-web-20.zip" target="_blank">apresentação dele</a>.</p>
<p>Falou que os princípios da Web2.0 são:</p>
<p><strong> Open Source &#8211; Liberação das informações</strong><br />
<strong> Communication &#8211; Usuários</strong><br />
<strong> Design &#8211; Nova arquitetura de interfaces com o usuário</strong></p>
<p>Pra mim ficou meio misturado a afirmação de que o relacionamento do OpenSource com a web2.0 seja a liberação de informações no sentido de <strong>Content Syndication</strong>, <strong>Web Feed</strong>(RDF, Atom e etc), <strong>WebServices</strong> e <strong>APIs</strong> na minha opnião isso tem haver com OpenData e não com OpenSource, de fato há muita semelhança no modelo colaborativo de projetos OpenSource de código aberto para com serviços OpenData de compartilhamento de informações e não dúvido que a web2.0 com a semântica de <strong>OpenData</strong> tenha se baseado no modelo colaborativo do OpenSource. Eu acredito que um termo melhor seria <strong>OpenData</strong>.</p>
<p>Mostrou 1 exemplo de como ganhar dinheiro com a web2.0, usando o <a title="Amazon Web Services" href="http://www.amazon.com/AWS-home-page-Money/b?ie=UTF8&amp;node=3435361" target="_blank"><strong>Amazon Web Service</strong></a>, o qual a cada livro vendido que você indicou em seu site/blog você ganha dinheiro.(O qual estarei botando em breve no meu blog <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> ).</p>
<p>Dando continuidade no quesito <strong>oportunidades,</strong> segundo Harald o que você precisa saber para arrumar um bom emprego no mercado de web2.0:</p>
<ul>
<li><strong>Content Syndication</strong></li>
<li><strong>Web feeds</strong></li>
<li><strong>RDF</strong></li>
<li><strong>Atom</strong></li>
<li><strong>Web services and APIs</strong></li>
<li><strong>Communication with XML or JSON</strong></li>
<li><strong>REST</strong></li>
<li><strong>SOAP(WSDL)</strong></li>
</ul>
<p>Algumas passagens me chamaram atenção como a do <strong>Tim O&#8217;Reilly</strong> sobre web2.0, resumindo significa que a inteligência coletiva é a base da web2.0, concordo em gênero e grau, você não ?</p>
<p>Houve também slides sobre <a title="Folksonomia" href="http://pt.wikipedia.org/wiki/Folksonomia" target="_blank">Folksonomia</a>[1], Comunicação, melhoramento de Design de interfaces com os novos conceitos RIA(Rich Internet Application) e RUE(Rich User Experience). Essa questão de trazer a experiência de uso de softwares desktop para web entre outras coisas.</p>
<p>Não deixou de falar dos padrões e a acessibilidade o que geralmente é ignorada em detrimento a funcionalidades &#8220;<strong>eye-candy</strong>&#8221; o que julgo muito importante e que nunca deve ser esquecida, ou seja, sua palestra também incluiu Web standards, W3C, leitores de tela, SEO e o funcionamento de softwares web, como estrutura(xhtml), apresentação(css) e etc.</p>
<p>Casos de uso do uso de JavaScript .</p>
<ul>
<li><strong>Melhorias na interação com os forms;</strong></li>
<li><strong>Melhorias na colaboração entre os usuários;</strong></li>
<li><strong>Filtros e manipulação de dados</strong></li>
<li><strong>Autocomplete </strong>(Como o google suggests)</li>
</ul>
<p>Entrando mais na parte técnica, falou sobre o desenvolvimento, que com essa onda de informações e novos conceitos, por onde se basear , citou padrões utilizados e criados pelo yahoo, o <a href="http://developer.yahoo.com/ypatterns/" target="_blank">YPatterns</a> e das alternativas como o <a href="http://ajaxpatterns.org/" target="_blank">Ajax Pattern</a>.</p>
<p>Não deixou de falar também para as pessoas com perfil empreendedor, falou sobre modelo de negócios:</p>
<ul>
<li><strong>Vender <a href="http://pt.wikipedia.org/wiki/API" target="_blank">API</a></strong></li>
<li><strong>Vender serviços</strong></li>
<li><strong>Vender informações</strong></li>
</ul>
<p>Estratégias de expansão para quem já possui serviços:</p>
<ul>
<li><strong>Criar API</strong></li>
<li><strong>Distribuir como OpenSource (Citou também meios de o fazer, através do <a href="http://code.google.com/" target="_blank">google code</a>)</strong></li>
</ul>
<p>Vendeu um pouco de jabá falando sobre o  MooTools e falou um pouco sobre o porque de frameworks.</p>
<p>Nessa hora tomei a liberdade de lhe fazer uma pergunta tendo em vista que o que ele mostrou de exemplo nada foram diferente dos exemplos encontrados utilizando <a href="http://www.jquery.com" target="_blank">JQuery</a> , <a href="http://developer.yahoo.com/yui" target="_blank">YUI</a> e <a href="http://extjs.com/" target="_blank">Ext-js</a> os quais são os que eu uso nos meus projetos.</p>
<p><strong>P:</strong> Perguntei quais eram as principais diferenças entre MooTools e Jquery/YUI  ?<br />
<strong>R: </strong>Ele disse que Mootools é melhor para projetos grandes. Disse também JQuery tem mais classes prontas e que o YUI tem uma estrutura menor do que a MooTools. Na opnião dele YUI é para projetos que precisem de namespaces.</p>
<p>O Evento foi de importância para região, quase não se ver eventos desse tipo por aqui em Manaus. Com certeza desenvolvedores web(como eu) sentem falta.</p>
<p>À coordenação, meus parabéns.</p>
<p>[1] Recomendo a leitura deste post sobre Folksonomia pelo <a href="http://revolucao.etc.br/archives/folksonomia-e-a-maneira-com-que-nos-colocamos-ordem-nas-coisas/" target="_blank">Revolução Etc</a></p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/09/15/lancamento-do-grupo-web20-manaus-com-harald-kirschner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estudando python EFL &#8211; parte 1</title>
		<link>http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/</link>
		<comments>http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 01:45:53 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[efl]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python efl enlightenment]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=180</guid>
		<description><![CDATA[Bom, nos últimos tempos tenho estudado o Maemo, que utiliza o GTK como base dos widgets e de expansão da plataforma, mas vendo aplicações como canola que usa EFL, acredito que para uma aplicação mais interativa e eye-candy realmente vale a pena considerar o EFL como tecnologia para o desenvolvimento de aplicações para maemo, imaginei]]></description>
			<content:encoded><![CDATA[<p>Bom, nos últimos tempos tenho estudado o <a title="Maemo" href="http://www.maemo.org" target="_blank">Maemo</a>, que utiliza o GTK como base dos widgets e de expansão da plataforma, mas vendo aplicações como canola que usa <a href="http://www.enlightenment.org/p.php?p=about/efl&amp;l=en" target="_blank">EFL</a>, acredito que para uma aplicação mais interativa e <strong>eye-candy</strong> realmente vale a pena considerar o <a href="http://www.enlightenment.org/p.php?p=about/efl&amp;l=en" target="_blank">EFL</a> como tecnologia para o desenvolvimento de aplicações para maemo, imaginei que a instalação do ambiente fosse algo mais trivial (e é depois que aprendi),  com a ajuda do <a href="http://blog.gustavobarbieri.com.br/" target="_blank">Gustavo Barbiery</a> consegui finalizar a configuração do ambiente. E agora estou escrevendo um how-to para complementar o aprendizado.</p>
<p>A idéia é escrever um conjunto de posts para compartilhar os conhecimentos adquiridos, ajudando os mais novos (assim como eu) entrar no desenvolvimento de aplicações para maemo ou desktop utilizando esta tecnologia. Pretendo nos posts ter 2 seções uma com resumo e outra explicando com mais detalhes para os que não possuem muita experiência com linux possam entender e aprender.</p>
<p>Para constar, estou usando o Ubuntu 8.10.</p>
<p><strong>Resumido:</strong></p>
<ol>
<li>Instalar os pacotes <strong>build-essential libpng12-dev libjpeg62-dev python-setuptools librsvg2-dev python2.5-dev subversion autoconf automake autotools-dev m4 libtool cvs git-core libdbus-1-dev<br />
</strong></li>
<li>Fazer o checkout do código do trunk do svn do enlightenment dos seguintes pacotes: <strong>eina</strong> <strong>eet evas ecore </strong><strong> embryo </strong><strong>edje etk edje_editor.</strong></li>
<li>Compilar os códigos na seguinte ordem: <strong>eina</strong> <strong>eet evas ecore </strong><strong>embryo</strong><strong> edje etk edje_editor.<br />
</strong></li>
<li>Fazer checkout dos bindings do efl para python do SVN: <strong>cython python-efl-utils python-evas python-ecore python-edje</strong> <strong>python-etk</strong>.</li>
<li>Instalar os pacotes na seguinte ordem: <strong>python-efl-utils python-evas.</strong></li>
<blockquote>
<li>Após instalar o <strong>python-evas</strong>, você precisa instalar os headers para compilar o <strong>python-ecore</strong>, então: <strong><em>python setup.py install_headers</em></strong></li>
</blockquote>
<li>Continuar a instalação dos pacotes dos bindings: <strong>python-ecore</strong>, <strong>python-edje e python-etk<br />
</strong></li>
</ol>
<p><strong>Detalhado:</strong></p>
<p>Instalar os pacotes essenciais para compilar os códigos, usando apt-get ou aptitude:</p>
<blockquote><p>$ apt-get install <strong>build-essential libpng12-dev libjpeg62-dev python-setuptools librsvg2-dev python2.5-dev subversion autoconf automake autotools-dev m4 libtool cvs </strong><strong>git-core libdbus-1-dev<br />
</strong></p></blockquote>
<p>Após instalar esses pacotes é preciso fazer o checkout do repositório do enlightenment, você pode criar uma pasta no seu home e entre no diretório:</p>
<blockquote><p>$ mkdir $HOME/e_src</p>
<p>$ cd $HOME/e_src</p></blockquote>
<p>entrar na pasta e fazer o checkout dos códigos <strong>eina</strong> <strong>eet </strong><strong>evas ecore </strong><strong>embryo edje etk edje_editor</strong>:</p>
<blockquote><p>$ svn co https://svn.enlightenment.org/svn/e/trunk/eina eina</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/eet eet</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/evas evas</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/ecore ecore</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/embryo embryo</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/edje edje</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/etk etk</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/edje_editor edje_editor</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/e_dbus e_dbus</p></blockquote>
<p>após ter feito o checkout do código, você precisar exportar os códigos para não mexer no código que veio pelo svn assim você pode aproveitar sempre as alterações do código, para atualizar sua cópia do svn basta:</p>
<blockquote><p>$ svn up</p></blockquote>
<p>crie uma pasta onde conterá o código exportado para compilação e entre na diretório:</p>
<blockquote><p>$ mkdir $HOME/e_src_exported</p>
<p>$ cd $HOME/e_src_exported</p></blockquote>
<p>exportando:</p>
<blockquote><p>$ svn export $HOME/e_src/eina eina</p>
<p>$ svn export $HOME/e_src/eet eet</p>
<p>$ svn export $HOME/e_src/evas evas</p>
<p>$ svn export $HOME/e_src/ecore ecore</p>
<p>$ svn export $HOME/e_src/embryo embryo</p>
<p>$ svn export $HOME/e_src/edje edje</p>
<p>$ svn export $HOME/e_src/e_dbus e_dbus</p></blockquote>
<p>após exportar, precisamos compilar, começaremos pelo <strong>eina </strong>e estes comandos devem ser repetidos para cada diretório:</p>
<blockquote><p>$ cd eina</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>eet</strong>:</p>
<blockquote><p>$ cd eet</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois <strong>evas</strong>:</p>
<blockquote><p>$ cd evas</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois <strong>ecore</strong>:</p>
<blockquote><p>$ cd ecore</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>embryo</strong>:</p>
<blockquote><p>$ cd embryo</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois e por último o <strong>edje</strong>:</p>
<blockquote><p>$ cd edje</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>etk</strong>:</p>
<blockquote><p>$ cd etk</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ sudo ldconfig</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>edje_editor:</strong></p>
<blockquote><p>$ cd edje_editor</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>e_dbus:</strong></p>
<blockquote><p>$ cd e_dbus</p>
<p>$ sh autogen.sh</p>
<p>$ make</p>
<p>$ sudo make install</p>
<p>$ cd ..</p></blockquote>
<p>Antes de instalar os bindings é preciso instalar algumas dependências:</p>
<blockquote><p>$ wget -c http://www.cython.org/Cython-0.10.3.tar.gz</p>
<p>$ git clone git://git.profusion.mobi/users/ulisses/python-dispatcher.git</p></blockquote>
<p>E após, instale o <strong>Cython</strong>:</p>
<blockquote><p>$ tar -zxvf Cython-0.10.3.tar.gz</p>
<p>$ cd Cython-0.10.3</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>e o <strong>Python-Dispather</strong>:</p>
<blockquote><p>$ cd python-dispatcher</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>Após ter compilado e instalado os componentes essenciais do EFL, você precisa compilar e instalar os bindings para python, baixando os pacotes dentro do mesmo diretório pra onde exportou o código do svn:</p>
<blockquote><p>$  svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-evas</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-ecore</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-edje</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-etk</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-e_dbus</p></blockquote>
<p>Exportando:</p>
<blockquote><p>$ cd $HOME/e_src_exported</p>
<p>$ svn export $HOME/e_src/python-evas python-evas</p>
<p>$ svn export $HOME/e_src/python-ecore python-ecore</p>
<p>$ svn export $HOME/e_src/python-edje python-edje</p>
<p>$ svn export $HOME/e_src/python-etk python-etk</p></blockquote>
<p>depois o <strong>python-evas</strong>:</p>
<blockquote><p>$ cd python-evas</p>
<p>$ sudo python setup.py install</p>
<p>$ sudo python setup.py install_headers</p>
<p>$ cd ..</p></blockquote>
<p>depois o  <strong>python-ecore</strong>:</p>
<blockquote><p>$ cd python-ecore</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>python-edje</strong>:</p>
<blockquote><p>$ cd python-edje</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>python-etk</strong>:</p>
<blockquote><p>$ cd python-etk</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>depois o <strong>python-e_dbus</strong>:</p>
<blockquote><p>$ cd python-e_dbus</p>
<p>$ sudo python setup.py install</p>
<p>$ cd ..</p></blockquote>
<p>Pronto! você possui uma instalação funcional.</p>
<p>Para testar, você pode o exemplo que o <a href="http://blog.gustavobarbieri.com.br/2007/06/23/edje-demo-on-n800-application-launcher-mockup/" target="_blank"><strong>Gustavo Barbiery</strong></a> fez, você precisa fazer o checkout:</p>
<blockquote><p>$ mkdir $HOME/efl_demo</p>
<p>$ cd $HOME/efl_demo</p>
<p>$ svn co https://svn.enlightenment.org/svn/e/trunk/BINDINGS/python/python-edje/examples/evas-demo/01-app_launcher 01-app_launcher</p>
<p>$ cd 01-app_launcher</p>
<p>$ edje_cc 01-app_launcher.edc</p>
<p>$ python 01-app_launcher.py</p></blockquote>
<p>Se tudo funcionar,  pronto você realmente tem uma instalação funcional do python efl. <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Fontes:</p>
<p><a href="http://wiki.enlightenment.org/index.php/Creating_Edje_User_Interfaces" target="_blank">http://wiki.enlightenment.org/</a></p>
<p>Basicamente, não tem muita referência de instalação do <a href="http://www.enlightenment.org/p.php?p=about/efl&amp;l=en" target="_blank">efl</a> e esse é um dos motivos de eu estar escrevendo o post.</p>
<p>Qualquer coisa comenta ai! <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Update 24/01/09</strong>: Adicionado compilação do <strong>e_dbus</strong> e <strong>python-e_dbus</strong>.</p>
<p><strong>Update 01/09/08</strong>: Considerando uma instalação inicial inclui mais alguns pacotes para instalar antes de iniciar a compilação: <strong>autoconf automake autotools-dev m4 libtool</strong></p>
<p><strong>Update 14/10/08</strong>: Houve mudanças nos repositórios do EFL, e agora é preciso compilar também o pacote EINA. Incluído Eina e correções na hora de instalar os bindings</p>
<p><strong>Update 22/12/08</strong>: Esse modo de instalação que fiz funcionava bem com a versão antiga do efl, antes do eina. Atualizei para a versão do SVN e inclui a instalação de mais 2 pacotes do EFL, 1 binding e um utilitário(python-dispatcher) e a remoção do python-efl-utils. E tudo feito no ubuntu 8.10.</p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/08/23/estudando-python-efl-parte-1/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Qual SO você é ?</title>
		<link>http://danielmartins.eti.br/blog/2008/08/23/qual-so-voce-e/</link>
		<comments>http://danielmartins.eti.br/blog/2008/08/23/qual-so-voce-e/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 00:47:14 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://danielmartins.eti.br/blog/?p=181</guid>
		<description><![CDATA[Which OS are You?]]></description>
			<content:encoded><![CDATA[<p><a href="http://bbspot.com/News/2003/01/os_quiz.php"><br />
<img src="http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/os_x.jpg" width="300" height="90" order="0" alt="You are OS X. You tend to be fashionable and clever despite being a bit transparent.  Now that you've reached some stability you're expecting greater popularity."><br />
<br />Which OS are You?</a></p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2008/08/23/qual-so-voce-e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI + widget DataTable + Ordenação Customizada</title>
		<link>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/</link>
		<comments>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 21:27:57 +0000</pubDate>
		<dc:creator>Daniel Elias</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Dicas & How To]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/07/03/yui-widget-datatable-ordenacao-customizada/</guid>
		<description><![CDATA[Eu tenho utilizado exaustivamente a biblioteca de componentes YUI (Yahoo User Interface) para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho. Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas]]></description>
			<content:encoded><![CDATA[<p>Eu tenho utilizado exaustivamente a biblioteca de componentes <a HREF="http://developer.yahoo.com/yui" TARGET="_blank" TITLE="YUI !">YUI (Yahoo User Interface) </a>para re-redesenhar a interface dos sistemas web que desenvolvo no meu atual local de trabalho.</p>
<p>Acredito que há muitas opniões sobre esta nova abordagem de web2.0, desenvolvedores nacionais renomados ja se expressaram sobre esta questão, a web2.0 é boa para diversas situações, mas não tudo. Um exemplo é o Yahoo Mail Beta, é legal e bonito mas é lento demais, sem falar que no firefox qualquer ação o processamento vai para 100% e isso é caos!. É tudo uma questão de bom senso, usar web2.0 para dá um turbinada na aplicação com validações e chamadas assíncronas, melhorar a usabilidade ou ainda aplicar um comportamento para um determinado componente na tela é uma boa opção. Mas usar web2.0 para emular sistemas que rodam no desktop é complicado, por que são muitos eventos, muitos widgets, muitas regras de css(posicionamento, imagens e etc) e acaba que a aplicação fica extremamente lenta e de difícil manutenção, com certeza não é o que queremos.</p>
<p><span id="more-154"></span></p>
<p>Para quem não conhece, a YUI é uma biblioteca de componentes reutilizaveis feitos em javascript, dhtml e css para facilitar a construção de <a HREF="http://en.wikipedia.org/wiki/Rich_Internet_application" TARGET="_blank">RIA (Rich Internet Applications) </a> , a YUI é produzida primariamente pelos yahoo hackers e também pela comunidade.  É utilizada extensivamente no portal do Yahoo.com[.br] para os softwares web do Yahoo!, com isso podemos entender que é um projeto amplamente suportado. A YUI! é software livre, cuja a licença é uma variação da licença BSD e pode ser encontrada <a TARGET="_blank" HREF="http://developer.yahoo.com/yui/license.txt">aqui.</a></p>
<p>Como eu ainda não postei nada sobre a YUI, neste artigo estarei descrevendo sua utilização básica com um exemplo utilizando o <a TARGET="_blank" HREF="http://www.google.com.br/search?hl=pt-BR&amp;q=define%3Awidget&amp;btnG=Pesquisa+Google&amp;meta=">widget</a> DataTable, para o exemplo ficar ainda mais interessante irei também descrever como customizar a ordenação crescente e decrescente. As informações de exemplo que vamos utilizar são informações referentes a veículos, vamos customizar a ordenação por Placa, a YUI já possui funções de ordenação padrões e que trabalham com alguns tipos definidos.</p>
<p>No inicío de cada bloco de código estarei usando a sigla [COD_[1-9]{2}] para identificar o bloco de código quando o estiver referenciando em outros trechos do artigo, para facilitar a localização.</p>
<p>Pré-requisitos:</p>
<ol>
<li> Conhecimentos básicos em JavaScript.</li>
<li> Você precisa <a HREF="http://developer.yahoo.com/yui/download/" TARGET="_blank">baixar a YUI</a> e carregar os componentes na sua página html ou carregá-las apartir do próprio site do yahoo, para saber mais sobre este serviço entre no <a HREF="http://developer.yahoo.com/yui/articles/hosting/" TARGET="_blank">site.</a>. No desenrolar deste artigo usarei o serviço de hosting da YUI provido pelo Yahoo.</li>
</ol>
<p>Primeiramente é preciso incluir os scripts e os estilos no header do html:</p>
<ul>
<li>Estilos: <strong> [COD_01]</strong><br />
<coolcode lang="html"></p>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/reset/reset-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/fonts/fonts-min.css">
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.2.2/build/datatable/assets/datatable.css">
</coolcode>
</li>
<li>Mais estilo(Sobrecarrega algumas regras css, para fins de personalização): <strong>[COD_02]</strong><br />
<coolcode lang="html"></p>
<style type="text/css">
#exemplo {margin:1em;}
#exemplo table {border-collapse:collapse;}
#exemplo th, #exemplo td {border:1px solid #000;padding:.25em;}
#exemplo th {background-color:#696969;color:#fff;} 
#exemplo .yui-dt-odd {background-color:#eee;}
#exemplo em {font-style:italic;}
#exemplo strong {font-weight:bold;}
#exemplo .big {font-size:136%;}
#exemplo .small {font-size:77%}
</style>
<p></coolcode>
</li>
<li>YUI Scripts: <strong>[COD_03]</strong><br />
<coolcode lang="html"><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/yahoo/yahoo-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dom/dom-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/event/event-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/dragdrop/dragdrop-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datasource/datasource-beta-min.js"></script><br />
<script type="text/javascript" src="http://yui.yahooapis.com/2.2.2/build/datatable/datatable-beta-min.js"></script><br />
</coolcode>
</li>
<li>JavaScript para criação do DataTable:<strong>[COD_04]</strong><br />
<coolcode lang="javascript"><br />
	function init()<br />
	{<br />
		/**<br />
		 * Configura namespace para não haver conflitos referentes a nomes<br />
		 * e para facilitar a organização de objetos e etc.<br />
		 */</p>
<p>		 YAHOO.namespace(&#8220;exemplo&#8221;);</p>
<p>		 /**<br />
		  * Dados que serão usados no DataTable<br />
		  */<br />
		  YAHOO.exemplo.dados = {<br />
		  	veiculos: [<br />
		  		{placa:"JTX-0506", vistoria:new Date(2004, 2, 21), km:110000},<br />
		  		{placa:"JYZ-0469", vistoria:new Date(2001, 8, 10), km:65000},<br />
		  		{placa:"JTA-4591", vistoria:new Date(2000, 9, 5), km:45036},<br />
		  		{placa:"XYZ-4587", vistoria:new Date(2000, 5, 8), km:456978}<br />
		  	]<br />
		  };</p>
<p>		/**<br />
 		* Informações do cabeçalho para o widget.ColumnSet possa retornar<br />
 		* um objeto adapter(adaptador) para a renderização do DataTable.<br />
 		*/<br />
    	var Cabecalhos = [<br />
	    	{key:"placa", title:"Placa", sortable:true},<br />
    		{key:"vistoria", type:"date", sortable:true, resizeable:true},<br />
    		{key:"km", type:"number", sortable:true, resizeable:true}<br />
		];</p>
<p>		/**<br />
	 	* Objeto &#8220;configurador&#8221; do cabecalho<br />
	 	*/<br />
		var ConfiguraColunas = new YAHOO.widget.ColumnSet(Cabecalhos);</p>
<p>		/**<br />
	 	* Objeto DataSource é responsável por pegar, tratar e adaptar<br />
	 	* as informações para que o objeto DataTable possa renderizá-las<br />
	 	*/<br />
		var CapturaInformacoes = new YAHOO.util.DataSource(YAHOO.exemplo.dados.veiculos);<br />
			CapturaInformacoes.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;<br />
			CapturaInformacoes.responseSchema = {<br />
				fields: ["placa","vistoria","km"]<br />
		};</p>
<p>		/**<br />
	 	* Enfim cria o table<br />
                * O primeiro parametros é onde(div) será renderizado o seu DataTable<br />
	 	*/<br />
		var DataTable = new YAHOO.widget.DataTable(&#8220;exemplo&#8221;,<br />
		ConfiguraColunas, CapturaInformacoes, {caption:&#8221;Exemplo básico de DataTable&#8221;});<br />
	}</p>
<p>	/**<br />
	 * Quando a arvore DOM estiver carregada executa a função!<br />
	 * o YAHOO.util.Event é um utilitário do YUI para trabalhar com eventos<br />
	 */<br />
	YAHOO.util.Event.onDOMReady(init);<br />
</coolcode>
</li>
<li>Você pode fechar o header do html e então no corpo(body) colocar aonde o DataTable será renderizado, no caso: (Sem isso o DataTable não irá ser renderizado)<br />
<coolcode lang="html"></p>
<div id="exemplo"></div>
<p></coolcode>
</li>
</ul>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable.html"></iframe></p>
<p>Como podemos constatar no resultado acima as duas ordenações que realmente funcionam são as colunas por data e por quilometragem, pois o YUI reconhece os tipos informados nas linhas 28 e 29 do JavaScript , os tipos reconhecidos pela YUI são <strong>&#8220;string&#8221;, &#8220;number&#8221;, &#8220;date&#8221;, &#8220;currency&#8221;, &#8220;email&#8221; e &#8220;link&#8221;</strong>. Você pode clickar no cabeçalho da coluna <strong>&#8220;Placa&#8221;</strong> e você verá que a lógica de ordenação aplicada é a do tipo string, ou seja, pelas letras iniciais, mas precisamos que essa coluna seja ordenada pelo numero final da placa, pois sabemos que o pagamento do ipva de um veículo vence no mês do último número da placa, por exemplo final de placa 1 vence em Janeiro, 2 em Fevereiro e assim sucessivamente e as placas com final 0 vence em outubro.</p>
<p>Precisamos customizar a ordenação, vamos criar primeiramente as funções para ordenação crescente e decrescente, a YUI possui duas funções utilitárias para ajudar-nos nesta tarefa, são a <strong>YAHOO.util.Sort.compareAsc</strong> e a <strong>YAHOO.util.Sort.compareDesc<br />
</strong>, a primeira para comparação crescente e a segunda para comparação decrescente, vejamos sua utilização já aplicando ao problema que nós temos de ordenar os dados pelo final da placa, a seguir: <strong>[COD_05]</strong></p>
<p><coolcode lang="javascript"><br />
/**<br />
 * Ordenação Crescente<br />
 *<br />
 */<br />
var ordByPlacaAsc = function(a,b){<br />
        // Pega o final da primeira placa<br />
	var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
         // Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareAsc<br />
	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}</p>
<p>/**<br />
 * Ordenação Decrescente<br />
 *<br />
 */<br />
var ordByPlacaDesc = function(a,b){<br />
       // Pega o final da primeira placa<br />
       var finalPlaca1 = a.placa.charAt(a.placa.length &#8211; 1);<br />
	// Pega o final da segunda placa<br />
	var finalPlaca2 = b.placa.charAt(b.placa.length &#8211; 1);</p>
<p>	var compFnc = YAHOO.util.Sort.compareDesc</p>
<p>	// transforma em inteiro multiplicando por 1 e joga para<br />
	// a função utilitária de comparação<br />
	var resultado = compFnc(finalPlaca1*1,finalPlaca2*1);<br />
	return resultado;<br />
}<br />
</coolcode></p>
<p>Como podemos ver, basicamente temos o mesmo procedimento só que com funções utilitárias diferentes, você pode fazer a comparação nas linhas <strong>11 e 28</strong>, as funções utilitárias fazem a comparação e para a <strong>YAHOO.util.sort.compareAsc</strong> retornam <strong>-1</strong> se o primeiro argumento for < (menor que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é >(maior que) o segundo argumento e o inverso para a <strong>YAHOO.util.sort.compareDesc</strong>, ou seja, <strong>-1</strong> se o primeiro argumento for > (maior que) o segundo argumento, 0 se o primeiro argumento é igual( == ) ao segundo argumento e 1 se o primeiro argumento é < (menor que) o segundo argumento e assim a YUI vai ordenando os dados no <strong>DataTable</strong>, mas você está sentindo falta de algo ?! sim!, aonde parametrizamos para que o YUI utilize estas funções customizadas de ordenação ?!</p>
<p><strong>R:</strong> No bloco de código <strong>[COD_04]</strong> na linha <strong>27</strong> é possível passar um argumento chamado <strong>sortOptions</strong> contendo as informações referentes a customização da ordenação, veja um exemplo de como fica a <strong>linha 27</strong> inserindo as funções de ordenação:</p>
<p><coolcode lang="javascript"><br />
{key:&#8221;placa&#8221;, title:&#8221;Placa&#8221;, sortable:true, sortOptions:{ascFunction:ordByPlacaAsc,descFunction:ordByPlacaDesc}},<br />
</coolcode></p>
<p>Como resultado podemos ver a ordenação sendo feita pelo último número da Placa do veículo:</p>
<p>Resultado:</p>
<p><iframe align="center" src="http://danielmartins.eti.br/blog/exemplos/datatable1.html"></iframe></p>
<p>Já me estendi demais, espero que eu tenha conseguido exemplificar o uso básico do widget DataTable da YUI e de como customizar a ordenação, qualquer sugestão, correção ou crítica construtiva é bem vinda. Ajude-me a melhorar a qualidade dos artigos que escrevo.</p>
<p>Links essenciais que me serviram de consulta e para quem deseja exemplos mais ricos:<br />
<a href="http://developer.yahoo.com/yui">http://developer.yahoo.com/yui</a><br />
<a href="http://developer.yahoo.com/yui/examples/datatable/">http://developer.yahoo.com/yui/examples/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/datatable/">http://developer.yahoo.com/yui/datatable/</a><br />
<a href="http://developer.yahoo.com/yui/docs/module_datatable.html">http://developer.yahoo.com/yui/docs/module_datatable.html</a><br />
<a href="http://www.quirksmode.org/js/strings.html">http://www.quirksmode.org/js/strings.html</a></p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/07/03/yui-widget-datatable-ordenacao-customizada/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Recuperando arquivos deletados + Reiserfs</title>
		<link>http://danielmartins.eti.br/blog/2007/05/02/recuperando-arquivos-deletados-reiserfs-2/</link>
		<comments>http://danielmartins.eti.br/blog/2007/05/02/recuperando-arquivos-deletados-reiserfs-2/#comments</comments>
		<pubDate>Wed, 02 May 2007 21:59:37 +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[Traduções]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://daniel.jb0.org/2007/05/02/recuperando-arquivos-deletados-reiserfs-2/</guid>
		<description><![CDATA[Ontem, minha esposa deletou por acidente seus 3.3GB de mp3&#8230; Procurando no google achei o seguinte link: http://antrix.net/journal/techtalk/reiserfs_data_recovery_howto.html Testei e funcionou, consegui recuperar os arquivos deletados, então decidir escrever uma dica rápida passo de como fazer a recuperação de seus arquivos tendo em vista que não achei nada ainda em português que podesse satisfazer minha]]></description>
			<content:encoded><![CDATA[<p>Ontem, minha esposa deletou por acidente seus 3.3GB de mp3&#8230; </p>
<p>Procurando no google achei o seguinte link: <a href="http://antrix.net/journal/techtalk/reiserfs_data_recovery_howto.html">http://antrix.net/journal/techtalk/reiserfs_data_recovery_howto.html</a></p>
<p>Testei e funcionou, consegui recuperar os arquivos deletados, então decidir escrever uma <b>dica rápida </b>passo de como fazer a recuperação de seus arquivos tendo em vista que não achei nada ainda em português que podesse satisfazer minha dúvida.</p>
<p><span id="more-107"></span><br />
ESTES PROCEDIMENTOS NÃO POSSUEM GARANTIAS, FUNCIONOU PRA MIM NÃO É CERTEZA QUE FUNCIONE PRA VOCÊ, PORTANTO SEJA CAUTELOSO PORQUE UM PROCEDIMENTO ERRADO VOCÊ PODE DANIFICAR SUA PARTIÇÃO E ACABAR PERDENDO TOTALMENTE SEUS DADOS. PORTANTO USE POR SUA PRÓPRIA CONTA E RISCO, SEMPRE FAÇA SIMULAÇÕES E CÓPIAS DE SEGURANÇA(OS FAMOSOS <b>BACKUPS</b>)</p>
<ol>
<li>Se você deletou seus arquivos <b>não mexa </b>na sua partição.</li>
<li>Você precisa estar como root para continuar este processo, você precisa desmontar sua partição home,&nbsp; ou seja:<br />
<blockquote>umount /home</p></blockquote>
</li>
<li>De preferência faça o backup de sua partição se você estiver espaço!&nbsp; troque o <b>hdxY pela sua partição que pode ser hd[a-z][1-9]</b>&nbsp; você pode obter essa informação no /etc/fstab (Opcional mas muito recomendavel).<br />
<blockquote>dd if=/dev/hdxY conv=noerror &gt; /hdxY.img</p></blockquote>
</li>
<li>Então você executa o comando para realizar a mágica, novamente vale ressaltar que você deve trocar hdxY pela sua partição, esta é a parte mais demorada do processo e o tempo varia conforme o tamanho do disco a ser recuperado, após finalizar verifique o <b>/root/recovery.log</b> se você deseja obter mais informações:<br />
<blockquote>reiserfsck &#8211;rebuild-tree -S -l /root/recovery.log /dev/<b>hdxY</b></p></blockquote>
</li>
<li>Depois de ter finalizado o processo de recuperação monte novamente a partição <b>/home</b>, ou seja:<br />
<blockquote>mount /home</p></blockquote>
</li>
<li>Procure os arquivos na pasta <b>/home/lost+found</b> e seus arquivos provavelmente estarão lá, alguns arquivos ficaram sem nomes, porque nem tudo é perfeito <img src='http://danielmartins.eti.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</li>
<li>Faça a cópia de seus arquivos e da próxima vez tenha mais cuidado.</li>
</ol>
<p>Eu executei estes procedimentos no Ubuntu 7.04 e fui feliz. =)</p>
<p>:wq!</p>


<!-- Begin TwitThis script (http://twitthis.com/) -->
<div style="text-align:left;">
<script type="text/javascript" src="http://s3.chuug.com/chuug.twitthis.scripts/twitthis.js"></script>
<script type="text/javascript">
<!--
document.write('<a href="javascript:;" onclick="TwitThis.pop();"><img src="http://s3.chuug.com/chuug.twitthis.resources/twitthis_grey_72x22.gif" alt="TwitThis" style="border:none;" /></a>');
//-->
</script>
</div>
<!-- /End -->

]]></content:encoded>
			<wfw:commentRss>http://danielmartins.eti.br/blog/2007/05/02/recuperando-arquivos-deletados-reiserfs-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
