<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PauloMotta.pro &#187; ARQUITETURA</title>
	<atom:link href="http://www.paulomotta.pro.br/tag/arquitetura/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulomotta.pro.br</link>
	<description>&#34;Qualquer tecnologia suficientemente avançada é indistinguível da mágica&#34; - Arthur C. Clarke</description>
	<lastBuildDate>Tue, 10 Jan 2012 03:00:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Diferença nos tempos de execução</title>
		<link>http://www.paulomotta.pro.br/2011/06/17/diferenca-nos-tempos-de-execucao/</link>
		<comments>http://www.paulomotta.pro.br/2011/06/17/diferenca-nos-tempos-de-execucao/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 12:06:20 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Ciências]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[PARALELISMO]]></category>
		<category><![CDATA[Pesquisa]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1413</guid>
		<description><![CDATA[Essa coisa de estudar paralelismo é legal porque faz a gente testar várias coisas em diferentes plataformas em busca de desempenho. Você sabia que o simples fato de ficar convertendo tipos de dados pode ocasionar uma perda de desempenho que dobra o tempo de execução da sua aplicação ? Se você fizer um programa em [...]]]></description>
			<content:encoded><![CDATA[<p>Essa coisa de estudar paralelismo é legal porque faz a gente testar várias coisas em diferentes plataformas em busca de desempenho. Você sabia que o simples fato de ficar convertendo tipos de dados pode ocasionar uma perda de desempenho que dobra o tempo de execução da sua aplicação ?</p>
<p>Se você fizer um programa em C que precise trabalhar com inteiros muito grandes vai usar long long int, que é um inteiro do tamanho de um double (você pode ver <a href="http://en.wikipedia.org/wiki/C_variable_types_and_declarations" target="_blank">aqui na wikipedia</a>). O resultado disso pode ser devastador e pode ser que valha a pena fazer tudo direto em double. É claro que se você optar por usar somente double terá que tomar cuidado com algumas operações matemáticas porque vão existir casas decimais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/06/17/diferenca-nos-tempos-de-execucao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testes de Usabilidade, Negligência na Análise e Testes Unitários Corporativos</title>
		<link>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/</link>
		<comments>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 11:00:14 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Análise]]></category>
		<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[Testes]]></category>
		<category><![CDATA[ANÁLISE]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[ICEFaces]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[SISTEMA]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=1145</guid>
		<description><![CDATA[Eu confesso que esse conceito, Teste de Usabilidade (o artigo pode ser lido aqui), me surpreendeu e acho que merece uma atenção de nós que desenvolvemos software. Já temos muita dificuldade de testar o sistema para garantir que ele faz o que deve fazer do jeito que deve ser feito, que as integrações estão todas [...]]]></description>
			<content:encoded><![CDATA[<p>Eu confesso que esse conceito, Teste de Usabilidade (o artigo pode ser lido <a href="http://queue.acm.org/detail.cfm?id=1925091" target="_blank">aqui</a>), me surpreendeu e acho que merece uma atenção de nós que desenvolvemos software. Já temos muita dificuldade de testar o sistema para garantir que ele faz o que deve fazer do jeito que deve ser feito, que as integrações estão todas corretas e que as regras de negócio estão aderentes à análise (supondo que esta última esteja correta), imagine agora além disso tudo testar como está o fluxo de experiência do usuário no uso do software?</p>
<p>Mas é exatamente disso que os testes de usabilidade tratam, e no final das contas, temos mais é que testar isso tudo mesmo! Eu acho que quanto mais fácil se tornou desenvolver os sistemas, mais preguiçosos ficamos. Explico. Fácil de desenvolver porque hoje temos ferramentas de geração de código (que não existiam até bem pouco tempo) baseadas em padrões de projeto (que não estavam documentados até bem pouco tempo) que nos permitem simplesmente esquecer que certas partes precisam ser feitas. Muitas vezes tudo que precisamos fazer é introduzir pequenos detalhes específicos no código gerado, mas na maioria dos casos nem isso! Ficamos preguiçosos porque os sistemas cresceram, são agora corporativos, é muito menor a demanda de pequenas empresas por seus próprios softwares, com isso o analista que sai da faculdade demora a ter, se é que vai ter, contato direto com o cliente. Os analistas passam a ter um ponto focal centralizado a quem se reportam e acho que isso mascara a responsabilidade levando a uma negligência involuntária.</p>
<p>Antes que eu receba vários ataques de analistas raivosos, não estou aqui falando que todo analista de sistemas (e neste caso estou considerando a dualidade analista/programador) sejam negligentes. Embora eu já tenha trabalhado com muitos que eram realmente negligentes, estou falando aqui de uma negligência involuntária, é mais uma coisa de não fazer porque a percepção é de que o software é para uso próprio e poderemos conversar com o usuário e explicar.</p>
<p>Mesmo que o software seja para uso da própria empresa deve ser desenvolvido com todo o cuidado. Você pode ler mais sobre as minhas impressões sobre análise em:</p>
<ul>
<li><a href="http://www.paulomotta.pro.br/2009/08/01/como-se-faz-analise/" target="_blank">Como se faz análise</a></li>
<li><a href="http://www.paulomotta.pro.br/2009/08/04/antes-de-resolver-defina-o-problema/" target="_blank">Antes de resolver, defina o problema</a></li>
<li><a href="http://www.paulomotta.pro.br/2009/08/12/artesanato-de-software/" target="_blank">Artesanato de Software</a></li>
</ul>
<p>Mas agora de volta aos testes de usabilidade. Um problema que temos com os sistemas corporativos é que são muito difíceis de testar pelo alto grau de dependência entre as partes, dessa forma, os testes unitários são quase testes de integração. Uma alternativa é fazer os testes unitários das camadas mais básicas de forma a garantir que estas estão funcionando de forma que os testes das camadas superiores possam se basear nessas camadas, mas se fizermos isso quebramos a possibilidade de paralelizar nossa equipe já que não haverão módulos básicos suficientes para todos. O que acaba ocorrendo é que as pessoas codificam antes de criar seus testes (acredite o Test Driven Development funciona!) e acabam por nunca mais fazer os testes.</p>
<p>Além disso os sistemas corporativos têm uma tendência forte a serem baseados em arquitetura Web ou SOA precisando estar instalados em um servidor de aplicação para executar, o problema disso é que a fórmula:</p>
<p>(a implantação do sistema em um servidor + iniciar o servidor de aplicação) * (obter referências aos componentes a serem testados + executar os testes)</p>
<p>Não é facilmente incluída nos scripts de testes unitários. O que estou pensando em adotar é um esquema de testes semiautomatizado, ou seja, a parte de iniciar o servidor e implantar a aplicação é feita manualmente, a parte de obter referências e executar testes é feita com JUnit.  Até existe um <em>framework</em> JSFUnit, mas infelizmente ele tem uns problemas com o ICEfaces, eu até achei o ponto onde é o problema (depois de baixar o código fonte do JSFUnit e do ICEFaces dos repositórios e gastar umas 4 horas nisso direto), mas precisa de uma modificação no código que ainda não tive tempo de implementar e testar. Embora esta seja uma parte importante, ainda assim não testaria todo o sistema, porque não resolveria a parte dos EJBs e depois de testar com EJBUnit (e mais alguns vários) chegamos a conclusão que não existe um suporte efetivo para essa camada.</p>
<p>Um pouco dessa dificuldade vem do fato que os <em>frameworks</em> *Unit são ferramentas independentes, se a Oracle/Sun adotassem o *Unit como padrão da implementação do Java isso seria incrível para os desenvolvedores, isto porque toda vez que saísse uma nova versão da plataforma e suas especificações já teríamos uma ferramenta de testes para usar.</p>
<p>Estou realmente achando que essa coisa de testes unitários semiautomáticos pode dar certo para a camada EJB.</p>
<p>Uma outra alternativa mais radical (e que na verdade eu gosto muito) é fazer o sistema todo isolado de tecnologias específicas tal como EJB, ou seja, as regras de negócio ficam em classes puramente Java, também conhecidos como POJO &#8211; Plain Old Java Objects &#8211; algo que em português seria (livremente) traduzido para Bom e Velho Objeto Java. Isto funciona porque os POJOs podem ser facilmente testados com JUnit básico, e se você usar o EJB apenas para envolver os POJOs então você garante que as regras de negócio estão sendo testadas o que já é um grande alívio. Mas porque então não tem muita gente fazendo isso?</p>
<p>Para separar as regras de negócio você terá mais uma camada, mais um nível de indireção e consequentemente mais classes para gerenciar. Acredito que esta seja a maior barreira para se adotar essa prática, mas eu vou criar um sistema de testes (digo sistema, porque para testar esse tipo de coisa não adianta criar uma classezinha de teste) para avaliar o impacto de se criar essa camada extra.</p>
<p>Outro fator é que muitas vezes as regras de negócio têm dependências de dados que precisam ser supridas, se você conseguir prever todas as necessidades de acesso a banco de dados por exemplo e executar isso antes de chamar o método fica mais fácil de tratar, mas as vezes precisamos fazer uma busca em banco no meio de um processamento de regra de negócio. Aí começa o dilema, porque se você usa JPA com EJB, então terá uma dependência do servidor de aplicação para resolver isso e quebramos a automatização do teste de novo. É claro que você pode usar <em>Mock Objects</em>, uma técnica de fornecer objetos que fingem ser os que realmente precisamos para efeitos de teste, mas ainda assim você terá uma proliferação de classes muito grande.</p>
<p>Assim que eu tiver resultados vou colocar aqui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2011/01/17/testes-de-usabilidade-negligencia-na-analise-e-testes-unitarios-corporativos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>E o quad core prevaleceu, mas nem tanto&#8230;</title>
		<link>http://www.paulomotta.pro.br/2010/08/06/e-o-quad-core-prevaleceu-mas-nem-tanto/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/06/e-o-quad-core-prevaleceu-mas-nem-tanto/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 14:29:13 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[PARALELISMO]]></category>
		<category><![CDATA[Processador]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=726</guid>
		<description><![CDATA[Pois é, continuando essa série de estudos relacionados a desempenho (real) da máquina, coloquei uma placa de vídeo GeForce 240GT com 1GB DDR3 da EVGA (tradução: médio sinistro) e pude constatar que o problema não estava relacionado à memória de vídeo compartilhada como pensei. Resolvi então baixar um programa de benchmark, mas só achei um [...]]]></description>
			<content:encoded><![CDATA[<p>Pois é, continuando essa série de estudos relacionados a desempenho (real) da máquina, coloquei uma placa de vídeo <a href="http://www.nvidia.com/object/product_geforce_gt_240_us.html" target="_blank">GeForce 240GT</a> com 1GB DDR3 da EVGA (tradução: médio sinistro) e pude constatar que o problema não estava relacionado à memória de vídeo compartilhada como pensei.</p>
<p>Resolvi então baixar um programa de benchmark, mas só achei um bem velho (que usa como referência o Pentium 90, ou seja, muito velho) chamado <a href="http://www.tux.org/~mayer/linux/bmark.html" target="_blank">nbench</a>. Tentei rodar o programa, mas na versão 32 bits do linux não funcionou legal, só que como o autor explica esse não é um benchmark para máquinas multi-core, resolvi que vou adaptar (mas devagar né?) o programa (que já está pronto) para uma versão paralela a fim de testar máquinas multi-core.</p>
<p>De qualquer forma não serviu para o que eu queria, então resolvi fazer o mais básico possível, um simples programa de multiplicação de matrizes, baseado em pthreads usando memória compartilhada e rodar ele nas 3 máquinas a fim de chegar a alguma conclusão. Aí sim fez diferença! Para começar já abusei do gcc colocando os parâmetros -O3 e -march=amdfam10, que segundo o guia de referência da própria AMD são opções de otimização agressivas, com essas opções os resultados foram impressionantes! Depois eu coloco os números, mas o Phenom ficou 4x mais rápido que o Turion.</p>
<p>Agora quando utilizo a máquina virtual Lua com paralelismo, o programa no Phenom fica 2x mais lento que no Turion, ainda não consegui desvendar o mistério, acredito que tem a ver com erros de cache, troca de contexto e com a impossibilidade de aplicar as mesmas otimizações, o que me incomoda é que eu esperava pelo menos que ficasse igual, mas não pior.</p>
<p>De volta a prancheta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/06/e-o-quad-core-prevaleceu-mas-nem-tanto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mapeamento da Via Láctea</title>
		<link>http://www.paulomotta.pro.br/2010/07/08/mapeamento-da-via-lactea/</link>
		<comments>http://www.paulomotta.pro.br/2010/07/08/mapeamento-da-via-lactea/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 12:00:10 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[DISTRIBUIÇÃO]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PARALELISMO]]></category>
		<category><![CDATA[Pesquisa]]></category>
		<category><![CDATA[PLAYSTATION3]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=626</guid>
		<description><![CDATA[Usando, BOINC, a mesma plataforma do projeto SETI@home (dedicado a procurar por vida extra terrestre), o projeto MilkyWay@home está aproveitando a colaboração de usuários do mundo todo para calcular de forma distribuída para mapear a forma de nossa galáxia. Atualmente essa plataforma superou, em poder de computação o segundo supercomputador mais rápido do mundo (atualmente [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://milkyway.cs.rpi.edu/milkyway/"><img class="aligncenter" title="milkyway@home" src="http://milkyway.cs.rpi.edu/milkyway/mw.png" alt="" width="478" height="121" /></a></p>
<p>Usando, <a href="http://boinc.berkeley.edu/" target="_blank">BOINC</a>, a mesma plataforma do projeto <a href="http://setiathome.berkeley.edu/" target="_blank">SETI@home</a> (dedicado a procurar por vida extra terrestre), o projeto <a href="http://milkyway.cs.rpi.edu/milkyway/" target="_blank">MilkyWay@home</a> está aproveitando a colaboração de usuários do mundo todo para calcular de forma distribuída para mapear a forma de nossa galáxia. Atualmente essa plataforma superou, em poder de computação o segundo supercomputador mais rápido do mundo (atualmente claro, <a href="http://www.top500.org/" target="_blank">porque essa lista sempre muda</a>, nota mental: &#8220;eu quero um supercomputador&#8221;) atingindo um petaflop (peta = 1.000 giga = 1.000.000 mega = 1.000.000.000 kilo = 1.000.000.000.000 operações de ponto flutante por segundo.)</p>
<p>Em paralelismo usamos essa conta de operações em ponto flutuante por segundo porque são as operações mais pesadas para um computador executar E são muito utilizadas em sistemas de computação científicos.</p>
<p>Na página do projeto BOINC podemos achar uma <a href="http://boinc.berkeley.edu/projects.php" target="_blank">lista de projetos</a> que usam essa plataforma variando de aplicações em astrologia, bioinformática até a jogos e aplicações matemáticas (eu já disse que eu quero um supercomputador?)</p>
<p>O interessante é que qualquer pessoa pode participar, basta instalar um programa em sua máquina que funciona de forma semelhante a um screensaver, ou seja, quando você deixa usa máquina parada (sim, quando você vai para o banho e deixa a máquina ligada baixando coisas) o programa entra em ação, recebe dados do servidor central e começa a usar o poder de processamento (calma, não vai atrapalhar seu download) para calcular alguma coisa útil para a humanidade.</p>
<p>Um projeto bem legal, mas que não consegui determinar se usa a plataforma BOINC é o <a href="http://folding.stanford.edu/" target="_blank">folding@home</a>, inclusive com uma versão para PS3 que pode ser baixada diretamente via PS3Network, e roda no PS3 como se fosse um jogo. Isso foi uma coisa que me interessou porque gostaria de disponibilizar minha plataforma de doutorado no PS3 dessa forma, mas quando entrei em contato com o pessoal de Stanford eles me disseram que foi um desenvolvimento em conjunto com a Sony, ou seja, eu não conseguiria fazer isso sozinho. Bom seria necessário um kit de desenvolvimento específico para o sistema do PS3 (GameOS) e é exatamente essa ferramenta que não está disponível, essa ferramenta permite compilar um programa para rodar no PS3 como se fosse um jogo, afinal jogos são programas de computador também <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/07/08/mapeamento-da-via-lactea/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ah! O COBOL</title>
		<link>http://www.paulomotta.pro.br/2010/06/30/ah-o-cobol/</link>
		<comments>http://www.paulomotta.pro.br/2010/06/30/ah-o-cobol/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 14:09:14 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[DISTRIBUIÇÃO]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Integração]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[SISTEMA]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=612</guid>
		<description><![CDATA[Essa semana um aluno me perguntou por email se eu conhecia algum editor para trabalhar com COBOL, não lembrei de imediato, mas depois de um tempo me veio a mente um evento que participei da empresa Micro Focus (de quem não estou ganhando nada para falar aqui&#8230;) apresentando um produto que permitia integrar programas COBOL [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana um aluno me perguntou por email se eu conhecia algum editor para trabalhar com COBOL, não lembrei de imediato, mas depois de um tempo me veio a mente um evento que participei da empresa <a href="http://www.microfocus.com" target="_blank">Micro Focus</a> (de quem não estou ganhando nada para falar aqui&#8230;) apresentando um <a href="http://www.microfocus.com/products/micro-focus-developer/index.aspx" target="_blank">produto</a> que permitia integrar programas COBOL com aplicações Java e .Net, inclusive rodar o programa em baixa plataforma.</p>
<p>Eu nunca usei o produto, até porque nem tenho programas em COBOL, mas é uma alternativa interessante para quem precisa manter aqueles programas do legado e quer mais facilidades. Lembro que nos meus tempos de EDS havia um grande buzz em torno do conceito de Application Modernization (modernização de aplicações) foram inclusive considerados produtos que permitiam avalizar o fluxo de chamadas entre módulos de programas COBOL para poder identificar o que eram regras de negócio e o que precisava realmente ser abandonado.</p>
<p>O fato que ninguém quer assumir é que não dá para jogar fora programas com 30 anos de execução, que você SABE que funcionam pelo simples fato de estarem rodando há tanto tempo. Tentar reescrever muitas vezes é a receita para o desastre porque você terá que revalidar as novas aplicações e garantir que está tudo certo, mas não temos hoje nenhum método ou ferramenta de teste que garanta 100% de cobertura de testes, mesmo que tal ferramenta existisse, seria impossível garantir que todos os casos de teste foram pensados. Ao longo dos 30 anos de existência aqueles programas COBOL foram testados, corrigidos, modificados e isso é uma coisa que só com o tempo para garantir a estabilidade.</p>
<p>A própria IBM investiu em um caminho contraditório, disponibilizou para mainframe (plataforma Z/OS) o Websphere e o Java de forma que você pode dentro do seu programa COBOL (que funciona há 30 anos) fazer uma chamada para um novo componente EJB feito em Java, pode também encapsular seu módulo COBOL em um EJB e expor para o mundo via WebService. Aí você pensa &#8220;duvido! isso não funciona!&#8221; mas nesse caso eu posso dizer que funciona porque trabalhei em um projeto assim na EDS, aliás meu último projeto por lá. O único inconveniente (não sei como está agora) é que a própria IBM não tinha muita experiência nesse tipo de integração então algumas dúvidas ficavam muito perdidas. Uma das coisas que foi legal de descobrir futucando manuais,  experimentando e lendo código fonte de outras plataformas é que essa integração (do Enterprise COBOL 4.3 ou superior) com o Java é feita via JNI (Java Native Inteface) então quando você quer referenciar no COBOL uma classe Java precisa fazer isso usando &#8220;/&#8221; como separador de pacotes ao invés de &#8220;.&#8221; para ficar mais claro:</p>
<blockquote><p>java/lang/String ao invés de java.lang.String</p></blockquote>
<p>Mas fora isso funcionava bem direitinho.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/06/30/ah-o-cobol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

