<?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>J. Gabriel Lima</title>
	<atom:link href="http://jgabriellima.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jgabriellima.wordpress.com</link>
	<description>www.ecomp.eng.br / www.lprad.ufpa.br</description>
	<lastBuildDate>Wed, 26 Oct 2011 10:19:38 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jgabriellima.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>J. Gabriel Lima</title>
		<link>http://jgabriellima.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jgabriellima.wordpress.com/osd.xml" title="J. Gabriel Lima" />
	<atom:link rel='hub' href='http://jgabriellima.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Algoritmo Genético : Ensino de Dedilhado no Piano</title>
		<link>http://jgabriellima.wordpress.com/2010/10/31/algoritmo-genetico-ensino-de-dedilhado-no-piano/</link>
		<comments>http://jgabriellima.wordpress.com/2010/10/31/algoritmo-genetico-ensino-de-dedilhado-no-piano/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 02:38:52 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Múscia]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Algoritmo Genético]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=159</guid>
		<description><![CDATA[Atualmente, no campos das aplicações te técnicas de inteligência artificial, principalmente se tratando de algoritmos bio-inspirados, os algoritmos genéticos tem um grande destaque. É muito comum vermos aplicações de otimização combinatória que utilizam esse tipo de técnicas, no entando, ela pode ser muito mais do que simples buscas aleatórias e pode ter aplicações nos mais [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=159&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Atualmente, no campos das aplicações te técnicas de inteligência artificial, principalmente se tratando de algoritmos bio-inspirados, os algoritmos genéticos tem um grande destaque.</p>
<p>É muito comum vermos aplicações de otimização combinatória que utilizam esse tipo de técnicas, no entando, ela pode ser muito mais do que simples buscas aleatórias e pode ter aplicações nos mais variados campos do conhecimento.</p>
<p>O  principal objetivo desse post é mostrar como essa técnica pode ser aplicada no ensino do dedilhado pianístico. Primeiramente vou abordar sobre os aspectos musicais  e em seguida , a aplicação da técnica.</p>
<h6>A música e as dificuldades de aprendizado<img class="alignright" style="border:1px solid black;" title="Piano" src="http://jgabriellima.files.wordpress.com/2010/10/piano-keys.jpg?w=316&#038;h=210" alt="" width="316" height="210" /></h6>
<p>Durante a fase de aprendizagem de uma obra musical, por exemplo o piano, o aluno  iniciante, algumas vezes<strong> se sente desmotivado</strong> pelo não conhecimento da seqüência dos dedos a serem aplicados nas diferentes teclas do instrumento seguindo a linha melódica indicada por uma partitura musical.</p>
<p style="text-align:center;"><em><strong>&#8220;Por isso é fundamental a presença constante do professor junto ao aluno&#8221;</strong></em></p>
<p>A partir de exemplos corretos do dedilhado pianístico, o aluno tem um melhor aprendizado. Além disso, é importante que o aluno não crie vícios mecânicos no dedilhado.</p>
<p>Os vícios mecânicos prejudicam o andamento do dedilhado e o aprendizado da peça musical. Assim, é necessário que o aluno conheça a priori a seqüência do dedilhado a ser usado nos trechos da peça para que sua interpretação seja a melhor possível.</p>
<p>A <strong>música é construída por sucessões de sons por grau conjunto</strong> (esquema de caráter escalístico) ou <strong>graus disjuntos</strong> (tipo arpejos ou acordes), <strong>ou por uma mistura de ambos</strong>. Portanto, o número de combinações possíveis é enorme. Os dedilhados, isto é, as diversas associações de dedos necessárias para executá-los são também muito grandes.</p>
<p>Uma seqüência de apenas quatro notas , dependendo do contexto onde está inserida, pode ser digitada, pelo menos de 17 maneiras diferentes :</p>
<p><img src="/Users/JGABRI%7E1/AppData/Local/Temp/moz-screenshot.png" alt="" /></p>
<div id="attachment_162" class="wp-caption aligncenter" style="width: 178px"><a href="http://jgabriellima.files.wordpress.com/2010/10/sequencia.gif"><img class="size-full wp-image-162" title="sequencia" src="http://jgabriellima.files.wordpress.com/2010/10/sequencia.gif?w=614" alt=""   /></a><p class="wp-caption-text">Sequência Melódica de quatro notas</p></div>
<p><strong>Dedilhado pianístico ótimo: </strong>Aquele que o aluno consiga executar o trecho musical da forma mais cômoda possível (sem tensões musculares) e , quando o trecho exigir velocidade de execução, o  pianista tem de fazê-lo da melhor maneira possível.</p>
<p>Dependendo das características físicas da mão de um aluno, um dedilhado pode ser melhor do que outro.</p>
<p>Atualmente, com o avanço e o baixo custo dos computadores, é possível o desenvolvimento de Sistemas Inteligentes para auxiliar o ensino do dedilhado pianístico.</p>
<p>Nesse contexto é que inserimos o uso de algumas técnicas de IA, no caso, os algortimos genéticos.</p>
<p>Acima foi falado sobre as várias combinações para uma sequ6encia simples de 4 notas musicais. Qual a melhor? Qual a de menos custo para o músico? Perguntas como essas são respondidas ao utilizar essa técnica fantástica e de fácil compreensão.</p>
<h6>Relembrando&#8230;</h6>
<p>Algoritmo Genético (AG) é um procedimento iterativo, que mantém umapopulação de estruturas (chamadas indivíduos, espécies ou cromossomos) que representam possíveis soluções de um determinado problema.<br />
Os AG são sistemas que se baseiam nos mecanismos da evolução dos seres vivos. Possíveis soluções de um problema são combinadas através dos operadores genéticos específicos inspirados na Seleção Natural de Charles DARWIN (1809- 1882), no Cruzamento e na Mutação.</p>
<p style="text-align:center;"><strong><em>O AG tem como principal característica a geração de um conjunto de soluções ao invés de uma única solução.</em></strong></p>
<p>Basicamente, esses operadores modificam as estruturas (ou cromossomos) do problema, e sobrevivem para a próxima geração, os mais aptos dentre essa população de indivíduos.</p>
<p>Há uma troca aleatória, porém estruturada, de informações entre esses cromossomos (cruzamento), de modo que, a cada geração, um novo conjunto de cromossomos é criado baseado nos mais aptos da geração anterior.</p>
<p>As mutações nos genes dos cromossomos são usualmente geradas de forma aleatória, mas os métodos são determinísticos e em geral podem ser considerados como sendo do tipo genético com regras de mutações determinísticas.</p>
<h6>Aplicação&#8230;</h6>
<p>O Algoritmo Genético caracteriza-se por um processo de seleção baseado no desempenho e na população de cromossomos. A cada seqüência do dedilhado pianístico é atribuído um cromossomo. Os elementos da população são listas fixas de parâmetros a serem otimizadas baseadas numa determinada medida de desempenho (&#8220;fitness&#8221;).</p>
<p>O AG possui 5 componentes básicos:</p>
<ol>
<li> Um método para codificação dos cromossomos (por exemplo, o conjunto representando a seqüência de dedilhado da mão direita {1;2;3;4;5}, onde os numerais representam genes);</li>
<li>Uma função objetivo &#8220;fitness&#8221; (menor distância e posicionamento);</li>
<li>Uma população inicial (50 cromossomos);</li>
<li>Um conjunto de operadores para formarem a evolução entre dois cromossomos de populações consecutivas (mutação e cruzamento), que são usados entre as posições dasespécies, por exemplo, ({1;2;3;4;5} -&gt; {2;1;3;4;5});</li>
<li>Parâmetros de trabalho (por exemplo, 2% de probabilidade de mudança no cromossomo)</li>
</ol>
<h6>Como funciona&#8230;</h6>
<p>Abaixo, segue o esquema padrão do teclado de piano que possui 52 teclas brancas e 36 teclas pretas. A cada tecla branca é atribuído um número que corresponde à nota e posição no teclado, recebendo valores compreendidos entre 23 a +28 com o dó central sendo igual a zero:</p>
<p style="text-align:left;"><a href="http://agnazare.ccems.pt/eb23emus/acordes/piano/teclado.jpg"><img class="aligncenter size-medium wp-image-167" style="border:2px solid black;margin:2px;" title="Teclas" src="http://agnazare.ccems.pt/eb23emus/acordes/piano/teclado.jpg" alt="" width="578" height="164" /></a></p>
<p style="text-align:left;"><a href="http://agnazare.ccems.pt/eb23emus/acordes/piano/teclado.jpg"></a>O cálculo do comprimento do dedilhado pianístico baseia-se na <strong>proximidade física dos dedos</strong>.</p>
<p style="text-align:left;">Por exemplo, assumindo-se que o intervalo de segundas recebe valor igual a um, e se o polegar estiver sobre a primeira nota e a próxima nota for vizinha ascendente, então o comprimento será igual a um. O deslocamento do polegar assume valor menor ou igual a quatro, que é um intervalo de quinta justa ascendente para a mão direita ou descendente para a mão esquerda. Entre os dedos indicador, médio e anular, a distância máxima é de apenas duas teclas dependendo de certos critérios.</p>
<p style="text-align:left;">No exemplo a seguir ,os melhores dedos seriam 2 1 2 3 5, pois o intervalo do contexto da frase musical é de uma oitava.</p>
<p style="text-align:left;">Começando com dedo 2 no dó e fazendo a passagem do polegar sob dedo 2 para alcançar o ré com o polegar, ficamos com um intervalo de 3a para ser executado com o primeiro e segundo dedos. Um intervalo de 2a para tocar com os dedos 2 e 3 e finalmente um intervalo de 5a para ser executado com os dedos 3 e 4.</p>
<p style="text-align:left;"><a href="http://jgabriellima.files.wordpress.com/2010/10/exemplo.png"><img class="aligncenter size-full wp-image-168" title="exemplo" src="http://jgabriellima.files.wordpress.com/2010/10/exemplo.png?w=614" alt=""   /></a></p>
<p style="text-align:left;">A numeração dos dedos são armazenados no vetor dedos[5] e as notas no vetor teclas[5]. Para notas apenas ascendentes ou descendentes, o comprimento total das notas inseridas no teclado recebe valor igual a soma dos módulos das diferenças entre as notas consecutivas.</p>
<p style="text-align:left;">Por exemplo, o conjunto do dedilhado {n1; n2; n3; n4; n5} resulta em:</p>
<p style="text-align:left;">D = |n2-n1| + |n3-n2| + |n4-n3| + |n5-n4|</p>
<p style="text-align:left;">Abaixo segue um exemplo de como é calculado o comprimento de uma frase musical ascendente. Neste caso o comprimento é igual a cinco, pois: D = |2-0| + |4-3|+ |5-4| + |6-5| = 5.</p>
<p style="text-align:left;"><a href="http://jgabriellima.files.wordpress.com/2010/10/exemplo2.png"><img class="aligncenter size-full wp-image-169" title="exemplo2" src="http://jgabriellima.files.wordpress.com/2010/10/exemplo2.png?w=614" alt=""   /></a></p>
<p style="text-align:left;">Se uma nota é ascendente ou descendente em relação a sua antecessora, o comprimento da frase musical é definido como: D12 = |notas[2]  notas[1]| + |d2-d1-1|.</p>
<p style="text-align:left;">Se as notas forem ascendentes e a seqüência dos dedos decrescentes ou então, se as notas forem descendentes e a seqüência dos dedos crescentes então: D12 = 2 * ( |notas[2]  notas[1]|) + |d2-d1-1|</p>
<p style="text-align:left;">Usando o AG, pode-se inserir a seqüência de notas e também definir, se quiser, a seqüência dos dedos que melhor se adapte, ou então ele poderá solicitar que encontre as dez melhores opções de seqüência de dedilhado. A escolha é feita de acordo com o menor comprimento da seqüência do dedilhado calculado pelo AG.</p>
<p style="text-align:left;">Esse post é uma adaptação de um artigo que li recentemente e gostei muito. Ele pode ser encontrado <a title="Artigo" href="http://www.musica.ufrn.br/%7Eviana/publications/SBIE97%20%28Final%29.pdf">aqui</a>.</p>
<p style="text-align:left;">&nbsp;</p>
<p style="text-align:left;">Dicas, sugestões, críticas e sugestões para os próximos posts, deixem nos comentários. Se preferirem, podem mandar email para gabriel@ecomp.eng.br</p>
<p style="text-align:left;">&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=159&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/10/31/algoritmo-genetico-ensino-de-dedilhado-no-piano/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/10/piano-keys.jpg?w=300" medium="image">
			<media:title type="html">Piano</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/10/sequencia.gif" medium="image">
			<media:title type="html">sequencia</media:title>
		</media:content>

		<media:content url="http://agnazare.ccems.pt/eb23emus/acordes/piano/teclado.jpg" medium="image">
			<media:title type="html">Teclas</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/10/exemplo.png" medium="image">
			<media:title type="html">exemplo</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/10/exemplo2.png" medium="image">
			<media:title type="html">exemplo2</media:title>
		</media:content>
	</item>
		<item>
		<title>Game AI &#8211; Técnicas de Inteligência Artificial Aplicada à jogos Eletrônicos</title>
		<link>http://jgabriellima.wordpress.com/2010/10/21/game-ai-tecnicas-de-inteligencia-artificial-aplicada-a-jogos-eletronicos/</link>
		<comments>http://jgabriellima.wordpress.com/2010/10/21/game-ai-tecnicas-de-inteligencia-artificial-aplicada-a-jogos-eletronicos/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 18:22:06 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=149</guid>
		<description><![CDATA[Olá amigos, Esse post é a apresentação feita para a SITEC 2010 &#8211; Semana do Instituto Tecnológico da Universidade Federal do Pará. Consiste em uma compilação de várias referências encontradas em livos e na internet. Espero que gostem! Dúvidas, críticas e sugestões, usem os comentários ou mandem email para jgabriel.ufpa@gmail.com , ficarei feliz em ajudar.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=149&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Olá amigos,</p>
<p>Esse post é a apresentação feita para a SITEC 2010 &#8211; Semana do Instituto Tecnológico da Universidade Federal do Pará.</p>
<p>Consiste em uma compilação de várias referências encontradas em livos e na internet.</p>
<iframe class="scribd_iframe_embed" src="http://www.scribd.com/embeds/39837676/content?start_page=1&view_mode=slideshow&access_key=key-cwaxrwrczskh1m84pqk" data-auto-height="true" scrolling="no" id="scribd_39837676" width="100%" height="500" frameborder="0"></iframe>
<div style="font-size:10px;text-align:center;width:100%"><a href="http://www.scribd.com/doc/39837676">View this document on Scribd</a></div>
<p>Espero que gostem!<br />
Dúvidas, críticas e sugestões, usem os comentários ou mandem email para jgabriel.ufpa@gmail.com , ficarei feliz em ajudar.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/149/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/149/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/149/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=149&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/10/21/game-ai-tecnicas-de-inteligencia-artificial-aplicada-a-jogos-eletronicos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando Bluetooth com JAVA &#8211; SE/ME (Parte 2)</title>
		<link>http://jgabriellima.wordpress.com/2010/10/20/usando-bluetooth-com-java-seme-parte-2/</link>
		<comments>http://jgabriellima.wordpress.com/2010/10/20/usando-bluetooth-com-java-seme-parte-2/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 20:41:22 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=131</guid>
		<description><![CDATA[Então amigos, agradeço todos os comentários e conforme foi combinado, estou postando a segunda parte do post sobre desenvolvimento bluetooth utilizando JAVA. No primeiro post, tratei da base da tecnologia bluetooth, além de algumas informações obre a plataforma Java SE e ME. Hoje venho apresentá-los o Marge Framework. Essa sequência terá um TERCEIRO post, que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=131&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Então amigos, agradeço todos os comentários e conforme foi combinado, estou postando a segunda parte do post sobre <strong>desenvolvimento bluetooth utilizando JAVA</strong>.</p>
<p>No primeiro post, tratei da base da <strong>tecnologia bluetooth</strong>, além de algumas informações obre a plataforma Java SE e ME.</p>
<p>Hoje venho apresentá-los o <a title="Projeto Marge Framework" href="https://marge.dev.java.net/"><strong>Marge Framework</strong></a>. Essa sequência terá um TERCEIRO post, que será composta pelos códigos comentados por mim, para que possa<strong><em> facilitar a compreensão e aprendizagem</em></strong> de vocês. Lembrando que, qualquer dúvida, podem deixar nos comentários, ou mandar email, eu terei grande satisfação em ajudá-los.</p>
<p><em><strong>O conteúdo desse post é uma adaptação/compactação dos trabalhos apresentado pelos seus próprios criadores. Esses documentos podem ser encontrados <a title="Documentação" href="https://marge.dev.java.net/servlets/ProjectProcess?tab=2">aqui</a>.</strong></em></p>
<p>O <a title="Projeto Marge Framework" href="https://marge.dev.java.net/">projeto Marge </a>é um framework desenvolvido em Java &#8211; que utiliza a<strong> biblioteca<a title="Especificação JSR82" href="http://www.jsr82.com/"> JSR 82</a></strong> – com intuito de ajudar a criação de aplicações Bluetooth que fazem parte de um contexto comum.</p>
<p>A idéia principal do projeto é <em><strong>reduzir a curva de aprendizado para desenvolvedores que pretendem criar aplicações com Bluetooth com objetivo de torná-los mais produtivos</strong></em>, fazendo-os concentrar o foco do desenvolvimento apenas na parte lógica do software.</p>
<p style="text-align:center;"><span style="color:#ff6600;"><strong><em>O framework se responsabilizará por abstrair as outras partes relacionadas à comunicação Bluetooth – como as conexões, protocolos, trocas de mensagens, pesquisa por dispositivos e serviços – de uma maneira fácil e suportando diferentes configurações.</em></strong></span></p>
<p>O projeto Marge não propõe apenas uma biblioteca para simplificar o uso de Blueooth em Java, mas sim toda uma arquitetura definida pelo framework.</p>
<p>Abaixo temos  a imagem detalhada de onde se dá o uso do Marge na arquitetura para desenvolvimento Bluetooth.</p>
<p>Na primeira camada temos o sistema operacional, seguido de uma pilha de protocolos Bluetooth, e de uma camada de integração entre a máquina virtual Java e a chamada para a pilha. Acima da máquina virtual Java está a JSR 82, a API que especifica o Bluetooth sobre a qual o Marge foi desenvolvido. Acima do Marge, encontram-se as aplicações.</p>
<div id="attachment_132" class="wp-caption aligncenter" style="width: 186px"><a href="http://jgabriellima.files.wordpress.com/2010/10/arquitetura_marge_framework.png"><img class="size-medium wp-image-132" title="Arquitetura Marge Framework" src="http://jgabriellima.files.wordpress.com/2010/10/arquitetura_marge_framework.png?w=176&#038;h=300" alt="" width="176" height="300" /></a><p class="wp-caption-text">Arquitetura do Marge Framework</p></div>
<p style="text-align:left;">O projeto Marge é livre e possui o código aberto registrado sobre a licensa LGPL (GNU Lesser General Public License) e hospedado pelo portal java.net no endereço http://marge.dev.java.net.</p>
<p style="text-align:left;">O projeto faz parte da comunidade Mobile and Embedded do portal java.net, que é responsável pelo projetos de código aberto em Java ME.</p>
<h6 style="text-align:left;">Pacotes e classes</h6>
<p>O framework Marge contém 24 classes divididas em 7 pacotes. Cada pacote irá ser detalhado abaixo.</p>
<p>O pacote <span style="color:#ff6600;"><em><strong>net.java.dev.marge.communication </strong></em></span>contém a estrutura básica para comunicação. Este pacote contém as seguintes classes:</p>
<ul>
<li><strong>ClientCommunication:</strong> Interface que define métodos para um cliente Bluetooth poder se conectar.</li>
</ul>
<ul>
<li><strong> Communicable:</strong> Classe abstrata que define um esqueleto de como funciona a conexão e as trocas de mensagens entre o cliente e servidor.</li>
</ul>
<ul>
<li><strong>CommunicationListener: </strong>Interface que define métodos relativos ao fechamento da conexão, recebimento de mensagens, erros durante o recebimento e troca de mensagens.</li>
</ul>
<ul>
<li><strong>ServerCommunication:</strong> Interface que define métodos para um servidor Bluetooth poder conectar.</li>
</ul>
<p>O pacote<span style="color:#ff6600;"> <strong><em>net.java.dev.marge.communication.l2cap</em></strong> </span>contém as classes especializadas para a comunicação utilizando o protocolo L2CAP.</p>
<ul>
<li><strong>ClientL2CAPCommunication:</strong> Classe que implementa a conexão em L2CAP por parte do cliente.</li>
</ul>
<ul>
<li><strong>L2CAPCommunication: </strong>Classe abstrata que define um esqueleto de como funciona a conexão e as trocas de mensagens entre o cliente e servidor L2CAP.</li>
</ul>
<ul>
<li><strong>ServerL2CAPCommunication: </strong>Classe que implementa a conexão em L2CAP por parte do servidor.</li>
</ul>
<p>O pacote <span style="color:#ff6600;"><strong><em>net.java.dev.marge.communication.rfcomm</em></strong></span>, contém as classes especializadas para a comunicação utilizando o protocolo RFCOMM.</p>
<ul>
<li><strong>ClientRFCOMMCommunication:</strong> Classe que implementa a conexão em RFCOMM por parte do cliente.</li>
</ul>
<ul>
<li><strong>RFCOMMCommunication:</strong> Classe abstrata que define um esqueleto de como funciona a conexão e as trocas de mensagens entre o cliente e servidor RFCOMM.</li>
</ul>
<ul>
<li><strong>ServerRFCOMMCommunication: </strong>Classe que implementa a conexão em RFCOMM por parte do servidor.</li>
</ul>
<p>O pacote<span style="color:#ff6600;"><strong><em> net.java.dev.marge.entity </em></strong></span>contém as entidades básicas do framework.</p>
<ul>
<li><strong>Client:</strong> Interface que define métodos de um cliente genérico.</li>
</ul>
<ul>
<li><strong>ClientDevice:</strong> Classe que define a estrutura de um dispositivo cliente.</li>
</ul>
<ul>
<li><strong>Device:</strong> Classe abstrata que define a estrutura de um dispositivo genérico.</li>
</ul>
<ul>
<li><strong>Server: </strong>Interface que define métodos de um servidor genérico.</li>
</ul>
<ul>
<li><strong>ServerDevice: </strong>Classe que define a estrutura de um dispositivo servidor.</li>
</ul>
<p>O pacote<span style="color:#ff6600;"><strong><em> net.java.dev.marge.entity.config</em></strong></span> contém as configurações necessárias para que o framework instancie um cliente ou servidor.</p>
<ul>
<li><strong>ClientConfiguration:</strong> Classe abstrata de configuração de um cliente.</li>
</ul>
<ul>
<li><strong>Configuration: </strong>Classe abstrata de configuração genérica.</li>
</ul>
<ul>
<li><strong>ServerConfiguration: </strong>Classe abstrata de configuração de um servidor</li>
</ul>
<p>O pacote <span style="color:#ff6600;"><strong><em>net.java.dev.marge.factory</em></strong></span> contém as fábricas, responsáveis pela instanciação de clientes e servidores para cada protocolo.</p>
<ul>
<li><strong>AbstractCommunicationFactory: </strong>Interface que define métodos para criação de dispositivos clientes e servidores.</li>
</ul>
<ul>
<li><strong>L2CAPFactory: </strong>Classe que define métodos para criação de dispositivos clientes e servidores que usam o protocolo L2CAP para comunicação.</li>
</ul>
<ul>
<li><strong>RFCOMMCommunicationFactory: </strong>Classe que define métodos para criação de dispositivos clientes e servidores que usam o protocolo RFCOMM para comunicação.</li>
</ul>
<p>O pacote<span style="color:#ff6600;"><strong><em> net.java.dev.marge.inquiry</em></strong></span> contém as classes especializadas pelas buscas de dispositivos e serviços que envolvem o protocolo SDP, utilizado para descoberta de serviços.</p>
<ul>
<li><strong>DevicesFoundListener: </strong>Interface que contém métodos relativos a busca de dispositivos.</li>
</ul>
<ul>
<li><strong>Discoverer: </strong>Classe que realiza a busca de dispositivos e serviços.</li>
</ul>
<ul>
<li><strong>ServicesFoundListener: </strong>Interface que contém métodos relativos a busca de serviços.</li>
</ul>
<h6>Como começar?</h6>
<p><span style="color:#000000;">Para criar uma instância de um servidor &#8211; representado pela classe <strong>ServerDevice</strong> do pacote <em>net.java.dev.marge.entity</em> &#8211; ou cliente &#8211; representado pela classe <strong>ClientDevice</strong> desse mesmo pacote &#8211; primeiramente é necessário definir o protocolo de comunicação a ser adotado.</span></p>
<ul>
<li><span style="color:#000000;">Caso se decida pelo<strong> RFCOMM</strong>, todas as instâncias criadas, do tipo cliente ou servidor, serão instanciadas através da fábrica<em><strong> RFCOMMComunicationFactory</strong></em>;</span></li>
</ul>
<ul>
<li><span style="color:#000000;">Caso seja a <strong>L2CAP</strong>, será usada a fábrica <em><strong>L2CAPComunicationFactory</strong></em>.</span></li>
</ul>
<p><span style="color:#000000;">As fábricas pertencem ao pacote <em>net.java.dev.marge.factory</em> e possuem os métodos <strong>createClient</strong> e <strong>createServer</strong>, que retornam o tipo específico de Device que contém os métodos que podem ser invocados.</span></p>
<p><span style="color:#000000;">Cada um desses métodos recebe como parâmetro uma instância concreta da classe <strong>Configuration</strong> do pacote <strong><em>net.java.dev.marge.entity.config</em></strong>, podendo ser uma <strong>ServerConfiguration</strong> ou <strong>ClientConfiguration</strong>.</span></p>
<p><span style="color:#000000;">Inicialmente, essas configurações já possuem alguns valores padrão para funcionar, porém eles podem ser alterados manualmente caso necessário.</span></p>
<p>Um<span style="color:#ff6600;"><strong> ServerConfiguration</strong></span> deve obrigatoriamente receber,<span style="color:#000000;"> no construtor, um <strong>CommunicationListener,</strong> que é uma interface pertencente ao pacote <strong>net.java.dev.marge.communication</strong> que define métodos para tratamento das seguint</span>es situações: quando uma mensagem é recebida; quando ocorre um erro na recepção de uma mensagem; quando ocorre um erro no envio de uma mensagem; e quando uma conexão é estabelecida.</p>
<p>Um <strong><span style="color:#ff6600;">ClientConfiguration</span></strong> deve também obrigatoriamente receber <span style="color:#000000;">um <strong>CommunicationListener</strong> no construtor, porém também deve receber um objeto que implemente a interface <strong>DevicesFoundListener</strong>, do pacote <strong>net.java.dev.marge.inquiry</strong>, que contém métodos associados à busca por dispositivos e a possíveis erros encontrados nessa busca; e um objeto que implemente a interface ServicesFoundListener, deste mesmo pacote, que contém métodos associados à busca por serviços e a possíveis erros encontrados.</span></p>
<ol>
<li>Um <strong>servidor RFCOMM</strong> é criado através da configuração mandada por parâmetro para a fábrica.</li>
<li>Após isso, a sua escuta é iniciada.</li>
<li>Quando alguém se conectar a ele, o listener2, definido pela interface <strong>net.java.dev.marge.communication.ConnectionListener</strong>, irá avisá-lo.</li>
<li>Após a conexão, o servidor pode enviar normalmente mensagens para o cliente conectado e ele será também notificado, pelo mesmo listener, das mensagens que forem recebidas.</li>
<li>Em seguida são mostrados alguns trechos de código que demonstram como o framework é utilizado pelo servidor.</li>
</ol>
<p style="text-align:center;"><strong>Instanciando um servidor com a comunicação RFCOMM e iniciando sua escuta:</strong></p>
<p><pre class="brush: java;">
AbstractCommunicationFactory factory = new RFCOMMCommunicationFactory();
ServerConfiguration sconf = new ServerConfiguration(new CommunicationListenerImpl());
ServerDevice server = (ServerDevice) factory.createServer(sconf);
server.start();
</pre></p>
<p style="text-align:center;"><strong>Servidor enviando uma mensagem</strong>:</p>
<p><pre class="brush: java;">server.send(&quot;Test message&quot;);</pre></p>
<ol>
<li>Um <strong>cliente RFCOMM</strong> é criado através da configuração mandada por parâmetro para a fábrica.</li>
<li>Após isso, ele faz uma <strong><em>busca por dispositivos com Bluetooth ligado</em></strong>. O listener, definido pela interface <strong>net.java.dev.marge.inquiry.DevicesFoundListener</strong>,  retorna os dispositivos encontrados.</li>
<li>Depois faz-se uma busca pelos serviços desejados no dispositivo encontrado escolhido. O listener, definido pela interface <strong>net.java.dev.marge.inquiry.ServicesFoundListener</strong>, retorna o serviço, caso ele seja encontrado.</li>
<li>Com esse serviço, o dispositivo cliente se conecta ao servidor e é notificado pelo listener, definido pela interface<strong> net.java.dev.marge.communication.ConnectionListener</strong>, que houve a conexão.</li>
<li>Após a conexão, o cliente pode enviar  normalmente mensagens para o servidor e ele será também notificado, pelo mesmo listener, das mensagens que forem recebidas.</li>
</ol>
<p>A seguir são apresentados alguns trechos de código relacionados ao uso do framework no cliente:</p>
<p style="text-align:center;"><strong>Instanciando um cliente com comunicação RFCOMM e iniciando um busca por dispositivos:</strong></p>
<p><pre class="brush: java;">
AbstractCommunicationFactory factory = new RFCOMMCommunicationFactory();
ClientConfiguration cconf = new ClientConfiguration(new ServiceListenerImpl(), new
DevicesListenerImpl(), new CommunicationListenerImpl()));
ClientDevice client = (ClientDevice) factory.createClient(cconf);
client.startInquiry(DiscoveryAgent.GIAC);
</pre></p>
<p style="text-align:center;"><strong>Cliente iniciando uma busca por serviços em um determinado dispositivo encontrado:</strong></p>
<p><pre class="brush: java;">

client.searchServices(client.getUuidset(), remoteDeviceFound);
</pre></p>
<p style="text-align:center;"><strong> </strong></p>
<p style="text-align:center;"><strong>Cliente conectando-se a um serviço encontrado previamente:</strong></p>
<p><pre class="brush: java;">client.connect(serviceRecordFound);</pre></p>
<p style="text-align:center;"><strong>Cliente enviando uma mensagem:</strong></p>
<p><pre class="brush: java;">client.send(&quot;Test message&quot;);</pre></p>
<p>Dúvidas, críticas e sugestões. Usem os comentários, ou mandem email para gabriel@ecomp.eng.br</p>
<p>&nbsp;</p>
<p>Terei grande satisfação em ajudar!</p>
<p>Até o próximo post!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=131&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/10/20/usando-bluetooth-com-java-seme-parte-2/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/10/arquitetura_marge_framework.png?w=176" medium="image">
			<media:title type="html">Arquitetura Marge Framework</media:title>
		</media:content>
	</item>
		<item>
		<title>Bio-Música: Síntese Musical a partir de Sequências de DNA</title>
		<link>http://jgabriellima.wordpress.com/2010/09/19/bio-musica-sintese-musical-a-partir-de-sequencias-de-dna/</link>
		<comments>http://jgabriellima.wordpress.com/2010/09/19/bio-musica-sintese-musical-a-partir-de-sequencias-de-dna/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 00:18:10 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Bio-Música]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Múscia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=106</guid>
		<description><![CDATA[Na busca de uma compreensão sempre mais ampla e profunda dos fenômenos da natureza, o ser humano tem empenhado todo o seu poder de observação, concentração e reflexão. Devemos ressaltar, no entanto, que cada órgão de sentido tem suas peculiaridades e nos fornece informações distintas e parciais sobre os fenômenos naturais e nós mesmos. A [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=106&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Na busca de uma compreensão sempre mais ampla e profunda dos fenômenos da natureza, o ser humano tem empenhado todo o seu poder de <span style="color:#ff6600;">observação, concentração e reflexão. </span><img class="alignright" style="margin:5px;" title="_" src="http://www.movimente-se.com/wp-content/uploads/2010/05/music-note-t10469.jpg" alt="" width="210" height="229" /></p>
<p>Devemos ressaltar, no entanto, que <em><strong>cada órgão de sentido tem suas peculiaridades</strong></em> <em><strong>e nos fornece informações distintas e parciais sobre os fenômenos naturais e nós mesmos.</strong></em></p>
<p><strong>A visão</strong>, por exemplo, capta somente o reflexo de luz de uma superfície.</p>
<p><strong>O tato</strong> percebe diferenças de pressão no encontro do nosso corpo com um outro corpo.</p>
<p><strong>O olfato</strong> nos põe em contato com as substâncias químicas em estado gasoso.</p>
<p>E assim cada sentido tem um “talento” especial que, em muitos casos, se combina com outros para nos fornecer uma percepção mais abrangente do nosso objeto de observação.</p>
<p>Seres humanos também são diferenciados quanto à habilidade em utilizar os diversos sentidos. Sabemos que existem pessoas mais visuais, outras mais auditivas ou sinestésicas, que usam de maneira mais eficiente um canal específico para perceber o mundo.</p>
<p style="text-align:center;"><strong><em><span style="color:#ff6600;">&#8220;A audição, em especial, tem a capacidade de nos contar sobre o que está oculto por baixo de uma superfície&#8221; </span></em></strong></p>
<p>Ela pode nos revelar o que esta dentro e inacessível para os olhos ou as mãos. O velho exame médico com o estetoscópio é uma prova disso.<strong><em> O médico ao auscultar o paciente esta colhendo informações preciosas do seu interior</em></strong>. Em uma mata cerrada, onde a visão tem pouco alcance, são os sons que podem nos guiar ou revelar eventuais perigos que se aproximam.</p>
<p style="text-align:right;"><em>&#8220;Para os índios Kamayurá, tanto na mata como na pesca, ouvir também é, substancialmente, não ser cego.&#8221;</em></p>
<p>Na música, assim como na fala, o sentido e a sintaxe se dão quando, somos capazes de estabelecer relações coordenadas entre elementos que estão apartados temporalmente.</p>
<p>Um dos campos onde isto se mostra com maior abundância é no estudo das moléculas de DNA e proteínas.</p>
<p>Abaixo seguem duas citações de pesquisadores que focaram seus estudos na bio-música:</p>
<div class="wp-caption alignleft" style="width: 226px"><a href="http://en.wikipedia.org/wiki/Susumu_Ohno"><img style="margin:5px;" title="Ohno" src="http://cienciahoje.uol.com.br/banco-de-imagens/lg/web/images/ch-on-line/colunas/deriva/68695b.jpg" alt="" width="216" height="275" /></a><p class="wp-caption-text">Susumo Ohno</p></div>
<p><a href="http://en.wikipedia.org/wiki/Susumu_Ohno">Ohno</a> &amp; Ohno (Susumu Ohno and Midori Ohno), cuja pesquisa explora a origem da vida, <em><strong>propõem que o significado de proteínas e da música tem uma origem similar: a repetição e a elaboração de seqüências temáticas.</strong></em></p>
<p>Esses autores salientam: <span style="color:#000000;"><strong><em>“O princípio ubíquo da repetição e recorrência governa não somente a construção codificada de seqüências, mas também o impulso humano da composição musical (p. 72.)”.</em></strong> </span></p>
<p>Ohno &amp; Ohno discutem a evidencia de que variações de duas pequenas seqüências primordiais AAGGCTGCTG (= o peptídeo KAA) e uma derivação AAGCTG (= KL) são reiteradas sempre de novo como temas primários na seqüência de genes onde elas se alternam com temas secundários compostos de outras seqüências.</p>
<p>Para tornar esta “repetição recorrente” mais vivenciável, <span style="color:#ff6600;"><em><strong>Ohno &amp; Ohno desenvolveram um sistema de regras baseado no peso molecular das quatro bases de DNA, que converte as bases em uma escala de oito tons musicais(diatônica). </strong></em></span></p>
<p>O sistema foi usado para produzir uma peça para violino: Human X-linked phosphoglycerate kinase.</p>
<p>Em um trabalho posterior, Ohno (1993) explora um outro tipo de estrutura comum à música e a seqüência de proteínas: o palíndromo (algo que pode ser lido tanto no sentido direto, como no reverso). Nesse trabalho, Ohno descreve a estrutura da Histoina H1 do rato na qual ele encontrou seqüências palindrômicas de peptídeos, umas se sobrepondo às outras, ocupando 115 dos 212 aminoácidos da proteína. A maior destas seqüências continha 14 resíduos KAVKPKAAKPKVAK. Usando a seqüência funcional da proteína e a sua transcrição da fita complementar de DNA, Ohno converteu a seqüência da Histoína H1 em uma peça musical que podia ser executada tanto no piano com em um dueto instrumental.</p>
<p style="text-align:center;">Transposições de DNA e proteínas são interessantes não apenas como música, mas como um modo alternativo de estudar as seqüências genéticas.</p>
<div class="wp-caption alignleft" style="width: 208px"><img src="http://faculty.txwes.edu/mclark/twuh.gif" alt="" width="198" height="73" /><p class="wp-caption-text">Texas Wesleyan University</p></div>
<p><strong>Clarck, M. A. da Texas Wesleyan University(mclark@txwes.edu)</strong> salienta:</p>
<p style="text-align:left;"><em>“</em>Pode-se argumentar que o padrão de dobras de uma proteína (estrutura terciária), é o mais conservado elemento dos organismos vivos. Os genes, a estrutura protéica primária, que sustentam as dobras das proteínas e a diversidade de espécies que as abrigam parecem ter bastante liberdade de variação, desde que a proteína continue a manter suas dobar de maneira que possa cumprir suas funções. As dobras das proteínas dependem da interação dos aminoácidos e da proteína mesma com seu ambiente. Com algumas exceções, a identidade específica dos aminoácidos parece ser menos importante do que a preservação correta das relações internas da proteína.<strong> Eu acredito que música é uma maneira de representar estas relações, em uma cadeia informacional com a qual o ouvido humano esta altamente sintonizado.</strong></p>
<p style="text-align:left;">Clarck<strong> </strong>completa dizendo<strong>:<br />
</strong></p>
<p><span style="color:#ff6600;"><em>&#8220;Por muitos anos eu fui perseguida pela idéia (e procurei encontrar músicos que pudessem me ajudar nesta tarefa) de converter uma seqüência protéica em uma seqüência musical.&#8221;</em></span></p>
<p>Eu estava convencida que isso valeria a pena ser feito: <em><strong><span style="color:#ff6600;">que as seqüências de aminoácidos teriam o equilíbrio certo de complexidade e padronização para gerar uma combinação musical que seria ao mesmo tempo esteticamente interessante e biologicamente informativa. </span></strong></em></p>
<p>Existem 20 aminoácidos, o suficiente para quase três oitavas de escala diatônica. Eles não estão organizados ao acaso, assim como as notas musicais também não estão ao acaso em uma peça musical. Tanto música quanto proteínas tem um sentido.</p>
<p>O sentido de uma proteína é sua função no organismo e certas seqüências emergiram como marcas características de funções específicas. Por exemplo: a hemoglobina tem a função de se ligar com o oxigênio. Algumas características da melodia da hemoglobina podem ser notadas examinando-se a proteína em diferentes espécies, que “tocam” esta melodia como variações sobre um tema.”</p>
<p>Transformar processos biológicos, astronômicos ou geológicos em som e música, tem nos dado a possibilidade de captar aspectos de sua natureza até então ocultos. Por se tratarem<br />
exatamente de “processos”, podemos dizer que a audição e a música, nos colocam em contato com o elemento vivo que permeia a natureza ou, como sugere <a href="http://pt.wikipedia.org/wiki/Arthur_Schopenhauer">Arthur Schopenhauer</a>, nos permite captar a “vontade impulsionadora” do mundo, seus movimentos, sua força e sua ordem. Em um próximo post, irei colocar outras citações de pesquisadores em sítese musical.</p>
<p>Abaixo seguem alguns exemplos dessa maravilhosa arte:</p>
<ul>
<li><a href="http://www.whozoo.org/mac/Music/OCA2.htm">Oculocutaneous Albinism (OCA2) </a>:   &#8211;   <a href="http://www.whozoo.org/mac/Music/CaveFish.mp3">MP3</a></li>
<li><a href="http://www.whozoo.org/mac/Music/sweat.htm">Serotonin                      Transporter 5-HTT:</a> -  <a href="http://www.whozoo.org/mac/Music/sweat.htm">MP3</a></li>
<li><a href="http://www.whozoo.org/mac/Music/taster.htm">Mosquito                      Olfactory Receptor AgOR1 :</a> &#8211; <a href="http://www.whozoo.org/mac/Music/taster.htm">MP3</a></li>
<li><a href="http://www.whozoo.org/mac/Music/taster.htm">PTC                      Taste Receptor: </a>- <a href="http://www.whozoo.org/mac/Music/TasterV2.mp3">MP3</a></li>
</ul>
<p>Mais músicas<a href="http://www.whozoo.org/mac/Music/samples.htm"> aqui</a>!</p>
<p>Referências:</p>
<p>Clarck, M. A.; Roach, J. Your DNA is a song: scientists use music to code proteins, National Geographic News, out. 2005. http://news.nationalgeographic.com/news/2005/10/1021_051021_protein_music.html</p>
<p>Barbera, R.; Vicinanza, D. Você já ouviu o canto de um vulcão? Boletim DeCLARA ano 2, n.7 p.13-15, mai. 2006. http://www.redclara.net/doc/DeCLARA/DeCLARA_po_07.pdf</p>
<p>Bastos, R. M. A musicológica kamayurá. p.103, Ed. da UFSC, 1999.Chandler, D. L.; Whittle, M. Universe started with hiss, not bang. New Scientist.2451, 12 jun. 2004.</p>
<p>Clarck, M. A. Genetic Music: An Annotated Source List.http://whozoo.org/mac/Music/Sources.htm</p>
<p>Ditto, W. From chaos to turbulence. Science &amp; Spirit. v.18 n.3 p.28-30 jul. 2007.</p>
<p>King, R.; Angus, C. PM &#8211; Protein music. Computer applications in the Biosciences. v.12, p.251-252. 1996.</p>
<p>Ohno, S.; Ohno, M. The all prevasive principle of repetitious recurrence governs not only coding sequence construction but also human endeavor in musical composition.</p>
<p>Ohno, S. A song in praise of peptide palindromes. Leukemia 7, sup. 2, p.157-159,ago. 1993.</p>
<p><em>Adaptado de: &#8220;FENÔMENOS COMPLEXOS: CIENTISTAS TAMBÉM USAM SEU OUVIDO MUSICAL!&#8221; disponível em: <a href="http://www.ouvirativo.com.br/rede/textos/textos-pdf/tx_mp_fenocomplex.pdf" target="_blank">http://www.ouvirativo.com.br/rede/textos/textos-pdf/tx_mp_fenocomplex.pdf</a></em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/106/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/106/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/106/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=106&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/09/19/bio-musica-sintese-musical-a-partir-de-sequencias-de-dna/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.whozoo.org/mac/Music/CaveFish.mp3" length="3964450" type="audio/mpeg" />
<enclosure url="http://www.whozoo.org/mac/Music/TasterV2.mp3" length="2117279" type="audio/mpeg" />
<enclosure url="http://www.whozoo.org/mac/Music/TasterV2.mp3" length="2117279" type="audio/mpeg" />
<enclosure url="http://www.whozoo.org/mac/Music/TasterV2.mp3" length="2117279" type="audio/mpeg" />
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://www.movimente-se.com/wp-content/uploads/2010/05/music-note-t10469.jpg" medium="image">
			<media:title type="html">_</media:title>
		</media:content>

		<media:content url="http://cienciahoje.uol.com.br/banco-de-imagens/lg/web/images/ch-on-line/colunas/deriva/68695b.jpg" medium="image">
			<media:title type="html">Ohno</media:title>
		</media:content>

		<media:content url="http://faculty.txwes.edu/mclark/twuh.gif" medium="image" />
	</item>
		<item>
		<title>Usando Bluetooth com JAVA &#8211; SE/ME (Parte 1)</title>
		<link>http://jgabriellima.wordpress.com/2010/09/19/usando-bluetooth-com-java-seme-parte-1/</link>
		<comments>http://jgabriellima.wordpress.com/2010/09/19/usando-bluetooth-com-java-seme-parte-1/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 14:43:42 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=87</guid>
		<description><![CDATA[Bluetooth é uma tecnologia sem fio muito usada para conectar dispositivos a curta distância, que ganhou bastante espaço nos últimos anos por estar disponível na maioria dos celulares e notebooks mais recentes. A linguagem de programação Java, atualmente, também aparece como uma das principais plataformas para o desenvolvimento de aplicações em vários dispositivos, devido as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=87&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Bluetooth" src="http://mundocorby.files.wordpress.com/2010/07/bluetooth2.jpg?w=160&#038;h=166" alt="" width="160" height="166" />Bluetooth é uma <span style="color:#ff6600;"><em>tecnologia sem fio</em> </span>muito usada para <span style="color:#ff6600;"><em>conectar dispositivos a curta distância</em></span>, que ganhou bastante espaço nos últimos anos por <span style="color:#ff6600;">estar disponível na maioria dos celulares e notebooks</span> mais recentes.</p>
<p>A linguagem de programação <a href="http://www.java.com">Java</a>, atualmente, também aparece como uma das principais plataformas para o desenvolvimento de aplicações em vários dispositivos, devido as diversas vantagens que a mesma possui.</p>
<p>Java possui uma especificação para uso de Bluetooth, definida pela <a href="http://www.jsr82.com/">JSR 82</a>, criada &#8211; e finalizada sua segunda versão em 2006, mas esta, por conseguinte, <span style="color:#993300;">possui um difícil aprendizado</span>. Sendo assim, esta sequencia de posts apresentam  apresentam a estrutura conceitual da tecnologia bluetooth e sua implementação em  java utilizando o <a href="https://marge.dev.java.net/">Marge Framework </a>com o intuito de facilitar o desenvolvimento de aplicações.</p>
<p>Para permitir a integração entre as tecnologias Bluetooth e Java foi criada &#8211; e finalizada sua segunda versão em 2006 – a Java APIs for Bluetooth, conhecida por JSR 82. A JSR 82 atualmente está <img class="alignright" title="Bluetooth" src="http://jgabriellima.files.wordpress.com/2010/09/icon-bluetooth.png?w=177&#038;h=177" alt="" width="177" height="177" />disponível em diversos dispositivos e define a especificação para comunicação Bluetooth em diversos níveis. Com toda essa facilidade de suporte por parte da linguagem, e com a grande adoção do Bluetooth pelos fabricantes, se faz possível, assim, a criação de diversas aplicações interessantes e/ou de dispositivos que utilizam essa tecnologia para cenários distintos, tais como em casa, no trabalho, no lazer ou qualquer outro ambiente que requeira mobilidade.</p>
<p>Diferentes dispositivos Bluetooth podem oferecer diferentes serviços. Um dispositivo Bluetooth, após ter encontrado um outro dispositivo remoto, poderá fazer uma pesquisa pelo serviços disponíveis nesse dispositivo remoto ou apenas por algum serviço específico. O serviço de pesquisa de dispositivos utiliza o protocolo SDP (Service Discovery Protocol).</p>
<p>Em um contexto SDP, um cliente envia requisições a um servidor que, por sua vez, envia as informações de serviços disponíveis nele. Dispositivos Bluetooth mantém informações sobre seus serviços em um Service Discovery DataBase (SDDB). Um SDDB contém entradas de registros de serviços onde cada um desses registros contém atributos que o descrevem.</p>
<p>Em nossos artigos apresentaremos as implementações de conexão via bluetooth entre um celular e o pc, para isso faremos uma breve introdução das tecnologias Java SE e Java ME.</p>
<p>O Java SE está dividido em três partes:<br />
• Componentes do núcleo ou core: Provê funcionalidades essenciais para escrita de programas, para acesso a banco de dados, segurança, invocações de procedimentos remotos e comunicação.<br />
• Componentes do cliente ou desktop: Provê facilidades para ajudar na construção de aplicações para os usuários. Isso inclui componentes de desenvolvimento como os Java Plug-in, APIs de modelos de componentes como os JavaBeans, interfaces gráficas para os usuários, etc.</p>
<p style="text-align:center;"><a href="http://jgabriellima.files.wordpress.com/2010/09/j2.jpg"><img class="size-medium wp-image-90 aligncenter" title="j2" src="http://jgabriellima.files.wordpress.com/2010/09/j2.jpg?w=300&#038;h=207" alt="" width="300" height="207" /></a></p>
<p>Java ME é destinado aos dispositivos com recursos limitados. Esse dispositivos englobam os celulares, PDAs, set-top boxes – conversores usados em televisão digital &#8211; e outros aparelhos com essas características. Antes da introdução do Java ME, a maioria destes dipositivos eletrônicos possuía uma natureza estática, por não permitir a instalação de novos softwares, além daqueles que foram inseridos no processo de fabricação. Porém, atualmente, é possível torná-los muito mais dinâmicos.</p>
<p>Apesar dessas grandes vantagens, a tecnologia Java ME ainda possui certas restrições que estão aos poucos sendo sanadas, pois embora fosse desejável ter toda a API Java SE nos dispositivos micro, isso não é nada realístico hoje.</p>
<p>Por exemplo, um celular, com sua tela limitada, não poderia usar todas as APIs de interface gráfica disponíveis na versão do Java para desktop, tão quanto suportar as APIs relativas ao desenvolvimento em Java para servidores, que também envolvem questões muito mais complexas.</p>
<p style="text-align:center;">Para resolver esse problema e dar uma maior flexibilidade ao Java ME, foram criados os conceitos de configurações, perfis e pacotes adicionais, conforme ilustrado na figura:<a href="http://jgabriellima.files.wordpress.com/2010/09/config.jpg?w=300"><img class="size-medium wp-image-89 aligncenter" title="config" src="http://jgabriellima.files.wordpress.com/2010/09/config.jpg?w=252&#038;h=150" alt="" width="252" height="150" /></a></p>
<p style="text-align:center;">Atualmente, o Java ME divide as configurações em dois tipos, ilustrados abaixo configurações mais limitadas, chamadas de CLDC (Connected Limited Device<br />
Configuration), e configurações com mais recursos, a CDC (Connected Device Configuration). A CLDC é um subconjunto da CDC, como mostra a figura:<a href="http://jgabriellima.files.wordpress.com/2010/09/jme.jpg?w=300"><img class="aligncenter size-medium wp-image-91" title="jme" src="http://jgabriellima.files.wordpress.com/2010/09/jme.jpg?w=300&#038;h=223" alt="" width="300" height="223" /></a></p>
<p style="text-align:left;">No próximo post mostrarei a implementação de um programa de comunicação via Bluetooth entre 2 celulares e entre pc e celular.</p>
<p style="text-align:left;">Dúvidas, críticas e opiniões, deixem nos comentários.</p>
<p style="text-align:left;">Obrigado!</p>
<p style="text-align:left;">
<p style="text-align:left;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=87&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/09/19/usando-bluetooth-com-java-seme-parte-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://mundocorby.files.wordpress.com/2010/07/bluetooth2.jpg" medium="image">
			<media:title type="html">Bluetooth</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/09/icon-bluetooth.png?w=256" medium="image">
			<media:title type="html">Bluetooth</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/09/j2.jpg?w=300" medium="image">
			<media:title type="html">j2</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/09/config.jpg?w=300" medium="image">
			<media:title type="html">config</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2010/09/jme.jpg?w=300" medium="image">
			<media:title type="html">jme</media:title>
		</media:content>
	</item>
		<item>
		<title>LittleDog &#8211; Aprendizagem e Adaptação de Comportamentos</title>
		<link>http://jgabriellima.wordpress.com/2010/09/13/littledog-aprendizagem-e-adaptacao-de-comportamentos/</link>
		<comments>http://jgabriellima.wordpress.com/2010/09/13/littledog-aprendizagem-e-adaptacao-de-comportamentos/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 19:52:00 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Robótica]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=79</guid>
		<description><![CDATA[A revista Robótica Autônoma (Autonomous Robots) tem seu próprio blog, que se destina a levar uma robótica mais complexa, tornando-a mais amigável ao leitor. Eles também possuem links para artigos de jornal.Se você precisa de um pouco de informação sobre tecnologias modernas e mais complexas. De qualquer forma, lendo alguns posts mais antigos, eu encontrei [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=79&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A revista  Robótica Autônoma (<a href="http://www.autonomousrobotsblog.com/">Autonomous Robots</a>) tem seu próprio blog, que se destina a levar uma robótica mais complexa, tornando-a mais amigável ao leitor.</p>
<p>Eles também possuem links para artigos de jornal.Se você<img class="alignright" title="header " src="http://www.botjunkie.com/wp-content/uploads/2010/09/header_21.jpg" alt="" width="360" height="71" /> precisa de um pouco de informação sobre tecnologias modernas e mais complexas. De  qualquer forma, lendo alguns posts mais antigos, eu  encontrei esses videos do LittleDog exibindo alguns novos comportamentos  de aprendizagem.</p>
<p><img class="alignleft" title="Little Dog" src="http://www.bostondynamics.com/img/LittleDog.png" alt="" width="357" height="240" /></p>
<p>A melhor solução para desenvolver <strong><em>um robô capaz de se adaptar a novas situações</em></strong>,  após explorar o ambiente ao seu redor, é que as “novas situações”param de acontecer com tanta frequência, ou seja, <strong>havendo a compreensão de como é o ambiente onde ele se encontra, fica fácil se locomover</strong>. Logo, idealmente, nesse sentido, temos um <strong>robô que é capaz de reconhecer uma situação pois já experimentou dela antes, e que aplique essa experiência sem ter que descobrir o que fazer a partir do zero</strong>. Pensando nisso, Martin Stolle e Chistopher Atkeson estão desenvolvendo um sistema que permite que o robô primeiro reconheça as características que ele já viu antes (como paredes ou defeitos na superfície) e, sem seguida, acessar uma biblioteca que contém uma sequência de ações que já foram aplicadas com sucesso na sua primeira interação com aquela determinada situação. <strong>O robô pode alterar essas ações para aplicá-la à situação atual em vez de ter que calcular uma sequência de ação repetidamente</strong>. Essa solução torna o robô mais rápido e eficiente, quando se trata de aprendizagem e comportamento.</p>
<p>Cientistas de grandes instituições e universidades usam o LittleDog para sondar as relações fundamentais entre a <strong>aprendizagem motora, controle dinâmico , percepção do ambiente e locomoção em terrenos com falhas geográficas</strong>.</p>
<p>O LittleDog é usado no<a href="http://web.mit.edu/"> MIT</a>, <a href="Stanford">Stanford</a>, <a href="www.cmu.edu/">Carnegie Mellon</a>, <a href="www.usc.edu/">USC</a>, <a href="www.upenn.edu/">Universidade da Pensilvânia</a>, como parte de um programa financiado pela <a href="http://www.darpa.mil/">DARPA</a> em robótica avançada.</p>
<p>Ele tem quatro pernas, cada uma alimentada por três motores . Os pés são fortemente articulados. O robô é forte o suficiente para se locomover em vários tipos de ambientes. Possui sensores de medida de ângulos articulares. Os programas que rodam no robô são acessados através da Boston Dynamics Robot API. Possui baterias de polímero de lítio que permitem uma locomoção de 30 minutos<br />
As comunicações sem fios e registro de dados operação de suporte remoto e análise de dados. LittleDog desenvolvimento é financiada pela DARPA Information Processing Technology Office.</p>
<p>Para baixar um vídeo de LittleDog em ação, clique <a href="http://www.bostondynamics.com/dist/LittleDog.wmv">aqui</a></p>
<span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/13/littledog-aprendizagem-e-adaptacao-de-comportamentos/"><img src="http://img.youtube.com/vi/YnCEBy9G9bo/2.jpg" alt="" /></a></span>
<span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/13/littledog-aprendizagem-e-adaptacao-de-comportamentos/"><img src="http://img.youtube.com/vi/J-uwzFHj0I4/2.jpg" alt="" /></a></span>
<p>Deixe seu feedback nos comentários, aceito sugestões de novos posts. Até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=79&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/09/13/littledog-aprendizagem-e-adaptacao-de-comportamentos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.bostondynamics.com/dist/LittleDog.wmv" length="11028648" type="video/asf" />
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://www.botjunkie.com/wp-content/uploads/2010/09/header_21.jpg" medium="image">
			<media:title type="html">header </media:title>
		</media:content>

		<media:content url="http://www.bostondynamics.com/img/LittleDog.png" medium="image">
			<media:title type="html">Little Dog</media:title>
		</media:content>
	</item>
		<item>
		<title>Inteligência de Enxames &#8211;  A inteligência baseada em colônias de insetos sociais</title>
		<link>http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/</link>
		<comments>http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 03:45:06 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=53</guid>
		<description><![CDATA[Os insetos sociais (formigas, abelhas, vespas e cupins ) tem sido objeto de estudo de diversos cientistas, principalmente devido ao seu sucesso ecológico. Esse sucesso é justificado pela eficiência de seu trabalho em conjunto. Um inseto pode ter apenas algumas centenas de células cerebrais, mas a sua organização é capaz de realizar maravilhas arquitetônicas, de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=53&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Os insetos sociais (formigas, abelhas, vespas e cupins ) tem sido objeto de estudo de diversos cientistas, <img class="alignright" title="Colônia de formigas" src="http://www.physorg.com/newman/gfx/news/2006/image_page1-1.jpg" alt="" />principalmente devido ao seu sucesso ecológico. Esse sucesso é justificado pela eficiência de seu trabalho em conjunto. Um inseto pode ter apenas algumas centenas de células cerebrais, mas a sua organização é capaz de realizar maravilhas arquitetônicas, de elaborar sistemas de comunicação e de resistir às terríveis ameaças da natureza.</p>
<p>Sua capacidade coletiva emerge da interação coletiva com o ambiente e entre os indivíduos, embora tenham uma cognição limitada. As ações de um inseto são limitadas, no entando, produz em conjunto, um resultado supreendente.</p>
<p>Inteligência de enxames é a denominação aplicada a tentsativa de desenvolvimento de algoritmos para a solução distribuida de problemas inspirando-se no comportamento coletivo de colônias de insetos sociais e outras sociedades de animais. Pesquisadores têm muitas rezões para achar o estudo de inteligência de enxames atrativo pois, oferece um caminho alternativo para o desenvolvimento de sistemas inteligentes por possuir autonomia, emergência e controle distribuido.</p>
<p>Como exemplos, pode-se citar a sociedades das abelhas, a alocação de tarefas nas colônias de formigas, o transporte cooperativo de comida,  a seleção de melhor fonte de néctar pelas abelhas, entre outros.</p>
<p>As características comuns nestes comportamentos são:</p>
<ul>
<li>Flexibilidade:  a colônia pode responder à pertubações internas e desafios externos</li>
<li>Controle Distribuído: na colônia não existe um indivíduo centralizador que direciona a realização das tarefas, a organização emerge das interações entre os constituintes do sistema e entre os indivíduos e ambientes.</li>
<li>Robustez: Um colapso individual não provoca a falha no sistema</li>
<li>Auto-Organização: caminhos para a soluçào são emergentes e não pré-definidos</li>
</ul>
<p>Soluções para diferentes tipo de problemas têm sido  encontradas usando heurísticas baseadas em comportamentos de formigas e outros insetos. Abaixo segeu uma sequência de vídeos que apresentam na prática, o funcionamento desses estudos.</p>
<h6 id="watch-headline-title"><strong>Swarm</strong>-<strong>Bots</strong> Pulling a Child</h6>
<span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/"><img src="http://img.youtube.com/vi/CJOubyiITsE/2.jpg" alt="" /></a></span>
<h6><strong>Robots</strong> with a mind of their own</h6>
<p>Esse é um dos mais impressionantes exemplos:</p>
<span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/"><img src="http://img.youtube.com/vi/SkvpEfAPXn4/2.jpg" alt="" /></a></span>
<p><em>Outro exemplo bem maneiro, que vai um pouco mais além do que foi tratado nesse post</em></p>
<span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/"><img src="http://img.youtube.com/vi/4oSavAHf0dg/2.jpg" alt="" /></a></span>
<p><a href="http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/#respond"><strong>Comentar</strong></a><a href="http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/#respond"><img class="alignleft" title="asd" src="http://www.york.ac.uk/media/it-services/images/icons/64x64/comment.png" alt="" width="40" height="34" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=53&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/09/12/inteligencia-de-enxames-a-inteligencia-baseada-em-colonias-de-insetos-sociais/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://www.physorg.com/newman/gfx/news/2006/image_page1-1.jpg" medium="image">
			<media:title type="html">Colônia de formigas</media:title>
		</media:content>

		<media:content url="http://www.york.ac.uk/media/it-services/images/icons/64x64/comment.png" medium="image">
			<media:title type="html">asd</media:title>
		</media:content>
	</item>
		<item>
		<title>Gadgets Espiões &#8211; Parte 1</title>
		<link>http://jgabriellima.wordpress.com/2010/09/11/gadgets-espioes-parte-1/</link>
		<comments>http://jgabriellima.wordpress.com/2010/09/11/gadgets-espioes-parte-1/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 15:53:05 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[A.I]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=44</guid>
		<description><![CDATA[Gadgets, também conhecidos como &#8220;geringonças&#8221; eletrônicas, se tornam mais populares a cada dia. Atualmente o mercado está cheio de variedades dessa categoria. São players mptudo, mini/micro celulares, pen-driver`s, etc. Além desses, também estão se tornando muito populares os dispositivos espiões. São dispositivos que aparentemente (ou não) parecem de utilidade comum (um relógio, por exemplo), mas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=44&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gadgets, também conhecidos como &#8220;geringonças&#8221; eletrônicas, se tornam mais populares a cada dia. Atualmente o mercado está cheio de variedades dessa categoria. São players mptudo, mini/micro celulares, pen-driver`s, etc. Além desses, também estão se tornando muito populares os dispositivos espiões.</p>
<p>São dispositivos que aparentemente (ou não) parecem de utilidade comum (um relógio, por exemplo), mas trazem escondido um diospositivo de armazenamento de dados, acoplado a estruturas que podem gravar vídeo, audio, com sensores de calor, aproximação, umidade do ar, intensidade sonora, etc&#8230; indo até os limites da imaginação humana.</p>
<p>Abaixo, apresento alguns desses produtos , suas respectivas categorias e preços. Essa é só a primeira parte, logo publico o complemento.</p>
<h5><span style="color:#ff6600;"><strong>Armazenadores de dados<br />
</strong></span></h5>
<h6><a href="http://www.thinkgeek.com/gadgets/security/9771/">USB Memory Watch</a></h6>
<p><span style="color:#ff6600;"><strong><img class="alignleft" title="Watch Memory USB" src="http://www.thinkgeek.com/images/products/thumb/largesquare/usb_memory_watch.jpg" alt="" width="125" height="125" /></strong></span></p>
<p>O  USB Memory Watch tem um conector USB interno e pode transferir  arquivos para a maioria dos sistemas operacionais. O conector USB fica guardado habilmente na faixa de relógio e vira-se para fácil conexão. Existe ainda uma luz LED, que indica o status do dispositivo. O relógio é surpreendentemente elegante e leve. É muito confortável e flexível.</p>
<p>Características:</p>
<p style="padding-left:120px;">* Standard interface USB e cabo de extensão USB incluído<br />
* USB 2.0 (leia 4MB / s e gravação 3MB / s)<br />
* Design elegante, muito leve<br />
* Plug and play, a operação fácil (aparece como um dispositivo de armazenamento em massa USB)<br />
* LED indicador mostra a conectividade do dispositivo e transferir dados<br />
* Sistemas Operacionais: Win 98, ME, 2000, XP, Linux 2.4 ou superior, Mac OS 8.6 ou superior<br />
* CD incluído contém Win 98 driver<br />
* À prova de choque e anti-estático<br />
* O relógio não é à prova d&#8217;água<br />
* Bateria de 3 anos<br />
* Tipo de bateria: SR626SW<br />
* O tamanho da memória: 2GB ou 4GB ou 8GB<br />
* Peso: 1,5 onça (43 gramas)<br />
* Dimensões: largura 1,5 &#8220;x .375&#8243;</p>
<p style="padding-left:120px;"><strong>Preço: $ 39.99</strong></p>
<h6><strong><a href="http://www.thinkgeek.com/gadgets/security/a8bc/">Watch USB Flash Driver</a></strong></h6>
<p><img class="alignleft" title="Watch USB Flash Driver" src="http://www.thinkgeek.com/images/products/thumb/largesquare/a8bc_flash_drive_watch.jpg" alt="" width="125" height="125" /></p>
<p>Este relógio possui  capacidade de 8G em uma unidade flash USB que cabe perfeitamente na caixa do relógio. Basta  remover, adicionar dados e, em seguida, insira novamente e está pronto  para realizar missões secretas .</p>
<p>Este  relógio tem uma caixa plástica coberta pela máscara de aço inoxidável  com acabamento em prata escovado e vidro mineral convexa e brilhante. A unidade flash USB cabe em um espaço na parte de trás do relógio, pronto para manter seus dados seguros e protegidos. Você pode até esquecer que está lá até que você esteja pronto para utilizá-lo.</p>
<p style="padding-left:120px;">Características:</p>
<p style="padding-left:120px;">* Pequenas drive flash USB se encaixa totalmente dentro do relógio<br />
* Perfeito para carregar seus dados em missões secretas<br />
* Quartzo japonês<br />
* Pulseira em poliuretano preto<br />
* Mãos Luminescent<br />
* Enorme capacidade de 8GB<br />
* Tamanho do dial ver: 1.1 &#8220;x 1&#8243; (29 x 25mm)<br />
* O tamanho da unidade de Flash: 1,5 &#8220;x 0,5&#8243; x 25 &#8220;(38 x 13 x 6mm)</p>
<p style="padding-left:120px;"><strong>Preço: $ 49.99</strong></p>
<h6><a href="http://www.thinkgeek.com/gadgets/security/aacd/"><strong>USB Flash Driver Lighter</strong></a></h6>
<p><img class="alignleft" title="Light Flash Driver" src="http://www.thinkgeek.com/images/products/thumb/largesquare/aacd_USB_flash_drive_light.jpg" alt="" width="125" height="125" /> Este flash drive tem uma ampla capacidade de 8GB e um isqueiro é recarregável. O  conector USB desliza para fora da parte inferior da caixa de metal,  usando uma pequena alavanca deslizante localizado na lateral do  isqueiro. O isqueiro tem um acabamento de cromo polido e uma chama ajustável.</p>
<p style="padding-left:120px;">Características:</p>
<p style="padding-left:120px;">* Recarregáveis isqueiro com built-in USB flash drive</p>
<p style="padding-left:120px;">* 8 GB de capacidade</p>
<p style="padding-left:120px;">* USB desliza para fora do conector do isqueiro</p>
<p style="padding-left:120px;">* Caso Metal<br />
* Chama ajustável<br />
* Dimensões: 1,5 &#8220;x 2,4&#8243; x 0,5 &#8220;(3,8 cm x 6 x 1.3)<br />
* Nota: não inclui fluido de isqueiro</p>
<h5><strong><span style="color:#ff6600;"><strong>Câmeras  Espiãs</strong></span></strong></h5>
<h6><a href="http://www.thinkgeek.com/gadgets/security/b550/"><strong><span style="color:#ff6600;"><strong><span style="color:#000000;">Spy Camera Video Watch</span></strong></span></strong></a></h6>
<p><strong><span style="color:#ff6600;"><strong><span style="color:#000000;"><img class="alignleft" title="Spy camera " src="http://www.thinkgeek.com/images/products/thumb/largesquare/b550_spy_camera_video_watch.jpg" alt="" width="125" height="125" /></span></strong></span></strong>Ele possui um câmera de vigilância de vídeo embitida e uma memória flahs de 8GB para horas de armazenamento. O relógio em si é um design elegante. Relógio full metal com um mostrador de vidro. Preciso, em tempo engrenagem movida em segundos, minutos e horas, com ajuste do tempo. Assim como um relógio comum, este é um relógio de qualidade &#8211; a câmera de vídeo é apenas a cereja no bolo espião! A  câmara de vídeo minúscula formato AVI permite-lhe gravar os seus  arquivos que você pode depois transferir para o seu computador para  visualização e arquivamento.</p>
<p style="padding-left:120px;">Características:</p>
<p style="padding-left:120px;">* Mini câmara de vídeo espião* Grava vídeo e audio<br />
* A bateria Li-ion (recarrega pela porta USB)<br />
* Pode também ser usado como uma unidade flash USB 8GB<br />
* Built-in microfone<br />
* Ver o comprimento da banda é ajustável<br />
* Vídeo no formato AVI (352&#215;288) com 15 FPS<br />
Dimensões: relógio é de 45 x 14mm (diâmetro x H)<br />
* Windows 98SE/ME/2000/XP, Mac OS compatível<br />
* Inclui: atenção, cabo USB, manual do usuário, Adaptador de energia (110-240V 50/60Hz)</p>
<h6 id="gt-res-tools"><a href="http://www.thinkgeek.com/gadgets/security/c521/"><strong>Spycam Video Pen Camera</strong></a></h6>
<div><img class="alignleft" title="spycam video pen" src="http://www.thinkgeek.com/images/products/thumb/largesquare/c521_spycam_video_pen_camera.jpg" alt="" width="125" height="125" />Esta é a caneta com Spycam, assim como os usados nos filmes do  agente secreto, exceto que foi atualizado para a idade moderna, com  recursos de vídeo completo. Simples de operar com o conector USB interno. Com 4GB de capacidade de armazenamento interno são capazes de captar horas de vídeo com qualidade no formato AVI.<br />
Características:* Covert câmara de vídeo estilo pode capturar horas de qualidade de vídeo (com áudio)<br />
* Vídeo formato de arquivo AVI<br />
* Resolução de 640&#215;480</p>
</div>
<div style="padding-left:120px;">* 4GB de capacidade de armazenamento<br />
USB 2.0 *<br />
* Trabalhando com caneta de tinta preta<br />
* Extremamente portátil, sem fios<br />
* Re-exigível bateria Li-Ion (2 horas de tempo de execução)</div>
<h6><a href="http://www.thinkgeek.com/gadgets/security/df77/"><strong>Wireless Camera Motion Detect</strong></a></h6>
<div><img class="alignleft" title="spy cam" src="http://www.thinkgeek.com/images/products/thumb/largesquare/df77_wireless_pan_tilt_camera.jpg" alt="" width="125" height="125" /></div>
<div style="padding-left:120px;">Câmera com IP estático onde você pode manter um olho em  seu lugar favorito em qualquer lugar do mundo com a internet. Uma  vez que você estiver logado, você pode gerenciar uma variedade de  funções e alterar, modificar, implementar e fazer muito mais do que  apenas sentar e assistir. Há ainda uma função que lhe enviaremos um e-mail com uma foto de quando o detector de movimento é acionado.</div>
<div style="padding-left:120px;">Características :</div>
<div style="padding-left:120px;">
<p>* Dia ou noite, ser capaz de monitorar todo o espaço<br />
* Crie até quatro dessas câmeras em diferentes salas<br />
* Veja tudo com o clique de seu mouse, de qualquer lugar com internet<br />
* Vem com opções de criptografia WEP de segurança<br />
* Os registros de áudio e vídeo, assim você pode ouvir as pessoas (ou animais) fora da câmara<br />
* Gravação em MJEPG (AVI), formato 100 fps, 320 x 240, 640 x 480 resoluções<br />
* Áudio: Codec PCM / 8000Hz 128 kb / s (1 CHNL)<br />
*  Alarm Service Settings: Motion Detection, Entrada de Alarme, Enviar  E-mail em caso de alarme, Upload de imagem em caso de alarme<br />
*  O pacote inclui: Câmera IP, cabo Ethernet, placa de montagem, parafusos  à parede (x2), adaptador de alimentação (100 &#8211; 240V), CD (Manual do  Usuário e aplicação da câmara IP)<br />
* NOTA: Este produto é importado e só vem com um plug estilo europeu de energia. Você deve fornecer um adaptador de plug para o uso com tomadas E.U..</p>
</div>
<div style="padding-left:120px;"><span style="text-align:center; display: block;"><a href="http://jgabriellima.wordpress.com/2010/09/11/gadgets-espioes-parte-1/"><img src="http://img.youtube.com/vi/lVLXidxiVz0/2.jpg" alt="" /></a></span></div>
<div style="padding-left:30px;"></div>
<div style="padding-left:30px;"></div>
<div style="padding-left:30px;">Esperam que tenham gostado e escolhido seu gadget espião favorito, no próximo post, vou incluir novas categorias de dispositivos espiões.</div>
<div style="padding-left:30px;">Comentários, sugestões ou críticas&#8230;</div>
<div style="padding-left:30px;"></div>
<div style="padding-left:30px;"><a href="http://jgabriellima.wordpress.com/2010/09/11/gadgets-espioes-parte-1/#respond">COMENTAR</a></div>
<div style="padding-left:30px;"></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/44/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/44/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/44/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=44&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2010/09/11/gadgets-espioes-parte-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/usb_memory_watch.jpg" medium="image">
			<media:title type="html">Watch Memory USB</media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/a8bc_flash_drive_watch.jpg" medium="image">
			<media:title type="html">Watch USB Flash Driver</media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/aacd_USB_flash_drive_light.jpg" medium="image">
			<media:title type="html">Light Flash Driver</media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/b550_spy_camera_video_watch.jpg" medium="image">
			<media:title type="html">Spy camera </media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/c521_spycam_video_pen_camera.jpg" medium="image">
			<media:title type="html">spycam video pen</media:title>
		</media:content>

		<media:content url="http://www.thinkgeek.com/images/products/thumb/largesquare/df77_wireless_pan_tilt_camera.jpg" medium="image">
			<media:title type="html">spy cam</media:title>
		</media:content>
	</item>
		<item>
		<title>Lendo arquivos Excel com Java</title>
		<link>http://jgabriellima.wordpress.com/2009/09/12/lendo-arquivos-excel-com-java/</link>
		<comments>http://jgabriellima.wordpress.com/2009/09/12/lendo-arquivos-excel-com-java/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 19:07:52 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=31</guid>
		<description><![CDATA[Olá amigos, voltando a postar, trago hoje para vocês um recurso bem interessante que é a leitura de planilhas do excel. Em muitas situações nos deparamos com problemas que envolvem leitura de arquivos. O uso de planilhas é muito comum em vários sistemas asssim como em inúmeros campos do conhecimento, e ter o recurso de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=31&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="java">Olá amigos, voltando a postar, trago hoje para vocês um <strong><span style="color:#800000;">recurso bem interessante </span></strong>que é a leitura de planilhas do excel.</div>
<div class="java">Em muitas situações nos deparamos com <span style="color:#800000;">problemas que envolvem leitura de arquivos.</span></div>
<div class="java"><span style="color:#800000;"><br />
</span></div>
<div class="java">O uso de <span style="color:#800000;">planilhas </span>é muito comum em vários <span style="color:#800000;">sistemas</span> asssim como em inúmeros campos do conhecimento, e ter o recurso de <span style="color:#800000;">ler esses arquivos com Java</span> é algo bem interesante.</div>
<div class="java">Para começarmos, vamos utilizar a API <a href="http://sourceforge.net/projects/jexcelapi/files/" target="_blank">jxl</a> que vem repleta de recursos para <span style="color:#800000;">manipulação de planilhas Excel</span>.</div>
<div class="java">Vou mostrar uma sequência de exemplos, com seus respectivos comentários, se surgir alguma dúvida enquando vo ê estiver implementando, <span style="color:#800000;">deixe nos comentários</span> que eu responderei rapidamente.</div>
<div class="java">Nossa planilha é assim:</div>
<div class="java"><img class="alignnone size-full wp-image-32" title="img_planilha" src="http://jgabriellima.files.wordpress.com/2009/09/img_planilha.png?w=614" alt="img_planilha"   /></div>
<div class="java">Nesse primeiro exemplo, vou mostrar como você pode obter o<span style="color:#800000;"> nome das abas</span> da planilha.</div>
<div class="java"><pre class="brush: java;">
package br.gabriellima.jxl.exemplos;

import java.io.File;

import jxl.Sheet;

import jxl.Workbook;/***

* @author J Gabriel Lima

*/

public class ExemploJXL {

private Workbook planilha; // objeto que receberá um instancia da planilha estudada

private Sheet aba; // objeto que será a aba

private File arquivo; // arquivo .xls que será lido

public ExemploJXL() {

try {

arquivo = new File(&quot;arq.xls&quot;);

// instancia a planilha

planilha = Workbook.getWorkbook(arquivo);

//Obendo as Abas da planilha

Sheet[] abas = planilha.getSheets();

//loop para o vetor de abas

for (Sheet a : abas) {

System.out.println(a.getName());

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

new ExemploJXL();

}

}
</pre></p>
</div>
<div class="java">
<table style="height:19px;" border="0" cellspacing="0" cellpadding="3" width="14" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><code><span style="color:#3f7f5f;"> </span></code><span style="color:#7f0055;"> </span></td>
</tr>
</tbody>
</table>
</div>
<p>Esse é um exemplo simples, onde temos as seguintes estruturas:</p>
<p>- <strong><span style="color:#000000;">Workbook: </span></strong><span style="color:#000000;">de uma forma bem simples, podemos dizer que é a planilha propriamente dita</span></p>
<p><span style="color:#000000;">- <strong>Sheet: </strong>Estrutura referentes à aba da planilha</span></p>
<p>Obtemos um array de <span style="color:#800000;">Sheets </span>(abas), e através de um <em>foreach</em>, imprimimos o nome das abas usando o método <strong>getName()</strong>.</p>
<p>Agora vamos aprender a ler linhas dessa planilha.</p>
<p>Cada <span style="color:#800000;">celula da planilha</span> é representada pela <span style="color:#800000;">classe </span><strong><span style="color:#800000;">Cell</span>, </strong>logo uma linha da planilha é um conjunto dessas células, ou seja, um <span style="color:#800000;">array de células</span>, representadas por <span style="color:#800000;"><strong>Cell[]</strong></span>.</p>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.gabriellima.jxl.exemplos;</span></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">java.io.File;</span></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Cell;</span></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Sheet;</span></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Workbook;</span></p>
<p><span style="color:#3f5fbf;">/**</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></p>
<p><span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">ExemploJXL </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">Workbook planilha; </span><span style="color:#3f7f5f;">// objeto que receberÃ¡ um instancia da planilha estudada</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">Sheet aba; </span><span style="color:#3f7f5f;">// objeto que serÃ¡ a aba</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">File arquivo; </span><span style="color:#3f7f5f;">// arquivo .xls que serÃ¡ lido</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public </strong></span><span style="color:#000000;">ExemploJXL</span><span style="color:#000000;">() {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>try </strong></span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">arquivo = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">File</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;arq.xls&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// instancia a planilha</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">planilha = Workbook.getWorkbook</span><span style="color:#000000;">(</span><span style="color:#000000;">arquivo</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//Obendo as Abas da planilha</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Sheet</span><span style="color:#000000;">[] </span><span style="color:#000000;">abas = planilha.getSheets</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">aba = planilha.getSheet</span><span style="color:#000000;">(</span><span style="color:#990000;">0</span><span style="color:#000000;">)</span><span style="color:#000000;">; </span><span style="color:#3f7f5f;">// pega a primeira aba, ou seja, aba de indice 0.</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Cell</span><span style="color:#000000;">[] </span><span style="color:#000000;">linha = aba.getRow</span><span style="color:#000000;">(</span><span style="color:#990000;">0</span><span style="color:#000000;">)</span><span style="color:#000000;">; </span><span style="color:#3f7f5f;">// pega a primeira linha, ou seja, linhas de indice 0.</span></p>
<p><span style="color:#3f7f5f;">// mostra os dados da linha</span><br />
<span style="color:#7f0055;"><strong>for</strong></span><span style="color:#000000;">(</span><span style="color:#000000;">Cell c : linha</span><span style="color:#000000;">)</span><br />
<span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#000000;">c.getContents</span><span style="color:#000000;">())</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">} </span><span style="color:#7f0055;"><strong>catch </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">Exception e</span><span style="color:#000000;">) {</span><br />
<span style="color:#000000;">e.printStackTrace</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span><br />
<span style="color:#000000;">}</span><br />
<span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">ExemploJXL</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span><br />
<span style="color:#000000;">}</span></td>
</tr>
</tbody>
</table>
</div>
<p>Lembrando que, o método <span style="color:#800000;">getSheet(),</span> pode receber uma String, que é o nome da aba &#8211; <span style="color:#800000;">getSheet(&lt;String&gt;)</span>, ou um inteiro <span style="color:#800000;">getSheet(&lt;int&gt;)</span> que é o indice da planilha.</p>
<p>Como cada indice do array Cell[] é uma célula(Cell), então para obtermos o seu conteúdo, usamos o método <strong>getContents()</strong></p>
<p>Agora, para finalizarmos essa introdução à leitura de planilhas, vamos ler toda a planilha:</p>
<div class="java">
<table border="0" cellspacing="0" cellpadding="3" bgcolor="#ffffff">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><span style="color:#3f7f5f;"> </span><br />
<span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.gabriellima.jxl.exemplos;</span></code></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">java.io.File;</span><br />
<span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Cell;</span><br />
<span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Sheet;</span><br />
<span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">jxl.Workbook;</span></p>
<p><span style="color:#3f5fbf;">/**</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></p>
<p><span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">ExemploJXL </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">Workbook planilha; </span><span style="color:#3f7f5f;">// objeto que receberá um instancia da planilha estudada</span><br />
<span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">Sheet aba; </span><span style="color:#3f7f5f;">// objeto que será a aba</span><br />
<span style="color:#7f0055;"><strong>private </strong></span><span style="color:#000000;">File arquivo; </span><span style="color:#3f7f5f;">// arquivo .xls que será lido</span></p>
<p><span style="color:#7f0055;"><strong>public </strong></span><span style="color:#000000;">ExemploJXL</span><span style="color:#000000;">() {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>try </strong></span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">arquivo = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">File</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;arq.xls&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// instancia a planilha</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">planilha = Workbook.getWorkbook</span><span style="color:#000000;">(</span><span style="color:#000000;">arquivo</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//Obendo as Abas da planilha</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Sheet</span><span style="color:#000000;">[] </span><span style="color:#000000;">abas = planilha.getSheets</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">aba = planilha.getSheet</span><span style="color:#000000;">(</span><span style="color:#990000;">0</span><span style="color:#000000;">)</span><span style="color:#000000;">; </span><span style="color:#3f7f5f;">// pega a primeira aba, ou seja, aba de indice 0.</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">String</span><span style="color:#000000;">[][] </span><span style="color:#000000;">matriz = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">String</span><span style="color:#000000;">[</span><span style="color:#000000;">aba.getRows</span><span style="color:#000000;">()][</span><span style="color:#000000;">aba.getColumns</span><span style="color:#000000;">()]</span><span style="color:#000000;">;</span></p>
<p><span style="color:#3f7f5f;">//matriz.length -&gt; representa as linhas da matriz</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//matriz[0].length -&gt; pega o tamanho da linha [0], ou seja, pega o número de colunas</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Cell</span><span style="color:#000000;">[] </span><span style="color:#000000;">cel; </span><span style="color:#3f7f5f;">// instancia um array de cÃ©lulas que irá auxiliar no povoamento da matriz</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><strong>int </strong></span><span style="color:#000000;">i = </span><span style="color:#990000;">0</span><span style="color:#000000;">; i &lt; matriz.length; i++</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">cel = aba.getRow</span><span style="color:#000000;">(</span><span style="color:#000000;">i</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><code><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><strong>int </strong></span><span style="color:#000000;">j = </span><span style="color:#990000;">0</span><span style="color:#000000;">; j &lt; matriz</span><span style="color:#000000;">[</span><span style="color:#990000;">0</span><span style="color:#000000;">]</span><span style="color:#000000;">.length; j++</span><span style="color:#000000;">) {</span></code></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// pega os dados da celula cel[j] e adiciona na matriz</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">matriz</span><span style="color:#000000;">[</span><span style="color:#000000;">i</span><span style="color:#000000;">][</span><span style="color:#000000;">j</span><span style="color:#000000;">] </span><span style="color:#000000;">= cel</span><span style="color:#000000;">[</span><span style="color:#000000;">j</span><span style="color:#000000;">]</span><span style="color:#000000;">.getContents</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// imprime os dados da matriz</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><strong>int </strong></span><span style="color:#000000;">i = </span><span style="color:#990000;">0</span><span style="color:#000000;">; i &lt; matriz.length; i++</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#7f0055;"><strong>int </strong></span><span style="color:#000000;">j = </span><span style="color:#990000;">0</span><span style="color:#000000;">; j &lt; matriz</span><span style="color:#000000;">[</span><span style="color:#990000;">0</span><span style="color:#000000;">]</span><span style="color:#000000;">.length; j++</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.print</span><span style="color:#000000;">(</span><span style="color:#000000;">matriz</span><span style="color:#000000;">[</span><span style="color:#000000;">i</span><span style="color:#000000;">][</span><span style="color:#000000;">j</span><span style="color:#000000;">] </span><span style="color:#000000;">+ </span><span style="color:#2a00ff;">&#8220;\t&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">} </span><span style="color:#7f0055;"><strong>catch </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">Exception e</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">e.printStackTrace</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span><br />
<span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">ExemploJXL</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#000000;">}</span></td>
</tr>
</tbody>
</table>
</div>
<p>Concluimos que a leitura de planilhas é uma tarefa bem simples e que pode ser feita de várias formas, claro que toda essa facilidade vem da API Jxl.</p>
<p>Esse é apenas o primeiro post sobre o assunto, obrigado por ler e volte sempre.</p>
<p>No próximo vou mostrar como ler e criar arquivos PDF com Java.</p>
<p>Qualquer dúvida, coloquem nos comentários que eu responderei o mais breve possível!</p>
<p>Abraço!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=31&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2009/09/12/lendo-arquivos-excel-com-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>

		<media:content url="http://jgabriellima.files.wordpress.com/2009/09/img_planilha.png" medium="image">
			<media:title type="html">img_planilha</media:title>
		</media:content>
	</item>
		<item>
		<title>Matrizes com Java &#8211; Trasposta, inversa, multiplicação&#8230; sem complicação!</title>
		<link>http://jgabriellima.wordpress.com/2009/09/04/matrizes-com-java-trasposta-inversa-multiplicacao-sem-complicacao/</link>
		<comments>http://jgabriellima.wordpress.com/2009/09/04/matrizes-com-java-trasposta-inversa-multiplicacao-sem-complicacao/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 02:48:53 +0000</pubDate>
		<dc:creator>jgabriellima</dc:creator>
				<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://jgabriellima.wordpress.com/?p=17</guid>
		<description><![CDATA[Olá amigos,  é com muita satisfação que escrevo este post à vocês. Percebo que em várias áreas do conhecimento, o uso de matrizes (em um cenário mais complexo)  se torna um tabu rodeado de dificuldades. Muitas das soluções que encontramos, envolvem algoritmos complexos, muitos loops e um sintaxe complicada. Hoje venho mostrar uma forma, 100% [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=17&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Olá amigos,  é com muita satisfação que escrevo este post à vocês.</p>
<p>Percebo que em várias áreas do conhecimento, o<span style="color:#ff0000;"> uso de matrizes</span> (em um <span style="color:#ff0000;">cenário mais complexo</span>)  se torna um tabu rodeado de <span style="color:#ff0000;">dificuldades</span>. Muitas das <span style="color:#ff0000;">soluções</span> que encontramos, envolvem algoritmos complexos, muitos loops e um sintaxe complicada.</p>
<p>Hoje venho mostrar uma forma, <span style="color:#ff0000;">100% descomplicada,</span> de implementar matrizes com java, assim como suas operações.</p>
<p><span id="more-17"></span></p>
<p>Primeiramente, você deverá fazer o download  da API  <a title="Download JAMA" href="http://relativelayout.googlecode.com/files/Jama-1.0.2.jar" target="_blank">JAMA</a>.</p>
<p>JAMA é um pacote básico de <span style="color:#ff0000;">álgebra linear</span> para Java. Ele fornece classes  para a<span style="color:#ff0000;"> construção</span> e <span style="color:#ff0000;">manipulação</span> de matrizes. Ficou famoso por dar <span style="color:#ff0000;">suporte a problemas complexos</span> e pela facilidade de manipulação e compreensão de suas classes.</p>
<p>Nos exemplos que serão mostrados aqui, utilizei a IDE <a title="Netbeans.org" href="http://www.netbeans.org" target="_blank">NetBeans 6.5</a> , mas você poderá usar qualquer ambiente de desenvolvimento, isso ficará ao seu critério.</p>
<p>Após realizar o download da API, crie um novo projeto e adicione o <span style="color:#ff0000;">JAMA</span> em sua lista de <span style="color:#ff0000;">bibliotecas </span>da seguinte forma: clique no botão direito encima do<span style="color:#ff0000;"> projeto</span> &gt;&gt;<span style="color:#ff0000;"> propriedades</span> &gt;&gt; <span style="color:#ff0000;">bibliotecas </span>&gt;&gt; <span style="color:#ff0000;">adicionar biblioteca</span></p>
<p>Neste primeiro exemplo vou mostrar como criar e imprimir uma matriz.</p>
<div class="java">
<table style="height:533px;" border="0" cellspacing="0" cellpadding="3" width="667" bgcolor="#ffffff">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><br />
<span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.jgabriellima.jama;</span></code><span style="color:#7f0055;"><strong> </strong></span><span style="color:#7f0055;"><strong> </strong></span></p>
<p><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">Jama.Matrix;</span><span style="color:#3f5fbf;"> </span></p>
<p><span style="color:#3f5fbf;">/**</span><span style="color:#3f5fbf;"> </span><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;"> </span></p>
<p><span style="color:#3f5fbf;">* Neste exemplo vamos criar uma matriz e imprimi-la na tela</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></p>
<p><span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">Exemplo1 </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//declarando uma matriz de valores</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double</strong></span><span style="color:#000000;">[][] </span><span style="color:#000000;">valores =</span><span style="color:#000000;">{{</span><span style="color:#990000;">1</span><span style="color:#000000;">,</span><span style="color:#990000;">3</span><span style="color:#000000;">,</span><span style="color:#990000;">5</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">6</span><span style="color:#000000;">,</span><span style="color:#990000;">5</span><span style="color:#000000;">,</span><span style="color:#990000;">8</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">9</span><span style="color:#000000;">,</span><span style="color:#990000;">6</span><span style="color:#000000;">,</span><span style="color:#990000;">7</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//instancia um objeto do tipo Matrix</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// que recebe a &#8217;valores&#8217; em seu construtor</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix matriz = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">valores</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//imprime matriz</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// matriz.print(espaço entre as colunas, numero de casas decimais)</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">matriz.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#000000;">}</span></td>
</tr>
<tr>
<td style="text-align:left;">Resultado:</p>
<p style="text-align:center;">1.0    3.0    5.0<br />
6.0    5.0    8.0<br />
9.0    6.0    7.0</td>
</tr>
</tbody>
</table>
</div>
<p>Nesse exemplo, coloquei uma matriz de doubles em uma instância de <span style="color:#ff0000;">Matrix</span> e invoquei o método &#8216;print()&#8217;, que, nesse caso, recebe 2 argumentos, o primeiro é o espaçamento entre as colunas e o segundo é o número de casas decimais.</p>
<p>Agora vamos mostrar a matriz transposta, para isso usaremos o exemplo anterior da seguinte forma:</p>
<table style="height:709px;" border="0" cellspacing="0" cellpadding="3" width="663" bgcolor="#ffffff">
<tbody>
<tr>
<td align="left" valign="top"><code><br />
</code><code> <span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.jgabriellima.jama;</span></code><code> </code></p>
<p><code><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">Jama.Matrix;</span></code><code> <span style="color:#3f5fbf;"> </span></code></p>
<p><code><span style="color:#3f5fbf;">/**</span></code><code> </code><code><span style="color:#3f5fbf;"> </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* Cria matriz e faz sua transposta</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></code></p>
<p><code> <span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">Exemplo2 </span><span style="color:#000000;">{</span></code></p>
<p><code> </code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//declarando uma matriz de valores</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double</strong></span><span style="color:#000000;">[][] </span><span style="color:#000000;">valores = </span><span style="color:#000000;">{{</span><span style="color:#990000;">1</span><span style="color:#000000;">, </span><span style="color:#990000;">3</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">8</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">9</span><span style="color:#000000;">, </span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">7</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//instancia um objeto do tipo Matrix</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// que recebe a 'valores' em seu construtor</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix matriz = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">valores</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">"Matriz Original"</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//imprime matriz original</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">matriz.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></code></p>
<p><code> </code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//faz a transposta da matriz</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">matriz = matriz.transpose</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></code></p>
<p><code> </code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">"Matriz Transposta"</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//imprime matriz transposta</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">matriz.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, 1</span><span style="color:#990000;"> </span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></code></p>
<p><code> <span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></code></p>
<p><code> <span style="color:#000000;">}</span></code></td>
</tr>
<tr>
<td style="text-align:left;">Resultado:Matriz Original1.0    3.0    5.0<br />
6.0    5.0    8.0<br />
9.0    6.0    7.0</p>
<p>Matriz Transposta1.0    6.0    9.0<br />
3.0    5.0    6.0<br />
5.0    8.0    7.0</td>
</tr>
</tbody>
</table>
<p>Usando o método <span style="color:#ff0000;">&#8216;transpose()</span>&#8216; podemos obter a matriz transporta facilmente;</p>
<p>Agora vamos trabalhar com algumas operações entre matrizes:</p>
<p>Primeiramente com a multiplicação:</p>
<div class="java">
<table style="height:1089px;" border="0" cellspacing="0" cellpadding="3" width="678" bgcolor="#ffffff">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><br />
<span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.jgabriellima.jama;</span></code><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">Jama.Matrix;</span><span style="color:#3f5fbf;">/**</span><br />
<span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*</span><br />
<span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span><br />
<span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></p>
<p><span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">Exemplo3 </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">a</span><span style="color:#000000;">[][] </span><span style="color:#000000;">= </span><span style="color:#000000;">{{</span><span style="color:#990000;">1</span><span style="color:#000000;">, </span><span style="color:#990000;">3</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">8</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">9</span><span style="color:#000000;">, </span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">7</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">b</span><span style="color:#000000;">[][] </span><span style="color:#000000;">= </span><span style="color:#000000;">{{</span><span style="color:#990000;">9</span><span style="color:#000000;">, </span><span style="color:#990000;">4</span><span style="color:#000000;">, </span><span style="color:#990000;">4</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">2</span><span style="color:#000000;">, </span><span style="color:#990000;">0</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">4</span><span style="color:#000000;">, </span><span style="color:#990000;">2</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix mA = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">a</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix mB = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">b</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;MATRIZ A&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">mA.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;MATRIZ B&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">mB.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// faz o produto das matrizes</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>int </strong></span><span style="color:#000000;">row, column, i;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">aux;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">c</span><span style="color:#000000;">[][] </span><span style="color:#000000;">= </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#7f0055;"><strong>double</strong></span><span style="color:#000000;">[</span><span style="color:#000000;">a.length</span><span style="color:#000000;">][</span><span style="color:#000000;">b</span><span style="color:#000000;">[</span><span style="color:#990000;">0</span><span style="color:#000000;">]</span><span style="color:#000000;">.length</span><span style="color:#000000;">]</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">row = </span><span style="color:#990000;">0</span><span style="color:#000000;">; row &lt; c.length; row++</span><span style="color:#000000;">) </span><span style="color:#3f7f5f;">// multiplicação das matrizes</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">column = </span><span style="color:#990000;">0</span><span style="color:#000000;">; column &lt; c</span><span style="color:#000000;">[</span><span style="color:#000000;">row</span><span style="color:#000000;">]</span><span style="color:#000000;">.length; column++</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">aux = </span><span style="color:#990000;">0</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>for </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">i = </span><span style="color:#990000;">0</span><span style="color:#000000;">; i &lt; a</span><span style="color:#000000;">[</span><span style="color:#000000;">row</span><span style="color:#000000;">]</span><span style="color:#000000;">.length; i++</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>try </strong></span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">aux = aux + a</span><span style="color:#000000;">[</span><span style="color:#000000;">row</span><span style="color:#000000;">][</span><span style="color:#000000;">i</span><span style="color:#000000;">] </span><span style="color:#000000;">* b</span><span style="color:#000000;">[</span><span style="color:#000000;">i</span><span style="color:#000000;">][</span><span style="color:#000000;">column</span><span style="color:#000000;">]</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">} </span><span style="color:#7f0055;"><strong>catch </strong></span><span style="color:#000000;">(</span><span style="color:#000000;">Exception e</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">e.printStackTrace</span><span style="color:#000000;">()</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">c</span><span style="color:#000000;">[</span><span style="color:#000000;">row</span><span style="color:#000000;">][</span><span style="color:#000000;">column</span><span style="color:#000000;">] </span><span style="color:#000000;">= aux;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// define matriz produto</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix matrizProduto = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">c</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">System.out.println</span><span style="color:#000000;">(</span><span style="color:#2a00ff;">&#8220;Produto da matriz A com a matriz B&#8221;</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">matrizProduto.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#000000;">}</span></td>
</tr>
<tr>
<td align="right"></td>
</tr>
</tbody>
</table>
</div>
<p>Para fazer a multiplicação, foi feito um loop bem simples e no final foi convertido em um objeto Matrix.</p>
<p>Por fim, vamos somar duas matrizes:</p>
<div class="java">
<table style="height:697px;" border="0" cellspacing="0" cellpadding="3" width="678" bgcolor="#ffffff">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><br />
<span style="color:#7f0055;"><strong>package </strong></span><span style="color:#000000;">br.jgabriellima.jama;</span></code><span style="color:#7f0055;"><strong>import </strong></span><span style="color:#000000;">Jama.Matrix;</span><span style="color:#3f5fbf;">/**</span><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">* </span><span style="color:#7f9fbf;">@author </span><span style="color:#3f5fbf;">gabriel</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f5fbf;">*/</span></p>
<p><span style="color:#7f0055;"><strong>public class </strong></span><span style="color:#000000;">Exemplo4 </span><span style="color:#000000;">{</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>public static </strong></span><span style="color:#7f0055;"><strong>void </strong></span><span style="color:#000000;">main</span><span style="color:#000000;">(</span><span style="color:#000000;">String</span><span style="color:#000000;">[] </span><span style="color:#000000;">args</span><span style="color:#000000;">) {</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">a</span><span style="color:#000000;">[][] </span><span style="color:#000000;">= </span><span style="color:#000000;">{{</span><span style="color:#990000;">1</span><span style="color:#000000;">, </span><span style="color:#990000;">3</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">8</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">9</span><span style="color:#000000;">, </span><span style="color:#990000;">6</span><span style="color:#000000;">, </span><span style="color:#990000;">7</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#7f0055;"><strong>double </strong></span><span style="color:#000000;">b</span><span style="color:#000000;">[][] </span><span style="color:#000000;">= </span><span style="color:#000000;">{{</span><span style="color:#990000;">9</span><span style="color:#000000;">, </span><span style="color:#990000;">4</span><span style="color:#000000;">, </span><span style="color:#990000;">4</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">2</span><span style="color:#000000;">, </span><span style="color:#990000;">0</span><span style="color:#000000;">}</span><span style="color:#000000;">,</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">{</span><span style="color:#990000;">4</span><span style="color:#000000;">, </span><span style="color:#990000;">2</span><span style="color:#000000;">, </span><span style="color:#990000;">1</span><span style="color:#000000;">}}</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix mA = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">a</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">Matrix mB = </span><span style="color:#7f0055;"><strong>new </strong></span><span style="color:#000000;">Matrix</span><span style="color:#000000;">(</span><span style="color:#000000;">b</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// imprime a matriz mA</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">mA.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">0</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">// soma a matriz A com a matriz B</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">mA = mA.plus</span><span style="color:#000000;">(</span><span style="color:#000000;">mB</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#3f7f5f;">//imprime matriz A somada com B</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">mA.print</span><span style="color:#000000;">(</span><span style="color:#990000;">5</span><span style="color:#000000;">, </span><span style="color:#990000;">0</span><span style="color:#000000;">)</span><span style="color:#000000;">;</span></p>
<p><span style="color:#ffffff;"> </span><span style="color:#000000;">}</span></p>
<p><span style="color:#000000;">}</span></td>
</tr>
<tr>
<td style="text-align:left;">Resultado<br />
1      3      5<br />
6      5      8<br />
9      6      7</p>
<p>10      7      9<br />
11      7      8<br />
13      8      8</td>
</tr>
</tbody>
</table>
</div>
<p><strong>Conclusão</strong></p>
<p>Com o auxílio de bibliotecas como o JAMA podemos otimizar os trabalhos com matrizes, tornando o código mais completo, mais robusto e principalmente, com menor possibilidade de erros.</p>
<p>Espero que tenham gostado, e que façam ótimo proveito desse conhecimento. Divulguem o blog!!</p>
<p>Qualquer dúvida é só entrar em contato através dos comentários, eu terei grande satisfação em ajudar.</p>
<p>No próximo post, explicarei como gerar arquivos no formato .pdf com java utilizando a biblioteca iText.</p>
<p>Abraço!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgabriellima.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgabriellima.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgabriellima.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jgabriellima.wordpress.com&amp;blog=9242969&amp;post=17&amp;subd=jgabriellima&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jgabriellima.wordpress.com/2009/09/04/matrizes-com-java-trasposta-inversa-multiplicacao-sem-complicacao/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1a6b51a672b0fef9f8dbf8614d8cae55?s=96&#38;d=identicon&#38;r=X" medium="image">
			<media:title type="html">jgabriellima</media:title>
		</media:content>
	</item>
	</channel>
</rss>
