Você está na página 1de 30

Expediente editorial

Diretor Geral Rafael Peregrino da Silva rperegrino@linuxmagazine.com.br Editores Flvia Jobstraibizer fjobs@linuxmagazine.com.br Kemel Zaidan kzaidan@linuxmagazine.com.br Editora de Arte Larissa Lima Zanini llima@linuxmagazine.com.br Estagirio Felipe Brumatti Sentelhas fsentelhas@linuxmagazine.com.br Colaboradores Alexandre Borges, Alexandre Santos, Augusto Campos, Brice Goglin, Charly Khnast, Erik Brwaldt, Hans-Peter Merkel, Ian Dickinson, Jeff Squyres, Jon maddog Hall, Kai-Thorsten Hambrecht, Klaus Knopper, Kurt Seifried, Marcel Gagn, Markus Feilner, Markus Heller, Markus Roth, Peter Kreussel, Samuel Thibault, Thomas Pfeiffer, Zack Brown. Editores internacionais Uli Bantle, Andreas Bohle, Jens-Christoph Brendel, Hans-Georg Eer, Markus Feilner, Oliver Frommel, Marcel Hilzinger, Mathias Huber, Anika Kehrer, Kristian Kiling, Jan Kleinert, Daniel Kottmair, Thomas Leichtenstern, Jrg Luther, Nils Magnus. Anncios: Rafael Peregrino da Silva (Brasil) anuncios@linuxmagazine.com.br Tel.: +55 (0)11 3675-2600 Penny Wilby (Reino Unido e Irlanda) pwilby@linux-magazine.com Amy Phalen (Amrica do Norte) aphalen@linuxpromagazine.com Hubert Wiest (Outros pases) hwiest@linuxnewmedia.de Diretor de operaes Claudio Bazzoli cbazzoli@linuxmagazine.com.br Na Internet: www.linuxmagazine.com.br Brasil www.linux-magazin.de Alemanha www.linux-magazine.com Portal Mundial www.linuxmagazine.com.au Austrlia www.linux-magazine.es Espanha www.linux-magazine.pl Polnia www.linux-magazine.co.uk Reino Unido www.linuxpromagazine.com Amrica do Norte Apesar de todos os cuidados possveis terem sido tomados durante a produo desta revista, a editora no responsvel por eventuais imprecises nela contidas ou por consequncias que advenham de seu uso. A utilizao de qualquer material da revista ocorre por conta e risco do leitor. Nenhum material pode ser reproduzido em qualquer meio, em parte ou no todo, sem permisso expressa da editora. Assume-se que qualquer correspondncia recebida, tal como cartas, emails, faxes, fotograas, artigos e desenhos, sejam fornecidos para publicao ou licenciamento a terceiros de forma mundial no-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado. Linux uma marca registrada de Linus Torvalds. Linux Magazine publicada mensalmente por: Linux New Media do Brasil Editora Ltda. Rua So Bento, 500 Conj. 802 S 01010-001 So Paulo SP Brasil Tel.: +55 (0)11 3675-2600 Direitos Autorais e Marcas Registradas 2004 - 2011: Linux New Media do Brasil Editora Ltda. Impresso e Acabamento: RR Donnelley Distribuda em todo o pas pela Dinap S.A., Distribuidora Nacional de Publicaes, So Paulo. Atendimento Assinante www.linuxnewmedia.com.br/atendimento So Paulo: +55 (0)11 3675-2600 Rio de Janeiro: +55 (0)21 3512 0888 Belo Horizonte: +55 (0)31 3516 1280 ISSN 1806-9428 Impresso no Brasil

Burrice bem-vinda
Embora raros, h sistemas na engenharia e na biologia que so to eficientes que acabam por gerar problemas estruturais e/ou operacionais. A velocidade na entrega de obras na construo civil leva empresas de engenharia a usar determinados aditivos na cura do concreto que aceleram o seu processo de endurecimento e secagem, mas que podem resultar em porosidade do material. Do lado da medicina, h certas cirurgias cuja realizao recomendada aps os cinquenta anos de idade, pois antes disso o processo de cicatrizao to clere que acaba resultando em recidiva anos mais tarde. Antes da idade recomendada, o paciente deve tentar amenizar o problema usando paliativos. At certo tempo atrs e, na minha idade, certo tempo significa pelo menos umas trs dcadas, ou seja, na era pr-PC , operadores de computador estavam habituados a trabalhar no que se convencionou chamar de terminal burro, o qual ficava conectado a um computador de grande porte, onde todo o processamento ocorria de fato. O terminal, normalmente conectado via porta serial ao mainframe, praticamente no fazia nada alm de mostrar na tela os comandos digitados e eventuais resultados, bem como realizar a leitura dos dados inseridos via teclado. Esse modo de operar ainda utilizado (com variaes) por muitas empresas at hoje, como, por exemplo, a Casas Bahia. A diferena que, atualmente, o terminal um programa que simula o comportamento da mquina burra de outros tempos. No servidor, que ainda pode ser um mainframe, o sistema operacional agora em geral Linux (em operao virtualizada nesses sistemas de grande porte), apesar de haver ainda sistemas operacionais para mainframes, como o z/OS da IBM, por exemplo. Com o advento da computao em nuvem, vamos presenciar uma configurao semelhante chegando a uma grande parcela de usurios finais: como a maioria dos aplicativos vai funcionar diretamente a partir da nuvem, a capacidade de processamento da mquina local que pode ser um PC mais modesto, um netbook, um tablet ou mesmo um celular poder ser muito menor. Isso vai democratizar ainda mais o acesso Internet e aos aplicativos fornecidos como servios monetizados via publicidade hospedados na nuvem: ponto para o Google! E iniciativas como o lanamento do iCloud, realizado recentemente pela Apple, transferem a central digital do usurio para a nuvem, em uma traduo livre da afirmao feita por Steve Jobs por ocasio do lanamento do novo servio. Com isso, o denominador comum da vida digital do usurio muda, e, assim, o PC perde a posio de destaque que ocupou durante cerca de trinta anos. Os dispositivos mveis sero os aparelhos utilizados para realizar esse acesso. Ponto para o Linux, que j equipa a maior parte dos dispositivos embarcados no mundo tendncia que cresce exponencialmente. Afinal, em um mundo em que no h aprisionamento de plataforma operacional, onde um sistema livre, aberto, seguro e rpido est disponvel gratuitamente para qualquer empresa desenvolver produtos e solues, que outra opo mais vantajosa poderia ser adotada? Assim, exceo dos sistemas que de fato necessitam de grande capacidade de processamento local (edio de vdeo ou CAD/CAM, por exemplo), os sistemas baseados em Linux que vo equipar nossos dispositivos mveis podero ser mais simples e, assim, menos inteligentes, j que a inteligncia dos aplicativos estar hospedada na nuvem. O terminal burro 2.0 chegou! Sadem essa burrice bem-vinda!
Rafael Peregrino da Silva Diretor de Redao

EDITORIAL
3

Linux Magazine #80 | Julho de 2011

NDICE

CAPA
Novas tecnologias Como possvel manter-se atualizado diante da revoluo de lanamentos no mercado de tecnologia, com o qual somos bombardeados todos os dias? Um novo comeo para o HTML Em 1999, quando o padro HTML 4.01 apareceu pela primeira vez, ningum era capaz de prever o surgimento de blogs de video, redes sociais e ferramentas de produtividade web. O padro HTML5 transformar a Internet em uma nova gerao de tecnologia e servios. Acelere ao mximo O OpenCL permite ao programador acelerar um aplicativo transferindo alguns clculos para o processador de grcos do computador. Face a face Softwares de reconhecimento facial esto se tornando cada vez mais populares, alm de mais sosticados. Mostramos como usar o software de cdigo livre libface para identicar pessoas em suas fotos. ZFS sob o sol 46 41 34 28 27

O formato ZFS, da Sun, geralmente reverenciado como o mais moderno sistema de arquivos disponvel atualmente. O kernel Linux no proporciona suporte direto para o ZFS, mas o usurio pode encontrar alternativas para us-lo tanto no espao do kernel quanto do usurio.

www.linuxmagazine.com.br

Linux Magazine 80 | NDICE

COLUNAS
Klaus Knopper Charly Khnast Zack Brown Augusto Campos Kurt Seifried Alexandre Borges 08 10 12 13 16 20

REDES
Alternativa de peso 58

NOTCIAS
Geral Fim do Adobe AIR para Linux Xen completamente integrado ao Linux 20 O iSCSI oferece uma alternativa rpida e exvel para armazenamento de arquivos em rede. A ferramenta iSCSI permite que voc congure o armazenamento de arquivos em sua prpria rede, sem a necessidade de uso de equipamento ou cabeamento especializado.

CORPORATE
Notcias Cisco apresenta novo sistema ASR9000 Red Hat lana solues para gesto e desenvolvimento de nuvem eBay adquire Magento Oracle exige bilhes do Google Open Virtualization Alliance ganha 65 novos membros Coluna: Jon maddog Hall Coluna: Alexandre Santos 24 26 22

TUTORIAL
Elo perdido Conhea um novo mtodo para processar, combinar, analisar e apresentar informaes ocultas em dados brutos usando a plataforma Jena: web semntica e dados vinculados (linked data) para Java. VoIP com Asterisk parte IX 70 63

ANLISE
Lies sobre localizao 50

O sistema telefnico ultrapassado, presente at pouco tempo atrs nas empresas, prolco em cobranas: cada novo recurso ativado requer uma nova ativao de servio, com o preo adicionado ao pagamento mensal. hora de mudar. hora de criar sua prpria central VoIP

PROGRAMAO
Busca com qualidade A topologia do servidor interno est se tornando cada vez mais complexa. Entender onde os processos esto sendo executados no servidor pode ter um grande impacto no desempenho geral do sistema. 72

Pequeno soldado

55

Analisamos a ferramenta de indexao Open Search Server e mostramos como integrar o recurso de busca ao seu website utilizando PHP.

SERVIOS
Editorial Emails O Sentinella automatiza a forma com que o computador monitora problemas com recursos e outros estados de sistema. Linux.local Preview 03 06 78 82

Linux Magazine #80 | Julho de 2011

CARTAS

Permisso de escrita
Aplicativo personalizado
Ol pessoal, criei uma calculadora utilizando linguagem C com GTK e compactei o programa em um pacote .deb. Gostaria de saber como fao para que o programa seja exibido na aba acessrios da minha distribuio Linux. Joo Vieira
[Desktop Entry] Name=Terminal Comment=Use the command line TryExec=gnome-terminal Exec=gnome-terminal Icon=utilities-terminal Type=Application X-GNOME-DocPath=gnome-terminal/ index.html X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product= gnome-terminal X-GNOME-BugzillaComponent=BugBuddyBugs X-GNOME-Bugzilla-Version=2.32.0 Categories=GNOME;GTK;Utility; TerminalEmulator; StartupNotify=true OnlyShowIn=GNOME; X-Ubuntu-Gettext-Domain= gnome-terminal

