• Nenhum resultado encontrado

Construindo Agentes Inteligentes com o JADE e Eclipse Utilizando o Eclipse para construir Agentes Inteligentes em JADE

N/A
N/A
Protected

Academic year: 2021

Share "Construindo Agentes Inteligentes com o JADE e Eclipse Utilizando o Eclipse para construir Agentes Inteligentes em JADE"

Copied!
6
0
0

Texto

(1)

Ricardo dos Santos Câmara (rscamara@gmail.com)

é mestrando em Informática pela Universidade Federal do Amazonas – UFAM (http://www. ufam.edu.br/). É professor do curso de Informática da Fundação Centro de Análise, Pesquisa e Inovação Tecnológica – FUCAPI (http://www.fucapi.br/) e analista de Sistemas do Tribunal de Justiça do Amazonas – TJAM (http://www.tjam.jus.br/).

Ricardo Maia (ricardo.jmm@usp.br)

é mestrando em Engenharia Elétrica, área de concentração de Sistemas Digitais, pela Escola Politécnica da Universidade de São Paulo – EPUSP (http://www2.pcs.usp.br/). É professor do curso de Informática da Fundação Centro de Análise, Pesquisa e Inovação Tecnológica – FUCAPI (http://www.fucapi.br/) e analista de Sistemas do Tribunal Regional do Trabalho da 11ª Região – TRT11 (http://www.trt11.jus.br/).

José Francisco de Magalhães Netto (jnetto@dcc.ufam.edu.br)

é doutor em Engenharia Elétrica pela Universidade Federal do Espírito Santo e professor adjunto do Departamento de Ciência da Computação da Universidade Federal do Amazonas (http://www.ufam.edu.br/).

Construindo Agentes Inteligentes

com o JADE e Eclipse

Utilizando o Eclipse para construir

Agentes Inteligentes em JADE

(2)

A

mbientes virtuais são utilizados pelas mais diversas áreas: edu-cação, entretenimento, social, entre outras. Um ambiente virtual de cooperação permite a integração de múltiplas ferramentas, amplia o espaço físico e, principalmente, permite interações sociais (NETTO 2004). Uma das utilidades na programação de agentes é dotar ambientes vir-tuais de convivência com agentes inteligentes, tornando-os mais interativos e atraentes. Este artigo aborda as questões teóricas e práticas da arquitetura de Sistemas Multiagente, uma das subáreas da Inteligência Artificial. Pode-se definir esta arquitetura como sistemas distribuídos nos quais todos os elementos possuem características de Inteligência Artificial, com capacidade de cooperação, coordenação e negociação, sendo capazes, desta forma, de resolver problemas distribuídos (WOOLDRIDGE 2002).

Existem diversas definições para agentes, Russell e Norvig (1995) caracteri-zam como entidades que podem ser vistas como percebendo seu ambiente através de sensores e agindo por meio de atuadores. Imagine veículos de res-gate como barcos e helicópteros não tripulados, percebendo os obstáculos através de sensores e tomando decisões baseados em inteligência artificial (atuadores). Estes podem ser citados como exemplos de agentes. Cenários mais práticos e completos são descritos ao longo do artigo.

Um dos problemas práticos encontrados é a dificuldade de se programar Sistemas Multiagente. Dentre todas as dificuldades, ressalta-se que o uso do paradigma de Sistemas Multiagente ainda é influenciado pelo paradigma de Orientação a Objetos, havendo problemas em tratar o aprendizado do agente, da fase de design até a implementação (NETTO 2006). Na fase de desenvolvimento de agentes, nota-se a falta de ambientes adequados de programação. Visando contornar esta dificuldade, este trabalho propõe a in-tegração do Eclipse, uma das ferramentas de programação mais conhecidas e utilizadas pelos desenvolvedores Java, com o JADE, um framework para a construção de agentes inteligentes.

É válido ressaltar que o objetivo específico deste artigo não é ensinar a programação de agentes em JADE, a proposta tem foco em mostrar como configurar um ambiente visual para desempenhar esta tarefa.

Agentes e Sistemas Multiagente

Onde utilizar agentes?

Um agente é uma entidade autônoma, capaz de tomar decisões sem a inter-ferência de um sistema ou de seres humanos. Os agentes devem possuir a ca-pacidade de interagir com o ambiente e, em certos casos, com outros agentes,

  'PVOEBUJPO GPS *OUFMMJHFOU 1IZTJDBM "HFOUT 0SHBOJ[BÎÍP QBESPOJ[BEPSB EB sociedade de computação IEEE que promove tecnologia baseada em agente e a interoperabi-MJEBEFEFTFVTQBESÜFTDPNPVUSBTUFDOPMPHJBToIUUQXXXmQBPSH

Conforme citado no tópico Agentes e Sistemas Multiagente, agentes são pro-gramas com algumas características que os diferenciam dos propro-gramas clássi-cos, como autonomia, capacidade de comunicação, reatividade, proatividade, colaboração, competição e busca de metas.

Algumas aplicações úteis e comuns da utilização de agentes podem ser obser-vadas em ambientes virtuais. Por exemplo, imagine um ambiente virtual de aprendizagem composto por alunos, professores e mediadores. Se for utilizado um agente de software para cada ser humano que compõe este ambiente, os agentes poderiam assumir algumas tarefas na ausência de pessoas, de certa forma, representando-as em alguns casos. Por exemplo, os agentes poderiam gerenciar os compromissos dos usuários e, caso houvesse necessidade de agendar uma reunião, estes poderiam marcá-la num dia e horário vago, uma vez que conheceriam a disponibilidade do agente humano que estariam re-presentando. Ainda explorando o exemplo do agendamento, o agente comu-nicaria o usuário do ambiente que agendou uma reunião por ele, solicitando o aceite ou não da ação. Observe que algumas características de agentes são utilizadas neste exemplo, como autonomia, comunicação, proatividade, entre outras.

interagindo e cooperando ou, até mesmo, competindo entre si. Para explorar-mos alguns dos conceitos envolvidos, vejaexplorar-mos um exemplo clássico de aplica-ção. Imagine um agente com capacidade de cotar preços na WEB, um serviço semelhante ao oferecido por sites como Buscapé (http://www.buscape.com. br/) ou Bondfaro (http://www.bondfaro.com.br/). Pode-se delegar a tarefa de cotação a agentes de software que, ao serem solicitados, por outro agente ou por um humano, sejam capazes de efetuar cotações de determinados itens e retornar os valores para o solicitante. Autonomia, cooperação, interação e troca de mensagens são algumas das características de agentes presentes no exemplo citado. Incrementando as funcionalidades da aplicação, os agentes podem possuir capacidade de aprendizado, mapeando o perfil dos usuários de um determinado site e, mesmo sem ser solicitado, oferecer produtos mais procurados pelo usuário, por exemplo.

A computação se destaca como uma área que promove diversos tipos de integração. Chats, fóruns e ambientes virtuais, como os de redes sociais e educação, são cada vez mais utilizados. Aplicando-se técnicas de Inteligência Artificial, mais especificamente na área de Sistemas Multiagente, pode-se agregar funcionalidades extras a estes ambientes. O JADE – Java Agent DEvelopment Framework – é um framework composto por classes escritas em Java. Dentre algumas ferramentas que podem ser utilizadas para o desenvolvimento de agentes, como APRIL (Fujitsu, USA), Comtec Agent

Plataform (Japão) e FIPA-OS (Nortel Networks), todas em código aberto, JADE (CSELT) possui a maior base de usuários nas áreas acadêmica e comercial, tem sido atualizada com constância para se conformar

aos padrões FIPA1 que surgem e é considerada

mais fácil de aprender e de usar, em comparação com o FIPA-OS – FIPA-OS seria outra ferramenta, dentre as mencionadas, passível de uso. Este artigo mostra como utilizar o Eclipse integrado ao JADE para desenvolver agentes inteligentes. Os principais conceitos teóricos e práticos serão abordados.

(3)

Outra utilidade que provavelmente será cada vez mais explorada é a utilização de agentes embarcados. Imagine agora que seu agente, o qual chamaremos de assistente neste cenário fictício, poderá acompanhá-lo, embarcado no seu telefone celular ou num PDA. Isso abriria um leque de opções para a indústria de marketing. Por exemplo, ao entrar num shopping, seu assistente poderia se comunicar com outros informando seus gostos pessoais e o que está procurando comprar, ele poderia receber as ofertas do dia, selecionar algumas baseando-se no conhecimento do seu perfil, e mostrá-las a você, contendo informações úteis, como valores e onde comprar. Obviamente existem problemas éticos a serem discutidos quando se propõe que um agente de software represente seres humanos. Tal debate foge aos objetivos deste artigo.

Armadilhas na Programação Orientada

a Agentes

Na Programação Orientada a Agentes (POA), um agente é determinado por suas crenças, capacidades e seus compromissos, que juntos constituem seu “estado mental”. Esta técnica estimula uma visão social da computação, em que comunidades de agentes interagem através da troca de informações, enviando requisições específicas, oferecendo serviços, aceitando ou rejei-tando tarefas, competindo ou cooperando com outros que tarefas sejam realizadas. Neste sentido é importante citar algumas armadilhas comuns quando se utiliza esta técnica. Vejamos algumas delas:

1. tecnologia recente;

2. achar que agentes são a solução para todos os problemas; 3. não entender para que servem os agentes;

4. querer construir soluções genéricas para problemas específicos; 5. esquecer que está desenvolvendo software;

6. não pesquisar a tecnologia relacionada; 7. não explorar concorrência;

8. decidir criar sua própria arquitetura de agentes; 9. pensar que sua arquitetura é genérica;

10. utilizar muita IA ou não utilizar IA;

11. desenvolvedores, de forma recorrente, tendem a cair nas mesmas armadilhas já citadas anteriormente.

Outra solução utilizando Sistemas Multiagente

JADE

Para deixar mais claro a utilidade de Sistemas Multiagente, citaremos mais um cenário, desta vez relacionado à domótica, tecnologia que permite a gestão dos recursos habitacionais. Netto idealiza o cenário de uma casa que possui diversos eletrodomésticos (geladeira, forno de microondas, computador, televisor, gravador de DVD etc.) e aparelhos de comunicação, como telefones e celulares (NETTO 2006).

Considerando a hipótese de que estes aparelhos estejam integrados, podemos criar a seguinte situação: em um determinado canal de televisão, está sendo exibida uma reportagem sobre um assunto de interesse do morador. Supo-nhamos que este morador esteja ausente por um motivo qualquer. A partir do conhecimento sobre o que pode ser de interesse do morador (obtido e re-gistrado semi-automaticamente), a televisão, estando ligada e sintonizada no referido canal, pode se comunicar com o gravador de DVD e solicitar a gravação desta reportagem. Caso o gravador de DVD não esteja disponível, ou haja nele próprio uma gravação programada no mesmo período ocorrendo em outro canal, a televisão pode enviar o arquivo digital referente à reportagem para o computador, que o armazenará em seu disco rígido. O computador pode também mandar uma mensagem para o e-mail ou para o telefone celular do morador, usando SMS, avisando sobre a disponibilização da reportagem.

A considerar a primeira ocorrência (defeito), o gravador de DVD poderia realizar uma autoverificação e detectar a natureza do problema; em seguida comuni-caria aos outros aparelhos que está indisponível, sendo o provável problema um defeito na cabeça de gravação, e solicitaria que uma mensagem fosse en-viada pelo telefone ao dono da casa. O gravador de DVD enviaria um relatório de danos ao computador com seu autodiagnóstico e resolve se desligar, pois o erro detectado é grave e fica à espera de reparos.

O telefone, ao receber a mensagem, analisa a agenda do morador e verifica que ele está naquele horário em uma reunião importante. O telefone espera, então, a reunião acabar e alerta o dono sobre a chegada da mensagem. O com-putador sabendo que o gravador de DVD está com problemas, assumirá parte de suas funcionalidades. Obviamente, para que haja interoperabilidade entre dispositivos de diferentes fabricantes, estes devem estar dispostos a adotar alguns padrões, como de comunicações e detecção de falhas.

O JADE (Java Agent Development Framework) é uma plataforma im-plementada na linguagem Java que simplifica o desenvolvimento de Sistemas Multiagente (BELLIFEMINE 2007). A figura 5 apresenta os com-ponentes dessa plataforma (CÂMARA 2009).

'JHVSB3FMBÎÜFTFOUSFPTQSJODJQBJTFMFNFOUPTEBBSRVJUFUVSB+"%& #&--*'&.*/&

A plataforma é constituída pelo agente, pelo sistema de gestão de agentes (Agent Management System – AMS), pelo pesquisador de diretórios (Direc-tory Facilitator – DF) e pelo sistema de transporte de mensagens (Message Transport System – MTS). O AMS atua como supervisor do acesso e do uso da plataforma e mantém uma lista de identificadores de agentes (AID) e seus estados, disponibilizando, na prática, um serviço de nomes. O DF providencia um serviço semelhante às páginas amarelas, no qual um agente pode procurar outros a partir do serviço que eles disponibilizam. O MTS provê a comunicação entre os agentes. Esta comunicação é realizada através da linguagem ACL (Agent Communication Language), que é a linguagem que os agentes têm de usar para codificar as mensagens que eles trocam, e pode ser executada por passagem como evento (caso seja entre o mesmo container), RMI (caso seja entre containers da mesma plataforma) ou Protocolo IIOP (caso seja entre plataformas diferentes).

Na Listagem 1, observe o exemplo clássico de um agente implementado em JADE que simplesmente escreve uma mensagem na tela.

Existem algumas formas de executar os agentes implementados em JADE, dentre elas podemos citar:

1. configurar o JADE e efetuar a compilação e execução através de linhas de comando (javac... java...);

2. integrar o JADE ao Eclipse e utilizar esta IDE como plataforma de desen-volvimento e execução dos agentes.

(4)

Integrando o JADE com o Eclipse

Ferramentas utilizadas

Configurando o ambiente de programação

Uma observação importante sobre o código da Listagem 1 é a diferença sutil entre classes Java e agentes em JADE. As que merecem destaque neste momento consistem nos métodos setup() e doDelete(). Primeira-mente é importante entender que todos os agentes escritos em JADE estendem a classe Agent. A classe jade.Boot possui os métodos para exe-cução dos agentes. Finalmente, o método setup() é utilizado para modi-ficar dados registrados no AMS, atribuir serviços ao agente e adicionar comportamentos, enquanto que doDelete() pára a execução do agente.

Este tópico demonstra como configurar uma ferramenta de desenvolvi-mento, o Eclipse, para programar agentes utilizando o framework JADE. São utilizados exemplos retirados do tutorial para iniciantes – JADEPro-gramming-Tutorial-for-beginners.pdf, contido no JADE-doc.

É necessário que se faça o download e instalação dos aplicativos listados abaixo. Neste artigo, o sistema operacional utilizado para configurar o ambiente foi o Linux, mas não há grandes mudanças para que os exemplos sejam executados no Windows. Estas diferenças podem ser resumidas a forma de instalação do Eclipse e aos caminhos de diretórios. Portanto, não fare-mos distinção entre os dois sistemas operacionais.

t +%,oIUUQKBWBTVODPN

t &DMJQTFPVTVQFSJPSoIUUQXXXFDMJQTFPSH t +"%&oIUUQKBEFUJMBCDPN

1 Copiar a pasta JADE-bin-3.6 para a pasta pessoal, no caso deste tuto-rial – /home/ricardo.

2 Crie um novo projeto no Eclipse (Java Project), chame-o de tutorjade (figura 2).

Figura 2. Criando um novo projeto no Eclipse.

3 Acesse as propriedades do projeto – Java Build Path – Libraries e clique no botão Add External JARs (figura 3).

Figura 3. Adicionando JARs externas ao projeto.

4 Adicione todos os arquivos .jar que estão na pasta /home/ricardo/JADE-bin-3.6/jade/lib – http.jar, iiop.jar, jade.jar, jadeTools.jar. Nesta etapa, a configuração do Eclipse para executar quaisquer agentes escritos em JADE está completa (figura 4). Os passos seguintes ilustram a execução de um exemplo específico que acompanha o JADE, o Book Trading. Este artigo foca a segunda abordagem, será mostrado como configurar o Eclip-se para executar os agentes escritos em JADE. Não Eclip-serão discutidos detalhes sobre o desenvolvimento utilizando JADE.

Figura 4. JARs externas adicionadas.

5 As configurações do agente comprador são descritas nos subtópi-cos a seguir:

5.1 Adicione ao projeto a classe BookBuyerAgent, que pode ser baixada no site da revista (figuras 5 e 6).

import jade.core.Agent;

publicclass HelloWorldAgent extends Agent { protectedvoidsetup() {

System.out.println(“Hello World! My name is “+getLocalName()); doDelete();

} }

Listagem 1. Implementação do primeiro agente em JADE.

Figura 5. Criando uma nova classe.

(5)

5.2 Execute a classe utilizando a opção do menu Run – Run... Deve-se criar uma nova configuração para Java Application. Para isso, clique no botão New Launch Configuration. Pode-se dar um nome para esta configuração (Comprador, por exemplo). Os parâmetros necessários para que a classe seja executada são: Main Class (jade.Boot – aba Main) e Program Arguments (buyer:BookBuyerAgent – aba Arguments). As telas das figuras 7 e 8 ilustram as configurações efetuadas.

'JHVSB$POmHVSBOEPBDMBTTFQSJODJQBMoKBEF#PPU

'JHVSB%FmOJOEPPTBSHVNFOUPTEPDPNQSBEPS

5.3 Observe que as configurações do agente comprador são de-finidas na figura 8. São elas:

5.3.1 Nome do agente: buyer;

5.3.2 Livro a comprar: java.

6 As configurações do agente vendedor são descritas nos subtópicos a seguir:

6.1 De forma semelhante ao item 5.1, adicione ao projeto a clas-se BookSellerAgent, que pode clas-ser baixada no site da revista. 6.2 Execute a classe utilizando a opção do menu Run – Run...

Novamente será necessário criar uma nova configuração para Java Application. Para isso, clique no botão New Launch Configura-tion. Pode-se dar um nome para esta configuração (Vendedor, por exemplo). Os parâmetros necessários para que a classe seja execu-tada são: Main Class (jade.Boot – aba Main) e Program Arguments (-gui seller:BookSellerAgent – aba Arguments). As telas das figuras 9 e 10 ilustram as configurações efetuadas.

'JHVSB$POmHVSBOEPBDMBTTFQSJODJQBMoKBEF#PPU

'JHVSB%FmOJOEPPTBSHVNFOUPTEPWFOEFEPS

Figura 11. Executando os agentes.

A figura 11 (esquerda) ilustra a interface gráfica do agente vendedor, em que os livros e seus respectivos preços podem ser cadastrados. Já à direita temos o RMA, onde podem ser observados os agentes ativos no container, dentre eles o seller e buyer. Por fim, execute primeiramente o agente BookSellerAgent, cadastre pelo menos um livro com a descrição java e um valor qualquer. Em seguida, execute o BookBuyerAgent con-forme descrito nos tópicos anteriores.

Book Trading, um exemplo mais completo de agentes

Para deixar mais claro as utilizações práticas de agentes e Sistemas Multiagente, apresentamos um exemplo mais prático e completo deste tipo de programação. Estudando os exemplos que acompanham o JADE, encontramos o Book Trading, uma aplicação que inclui agentes que compram e vendem livros em nome de seus usuários.

Três classes e um tutorial podem ser baixadas no site da revista, são eles: 1. BookBuyerAgent.java: Agentes compradores;

2. BookSellerAgent.java: Agentes vendedores, utilizam a GUI implementada na classe BookSellerGui.java para que sejam inseridos os livros e seus res-pectivos preços;

3. BookSellerGui.java: GUI utilizada para inserir os livros e valores;

4. JADEProgramming-Tutorial-for-beginners.pdf: Tutorial que acompanha o JADE e explora o código do Book Trading.

Cada agente comprador recebe o título do livro para comprar como um argu-mento de linha de comando. Periodicamente o agente solicita a compra a todos os vendedores conhecidos. Ao receber uma resposta, o comprador efetua a en-comenda. Se mais de uma resposta for recebida para o mesmo item, é escolhida a com o valor mais baixo.

Como o objetivo deste artigo é ensinar a configuração do Eclipse para desen-volver os agentes e a explicação detalhada do código deste exemplo seria longa e fugiria ao nosso escopo, sugerimos que o leitor estude os detalhes de implementação no tutorial fornecido pelo JADE – JADEProgramming-Tutorial-for-beginners.pdf, também disponível no site da revista. A figura 12 ilustra a GUI do agente vendedor e a resposta do container ao ser cadastrado um novo título.

(6)

"S UJHPt$ POTUSVJOEP" HFOU FT* OU FMJHFOU FTDPNP+"%&F& DMJQTF 'JHVS B  (6* EF D BEBTUS P EF MJWS PT  FTRVFS EB F SFTQPTUB OP D POUÐJOFS  EJS FJUB

C

o

n

si

d

er

õ

es

fi

n

ai

s

As soluç ões de pr oblemas utilizando agen tes ganham cada vez mais at enção das indústrias , deixando de ser um tópic o de in ter esse ex clusiv men te acadêmic o e de pesquisa. Há for tes tendências de cr escimen to utilização de agen tes par a dispositiv os por tá teis . A o ler est e ar tigo , e ex ecutar as configur aç ões e ex emplos pr opost os leit or estar á apt o par a configur ar um ambien te visual par a o desen volvi men to de agen tes e se apr ofundar no assun to . Esper amos , desta forma, ter con tribuído par a minimizar os esf or ços configur ação dos ambien tes , permitindo que o foc o dos estudos seja EFTFO WPMWJNFO UP EPT BHFO UFT FOBT QFTRVJTBT CJCMJPH SÈmDBTt R efer ências t #&--*'&.*/& ' BCJP $"*3& (JP WBOOJ (3&&/8 00% % PNJOJD % FW FMPQJOH NVMUJ BHFOU TZTUFNT XJUI +"%& & EJUPS B8JMF Z  t $¬."3" 34 /&5 50 + ' . ."*" 3+. 6TBOEP 9.-QBS B 'BDJMJUBS P % FTFOW PMWJNFO UP EF " NCJFOUFT EF " QS FOEJ[ BHFN #BTFBEPT FN 4JTUFNBT .VMUJBHFOUF *O 9*9 4JNQØTJP #S BTJMFJS PEF *OGPSNÈUJD BOB & EVD BÎ ÍP  ' PS UBMF[ B$& 9*9 4#*&  t $¬."3" 34 /&5 50 +' . 6NB "CPS EBHFN #BTFBEB FN 4JTUFNBT .VMUJBHFOUF QBS A pr endiz agem de C onc eitos de A gentes e Sistemas Multiagente . A nais da I Esc ola Regio OBM EF *OGPSNÈUJD Bo3FHJPOBM /PS UF * &3*/  .BOBVT  t /&5 50 +' . 6NB " SRVJUFUVS B QBS B "NCJFOUFT 7JS UVBJT EF $ POWJW ÐODJB VNB 1 SPQPTUB #BTFBEB FN 4JTUFNBT .VMUJBHFOUF 5 FTF EF % PVUPS BEP 6'&4 7JUØSJB  t 4 3VTTFMM  1 /PS WJH " SUJmDJBM *OUFMMJHFOD F " .PEFSO " QQS PBDI 1 SFOUJD F )BMM 4 FSJFT &O HMF X PPE $MJõT /+  t 8 00-%3*%(&  . " O *OUS PEVDUJPO UP .VMUJ" HFOU 4ZTUFNT  *OHMBUFSS B & EJUPS B +PIO 8JMF Z4 POT 

Saber mais

Po de m os c ita r du as r ef er ên ci as i m po rt an te s pa ra ap re nd er o u ap ro fu nd ar o s co nh ec im en to s no d e-se nv ol vi m en to d e ag en te s u sa nd o JA D E: 1. O JADED oc , disponív el em http://jade .tilab . com/; ou 2. O únic o livr o publicado sobr e JADE at é o momen to: D ev eloping Multi-A gen t Sy st e-ms with JADE, disponív el par a compr a em h tt p :/ /w w w .w ile y. co m /W ile yC D A /W ile yT i-tle/pr oduc tC d-0470057475.h tml .

Referências

Documentos relacionados

Depois de baixar, vá ao Windows Explorer, localize o arquivo e use o recurso de Copiar (clique nele e [Ctrl+C]), retorne ao Eclipse, clique no nome do projeto, e Colar

Este auste tem o o3etivo de prover o tempo necessário para o res,riamento do rupo erador e tam3-m para possi3ilitar o retorno rápido da coneAo da cara ao erador em

 devido ao risco aumentado de sangramento, o tratamento concomitante com altas doses de Fragmin® (como aquelas necessárias para tratar trombose venosa profunda aguda,

Sobre como seleccionar o item de Controlo da função, consulte <Controlo da função> (página 6). 2 Entre no modo de edição de nome da lista

Nos discursos de Vieira, dessa forma, há uma junção entre as postulações aristotélicas e ciceronianas. Para garantir que ele é veículo da voz da verdade, o padre arregimenta

O autor defende que, a longo prazo, a Lei da Separação acabou por ser uma bênção para a Igreja, essencialmente por criar um inimigo comum, levando a que o movimento

Nela Marta Rosales versa sobre as bases conceptuais da análise que hoje se faz da cultura material (e aqui encon- tramos em grande destaque o recurso frequente que a autora faz

Eclipse EURO 32 permite parafusar o mecanismo diretamente na lateral do móvel através dos furos presentes no perfil superior e inferior.. Esta versão permite uma montagem rápida