Você está na página 1de 30

Expediente editorial

Diretor Geral
Rafael Peregrino da Silva
rperegrino@linuxmagazine.com.br
Burrice bem-vinda
Embora raros, há sistemas na engenharia e na biologia que são tão eficientes
Editores
Flávia Jobstraibizer
fjobs@linuxmagazine.com.br
que acabam por gerar problemas estruturais e/ou operacionais. A velocidade
Kemel Zaidan na entrega de obras na construção civil leva empresas de engenharia a usar

EDITORIAL
kzaidan@linuxmagazine.com.br
Editora de Arte
determinados aditivos na cura do concreto que aceleram o seu processo de
Larissa Lima Zanini endurecimento e secagem, mas que podem resultar em porosidade do mate-
llima@linuxmagazine.com.br
Estagiário rial. Do lado da medicina, há certas cirurgias cuja realização é recomendada
Felipe Brumatti Sentelhas
fsentelhas@linuxmagazine.com.br
após os cinquenta anos de idade, pois antes disso o processo de cicatrização é
Colaboradores
tão célere que acaba resultando em recidiva anos mais tarde. Antes da idade
Alexandre Borges, Alexandre Santos, Augusto
Campos, Brice Goglin, Charly Kühnast, Erik Bärwaldt,
recomendada, o paciente deve tentar amenizar o problema usando paliativos.
Hans-Peter Merkel, Ian Dickinson, Jeff Squyres, Até certo tempo atrás – e, na minha idade, “certo tempo” significa pelo
Jon ‘maddog’ Hall, Kai-Thorsten Hambrecht, Klaus
Knopper, Kurt Seifried, Marcel Gagné, Markus menos umas três décadas, ou seja, na era pré-PC –, operadores de computador
Feilner, Markus Heller, Markus Roth, Peter Kreussel,
Samuel Thibault, Thomas Pfeiffer, Zack Brown. estavam habituados a trabalhar no que se convencionou chamar de “termi-
Editores internacionais nal burro”, o qual ficava conectado a um computador de grande porte, onde
Uli Bantle, Andreas Bohle, Jens-Christoph Brendel,
Hans-Georg Eßer, Markus Feilner, Oliver Frommel, todo o processamento ocorria de fato. O terminal, normalmente conectado
Marcel Hilzinger, Mathias Huber, Anika Kehrer,
Kristian Kißling, Jan Kleinert, Daniel Kottmair, via porta serial ao mainframe, praticamente não fazia nada além de mostrar
Thomas Leichtenstern, Jörg Luther, Nils Magnus.
na tela os comandos digitados e eventuais resultados, bem como realizar a
Anúncios:
Rafael Peregrino da Silva (Brasil)
leitura dos dados inseridos via teclado. Esse modo de operar ainda é utilizado
anuncios@linuxmagazine.com.br
Tel.: +55 (0)11 3675-2600
(com variações) por muitas empresas até hoje, como, por exemplo, a Casas
Bahia. A diferença é que, atualmente, o terminal é um programa que simula o
Penny Wilby (Reino Unido e Irlanda)
pwilby@linux-magazine.com comportamento da máquina burra de outros tempos. No servidor, que ainda
Amy Phalen (América do Norte)
aphalen@linuxpromagazine.com
pode ser um mainframe, o sistema operacional agora é em geral Linux (em
Hubert Wiest (Outros países) operação virtualizada nesses sistemas de grande porte), apesar de haver ainda
hwiest@linuxnewmedia.de
Diretor de operações
sistemas operacionais para mainframes, como o z/OS da IBM, por exemplo.
Claudio Bazzoli Com o advento da computação em nuvem, vamos presenciar uma confi-
cbazzoli@linuxmagazine.com.br
guração semelhante chegando a uma grande parcela de usuários finais: como
Na Internet:
www.linuxmagazine.com.br – Brasil a maioria dos aplicativos vai funcionar diretamente a partir “da nuvem”, a
www.linux-magazin.de – Alemanha
www.linux-magazine.com – Portal Mundial capacidade de processamento da máquina local – que pode ser um PC mais
www.linuxmagazine.com.au – Austrália
www.linux-magazine.es – Espanha modesto, um netbook, um tablet ou mesmo um celular – poderá ser muito
www.linux-magazine.pl – Polônia
www.linux-magazine.co.uk – Reino Unido
menor. Isso vai democratizar ainda mais o acesso à Internet e aos aplicati-
www.linuxpromagazine.com – América do Norte vos fornecidos como serviços monetizados via publicidade hospedados na
Apesar de todos os cuidados possíveis terem sido tomados
durante a produção desta revista, a editora não é responsável
nuvem: ponto para o Google! E iniciativas como o lançamento do iCloud,
por eventuais imprecisões nela contidas ou por consequências realizado recentemente pela Apple, “transferem a central digital do usuário
que advenham de seu uso. A utilização de qualquer material da
revista ocorre por conta e risco do leitor. para a nuvem”, em uma tradução livre da afirmação feita por Steve Jobs por
Nenhum material pode ser reproduzido em qualquer meio, em
parte ou no todo, sem permissão expressa da editora. Assu-
ocasião do lançamento do novo serviço. Com isso, o denominador comum
me-se que qualquer correspondência recebida, tal como car-
tas, emails, faxes, fotografias, artigos e desenhos, sejam for-
da vida digital do usuário muda, e, assim, o PC perde a posição de destaque
necidos para publicação ou licenciamento a terceiros de forma que ocupou durante cerca de trinta anos. Os dispositivos móveis serão os apa-
mundial não-exclusiva pela Linux New Media do Brasil, a me-
nos que explicitamente indicado. relhos utilizados para realizar esse acesso. Ponto para o Linux, que já equipa
Linux é uma marca registrada de Linus Torvalds.
a maior parte dos dispositivos embarcados no mundo – tendência que cresce
Linux Magazine é publicada mensalmente por:
Linux New Media do Brasil Editora Ltda. exponencialmente. Afinal, em um mundo em que não há aprisionamento
Rua São Bento, 500
Conj. 802 – Sé
de plataforma operacional, onde um sistema livre, aberto, seguro e rápido
01010-001 – São Paulo – SP – Brasil
Tel.: +55 (0)11 3675-2600
está disponível gratuitamente para qualquer empresa desenvolver produtos e
Direitos Autorais e Marcas Registradas © 2004 - 2011–: soluções, que outra opção mais vantajosa poderia ser adotada?
Linux New Media do Brasil Editora Ltda.
Impressão e Acabamento: RR Donnelley Assim, à exceção dos sistemas que de fato necessitam de grande ca-
Distribuída em todo o país pela Dinap S.A.,
Distribuidora Nacional de Publicações, São Paulo.
pacidade de processamento local (edição de vídeo ou CAD/CAM, por
Atendimento Assinante exemplo), os sistemas baseados em Linux que vão equipar nossos dispo-
www.linuxnewmedia.com.br/atendimento
São Paulo: +55 (0)11 3675-2600
sitivos móveis poderão ser mais simples e, assim, menos inteligentes, já
Rio de Janeiro: +55 (0)21 3512 0888
Belo Horizonte: +55 (0)31 3516 1280
que a inteligência dos aplicativos estará hospedada na nuvem. O terminal
ISSN 1806-9428 Impresso no Brasil burro 2.0 chegou! Saúdem essa burrice bem-vinda! ■

Rafael Peregrino da Silva


Diretor de Redação

Linux Magazine #80 | Julho de 2011 3


ÍNDICE

CAPA
Novas tecnologias 27
Como é possível manter-se atualizado diante da
revolução de lançamentos no mercado de tecnologia,
com o qual somos bombardeados todos os dias?

Um novo começo para o HTML 28


Em 1999, quando o padrão HTML 4.01 apareceu pela primeira vez,
ninguém era capaz de prever o surgimento de blogs de video,
redes sociais e ferramentas de produtividade web. O padrão HTML5
transformará a Internet em uma nova geração de tecnologia e serviços.

Acelere ao máximo 34
O OpenCL permite ao programador acelerar um aplicativo transferindo
alguns cálculos para o processador de gráficos do computador.

Face a face 41
Softwares de reconhecimento facial estão se tornando cada vez mais
populares, além de mais sofisticados. Mostramos como usar o software
de código livre libface para identificar pessoas em suas fotos.

ZFS sob o sol 46


O formato ZFS, da Sun, é geralmente reverenciado como o mais
moderno sistema de arquivos disponível atualmente. O kernel Linux não
proporciona suporte direto para o ZFS, mas o usuário pode encontrar
alternativas para usá-lo tanto no espaço do kernel quanto do usuário.

4 www.linuxmagazine.com.br
Linux Magazine 80 | ÍNDICE

COLUNAS REDES
Klaus Knopper 08 Alternativa de peso 58
Charly Kühnast 10
Zack Brown 12
Augusto Campos 13
Kurt Seifried 16
Alexandre Borges 20

NOTÍCIAS
Geral 20 O iSCSI oferece uma alternativa rápida e flexível para
armazenamento de arquivos em rede. A ferramenta
➧ Fim do Adobe AIR para Linux iSCSI permite que você configure o armazenamento de
➧ Xen completamente integrado ao Linux arquivos em sua própria rede, sem a necessidade de
uso de equipamento ou cabeamento especializado.

CORPORATE TUTORIAL
Notícias 22
Elo perdido 63
➧ Cisco apresenta novo sistema ASR9000
Conheça um novo método para processar, combinar,
➧ Red Hat lança soluções para gestão e desenvolvimento de nuvem analisar e apresentar informações ocultas em dados
➧ eBay adquire Magento brutos usando a plataforma Jena: web semântica
e dados vinculados (linked data) para Java.
➧ Oracle exige bilhões do Google
➧ Open Virtualization Alliance ganha 65 novos membros VoIP com Asterisk – parte IX 70

Coluna: Jon “maddog” Hall 24

Coluna: Alexandre Santos 26

ANÁLISE
Lições sobre localização 50

O sistema telefônico ultrapassado, presente até pouco


tempo atrás nas empresas, é prolífico em cobranças: cada
novo recurso ativado requer uma nova ativação de serviço,
com o preço adicionado ao pagamento mensal. É hora
de mudar. É hora de criar sua própria central VoIP

PROGRAMAÇÃO
Busca com qualidade 72

A topologia do servidor interno está se tornando cada


vez mais complexa. Entender onde os processos estão
sendo executados no servidor pode ter um grande
impacto no desempenho geral do sistema.

Pequeno soldado 55

Analisamos a ferramenta de indexação Open


Search Server e mostramos como integrar o recurso
de busca ao seu website utilizando PHP.

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

Linux Magazine #80 | Julho de 2011 5


u
c.h
.s x
ww
–w
ro
ne
gje
Emails para o editor

nja
sa
CARTAS