Resposta
Caro Joo, para que o atalho seja exibido no menu Acessrios do Gnome ou do KDE basta que voc inclua no seu pacote um arquivo do tipo .desktop com os dados do aplicativo, como: nome, comando de execuo, cone, e seo do menu onde o aplicativo deve ser exibido. No Gnome este arquivo deve ficar no diretrio /usr/ share/applications/seu_programa.desktop. Como exemplo, copio abaixo o contedo de um arquivo /usr/share/applications/gnome-terminal.desktop:

Mais informaes podem ser encontradas na documentao do Gnome no endereo http://live.gnome.org/GnomeLove.

Escreva para ns!

Sempre queremos sua opinio sobre a Linux Magazine e nossos artigos. Envie seus emails para cartas@linuxmagazine.com.br e compartilhe suas dvidas, opinies, sugestes e crticas. Infelizmente, devido ao volume de emails, no podemos garantir que seu email seja publicado, mas certo que ele ser lido e analisado.

www.linuxmagazine.com.br

sa

nja

Emails para o editor

gje

ne

ro

ww .s x

c.h

Coluna do Augusto

Bons ventos sopram sobre o Android


Novas iniciativas e alternativas esto surgindo no universo do desenvolvimento Android.

COLUNA

uem chega ao universo Android interessado no fato de ele ser (em grande parte) um sistema de cdigo aberto (e por incluir o kernel Linux) acaba tendo grande interesse pela possibilidade de modificar o sistema e interagir com ele em nveis mais avanados, assim como usualmente possvel fazer em distribuies Linux no desktop. Mesmo quando essa possibilidade no colocada em prtica, interessante saber que ela est l e que pode ser aproveitada por outros, de forma que possamos colher os frutos, afinal, sempre h algum desenvolvedor interessado em adaptar os recursos do sistema, agregar acessrios e ir alm das APIs oficiais, trocando a compatibilidade por utilidades adicionais e melhor desempenho. No caso do Android, essa situao poderia ser simbolizada pelo CyanogenMod [1], um firmware alternativo para smartphones, e-readers e tablets, que mantido por uma comunidade de fs do Android e compatvel com dezenas de modelos de aparelhos. Ele oferece a seus usurios recursos que frequentemente ficam de fora nas verses de Android embarcadas nos aparelhos por seus fabricantes e operadoras.

O CyanogenMod um firmware alternativo para smartphones, e-readers e tablets, que mantido por uma comunidade de fs do Android e compatvel com dezenas de modelos de aparelhos.
Linux Magazine #XX | Ms de 200X

Normalmente, o desenvolvimento deste tipo de alternativa se d sem qualquer apoio dos fabricantes e desenvolvedores originais ou, em determinados casos, tendo de lidar com a resistncia e obstruo ativas praticadas por eles, inclusive com travamentos feitos no hardware para evitar a execuo de sistemas alternativos. Isso j foi tendncia quase geral, e vai continuar a acontecer. Porm, no final do primeiro semestre, tivemos duas notcias muito positivas a respeito, indicando uma possvel mudana de mar entre os fabricantes de aparelhos. A primeira foi da HTC, cujo CEO veio a pblico agradecer a pacincia dos seus usurios e afirmar que vai cessar com a prtica de travar o boot dos seus aparelhos equipados com Android acabando assim com a medida antiptica cujo objetivo era dificultar a instalao de sistemas alternativos. Logo em seguida, foi noticiado algo ainda mais extremo na aproximao entre fabricantes e hackers: a Samsung doou um aparelho Galaxy S II para um dos desenvolvedores do CyanogenMod, com o objetivo expresso de facilitar a portabilidade deste software alternativo para o novo smartphone da empresa. Nada disso garante aproximaes ou aberturas definitivas, mas so excelentes notcias que podem ajudar a ampliar o nvel de abertura das plataformas mveis, ao mesmo tempo em que certamente constituem critrios adicionais a considerar na hora de escolher o fabricante de nossos prximos produtos!

Mais informaes
[1] CyanogenMod: http://www.cyanogenmod.com/
Augusto Campos administrador de TI e, desde 1996, mantm o site BRlinux.org, que cobre a cena do Software Livre no Brasil e no mundo.

13

Coluna do Alexandre

Introduo ao udev: controle seus dispositivos


Relembre o uso do framework udev.

COLUNA

esta coluna (e possivelmente nas prximas), vou relembrar um assunto bastante interessante do Linux, mas que, no entanto, por muitas vezes esquecido pelos administradores: o framework udev. Antigamente, os sistemas Unix (e aqui tambm inclumos o Linux), que referenciam todo e qualquer hardware atravs de arquivos no sistema (ou ainda device nodes, se preferir), possuam uma maneira bastante rudimentar de criar referncias para tais dispositivos, pois, como nunca se conhecia de antemo qual hardware estaria presente na mquina, a instalao do sistema operacional criava previamente dezenas ou centenas de entradas (block device file ou character device file) no diretrio /dev, tentando, assim, se antecipar ao administrador e garantir que aquele dispositivo teria um arquivo representativo vlido daquele hardware. Estes arquivos criados no diretrio /dev possuem alguns atributos especiais como major number e minor number, sendo que o primeiro explicita qual o driver usado para acessar aquele dispositivo e o segundo diz qual instncia deste driver utilizada para acessar determinado dispositivo. Explico: arquivos de dispositivos de bloco (block device file) que referenciam 4 discos

Listagem 1: ls -l /dev
01 02 03 04 05 06 07 brw-rwbrw-rwbrw-rwbrw-rwbrw-rwcrw--wcrw--w1 1 1 1 1 1 1 root root root root root root root disk 8, 1 disk 8, 2 disk 8, 5 disk 7, 0 disk 7, 1 tty 4, 10 tty 4, 11 2011-06-12 2011-06-12 2011-06-12 2011-06-12 2011-06-12 2011-06-12 2011-06-12 12:48 12:48 12:48 12:48 12:48 12:48 12:48 sda1 sda2 sda5 loop0 loop1 tty10 tty11

SCSI/SATA idnticos (sda, sdb, sdc...) tm o mesmo major number (pois o Linux faz uso do mesmo driver para acess-los), mas minor numbers diferentes, j que usada uma cpia diferente do driver para acessar cada um dos discos rgidos. A mesma lgica se aplica para um nico disco com mltiplas parties, loop device files, usado para montar ISOs ou que tenha character devices para acesso a terminais (ttys). Note a sada de alguns arquivos de dispositivo do diretrio /dev na listagem 1, onde b block device e c character device; o primeiro nmero aps o tipo do dispositivo o major number e o segundo nmero o minor number. Toda esta prestatividade em criar este enorme conjunto de entradas em /dev muito nobre, porm traz diversos problemas, j que, como a criao destas entradas antecipada, muitos dispositivos jamais existiro na mquina. Isso deixa praticamente todos estes arquivos sem funo alguma e ainda complicam a sua vida quando voc tiver de examinar o diretrio em questo, pois fica difcil saber quais hardwares existem realmente na sua mquina. Pior: imagine que voc deseja utilizar seu tablet (com Android, espero), sua cmera digital e seu pendrive. Cada vez que voc conectar estes dispositivos, eles sero atrelados a um arquivo de dispositivo diferente (sda, sdb, sdc...), dependendo da ordem em que voc executar esta operao ou da ordem em que os seus drivers forem carregados. Depois de diversas evolues, passando pelo DevFS que foi excludo da rvore do kernel, os desenvolvedores do Linux chegaram ao udev, que possui funes de gerenciamento do diretrio /dev para resolver estes problemas e tornar o manuseio de dispositivos muito mais simples, com o bnus de disponibilizar

18

www.linuxmagazine.com.br

estes hardwares e as suas propriedades no arquivo de sistema (filesystem) montado no diretrio /sys. Algumas vantagens do udev so: Criao dinmica de entradas para dispositivos em /dev; Controle na criao dos nomes dos dispositivos em /dev atravs de regras; Inicializao dos dispositivos de hardware de maneira dinmica (hotplug); Possibilidade de renomeao de interfaces de rede; Vinculao de scripts para serem executados na adio ou remoo de um hardware; Mudana da propriedade e permisso de um dispositivo. O leitor pode utilizar qualquer distribuio, como Ubuntu, Red Hat ou Suse, para fazer testes com o udev. Estou usando Ubuntu 11.04, pois aquela que est instalada no meu netbook, embora no esconda de ningum que prefiro Red Hat ou Suse para ambientes crticos. Caso o leitor ainda queira, pode realizar o download do cdigo do udev e compil-lo. Para fazer isso (no seu sistema podem ser exigidos outros pacotes adicionais), a partir da raiz e como usurio root, digite:

# git clone git://git.kernel.org/pub/scm/linux/ hotplug/udev.git udev-lm # apt-get install libacl1-dev # apt-get install glib-2.0 # apt-get install gobject-* # apt-get install gperf # apt-get install gtk-doc-tools # cd /udev-lm # ./autogen.sh without-selinux disable-introspection # make # make udev/test-udev

Agora voc pode executar o script Perl de teste que vem junto com o udev, o qual simula a incluso e a remoo de dispositivos no sistema, de modo a verificar se est tudo funcionando bem:
# perl test/udev-test.pl

No ms que vem continuamos a relembrar o uso e funcionamento do udev. At a prxima.


Alexandre Borges (alex_sun@terra.com.br, twitter: @ale_sp_brazil) Especialista Snior em Solaris, OpenSolaris e Linux. Trabalha com desenvolvimento, segurana, administrao e anlise de desempenho desses sistemas operacionais, atuando como instrutor e consultor. pesquisador de novas tecnologias e assuntos relacionados ao kernel.

Linux Magazine #80 | Julho de 2011

19

As novidades do mercado de tecnologia

Novas tecnologias
Como possvel manter-se atualizado diante da revoluo de lanamentos no mercado de tecnologia, com o qual somos bombardeados todos os dias? por Flvia Jobstraibizer

CAPA

cada dia descobrimos uma nova forma de realizar tarefas corriqueiras, seja atravs de um novo dispositivo lanado ou mesmo atravs de uma nova tecnologia que surge. Os beneficios sessas novas tecnologias, so inmeros: todos os dias so lanados dispositivos que facilitam a vida do usurio de telefonia celular, o profissional que desenvolve sistemas conta com computadores cada vez menores, o gestor que necessita de conexo a todo momento, pode montar um ponto de acesso sem fio de onde estiver, a escola que deve fornecer recursos para seus alunos e pode utilizar uma nova plataforma de aprendizagem online, o departamento de uma empresa que atravs da implementao de uma nova forma de armazenamento de arquivos, economizou ao evitar a compra de outro servidor etc., so muitas as vertentes que precisam da tecnologia e claro, se movimentam em torno dela e de suas novidades. Algumas novas tecnologias tem um nvel de obsolescncia to grande, que j nascem desatualizadas. o caso dos tablets, dispositivos mveis com celulares e at mesmo notebooks. Lanado um hoje, amanh j existem outros melhores ou com mais recursos. No raro, quando sequer descobrimos que uma nova tecnologia foi lanada, existem outras vrias iniciativas em torno dela, melhoradas e mais teis. Como acompanh-las? esta a pergunta que nos fizemos quando decidmos agrupar algumas dessas novidades nesta edio da Linux Magazine, uma vez que, assim como a vida, a tecnologia se reinventa e se renova todos os dias. Vamos abordar algumas novidades tecnolgicas que esto acendendo o mercado, como o caso do HTML5,

