<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Marcelo Madeira</title>
	<atom:link href="http://celodemelo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://celodemelo.wordpress.com</link>
	<description>celodemelo.wordpress.com</description>
	<lastBuildDate>Wed, 11 Jan 2012 22:46:50 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='celodemelo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Marcelo Madeira</title>
		<link>http://celodemelo.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://celodemelo.wordpress.com/osd.xml" title="Marcelo Madeira" />
	<atom:link rel='hub' href='http://celodemelo.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Just Java 2011 &#8211; Baixo Acoplamento e Alta Coesão</title>
		<link>http://celodemelo.wordpress.com/2011/05/18/just-java-2011-baixo-acoplamento-e-alta-coesao/</link>
		<comments>http://celodemelo.wordpress.com/2011/05/18/just-java-2011-baixo-acoplamento-e-alta-coesao/#comments</comments>
		<pubDate>Wed, 18 May 2011 00:56:18 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[apresentações]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=319</guid>
		<description><![CDATA[Este ano eu participei do Just Java  com uma palestra sobre o seguinte tema: Desenvolvendo em java visando o baixo acoplamento. A apresentação foi bem legal e creio que consegui passar a mensagem para o pessoal. Por falar nisso, agradeço a todos que pararam alguns minutos pra me escutar. Abaixo segue os slides da apresentação. O [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=319&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este ano eu participei do Just Java  com uma palestra sobre o seguinte tema:</p>
<p>Desenvolvendo em java visando o baixo acoplamento.</p>
<p>A apresentação foi bem legal e creio que consegui passar a mensagem para o pessoal. Por falar nisso, agradeço a todos que pararam alguns minutos pra me escutar.</p>
<p>Abaixo segue os slides da apresentação. O código fonte utilizado durante a apresentação está <a href="https://github.com/celodemelo/justjava-sourcecode" target="_blank">aqui</a>.</p>
<iframe src='http://www.slideshare.net/slideshow/embed_code/8003881' width='550' height='451'></iframe>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/319/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/319/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/319/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=319&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2011/05/18/just-java-2011-baixo-acoplamento-e-alta-coesao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>
	</item>
		<item>
		<title>Um pouco de objetos e programação funcional com Javascript</title>
		<link>http://celodemelo.wordpress.com/2011/01/04/um-pouco-de-objetos-e-programacao-funcional-com-javascript/</link>
		<comments>http://celodemelo.wordpress.com/2011/01/04/um-pouco-de-objetos-e-programacao-funcional-com-javascript/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 00:08:41 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=270</guid>
		<description><![CDATA[Assim como em Java, quase tudo em javascript são objetos.  Portanto, seria interessante que fosse possível criar novos tipos de objetos, assim como fazemos em java, ruby, c#, etc. O objetivo deste breve post é demonstrar um pouco de como criar e utilizar seus próprios objetos em javascript. A forma mais simples de declarar um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=270&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Assim como em Java, quase tudo em javascript são objetos.  Portanto, seria interessante que fosse possível criar novos tipos de objetos, assim como fazemos em java, ruby, c#, etc.</p>
<p>O objetivo deste breve post é demonstrar um pouco de como criar e utilizar seus próprios objetos em javascript.</p>
<p>A forma mais simples de declarar um objeto em javascript é utilizando a forma literal</p>
<p><img class="size-full wp-image-281 alignnone" title="objeto literal" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-03-10-pm.png?w=550" alt=""   /></p>
<p>O código abaixo mostra exemplos de como utilizar este objeto.</p>
<p><img class="size-medium wp-image-283 alignnone" title="usando objeto literal" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-05-04-pm.png?w=300&#038;h=119" alt="" width="300" height="119" /></p>
<p>Na leitura de uma propriedade, caso ela não exista, o retorno será undefined.</p>
<p>Objetos podem ser compostos de outros objetos, ex:</p>
<p><span style="font-family:monospace;"><img class="size-full wp-image-287 alignnone" title="objetos compostos" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-09-10-pm.png?w=550" alt=""   /></span></p>
<p>Objetos podem ter métodos.</p>
<p><img class="alignnone size-full wp-image-304" title="literal metodo" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-38-56-pm.png?w=550" alt=""   /></p>
<p>Diferente da linguagem Java, é obrigatório o uso do operador this para acessar a variável valor. O uso do this em javascript vale mais um artigo, portanto, não entrarei em detalhes aqui.</p>
<p>A notação literal se parece e muito com o Json. O Json é uma forma simples e enxuta de representarmos um recurso. Por este motivo, vem ganhando muito espaço quando o assunto é integração de sistemas. Mais um assunto para outro post, rs.</p>
<h3><span style="color:#000000;"><strong>Function Objects</strong></span></h3>
<p>Funções são objetos em javascript. Isto é responsável pela grande mágica que envolve a linguagem. Por exemplo, podemos criar uma função e atribuí-la a uma variável.</p>
<p><img class="alignnone size-full wp-image-299" title="function object" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-21-48-pm.png?w=550" alt=""   /></p>
<p>É possível criar um função sem nome e neste caso ela é considerada uma função anônima. Por exemplo, como uma função é um objeto, podemos ter um função que espera como parâmetro outra função. Confuso?</p>
<p><img class="alignnone size-full wp-image-302" title="function objects" src="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-33-54-pm.png?w=550" alt=""   /></p>
<p>O código acima pode ser considerado um pouco de <a href="http://www.ibm.com/developerworks/library/wa-javascript.html">programação funcional com javascript</a>.</p>
<h3><span style="color:#000000;">Conclusão</span></h3>
<p>Vejo muita gente dizendo que javascript é uma linguagem ruim e difícil de programar. Concordo que a linguagem peca em alguns detalhes, porém, quando utilizada de forma correta, nos possibilita fazer coisas sensacionais.</p>
<p>Para tirar o máximo da linguagem é preciso aprender a encapsular as lógicas em objetos, utilizar programação funcional, entender closures, etc&#8230; Tentarei explicar estes itens com mais detalhes nos próximos posts.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=270&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2011/01/04/um-pouco-de-objetos-e-programacao-funcional-com-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-03-10-pm.png" medium="image">
			<media:title type="html">objeto literal</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-05-04-pm.png?w=300" medium="image">
			<media:title type="html">usando objeto literal</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-09-10-pm.png" medium="image">
			<media:title type="html">objetos compostos</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-38-56-pm.png" medium="image">
			<media:title type="html">literal metodo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-21-48-pm.png" medium="image">
			<media:title type="html">function object</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2011/01/screen-shot-2011-01-03-at-9-33-54-pm.png" medium="image">
			<media:title type="html">function objects</media:title>
		</media:content>
	</item>
		<item>
		<title>Introdução ao Hibernate</title>
		<link>http://celodemelo.wordpress.com/2010/12/08/introducao-ao-hibernate/</link>
		<comments>http://celodemelo.wordpress.com/2010/12/08/introducao-ao-hibernate/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 19:43:39 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[apresentações]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=254</guid>
		<description><![CDATA[Hoje fiz uma pequena apresentação para o time sobre o Hibernate. No time temos bons programadores que sempre utilizaram o hibernate mas não conheciam todo o potencial deste framework. Abaixo segue os slides utilizados na apresentação.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=254&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoje fiz uma pequena apresentação para o time sobre o Hibernate.</p>
<p>No time temos bons programadores que sempre utilizaram o hibernate mas não conheciam todo o potencial deste framework.</p>
<p>Abaixo segue os slides utilizados na apresentação.</p>
<div id="__ss_6076423" style="width:425px;"><iframe src='http://www.slideshare.net/slideshow/embed_code/6076423' width='550' height='451'></iframe></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/254/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=254&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2010/12/08/introducao-ao-hibernate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>
	</item>
		<item>
		<title>OSGI &#8211; Modularizando sua aplicação</title>
		<link>http://celodemelo.wordpress.com/2009/11/12/osgi-modularizando-sua-aplicacao/</link>
		<comments>http://celodemelo.wordpress.com/2009/11/12/osgi-modularizando-sua-aplicacao/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:27:34 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=199</guid>
		<description><![CDATA[Semana passada fui conhecer a maior livraria de Vancouver. Como sempre, gastei mais do que devia. Dentre minhas aquisições, não podia faltar um livro sobre OSGI. Como sou um grande defensor de modularização, baixo acoplamento, alta coesão, etc&#8230; creio que esta tecnologia é um grande avanço na forma como criamos aplicações utilizando a plataforma Java. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=199&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Semana passada fui conhecer a maior livraria de Vancouver. Como sempre, gastei mais do que devia. Dentre minhas aquisições, não podia faltar um livro sobre <a href="http://www.osgi.org/" target="_blank">OSGI</a>. Como sou um grande defensor de modularização, baixo acoplamento, alta coesão, etc&#8230; creio que esta tecnologia é um grande avanço na forma como criamos aplicações utilizando a plataforma Java. Com OSGI, é muito simples criar aplicações altamente extensíveis, veja como exemplo a IDE Eclipse.</p>
<p>Meu objetivo aqui não é mostrar a fundo como funciona a tecnologia e sim demonstrar em um pequeno exemplo algumas de suas vantagens. O exemplo consiste em um sistema de envio de mensagens. O usuário digita uma mensagem em um textfield e esta mensagem pode ser enviada de diversas formas, como email ou sms. Porém, no exemplo, teremos quatro módulos. A interface gráfica, o domínio, o enviador de mensagens por email e o enviador por SMS.</p>
<p>Seguindo a nomenclatura do OSGI, cada módulo é um Bundle. Um Bundle nada mais é do que um &#8220;jar&#8221; com algumas informações adicionais do MANIFEST.MF. Estas informações são utilizadas pelo framework OSGI. Como quase tudo no Java, a tecnologia OSGI é uma especificação e portanto, temos diversas implementações para escolher. Dentre elas, as mais famosas são <a href="http://www.eclipse.org/equinox/" target="_blank">Equinox </a>(Projeto Eclipse) e <a href="http://felix.apache.org/site/index.html" target="_blank">Felix </a>(Apache). Neste artigo utilizaremos o Equinox.</p>
<p>Faça o download no Equinox. Para este artigo precisaremos apenas do Jar. Execute o Jar para ter acesso ao console do Equinox.</p>
<p><em>java -jar org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar -console</em></p>
<p>Para visualizar os Bundles instalados, basta digitar o comando ss.</p>
<p><img class="aligncenter size-full wp-image-203" title="OSGI console" src="http://celodemelo.files.wordpress.com/2009/11/osgi1.jpg?w=550&#038;h=132" alt="OSGI console" width="550" height="132" /></p>
<p>Como podemos ver, neste momento só temos um bundle instalado. O bundle do Equinox. Agora iremos criar o nosso bundle e adicioná-lo do Equinox. Criar um bundle é muito simples. Crie um simples projeto com a seguinte classe:</p>
<p><img class="aligncenter size-full wp-image-205" title="OSGI Activator" src="http://celodemelo.files.wordpress.com/2009/11/osgi2.jpg?w=550&#038;h=332" alt="OSGI Activator" width="550" height="332" /></p>
<p>Esta classe é o activator do nosso bundle. O activator é utilizado pelo framework OSGI para iniciar ou parar um bundle.  Neste primeiro exemplo, o activator irá apenas imprimir mensagens quando for iniciado e parado. Agora precisamos alterar o MANIFEST do jar para torná-lo um bundle OSGI.</p>
<p><img class="aligncenter size-full wp-image-206" title="osgi metainf" src="http://celodemelo.files.wordpress.com/2009/11/osgi3.jpg?w=550" alt="osgi metainf"   /></p>
<p>Veja que no MANIFEST passamos para o OSGI algumas informações do nosso bundle. Dentre elas o nome do bundle (SymbolicName) e qual a classe Activator. Agora vamos instalar este bundle no Equinox. Gere um jar do projeto e para instalá-lo no Equinox é simples:</p>
<p>install file:&lt;nomeDoBundle&gt;.jar</p>
<p><img class="aligncenter size-full wp-image-208" title="osgi4" src="http://celodemelo.files.wordpress.com/2009/11/osgi4.jpg?w=550" alt="osgi4"   /></p>
<p>Para verificar se o bundle foi corretamente instalado, basta executar o comando ss:</p>
<p><img class="aligncenter size-full wp-image-210" title="osgi5" src="http://celodemelo.files.wordpress.com/2009/11/osgi5.jpg?w=550" alt="osgi5"   /></p>
<p>O bundle está corretamente instalado, agora basta iniciá-lo:</p>
<p>start &lt;idDoBundle&gt;</p>
<p><img class="aligncenter size-full wp-image-212" title="osgi6" src="http://celodemelo.files.wordpress.com/2009/11/osgi6.jpg?w=550" alt="osgi6"   />Para parar o bundle:</p>
<p>stop &lt;idDoBundle&gt;</p>
<p><img class="aligncenter size-full wp-image-213" title="osgi7" src="http://celodemelo.files.wordpress.com/2009/11/osgi7.jpg?w=550" alt="osgi7"   /></p>
<p>Agora que já sabemos como criar um bundle, vamos iniciar nosso exemplo. No exemplo, teremos quatro bundles.</p>
<ul>
<li>Domínio:  Como o próprio nome diz, ele armazena as classes de domínio do nosso exemplo. Teremos duas classes: Message e IMessageSender.</li>
<li>EnviadorSMS: implementação de IMessageSender que envia mensagens por SMS.</li>
<li>EnviadorEmail: implementação de IMessageSender que envia mensagens por Email.</li>
<li>UI: interface gráfica do exemplo</li>
</ul>
<h2><strong>Bundle UI</strong></h2>
<p>Iremos começar pelo bundle UI. O activator irá apenas criar o frame para o usuário entrar com a mensagem.</p>
<p><img src="/Users/Marcelo/AppData/Local/Temp/moz-screenshot-1.png" alt="" /><img class="aligncenter size-full wp-image-216" title="osgi8" src="http://celodemelo.files.wordpress.com/2009/11/osgi8.jpg?w=550&#038;h=788" alt="osgi8" width="550" height="788" /></p>
<p>Veja que o bundle depende de uma classe chamada Message. Esta classe é nosso domínio, portanto, ela não faz parte deste bundle. Aqui entra outro detalhe do OSGI. A comunicação entre bundles é feita através de serviços. Podemos considerar este modelo como sendo um SOA dentro da VM. O bundle UI irá utilizar serviços do bundle Core. Vamos analisar o MANIFEST do bundle UI.</p>
<p><img class="aligncenter size-full wp-image-226" title="osgi9" src="http://celodemelo.files.wordpress.com/2009/11/osgi91.jpg?w=550" alt="osgi9"   /></p>
<p>Veja a declaração Import-Package. Estamos importando um pacote do bundle core. Neste pacote estão os serviços que nosso domínio está disponibilizando. Importamos também o pacote javax.swing.</p>
<p>Agora precisamos criar o serviço.</p>
<h2>Bundle Core</h2>
<p>O Bundle Core possui duas classes de domínio. A interface dos enviadores e o domínio Message.</p>
<p>Interface:</p>
<p><img class="aligncenter size-full wp-image-219" title="osgi10" src="http://celodemelo.files.wordpress.com/2009/11/osgi10.jpg?w=550" alt="osgi10"   /></p>
<p>Domínio:</p>
<p><img class="aligncenter size-full wp-image-220" title="osgi11" src="http://celodemelo.files.wordpress.com/2009/11/osgi11.jpg?w=550&#038;h=382" alt="osgi11" width="550" height="382" /></p>
<p>Veja que a classe Message é composta por uma lista de services. Estes services são os enviadores de mensagens que serão utilizados. Veja que o método send apenas itera sobre a lista enviando a mensagem. Até aqui tudo é muito simples. Agora precisamos exportar a classe Message como sendo um serviço do bundle core. O módulo UI irá iteragir diretamente com este serviço para enviar as mensagens.</p>
<p>Primeiro precisamos dizer ao OSGI para exportar este pacote para outros bundles. Veja o MANIFEST:</p>
<p><img class="aligncenter size-full wp-image-224" title="osgi13" src="http://celodemelo.files.wordpress.com/2009/11/osgi13.jpg?w=550" alt="osgi13"   /></p>
<p>Veja a informação Export-Package. Para uma classe ser visível para outro bundle, ela precisa estar dentro de um pacote exportado. No nosso caso, o bundle UI precisa da classe Message, portanto, precisamos exportar o pacote onde a classe está. Lembre-se que o bundle UI importou este pacote.</p>
<p>Para registrar o componente Message como um serviço, teremos que interagir diretamente com a API do OSGI. Quando o bundle core for iniciado, iremos registrar o serviço no contexto do OSGI. O código é simples:</p>
<p><img class="aligncenter size-full wp-image-223" title="osgi12" src="http://celodemelo.files.wordpress.com/2009/11/osgi12.jpg?w=550&#038;h=371" alt="osgi12" width="550" height="371" /></p>
<p>O método registerService espera como parâmetros o nome do serviço (por recomendação é o nome da classe), o serviço em si e algumas configurações adicionais.</p>
<p>Agora precisamos alterar o bundle UI para utilizar o serviço Message. No activator do bundle UI, basta fazer o &#8220;lookup&#8221; do serviço utilizando seu nome (nome da classe) :</p>
<p><img class="aligncenter size-full wp-image-238" title="osgi17" src="http://celodemelo.files.wordpress.com/2009/11/osgi172.jpg?w=550&#038;h=452" alt="osgi17" width="550" height="452" /></p>
<p>Se adicionarmos os dois bundles no Equinox, veremos que os dois bundles estão se comunicando. Agora precisamos criar os bundles que realmente enviam as mensagens.</p>
<h2>Bundle Enviador Email e SMS</h2>
<p>Os serviços de envio por email e por SMS serão novos serviços de nosso sistema. Portanto, deveremos criar um bundle para cada um. Desta forma poderemos controlá-los separadamente. Por exemplo, podemos parar o serviço de envio por SMS e deixar apenas o de Email sem afetar o funcionamento do sistema. O dois bundles possuem praticamente a mesma estrutura, portanto, irei economizar um pouco de linhas aqui.</p>
<p>O bundle enviador terá apenas uma classe que implementa a interface IMessageSender e a classe Activator. Esta interface está no bundle core, portanto, precisaremos importar o pacote da mesma forma que fizemos no bundle UI.</p>
<p><img class="aligncenter size-full wp-image-229" title="osgi14" src="http://celodemelo.files.wordpress.com/2009/11/osgi14.jpg?w=550" alt="osgi14"   /></p>
<p>A classe enviador apenas implementa a nossa interface:</p>
<p><img class="aligncenter size-full wp-image-244" title="osgi15" src="http://celodemelo.files.wordpress.com/2009/11/osgi151.jpg?w=550" alt="osgi15"   /></p>
<p>Enviar por SMS será um serviço do nosso sistema. Portanto, precisamos registrá-lo no contexto OSGI:</p>
<p><img class="aligncenter size-full wp-image-245" title="osgi16" src="http://celodemelo.files.wordpress.com/2009/11/osgi161.jpg?w=550&#038;h=327" alt="osgi16" width="550" height="327" /></p>
<p>O bundle de Email é praticamente o mesmo código. A única diferença é a mensagem no System.out.</p>
<p>Veja que registramos o serviço com o nome da interface. Portanto, teremos dois serviços com o mesmo nome. Sempre que pedimos para o contexto o serviço com o nome da interface, ele irá executar uma lógica de prioridade para retornar apenas uma implementação.</p>
<p>Agora que temos dois serviços de envio de mensagem, precisamos alterar nosso bundle core para utilizá-los.  Para isso, utilizaremos um ServiceTrackerCustomizer.</p>
<h2>ServiceTrackerCustomizer e ServiceTracker</h2>
<p>Como vimos, utilizamos o serviceTracker para fazer o lookup de um serviço. Porém, no caso dos enviadores, precisamos saber quando um novo serviço de enviador está disponível ou quando um enviador for removido. Estas informações são importantes para alimentar a lista de serviços dentro do objeto Message.</p>
<p>Para ter acesso a estas informações, usaremos um ServiceTrackerCustomizer. O código é simples:</p>
<p><img class="aligncenter size-full wp-image-233" title="osgi18" src="http://celodemelo.files.wordpress.com/2009/11/osgi18.jpg?w=550&#038;h=548" alt="osgi18" width="550" height="548" /></p>
<p>Basta implementar a interface ServiceTrackerCustomizer e codificar o que você deseja quando um serviço for adicionado, modificado ou removido. Simples!!!!</p>
<p>No nosso caso iremos adicionar ou remover o serviço da lista de serviços do nosso objeto Message. Também tem uma mensagem de &#8220;log&#8221; para nos ajudar com os testes.</p>
<p>Agora precisamos fazer mais uma pequena alteração no activator do bundle core. Precisamos registrar o nosso ServiceTrackerCustomizer como um listener para os serviços do tipo IMessageSender.</p>
<p><img class="aligncenter size-full wp-image-235" title="osgi19" src="http://celodemelo.files.wordpress.com/2009/11/osgi19.jpg?w=550&#038;h=423" alt="osgi19" width="550" height="423" /></p>
<p>Utilizamos o serviceTrackerCustomizer junto com o ServiceTracker. Sempre que um serviço for adicionado, modificado ou removido, nosso componente será chamado.</p>
<h2>Testando a aplicação</h2>
<p>Agora que já codificamos, vamos testar a aplicação.</p>
<p>Crie os quatro jars ou faça ou<a href="http://tinyurl.com/yfgb2ng" target="_blank"> download aqui</a>:</p>
<ul>
<li>bundleCore.jar</li>
<li>blundleUI.jar</li>
<li>bundleEnviadorEmail.jar</li>
<li>bundleEnviadorSMS.jar</li>
</ul>
<p>Instale os quatro bundles no Equinox:</p>
<p><img class="aligncenter size-full wp-image-237" title="osgi20" src="http://celodemelo.files.wordpress.com/2009/11/osgi20.jpg?w=550" alt="osgi20"   /></p>
<p>Inicie os bundles e teste a aplicação.</p>
<p><img class="aligncenter size-full wp-image-240" title="osgi21" src="http://celodemelo.files.wordpress.com/2009/11/osgi21.jpg?w=550&#038;h=201" alt="osgi21" width="550" height="201" /></p>
<p>Veja que as mensagens serão enviadas por email e por SMS. No console do Equinox, pause o serviço de email:</p>
<p>stop &lt;idBundle&gt;</p>
<p>Tente enviar novamente uma mensagem. Como o serviço não está mais disponível, a mensagem foi enviada somente por SMS.</p>
<p>Poder parar módulos da aplicação sem que ela sofra efeitos colaterais é sensacional. Imagine que você descubra um erro crítico no módulo de SMS. Você não precisa tirar toda a aplicação do ar para corrigir este problema. Basta pausar o módulo de SMS. Todo o resto do sistema continuará funcionamento normal. Faça o teste com este pequeno exemplo. Pause e Inicie os serviços. Isto não afetará o Core e muito menos o UI.</p>
<p>Espero ter conseguido explicar um pouco do que é OSGI. Vale ressaltar que tem muito mais detalhes sobre controle de classpath e configuração de bundles que não nos atentamos aqui. Fica como tarefa para quem se interessou dar uma olhada nas outras funcionalidades.</p>
<p>Vale a pena olhar o projeto <a href="http://www.springsource.org/osgi" target="_blank">Spring-DM</a>. O spring facilita muito a configuração de serviços além de propiciar um excelente conteiner de IoC.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/199/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/199/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/199/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=199&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/11/12/osgi-modularizando-sua-aplicacao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi1.jpg" medium="image">
			<media:title type="html">OSGI console</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi2.jpg" medium="image">
			<media:title type="html">OSGI Activator</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi3.jpg" medium="image">
			<media:title type="html">osgi metainf</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi4.jpg" medium="image">
			<media:title type="html">osgi4</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi5.jpg" medium="image">
			<media:title type="html">osgi5</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi6.jpg" medium="image">
			<media:title type="html">osgi6</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi7.jpg" medium="image">
			<media:title type="html">osgi7</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi8.jpg" medium="image">
			<media:title type="html">osgi8</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi91.jpg" medium="image">
			<media:title type="html">osgi9</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi10.jpg" medium="image">
			<media:title type="html">osgi10</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi11.jpg" medium="image">
			<media:title type="html">osgi11</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi13.jpg" medium="image">
			<media:title type="html">osgi13</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi12.jpg" medium="image">
			<media:title type="html">osgi12</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi172.jpg" medium="image">
			<media:title type="html">osgi17</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi14.jpg" medium="image">
			<media:title type="html">osgi14</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi151.jpg" medium="image">
			<media:title type="html">osgi15</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi161.jpg" medium="image">
			<media:title type="html">osgi16</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi18.jpg" medium="image">
			<media:title type="html">osgi18</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi19.jpg" medium="image">
			<media:title type="html">osgi19</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi20.jpg" medium="image">
			<media:title type="html">osgi20</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/11/osgi21.jpg" medium="image">
			<media:title type="html">osgi21</media:title>
		</media:content>
	</item>
		<item>
		<title>Novos Horizontes</title>
		<link>http://celodemelo.wordpress.com/2009/09/09/novos-horizontes/</link>
		<comments>http://celodemelo.wordpress.com/2009/09/09/novos-horizontes/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 11:14:37 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=189</guid>
		<description><![CDATA[Apartir do dia 04 de setembro eu faço parte de mais uma estatística do Brasil. A lista de desempregados. Isso mesmo!!! Estou saindo da Tata Consultancy Services. Passei quase um ano nesta empresa e aprendi muito com excelentes colegas de trabalho. O motivo da saída é um intercâmbio de 03 meses no Canadá, mais específico [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=189&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-194" title="images" src="http://celodemelo.files.wordpress.com/2009/09/images.jpeg?w=550" alt="images"   /></p>
<p>Apartir do dia 04 de setembro eu faço parte de mais uma estatística do Brasil. A lista de desempregados. Isso mesmo!!! Estou saindo da Tata Consultancy Services. Passei quase um ano nesta empresa e aprendi muito com excelentes colegas de trabalho.</p>
<p>O motivo da saída é um intercâmbio de 03 meses no Canadá, mais específico em Vancouver. Espero poder praticar e melhorar meu inglês pois um bom conhecimento do inglês é muito importante na área de TI. Estou indo em busca de mais este conhecimento.</p>
<p>Bem&#8230; quem quiser me ajudar.. em dezembro estarei procurando emprego&#8230;rs</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/189/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/189/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/189/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=189&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/09/09/novos-horizontes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/09/images.jpeg" medium="image">
			<media:title type="html">images</media:title>
		</media:content>
	</item>
		<item>
		<title>Linguagens dinâmicas</title>
		<link>http://celodemelo.wordpress.com/2009/06/19/linguagens-dinamicas/</link>
		<comments>http://celodemelo.wordpress.com/2009/06/19/linguagens-dinamicas/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 22:52:07 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Outros]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=183</guid>
		<description><![CDATA[Linguagem dinâmica, também conhecida como linguagem de scripting, ainda é algo obscuro para a grande maioria dos desenvolvedores. Entender e aplicar seus conceitos é algo que pode causar espanto e muitas dúvidas. Porém, é importante conhecer as vantagens e destantagens deste tipo de linguagem, saber quando é válido ou não a sua utilização no desenvolvimento [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=183&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Linguagem dinâmica, também conhecida como linguagem de scripting, ainda é algo obscuro para a grande maioria dos desenvolvedores. Entender e aplicar seus conceitos é algo que pode causar espanto e muitas dúvidas. Porém, é importante conhecer as vantagens e destantagens deste tipo de linguagem, saber quando é válido ou não a sua utilização no desenvolvimento de sistemas.</p>
<p>Estas linguagens são linguagens de alto nível, a grande maioria com <a href="http://celodemelo.wordpress.com/2008/02/28/linguagem-fortemente-tipada-strong-typing/" target="_blank">tipagem</a> dinâmica e com um Protocolo de Meta-Objeto (<a href="http://en.wikipedia.org/wiki/Metaobject" target="_blank">Meta-Object Protocol</a>), ou MOP. Estas duas características proporcionam muitas facilidades e um enorme poder no desenvolvimento. Porém, quando não usadas com cuidado, podem causar grandes problemas.</p>
<p>Tipagem dinâmica é muito criticada pela comunidade de desenvolvedores, principalmente porque &#8220;escondem&#8221; alguns erros em tempo de desenvolvimento (compilação). Linguagens dinâmicas não são compiladas, portanto tipagem dinâmica faz todo sentido. Porém, existe algumas linguagens dinâmicas que utilizam de tipagem estática, como <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a>, para utilizar de técnicas como overloading de métodos e de construtor.</p>
<p>Meta-Object Protocol sem dúvida é a grande vantagem das linguagens dinâmicas. Em linguagens de programação como java, os objetos armazenam seus métodos e seus atributos. Com MOP, cada objeto tem um meta objeto associado e é no meta objeto que ficam os métodos. O objeto é responsável por armazenar seu estado. A grande vantagem é a possibilidade de alterar o meta objeto em tempo de execução e adicionar novas funcionalidades nos objetos.</p>
<p>Com o surgimento do Ruby e do framework Ruby on Rails, as linguagens dinâmicas vem ganhando força. Muitas empresas que utilizam metodologias agéis, estão aderindo a este tipo de linguagem, principalmente ao Ruby on Rails. Portanto, é visível que as linguagens dinâmicas e principalmente a linguagem Ruby poderá ser o próximo &#8220;boom&#8221; no desenvolvimento de software.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=183&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/06/19/linguagens-dinamicas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>
	</item>
		<item>
		<title>Falando em Java 2009</title>
		<link>http://celodemelo.wordpress.com/2009/05/26/falando-em-java-2009/</link>
		<comments>http://celodemelo.wordpress.com/2009/05/26/falando-em-java-2009/#comments</comments>
		<pubDate>Tue, 26 May 2009 13:15:58 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=173</guid>
		<description><![CDATA[No último final de semana participei do evento falando em java 2009. Como sempre, o pessoal da Caelum arrebentou. As duas paletras do Jim Webber foram sensacionais. As dicas que o Sérgio Lopes deu sobre o hibernate também foram excelentes. Concordo com ele que o grande problema do hibernate são os desenvolvedores que não se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=173&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Falando Em Java 2009" src="http://www.caelum.com.br/falando-em-java/images/logo_fj2009.jpg" alt="" width="249" height="127" /></p>
<p>No último final de semana participei do evento <a href="http://www.caelum.com.br/falando-em-java/">falando em java 2009</a>. Como sempre, o pessoal da Caelum arrebentou. As duas paletras do <a href="http://jim.webber.name/">Jim Webber</a> foram sensacionais.</p>
<p>As dicas que o Sérgio Lopes deu sobre o hibernate também foram excelentes. Concordo com ele que o grande problema do hibernate são os desenvolvedores que não se preocupam em utilizá-lo adequadamente.</p>
<p>Outra grande novidade foi o anúncio do vRaptor 3. Particularmente, eu <a href="http://celodemelo.wordpress.com/2007/05/12/vantagens-do-vraptor/">sou fã</a> deste framework.</p>
<p>Estou ansioso para o lançamento <a href="http://arquiteturajava.com.br/">do livro</a> que o pessoal da Caelum está escrevendo.</p>
<p>Infelizmente,  ainda não foi este ano que ganhei o Wii&#8230;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/173/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/173/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/173/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=173&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/05/26/falando-em-java-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://www.caelum.com.br/falando-em-java/images/logo_fj2009.jpg" medium="image">
			<media:title type="html">Falando Em Java 2009</media:title>
		</media:content>
	</item>
		<item>
		<title>14º EDTED &#8211; Encontro de Design e Tecnologia Digital !</title>
		<link>http://celodemelo.wordpress.com/2009/04/26/14%c2%ba-edted-encontro-de-design-e-tecnologia-digital/</link>
		<comments>http://celodemelo.wordpress.com/2009/04/26/14%c2%ba-edted-encontro-de-design-e-tecnologia-digital/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 21:36:08 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=162</guid>
		<description><![CDATA[Tive o prazer de participar de mais um grande evento. Fico feliz por ver eventos bem organizados e com palestrantes de alto nível no Brasil. Cada vez mais posso comprovar que a dupla SCRUM e RoR está muito forte e tem tudo para revolucionar o mercado de TI. Destaco as palestras do Fabiano Milani e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=162&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://celodemelo.files.wordpress.com/2009/04/edted_14_fundopreto_v1.gif?w=550" alt="Edted" title="Edted"   class="size-full wp-image-163" /></p>
<p>Tive o prazer de participar de mais um grande evento. Fico feliz por ver eventos bem organizados e com palestrantes de alto nível no Brasil. </p>
<p>Cada vez mais posso comprovar que a dupla SCRUM e RoR está muito forte e tem tudo para revolucionar o mercado de TI. </p>
<p>Destaco as palestras do <a href="http://fabianomilani.blogspot.com/">Fabiano Milani</a> e do <a href="http://gc.blog.br/">Guilherme Chapiewski</a>. Gostei muito das dicas do Guilherme sobre como se tornar um bom profissional de TI.</p>
<p>Resumindo, foi um bom esquenta para o Falando em Java 2009.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=162&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/04/26/14%c2%ba-edted-encontro-de-design-e-tecnologia-digital/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/04/edted_14_fundopreto_v1.gif" medium="image">
			<media:title type="html">Edted</media:title>
		</media:content>
	</item>
		<item>
		<title>Twitter</title>
		<link>http://celodemelo.wordpress.com/2009/03/26/twitter/</link>
		<comments>http://celodemelo.wordpress.com/2009/03/26/twitter/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 23:13:15 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=158</guid>
		<description><![CDATA[Post bem rápido. Apenas para contar que agora estou no twitter. Quem quiser me seguir: http://twitter.com/celodemelo<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=158&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Post bem rápido.<br />
Apenas para contar que agora estou no twitter.</p>
<p>Quem quiser me seguir:<br />
<a href="http://twitter.com/celodemelo">http://twitter.com/celodemelo</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=158&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/03/26/twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby Module</title>
		<link>http://celodemelo.wordpress.com/2009/03/09/ruby-module/</link>
		<comments>http://celodemelo.wordpress.com/2009/03/09/ruby-module/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 19:09:19 +0000</pubDate>
		<dc:creator>Marcelo Madeira</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://celodemelo.wordpress.com/?p=140</guid>
		<description><![CDATA[Um recurso muito interessante e extremamente útil na linguagem Ruby é o Módulo (module). O módulo possui duas funcionalidades: namespace e mixin. Namespace O Módulo pode ser utilizado para prover um namespace para os componentes, mantendo-os mais organizados evitando possíveis problemas de sobrescrita. Veja o exemplo abaixo: Devido às características dinâmicas da linguagem, o método [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=140&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Um recurso muito interessante e extremamente útil na linguagem Ruby é o Módulo (module). O módulo possui duas funcionalidades: namespace e mixin.</p>
<p><strong>Namespace</strong></p>
<p>O <em>Módulo</em> pode ser utilizado para prover um <em>namespace </em>para os componentes, mantendo-os mais organizados evitando possíveis problemas de sobrescrita. Veja o exemplo abaixo:</p>
<p><img src="http://celodemelo.files.wordpress.com/2009/03/ruby_module_1.jpg?w=550" alt="ruby_module_1" title="ruby_module_1"   class="aligncenter size-full wp-image-142" /></p>
<p>Devido às características dinâmicas da linguagem, o método verify da classe AccessControl foi sobrescrito e o resultado do código será &#8216;verify 2&#8242;. Esta sobrescrita pode ser intencional ou não.</p>
<p>Para deixar o código mais organizado e prevenir que o componente seja sobrescrito por engano, pode-se utilizar o <em>módulo</em> como <em>namespace</em>:</p>
<p><img src="http://celodemelo.files.wordpress.com/2009/03/ruby_module_2.jpg?w=550" alt="ruby_module_2" title="ruby_module_2"   class="aligncenter size-full wp-image-145" /></p>
<p>Para referenciar elementos que estão dentro de um módulo, usa-se Modulo::Elemento</p>
<p><img src="http://celodemelo.files.wordpress.com/2009/03/ruby_module_3.jpg?w=550" alt="ruby_module_3" title="ruby_module_3"   class="aligncenter size-full wp-image-147" /></p>
<p>Desta forma, a sobrescrita por engano já está evitada. O código abaixo irá imprimir: </p>
<p>verify<br />
verify 2</p>
<p><img src="http://celodemelo.files.wordpress.com/2009/03/ruby_module_4.jpg?w=550" alt="ruby_module_4" title="ruby_module_4"   class="aligncenter size-full wp-image-148" /></p>
<p><strong> Mixin</strong></p>
<p>Mixin é um recurso interessante. Um módulo pode ser incluído em uma classe. Quando isso ocorre, a classe passa a ter os métodos declarados no módulo. Veja o exemplo abaixo:</p>
<p><img src="http://celodemelo.files.wordpress.com/2009/03/ruby_module_5.jpg?w=550" alt="ruby_module_5" title="ruby_module_5"   class="aligncenter size-full wp-image-152" /></p>
<p>A classe AccessControl não possui o método &#8220;testing&#8221;. Quando o interpretador do ruby não encontra um método um um objeto, o método <em>method_missing</em> é invocado. </p>
<p>No exemplo, o módulo MethodMissing foi incluído dentro da classe AccessControl. Desta forma, a classe AccessControl passou a ter os métodos definidos no módulo.</p>
<p>O código imprime:<br />
verify 2<br />
The method &#8216;testing&#8217; doesn&#8217;t exist!!!!</p>
<p>&#8212;-</p>
<p>O conceito de módulo é sem dúvida um recurso muito interessante e bastante utilizado pelo framework Ruby on Rails.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/celodemelo.wordpress.com/140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/celodemelo.wordpress.com/140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/celodemelo.wordpress.com/140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=celodemelo.wordpress.com&amp;blog=720919&amp;post=140&amp;subd=celodemelo&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://celodemelo.wordpress.com/2009/03/09/ruby-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6406cf736cedce7f0cd166c25ae670d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">celodemelo</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/03/ruby_module_1.jpg" medium="image">
			<media:title type="html">ruby_module_1</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/03/ruby_module_2.jpg" medium="image">
			<media:title type="html">ruby_module_2</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/03/ruby_module_3.jpg" medium="image">
			<media:title type="html">ruby_module_3</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/03/ruby_module_4.jpg" medium="image">
			<media:title type="html">ruby_module_4</media:title>
		</media:content>

		<media:content url="http://celodemelo.files.wordpress.com/2009/03/ruby_module_5.jpg" medium="image">
			<media:title type="html">ruby_module_5</media:title>
		</media:content>
	</item>
	</channel>
</rss>
