Escolar Documentos
Profissional Documentos
Cultura Documentos
LM 080 Ce
LM 080 Ce
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! ■
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?
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.
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
ANÁLISE
Lições sobre localização 50
PROGRAMAÇÃO
Busca com qualidade 72
Pequeno soldado 55
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
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.
6 www.linuxmagazine.com.br
Coluna do Augusto
COLUNA
sobre o Android
Novas iniciativas e alternativas estão surgindo no
universo do desenvolvimento Android.
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:
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
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-
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.
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
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
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
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
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
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
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.
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.
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
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
76 www.linuxmagazine.com.br
Open Search Server | PROGRAMAÇÃO
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