que promete ser principal ator para o desenvolvimento web da nova era da Internet. Apresentamos ainda a tecnologia por trs das placas de vdeo. Seus processadores, como obter melhor desempenho e velocidade atravs de clculos e scripts especficos que as tornam mais eficientes e eficazes, com o openCL. Na rea de armazenamento e sistemas de arquivos, falaremos sobre o iSCSI, que oferece uma alternativa rpida e flexvel para armazenamento de arquivos em rede. A ferramenta permite que voc configure o armazenamento de arquivos em sua prpria rede, sem a necessidade de uso de equipamento ou cabeamento especializado. Outra opo o ZFS, da Sun, que tido como o mais moderno sistema de arquivos disponvel atualmente. O kernel Linux no proporciona suporte direto para o ZFS, mas mostaremos as alternativas para us-lo tanto no espao do kernel quanto do usurio. E para fechar esta edio, demonstraremos como funcionam os softwares de reconhecimento facial, que esto se tornando cada vez mais populares, alm de mais sofisticados. Aprenda como identificar pessoas em fotos e montar uma base para automatizao de reconhecimento facial em lotes de imagens. A nova era tecnolgica j comeou, mantenha-se atualizado e boa leitura!

Matrias de capa
Um novo comeo para o HTML Acelere ao mximo Face a face ZFS sob o sol 28 34 41 46

Linux Magazine #80 | Julho de 2011

27

Monitoramento de redes e sistemas | ANLISE

Monitoramento de redes e sistemas

Pequeno soldado
O Sentinella automatiza a forma com que o computador monitora problemas com recursos e outros estados de sistema. Erik Brwaldt

ANLISE

erramentas de monitoramento de rede como o Nagios observam toda a sua rede e mandam um alerta caso acontea algum problema. Isso se voc tiver tempo e energia para configurar a infraestrutura completa de alertas no programa. Se voc opera em menor escala, talvez seja melhor usar um pequeno soldado, em vez de um exrcito completo. O Sentinella um desses aplicativos prticos que supervisionam o seu processador, espao em disco ou interface de rede e mandam um alarme ou executam um determinado comando quando um problema ocorre. A ferramenta de monitoramento Sentinella j conquistou o seu espao nos repositrios de muitas distribuies, e possvel que voc possa instal-lo convenientemente com o Synaptic, YaST ou outro gerenciador de pacotes. Se os pacotes binrios no estiverem disponveis

para a sua distribuio, voc pode baixar o arquivo do site do projeto [1] e realizar uma instalao manual. O site tem informaes detalhadas sobre como configurar a ferramenta. Caso voc no use o desktop KDE, para o qual o Sentinella est otimizado, instalar os arquivos binrios normalmente ir instalar o que necessrio para executar o Sentinella no Gnome, Xfce ou LXDE sem sacrificar recursos da ferramenta.

Executar o Sentinella
Dependendo da sua distribuio Linux, o processo de instalao do pacote cria um item no menu da rea de trabalho. No Ubuntu 10.10, o Sentinella fica no menu Aplicativos/Ferramentas de sistema. Quando aberto, o Sentinella exibido em uma janela simples. No se incomode em procurar por uma barra de botes ou menus, pois um

grupo de opes no topo e no meio da janela j abrangem as principais funes. Outros botes na metade inferior da tela oferecem aes que dependem das condies selecionadas (gura 1). As condies que disparam uma ao podem ser definidas de forma granular, graas a providenciais caixas de seleo e importao. Em vez de manter configuraes padro, voc pode adicionar entradas personalizadas. Dependendo das condies que voc aciona, as configuraes mudaro para refletir o contexto. As categorias bsicas incluem: carga da CPU, utilizao de memria, trfego de rede, alm de dia e hora. possvel tambm selecionar aes a serem disparadas de acordo com o comportamento de outros programas. Nesse caso, o Sentinella exibe uma janela listando todos os processos correntes e oferecendo escolhas para a visualizao. Por exemplo, se voc tem um grande nmero de pro-

Linux Magazine #80 | Julho de 2011

55

ANLISE | Monitoramento de redes

Figura 1: O programa fcil de usar, graas sua


interface amigvel.

Figura 2: Escolha de um programa ativo na janela de


processos.

Figura 3: O Sentinella pode ajud-lo a economizar energia.

Figura 4: Monitoramento preventivo.

cessos ativos, pode querer destacar somente os de usurios. Na parte inferior da janela, voc encontra seis aes que pode atribuir s condies selecionadas. Quando o evento selecionado ocorre, voc pode reiniciar ou desligar a mquina, coloc-la para dormir (sleep) ou tocar um alarme de alerta. Trs diferentes alarmes esto disponveis. Um modo muito mais flexvel executar um comando quando um evento especfico ocorre. Como alternativa, voc pode finalizar o programa. Nesse caso, voc ver novamente uma lista de processos para escolha (gura 2). Aps finalizar as configuraes, voc pode comear a monitorar o sistema clicando em Start, no centro inferior da tela. A janela se tornar

acinzentada e voc no poder ver entradas adicionais. O Sentinella exibe um cone de mensagem no painel para que voc possa fechar a janela. Quando voc clica no cone, a janela do programa exibida no desktop. Para finalizar o programa, voc deve clicar com o boto direito do mouse no cone no painel e clicar e selecionar a opo Quit.

No se preocupe, pois mesmo mal configurado o Sentinella no danificar seu hardware.

Cenrios de aplicativos
O Sentinella poder ajud-lo a economizar energia se voc usa o software no laptop ou notebook. Aps selecionar CPU load como condio, entre com o mnimo de carga direita do sinal de percentual. Para evitar que o seu computador execute uma ao definida antes que ocorra a condio, defina o perodo de tempo no qual a carga ficar abaixo do limite especificado para que o desligamento ocorra. necessrio entrar com um perodo vlido de tempo para

Risco
O Sentinella capaz de desligar o computador quando a carga da CPU menor do que 5% se voc assim escolher; contudo, voc precisa tomar cuidado com esse tipo de ao. Efeitos indesejados podem ocorrer, incluindo perda de dados, caso o Sentinella feche o sistema durante uma rotina de backup, por exemplo.

56

www.linuxmagazine.com.br

Monitoramento de redes e sistemas | ANLISE

que a configurao seja concluda com sucesso. Abaixo, na janela do programa, habilite a ao Sleep e escolha Suspend ou Hibernate direita. Certifique-se de ter espao em disco suficiente ou a ao pode provocar perda de dados (figura 3). Em outro cenrio, o Sentinella pode ser til para administradores de rede. Uma vez que o programa capaz de monitorar trfego de rede, ele pode identificar e reportar anomalias em tempo real. Voc pode monitorar a entrada e a sada de dados por meio das interfaces ativas de rede. Se os volumes estiverem abaixo de limites determinados por um perodo de tempo, voc pode pedir para disparar um alarme. Um cenrio como esse poderia prevenir que transferncias de dados indesejados e em larga escala ocorressem no ambiente de servi-

dor. Em ambientes heterogneos, em particular, essa uma forma eficiente de identificar a influncia de um malware. Para esse tipo de monitoramento, simplesmente marque a opo Network traffic, defina as interfaces de rede do sistema e volumes de dados e programe o alarme na seo de aes h trs melodias para escolher no lado direito da janela (gura 4).

sistema definido ocorre antes do desligamento ou da execuo da ao definida. O risco de perda de dados real. Antes de implantar o programa, voc deve considerar cuidadosamente quais aes so significativas no contexto de estados especficos do sistema.

Mais informaes
[1] Sentinella: http://sourceforge.net/ projects/sentinella

Concluso
O software Sentinella assume a responsabilidade de monitorar vrias tarefas em um sistema e responde com aes predefinidas quando certos estados de sistema ocorrem. A ferramenta fcil e intuitiva para instalar; no entanto, os usurios correm riscos. Por exemplo, o software no mostra uma mensagem de alerta quando um estado de

Gostou do artigo? go?


Queremos ouvir sua opinio. ua opin o. Fale conosco em cartas@linuxmagazine.com.br zine om.b Este artigo no nosso site: so s http://lnm.com.br/article/5472

Linux Magazine #80 | Julho de 2011

57

Apache Jena | TUTORIAL

Apache Jena

Elo perdido
Conhea um novo mtodo para processar, combinar, analisar e apresentar informaes ocultas em dados brutos usando a plataforma Jena: web semntica e dados vinculados (linked data) para Java. por Ian Dickinson

TUTORIAL

compartilhamento de dados um dos tpicos mais quentes atualmente na computao. As fontes podem ser desde APIs do Facebook, dados cientficos abertos e at dados pblicos gerados pelo governo e disponibilizados gratuitamente. Por todos os lados, h algum liberando novos dados para serem explorados por desenvolvedores e cientistas de dados [1]. Nesse cenrio, espera-se que projetistas, exploradores de dados e desenvolvedores criem aplicativos de valor para usurios finais, com recursos novos e interessantes. Sendo um desenvolvedor, como abordar essa montanha de informaes? Que ferramentas e tcnicas sero teis? Muitas abordagens esto disponveis, variando desde de simples anlise de arquivos com valores separados por vrgulas (CSV) em planilhas de dados, consulta em bancos de dados relacionais, chegando a ferramentas de larga escala e distribudas de anlise de informaes na nuvem. Como cada tcnica possui vantagens e desvantagens, e ao invs de

fazer um levantamento completo de todas elas, vamos focar apenas em dados semnticos vinculados, mais especificamente na plataforma Jena.

autor do artigo123, sobre Jena poderia ser escrito com a seguinte linha de cdigo, podendo ser representado graficamente como na gura 1.
<ian> <autor-do> <artigo123>. <artigo123> <tem-o-assunto> Jena.

A web semntica
No por acaso, as tcnicas e ideias da web semntica acabaram ganhando uma reputao de complexidade e dificuldade. O modelo de XML padro do RDF (Resource Description Framework) grosseiro, razo pela qual modelar o mundo real pode revelar nuances conflituosas. No entanto, em seu ncleo esto duas ideias importantes. A primeira a de que estruturas ricas e expressivas de dados, descrevendo informaes sobre determinado assunto, podem ser construdas a partir de um conjunto de informaes simples sobre o relacionamento entre pares de elementos: duas entidades nomeadas ou uma entidade nomeada e um valor, como um nmero. Um exemplo simples: suponhamos que o identificador para o artigo que voc est lendo artigo123 (voltaremos a isso em breve); ento, a sentena Ian

Figura 1: Uma representao grca da sentena.

Matematicamente, a estrutura exemplificada na figura um grfico direcionado, que rotula os dois ns e suas extremidades. Para ser simples, irei me referir a ele apenas como um grfico. Uma vez que cada declarao contm tipicamente trs elementos o assunto, o objeto e o nome do predicado que os liga , o termo triple usado para denotar tal declarao. Isso leva a outras expresses como triplestore, para um banco de dados constitudo de triples. A segunda das duas ideias importantes o nome das coisas que no so valores, que representado por URIs. Um URI (Uniform Resource Identifier, ou Identificador de Recursos Uniforme) refere-se a um conjunto de identificadores definidos pela RFC 2396. O mais importante desse conjunto que ele inclui identificadores http:// para websites familiares. O uso de URIs por identificadores tem duas consequncias importantes: primeiro, todos os identificadores formam eficazmente um grande namespace, minimizando as chances de usar acidentalmente um mesmo nome para