Permissão
de escrita
Aplicativo personalizado [Desktop Entry]
Name=Terminal
Olá pessoal, criei uma calculadora utilizando lingua- Comment=Use the command line
gem C com GTK e compactei o programa em um TryExec=gnome-terminal
Exec=gnome-terminal
pacote .deb. Icon=utilities-terminal
Gostaria de saber como faço para que o programa seja Type=Application
exibido na aba acessórios da minha distribuição Linux. X-GNOME-DocPath=gnome-terminal/
João Vieira index.html
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=
Resposta gnome-terminal
Caro João, para que o atalho seja exibido no menu X-GNOME-Bugzilla-
Acessórios do Gnome ou do KDE basta que você Component=BugBuddyBugs
X-GNOME-Bugzilla-Version=2.32.0
inclua no seu pacote um arquivo do tipo .desktop Categories=GNOME;GTK;Utility;
com os dados do aplicativo, como: nome, coman- TerminalEmulator;
do de execução, ícone, e seção do menu onde o StartupNotify=true
OnlyShowIn=GNOME;
aplicativo deve ser exibido. X-Ubuntu-Gettext-Domain=
No Gnome este arquivo deve ficar no diretório /usr/ gnome-terminal
share/applications/seu_programa.desktop.
Como exemplo, copio abaixo o conteúdo de um ar- Mais informações podem ser encontradas na documentação
quivo /usr/share/applications/gnome-terminal.desktop: do Gnome no endereço http://live.gnome.org/GnomeLove.

Escreva para nós! ✉


Sempre queremos sua opinião sobre a Linux Magazine e nossos artigos. Envie seus emails para
cartas@linuxmagazine.com.br e compartilhe suas dúvidas, opiniões, sugestões e críticas. Infelizmente, devido ao
volume de emails, não podemos garantir que seu email seja publicado, mas é certo que ele será lido e analisado.

6 www.linuxmagazine.com.br
Coluna do Augusto

Bons ventos sopram

COLUNA
sobre o Android
Novas iniciativas e alternativas estão surgindo no
universo do desenvolvimento Android.

Q uem chega ao universo Android interessado


no fato de ele ser (em grande parte) um sis-
tema de código aberto (e por incluir o kernel
Linux) acaba tendo grande interesse pela possibilidade
Normalmente, o desenvolvimento deste tipo de al-
ternativa se dá sem qualquer apoio dos fabricantes e
desenvolvedores originais ou, em determinados casos,
tendo de lidar com a resistência e obstrução ativas pra-
de modificar o sistema e interagir com ele em níveis ticadas por eles, inclusive com travamentos feitos no
mais avançados, assim como usualmente é possível fazer hardware para evitar a execução de sistemas alternativos.
em distribuições Linux no desktop. Mesmo quando essa Isso já foi tendência quase geral, e vai continuar
possibilidade não é colocada em prática, é interessan- a acontecer. Porém, no final do primeiro semestre,
te saber que ela está lá e que pode ser aproveitada por tivemos duas notícias muito positivas a respeito, in-
outros, de forma que possamos colher os frutos, afinal, dicando uma possível mudança de maré entre os fa-
sempre há algum desenvolvedor interessado em adaptar bricantes de aparelhos.
os recursos do sistema, agregar acessórios e ir além das A primeira foi da HTC, cujo CEO veio a público
APIs oficiais, trocando a compatibilidade por utilidades agradecer a paciência dos seus usuários e afirmar que
adicionais e melhor desempenho. vai cessar com a prática de “travar” o boot dos seus
No caso do Android, essa situação poderia ser simbo- aparelhos equipados com Android – acabando assim
lizada pelo CyanogenMod [1], um firmware alternativo com a medida antipática cujo objetivo era dificultar a
para smartphones, e-readers e tablets, que é mantido instalação de sistemas alternativos.
por uma comunidade de fãs do Android e compatível Logo em seguida, foi noticiado algo ainda mais ex-
com dezenas de modelos de aparelhos. Ele oferece a tremo na aproximação entre fabricantes e hackers: a
seus usuários recursos que frequentemente ficam de Samsung doou um aparelho Galaxy S II para um dos
fora nas versões de Android embarcadas nos aparelhos desenvolvedores do CyanogenMod, com o objetivo
por seus fabricantes e operadoras. expresso de facilitar a portabilidade deste software al-
ternativo para o novo smartphone da empresa.
Nada disso garante aproximações ou aberturas defi-
O CyanogenMod é um nitivas, mas são excelentes notícias que podem ajudar a
firmware alternativo para ampliar o nível de abertura das plataformas móveis, ao
mesmo tempo em que certamente constituem critérios
smartphones, e-readers adicionais a considerar na hora de escolher o fabricante
e tablets, que é mantido de nossos próximos produtos! ■
por uma comunidade Mais informações
de fãs do Android e [1] CyanogenMod: http://www.cyanogenmod.com/
compatível com dezenas
de modelos de aparelhos. Augusto Campos é administrador de TI e, desde 1996, mantém o site BR-
linux.org, que cobre a cena do Software Livre no Brasil e no mundo.

Linux Magazine #XX | Mês de 200X 13


Coluna do Alexandre

Introdução ao
COLUNA

udev: controle
seus dispositivos
Relembre o uso do framework udev.

N
esta coluna (e possivelmente nas próximas), SCSI/SATA idênticos (sda, sdb, sdc...) têm o mesmo
vou relembrar um assunto bastante interes- major number (pois o Linux faz uso do mesmo driver
sante do Linux, mas que, no entanto, é por para acessá-los), mas minor numbers diferentes, já que é
muitas vezes esquecido pelos administradores: o fra- usada uma cópia diferente do driver para acessar cada
mework udev. Antigamente, os sistemas Unix (e aqui um dos discos rígidos. A mesma lógica se aplica para
também incluímos o Linux), que referenciam todo um único disco com múltiplas partições, loop device
e qualquer hardware através de arquivos no sistema files, usado para montar ISOs ou que tenha character
(ou ainda device nodes, se preferir), possuíam uma devices para acesso a terminais (tty´s). Note a saída
maneira bastante rudimentar de criar referências para de alguns arquivos de dispositivo do diretório /dev na
tais dispositivos, pois, como nunca se conhecia de an- listagem 1, onde b é block device e c é character devi-
temão qual hardware estaria presente na máquina, a ce; o primeiro número após o tipo do dispositivo é o
instalação do sistema operacional criava previamen- major number e o segundo número é o minor number.
te dezenas ou centenas de entradas (block device file Toda esta prestatividade em criar este enorme
ou character device file) no diretório /dev, tentando, conjunto de entradas em /dev é muito nobre, porém
assim, se antecipar ao administrador e garantir que traz diversos problemas, já que, como a criação des-
aquele dispositivo teria um arquivo representativo tas entradas é antecipada, muitos dispositivos jamais
válido daquele hardware. existirão na máquina. Isso deixa praticamente todos
Estes arquivos criados no diretório /dev possuem al- estes arquivos sem função alguma e ainda complicam
guns atributos especiais como major number e minor a sua vida quando você tiver de examinar o diretório
number, sendo que o primeiro explicita qual é o driver em questão, pois fica difícil saber quais hardwares
usado para acessar aquele dispositivo e o segundo diz existem realmente na sua máquina. Pior: imagine
qual instância deste driver é utilizada para acessar de- que você deseja utilizar seu tablet (com Android,
terminado dispositivo. Explico: arquivos de dispositivos espero), sua câmera digital e seu pendrive. Cada vez
de bloco (block device file) que referenciam 4 discos que você conectar estes dispositivos, eles serão atre-
lados a um arquivo de dispositivo diferente (sda, sdb,
Listagem 1: ls -l /dev sdc...), dependendo da ordem em que você executar
01 brw-rw–- 1 root disk 8, 1 2011-06-12 12:48 sda1
esta operação ou da ordem em que os seus drivers
02 brw-rw–- 1 root disk 8, 2 2011-06-12 12:48 sda2 forem carregados.
03 brw-rw–- 1 root disk 8, 5 2011-06-12 12:48 sda5 Depois de diversas evoluções, passando pelo DevFS
04 brw-rw–- 1 root disk 7, 0 2011-06-12 12:48 loop0 que foi excluído da árvore do kernel, os desenvolve-
05 brw-rw–- 1 root disk 7, 1 2011-06-12 12:48 loop1 dores do Linux chegaram ao udev, que possui fun-
06 crw--w–- 1 root tty 4, 10 2011-06-12 12:48 tty10 ções de gerenciamento do diretório /dev para resolver
07 crw--w–- 1 root tty 4, 11 2011-06-12 12:48 tty11 estes problemas e tornar o manuseio de dispositivos
muito mais simples, com o bônus de disponibilizar

18 www.linuxmagazine.com.br
estes hardwares e as suas propriedades no arquivo # git clone git://git.kernel.org/pub/scm/linux/
de sistema (filesystem) montado no diretório /sys. hotplug/udev.git udev-lm
Algumas vantagens do udev são: # apt-get install libacl1-dev
➧ Criação dinâmica de entradas para dispositivos # apt-get install glib-2.0
em /dev; # apt-get install gobject-*
➧ Controle na criação dos nomes dos dispositivos # apt-get install gperf
# apt-get install gtk-doc-tools
em /dev através de regras;
# cd /udev-lm
➧ Inicialização dos dispositivos de hardware de
# ./autogen.sh –without-selinux –disable-
maneira dinâmica (hotplug);
-introspection
➧ Possibilidade de renomeação de interfaces
# make
de rede; # make udev/test-udev
➧ Vinculação de scripts para serem executados
na adição ou remoção de um hardware; Agora você pode executar o script Perl de teste
➧ Mudança da propriedade e permissão de que vem junto com o udev, o qual simula a inclusão
um dispositivo. e a remoção de dispositivos no sistema, de modo a
O leitor pode utilizar qualquer distribuição, como verificar se está tudo funcionando bem:
Ubuntu, Red Hat ou Suse, para fazer testes com o # perl test/udev-test.pl
udev. Estou usando Ubuntu 11.04, pois é aquela que
está instalada no meu netbook, embora não escon- No mês que vem continuamos a relembrar o uso
da de ninguém que prefiro Red Hat ou Suse para e funcionamento do udev. Até a próxima. ■
ambientes críticos. Caso o leitor ainda queira, pode
Alexandre Borges (alex_sun@terra.com.br, twitter: @ale_sp_brazil) é Es-
realizar o download do código do udev e compilá-lo. pecialista Sênior em Solaris, OpenSolaris e Linux. Trabalha com desen-
Para fazer isso (no seu sistema podem ser exigidos volvimento, segurança, administração e análise de desempenho desses
sistemas operacionais, atuando como instrutor e consultor. é pesquisa-
outros pacotes adicionais), a partir da raiz e como
dor de novas tecnologias e assuntos relacionados ao kernel.
usuário root, digite:

Linux Magazine #80 | Julho de 2011 19


As novidades do mercado de tecnologia

Novas tecnologias

CAPA
Como é possível manter-se atualizado diante da revolução de lançamentos no
mercado de tecnologia, com o qual somos bombardeados todos os dias?
por Flávia Jobstraibizer

