<?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>Log4Dev &#187; Ferramentas</title>
	<atom:link href="http://log4dev.com/category/ferramentas/feed/" rel="self" type="application/rss+xml" />
	<link>http://log4dev.com</link>
	<description></description>
	<lastBuildDate>Mon, 03 Oct 2011 22:20:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/pt_BR/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>Bitbucket com Git. Existe?</title>
		<link>http://log4dev.com/2011/10/03/bitbucket-com-git-existe/</link>
		<comments>http://log4dev.com/2011/10/03/bitbucket-com-git-existe/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 22:20:13 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=880</guid>
		<description><![CDATA[A partir de hoje existe. Segue um trecho do anúncio no blog do Bitbucket: You’ve been asking for it, we’ve even joked about it – now it’s here (for real): for the one year anniversary of Bitbucket joining Atlassian, we are happy to announce Git support. All your source, all in one-place Whether you are using Hg [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2011/10/03/bitbucket-com-git-existe/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>A partir de hoje existe. Segue um trecho do anúncio no <a href="http://blog.bitbucket.org/2011/10/03/bitbucket-now-rocks-git/">blog do Bitbucket</a>:
<blockquote>You’ve been asking for it, we’ve even <a rel="nofollow" href="http://blog.bitbucket.org/2009/04/01/announcing-git-support/">joked about it</a> – now it’s here (for real): for the one year anniversary of Bitbucket joining Atlassian, we are happy to announce <strong>Git support</strong>.
<h3 id="Gitbucketpublicblog-Allyoursourceallinone-place">All your source, all in one-place</h3>
Whether you are using Hg or Git, you can now keep all of your code in one place with your preferred DVCS format. If you have existing code you would like to migrate, you can easily <strong><a rel="nofollow" href="https://bitbucket.org/repo/import">import your Git, Mercurial or Subversion source code</a></strong>. We have added a new importer for GitHub to our existing site importers which include SourceForge, Google Code and Codeplex.</blockquote>
Além disso, eles anunciam 350 novidades e bugfixes.</p>

<p>Mas daí você me pergunta: &#8220;Porque usar o <strong>Bitbucket</strong> para armazenar meus repositórios <strong>Git</strong> em vez de usar o tradicional <strong>GitHub</strong>?&#8221;</p>

<p>Bom, se você está desenvolvendo projetos <strong>Open Source</strong>, provavelmente o <strong>GitHub</strong> seja uma opção mais apropriada, já que ele se tornou referência. Muitas empresas pedem que candidatos adicionem o seu endereço GitHub nos currículos. Já BitBucket eu nunca vi.</p>

<p>Em compensação, se você está desenvolvendo projetos fechados, aí o Bitbucket é vantajoso. Em todos os planos, o número de repositórios privados é ilimitados. Na conta gratuíta, a limitação fica por conta do número de usuários: 5 no máximo, o que é mais do que suficiente para 99% das startups (o <a href="http://siga.st">SIGA</a> é uma delas). Já para empresas maiores, por 80 dólares por mês você tem direito ao <a href="https://bitbucket.org/plans">plano UNLIMITED</a>: repositórios ilimitados e usuários ilimitados! No GitHub <a href="https://github.com/plans">o maior plano custa 200 dólares mensais</a>, e dá direito a no máximo 125 repositórios privados.</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2011/10/03/bitbucket-com-git-existe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Uma idéia na cabeça, um laptop na mão.</title>
		<link>http://log4dev.com/2011/07/06/uma-ideia-na-cabeca-um-laptop-na-mao/</link>
		<comments>http://log4dev.com/2011/07/06/uma-ideia-na-cabeca-um-laptop-na-mao/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 20:40:21 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Idéias]]></category>
		<category><![CDATA[Produto]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=865</guid>
		<description><![CDATA[Pessoas tem idéias de produtos ou soluções para problemas todos os dias. Muitas destas idéias são de fato interessante. Algumas pessoas possuem o conhecimento necessário para fazer com que esta idéia se torne realidade. Quase ninguém tem a persistência e a força de vontade necessárias para colocar a idéia no ar. Dos vários aspectos que me impressionaram e [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2011/07/06/uma-ideia-na-cabeca-um-laptop-na-mao/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Pessoas tem idéias de produtos ou soluções para problemas todos os dias. Muitas destas idéias são de fato interessante. Algumas pessoas possuem o conhecimento necessário para fazer com que esta idéia se torne realidade. Quase ninguém tem a persistência e a força de vontade necessárias para colocar a idéia no ar.</p>

<p>Dos vários aspectos que me impressionaram e agradaram na minha curta passagem pelo <a href="http://apontador.com.br">Apontador</a>, um que me agradou muito foi a concentração de pessoas boas que tinham projetos pessoais interessantes e funcionando, com pinta de sistema profissional. Corroborou mais uma das minhas teorias sobre empresas PONTOCOM: atraem pessoas diferentes, que gostam de criar e resolver problemas.</p>

<p>Eu gostaria de citar dois destes projetos, que eu usei e que realmente me ajudaram.</p>

<p>O primeiro é o <a href="http://www.cruzalinhas.com/">Cruzalinhas</a>, desenvolvido pelo <a href="http://chester.blog.br/sobre">Chester</a>. Parafraseando o site, o Cruzalinhas permite que uma pessoa &#8220;<em>saiba quais linhas de ônibus, trem ou metrô passam perto de um lugar em São Paulo&#8221;. </em>A interface não poderia ser mais intuitiva: clique em um ponto do mapa da cidade, e veja todas as linhas de ônibus e metrô que passam por perto. Clique em um segundo ponto, e veja todas as linhas que podem potencialmente levá-lo de um lugar para o outro.</p>

<p>O segundo é o <a href="http://www.encontreseupacote.com.br/">Encontre Seu Pacote</a>, criado pelo Thiago Ganzarolli, colega de UNICAMP. O sistema permite rastrear os pacotes enviados por SEDEX em um mapa, por RSS ou via Direct Message do Twitter. O screencast deles, plagiado abaixo, explica melhor o funcionamento.</p>

<p><object width="640" height="390"><param name="movie" value="http://www.youtube.com/v/NGJJXL_308M&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" width="640" height="390" src="http://www.youtube.com/v/NGJJXL_308M&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2011/07/06/uma-ideia-na-cabeca-um-laptop-na-mao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Projectional Language Workbenches</title>
		<link>http://log4dev.com/2011/01/16/projectional-language-workbenches/</link>
		<comments>http://log4dev.com/2011/01/16/projectional-language-workbenches/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 18:56:43 +0000</pubDate>
		<dc:creator>Thiago Bartolomei</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=820</guid>
		<description><![CDATA[Eu pensei bastante em como traduzir esse nome, mas não gostei de &#8220;Bancada Projecional de Linguagens&#8221;, então me perdoem mas vou usar em inglês mesmo. Projectional Language Workbench é um termo cunhado pelo Martin Fowler pra descrever um novo tipo de ferramenta usada em programação orientada a linguagens. A idéia deste post é apresentar brevemente [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2011/01/16/projectional-language-workbenches/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Eu pensei bastante em como traduzir esse nome, mas não gostei de &#8220;Bancada Projecional de Linguagens&#8221;, então me perdoem mas vou usar em inglês mesmo. <a href="http://martinfowler.com/articles/languageWorkbench.html">Projectional Language Workbench</a> é um termo cunhado pelo <a href="http://martinfowler.com">Martin Fowler</a> pra descrever um novo tipo de ferramenta usada em programação orientada a linguagens. A idéia deste post é apresentar brevemente os principais conceitos por traz disso. Eu aconselho os interessados a ler os artigos do Martin Fowler e o <a href="http://confluence.jetbrains.net/display/MPSD1/MPS+User%27s+Guide">guia do MPS</a> (em inglês).</p>

<p>Programação orientada a linguagens é um termo pra descrever a idéia de usar várias linguagens específicas de domínio (domain specific languages, DSLs) para desenvolver software. DSLs são linguagens criadas com um escopo limitado, o &#8220;domínio&#8221;. A vantagem de uma DSL é que ela contém abstrações bem próximas ao domínio, então em teoria usuários conseguem se expressar mais facilmente do que em uma linguagem de propósito geral (general purpose language, GPL). Por exemplo, <a href="http://dinosaur.compilertools.net/">lex e yacc</a> são DSLs para descrever lexers e parsers, respectivamente. Você não vai escrever o compilador inteiro com elas, mas são ótimas, concisas, pra descrever aquele domínio específico. Se você fez um curso de compiladores sabe muito bem o trabalho que daria pra escrever o lexer e o parser &#8220;na mão&#8221;.</p>

<p>Um problema de se usar várias DSLs pra desenvolver um sistema é que nem sempre os domínios de cada DSL são tão bem separados como no caso de lexers, parsers e o backend do compilador. Muitas vezes as linguagens precisam interagir mais. Por exemplo, imagine que você tem um programa em Java e em alguma parte precisa definir uma máquina de estado. Um jeito é implementar a máquina de estado direto em Java. Outro jeito é criar uma DSL pra máquinas de estado, vamos chamar de SML (state machine language), que você pode reusar em vários projetos e que esconde detalhes da implementação Java. Mas então o código fonte teria que conter código Java e código escrito em SML. O problema é que as duas linguagens interagem, e escrever um compilador que entenda Java e SML é complicado.</p>

<p>É aí que entram projectional language workbenches. A idéia principal, a meu ver, é que o sistema é apresentado e desenvolvido por intermédio de projeções. DSLs são utilizadas pra descrever projeções do sistema e elas são compostas como meta-modelos. Por exemplo, você pode ver e manipular a sua máquina de estado usando uma projeção em Java ou uma projeção em SML. A sintaxe concreta usada pra cada projeção é definida por editores e você pode ter diversos editores pra uma linguagem. Por exemplo, SML pode ter uma sintaxe textual pra máquinas de estado, ou pode ter uma linguagem visual que mostre os estados e as transições como nós e setas. O que importa é que quando se manipula os conceitos no editor, se está manipulando o sistema através dessa projeção.</p>

<p>E qual é a vantagem? A principal, eu acho, é que se elimina o frontend do compilador e com isso vários dos problemas de se combinar linguagens. Ou seja, não existem mais lexers ou parsers, tudo o que existe é a abstract syntax tree (AST). O editor de Java não é um editor de texto, é um editor estruturado que permite manipular a AST diretamente. Dessa maneira, editores de diferentes linguagens podem ser compostos. Por exemplo, no seu editor de Java você pode visualizar a máquina de estados com o editor de SML.</p>

<p>E as desvantagens? Bom, eu acho que ainda existem muitos problemas. Não está claro ainda se desenvolvedores vão ser produtivos em editores estruturados. O fonte do sistema fica dependente de uma certa ferramenta (não se tem mais texto que pode ser compilado por diferentes ferramentas, se tem a descrição do sistema usando o meta-modelo específico daquela ferramenta). Além disso, ainda não está claro que tipo de problemas vão ocorrer agora que estamos compondo linguagens em um nível mais alto de abstração.</p>

<p>E onde pode-se ver esses conceitos em ação? Eu aconselho dar uma brincada com <a href="http://www.jetbrains.com/mps/">MPS</a>. MPS é uma implementação bastante sólida de projectional language workbenches sendo desenvolvida pela <a href="http://www.jetbrains.com">Jetbrains</a> (que faz o IntelliJ IDEA). Em MPS você pode criar DSLs e combinar com Java e outras DSLs. O <a href="http://www.voelter.de/">Markus Voelter</a> criou também uma implementacão em C pra desenvolver sistemas embarcados, num projeto chamado <a href="http://mbeddr.wordpress.com/">mbeddr</a>.</p>

<p>Será que projectional language workbenches vai ser o jeito de se programar no futuro? Não sei (provavelmente não), mas vale a pena observar o que está sendo experimentado, pois com certeza é um paradigma interessante e que pode trazer bons insights. E se tudo o que eu escrevi aqui parece abstrato demais, dê uma lida nos textos do Martin Fowler pois ele entra em detalhes. E também não hesite em fazer perguntas (eu tenho um pouco de experiência com MPS e posso tentar ajudar).</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2011/01/16/projectional-language-workbenches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AWS de graça&#8230;</title>
		<link>http://log4dev.com/2010/10/22/aws-de-graca/</link>
		<comments>http://log4dev.com/2010/10/22/aws-de-graca/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 12:31:38 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Notícias]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=826</guid>
		<description><![CDATA[&#8230;por um ano, com uma configuração limitada! Nada é perfeito, eles não são bobos nem nada, mas a oferta já permite brincar um pouco com os serviços da Amazon e sentir o gostinho de ter uma infra mais parruda. A promoção passa a valer a partir de primeiro de Novembro deste ano, e oferece a [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2010/10/22/aws-de-graca/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>&#8230;por um ano, com uma configuração limitada!</p>

<p><img class="aligncenter" src="http://awsmedia.s3.amazonaws.com/logo_aws.gif" alt="AWS Free" width="164" height="60" /></p>

<p>Nada é perfeito, eles não são bobos nem nada, mas a oferta já permite brincar um pouco com os serviços da Amazon e sentir o gostinho de ter uma infra mais parruda. A promoção passa a valer a partir de primeiro de Novembro deste ano, e oferece a seguinte configuração por mês:
<ul>
    <li>750 hours of <a href="http://aws.amazon.com/ec2">Amazon EC2</a> Linux Micro Instance usage (613 MB of memory and 32-bit and 64-bit  platform support) – enough hours to run continuously each month<code><em></code></li>
    <li>750 hours of an <a href="http://aws.amazon.com/elasticloadbalancing/">Elastic Load Balancer</a> plus 15 GB data processing</em></li>
    <li>10 GB of <a title="EBS" href="http://aws.amazon.com/ebs">Amazon Elastic Block Storage</a>, plus 1 million I/Os, 1 GB of snapshot storage, 10,000 snapshot Get Requests and 1,000 snapshot Put Requests<code><em></code></li>
    <li>5 GB of <a href="http://aws.amazon.com/s3">Amazon S3 storage</a>, 20,000 Get Requests, and 2,000 Put Requests<code></em></code></li>
    <li>30 GB per of internet data transfer (15 GB of data transfer “in”  and 15 GB of data transfer “out” across all services except Amazon  CloudFront)<code><em></code></li>
    <li>25 <a href="http://aws.amazon.com/simpledb">Amazon SimpleDB</a> Machine Hours and 1 GB of Storage<code><strong></code></li>
    <li>100,000 Requests of <a title="SQS" href="http://aws.amazon.com/sqs">Amazon Simple Queue Service</a><code></strong></code></li>
    <li>100,000 Requests, 100,000 HTTP notifications and 1,000 email notifications for <a title="SNS" href="http://aws.amazon.com/sns">Amazon Simple Notification Service</a><code></em>*</code></li>
</ul>
Segue o texto do anúncio:
<blockquote>To help <strong>new AWS customers</strong> get started in the cloud, AWS is introducing a new free usage tier.  Beginning November 1, new AWS customers will be able to run a free Amazon EC2  Micro Instance for a year, while also leveraging a new free usage tier  for Amazon S3, Amazon Elastic Block Store, Amazon Elastic Load  Balancing, and AWS data transfer. AWS’s  free usage tier can be used for anything you want to run in the cloud:  launch new applications, test existing applications in the cloud, or  simply gain hands-on experience with AWS.</blockquote>
Mais informações em <a href="http://aws.amazon.com/free/" target="_blank">http://aws.amazon.com/free/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2010/10/22/aws-de-graca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HgInit</title>
		<link>http://log4dev.com/2010/04/20/hginit/</link>
		<comments>http://log4dev.com/2010/04/20/hginit/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 15:02:50 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=736</guid>
		<description><![CDATA[Eu já twittei sobre isso, e já salvei no del.icio.us do Log4Dev. Mas dada a qualidade do material, acho que vale a pena comentar rapidamente aqui. O Joel Spolsky escreveu um excelente artigo/tutorial sobre o Mercurial, sistema de controle de versão distribuído (DCVS para os íntimos) que anda na moda ultimamente. O endereço é http://hginit.com. [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2010/04/20/hginit/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Eu já <a href="http://twitter.com/log4dev/status/9870112215">twittei</a> sobre isso, e já salvei no <a href="http://delicious.com/log4dev">del.icio.us do Log4Dev</a>. Mas dada a qualidade do material, acho que vale a pena comentar rapidamente aqui. O <strong>Joel Spolsky </strong>escreveu um excelente artigo/tutorial sobre o <a href="http://mercurial.selenic.com/">Mercurial</a>, sistema de controle de versão distribuído (DCVS para os íntimos) que anda na moda ultimamente.</p>

<p><a href="http://log4dev.com/wp-content/uploads/2010/04/hg.jpeg"><img class="aligncenter size-full wp-image-737" title="Hg Init" src="http://log4dev.com/wp-content/uploads/2010/04/hg.jpeg" alt="Hg Init" width="275" height="141" /></a></p>

<p>O endereço é <a title="HgInit" href="http://hginit.com">http://hginit.com</a>. O conteúdo serve tanto para aqueles que já se convenceram da utilidade e precisam entender o modus operandi (que foi o meu caso), como para os céticos que não deram muita bola e precisam ser convencidos.</p>

<p>E acreditem: o texto convenceu até <strong>The One Who Can&#8217;t Be Named</strong>.</p>

<p>Não é pouca porcaria não&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2010/04/20/hginit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fatos sobre Erlang</title>
		<link>http://log4dev.com/2010/02/11/fatos-sobre-erlang/</link>
		<comments>http://log4dev.com/2010/02/11/fatos-sobre-erlang/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 20:39:17 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=724</guid>
		<description><![CDATA[Compilação de alguns pontos relevantes sobre Erlang, feita por Odracir: Linguagem de programação de propósito geral, com ambiente de execução (runtime environment) implementado numa máquina virtual; Possui suporte &#8220;embutido&#8221; para concorrência, distribuição, e tolerência à falhas. É &#8220;Open-Source&#8221;, distribuído através da licença &#8220;ERLANG PUBLIC LICENSE&#8220;, que é essencialmente a Mozilla (Netscape) Public Licence, porém com [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2010/02/11/fatos-sobre-erlang/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Compilação de alguns pontos relevantes sobre Erlang, feita por Odracir:
<ul>
    <li>Linguagem de programação de propósito geral, com ambiente de execução (runtime environment) implementado numa máquina virtual;</li>
    <li>Possui suporte &#8220;embutido&#8221; para concorrência, distribuição, e tolerência à falhas.</li>
    <li>É &#8220;Open-Source&#8221;, distribuído através da licença &#8220;<!--startwikilink:http://www.erlang.org/EPLICENSE--><a title="Texto integral da &quot;ERLANG PUBLIC LICENSE&quot;." rel="__blank" href="http://www.erlang.org/EPLICENSE">ERLANG PUBLIC LICENSE</a><!--stopwikilink-->&#8220;, que é essencialmente a Mozilla (Netscape) Public Licence, porém com algumas poucas modificações para torna-la compatível com a legislação Sueca.</li>
    <li>É escrito em C, e é  portável para diversas plataformas.</li>
    <li>Muito escalável!  Sua máquina virtual é responsável pela criação de &#8220;processos leves&#8221; de forma  rápida e barata, tanto em termos de utilização de recursos de CPU como de memória. Em outras linguagens de programação, normalmente estes serviços são delegados para o sistema operacional, o que limita  o número máximo de processos simultâneos permitidos.</li>
    <li>Para modelar um sistema um Erlang nós usamos: &#8220;COP &#8211; Concurrency Oriented Programming&#8221;.</li>
    <li>Não existe estado compartilhado&#8230;</li>
    <li>Variáveis podem ser atribuídas apenas uma única vez. (Single assignment variables)</li>
    <li>Os processos se comunicam entre si através do envio de mensagens (cópias imutáveis) assíncronas.</li>
    <li>Tipicamente um código escrito em Erlang faz uso dos diversos núcleos disponíveis nas CPUs modernas, praticamente sem codificação adicional. Testes mostram que clusters com 16 máquinas executam um programa 14,55 vezes mais rápido do que o mesmo programa sendo executado numa única máquina, sem codificação adicional ou específica para isto!</li>
    <li>Permite a interoperabilidade com C,C++, Java, Ruby, Python, Perl, etc &#8230;</li>
    <li>Estudos mostram que para um mesmo projeto, o código Erlang é de 4 à 10 vezes menor que seu equivalente escrito em C++.</li>
    <li>Possui a biblioteca  OTP (Open Telecom Platform).</li>
    <li>Em situações extremas de &#8220;carga&#8221;, um sistema Erlang tende a degradar seu desempenho, mas não para de funcionar.</li>
</ul></p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2010/02/11/fatos-sobre-erlang/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Histórico no Admin do Django</title>
		<link>http://log4dev.com/2009/12/14/historico-no-admin-do-django/</link>
		<comments>http://log4dev.com/2009/12/14/historico-no-admin-do-django/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 07:00:28 +0000</pubDate>
		<dc:creator>Miguel Galves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=696</guid>
		<description><![CDATA[A funcionalidade de geração automática (de qualidade) de uma área de administração em projetos Django foi talvez a grande responsável por eu preferir esse framework ao Turbogears (junto com o fato do Turbogears ser na verdade uma federação de pequenos projetos). Pode parecer bobo, mas desenvolver uma área de admin bem feita é custoso, e [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2009/12/14/historico-no-admin-do-django/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>A funcionalidade de geração automática (de qualidade) de uma <strong>área de administração</strong> em projetos <a href="http://www.djangoproject.com">Django</a> foi talvez a grande responsável por eu preferir esse framework ao Turbogears (junto com o fato do <a href="http://turbogears.org/">Turbogears</a> ser na verdade uma federação de pequenos projetos). Pode parecer bobo, mas desenvolver uma área de admin bem feita é custoso, e ter uma versão básica bem feita de graça pode ser um grande diferencial na hora de construir algo novo.</p>

<p>Dentre as várias funções interessantes oferecidas por este admin, o <strong>histórico de operações sobre os objetos</strong> merece destaque:  cada ação efetuada sobre todo e qualquer objeto através do admin é gravada em uma tabela de histórico gerada automaticamente (data, usuário, objeto modificado, natureza da modificação), que pode ser visualizada em uma tabela web.</p>

<p>Infelizmente, este histórico é gerado automaticamente apenas para ações efetuadas através do admin. Recentemente, tive a necessidade de gravar o histórico de operações efetuadas por tarefas em background no <a href="http://www.sigaseutime.com.br">SigaSeuTime</a> (envio de anúncios comerciais para o Twitter), que me permitissem controlar de forma unificada e centralizada o bom funcionamento do sistema.</p>

<p>Pesquisando um pouco, descobri como fazer isso de forma simples com um código pequeno, que vou reproduzir abaixo:
<pre>from django.contrib.admin.models import LogEntry
from django.contrib.contenttypes.models import ContentType</p>

<p>def grava<em>historico(objeto, mensagem, usuario):
         LogEntry.objects.log</em>action(
                    user<em>id         = usuario.id,
                    content</em>type<em>id = ContentType.objects.get</em>for<em>model(objeto).pk,
                   object</em>id       = objeto.pk,
                   object<em>repr     = mensagem, # Message you want to show in admin action list
                   change</em>message  = mensagem, # I used same
                   action_flag     = 4
          )</pre>
Chamando este código, ações sobre um objeto serão gravadas na tabela de histórico, e poderão ser vista na área de administração do Django. Simples e extremamente útil.</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2009/12/14/historico-no-admin-do-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pro Git</title>
		<link>http://log4dev.com/2009/10/05/pro-git/</link>
		<comments>http://log4dev.com/2009/10/05/pro-git/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 18:29:53 +0000</pubDate>
		<dc:creator>Raphael Lullis</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=660</guid>
		<description><![CDATA[Semana passada eu estava buscando material de referência para algumas configurações do Git e achei um livro muito bom, chamado Pro Git. O livro foi escrito por Scott Chacon e publicado pela Apress. Como o livro foi publicado sob a licença do Creative Commons, está aberto para traduções e até mesmo adaptações. No verdadeiro espírito [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2009/10/05/pro-git/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Semana passada eu estava buscando material de referência para algumas configurações do Git e achei um livro muito bom, chamado <a href="http://progit.org/">Pro Git</a>. O livro foi escrito por Scott Chacon e publicado pela Apress. Como o livro foi publicado sob a licença do Creative Commons, está aberto para traduções e até mesmo adaptações.</p>

<p>No verdadeiro espírito de <em>eating your own dog food</em>, o autor do livro colocou o código-fonte do livro no GitHub e qualquer pessoa pode fazer um fork, para fazer modificações no material. Vi que a tradução para pt_br foi iniciada, mas ainda estava tímida. Ato contínuo, fiz um <a href="http://github.com/lullis/progit">fork</a> do projeto e comecei a fazer a tradução.</p>

<p>A minha idéia é completar a tradução e colocar aqui no site, em uma seção separada. Obviamente, não é algo que vai ficar pronto em uma semana, ainda mais se eu fizer sozinho. Então, fica a dica: se você quer aprender a mexer com o Git, ajudar a fazer a tradução do livro <em>enquanto</em> usa o Git é o casamento perfeito entre teoria e prática.</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2009/10/05/pro-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ferramentas de busca</title>
		<link>http://log4dev.com/2009/09/19/ferramentas-de-busca/</link>
		<comments>http://log4dev.com/2009/09/19/ferramentas-de-busca/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 13:55:04 +0000</pubDate>
		<dc:creator>Leonardo Garcia</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Idéias]]></category>
		<category><![CDATA[Opinião]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=647</guid>
		<description><![CDATA[Outro dia, num almoço com outros alunos de pós-graduação do Instituto de Computação da Unicamp, estávamos conversando sobre ferramentas de busca e o que elas fazem bem ou mal para nós. Na verdade a conversa começou porque uma professora tinha pedido a mim para procurar o número de artigos que referenciavam três artigos que eu [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2009/09/19/ferramentas-de-busca/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Outro dia, num almoço com outros alunos de pós-graduação do Instituto de Computação da Unicamp, estávamos conversando sobre ferramentas de busca e o que elas fazem bem ou mal para nós.</p>

<p>Na verdade a conversa começou porque uma professora tinha pedido a mim para procurar o número de artigos que referenciavam três artigos que eu estava estudando. Esta é uma métrica bastante utilizada no meio científico para ver quão bom um artigo é. Quanto mais referências um artigo tem em um menor espaço de tempo indica quão mais importante para o meio acadêmico de uma forma geral são as idéias defendidas naquele artigo.</p>

<p>Para fazer esta busca, a professora sugeriu que utilizássemos uma ferramenta de busca desenvolvida especificamente para este propósito: o <a href="http://citeseer.ist.psu.edu/">Citeseer</a>. Basicamente o que esta ferramenta faz é buscar numa base de dados as informações sobre um artigo e as referências cruzadas que outros artigos catalogados na mesma base de dados tem com este artigo buscado. Fiz uma busca para os três artigos que eram meu foco e&#8230; nada. Não me lembro exatamente dos resultados, mas acho que um nem foi encontrado e os outros dois, apesar de terem sido encontrados, não eram referenciados por ninguém.</p>

<p>O problema, neste caso, era que eu estava trabalhando com artigos muito novos, publicados no final do ano passado. Como o Citeseer, se não me engano, nem utiliza uma base de dados própria, não havia tido tempo suficiente para esta base de dados, que é alimentada com dados de algumas das principais organizações de pesquisa do mundo (no caso de computação, por exemplo, ACM e IEEE), fosse devidamente atualizada pelos diversos intermediários até chegar ao pessoal do Citeseer.</p>

<p>Tentei, então, o <a href="http://citeseerx.ist.psu.edu/">CiteseerX</a>, uma versão nova da engine do Citeseer que ainda está na versão beta. Sem sucesso também.</p>

<p>A minha última tentativa foi, então, o <a href="http://scholar.google.com/">Google Scholar</a>. Bom, ele pelo menos conseguiu identificar os meus artigos (provando mais uma vez que o Google realmente consegue indexar algumas coisas bem rápido). Mas ainda assim meus artigos não eram referenciados. Tudo bem. Eles eram novos e isso era de se esperar.</p>

<p>Mas ai, no meio disto tudo, veio à tona três perguntas interessantes: você já usou outra ferramenta de busca que não o Google? Se sim, quando e porque você mudou para o Google? Será que um dia vamos parar de usar o Google?</p>

<p>Muita gente que eu conheço sempre usou o Google. Acho que estas pessoas teriam ainda mais dificuldades de mudar de ferramenta de busca um dia, eventualmente, se isto acontecesse.</p>

<p>Bem, este não é o meu caso. E toda esta conversa que tivemos me fez lembrar de quando comecei a usar a Internet. Este ano faz quinze anos (nem eu imaginava que já era tanto tempo). Em 1994, a <em>World Wide Web</em> estava engatinhando ainda. As ferramentas de busca, idem.</p>

<p>Na verdade, em 1994 não existia nenhuma ferramenta de busca que merecesse este nome para falar a verdade. Naquela época, eu e muitos outros colecionávamos os endereços que achávamos mais interessantes. Eu tinha uma planilha que chegou a ter cerca de 200 endereços catalogados e divididos em categorias. Nesta época eu já via a necessidade de ter uma ferramenta de busca (que fosse uma busca na minha planilha), mas eu não tinha conhecimento técnico para fazer isto &#8212; infezlimente; se tivesse, talvez eu estaria milhionário hoje.</p>

<p>O fato é que, naquela época, agrupar endereços em diretórios era tudo o que dava para ser feito. Foi assim que nasceu, também em 1994, o &#8220;Jerry and David&#8217;s Guide to the World Wide Web&#8221;, que, ainda naquele ano passou a se chamar &#8220;Yet Another Hierarchical Officious Oracle&#8221; ou, simplesmente, Yahoo!. Mais da história inicial do Yahoo! pode ser encontrada <a href="http://docs.yahoo.com/info/misc/history.html">aqui</a>.</p>

<p>Eu não tive o prazer de acessar o site inicial de Jerry and David pelo meu navegador Mosaic (primeiro navegador existente e predecessor do Netscape 1.0). Mas a versão inicial do Yahoo! eu usei. Era o melhor que se tinha na época. Andei procurando no <a href="http://www.archive.org/index.php">Internet Archive</a> uma versão do site inicial do Yahoo!, onde só existia a estrutura de diretórios e nenhuma ferramenta de busca ainda. Mas nem mesmo o Internet Archive indexava páginas há tanto tempo atrás. A primeira home page do Yahoo! que existe lá é de outrubro 1996. Clique <a href="http://web.archive.org/web/19961017235908/http://www2.yahoo.com/">aqui</a> para dar uma olhada (até os links funcionam! <img src='http://log4dev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Nela existe a famosa estrutura de diretórios do início do Yahoo! (que deve existir até hoje) e uma ferramenta de busca (talvez a primeira da qual eu me lembre).</p>

<p>Eu parei de usar o Yahoo!, se não me engano, pouco antes de entrar na faculdade, em 1999. Naquela época já existia uma ferramenta de busca chamada AltaVista que conseguia atingir diversos sites que, aparentemente, não eram visitados ou corretamente classificados pelo Yahoo!. Como dizia o próprio slogan do <a href="http://web.archive.org/web/19990125093146/www.altavista.com/">AltaVista</a>, ele era &#8220;The most powerful and useful guide to the Net&#8221;. O <a href="http://www.altavista.com">AltaVista</a> ainda existe. Hoje ele é parte do Yahoo!, que, se não me falha a memória, em um determinado ponto no tempo comprou a engine do AltaVista para utilizar em suas próprias buscas. Eu, no entanto, não voltei a usar o Yahoo! como ferramenta de busca.</p>

<p>Até que, já lá para o meio do meu tempo de faculdade, muitas pessoas vinham me falar do Google. Com o tempo, as buscas que eu fazia no AltaVista já não pareciam tanto satisfatórias. E, quando eu, insatisfeito, ia até o Google e repetia a mesma busca, ele me retornava resultados melhores. Com o tempo, fui largando o AltaVista e passei a usar somente o Google.</p>

<p>Como já comecei a usar o Google quando ele era uma ferramenta estável, usei o Internet Archive para buscar as primeiras versões da página do Google. É interessante notar que a <a href="http://web.archive.org/web/19981111183552/google.stanford.edu/">primeira página registrada para o Google no Internet Archiv</a>e (que, neste caso, deve ser a primeira página deles mesmo) não era tão diferente da atual e o nome Google aparecia com um ponto de exclamação no final  (&#8220;Google!&#8221;)&#8230; será que isto tinha alguma coisa a ver com o então maior site de busca do momento &#8220;Yahoo!&#8221;? <img src='http://log4dev.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Yahoo!, inclusive, para o qual o engine criado por Larry Page e  Sergey Brin (fundadores do Google) foi oferecido e rejeitado, o que levou à criação do Google. Mas isto é outra história&#8230;</p>

<p>Bom, o fato é que o tempo foi passando e hoje o Google, para mim, está agregado em rotinas automáticas no meu computador. Para falar a verdade, não acesso mais a ferramenta de busca pela página web do Google já faz muito tempo. Uso apenas o plug-in de busca para o Firefox ou o Google Desktop para fazer isso. Com isto, fica cada vez mais difícil a mudança para outra ferramenta de busca, na minha opinião, pois tudo já está pronto e funcionando assim.</p>

<p>No entanto, isto não quer dizer que não existam outras opções. Ano passado foi lançado o <a href="http://www.cuil.com/">Cuil</a> (leia-se &#8220;cool&#8221;), um site de busca criado por ex-funcionários do Google. O grande diferencial do Cuil seria a não utilização da popularidade de uma página como item preponderante no cálculo de relevância da página, o que pode ser bem interessante em alguns casos, especialmente quando se busca conhecimento e não simplesmente popularidade. No entanto, eles mesmo adimitiam na época que não era necessário apenas uma boa ferramenta de busca: o maior trabalho estaria em quebrar a inércia dos usuários (a minha, por exemplo, como descrevi no parágrafo anterior, é bem alta).</p>

<p>Outra que sempre tentou desbancar o Google foi a Microsoft. Ano passado ela tentou comprar o Yahoo!. Não deu certo. Este ano ela lançou o <a href="http://www.bing.com/">Bing</a>, sua nova ferramenta de busca. Apesar do visual mais bacana que o do Google (na minha opinião) e de ele vir embutido em vários produtos da Microsoft, isto não foi suficiente para mudar a inércia do usuário.</p>

<p>Sinceramente, eu acho que a única maneira de quebrar esta inércia do usuário em relação às ferramentas de busca que ele usa é criar algo que o Google ainda não oferece (não me pergunte o que&#8230; se eu soubesse não estaria escrevendo este post, mas sim implementando esta idéia <img src='http://log4dev.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ). Ou fornecer ferramentas de busca que retornem resultados mais aprimorados que os do Google em campos nos quais o Google talvez não seja satisfatório. Eu listaria como dois campos em que o Google está longe de ser satisfatório em relação às buscas, na minha opinião, as buscas por imagens e por vídeos. O &#8220;Santo Graal&#8221; nestas áreas, por mim, seria conseguir fazer busca não pelos textos das páginas em que as figuras ou os vídeos aparecem, mas sim fazer busca pelo significado das imagens e dos vídeos mesmo. Algo que eu acho que a computação ainda está um pouco longe de conseguir fazer de forma automática e eficiente.
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1009px; width: 1px; height: 1px;"></p>

<p><span style="font-family: arial;">&#8220;Jerry and David&#8217;s Guide to the World Wide Web&#8221;</span></p>

<p><span style="font-family: arial;">&#8220;Jerry and David&#8217;s Guide to the World Wide Web&#8221;</span></div></p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2009/09/19/ferramentas-de-busca/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Desenvolvendo O Eclipse &#8211; construindo seu primeiro plug-in</title>
		<link>http://log4dev.com/2009/09/06/desenvolvendo-o-eclipse-construindo-seu-primeiro-plug-in/</link>
		<comments>http://log4dev.com/2009/09/06/desenvolvendo-o-eclipse-construindo-seu-primeiro-plug-in/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 00:15:19 +0000</pubDate>
		<dc:creator>Leonardo Garcia</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Linguagens de Programação]]></category>
		<category><![CDATA[Plug-in]]></category>

		<guid isPermaLink="false">http://log4dev.com/?p=633</guid>
		<description><![CDATA[Escutamos muito as pessoas falarem em desenvolvimento no Eclipse, utilizando esta ferramenta poderosa como plataforma de desenvolvimento. Para mim o Eclipse é a melhor plataforma de desenvolvimento genérica na qual eu já trabalhei. E, certamente, é uma das melhores plataformas de desenvolvimento para Java (para mim A melhor) e C/C++ (com certeza não A melhor) [...]]]></description>
			<content:encoded><![CDATA[<p><div class='wpfblike' style='height: 40px;'><fb:like href='http://log4dev.com/2009/09/06/desenvolvendo-o-eclipse-construindo-seu-primeiro-plug-in/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' send='true' /></div>Escutamos muito as pessoas falarem em desenvolvimento no Eclipse, utilizando esta ferramenta poderosa como plataforma de desenvolvimento. Para mim o Eclipse é a melhor plataforma de desenvolvimento genérica na qual eu já trabalhei. E, certamente, é uma das melhores plataformas de desenvolvimento para Java (para mim A melhor) e C/C++ (com certeza não A melhor) que eu já usei.</p>

<p>Opiniões pessoais a parte, eu passei três anos, de 2006 a 2008, não apenas utilizando o Eclipse como plataforma de desenvolvimento mas também como produto final do meu trabalho. Ou seja, eu não só desenvolvi no Eclipse. Eu desenvolvi O Eclipse.</p>

<p>Muitas pessoas escutam falar que o Eclipse é uma plataforma extensível. Afinal de contas, se fosse diferente, certamente não teríamos os incontáveis plug-ins para Eclipse que adicionam inúmeras funcionalidades interessantes. O que talvez nem todo mundo saiba é que extender o Eclipse é muito fácil! E talvez por não saberem disso, acabam achando que é algo difícil e não se aventuram por este mundo interessante.</p>

<p>O melhor de tudo é que para extender o Eclipse a única coisa que você precisa é do própio Eclipse! Ou seja, a melhor ferramenta para desenvolver o Eclipse é o próprio Eclipse.</p>

<p>Neste artigo vou abordar o passo-a-passo de como criar um plug-in simples para o Eclipse.</p>

<p>Primeiramente, alguns conceitos. O Eclipse possui o que chamamos de pontos de extensão (extension points). Estes são arquivos XML que possuem configurações que definem possíveis extensões do Eclipse. A plataforma básica já fornece uma série de pontos de extensão que podem ser facilmente utilizados para extender as funcionalidades já disponíveis (por exemplo, neste mini-tutorial iremos criar um novo menu com uma ação específica). À medida em que você for ganhando mais traquejo na implementação de pontos de extensão, você vai naturalmente notar a necessidade de você mesmo criar seus próprios pontos de extensão a partir de coisas que você extendeu anteriormente da plataforma básica (espero falar disso em um post futuro).</p>

<p>Mas vamos ao que interessa a este tutorial. Para começar você vai precisar ter instalado uma máquina virtual Java. Sugiro as da IBM ou da Sun, já que elas funcionam muito bem com o Eclipse. Um aviso aos usuários de Linux: as máquinas virtuais que veem com as distros (GCJ ou iced-tea) em geral não funcionam corretamente e possuem bugs em funcionalidades básicas, tornando difícil ou impossível rodar o Eclipse com elas. Se você já roda o Eclipse como plataforma de desenvolvimento você certamente já possui uma máquina virtual Java instalada.</p>

<p>Depois é necessário instalar o Eclipse SDK. Outro aviso aos usuários Linux: também não recomendo os empacotamentos de Eclipse SDK que vem com as distros. Em geral são ligeiramentes diferentes em relação ao Eclipse distribuído pela Eclipse.org e, muitas vezes, possuem bugs que não existem na versão original.</p>

<p>Quando usado como plataforma de desenvolvimento para Java ou C/C++ não é necessário ter o Eclipse SDK instalado. Basta o runtime do Eclipse. Para instalar o Eclipse SDK basta certificar-se de que você baixou o pacote com o nome Eclipse SDK do site Eclipse.org ou que você tenha instalado a feature &#8220;Eclipse Project SDK&#8221; através do Update Manager do Eclipse runtime.</p>

<p>Bom, feito isso, siga os seguintes passos:</p>

<p>1) Crie um novo projeto de desenvolvimento de Plug-In para Eclipse.</p>

<p>1.1) Clique no menu <em>File -&gt; New -&gt; Project&#8230;</em>.</p>

<p>1.2) Selecione a opção <em>Plug-in Development -&gt; Plug-in Project</em> na janela que se abrir e clique no botão &#8220;Next&#8221;.</p>

<p>1.3) Dê um nome para seu projeto, por exemplo <code>org.eclipse.test</code> e clique no botão &#8220;Next&#8221;.</p>

<p>1.4) Clique no botão &#8220;Next&#8221; no próximo passo do Wizard, chamado de &#8220;Content&#8221;.</p>

<p>1.5) No passo de escolha de Templates, selecione o template &#8220;Hello, World&#8221;. Clique no botão &#8220;Next&#8221;.</p>

<p>1.6) No último passo do wizard, não altere nada e clique no botão &#8220;Finish&#8221;.</p>

<p>2) O Eclipse irá perguntar se você deseja alterar a Perspectiva atual para a Perspectiva de desenvolvimento de plug-ins. Clique em &#8220;Yes&#8221;.</p>

<p>3) O Eclipse abrirá o editor no arquivo <code>MANIFEST.MF</code>. Este arquivo define as características de seu plug-in como, por exemplo, de quais outros plug-ins ele depende, quais pacotes ele exporta, quais extension points ele extende, quais extension points ele provê e outras configurações. Não vou me ater a este arquivo pois ele não será realmente importante para o desenvolvimento deste caso simples.</p>

<p>4) Utilizando este Template &#8220;Hello, World&#8221;, você verá que o Eclipse criou uma pasta <code>src/org.eclipse.test.actions</code> com uma classe <code>SampleAction.java</code>. Abra esta classe no editor dando um duplo clique no arquivo.</p>

<p>5) Esta classe possui um método <code>public void run(IAction action)</code> que define qual ação será executada ao se clicar no menu que estamos criando. No caso deste template, a ação executada é bem simples: abre-se uma janela com uma mensagem de &#8220;Hello, Eclipse world&#8221;.</p>

<p>6) Para ver seu plug-in em ação numa instância de Eclipse não é necessário instalá-lo, ainda. O Eclipse provê uma funcionalidade através da qual, de dentro do Eclipse, você pode lançar um novo Eclipse que carregará os plug-ins que você está desenvolvendo no seu workspace. Para fazer isto você terá que &#8220;executar&#8221; seu plug-in de maneira semelhante ao que você já faz para suas aplicações Java ou C/C++.</p>

<p>6.1) Clique no menu <em>Run -&gt; Run Configurations&#8230;</em>.</p>

<p>6.2) Dê dois cliques em &#8220;Eclipse application&#8221; no lado esquerdo da janela que se abrir. O Eclipse criará um novo launcher para aplicação Eclipse que, por padrão, a incluirá os plug-ins que estão no seu workspace.</p>

<p>6.3) Clique no botão &#8220;Run&#8221;.</p>

<p>7) Um novo Eclipse será executado. Note que nele aparecerá um menu novo, que não existia na instância anterior de Eclipse, com o nome &#8220;Sample Menu&#8221;. Clique em <em>Sample Menu -&gt; Sample Action</em>.</p>

<p> <img src='http://log4dev.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> Uma janela será aberta com a frase que você definiu na classe <code>SampleAction.java</code>.</p>

<p>Parabéns! Você acaba de criar um plug-in para Eclipse ao extender o extension point que permite a adição de novas opções de menu ao Eclipse.</p>

<p>Um tutorial semelhante a este pode ser acessado de dentro do próprio Eclipse através das &#8220;Cheat Sheets&#8221; providas pelo Eclipse SDK. Clique em Help -&gt; Cheat Sheets&#8230; e depois selecione a opção Plug-in Development -&gt; Creating an Eclipse Plug-in na janela que se abrir. Selecione &#8220;Create a plug-in&#8221; na view que se abrir e siga os passos descritos na tela. Este tutorial, apesar de estar em inglês, possui uma quantidade bem legal de informações sobre como criar plug-ins para Eclipse com links explicando vários conceitos relacionados. Vale a pena!</p>
]]></content:encoded>
			<wfw:commentRss>http://log4dev.com/2009/09/06/desenvolvendo-o-eclipse-construindo-seu-primeiro-plug-in/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