Linux Magazine #80 | Julho de 2011

63

TUTORIAL | Apache Jena

se referir a coisas diferentes. Segundo, a maioria dos URIs podem ser resolvidos ou procurados com um navegador de Internet, de forma que d informaes sobre o termo que est sendo identificado. Alm das consequncias bvias de ter o significado, ou a semntica, declarado explicitamente, isso significa tambm que o responsvel pela manuteno do domnio web que hospeda o identificador tem alguma autoridade sobre o uso ou significado pretendido do termo. Alm disso, qualquer um pode reutilizar um termo publicado em um domnio. Alis, a web semntica acaba encorajando esse tipo de ao. No entanto, somente pessoas com direitos de

escrita direta sobre aquele domnio podem atualizar o significado mais diretamente associado aos termos. Ento, para atualizar o exemplo com o uso de URIs, precisamos considerar quais identificadores usar. Sempre que possvel, deve-se tentar reutilizar vocabulrios existentes. O vocabulrio Dublin Core Metadata Initiative [2] possui um conjunto bem estabelecido de vocbulos para metadados conhecidos, como o autor de uma matria. O prprio artigo, alis, eventualmente ganhar uma identidade no espao web de quem publica. Por enquanto, isso um rascunho. Imagine portanto o URI padro
http://epimorphics.com/documents/ draft#jena-1. O URI para dar cr-

ditos ao autor deve ser tratado com cuidado, porque uma pessoa no um recurso de informao na web. Essa questo, amplamente debatida, tem uma srie de solues que vo alm do escopo deste artigo. Um URI elaborado com a classe Person do vocabulrio Friend of a Friend (FOAF, ou amigo do amigo) [3], ser suficiente. Com essas mudanas, o exemplo fica assim:
<http://epimorphics.com/rdf/ staff#ian> rdf:type foaf:Person. <http://epimorphics.com/rdf/ staff#ian> dcterms:creator. <http://epimorphics.com/documents/ drafts/jena-1>. <http://epimorphics.com/documents/ drafts/jena-1> dcterms:subject Jena. <http://epimorphics.com/documents/ drafts/jena-1> rdf:type foaf:Document.

Listagem 1: Cdigo gerado pelo Schemagen no Doap.Java


01 /** URL de uma homepage de um projeto, associada com exatamente um projeto. */ 02 public static final Property homepage = m_model.createProperty( "http://usefulinc.com/ns/doap#homepage" )

Listagem 2: O ncleo do Init.java