A
cada dia descobrimos uma nova forma de realizar que promete ser principal ator para o desenvolvimento
tarefas corriqueiras, seja através de um novo dispo- web da nova era da Internet.
sitivo lançado ou mesmo através de uma nova tec- Apresentamos ainda a tecnologia por trás das placas de
nologia que surge. Os beneficios sessas novas tecnologias, vídeo. Seus processadores, como obter melhor desempe-
são inúmeros: todos os dias são lançados dispositivos que nho e velocidade através de cálculos e scripts específicos
facilitam a vida do usuário de telefonia celular, o profis- que as tornam mais eficientes e eficazes, com o openCL.
sional que desenvolve sistemas conta com computadores Na área de armazenamento e sistemas de arquivos, fa-
cada vez menores, o gestor que necessita de conexão a laremos sobre o iSCSI, que oferece uma alternativa rápida
todo momento, pode montar um ponto de acesso sem e flexível para armazenamento de arquivos em rede. A
fio de onde estiver, a escola que deve fornecer recursos ferramenta permite que você configure o armazenamento
para seus alunos e pode utilizar uma nova plataforma de de arquivos em sua própria rede, sem a necessidade de
aprendizagem online, o departamento de uma empre- uso de equipamento ou cabeamento especializado. Outra
sa que através da implementação de uma nova forma opção é o ZFS, da Sun, que é tido como o mais moder-
de armazenamento de arquivos, economizou ao evitar no sistema de arquivos disponível atualmente. O kernel
a compra de outro servidor etc., são muitas as vertentes Linux não proporciona suporte direto para o ZFS, mas
que precisam da tecnologia e é claro, se movimentam mostaremos as alternativas para usá-lo tanto no espaço
em torno dela e de suas novidades. do kernel quanto do usuário.
Algumas novas tecnologias tem um nível de obsoles- E para fechar esta edição, demonstraremos como
cência tão grande, que já nascem desatualizadas. É o funcionam os softwares de reconhecimento facial, que
caso dos tablets, dispositivos móveis com celulares e até estão se tornando cada vez mais populares, além de
mesmo notebooks. Lançado um hoje, amanhã já exis- mais sofisticados. Aprenda como identificar pessoas
tem outros melhores ou com mais recursos. Não raro, em fotos e montar uma base para automatização de
quando sequer descobrimos que uma nova tecnologia foi reconhecimento facial em lotes de imagens.
lançada, existem outras várias iniciativas em torno dela, A nova era tecnológica já começou, mantenha-se atu-
melhoradas e mais úteis. Como acompanhá-las? É esta alizado e boa leitura! ■
a pergunta que nos fizemos quando decidmos agrupar
algumas dessas novidades nesta edição da Linux Ma-
gazine, uma vez que, assim como a vida, a tecnologia
se reinventa e se renova todos os dias.
Vamos abordar algumas novidades tecnológicas que
estão acendendo o mercado, como é o caso do HTML5,

Matérias de capa
Um novo começo para o HTML 28
Acelere ao máximo 34
Face a face 41
ZFS sob o sol 46

Linux Magazine #80 | Julho de 2011 27


Monitoramento de redes e sistemas | ANÁLISE

Monitoramento de redes e sistemas

Pequeno

ANÁLISE
soldado
O Sentinella automatiza a forma
com que o computador monitora
problemas com recursos e
outros estados de sistema.
Erik Bärwaldt

F
erramentas de monitoramen- para a sua distribuição, você pode grupo de opções no topo e no meio
to de rede como o Nagios baixar o arquivo do site do proje- da janela já abrangem as principais
observam toda a sua rede e to [1] e realizar uma instalação funções. Outros botões na metade
mandam um alerta caso aconteça manual. O site tem informações inferior da tela oferecem ações que
algum problema. Isso se você tiver detalhadas sobre como configurar dependem das condições seleciona-
tempo e energia para configurar a a ferramenta. das (figura 1).
infraestrutura completa de alertas Caso você não use o desktop As condições que disparam uma
no programa. Se você opera em KDE, para o qual o Sentinella está ação podem ser definidas de forma
menor escala, talvez seja melhor otimizado, instalar os arquivos bi- granular, graças a providenciais caixas
usar um pequeno soldado, em nários normalmente irá instalar de seleção e importação. Em vez de
vez de um exército completo. O o que é necessário para executar manter configurações padrão, você
Sentinella é um desses aplicativos o Sentinella no Gnome, Xfce ou pode adicionar entradas personali-
práticos que supervisionam o seu LXDE sem sacrificar recursos da zadas. Dependendo das condições
processador, espaço em disco ou ferramenta. que você aciona, as configurações
interface de rede e mandam um mudarão para refletir o contexto. As
alarme ou executam um determi- Executar o Sentinella categorias básicas incluem: carga da
nado comando quando um pro- Dependendo da sua distribuição CPU, utilização de memória, tráfe-
blema ocorre. Linux, o processo de instalação do go de rede, além de dia e hora. É
A ferramenta de monitoramen- pacote cria um item no menu da possível também selecionar ações a
to Sentinella já conquistou o seu área de trabalho. No Ubuntu 10.10, serem disparadas de acordo com o
espaço nos repositórios de muitas o Sentinella fica no menu Aplicati- comportamento de outros progra-
distribuições, e é possível que você vos/Ferramentas de sistema. mas. Nesse caso, o Sentinella exibe
possa instalá-lo convenientemente Quando aberto, o Sentinella é uma janela listando todos os proces-
com o Synaptic, YaST ou outro ge- exibido em uma janela simples. Não sos correntes e oferecendo escolhas
renciador de pacotes. Se os pacotes se incomode em procurar por uma para a visualização. Por exemplo, se
binários não estiverem disponíveis barra de botões ou menus, pois um você tem um grande número de pro-

Linux Magazine #80 | Julho de 2011 55


ANÁLISE | Monitoramento de redes

Figura 1: O programa é fácil de usar, graças à sua Figura 2: Escolha de um programa ativo na janela de
interface amigável. processos.

Figura 3: O Sentinella pode ajudá-lo a economizar energia. Figura 4: Monitoramento preventivo.

cessos ativos, pode querer destacar acinzentada e você não poderá ver Não se preocupe, pois mesmo mal
somente os de usuários. entradas adicionais. O Sentinella configurado o Sentinella não dani-
Na parte inferior da janela, você exibe um ícone de mensagem no ficará seu hardware.
encontra seis ações que pode atribuir painel para que você possa fechar a
às condições selecionadas. Quando janela. Quando você clica no ícone, Cenários de
o evento selecionado ocorre, você
pode reiniciar ou desligar a máqui-
a janela do programa é exibida no
desktop. Para finalizar o programa,
aplicativos
na, colocá-la para dormir (sleep) ou você deve clicar com o botão direito O Sentinella poderá ajudá-lo a
tocar um alarme de alerta. Três di- do mouse no ícone no painel e clicar economizar energia se você usa o
ferentes alarmes estão disponíveis. e selecionar a opção Quit. software no laptop ou notebook.
Um modo muito mais flexível é Após selecionar CPU load como
executar um comando quando um Risco condição, entre com o mínimo de
evento específico ocorre. Como O Sentinella é capaz de desligar o carga à direita do sinal de percen-
alternativa, você pode finalizar o computador quando a carga da CPU tual. Para evitar que o seu compu-
programa. Nesse caso, você verá é menor do que 5% se você assim tador execute uma ação definida
novamente uma lista de processos escolher; contudo, você precisa to- antes que ocorra a condição, defi-
para escolha (figura 2). mar cuidado com esse tipo de ação. na o período de tempo no qual a
Após finalizar as configurações, Efeitos indesejados podem ocorrer, carga ficará abaixo do limite espe-
você pode começar a monitorar o incluindo perda de dados, caso o cificado para que o desligamento
sistema clicando em Start, no centro Sentinella feche o sistema durante ocorra. É necessário entrar com
inferior da tela. A janela se tornará uma rotina de backup, por exemplo. um período válido de tempo para

56 www.linuxmagazine.com.br
Monitoramento de redes e sistemas | ANÁLISE

que a configuração seja concluída dor. Em ambientes heterogêneos, sistema definido ocorre antes do
com sucesso. Abaixo, na janela do em particular, essa é uma forma desligamento ou da execução da
programa, habilite a ação Sleep e eficiente de identificar a influên- ação definida. O risco de perda de
escolha Suspend ou Hibernate à cia de um malware. Para esse tipo dados é real. Antes de implantar
direita. Certifique-se de ter espaço de monitoramento, simplesmente o programa, você deve considerar
em disco suficiente ou a ação pode marque a opção Network traffic, de- cuidadosamente quais ações são
provocar perda de dados (figura 3). fina as interfaces de rede do sistema significativas no contexto de estados
Em outro cenário, o Sentinella e volumes de dados e programe o específicos do sistema. ■
pode ser útil para administradores alarme na seção de ações – há três
de rede. Uma vez que o programa é melodias para escolher no lado di-
capaz de monitorar tráfego de rede, reito da janela (figura 4). Mais informações
ele pode identificar e reportar ano- [1] Sentinella:
malias em tempo real. Você pode Conclusão http://sourceforge.net/
monitorar a entrada e a saída de da- O software Sentinella assume a res- projects/sentinella
dos por meio das interfaces ativas de ponsabilidade de monitorar várias
rede. Se os volumes estiverem abai- tarefas em um sistema e responde
xo de limites determinados por um com ações predefinidas quando cer- Gostou do artigo?
go?
período de tempo, você pode pedir tos estados de sistema ocorrem. A Queremos ouvir sua
ua opinião.
opin o.
para disparar um alarme. ferramenta é fácil e intuitiva para Fale conosco em
Um cenário como esse poderia instalar; no entanto, os usuários cartas@linuxmagazine.com.br
zine om.b
prevenir que transferências de da- correm riscos. Por exemplo, o sof-
Este artigo no nosso
so site:
s
dos indesejados e em larga escala tware não mostra uma mensagem http://lnm.com.br/article/5472
ocorressem no ambiente de servi- de alerta quando um estado de

Linux Magazine #80 | Julho de 2011 57


Apache Jena | TUTORIAL

Apache Jena

Elo perdido

TUTORIAL
Conheça um novo método para processar,
combinar, analisar e apresentar informações
ocultas em dados brutos usando a
plataforma Jena: web semântica e dados
vinculados (linked data) para Java.
por Ian Dickinson

O
compartilhamento de dados é fazer um levantamento completo de é autor do artigo123, sobre Jena” po-
um dos tópicos mais quentes todas elas, vamos focar apenas em deria ser escrito com a seguinte linha
atualmente na computação. dados semânticos vinculados, mais de código, podendo ser representado
As fontes podem ser desde APIs do Fa- especificamente na plataforma Jena. graficamente como na figura 1.
cebook, dados científicos abertos e até
<ian> <autor-do> <artigo123>.
dados públicos gerados pelo governo A web semântica <artigo123> <tem-o-assunto> “Jena”.
e disponibilizados gratuitamente. Por Não por acaso, as técnicas e ideias da
todos os lados, há alguém liberando web semântica acabaram ganhando Matematicamente, a estrutura exem-
novos dados para serem explorados uma reputação de complexidade e plificada na figura é um gráfico dire-
por desenvolvedores e cientistas de dificuldade. O modelo de XML pa- cionado, que rotula os dois nós e suas
dados [1]. Nesse cenário, espera-se drão do RDF (Resource Description extremidades. Para ser simples, irei me
que projetistas, exploradores de dados Framework) é grosseiro, razão pela qual referir a ele apenas como um gráfico.
e desenvolvedores criem aplicativos modelar o mundo real pode revelar nu- Uma vez que cada declaração contém
de valor para usuários finais, com re- ances conflituosas. No entanto, em seu tipicamente três elementos – o assunto,
cursos novos e interessantes. núcleo estão duas ideias importantes. o objeto e o nome do predicado que
Sendo um desenvolvedor, como A primeira é a de que estruturas ricas os liga –, o termo triple é usado para
abordar essa montanha de informa- e expressivas de dados, descrevendo in- denotar tal declaração. Isso leva a outras
ções? Que ferramentas e técnicas formações sobre determinado assunto, expressões como triplestore, para um
serão úteis? Muitas abordagens estão podem ser construídas a partir de um banco de dados constituído de triples.
disponíveis, variando desde de sim- conjunto de informações simples so- A segunda das duas ideias impor-
ples análise de arquivos com valores bre o relacionamento entre pares de tantes é o nome das coisas que não
separados por vírgulas (CSV) em pla- elementos: duas entidades nomeadas são valores, que é representado por
nilhas de dados, consulta em bancos ou uma entidade nomeada e um valor, URIs. Um URI (Uniform Resource
de dados relacionais, chegando a fer- como um número. Identifier, ou Identificador de Recursos
ramentas de larga escala e distribuídas Um exemplo simples: suponhamos Uniforme) refere-se a um conjunto
de análise de informações na nuvem. que o identificador para o artigo que de identificadores definidos pela RFC
Como cada técnica possui vanta- você está lendo é artigo123 (voltaremos 2396. O mais importante desse con-
gens e desvantagens, e ao invés de a isso em breve); então, a sentença “Ian junto é que ele inclui identificadores
http:// para websites familiares. O uso
de URIs por identificadores tem duas
consequências importantes: primei-
ro, todos os identificadores formam
eficazmente um grande namespace,
minimizando as chances de usar aci-
Figura 1: Uma representação gráfica da sentença. dentalmente um mesmo nome para