01 public void run() { 02 if (noTDB() || hasOption( "f" )) { 03 // (re)criar a imagem TDB 04 FileUtils.deleteQuietly( getTDBFile() ); 05 FileUtils.forceMkdir( getTDBFile() ); 06 Dataset dataset = TDBFactory.createDataset( getTdbLocation() ); 07 08 // o nome do projeto um argumento requisitado 09 String projectName = getArgs()[0]; 10 String projectURI = projectNamespace() + projectName; 11 Resource project = dataset.getDefaultModel(). createResource( projectURI ); 12 13 project.addProperty( RDF.type, DOAP.Project ); 14 project.addProperty( DOAP.name, projectName ); 15 16 // adicione descries a partir de opes de linhas de comando 17 addOptionalProperty( project, DOAP.shortdesc, "s" ); 18 addOptionalProperty( project, DOAP.description, "d" ); 19 20 System.out.println( String.format( "Criada nova descrio DOAP para %s projetos com %s triples", projectName, dataset.getDefaultModel().size() ) ); 21 } 22 else { 23 System.out.println( "Logbook j existe, nenhuma ao sendo tomada" ); 24 } 25 }

Claro que poderamos entrar em muitos detalhes sobre as vrias tecnologias de web semntica: linguagens de consulta, armazenamento persistente, vocabulrios especficos e assim por diante. Para focar na prtica, no entanto, falareremos apenas sobre como os triples podem ser manipulados com cdigo Java usando o Jena.

Apache Jena
O Jena um framework Java de cdigo aberto para criar, armazenar, manipular e consultar dados semnticos na web. Foi desenvolvido originalmente por pesquisadores dos laboratrios da HP no Reino Unido e tem sido amplamente utilizado desde seu primeiro lanamento em 2001. Em 2008, o time do Jena deixou a HP e, em 2009, o Jena se tornou um projeto incubado na Apache [4]. Ao invs de listar os recursos tcnicos do Jena, vamos introduzir a abordagem de algumas partes do framework enquanto trabalhamos por meio de exemplos. Algumas linhas de terminologia bsica, no entanto, ajudaro. O grfico descrito previamente gerenciado no cdigo Jena como um

64

www.linuxmagazine.com.br

Apache Jena | TUTORIAL

objeto Model. O objeto , nos termos do Java, uma interface ou especificao abstrata que permite ao Jena fornecer vrios tipos de objetos Model (armazenado na memria, no disco, sem interferncia de disco etc.) com uma API comum. O Model uma das abstraes chaves do Jena para lidar com RDF. Um recurso no modelo, denotado por uma URI, representado por um objeto Resource, enquanto um valor, como um nmero, um Literal. O predicado que liga os ns do grfico so objetos Property, e Property uma subclasse de Resource. Finalmente, um objeto Statement representa um triple. Um determinado Statement ter um assunto Resource, um predicado Property e um objeto, que pode ser tanto um Resource quanto um Literal. Chega de teoria. Vamos ver um pouco de cdigo.

Exemplo de aplicativo
Suponhamos que voc queira compartilhar detalhes com outros desenvolvedores de cdigo aberto, como, por

exemplo, o nome do projeto, a localizao do repositrio fonte, quem est trabalhando nele e assim por diante. Felizmente, um vocabulrio j existe para gravar esse tipo de informao: DOAP (Description of a Project, ou descrio de um projeto) [5] [6]. Coincidentemente, os projetos da Apache so encorajados a usar arquivos DOAP. Embora o DOAP forme o ncleo de um caderno de notas de um aplicativo, voc deve ter a possibilidade de adicionar outras informaes que paream relevantes sem ser restringido por esquemas rgidos de dados. Projetar uma ferramenta visual rica em recursos para criar e editar arquivos DOAP est alm do escopo deste artigo. Em vez disso, tenho a meta de criar um conjunto de ferramentas de linhas de comando e atualizar um dirio de bordo, imprimir um relatrio e enriquec-lo ao mesclar informaes a partir de uma fonte externa. O objetivo deste miniprojeto gerar e manter dados DOAP para um projeto em particular; assim, eu presumirei

Listagem 3: Consultar o ref:type


01 /** O recurso com URI tem rdf:type t? */ 02 public boolean hasType( String u, Resource t ) { 03 return getModel().getResource( u ).hasProperty( RDF.type, t ); 04 }

que os dados DOAP esto armazenados no diretrio do prprio projeto. Com o tempo, meu objetivo poder ser o de desenvolver a ferramenta para armazenar mais do que simples dados DOAP, talvez at incluir controle de tempo, entre outras informaes. Por essa razo, vou generalizar o nome e cham-lo simplesmente de Projeto Dirio de Bordo, representado pelo termo plb. Para brincar com o cdigo, veja o quadro 1. Uma escolha razovel para o projeto seria armazenar os dados em um simples arquivo RDF. No entanto, como meu o objetivo ilustrar os vrios recursos do Jena, vamos armazenar o RDF gerado em um triplestore persistente. O Jena tem uma srie de solues de armazenamento RDF persistentes. Vamos usar o TDB, customizado para triplestore, com a capacidade de armazenar um grande nmeros de triples com eficincia sem requerer um banco de dados relacional adicional, como o MySQL, por exemplo. O TDB pode suportar ordens de magnitude muito maior que aquelas que eu vou gerar agora, mas ele torna bem direta a tarefa de atualizar o banco de dados persistente.

Quadro 1: Teste o cdigo


Para o projeto, voc precisar de um compilador Java que suporte Java 1.6. Eu estou usando tambm o Maven para gerenciar o Jena e outras bibliotecas dependentes. Ento, voc precisar da verso mais recente do mvn. Finalmente, o cdigo est no repositrio Git e o exemplo tambm lida com metadata Git, de modo que voc precisar do Git instalado. O pom.xml, no diretrio raiz do projeto, lista as dependncias de software. O Maven instalar todos automaticamente como necessrio. Para clonar o projeto do repositrio Git, use o seguinte comando: git clone git@codebasehq.com: epimorphics/epimorphics-open/ jena-plb-tutorial.git

Listagem 4: Acumular documentos RDF descobertos por meio do sindice.com


01 // fase de leitura: adicione os documentos em um modelo combinado 02 Model m = ModelFactory.createDefaultModel(); 03 for (ResIterator i = sIndex.listSubjectsWithProperty( RDF.type, Sindice.Result ); i.hasNext(); ) { 04 String docURL = i.next().getPropertyResourceValue( Sindice.link ).getURI(); 05 06 // poderamos ser mais sofisticados sobre a provenincia dos recursos 07 try { 08 m.read( docURL ); 09 } 10 catch (RuntimeException e) { 11 // alerte sobre falha de leitura, mas siga na leitura de outros documentos 12 log.warn( String.format( Failed to retrieve from %s because: %s, docURL, e.getMessage() ) ); 13 } 14 }

Linux Magazine #80 | Julho de 2011

65

TUTORIAL | Apache Jena

Incio do projeto
O problema tem quatro componentes: inicializar o projeto, atualizar a descrio DOAP manualmente, aumentar a descrio automaticamente e reportar o perfil DOAP. Cada componente chamado pela linha de comando (quadro 2). Inicializar o projeto algo direto: voc precisar criar o elemento de armazenamento TDB (ou recriar se o usurio quiser forar a criao de um novo elemento de armazenamento) e adicionar um recurso root para representar o projeto DOAP que estou descrevendo. Criar um elemento de armazenamento TDB requer um diretrio para os dados vamos usar o ./.plb/tdb por padro e um chamado Java. O chamado uma linha getTdbLocation(), mtodo que retorna uma string especificamente no diretrio TDB.
Dataset dataset = TDBFactory. createDataset( getTdbLocation() );

um recurso pode ser membro de muitas classes ao mesmo tempo. Obter o cdigo Java para fazer com que o recm criado projeto seja membro da classe doap:Project vai requerer um novo triple, com o projeto como assunto, o predicado especial rdf:type como propriedade e um recurso denotando a classe doap:Project como um objeto. O URI doap:Project no muda (a no ser que o esquema mude), ento este ser definido como constante. Embora seja possvel escrever manualmente a declarao de uma constante no cdigo, correramos o risco de fazer erros de transcrio e criar problemas de manuteno com a mudana de esquema. Felizmente, o Jena oferece uma ferramenta que gera um cdigo Java automaticamente a partir de um arquivo RDFS, o schemagen. A classe Java gerada define constantes para cada uma das classes, propriedades e recursos in-

dividuais definidos no arquivo. A ferramenta Schemagen pode ser executada a partir da linha de comando ou como um plugin Maven [7]. Uma amostra do cdigo gerado aparece na listagem 1. Os vocabulrios completos esto includos no projeto para download. Considerando que eu tenho acesso s propriedades e classes DOAP por meio da classe DOAP.java, o incio do projeto direto, como mostrado na listagem 2.

Incluso manual no dirio de bordo


Muitos bits de informao til sobre um projeto devem ser capturados, inclusive as vrias propriedades diferentes utilizadas pelo DOAP. Assim, eu quero que meus usurios possam adicionar informaes de forma incremental. No entanto, necessrio atingir um balano na interface apre-

Listagem 4: Acumular documentos RDF descobertos por meio do sindice.com


01 // fase de leitura: adicione os documentos em um modelo combinado 02 Model m = ModelFactory.createDefaultModel(); 03 for (ResIterator i = sIndex.listSubjectsWithProperty( RDF.type, Sindice.Result ); i.hasNext(); ) { 04 String docURL = i.next().getPropertyResourceValue( Sindice.link ).getURI(); 05 06 // poderamos ser mais sofisticados sobre a provenincia dos recursos 07 try { 08 m.read( docURL ); 09 } 10 catch (RuntimeException e) { 11 // alerte sobre falha de leitura, mas siga na leitura de outros documentos 12 log.warn( String.format( "Failed to retrieve from %s because: %s", docURL, e.getMessage() ) ); 13 } 14 }

Criar o recurso root para o projeto conceitualmente simples: preciso somente um URI para denotar o projeto e esse deve ser atribudo ao doap:Project. Aqui, doap: o componente namespace do URI e se expande para http://usefulinc.com/ns/doap#, enquanto Project o nome de uma classe RDFS. Matematicamente, classes RDFS (RDF Schema ou Esquema RDF) correspondem a conjuntos de coisas que compartilham caractersticas semelhantes o conjunto de todas as coisas que so descries de projetos, por exemplo. Para desenvolvedores, interessante pensar nas classes RDFS como anlogas aos types na linguagem Java ou outras linguagens de programao. Tenha em mente, no entanto, que as classes Java e as classes RDFS tm diferenas importantes. Em particular, medida que voc descobre mais informaes sobre um recurso, voc poder achar que se trata de um membro de uma classe que voc no sabia de que fazia parte. Alm disso,

Listagem 5: Modelo de consulta


01 String queryString = String.format( "describe ?s where {?s <%s> \"%s\"}", FOAF.mbox_sha1sum.getURI(), mboxSha1 ); 02 // analise a consulta 03 Query query = QueryFactory.create( queryString ) ; 04 // vincule ao modelo 05 QueryExecution qexec = QueryExecutionFactory.create( query, collected ); 06 // faa a consulta 07 dev.getModel().add( qexec.execDescribe() );

66

www.linuxmagazine.com.br

Apache Jena | TUTORIAL

sentada aos usurios. Como no h modelo de dados fixo, o RDF permite que qualquer predicado seja anexado a qualquer recurso, algumas vezes declarado como qualquer um pode dizer qualquer coisa sobre qualquer coisa. Esse modelo pode ser muito poderoso, mas tanta abertura pode dificultar as coisas. Por exemplo, h algumas restries na estruturao da interao do usurio. Nesse caso, no espero que os usurios digitem uma propriedade URI completa ou linha de comando s para adicionar um triple para a descrio do projeto; ento, permitirei que qualquer propriedade no vocabulrio do DOAP seja abreviada somente com seu nome de local, menos o namespace. Os usurios digitaro algo como:
$> plb set language Java $> plb set -r release 1.0.1

tos. A definio da classe completa pode ser encontrada no download. Com Jena, toda informao de estado mantida no objeto Model. No entanto, um objeto Resource contm referncia para o Model que o contm. Ento, eu posso perguntar ao Resource pelos seus triples relacionados, ou seja, pergunto se um determinado URI corresponde ao recurso com um rdf:type em particular (aqui atribudo ao parmetro type; listagem 3). Dado um Resource denotando o projeto, posso adicionar um novo triple com esse recurso como um assunto, usando o mtodo addProperty. J que eu optei por usar um modelo baseado em TDB persistente, eu no preciso fazer uma chamada separada para salvar os triples atualizados no disco.

Esses dois comandos adicionam valores para doap:language e doap:release; a bandeira -r substitui um valor existente armazenado. O cdigo RDF especfico na classe de ao Set pequeno: a maior parte do cdigo ocupada com checagem de rotina e manipulao de argumen-

Dados automticos no dirio de bordo


At ento, eu criei um novo dirio de bordo usando TDB e uma armazenagem triple, defini um recurso para representar o projeto e permiti

que os usurios anexassem algumas propriedades linha de comando. um comeo slido, mas no fez muito ainda pela web semntica e os princpios de dados ligados. Meu projeto tem alguns desenvolvedores. Deste modo, vamos assumir que eu quero anotar no meu dirio de bordo quaisquer informaes que possam ser coletadas sobre eles para ter a viso mais fiel possvel sobre o projeto. Para evitar questes de privacidade, vamos usar somente informaes pblicas. Qual seria a estratgia? Se o projeto est usando um sistema de gerenciamento de recursos, posso listar todos eles facilmente. Nesse tutorial, vou presumir que o cdigo gerenciado por um repositrio Git. Algum processamento simples do log do Git listar os desenvolvedores por nome e e-mail e podemos usar o endereo de e-mail como uma chave para reunir mais dados. Amigo do amigo (Friend of a Friend ou FOAF [8]) outro vocabulrio RDF usado amplamente. As pessoas utilizam FOAF para publicar dados pessoais, como

Listagem 6: Listar todos os desenvolvedores do projeto


01 $ sp="prefix foaf: <http://xmlns.com/foaf/0.1/> prefix doap: <http://usefulinc.com/ns/doap#> prefix plb: <http://www.epimorphics.com/tutorial/plb#> prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 02 $ tdbquery --loc=.plb/tdb "$sp select ?p ?e ?w {?p a doap:Project . ?p doap:developer ?d. optional {?d foaf:mbox ?e ; foaf:homepage ?w}}" 03 -------------------------------------------------------------------------------04 | p | e | w | 05 ================================================================================ 06 | plb:plb | "mailto:i.j.dickinson@gmail.com" | <http://www.iandickinson.me.uk> | 07 | plb:plb | "mailto:ian@epimorphics.com" | <http://www.iandickinson.me.uk> | 08 --------------------------------------------------------------------------------

Listagem 7: Listar todas as propriedades do projeto


01 02 03 04 05 06 07 08 09 10 $ tdbquery --loc=.plb/tdb "$sp select ?p ?o where {?proj a plb:root . ?proj ?p ?o} order by ?p" ---------------------------------------------------------------------------------------| p | o | ======================================================================================== | doap:description | "A Jena tutorial showing how to create DOAP project descriptions" | | doap:developer | <http://www.iandickinson.me.uk/rdf/foaf#ian> | | doap:name | "plb" | | doap:shortdesc | "Jena PLB tutorial" | | rdf:type | doap:Project | ----------------------------------------------------------------------------------------

Linux Magazine #80 | Julho de 2011

67

TUTORIAL | Apache Jena

websites, detalhes de contato, interesses e amigos que conhecem por referncia de perfis de outros amigos. A princpio, eu poderia usar esses detalhes do log inicial para procurar informaes pblicas dos membros e adicionar automaticamente ao dirio de bordo. Na histria inicial do FOAF, a prtica de disfarar endereos de e-mail para evitar spams era uma medida comum contra estes; assim, precisamos buscar pela soma SHA1 dos endereos de e-mail dos meus desenvolvedores. Um algoritmo ideal para obter essa informao seria:
for each unique committer C let m be the email address of C let s be sha1( m ) run the sparql query: describe ?person where {?person foaf:mbox_sha1sum value of s}

A linguagem SPARQL a padro para fazer consultas em armazenagens triple RDF e totalmente suportada pelo Jena. Ela tem quatro verbos de consulta:

Quadro 2: Empacotador de linhas de comando


Uma variedade de comandos pode ser executada de um shell. Em vez de um script Bash para cada um deles, um script empacotado, plb, pode chamar um conjunto de comandos diferentes. Veja o exemplo: plb init test-project O script Bash plb chama um programa Java para desempenhar o comando predenido no primeiro argumento, com a conveno de que um comando cmd corresponde a classe Java com.epimorphics.plb. Cmd. Para ter dependncias no caminho da classe, o script empacotador executa o programa com mvn:exec, que, por sua vez, executa um programa Java arbitrrio com todas as dependncias do pom.xml, baixando as dependncias que faltam antes, se necessrio. O script Bash est no diretrio bin do projeto plb.

select: entrega linha de valores correspondentes, semelhante s armazenagens relacionais SQL; ask: confirma se um padro de consulta pode ser correspondido; construct: cria um novo grfico com o uso de templates e padres e consultas; describe: transfere a responsabilidade de retornar uma descrio til de um recurso para um servidor, suportando especificamente o caso no qual o cliente no sabe a estrutura do grfico contendo um recurso em particular. Tipicamente, o servidor retorna algum tipo de descrio vinculada [9]. O ponto chave, aqui, que o cliente meu programa no sabe os esquemas que podem ser usados para anotar um recurso particular, razo pela qual os verbos descritos so teis para obter um conjunto de dados que podem ser processados localmente. O nico problema com meu algoritmo, que, no momento da escrita, um servio disponvel publicamente que agregava dados FOAF de mltiplos pontos de publicao ficou indisponvel. No entanto, o projeto de servio de pesquisa Sindice [10] proporciona um ndice navegvel para todos os documentos RDF que possam ser detectados. Posso emendar meu algoritmo da seguinte maneira: for each unique committer C let m be the email address of C let s be sha1( m ) query sindice.com for docs mentioning s for each found document accumulate the doc into local model L run the sparql query against model L: describe ?person where {?person foaf:mbox_sha1sum valor do s}

Jena, contendo recursos denotando os desenvolvedores no projeto, cada um com um foaf:mbox denotando seu endereo de e-mail como dado ao Git. O que so esses recursos, no entanto? Uma vez que eu no sei as reais identidades dos desenvolvedores, apenas um dos endereos de e-mail, que recurso URI deve ser usado para denotar cada desenvolvedor? Eu poderia criar um identificador, porm o RDF tambm permite um tipo especial de recurso chamado recurso annimo (anonymous resource). Esse recurso age como qualquer outro, exceto pelo fato de no ter identidade conhecida. Por razes histricas, normalmente chamado de bNode, que pode ser usado como um alocador de recurso, sobre o qual conheo a existncia e propriedades, mas no conheo a identidade. No exemplo plb, eu crio bNodes para denotar os desenvolvedores antes de reunir informaes sobre eles de fontes pblicas. A API Sindice muito fcil: s chamar http://sindice.com/search?q= com o termo de busca depois do sinal de igual (=). Esse endereo usa negociao de contedo HTTP para determinar o formato no qual deve retornar resultados, o que faz da busca algo muito natural para o Jena, uma vez que o mtodo Model. read() faz com que o tipo favorito de contedo v ao RDF. Para procurar por todos os documentos que mencionam uma caixa de correio SHA1 em particular, mboxSha1, tudo o que eu tenho de fazer digitar:
Model sIndex = ModelFactory. createDefaultModel(); sIndex.read( http://api.sindice. com/v2/search?q= + mboxSha1 );

A princpio, o programa poderia obter uma lista de desenvolvedores de qualquer fonte de sistema de gerenciamento, no entanto o tutorial somente lida com o repositrio Git. O retorno daquela parte de cdigo um Model do

O Model resultante contm um conjunto de recursos sindice:Result denotando as buscas. Para cada uma das buscas, eu tento executar o link para o documento original, tendo em mente que isso pode falhar se o documento foi indexado h algum tempo. A listagem 4 mostra o processo.

68

www.linuxmagazine.com.br

Apache Jena | TUTORIAL

Dado um modelo que contenha triples potencialmente relevantes e acumuladas, eu posso executar a consulta descrita (listagem 5). Aqui, collected (linha 5) o modelo contendo os triples dos documentos que foram coletados da web e dev (linha 7) so os recursos para o desenvolvedor sendo adicionados descrio do projeto. Resta um passo. Eu utilizei muitas informaes da web. O modelo inclui uma srie de fontes denotando a mesma pessoa, alguma delas sendo bNodes; e eu gostaria de simplificar o grfico, mesclando essas fontes redundantes. O Jena no tem uma ferramenta interna para fazer isso, mas no difcil com a propriedade foaf:mbox_ sha1sum, que uma boa chave de desambiguao. Em geral, esse tipo de mesclagem de informao pode ser bem complexo, mas no com essa simples abordagem. Finalmente, adicionei os resultados da consulta describe para meu modelo TDB persistente.

faz esse trabalho. No entanto, a combinao de um formato flexvel de dados e a habilidade de mesclar informaes de mltiplas fontes na web mostra as possibilidades tanto do Jena em relao abordagem de web semntica e dados vinculados em geral. O Jena est, atualmente, incubado na Apache, e contribuies so bem vindas: bugs, sugestes, correes etc. Mais informaes esto disponveis no site do Jena.

Gostou do artigo? tigo?


Queremos ouvir sua opinio. ua Fale conosco em m cartas@linuxmagazine.com.br gazine.com br Este artigo no nosso site: osso te: http://lnm.com.br/article/5494 br/art /549

Mais informaes
[1] What is Data Science? por Mike Loukides, OReilly Radar, junho de 2010: http://radar. oreilly.com/2010/06/ what-is-data-science.html [2] Dublin Core Metadata Initiative: http:// dublincore.org/ [3] Vocabulrio FOAF: http:// xmlns.com/foaf/spec/ [4] Projeto Apache Jena: http:// incubator.apache.org/jena [5] Vocabulrio DOAP: http:// usefulinc.com/ns/doap# [6] Pgina DOAP: http:// trac.usefulinc.com/doap [7] Cdigo-fonte Jena: http:// jena.sourceforge. net/downloads.html [8] Projeto Friend of a Friend: http://www. foaf-project.org/ [9] Descrio vinculada: http://goo.gl/rOjmt [10] Servio Sindice: http:// www.sindice.com/

Relatrios
A SPARQL til tambm quando quero produzir relatrios simples a partir do dirio de bordo. O comando tdbquery est disponvel na instalao completa do Jena e executa uma consulta contra um modelo TDB da linha de comando. Por exemplo, eu poderia listar todos os desenvolvedores no projeto com os seus sites, se conhecidos (listagem 6), ou listar cada propriedade do projeto (listagem 7). Obviamente, eu poderia escrever relatrios muito mais abrangentes, mas precisaria de tutoriais separados para isso.

Concluso
Meu objetivo com este artigo foi introduzir os recursos Jena para uma tarefa prtica. No pretendo, com isso, oferecer a melhor forma de gerar perfis DOAP. Na verdade, o plugin Maven

Linux Magazine #80 | Julho de 2011

69

TUTORIAL | VoIP com Asterisk - parte IX

Asterisk descomplicado

TUTORIAL

VoIP com Asterisk parte IX


O sistema telefnico ultrapassado, presente at pouco tempo atrs nas empresas, prolco em cobranas: cada novo recurso ativado requer uma nova ativao de servio, com o preo adicionado ao pagamento mensal. hora de mudar. hora de criar sua prpria central VoIP. por Stefan Wintermeyer

a edio 79 da Linux Magazine, voc aprendeu sobre como provisionar suas extenses atravs de DHCP, recursos de lista telefnica e redirecionamento de chamadas. Nesta edio, vamos abordar o provisionamento de ramais via DHCP, para implantao em massa de ramais com um nico arquivo de configurao. Vamos ver ainda como trabalhar com agenda telefnica. Mos a obra!

bytes do endereo MAC do dispositivo e cria uma sequncia de ramais. Ento, para o servidor DHCP, o telefone no apenas uma configurao de rede, mas tambm o nome de um servidor TFTP e um arquivo de inicializao do ramal com seu respectivo nome.

O telefone Snom converte o endereo MAC do aparelho de bootfile-name por um endereo {} mac (para outros telefones pode ser necessrio instalar o mdulo Mod_rewrite do Apache). Isto garante ao servidor de provisionamento que

Listagem 1: dhcpd.conf
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ;; Chamar o ramal 1234567 ;exten => 1234567,1,Verbose(${CALLERID(num)}) exten => 1234567,n,GOToIf($[${CALLINGPRES}=35]?abuse1|1) exten => 1234567,n,Dial(SIP/1001,30) exten => 1234567,n,Playback(local/ed-greeting) exten => 1234567,n,VoiceMail(1001@default) exten => 1234567,n,Hangup() ;; Tratamento de chamadas annimas ; Local dos arquivos de udio abaixo ; /var/lib/asterisk/sounds/local ;exten => abuse1,1,Answer exten => abuse1,n,Wait(1) exten => abuse1,n,Monitor() exten => abuse1,n,Playback(local/ed-greeting_offenders) exten => abuse1,n,WaitForSilence(500) exten => abuse1,n,Playback(local/ed-ola) exten => abuse1,n,WaitForSilence(500) exten => abuse1,n,Playback(local/ed-assinatura_nao_reconhecida) exten => abuse1,n,WaitForSilence(1200) exten => abuse1,n,Playback(local/ed-entao_o_que_posso_fazer_por_voces) exten => abuse1,n,WaitForSilence(1000) exten => abuse1,n,Playback(local/ed-o_que_especificamente) exten => abuse1,n,WaitForSilence(2000) exten => abuse1,n,Wait(1) exten => abuse1,n,Playback(local/ed-numero_restrito) exten => abuse1,n,Playback(local/ed-infelizmente_sou_apenas_um_computador) exten => abuse1,n,StopMonitor() exten => abuse1,n,VoiceMail(1001@default) exten => abuse1,n,Hangup

Provisionamento por DHCP


A implantao de ramais em massa, definida como um processo onde vrios telefones equipados com uma nica configurao passam a funcionar automaticamente. O software Amooma Gemeinschaft, (Comunidade) [1] abordado na edio anterior, usa para o provisionamento coletivo de ramais, um mtodo que poderia ser aplicado em instalaes de outros procesos tecnolgicos: um servidor DHCP busca todos os telefones e confere a cada um uma URL que corresponde ao seu respectivo arquivo de configurao. Um exemplo de configurao de ramais em massa via DHCP pode ser conferido na listagem 1. Comumente utilizados na telefonia VoIP, os telefones Snom [2] lem os logs do servidor DHCP, sendo assim, o aparelho reconhece os trs primeiros

70

www.linuxmagazine.com.br

VoIP com Asterisk - parte IX | TUTORIAL

Figura 2: O Snom 370 mostra a agenda de contatos Figura 1: Agenda de telefones do software Comunidade.
usando o navegador XML do servidor Asterisk.

o dispositivo MAC ir receber um cabealho HTTP com um nome, como por exemplo, Snom 370. Um script PHP chamado gera a configurao ao iniciar. A configurao para cada fabricante diferente, com um telefone Snom em um caso simples como na listagem 2 voc pode transformar qualquer extenso e personalizar as teclas do telefone. Com o Comunidade tambm possvel configurar os botes em uma interface web (gura 1). J os telefones Aastra permitem que voc selecione uma variedade de configuraes do servidor de provisionamento os telefones Snom tem muito a melhorar neste quesito.

voc pode enviar a configurao e efetuar o reincio do aparelho atravs de um dispositivo SIP Notify personalizado, como o arquivo /etc/asterisk/ sip_notify.conf ilustrado a seguir:
[snom-check-cfg] Event=>check-sync;reboot=false Content-Length=>0 [snom-reboot] Event=>reboot Content-Length=>0

Agora digite o comando sip notify snom-check-cfg 1234 no terminal, para carregar a nova configurao no telefone. O comando no Shell uma chamada equivalente ao comando asterisk -rx \sip notify snom-check-cfg 1234\.

Muitos usurios usam o recurso de encaminhamento de chamadas para os telefones, e o Comunidade as efetua de forma centralizada no servidor, gravando logs de cada uma delas. Elas podem ser configuradas atravs da interface web ou um cdigo de servio no telefone. Na prxima edio da Linux Magazine, na ltima parte deste tutorial, voc ir aprender como trabalhar com scripts automatizados. At l!

Listagem 2: Congurao do telefone Snom


01 02 03 04 05 06 07 08 09 language: English time_24_format: on date_us_format: off user_host1: 192.168.1.130 user_name1: 1234 user_pname1: 1234 user_pass1: Sippasswort user_realname1: Paula Plauder active_line: 1

Releitura da congurao
A maneira mais fcil de configurar um telefone Snom novo, realizando um reboot neste, chamando em conjunto o script:
wget -q -O /dev/null -o /dev/null http://UIP_do_ telefone/confirm.htm?REBOOT=yes

Agenda e encaminhamento
Em uma empresa, no pode faltar uma agenda telefnica centralizada, com a qual todos os telefones se comuniquem e todos os seus usurios tenham acesso. Todos os kits de ferramentas do Asterisk fornecem uma agenda de telefones em uma interface web interativa, e que pode ser personalizada de acordo com a necessidade do usurio, conforto que depende do telefone conectado (alguns telefones no interagem bem com o Comunidade). O software tambm permite que a agenda de telefones seja exibida no visor do aparelho (gura 2), atravs de um navegador XML. Outros recursos presentes no visor do telefone incluem funo de busca e ordenao.

Mais informaes
[1] Amooma Gemeinschaft ou Comunidade: http://www. amooma.de/gemeinschaft/ [2] Srie de telefones Snom: http://www.snom.com/ de/products.html

No entanto, assume-se que o servidor Snom local (o do prprio aparelho) est habilitado e que no h nenhuma proteo por senha. Mas, se uma senha estiver configurada, informe-a no comando wget. Aps a reinicializao do aparelho, a nova configurao do servidor de provisionamento do aparelho ser lida. Alternativamente,

Gostou do artigo? tigo?


Queremos ouvir sua opinio. pinio. m Fale conosco em cartas@linuxmagazine.com.br azine.com. Este artigo no nosso site: osso e: br/art 551 http://lnm.com.br/article/5515

Linux Magazine #80 | Julho de 2011

71

PROGRAMAO | Open Search Server

Servidor de busca aberto

PROGRAMAO

Busca com qualidade


Analisamos a ferramenta de indexao Open Search Server e mostramos como integrar o recurso de busca ao seu website utilizando PHP. por Markus Feilner, Thomas Pfeiffer e Markus Heller

startup (empresa de tecnologia recm criada) francesa Jaeksoft foi criada em fevereiro de 2010. Apenas um anos depois, o fabricante lanou a verso 1.2 de sua ferramenta de busca e indexao, o Open Search Server [1]. Sua relativa imaturidade evidente, assim como alguns aborrecimentos. Mas tambm h uma quantide de recursos impressionantes.

Indexao livre
De acordo com seu fornecedor, o Open Search Server (OSS) vai vasculhar sistemas de arquivos, bancos de dados e sites para criar rapidamente ndices confiveis e dar suporte a um processo preciso de investigao. Em outras palavras, voc pode usar o OSS

para adicionar funes de busca a um website ou outro banco de dados e pode at construir uma mquina de busca agregada para indexar e buscar dados de mltiplas fontes na Internet. O indexador OSS suporta uma longa lista de formatos de arquivos. Uma API est disponvel para acesso rpido e sem complicao a resultados e a maioria de seus muitos recursos (gura 1). O alicerce da ferramenta o Java em um servidor Tomcat [2]. O mecanismo de busca Lucene [3] permite que administradores e desenvolvedores usem sua sintaxe de interpretador de consultas e funes de classificao fora do gerenciamento da interface (quadro 1). O OSS depende do Quartz [4] como agendador. A interface, rpida e

flexvel, implementada em Zkoss [5] e funciona com qualquer navegador compatvel com Ajax.

Suporte corporativo
Alm da variante livre, lanada sob muitas licenas (incluindo AGPL e GPLv3) por conta de sua estrutura modular, o fornecedor, a Jaeksoft, tambm oferece uma verso corporativa, com suporte opcional, acordo de nvel de servio (Service Level Agreement - SLA) e recurso avanado na forma de mdulos instalveis. O fornecedor tambm oferece desenvolvimento, implementao e otimizao dos mdulos adicionais. A verso Community facil de instalar: faa o download do arquivo tar.gz do site, abra-o em um servidor web e execute start.sh no shell (start.bat no Windows). So necessrios um servidor de web em funcionamento com PHP5, php5-curl e Java Runtime Environment. O pacote no inclui um script init; se voc deseja executar o servidor permanentemente, importante prestar ateno no manual. Infelizmente, o wiki do OSS [6] no oferece mais do que detalhes sobre o procedimento de instalao. Para esse artigo, usamos a verso open-search-server-1.2.1-r987. tar.gz de 30 de maro de 2011.

Figura 1 Lucene, Tomcat e uma API exvel combinados no Open Research Server.

72

www.linuxmagazine.com.br

Open Search Server | PROGRAMAO

Primeiro contato
A pasta apache-tomcat-6.0.32 no pacote compactado contm alguns caracteres familiares: o aplicativo do servidor Tomcat vem pr-configurado com seus binrios, arquivos de log e de configurao. Se algo no funciona, cheque o arquivo de log catalina.out. O Tomcat oferece dicas teis caso algo no funcione em sua instalao. Os ndices ficam no diretrio data, onde voc tambm encontrar um subdiretrio com a configurao em arquivos HTML. Voc pode usar um script ou adicionar URLs e padres aqui, mas vai precisar reiniciar o OSS depois de fazer isso.

Os modos disponveis aqui so full, cluster e optimized. Por causa da falta de documentao, a nica forma de descobrir qual modo melhor para

o seu projeto experimentando. Snippet fields (tambm presente na Query tab) define o formato de sada. Voc pode definir os campos e seus

Quadro 1: Lucene
O corao de qualquer mecanismo de busca moderno o indexador. O indexador escalonvel criado usando a biblioteca livre do Lucene Java trabalha bem se comparado com mecanismos de busca comerciais.

Analisador, Indexador e Fields


O princpio fundamental simples: um analisador separa um documento e distribui os metadados deste e componentes de texto por campos predenidos. Ento, o criador de ndice cria o ndice em si. O criador de ndice tipicamente um transdutor automtico, que leva voc a uma lista de links quando introduzido um termo. Especialistas referem-se a isto como arquivos invertidos, porque um ndice corresponde mais ou menos ao trabalho original. Entretanto, os trabalhos no so mais armazenados na sua ordem natural, mas sim em ordem alfabtica com um apontador para suas posies originais. Criar e manter a mquina em funcionamento e garantir armazenamento compacto dos link no arquivo do sistema normalmente uma tarefa arriscada que o Lucene realiza de uma forma muito elegante. Ele facilmente alcana um desempenho de indexao de 30MBps em uma mquina moderna, enquanto reduz o texto original em torno de 20% no ndice. Obviamente, esse processo depende da extenso para a qual o mecanismo de busca acessa o documento e o distribui pelos campos.

A interface web
Depois de iniciar, o Tomcat escuta a porta padro 8080. Voc deve manter essa porta atrs do firewall para evitar acessos no autorizados e deix-la disponvel apenas para servios locais. Se voc usar seu nvegador para acessar a URL http://localhost:8080//, ser levado interface de gerenciamento, que inicialmente apenas mostra as abas Index e Privileges. Voc pode comear criando um novo ndice ou usurio com privilgios. Modelos esto disponveis para ndices (ndice vazio, buscador de arquivo e buscador web). Depois, voc pode selecionar um ndice para editar. Uma vez carregado o ndice, marcaes de tempo so adicionadas ao menu do OSS, como na gura 2. A falta de documentao pode fazer com que as abas, opes de configurao e itens secundrios sejam um pouco confusos. Entretanto, os modelos (templates) e funes autoexplicativas so fceis de serem iniciados. O atributo Schema permite a edio de detalhes nas funes de busca; Query permite a formulao de buscas ou coordena o formato do resultado de sada. O OSS pode confrontar os resultados (Query > Collapsing) caso critrios especficos permitam a concluso de que sites idnticos existem.

Boost e Page Rank


Um programador pode usar os campos oferecidos para dar, por exemplo, uma ateno especial aos ttulos, dando mais peso a esse elemento, ou usando metadados externos, como nome ou autor do arquivo. Se o termo de busca ocorre nestes campos, o elemento indexado recebe um valor de ranking mais alto do que se apenas ocorresse em algum lugar no corpo do texto. O levantamento correto destes campos vai levar ao tipo de ranking que os usurios querem encontrar. O Lucene pode tambm analisar campos individuais de uma forma focada ou us-los para busca de resultados. Alm das anlises booleanas relativamente entediantes, voc pode tambm realizar buscas com coringas ou tolerantes a erros. O objetivo aqui no apenas encontrar resultados com prexo idntico (como em SQL com Linux Mag%), mas tambm com graas diferentes. Graas ao mtodo Levenshtein Distance, voc pode denir sua prpria sintaxe para descobrir todas as variveis ortogrcas do Schmie?[dt] + (Schmid/Schmit/Schmidt, com ou sem um e depois do i) ou M[ae][iy]e?r (Meyer/Mayer/Maier/etc.) sem comprometer o desempenho.

Mantenha distncia!
Qualquer tipo de anlise a distncia recebe suporte do operador de proximidade (~) em anlises com mltiplas palavras. Ele encontra todos os tipos de sees de textos nos quais vrias palavras ocorrem at a distncia mxima de uma para a outra. Em contraste com documentos estticos ou levantamento de campos, isso signica que voc pode levantar mais termos que os outros durante o tempo de execuo. O termo operador de boost (^) tambm permite que voc interprete chaves de busca individuais como mais importantes do que outras com consultas de mltiplas palavras. Resumindo, usurios tpicos no precisaro se preocupar com estas coisas em um mecanismo de busca ideal, porque os resultados mais relevantes estaro no topo da lista de qualquer forma mesmo que no seja utilizado operadores. O indexador do Lucene inclui um grande nmero de ferramentas para lidar com isso.

Linux Magazine #80 | Julho de 2011

73

PROGRAMAO | Open Search Server

tamanhos aqui e, ento, configurar a lista de resultados. A aba Crawler onde voc especifica o alvo de sua busca: websites, bancos de dados ou sistemas de arquivos. Vrios filtros esto disponveis para auxili-lo a modificar isso. A gura 2 mostra a subjanela do Crawl process para uma mquina que est indexando o site inteiro da Linux Magazine.

Uma das configuraes pode ser mal interpretada: se voc for levado a achar que precisa aumentar ao mximo o nmero de sites por host para um servidor web com grande quantidade de contedo, vai provavelmente cair em uma armadilha. O valor somente diz ao OSS quantas pginas recuperar na sesso antes de adicion-las em seu ndice. Se voc configurar este valor muito alto, usar memria RAM demais ou

possivelmente ver a mensagem de erro ilustrada na gura 3. Em muitos casos, o OSS ou Java congela quando no tem mais memria. Se voc quer criar um ndice de um site grande, certifique-se de que tenha memria suficiente em seu sistema. Para alocar 2 GB de RAM no Java Virtual Machine, voc simplesmente precisa adicionar as duas linhas seguintes ao seu script de inicializao:
CATALINA_OPTS=-Xms2G -Xmx2G -server export CATALINA_OPTS

possvel usar mais do que 2 GB em um sistema operacional de 64 bits com Java de 64 bits. Neste caso, as opes a seguir permitem 6 GB de memria RAM para o Java:
CATALINA_OPTS=-d64 -Xms6G -Xmx6G -server export CATALINA_OPTS

Figura 2 OSS pesquisando o website da Linux Magazine. O nmero mximo de


URLs por campo de host completamente equivocado. Se voc entrar com um valor mais alto aqui, a memria se esgotar rapidamente.

Figura 3 Zkoss apontando um aviso do Java heap space essa mensagem


tipicamente refere-se falta de memria RAM para o JVM.

Listagem 1: Consulta OSS


01 02 03 04 05 06 07 08 09 10 11 12 13 title:($$)^10 OR title:("$$")^10 OR titleExact:($$)^10 OR titleExact:("$$")^10 OR url:($$)^5 OR url:("$$")^5 OR urlSplit:($$)^5 OR urlSplit:("$$")^5 OR urlExact:($$)^5 OR urlExact:("$$")^5 OR content:($$) OR content:("$$") OR contentExact:($$) OR contentExact:("$$")

Ferramentas de monitoramento, tais como Darkstat [7], nos repositrios Debian, monitoram o trfego que isso cria ao mesmo tempo (gura 4). Alguns firewalls ou servidores web classificam ondas de consultas muito frequentes como um ataque de negao de servio (DoS) e bloqueiam o cliente. De acordo com o fornecedor, o OSS capaz de indexar 16 linguagens; pode identificar palavas inteiras, fragmentos, ou variantes de uma forma bsica (radical [8]). A lista dos formatos de documentos inclui XML, HTML/XHTML, PDF, Microsoft Word, PowerPoint, OpenOffice.org, RTF, texto puro (plaintext), Torrent, arquivos de udio (MP3/MP4, OGG, FLAC, WMA) e muitos outros. Para uma completa lista da instalao atual, veja em Schema/Parser list.

Consulta e lema
Consultas podem ser implementadas como consultas HTTP via interface XML e integradas ao seu website por meio de uma biblioteca de cliente

74

www.linuxmagazine.com.br

Open Search Server | PROGRAMAO

PHP. A interface de gerenciamento tambm oferece uma tela de entrada em Query/Edit/Query, que pode ser usada para buscas no ndice. A listagem 1 mostra as especificaes padro para a verso anterior, mas que tambm funciona na 1.2 e facilmente extensvel. A chave de busca representada por $$; ^ seguido de um nmero que define o peso; palavras-chave como title ou urlSplit definem onde e como exatamente o termo de busca pode ocorrer. O problema est frequentemente nos detalhes: enquanto o urlSplit reduz a URL http://www.open-search-server.com para a forma normalizada http, www, ope, search e serv, o urlExact interpreta a mesma URL como os elementos http, www, open, search e server. De acordo com os desenvolvedores, o OSS usa diferentes analisadores para tal: o analisador de texto identifica grafias similares, enquanto o urlExact, titleExact e contentExact usam o analisador padro. Na aba Scheduler, voc pode criar cronjobs para controlar o OSS por exemplo, para as reconstrues dos ndices (Optimize). A opo Runtime oferece importantes opinies e comentrios a respeito do ndice, do cache e dos estgios do sistema. O OSS tambm bem equipado para configuraes de alta disponibilidade: a aba Replication inclui caixas de entrada para as URLs e indexa nomes para instncias de OSS mais detalhadas.

Figura 4 O Open Search Server local est analisando o servidor de web local a
menos de 100KBps porque o administrador restringiu ao mximo o nmero de linhas de execuo e frequncia de consultas na congurao.

API e PHP
Os subdiretrios open-search-server/ examples/php/OSSquery e open-search-server/php/example contem alguns exemplos de scripts PHP simples que voc pode simplesmente integrar sua prpria pgina web, retirando, assim, funes de busca da interface de gerenciamento para o navegador do cliente. Em webSearch.php, por exemplo, voc pode adicionar seu prprio ndice como padro, o que propor-

ciona uma busca funcional de ponta a ponta, pelo menos parcialmente. Isso porque houve um lado negativo: a interface tem problemas com acentuao em alguns idiomas e no completamente capaz de implementar os parmetros da linguagem de buscas Lucene. Realizar consulta na interface grfica melhor na maioria das vezes, mas no em todos os casos (gura5). Recomenda-se a API XML. Desenvolvedores podem us-la para buscas no ndice em quase qualquer linguagem de programao e mostrar os resultados. Tudo o que voc precisa fazer adicionar os parmetros necessrios nos requerimentos correspondentes de HTTP na forma de um requerimento GET:
http://localhost:8080/select? use=Index&qt=Query&q=Keyword

Figura 5 Se voc tentar usar


parmetros mais exticos para o Lucene diretamente na consulta (por exemplo, a busca com ~), voc pode falhar por causa da implementao do OSS.

Quando v este tipo de consulta, o servidor retorna um arquivo XML

contendo as combinaes junto com a prvia do texto correspondente (ou snippets). Em outras palavra, como um programador, voc somente precisa do seguinte:

Linux Magazine #80 | Julho de 2011

75

PROGRAMAO | Open Search Server

Figura 6 Verses futuras incluem a funo screenshot.

filtrar e validar o user input (tome cuidado, a API tambm pode deletar os documentos do ndice!). agrupar a string para consultar a API. analisar o documento XML retornado e formatar a sada. A listagem 2 mostra um resumo de um simples script de API. As linhas 4 e 20 implementam uma proteo mnima contra cdigos maliciosos. A linha 4 proporciona proteo contra scripts de cross site (tcnica de programao malicio-

sa), enquanto a linha 20 remove um delete se um ataque for bem sucedido. A matriz associativa params coleta todos os parmetros para a anlise de API, sendo que os parmetros use, qt e q so obrigatrios e todos os outros so opcionais. O template de busca est disponvel na distribuio e oferece uma anlise bem simples do ndice. O prximo passo definir quais campos voc quer retornar na resposta XML; isso feito na aba Query/Returned Fields. Neste

Listagem 2: build-query.php
01 function build_query($q){ 02 $params=array(); // todos os parmetros so adicionados aqui e 03 // so removidas as tags 04 $this->q=substr(trim(strip_tags($q),0,80)); 05 // basic parameters 06 $params[use']='myIndex'; // ndice utilizado 07 $params[qt']='search'; // Query Template 08 // Collapsing 09 $params[collapse.mode']='cluster'; 10 $params[collapse.field']='host'; 11 $params[collapse.max']=1; 12 // Pagination 13 if (isset($_GET[page'])) $params[start']=((int) $_GET[page']*10)-9; 14 else $params[start']=1; 15 $params[rows']=$this->rpp; 16 $params[query']=trim($q); // chave de busca 17 $params[sort']='score'; 18 $host= http://127.0.0.1:8080/select'; // URL do host OSS 19 // In case somebody injected a "Delete" parameter: 20 unset($params[delete']); 21 $this->query=$host.'?'.http_build_query($params); 22 }

exemplo, os campos so url e host (listagem 3). Os trs parmetros de colapso especificam se o OSS deve agrupar os resultados. O campo autoritativo livremente selecionvel; este poderia ser o host ou o ttulo da pgina. Usando esta abordagem, voc pode ter associaes semelhantes nos resultados at o usurio clicar novamente, melhorando assim a legibilidade. Na listagem 2, este processo acontece da linha 9 11. No modo cluster, a conta mxima apenas 1; entretanto, voc no pode omitir este parmetro. A linha 21 finalmente concatena os parmetros da busca com a URL do host e codifica os resultados. Um simples chamado ao simplexml_load_file($this->query) o bastante para executar qualquer pedido API formulado deste modo. Voc obter, como retorno, um documento XML como o mostrado na listagem 3. Os resultados finais esto disponveis como doc in result, que interage com um loop foreach ($hits ->result->doc as $doc) para cada item. Os dois arquivos modelo PHP da Linux Magazine Online [9] tambm suportam as caractersticas do Lucene, incluindo a aplicao de buscas com coringas como com o caractere ~, o que antes causava problemas (gura 5).

Novidades na verso 1.2 e previses


A verso 1.2 apresenta diversas caractersticas dignas de aplausos. O buscador web agora diz a voc quando ele atualizou a pgina no ndice, usa chaves nicas para lembrar pginas idnticas e permite que voc ignore arquivos robots. txt. O banco de dados do crawler tambm entende buscas SQL; voc pode desabilitar tanto listas de padres como de excluso, e as

76

www.linuxmagazine.com.br

Open Search Server | PROGRAMAO

anlises identificam documentos similares com mais confiabilidade. A tag modified ainda um problema bastante substancial. No momento, ela detecta se a pgina foi modificada, mas no detecta se somente a publicidade da pgina foi substituda ou se o contedo em si foi modificado porque a pgina, por exemplo, contm um feed RSS. Voc pode usar o CSS para melhorar esta caracterstica em seus prprios servidores de web usando a tag div para esconder menus, propagandas e feeds do indexador:
<div class=opensearchserver. ignore></div>

O desenvolvimento est em progresso em relao a muitas caractersticas: de acordo com o desenvolvedor Emmanuel Keller, um tipo de page rank (baseado na funo score do Lucene) foi parcialmente implementado. As funes score, ord, rord, byte, float, int, e short esto completas. Um exemplo vlido de consulta, ento, seria assim: score() + rord(modified_date). A prxima verso incluir tambm uma funo screenshot e uma extenso de renderizao. (guras 6 e 7) O OSS ainda no perfeito, mas definitivamente est no caminho certo. E rpido: quando executado em um desktop, respondeu a uma consulta de 25.000 pginas do ndice do site da Linux Magazine surpreendentemente rpido. Pouqussimas vezes levou mais de meio segundo, como confirmado pelos nossos testes com centenas de URLs escolhidas aleatoriamente.

Figura 7 Futuras verses incluem uma extenso de renderizao.

Listagem 3: bResposta XML


01 <?xml version="1.0" encoding="UTF-8"?> 02 <response> 03 <header> 04 <status>0</status> 05 <query>Query_Name</query> 06 </header> 07 <result name= "response" numFound="111" collapsedDocCount="0" start="1" rows="10" maxScore="NaN" time="11"> 08 <doc score="0.4523" pos="1"> 09 <field name= "url">http://www.myserver.com/path/file.html </field> 10 <field name="host">www.myserver.com</field> 11 <snippet name= "title" highlighted="yes">Page title</snippet> 12 <snippet name="content" highlighted="yes">brief preview of matches and neighborhood ...</snippet> 13 </doc> 14 </xml>

Mais informaes
[1] Servidor Open Search: http://www.open-search-server.com/ [2] Tomcat: http://tomcat.apache.org/ [3] Lucene no Apache: http://lucene.apache.org/java/docs/index.html [4] Agendador Quartz: http://www.quartz-scheduler.org

Gostou do artigo?
Queremos ouvir sua opinio. Fale conosco em m cartas@linuxmagazine.com.br gazine.co br Este artigo no nosso site: sso te: http://lnm.com.br/article/5499 br/art /549

[5] Zkoss: http://www.zkoss.org/product/zk.dsp [6] Wiki OSS: http://www.open-search-server. com/wiki/en/index.php/Main_Page [7] Darkstat: http://dmr.ath.cx/net/darkstat/ [8] Lemma: http://en.wikipedia.org/wiki/Lemma_(linguistics) [9] Scripts PHP: http://www.linuxmagazine.com.br/issues/80/OSS.zip

Linux Magazine #80 | Julho de 2011

77

Linux Magazine #81


PREVIEW

IPv6
Na prxima edio, voc ir conhecer mais sobre as vantagens e facilidades da implementao da nova verso do protocolo IP, o Ipv6. Esta nova verso, promete resolver os j presentes --- e os futuros, durante um bom tempo, esperamos --- problemas de endereamento IP da Internet. A verso 6 do protocolo IP no somente uma mera atualizao da verso atual; pode ser considerada como um protocolo praticamente novo, desenhado para fazer todo o sentido no mundo em que vivemos hoje. O que vai mudar? Como implementar a nova verso?

Ubuntu User #22


Ubuntu 11.04
O novo Ubuntu 11.04, codinome Natty Narwhal, est saindo do forno. Muitas mudanas so esperadas e previstas para este lanamento. Entre elas, podemos destacar o novo modo de organizao da rea de trabalho, que agora utiliza o Unity, a polmica interface de usurio da verso netbook, que foi totalmente reescrita para a verso 11.04. Os recursos multitouch tambm vm aperfeioados e com muitas novidades. No perca!

Admin Magazine #3
Conexo Segura
Quem precisa conectar computadores com sistemas operacionais diferentes frequentemente precisa procurar por solues adequadas. O tema de capa da prxima edio da Admin apresenta softwares propiciam uma estreita relao entre Windows e Linux e que tambm servem para conexes com roteadores e rewall como os da Cisco, Juniper ou Checkpoint.

82

www.linuxmagazine.com.br

Você também pode gostar