Linux Magazine #80 | Julho de 2011 63


TUTORIAL | Apache Jena

se referir a coisas diferentes. Segun- escrita direta sobre aquele domínio ditos ao autor deve ser tratado com
do, a maioria dos URIs podem ser podem atualizar o significado mais cuidado, porque uma pessoa não é
“resolvidos” ou procurados com um diretamente associado aos termos. um recurso de informação na web.
navegador de Internet, de forma que Então, para atualizar o exemplo com Essa questão, amplamente debatida,
dê informações sobre o termo que o uso de URIs, precisamos considerar tem uma série de soluções que vão
está sendo identificado. quais identificadores usar. Sempre além do escopo deste artigo. Um
Além das consequências óbvias que possível, deve-se tentar reutilizar URI elaborado com a classe Person
de ter o significado, ou a semântica, vocabulários existentes. O vocabulário do vocabulário Friend of a Friend
declarado explicitamente, isso signi- Dublin Core Metadata Initiative [2] (FOAF, ou amigo do amigo) [3], será
fica também que o responsável pela possui um conjunto bem estabelecido suficiente. Com essas mudanças, o
manutenção do domínio web que de vocábulos para “metadados conhe- exemplo fica assim:
hospeda o identificador tem alguma cidos”, como o autor de uma matéria.
<http://epimorphics.com/rdf/
autoridade sobre o uso ou significa- O próprio artigo, aliás, eventualmente staff#ian> rdf:type foaf:Person.
do pretendido do termo. Além dis- ganhará uma identidade no espaço <http://epimorphics.com/rdf/
so, qualquer um pode reutilizar um web de quem publica. staff#ian> dcterms:creator.
<http://epimorphics.com/documents/
termo publicado em um domínio. Por enquanto, isso é um rascu- drafts/jena-1>.
Aliás, a web semântica acaba enco- nho. Imagine portanto o URI padrão <http://epimorphics.com/documents/
rajando esse tipo de ação. No entan- http://epimorphics.com/documents/ drafts/jena-1> dcterms:subject
to, somente pessoas com direitos de draft#jena-1. O URI para dar cré- “Jena”.
<http://epimorphics.com/documents/
drafts/jena-1> rdf:type
Listagem 1: Código gerado pelo Schemagen no Doap.Java foaf:Document.
01 /** URL de uma homepage de um projeto, associada com exatamente
um projeto. */ Claro que poderíamos entrar em
02 public static final Property homepage = muitos detalhes sobre as várias tecno-
m_model.createProperty( "http://usefulinc.com/ns/doap#homepage" ) logias de web semântica: linguagens
de consulta, armazenamento persis-
Listagem 2: O núcleo do Init.java tente, vocabulários específicos e assim
por diante. Para focar na prática, no
01 public void run() { entanto, falareremos apenas sobre
02 if (noTDB() || hasOption( "f" )) {
03 // (re)criar a imagem TDB como os triples podem ser manipu-
04 FileUtils.deleteQuietly( getTDBFile() ); lados com código Java usando o Jena.
05 FileUtils.forceMkdir( getTDBFile() );
06
07
Dataset dataset = TDBFactory.createDataset( getTdbLocation() );
Apache Jena
08 // o nome do projeto é um argumento requisitado O Jena é um framework Java de código
09 String projectName = getArgs()[0]; aberto para criar, armazenar, manipular
10 String projectURI = projectNamespace() + projectName; e consultar dados semânticos na web.
11 Resource project = dataset.getDefaultModel().
createResource( projectURI ); Foi desenvolvido originalmente por pes-
12 quisadores dos laboratórios da HP no
13 project.addProperty( RDF.type, DOAP.Project ); Reino Unido e tem sido amplamente
14 project.addProperty( DOAP.name, projectName ); utilizado desde seu primeiro lançamento
15
16 // adicione descrições a partir de opções de linhas de em 2001. Em 2008, o time do Jena dei-
comando xou a HP e, em 2009, o Jena se tornou
17 addOptionalProperty( project, DOAP.shortdesc, "s" ); um projeto incubado na Apache [4].
18 addOptionalProperty( project, DOAP.description, "d" );
19
Ao invés de listar os recursos téc-
20 System.out.println( String.format( "Criada nova descrição nicos do Jena, vamos introduzir a
DOAP para %s projetos com %s triples", projectName, abordagem de algumas partes do
dataset.getDefaultModel().size() ) ); framework enquanto trabalhamos
21 }
22 else { por meio de exemplos. Algumas
23 System.out.println( "Logbook já existe, nenhuma ação sendo linhas de terminologia básica, no
tomada" ); entanto, ajudarão.
24 } O gráfico descrito previamente é
25 }
gerenciado no código Jena como um

64 www.linuxmagazine.com.br
Apache Jena | TUTORIAL

objeto Model. O objeto é, nos termos do exemplo, o nome do projeto, a locali- que os dados DOAP estão armazenados
Java, uma interface ou especificação abs- zação do repositório fonte, quem está no diretório do próprio projeto. Com
trata que permite ao Jena fornecer vários trabalhando nele e assim por diante. o tempo, meu objetivo poderá ser o
tipos de objetos Model (armazenado na Felizmente, um vocabulário já existe de desenvolver a ferramenta para ar-
memória, no disco, sem interferência para gravar esse tipo de informação: mazenar mais do que simples dados
de disco etc.) com uma API comum. DOAP (Description of a Project, ou DOAP, talvez até incluir controle de
O Model é uma das abstrações chaves descrição de um projeto) [5] [6]. tempo, entre outras informações. Por
do Jena para lidar com RDF. Coincidentemente, os projetos da essa razão, vou generalizar o nome e
Um recurso no modelo, denotado Apache são encorajados a usar arqui- chamá-lo simplesmente de “Projeto
por uma URI, é representado por um vos DOAP. Embora o DOAP forme o Diário de Bordo”, representado pelo
objeto Resource, enquanto um valor, núcleo de um caderno de notas de um termo plb. Para brincar com o código,
como um número, é um Literal. O aplicativo, você deve ter a possibilidade veja o quadro 1.
predicado que liga os nós do gráfico de adicionar outras informações que Uma escolha razoável para o projeto
são objetos Property, e Property é uma pareçam relevantes sem ser restringido seria armazenar os dados em um sim-
subclasse de Resource. Finalmente, por esquemas rígidos de dados. ples arquivo RDF. No entanto, como
um objeto Statement representa um Projetar uma ferramenta visual rica meu o objetivo é ilustrar os vários recur-
triple. Um determinado Statement terá em recursos para criar e editar arqui- sos do Jena, vamos armazenar o RDF
um assunto Resource, um predicado vos DOAP está além do escopo deste gerado em um triplestore persistente.
Property e um objeto, que pode ser artigo. Em vez disso, tenho a meta de O Jena tem uma série de soluções de
tanto um Resource quanto um Literal. criar um conjunto de ferramentas de armazenamento RDF persistentes.
Chega de teoria. Vamos ver um linhas de comando e atualizar um diá- Vamos usar o TDB, customizado para
pouco de código. rio de bordo, imprimir um relatório e triplestore, com a capacidade de arma-
enriquecê-lo ao mesclar informações zenar um grande números de triples
Exemplo de aplicativo a partir de uma fonte externa. com eficiência sem requerer um banco
Suponhamos que você queira compar- O objetivo deste miniprojeto é gerar de dados relacional adicional, como o
tilhar detalhes com outros desenvol- e manter dados DOAP para um proje- MySQL, por exemplo.
vedores de código aberto, como, por to em particular; assim, eu presumirei O TDB pode suportar ordens de
magnitude muito maior que aquelas
Listagem 3: Consultar o ref:type que eu vou gerar agora, mas ele tor-
na bem direta a tarefa de atualizar o
01 /** O recurso com URI tem rdf:type t? */
banco de dados persistente.
02 public boolean hasType( String u, Resource t ) {
03 return getModel().getResource( u ).hasProperty( RDF.type, t );
04 } Quadro 1: Teste o código
Para o projeto, você precisará de
Listagem 4: Acumular documentos RDF descobertos por um compilador Java que suporte
Java 1.6. Eu estou usando tam-
meio do sindice.com bém o Maven para gerenciar o
01 // fase de leitura: adicione os documentos em um modelo combinado Jena e outras bibliotecas depen-
02 Model m = ModelFactory.createDefaultModel(); dentes. Então, você precisará da
03 for (ResIterator i = sIndex.listSubjectsWithProperty( RDF.type, versão mais recente do mvn. Final-
Sindice.Result ); i.hasNext(); ) { mente, o código está no repositó-
04 String docURL = i.next().getPropertyResourceValue( rio Git e o exemplo também lida
Sindice.link ).getURI(); com metadata Git, de modo que
05 você precisará do Git instalado. O
06 // poderíamos ser mais sofisticados sobre a proveniência dos recursos
pom.xml, no diretório raiz do proje-
07 try {
08 m.read( docURL ); to, lista as dependências de soft-
09 } ware. O Maven instalará todos au-
10 catch (RuntimeException e) { tomaticamente como necessário.
11 // alerte sobre falha de leitura, mas siga na leitura de
Para clonar o projeto do repositório
outros documentos
12 log.warn( String.format( “Failed to retrieve from %s Git, use o seguinte comando:
because: %s”, docURL, e.getMessage() ) ); git clone git@codebasehq.com:
13 } epimorphics/epimorphics-open/
14 } jena-plb-tutorial.git

Linux Magazine #80 | Julho de 2011 65


TUTORIAL | Apache Jena

Início do projeto um recurso pode ser membro de mui- dividuais definidos no arquivo. A ferra-
O problema tem quatro componen- tas classes ao mesmo tempo. menta Schemagen pode ser executada
tes: inicializar o projeto, atualizar a Obter o código Java para fazer com a partir da linha de comando ou como
descrição DOAP manualmente, au- que o recém criado projeto seja membro um plugin Maven [7]. Uma amostra
mentar a descrição automaticamen- da classe doap:Project vai requerer um do código gerado aparece na listagem
te e reportar o perfil DOAP. Cada novo triple, com o projeto como assun- 1. Os vocabulários completos estão
componente é chamado pela linha to, o predicado especial rdf:type como incluídos no projeto para download.
de comando (quadro 2). propriedade e um recurso denotando Considerando que eu tenho acesso às
Inicializar o projeto é algo direto: a classe doap:Project como um objeto. propriedades e classes DOAP por meio
você precisará criar o elemento de O URI doap:Project não muda (a não da classe DOAP.java, o início do projeto
armazenamento TDB (ou recriar se ser que o esquema mude), então este é direto, como mostrado na listagem 2.
o usuário quiser forçar a criação de será definido como constante. Embora
um novo elemento de armazenamen- seja possível escrever manualmente a Inclusão manual no
to) e adicionar um recurso root para
representar o projeto DOAP que es-
declaração de uma constante no códi-
go, correríamos o risco de fazer erros de
diário de bordo
tou descrevendo. Criar um elemen- transcrição e criar problemas de manu- Muitos bits de informação útil sobre
to de armazenamento TDB requer tenção com a mudança de esquema. um projeto devem ser capturados,
um diretório para os dados – vamos Felizmente, o Jena oferece uma inclusive as várias propriedades dife-
usar o ./.plb/tdb por padrão – e um ferramenta que gera um código Java rentes utilizadas pelo DOAP. Assim,
chamado Java. O chamado é uma automaticamente a partir de um ar- eu quero que meus usuários possam
linha getTdbLocation(), método que quivo RDFS, o schemagen. A classe Java adicionar informações de forma in-
retorna uma string especificamente gerada define constantes para cada uma cremental. No entanto, é necessário
no diretório TDB. das classes, propriedades e recursos in- atingir um balanço na interface apre-
Dataset dataset = TDBFactory.
createDataset( getTdbLocation() ); Listagem 4: Acumular documentos RDF descobertos por
meio do sindice.com
Criar o recurso root para o projeto é
conceitualmente simples: é preciso so- 01 // fase de leitura: adicione os documentos em um modelo combinado
02 Model m = ModelFactory.createDefaultModel();
mente um URI para denotar o projeto e 03 for (ResIterator i = sIndex.listSubjectsWithProperty(
esse deve ser atribuído ao doap:Project. RDF.type, Sindice.Result ); i.hasNext(); ) {
Aqui, doap: é o componente namespace 04 String docURL = i.next().getPropertyResourceValue(
Sindice.link ).getURI();
do URI e se expande para http://usefu- 05
linc.com/ns/doap#, enquanto Project é o 06 // poderíamos ser mais sofisticados sobre a proveniência dos recursos
nome de uma classe RDFS. Matemati- 07 try {
camente, classes RDFS (RDF Schema 08 m.read( docURL );
09 }
ou Esquema RDF) correspondem a 10 catch (RuntimeException e) {
conjuntos de coisas que compartilham 11 // alerte sobre falha de leitura, mas siga na leitura de
características semelhantes – o conjunto outros documentos
de todas as coisas que são descrições de 12 log.warn( String.format( "Failed to retrieve from %s
because: %s", docURL, e.getMessage() ) );
projetos, por exemplo. 13 }
Para desenvolvedores, é interes- 14 }
sante pensar nas classes RDFS como
análogas aos types na linguagem Java
ou outras linguagens de programa- Listagem 5: Modelo de consulta
ção. Tenha em mente, no entanto, 01 String queryString = String.format( "describe ?s where
que as classes Java e as classes RDFS {?s <%s> \"%s\"}", FOAF.mbox_sha1sum.getURI(), mboxSha1 );
têm diferenças importantes. Em par- 02 // analise a consulta
03 Query query = QueryFactory.create( queryString ) ;
ticular, à medida que você descobre 04 // vincule ao modelo
mais informações sobre um recurso, 05 QueryExecution qexec = QueryExecutionFactory.create(
você poderá achar que se trata de um query, collected );
06 // faça a consulta
membro de uma classe que você não 07 dev.getModel().add( qexec.execDescribe() );
sabia de que fazia parte. Além disso,

66 www.linuxmagazine.com.br
Apache Jena | TUTORIAL

sentada aos usuários. Como não há tos. A definição da classe completa que os usuários anexassem algumas
modelo de dados fixo, o RDF permite pode ser encontrada no download. propriedades à linha de comando.
que qualquer predicado seja anexado Com Jena, toda informação de É um começo sólido, mas não fez
a qualquer recurso, algumas vezes de- estado é mantida no objeto Model. muito ainda pela web semântica e
clarado como “qualquer um pode dizer No entanto, um objeto Resource os princípios de dados ligados.
qualquer coisa sobre qualquer coisa”. contém referência para o Model que Meu projeto tem alguns desenvol-
Esse modelo pode ser muito pode- o contém. Então, eu posso pergun- vedores. Deste modo, vamos assumir
roso, mas tanta abertura pode dificul- tar ao Resource pelos seus triples re- que eu quero anotar no meu diário
tar as coisas. Por exemplo, há algumas lacionados, ou seja, pergunto se um de bordo quaisquer informações que
restrições na estruturação da interação determinado URI corresponde ao possam ser coletadas sobre eles para
do usuário. Nesse caso, não espero que recurso com um rdf:type em parti- ter a visão mais fiel possível sobre
os usuários digitem uma propriedade cular (aqui atribuído ao parâmetro o projeto. Para evitar questões de
URI completa ou linha de comando só type; listagem 3). privacidade, vamos usar somente
para adicionar um triple para a descri- Dado um Resource denotando o informações públicas.
ção do projeto; então, permitirei que projeto, posso adicionar um novo Qual seria a estratégia? Se o projeto
qualquer propriedade no vocabulário triple com esse recurso como um está usando um sistema de gerencia-
do DOAP seja abreviada somente com assunto, usando o método addPro- mento de recursos, posso listar todos
seu nome de local, menos o namespa- perty. Já que eu optei por usar um eles facilmente. Nesse tutorial, vou
ce. Os usuários digitarão algo como: modelo baseado em TDB persistente, presumir que o código é gerenciado
eu não preciso fazer uma chamada por um repositório Git. Algum pro-
$> plb set language Java
$> plb set -r release 1.0.1 separada para salvar os triples atua- cessamento simples do log do Git
lizados no disco. listará os desenvolvedores por nome
Esses dois comandos adicio- e e-mail e podemos usar o endere-
nam valores para doap:language e Dados automáticos ço de e-mail como uma chave para
doap:release; a bandeira -r substi-
tui um valor existente armazenado.
no diário de bordo reunir mais dados.
Amigo do amigo (Friend of a
O código RDF específico na classe Até então, eu criei um novo diário Friend ou FOAF [8]) é outro vo-
de ação Set é pequeno: a maior parte de bordo usando TDB e uma arma- cabulário RDF usado amplamen-
do código é ocupada com checagem zenagem triple, defini um recurso te. As pessoas utilizam FOAF para
de rotina e manipulação de argumen- para representar o projeto e permiti 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 $ tdbquery --loc=.plb/tdb "$sp select ?p ?o where {?proj a plb:root . ?proj ?p ?o} order by ?p"
02 ----------------------------------------------------------------------------------------
03 | p | o |
04 ========================================================================================
05 | doap:description | "A Jena tutorial showing how to create DOAP project descriptions" |
06 | doap:developer | <http://www.iandickinson.me.uk/rdf/foaf#ian> |
07 | doap:name | "plb" |
08 | doap:shortdesc | "Jena PLB tutorial" |
09 | rdf:type | doap:Project |
10 ----------------------------------------------------------------------------------------

Linux Magazine #80 | Julho de 2011 67


TUTORIAL | Apache Jena

websites, detalhes de contato, in- ➧ select: entrega linha de valores Jena, contendo recursos denotando os
teresses e amigos que conhecem correspondentes, semelhante às ar- desenvolvedores no projeto, cada um
por referência de perfis de outros mazenagens relacionais SQL; com um foaf:mbox denotando seu en-
amigos. A princípio, eu poderia ➧ ask: confirma se um padrão de dereço de e-mail como dado ao Git.
usar esses detalhes do log inicial consulta pode ser correspondido; O que são esses recursos, no entanto?
para procurar informações públicas ➧ construct: cria um novo gráfico Uma vez que eu não sei as reais identi-
dos membros e adicionar automa- com o uso de templates e padrões e dades dos desenvolvedores, apenas um
ticamente ao diário de bordo. Na consultas; dos endereços de e-mail, que recurso
história inicial do FOAF, a prática ➧ describe: transfere a responsa- URI deve ser usado para denotar cada
de disfarçar endereços de e-mail bilidade de retornar uma descrição desenvolvedor? Eu poderia criar um
para evitar spams era uma medida útil de um recurso para um servidor, identificador, porém o RDF também
comum contra estes; assim, preci- suportando especificamente o caso permite um tipo especial de recurso
samos buscar pela soma SHA1 dos no qual o cliente não sabe a estrutu- chamado recurso anônimo (anonymous
endereços de e-mail dos meus de- ra do gráfico contendo um recurso resource). Esse recurso age como qual-
senvolvedores. Um algoritmo ideal em particular. quer outro, exceto pelo fato de não ter
para obter essa informação seria: Tipicamente, o servidor retorna identidade conhecida. Por razões his-
algum tipo de descrição vinculada [9]. tóricas, é normalmente chamado de
for each unique committer C
let m be the email address of C O ponto chave, aqui, é que o clien- bNode, que pode ser usado como um
let s be sha1( m ) te – meu programa – não sabe os es- alocador de recurso, sobre o qual co-
run the sparql query: quemas que podem ser usados para nheço a existência e propriedades, mas
describe ?person where anotar um recurso particular, razão não conheço a identidade. No exemplo
{?person foaf:mbox_sha1sum
“value of s”} pela qual os verbos descritos são úteis plb, eu crio bNodes para denotar os
para obter um conjunto de dados que desenvolvedores antes de reunir infor-
A linguagem SPARQL é a padrão podem ser processados localmente. mações sobre eles de fontes públicas.
para fazer consultas em armazena- O único problema com meu algo- A API Sindice é muito fácil: é só
gens triple RDF e é totalmente su- ritmo, é que, no momento da escrita, chamar http://sindice.com/search?q=
portada pelo Jena. Ela tem quatro um serviço disponível publicamente com o termo de busca depois do si-
verbos de consulta: que agregava dados FOAF de múl- nal de igual (=). Esse endereço usa
tiplos pontos de publicação ficou negociação de conteúdo HTTP
Quadro 2: Empacotador de indisponível. No entanto, o projeto para determinar o formato no qual
linhas de comando de serviço de pesquisa Sindice [10] deve retornar resultados, o que faz
proporciona um índice navegável da busca algo muito natural para o
Uma variedade de comandos pode
para todos os documentos RDF que Jena, uma vez que o método Model.
ser executada de um shell. Em vez
de um script Bash para cada um possam ser detectados. Posso emendar read() faz com que o tipo favorito de
deles, um script empacotado, plb, meu algoritmo da seguinte maneira: conteúdo vá ao RDF. Para procurar
pode chamar um conjunto de co- por todos os documentos que men-
mandos diferentes. Veja o exemplo: for each unique committer C
let m be the email address of C cionam uma caixa de correio SHA1
plb init test-project let s be sha1( m ) em particular, mboxSha1, tudo o que
O script Bash plb chama um pro-
query sindice.com for docs eu tenho de fazer é digitar:
mentioning s
grama Java para desempenhar o for each found document Model sIndex = ModelFactory.
comando predefinido no primeiro accumulate the doc createDefaultModel();
argumento, com a convenção de into local model L sIndex.read( “http://api.sindice.
que um comando cmd corresponde run the sparql query against model L: com/v2/search?q=” + mboxSha1 );
a classe Java com.epimorphics.plb. describe ?person where
Cmd. Para ter dependências no cami- {?person foaf:mbox_sha1sum
“valor do s”} O Model resultante contém um
nho da classe, o script empacotador
executa o programa com mvn:exec, conjunto de recursos sindice:Result
que, por sua vez, executa um pro- A princípio, o programa poderia denotando as buscas. Para cada uma
grama Java arbitrário com todas as obter uma lista de desenvolvedores de das buscas, eu tento executar o link
dependências do pom.xml, baixando qualquer fonte de sistema de gerencia- para o documento original, tendo
as dependências que faltam antes, mento, no entanto o tutorial somente em mente que isso pode falhar se o
se necessário. O script Bash está no
lida com o repositório Git. O retorno documento foi indexado há algum
diretório bin do projeto plb.
daquela parte de código é um Model do tempo. A listagem 4 mostra o processo.

68 www.linuxmagazine.com.br
Apache Jena | TUTORIAL

Dado um modelo que contenha faz esse trabalho. No entanto, a combi-


triples potencialmente relevantes nação de um formato flexível de dados
e acumuladas, eu posso executar e a habilidade de mesclar informações
a consulta descrita (listagem 5). de múltiplas fontes na web mostra as
Aqui, collected (linha 5) é o modelo possibilidades tanto do Jena em rela-
contendo os triples dos documen- ção à abordagem de web semântica e
tos que foram coletados da web e dados vinculados em geral.
dev (linha 7) são os recursos para o O Jena está, atualmente, incubado
desenvolvedor sendo adicionados à na Apache, e contribuições são bem
descrição do projeto. vindas: bugs, sugestões, correções etc.
Resta um passo. Eu utilizei mui- Mais informações estão disponíveis
tas informações da web. O modelo no site do Jena. ■
inclui uma série de fontes denotan-
do a mesma pessoa, alguma delas Gostou do artigo?
tigo?
sendo bNodes; e eu gostaria de sim- Queremos ouvir sua
ua opinião.
plificar o gráfico, mesclando essas Fale conosco em
m
fontes redundantes. cartas@linuxmagazine.com.br
gazine.com br
O Jena não tem uma ferramenta
Este artigo no nosso
osso site:
te:
interna para fazer isso, mas não é http://lnm.com.br/article/5494
br/art /549
difícil com a propriedade foaf:mbox_
sha1sum, que é uma boa chave de
desambiguação. Em geral, esse Mais informações
tipo de mesclagem de informa-
[1] “What is Data Science?”
ção pode ser bem complexo, mas por Mike Loukides,
não com essa simples abordagem. O’Reilly Radar, junho de
Finalmente, adicionei os resulta- 2010: http://radar.
dos da consulta describe para meu oreilly.com/2010/06/
what-is-data-science.html
modelo TDB persistente.
[2] Dublin Core Metadata
Relatórios Initiative: http://
dublincore.org/
A SPARQL é útil também quando
quero produzir relatórios simples a [3] Vocabulário FOAF: http://
partir do diário de bordo. O coman- xmlns.com/foaf/spec/
do tdbquery está disponível na insta-
[4] Projeto Apache Jena: http://
lação completa do Jena e executa incubator.apache.org/jena
uma consulta contra um modelo
TDB da linha de comando. Por [5] Vocabulário DOAP: http://
exemplo, eu poderia listar todos os usefulinc.com/ns/doap#
desenvolvedores no projeto com os [6] Página DOAP: http://
seus sites, se conhecidos (listagem trac.usefulinc.com/doap
6), ou listar cada propriedade do
[7] Código-fonte Jena: http://
projeto (listagem 7). Obviamente, jena.sourceforge.
eu poderia escrever relatórios muito net/downloads.html
mais abrangentes, mas precisaria de
tutoriais separados para isso. [8] Projeto Friend of a
Friend: http://www.
foaf-project.org/
Conclusão
Meu objetivo com este artigo foi intro- [9] Descrição vinculada:
http://goo.gl/rOjmt
duzir os recursos Jena para uma tarefa
prática. Não pretendo, com isso, ofe- [10] Serviço Sindice: http://
recer a melhor forma de gerar perfis www.sindice.com/
DOAP. Na verdade, o plugin Maven

Linux Magazine #80 | Julho de 2011 69


TUTORIAL | VoIP com Asterisk - parte IX

Asterisk descomplicado

VoIP com
TUTORIAL

Asterisk – parte IX
O sistema telefônico ultrapassado, presente até pouco tempo atrás nas empresas, é prolífico
em cobranças: cada novo recurso ativado requer uma nova ativação de serviço, com o preço
adicionado ao pagamento mensal. É hora de mudar. É hora de criar sua própria central VoIP.
por Stefan Wintermeyer

N
a edição 79 da Linux Maga- bytes do endereço MAC do dispositivo O telefone Snom converte o en-
zine, você aprendeu sobre e cria uma sequência de ramais. Então, dereço MAC do aparelho de “boo-
como provisionar suas exten- para o servidor DHCP, o telefone não tfile-name” por um endereço “{}
sões através de DHCP, recursos de lista é apenas uma configuração de rede, mac” (para outros telefones pode
telefônica e redirecionamento de cha- mas também é o nome de um servidor ser necessário instalar o módulo
madas. Nesta edição, vamos abordar o TFTP e um arquivo de inicialização Mod_rewrite do Apache). Isto garante
provisionamento de ramais via DHCP, do ramal com seu respectivo nome. ao servidor de provisionamento que
para implantação em massa de ramais
com um único arquivo de configura- Listagem 1: dhcpd.conf
ção. Vamos ver ainda como trabalhar 01 ;–––––––––––-
com agenda telefônica. Mãos a obra! 02 ; Chamar o ramal 1234567
03 ;–––––––––––-
04 exten => 1234567,1,Verbose(${CALLERID(num)})
Provisionamento 05
06
exten => 1234567,n,GOToIf($[“${CALLINGPRES}”=”35”]?abuse1|1)
exten => 1234567,n,Dial(SIP/1001,30)
por DHCP 07
08
exten => 1234567,n,Playback(local/ed-greeting)
exten => 1234567,n,VoiceMail(1001@default)
A implantação de ramais em massa, 09 exten => 1234567,n,Hangup()
10 ;–––––––––––-
é definida como um processo onde 11 ; Tratamento de chamadas anônimas
vários telefones equipados com uma 12 ; Local dos arquivos de áudio abaixo
única configuração passam a funcionar 13 ; /var/lib/asterisk/sounds/local
14 ;–––––––––––-
automaticamente. O software Amoo- 15 exten => abuse1,1,Answer
ma Gemeinschaft, (Comunidade) [1] 16 exten => abuse1,n,Wait(1)
17 exten => abuse1,n,Monitor()
abordado na edição anterior, usa para 18 exten => abuse1,n,Playback(local/ed-greeting_offenders)
o provisionamento coletivo de ramais, 19 exten => abuse1,n,WaitForSilence(500)
um método que poderia ser aplicado 20 exten => abuse1,n,Playback(local/ed-ola)
21 exten => abuse1,n,WaitForSilence(500)
em instalações de outros procesos 22 exten => abuse1,n,Playback(local/ed-assinatura_nao_reconhecida)
tecnológicos: um servidor DHCP 23 exten => abuse1,n,WaitForSilence(1200)
busca todos os telefones e confere a 24 exten =>
25 abuse1,n,Playback(local/ed-entao_o_que_posso_fazer_por_voces)
cada um uma URL que corresponde 26 exten => abuse1,n,WaitForSilence(1000)
ao seu respectivo arquivo de configu- 27 exten =>
28 abuse1,n,Playback(local/ed-o_que_especificamente)
ração. Um exemplo de configuração 29 exten => abuse1,n,WaitForSilence(2000)
de ramais em massa via DHCP pode 30 exten => abuse1,n,Wait(1)
ser conferido na listagem 1. 31 exten => abuse1,n,Playback(local/ed-numero_restrito)
32 exten =>
Comumente utilizados na telefonia 33 abuse1,n,Playback(local/ed-infelizmente_sou_apenas_um_computador)
VoIP, os telefones Snom [2] lêem os 34 exten => abuse1,n,StopMonitor()
35 exten => abuse1,n,VoiceMail(1001@default)
logs do servidor DHCP, sendo assim, 36 exten => abuse1,n,Hangup
o aparelho reconhece os três 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 você pode enviar a configuração e Muitos usuários usam o recurso de
cabeçalho HTTP com um nome, efetuar o reinício do aparelho através encaminhamento de chamadas para os
como por exemplo, “Snom 370”. de um dispositivo SIP Notify persona- telefones, e o Comunidade as efetua de
Um script PHP chamado gera a lizado, como o arquivo /etc/asterisk/ forma centralizada no servidor, gravando
configuração ao iniciar. A configura- sip_notify.conf ilustrado a seguir: logs de cada uma delas. Elas podem ser
ção para cada fabricante é diferente, [snom-check-cfg] configuradas através da interface web
com um telefone Snom em um caso Event=>check-sync;reboot=false ou um código de serviço no telefone.
Content-Length=>0
simples como na listagem 2 você pode [snom-reboot] Na próxima edição da Linux Ma-
transformar qualquer extensão e per- Event=>reboot gazine, na última parte deste tutorial,
sonalizar as teclas do telefone. Com Content-Length=>0 você irá aprender como trabalhar
o Comunidade também é possível Agora digite o comando sip notify com scripts automatizados. Até lá! ■
configurar os botões em uma interface snom-check-cfg 1234 no terminal, para
web (figura 1). Já os telefones Aastra carregar a nova configuração no telefone.
Listagem 2: Configuração
permitem que você selecione uma va- O comando no Shell é uma chamada
do telefone Snom
riedade de configurações do servidor de equivalente ao comando asterisk -rx
provisionamento – os telefones Snom \’sip notify snom-check-cfg 1234\’. 01 language: English
02 time_24_format: on
tem muito a melhorar neste quesito. 03 date_us_format: off
Agenda e 04 user_host1: 192.168.1.130
Releitura da encaminhamento
05
06
user_name1: 1234
user_pname1: 1234
configuração Em uma empresa, não pode faltar uma
07
08
user_pass1: Sippasswort
user_realname1: Paula Plauder
09 active_line: 1
A maneira mais fácil de configurar agenda telefônica centralizada, com a
um telefone Snom novo, é realizan- qual todos os telefones se comuniquem
do um reboot neste, chamando em e todos os seus usuários tenham acesso. Mais informações
conjunto o script: Todos os kits de ferramentas do Asterisk [1] Amooma Gemeinschaft ou
wget -q -O /dev/null -o fornecem uma agenda de telefones em Comunidade: http://www.
/dev/null http://UIP_do_ uma interface web interativa, e que amooma.de/gemeinschaft/
telefone/confirm.htm?REBOOT=yes pode ser personalizada de acordo com [2] Série de telefones Snom:
http://www.snom.com/
No entanto, assume-se que o servi- a necessidade do usuário, conforto que de/products.html
dor Snom local (o do próprio aparelho) depende do telefone conectado (alguns
está habilitado e que não há nenhu- telefones não interagem bem com o
ma proteção por senha. Mas, se uma Comunidade). O software também Gostou do artigo?
tigo?
senha estiver configurada, informe-a permite que a agenda de telefones seja Queremos ouvir sua opinião.
pinião.
no comando wget. Após a reinicializa- exibida no visor do aparelho (figura 2), Fale conosco em m
cartas@linuxmagazine.com.br
azine.com.
ção do aparelho, a nova configuração através de um navegador XML. Outros
do servidor de provisionamento do recursos presentes no visor do telefone Este artigo no nosso
osso site:
e:
br/art 551
http://lnm.com.br/article/5515
aparelho será lida. Alternativamente, incluem função de busca e ordenação.

Linux Magazine #80 | Julho de 2011 71


PROGRAMAÇÃO | Open Search Server

Servidor de busca aberto

Busca com
PROGRAMAÇÃO

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

A
startup (empresa de tecnologia para adicionar funções de busca a um flexível, é implementada em Zkoss [5]
recém criada) francesa Jaeksoft website ou outro banco de dados e e funciona com qualquer navegador
foi criada em fevereiro de 2010. pode até construir uma máquina de compatível com Ajax.
Apenas um anos depois, o fabricante busca agregada para indexar e buscar
lançou a versão 1.2 de sua ferramenta dados de múltiplas fontes na Internet. Suporte corporativo
de busca e indexação, o Open Search O indexador OSS suporta uma longa Além da variante livre, lançada sob mui-
Server [1]. Sua relativa imaturidade é lista de formatos de arquivos. Uma API tas licenças (incluindo AGPL e GPLv3)
evidente, assim como alguns aborreci- está disponível para acesso rápido e sem por conta de sua estrutura modular, o
mentos. Mas também há uma quantide complicação a resultados e a maioria fornecedor, a Jaeksoft, também oferece
de recursos impressionantes. de seus muitos recursos (figura 1). uma versão corporativa, com suporte
O alicerce da ferramenta é o Java opcional, acordo de nível de serviço
Indexação livre em um servidor Tomcat [2]. O meca- (Service Level Agreement - SLA) e re-
De acordo com seu fornecedor, o nismo de busca Lucene [3] permite curso avançado na forma de módulos
Open Search Server (OSS) vai “vas- que administradores e desenvolvedores instaláveis. O fornecedor também ofe-
culhar sistemas de arquivos, bancos de usem sua sintaxe de interpretador de rece desenvolvimento, implementação
dados e sites para criar rapidamente consultas e funções de classificação fora e otimização dos módulos adicionais.
índices confiáveis e dar suporte a um do gerenciamento da interface (qua- A versão Community é facil de
processo preciso de investigação”. Em dro 1). O OSS depende do Quartz [4] instalar: faça o download do arquivo
outras palavras, você pode usar o OSS como agendador. A interface, rápida e tar.gz do site, abra-o em um servi-
dor web e execute start.sh no shell
(start.bat no Windows). São neces-
sários um servidor de web em fun-
cionamento com PHP5, php5-curl e
Java Runtime Environment.
O pacote não inclui um script init;
se você deseja executar o servidor per-
manentemente, é importante prestar
atenção no manual. Infelizmente, o
wiki do OSS [6] não oferece mais do
que detalhes sobre o procedimento de
instalação. Para esse artigo, usamos a
versão open-search-server-1.2.1-r987.
Figura 1 Lucene, Tomcat e uma API flexível combinados no Open Research Server. tar.gz de 30 de março de 2011.

72 www.linuxmagazine.com.br
Open Search Server | PROGRAMAÇÃO

Primeiro contato Os modos disponíveis aqui são full, o seu projeto é experimentando.
A pasta apache-tomcat-6.0.32 no pacote cluster e optimized. Por causa da falta Snippet fields (também presente na
compactado contém alguns caracte- de documentação, a única forma de Query tab) define o formato de saída.
res familiares: o aplicativo do servidor descobrir qual modo é melhor para Você pode definir os campos e seus
Tomcat vem pré-configurado com
seus binários, arquivos de log e de Quadro 1: Lucene
configuração. Se algo não funciona, O coração de qualquer mecanismo de busca moderno é o indexador. O in-
cheque o arquivo de log catalina.out. dexador escalonável criado usando a biblioteca livre do Lucene Java traba-
O Tomcat oferece dicas úteis caso lha bem se comparado com mecanismos de busca comerciais.
algo não funcione em sua instalação. Analisador, Indexador e Fields
Os índices ficam no diretório data, O princípio fundamental é simples: um analisador separa um documento e dis-
onde você também encontrará um tribui os metadados deste e componentes de texto por campos predefinidos.
subdiretório com a configuração em Então, o criador de índice cria o índice em si. O criador de índice é tipicamente
arquivos HTML. Você pode usar um um transdutor automático, que leva você a uma lista de links quando é intro-
script ou adicionar URLs e padrões duzido um termo. Especialistas referem-se a isto como “arquivos invertidos”,
aqui, mas vai precisar reiniciar o OSS porque um índice corresponde mais ou menos ao trabalho original. Entretanto,
os trabalhos não são mais armazenados na sua ordem natural, mas sim em
depois de fazer isso.
ordem alfabética com um apontador para suas posições originais.

A interface web Criar e manter a máquina em funcionamento e garantir armazenamento


compacto dos link no arquivo do sistema normalmente é uma tarefa arrisca-
Depois de iniciar, o Tomcat escuta a da que o Lucene realiza de uma forma muito elegante. Ele facilmente alcança
porta padrão 8080. Você deve manter um desempenho de indexação de 30MBps em uma máquina moderna, en-
essa porta atrás do firewall para evitar quanto reduz o texto original em torno de 20% no índice. Obviamente, esse
acessos não autorizados e deixá-la dis- processo depende da extensão para a qual o mecanismo de busca acessa
ponível apenas para serviços locais. Se o documento e o distribui pelos campos.
você usar seu nvegador para acessar Boost e Page Rank
a URL http://localhost:8080//, será Um programador pode usar os campos oferecidos para dar, por exemplo,
levado à interface de gerenciamen- uma atenção especial aos títulos, dando mais peso a esse elemento, ou
to, que inicialmente apenas mostra usando metadados externos, como nome ou autor do arquivo. Se o termo
as abas Index e Privileges. Você pode 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
começar criando um novo índice
texto. O levantamento correto destes campos vai levar ao tipo de ranking
ou usuário com privilégios. Modelos que os usuários querem encontrar. O Lucene pode também analisar campos
estão disponíveis para índices (índice individuais de uma forma focada ou usá-los para busca de resultados.
vazio, buscador de arquivo e buscador Além das análises booleanas relativamente entediantes, você pode também re-
web). Depois, você pode selecionar alizar buscas com coringas ou tolerantes a erros. O objetivo aqui é não apenas
um índice para editar. Uma vez car- encontrar resultados com prefixo idêntico (como em SQL com ‘Linux Mag%’),
regado o índice, marcações de tempo mas também com grafias diferentes. Graças ao método Levenshtein Distance,
são adicionadas ao menu do OSS, você pode definir sua própria sintaxe para descobrir todas as variáveis ortográfi-
como na figura 2. cas do Schmie?[dt] + (Schmid/Schmit/Schmidt, com ou sem um e depois do i)
A falta de documentação pode fazer ou M[ae][iy]e?r (Meyer/Mayer/Maier/etc.) sem comprometer o desempenho.
com que as abas, opções de configura- Mantenha distância!
ção e itens secundários sejam um pou- Qualquer tipo de análise a distância recebe suporte do operador de proxi-
co confusos. Entretanto, os modelos midade (~) em análises com múltiplas palavras. Ele encontra todos os tipos
(templates) e funções autoexplicativas de seções de textos nos quais várias palavras ocorrem até a distância má-
xima de uma para a outra. Em contraste com documentos estáticos ou le-
são fáceis de serem iniciados. O atributo
vantamento de campos, isso significa que você pode levantar mais termos
Schema permite a edição de detalhes
que os outros durante o tempo de execução. O termo operador de boost (^)
nas funções de busca; Query permite também permite que você interprete chaves de busca individuais como mais
a formulação de buscas ou coordena importantes do que outras com consultas de múltiplas palavras.
o formato do resultado de saída. O Resumindo, usuários típicos não precisarão se preocupar com estas coisas em
OSS pode confrontar os resultados um mecanismo de busca ideal, porque os resultados mais relevantes estarão no
(Query > Collapsing) caso critérios topo da lista de qualquer forma – mesmo que não seja utilizado operadores. O in-
específicos permitam a conclusão de dexador do Lucene inclui um grande número de ferramentas para lidar com isso.
que sites idênticos existem.

Linux Magazine #80 | Julho de 2011 73


PROGRAMAÇÃO | Open Search Server

tamanhos aqui e, então, configurar Uma das configurações pode ser possivelmente verá a mensagem de erro
a lista de resultados. mal interpretada: se você for levado a ilustrada na figura 3. Em muitos casos,
A aba Crawler é onde você es- achar que precisa aumentar ao máximo o OSS ou Java congela quando não tem
pecifica o alvo de sua busca: web- o número de sites por host para um ser- mais memória.
sites, bancos de dados ou sistemas vidor web com grande quantidade de Se você quer criar um índice de
de arquivos. Vários filtros estão dis- conteúdo, vai provavelmente cair em um site grande, certifique-se de que
poníveis para auxiliá-lo a modificar uma armadilha. O valor somente diz tenha memória suficiente em seu sis-
isso. A figura 2 mostra a subjanela ao OSS quantas páginas recuperar na tema. Para alocar 2 GB de RAM no
do Crawl process para uma máquina sessão antes de adicioná-las em seu índi- Java Virtual Machine, você simples-
que está indexando o site inteiro da ce. Se você configurar este valor muito mente precisa adicionar as duas linhas
Linux Magazine. alto, usará memória RAM demais ou seguintes ao seu script de inicialização:

CATALINA_OPTS=”-Xms2G -Xmx2G
-server”
export CATALINA_OPTS

É possível usar mais do que 2 GB


em um sistema operacional de 64
bits com Java de 64 bits. Neste caso,
as opções a seguir permitem 6 GB de
memória RAM para o Java:

CATALINA_OPTS=”-d64 -Xms6G -Xmx6G


-server”
export CATALINA_OPTS

Ferramentas de monitoramento,
tais como Darkstat [7], nos repositó-
rios Debian, monitoram o tráfego que
Figura 2 OSS pesquisando o website da Linux Magazine. O número máximo de isso cria ao mesmo tempo (figura 4).
URLs por campo de host é completamente equivocado. Se você entrar Alguns firewalls ou servidores
com um valor mais alto aqui, a memória se esgotará rapidamente. web classificam ondas de consultas
muito frequentes como um ataque
de negação de serviço (DoS) e blo-
queiam o cliente.
De acordo com o fornecedor, o
OSS é capaz de indexar 16 lingua-
gens; pode identificar palavas intei-
ras, fragmentos, ou variantes de uma
Figura 3 Zkoss apontando um aviso do Java heap space – essa mensagem forma básica (radical [8]). A lista dos
tipicamente refere-se à falta de memória RAM para o JVM. formatos de documentos inclui XML,
HTML/XHTML, PDF, Microsoft
Listagem 1: Consulta OSS Word, PowerPoint, OpenOffice.org,
01 title:($$)^10 OR title:("$$")^10 RTF, texto puro (plaintext), Torrent,
02 OR arquivos de áudio (MP3/MP4, OGG,
03 titleExact:($$)^10 OR titleExact:("$$")^10 FLAC, WMA) e muitos outros. Para
04 OR url:($$)^5 OR
05 url:("$$")^5 uma completa lista da instalação
06 OR urlSplit:($$)^5 OR urlSplit:("$$")^5 atual, veja em Schema/Parser list.
07 OR
08
09
urlExact:($$)^5
OR urlExact:("$$")^5
Consulta e lema
10 OR content:($$) OR Consultas podem ser implementadas
11 content:("$$") como consultas HTTP via interface
12 OR XML e integradas ao seu website por
13 contentExact:($$) OR contentExact:("$$")
meio de uma biblioteca de cliente

74 www.linuxmagazine.com.br
Open Search Server | PROGRAMAÇÃO

PHP. A interface de gerenciamento


também oferece uma tela de entra-
da em Query/Edit/Query, que pode
ser usada para buscas no índice. A
listagem 1 mostra as especificações
padrão para a versão anterior, mas
que também funciona na 1.2 e é facil-
mente extensível. A chave de busca
é representada por $$; ^ seguido de
um número que define o peso; pala-
vras-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-sear-
ch-server.com para a forma normali-
zada 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 de-
senvolvedores, o OSS usa diferentes
analisadores para tal: o analisador
Figura 4 O Open Search Server local está analisando o servidor de web local a
de texto identifica grafias similares, menos de 100KBps porque o administrador restringiu ao máximo o nú-
enquanto o urlExact, titleExact e mero de linhas de execução e frequência de consultas na configuração.
contentExact usam o analisador padrão.
Na aba Scheduler, você pode criar ciona uma busca funcional de ponta
cronjobs para controlar o OSS – por a ponta, pelo menos parcialmente.
exemplo, para as reconstruções dos Isso porque houve um lado negati-
índices (Optimize). A opção Runtime vo: a interface tem problemas com
oferece importantes opiniões e comen- acentuação em alguns idiomas e não
tários a respeito do índice, do cache é completamente capaz de imple-
e dos estágios do sistema. O OSS é mentar os parâmetros da linguagem
também bem equipado para configu- de buscas Lucene. Realizar consul-
rações de alta disponibilidade: a aba ta na interface gráfica é melhor na
Replication inclui caixas de entrada maioria das vezes, mas não em todos
para as URLs e indexa nomes para os casos (figura5).
instâncias de OSS mais detalhadas. Recomenda-se a API XML. De-
senvolvedores podem usá-la para
API e PHP buscas no índice – em quase qual-
Figura 5 Se você tentar usar
Os subdiretórios open-search-server/ quer linguagem de programação parâmetros mais
examples/php/OSSquery e open-sear- – e mostrar os resultados. Tudo exóticos para o Lucene
ch-server/php/example contem alguns o que você precisa fazer é adi- diretamente na consulta
exemplos de scripts PHP simples que cionar os parâmetros necessários (por exemplo, a busca
você pode simplesmente integrar à nos requerimentos corresponden- com ~), você pode
sua própria página web, retirando, tes de HTTP na forma de um falhar por causa da
implementação do OSS.
assim, funções de busca da interface requerimento GET:
de gerenciamento para o navegador contendo as combinações junto com
http://localhost:8080/select?
do cliente. use=Index&qt=Query&q=Keyword a prévia do texto correspondente (ou
Em webSearch.php, por exemplo, snippets). Em outras palavra, como
você pode adicionar seu próprio Quando vê este tipo de consulta, um programador, você somente pre-
índice como padrão, o que propor- o servidor retorna um arquivo XML cisa do seguinte:

Linux Magazine #80 | Julho de 2011 75


PROGRAMAÇÃO | Open Search Server

exemplo, os campos são url e host


(listagem 3).
Os três parâmetros de colapso
especificam se o OSS deve agrupar
os resultados. O campo autoritati-
vo é livremente selecionável; este
poderia ser o host ou o título da
página. Usando esta abordagem,
você pode ter associações seme-
lhantes nos resultados até o usuá-
rio clicar novamente, melhorando
assim a legibilidade.
Na listagem 2, este processo acon-
tece da linha 9 à 11. No modo clus-
Figura 6 Versões futuras incluem a função screenshot. ter, a conta máxima é apenas 1; en-
tretanto, você não pode omitir este
filtrar e validar o user input (tome sa), enquanto a linha 20 remove parâmetro. A linha 21 finalmente
cuidado, a API também pode deletar um delete se um ataque for bem concatena os parâmetros da busca
os documentos do índice!). sucedido. A matriz associativa params com a URL do host e codifica os
agrupar a string para consultar coleta todos os parâmetros para a resultados. Um simples chamado ao
a API. análise de API, sendo que os parâ- simplexml_load_file($this->query) é
analisar o documento XML re- metros use, qt e q são obrigatórios o bastante para executar qualquer
tornado e formatar a saída. e todos os outros são opcionais. O pedido API formulado deste modo.
A listagem 2 mostra um resumo template de busca está disponível Você obterá, como retorno, um do-
de um simples script de API. As na distribuição e oferece uma aná- cumento XML como o mostrado
linhas 4 e 20 implementam uma lise bem simples do índice. na listagem 3.
proteção mínima contra códigos O próximo passo é definir quais Os resultados finais estão dispo-
maliciosos. A linha 4 proporciona campos você quer retornar na níveis como doc in result, que in-
proteção contra scripts de cross site resposta XML; isso é feito na terage com um loop foreach ($hits
(técnica de programação malicio- aba Query/Returned Fields. Neste ->result->doc as $doc) para cada
item. Os dois arquivos modelo PHP
Listagem 2: build-query.php da Linux Magazine Online [9] tam-
01 function build_query($q){ bém suportam as características do
02 $params=array(); // todos os parâmetros são adicionados aqui e Lucene, incluindo a aplicação de
03 // são removidas as tags buscas com coringas como com
04 $this->q=substr(trim(strip_tags($q),0,80)); o caractere ~, o que antes causava
05 // basic parameters
problemas (figura 5).
06 $params[‘use']='myIndex'; // índice utilizado
07 $params[‘qt']='search'; // Query Template
08 // Collapsing Novidades na versão
09
10
$params[‘collapse.mode']='cluster';
$params[‘collapse.field']='host'; 1.2 e previsões
11 $params[‘collapse.max']=1;
12 // Pagination
A versão 1.2 apresenta diversas ca-
13 if (isset($_GET[‘page'])) $params[‘start']=((int) racterísticas dignas de aplausos.
$_GET[‘page']*10)-9; O buscador web agora diz a você
14 else $params[‘start']=1; quando ele atualizou a página no
15 $params[‘rows']=$this->rpp; índice, usa chaves únicas para lem-
16 $params[‘query']=trim($q); // chave de busca
17 $params[‘sort']='score'; brar páginas idênticas e permite
18 $host= ‘http://127.0.0.1:8080/select'; // URL do host OSS que você ignore arquivos robots.
19 // In case somebody injected a "Delete" parameter: txt. O banco de dados do craw-
20 unset($params[‘delete']); ler também entende buscas SQL;
21 $this->query=$host.'?'.http_build_query($params);
você pode desabilitar tanto listas
22 }
de padrões como de exclusão, e as

76 www.linuxmagazine.com.br
Open Search Server | PROGRAMAÇÃO

análises identificam documentos


similares com mais confiabilidade.
A tag modified é ainda um pro-
blema bastante substancial. No mo-
mento, ela detecta se a página foi
modificada, mas não detecta se so-
mente a publicidade da página foi
substituída ou se o conteúdo em
si foi modificado porque a página,
por exemplo, contém um feed RSS.
Você pode usar o CSS para melhorar
esta característica em seus próprios
servidores de web usando a tag div
para esconder menus, propagandas
e feeds do indexador:
<div class=”opensearchserver.
ignore”></div>

O desenvolvimento está em pro-


gresso em relação a muitas caracte- Figura 7 Futuras versões incluem uma extensão de renderização.
rísticas: de acordo com o desenvol-
vedor Emmanuel Keller, um tipo Listagem 3: bResposta XML
de page rank (baseado na função
score do Lucene) foi parcialmente 01 <?xml version="1.0" encoding="UTF-8"?>
02 <response>
implementado. As funções score, ord, 03 <header>
rord, byte, float, int, e short estão 04 <status>0</status>
completas. Um exemplo válido de 05 <query>Query_Name</query>
consulta, então, seria assim: score() 06 </header>
07 <result name= "response" numFound="111" collapsedDocCount="0"
+ rord(‘modified_date’). A próxima start="1" rows="10" maxScore="NaN" time="11">
versão incluirá também uma função 08 <doc score="0.4523" pos="1">
screenshot e uma extensão de rende- 09 <field name= "url">http://www.myserver.com/path/file.html
</field>
rização. (figuras 6 e 7) 10 <field name="host">www.myserver.com</field>
O OSS ainda não é perfeito, mas 11 <snippet name= "title" highlighted="yes">Page title</snippet>
definitivamente está no caminho 12 <snippet name="content" highlighted="yes">brief preview of
certo. E é rápido: quando execu- matches and neighborhood ...</snippet>
13 </doc>
tado em um desktop, respondeu a 14 </xml>
uma consulta de 25.000 páginas do
índice do site da Linux Magazine
surpreendentemente rápido. Pou- Mais informações
quíssimas vezes levou mais de meio [1] Servidor Open Search: http://www.open-search-server.com/
segundo, como confirmado pelos [2] Tomcat: http://tomcat.apache.org/
nossos testes com centenas de URLs
escolhidas aleatoriamente. ■ [3] Lucene no Apache: http://lucene.apache.org/java/docs/index.html
[4] Agendador Quartz: http://www.quartz-scheduler.org

Gostou do artigo? [5] Zkoss: http://www.zkoss.org/product/zk.dsp

Queremos ouvir sua opinião. [6] Wiki OSS: http://www.open-search-server.


com/wiki/en/index.php/Main_Page
Fale conosco em
m
cartas@linuxmagazine.com.br
gazine.co br [7] Darkstat: http://dmr.ath.cx/net/darkstat/

Este artigo no nosso


sso site:
te: [8] Lemma: http://en.wikipedia.org/wiki/Lemma_(linguistics)
http://lnm.com.br/article/5499
br/art /549 [9] Scripts PHP: http://www.linuxmagazine.com.br/issues/80/OSS.zip

Linux Magazine #80 | Julho de 2011 77


Linux Magazine #81
IPv6
PREVIEW

Na próxima edição, você irá conhecer mais sobre as


vantagens e facilidades da implementação da nova
versão do protocolo IP, o Ipv6. Esta nova versão,
promete resolver os já presentes --- e os futuros, du-
rante um bom tempo, esperamos --- problemas de
endereçamento IP da Internet.
A versão 6 do protocolo IP não é somente uma mera
atualização da versão 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 versão? ■

Ubuntu User #22


Ubuntu 11.04
O novo Ubuntu 11.04, codinome “Natty Narwhal”,
está saindo do forno. Muitas mudanças são espe-
radas e previstas para este lançamento. Entre elas,
podemos destacar o novo modo de organização
da área de trabalho, que agora utiliza o Unity, a
polêmica interface de usuário da versão netbook,
que foi totalmente reescrita para a versão 11.04. Os
recursos multitouch também vêm aperfeiçoados e
com muitas novidades. Não perca!

Admin Magazine #3
Conexão Segura
Quem precisa conectar computadores com sis-
temas operacionais diferentes frequentemente
precisa procurar por soluções adequadas. O tema
de capa da próxima edição da Admin apresenta
softwares propiciam uma estreita relação entre
Windows e Linux e que também servem para
conexões com roteadores e firewall como os da
Cisco, Juniper ou Checkpoint.

82 www.linuxmagazine.com.br

Você também pode gostar