Arquivo

Archive for the ‘TCP/IP’ Category

Blocos, prefixos e máscaras em IPv4

Introdução

Um IPv4 é usualmente repreentado como quatro números decimais separados por um “.“:

v.x.y.z

onde cada um dos v, x, y, z acima podem assumir valores de 0 a 255. Entretanto, internamente, cada v, x, y e z é representado em binário de 8 bits (1 byte), que agrupados possuem 4 x 8 = 32 bits. Então, o IPv4 168.66.0.30 é a representação decimal do binário:

10101000.01000010.00000000.00011110

Onde o ponto é um mero efeito didático para ilustrar cada um dos bytes do IPv4, do exemplo. Eventualmente podemos representar em hexadeximal:

A8.42.00.1E

onde o ponto continua mantendo o efeito didático, neste caso, também. Para nós é muito melhor a representação decimal.

Blocos, prefixos e máscaras

Quando um sistema autônomo recebe números IPv4 associados ao seu AS (Autonomous System), recebe-os na forma de um ou mais blocos, isto é, um conjunto de números IPsv4 organizados sequencialmente. Os blocos são caracterizados por um número precedido por uma /, no final do IPv4, chamado prefixo. Assim:

168.66.0.0/22

O prefixo identifica a quantidade de números na sequência que começa com o IPv4 168.66.0.0. O prefixo, também, caracteriza a máscara do bloco IPv4 recebido. Mais claramente, o prefixo informa o número de bits que a máscara possui. Assim, o prefixo /22 indica que a máscara possui 22 bits, isto é:

11111111.11111111.11111100.00000000

que em decimal é:

255.255.252.0

Tamanho dos blocos

A tabela abaixo representa o número de IPsv4 possue cada bloco formado pelos respectivos prefixos, até o prefixo /16.

Tabela de blocos IPv4 (parcial)

O prefixo /24 está com sua linha e sua coluna em vermelho. O /24 é um prefixo muito interessante pois ele representa a máscara 255.255.255.0, a qual indica que o bloco tem 256 IPsv4! Adicionalmente, o prefixo /24 é interessante para determinar o tamanho dos outros prefixos. Na linha do /24 é possível ver que ele possui 256 x /32, 128 x /31, 64 x /30, …, 1 x /24 (claro!). Na coluna, temos que o /24 possui 1 x /24, o /23, 2 x /24 (512 IPsv4), o /22 possui 4 x /24 e assim sucessivamente!

Divisão dos blocos

Suponha que um AS tenha recebido um bloco /20. E que um cliente deste AS solicite um bloco /28 para sua rede. Quais IPsv4 devemos entregá-lo? Somente dividindo o /20 em prefixos maiores podermos responder a esta questão. Existem muitas formas de dividir um bloco /20. Vamos seguir aquela que divide os blocos pela metade e usar uma ferramenta como o XMind (https://www.xmind.net/), para apresentar esta divisão.

Um bloco /20 possui 16 blocos /24, segundo a tabela acima. Se o dividirmos em dois blocos /21, cada um deles terá 8 x /24. O primeiro bloco é o 168.66.0.0/21 e o segundo é o primeiro, mais 8 x /24: 168.66.8.0/21. Temos, então, a primeira divisão:

Divindindo o /20 em 2 x /21

Vamos ao primeiro bloco /21 e dividí-lo em dois blocos /22. Um /22 possui 4 x /24, e continuar sucessivamente até /32, sempre focando no primeiro bloco da sequência. Então, o resultado final será:

Divindo o primeiro bloco /21 até 2 x /30

Para melhorar a visibilidade, sem uso de qualquer ferramenta:

A aparência é de uma flecha…

Respostas a questões úteis

  • A Internet fica sabendo que o bloco 168.66.0.0/20 é seu, através do anúncio deste bloco via o protoloco BGP (Border Gateway Protocol).
  • Você pode anunciar o bloco /20 inteiro ou fazê-lo em blocos menores (i.e., prefixos maiores). A Internet, quando enviar um pacote para um de seus IPsv4, a entrada será por onde o anúncio de prefixos maiores foram feitos.
  • O maior prefixo aceitável para anúncio é o /24. Você até pode tentar anunciar blocos com prefixos maiores, mas as boas práticas recomendam que anúncios de prefixos maiores do que /24 sejam bloqueados.
  • Falando em boas práticas, vale a pena ver o Mutually Agreed Norms for Routing Security (MANRS => https://www.manrs.org), uma iniciativa da Internet Society (https://www.internetsociety.org).
  • Cada bloco tem dois IPsv4 reservados: o primeiro IPv4 do bloco é aquele que identifica a rede e, o último bloco reservado para o broadcast.
  • Se você precisa entregar, por exemplo, 497 IPsv4 para seus clientes precisará de um bloco /23 ou dois blocos /24. Se os blocos /24 forem contíguos, ótimo pois eles representam um /23 e perderá somente dois IPsv4. Se os dois /24 não forem contíguos perderá quatro IPsv4! Planejar sua divisão de blocos é uma tarefa essencial, portanto!
  • Claro que terá de documentar a divisão de seu bloco IPv4 com seus respectivos destinatários. Existem diversas aplicações para lhe ajudar nisto, como uma planilha, por exemplo.
  • Usar o /24 para pensar na divisão dos blocos foi uma estratégia baseada no fato de que em cada uma das quatro divisões da representação decimal do IPv4 pode-se fazer operações aritméticas, no limite de 0 a 255. Mas, podemos fazer operações aritméticas sobre todo o IPv4, se o transformamos em um número inteiro. Por exemplo, o IPv4 168.66.10.123 é representado pelo inteiro 2.822.900.347. As operações aritméticas devem estar no limite de 0 (0.0.0.0) a ‭4,294,967.295‬ (255.255.255.255). Existem diversas ferramentas que ajudam nas tarefas de conversões. O app DeadBeef é uma ótima opção, como mostra a figura abaixo:
Calculadora DeadBeef
  • O /24 ajuda bastante. Suponha o bloco 168.66.128.0/21, que algumas vezes é apresentado como 168.66.128/21. Este bloco tem 8 x /24. O primeiro é 168.66.128/24. o segundo é 168.66.129/24, o terceiro é 168.66.130/24, …, o oitavo é 168.66.135/24.
Categorias:IPv4, TCP/IP

O Mathematica é bom de texto

 

Introdução

 

Visualização está em moda. Não é para menos! Há inúmeras ferramentas disponíveis para exibir incríveis representações e uma exemplar revisão sistemática (LENGLER; EPPLER, 2007) exibe A Periodic Table of Visualization Methods. O Mathematica1 (Wolfram Mathematica), com facilidades ampliadas, não fica para trás. Como o interesse deste documento é falar sobre textos, no Mathematica, a Figura 1 mostra algumas alternativas de produzir nuvens de palavras. Para todos os gostos e finalidades.

wordcloudsFigura 1. Variações de nuvens de texto, no Mathematica, sobre a RFC7892 após manipulações no texto original. A função que produz cada uma das variações estão acima da respectiva imagem.

Mas, o que interessa, na realidade é indicar como o Mathematica é incrivelmente apropriado para manipular textos. Alguns exercícios foram feitos durante os estudos preliminares para a construção do WordIETF. Eles serão apresentados, sem a intenção de ensinar o uso do Mathematica.

 

Exercícios sobre o Mathematica

 

Tais exercícios foram executados sobre uma única RFC, a RFC7892. Foi uma escolha arbitrária, a partir das mais recentes. E, mais ainda, não há nenhum propósito adicional, além de mostrar que o Mathematica é bom de texto. Interpretações complementares são deixadas para o leitor.

 

Construindo um dicionário

 

Um dicionário pode ser construido através do Association. Um .Association é contruído pelo Dataset. A figura abaixo ilustra as diversas alternativas de Association, que na realidade é uma List.

 construindoassociation

Sendo uma List, uma série de funções estão disponíveis para produzir procedimentos sofisticados para manipular um dicionário. Este esforço pode ser evitado ao aproveitar uma proposta completa feita em Mangano (2010). Existe, entretanto, alguns problemas na proposta do livro, que foram corrigidas aqui, com a versão apresentada na figura abaixo.

 

dicionariomangano

Uma olhada na figura abaixo permite entender o uso das principais funções desta proposta de dicionário, desde sua criação até sua destruição.

usandodicionario

 

Lendo arquivos textos

 

Entrada e saída é uma das primeiras coisas a se aprender em uma linguagem de programação. Na sua diversidade, o Mathematica é uma linguagem de programação. E ele tem muitos recursos relacionados com entrada e saída. Por exemplo, Import é uma função poderosa. Para este exercício a escolha foi pela ReadList que permite a leitura da RFC7892 em uma lista de “strings”, separadas por caracteres definidos através de WordSeparators. A aplicação está na figura abaixo, com um trecho do resultado.

readlist

 

Populando o WordIETF

 

A aplicação escolhida é simples por razões óbvias. Trata-se de popular o dicionário WordIETF com os acrônimos que aparecem na RFC7892. Pela figura acima vê-se que os acrônimos estão entre parênteses (por exemplo, IETF) e o significado deles, em tese, está nas tantas palavras que o antecedem (no exemplo do IETF, nas cinco palavras anteriores). Em linhas gerais, o nosso algoritmo deve seguir os seguintes passos:

  • Ler a RFC7892 em busca de acrônimos.
  • Determina o tamanho n do acrônimo encontrado
  • Se o acrônimo não estiver no WordIETF, captura as n palavras anteriores e inclui o acrônimo.
  • Remova o acrônimo e seu significado do conteúdo da RFC lida.
  • Repita até que não haja mais acrônimos

 

Na figura abaixo, a preparação para o algoritmo. Em particular, a preparação do WordIETF.

etapaspreliminaresalgoritmo

Duas funções foram criadas com o objetivo de facilitar o algoritmo: verifica se é um acrônimo e retorna na lista para capturar o significado do acrônimo. Elas estão na figura que segue.

funcoes

O algoritmo, que apesar de incorporar experiências pessoais, dispensa maiores comentários e está na figura a seguir.

algoritmo

O resultado da execução do algoritmo está na figura a seguir, em 7 repetições sobre o texto da RFC, com tempo insignificante. Na sequência, o estado do dicionário após a execução.

resultadoalgoritmo

 

wordietffinal

 

Comentários finais

 

Foram muitas as experiências com o Mathematica para manipulação de textos, até porque foi uma exigência parcial de minha última disciplina do doutorado “Tópicos Avançados de Sistemas Computacionais Adaptativos”, com o Prof. Dr. Pedro Paulo Balbi de Oliveira, a quem agradeço as orientações durante a oportunidade. Abaixo, algumas considerações adicionais da experiência e das infinitas possibilidades do Mathematica.

  • Na figura abaixo, um exercício para responder a questão “Como poderia ser organizado o WordIETF?

    wordietforganizacao

  • O Mathematica é uma linguagem de programação funcional2. A maior parte dos exemplos acima foram procedurais. O Mathematica é, também, uma linguagem de programação procedural! Mas, ela é mais eficiente em sua característica funcional. A partir da leitura da RFC, usando a função Map, para tentar retirar os acrônimos, obtemos o seguinte resultado.

    mapinicial

     

    Retirando as cadeias vazias:

    retirandostringsvazios

     

    Combinando as duas funções têm-se o problema resolvido funcionalmente:

    resultadofucional

  • Muitos recursos para acesso a dicionários e sítios importantes externos estão disponíveis, como por exemplo, a Wikipedia. Duas imagens abaixo ilustram algumas alternativas.

    consultaexterna1

    consultaexterna2

 

 

Referências

 

LENGLER, R.; EPPLER, M. J. Towards a periodic table of visualization methods for management. In: IASTED Proceedings of the Conference on Graphics and Visualization in Engineering (GVE 2007), Clearwater, Florida, USA. [S.l.: s.n.], 2007.

MANGANO, S. Mathematica Cookbook. [S.l.]: “O’Reilly Media, Inc.”, 2010.

 


     

  1. http://www.wolfram.com/mathematica/
  2. https://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming

 

s

WordIETF

Introdução

Este texto evolui as preocupações, grosso modo, em dar “inteligência” aos agentes (ou IEs – Intelligents Elements} do modelo AEASD (Autonomous Elements Architecture for Specific Domains), cuja origem foi na dissertação de mestrado e em discussões posteriores (Braga-Filho, 2015) (Braga; Omar; Granville, 2015).

Trata-se de uma evolução, e natural aperfeiçoamento, da contextualização e da maneira de enxergar o problema. É um processo de aprendizagem, contínuo, permanente e natural, na vida de um pesquisador. Como a visão de Charles Darwin1, na sua celebrada e incontestável teoria. Se eu vivesse eternamente, chegaria a um consenso preciso, sobre a questão principal. Não sendo eterno, a contribuição pode interessar aos mais jovens.

A Figura 1 do meu texto “Preparando as RFCs para o UIMA” (https://ii.blog.br/2016/01/08/preparando-as-rfcs-para-o-uima/) sofreu uma pequena alteração e apresenta-se como a Figura 1, a seguir.

 tese-modeloprincipalFigura 1. Novo modelo global.

O que mudou foram as ferramentas (item 5, na figura). O Apache UIMA não é a única ferramenta disponível. Em algumas etapas, mas simples, ele é dispensável. Existem muitas outras! O que torna mais complexo, o tratamento de textos, um assunto muitíssimo difícil, como falam inúmeros autores. Com a linguagem natural nem se fala. Basta ouvir o pensamento de Noam Chomsky1 de que a linguagem natural não constitui um domínio sobre o qual se podem construir teorias científicas coerentes, como escreve Neil Smith2 em seu longo prefácio do “Novos horizontes no estudo da linguagem e da mente” (Chomsky, 2005).

Trata-se neste texto, portanto, incorporar outras reflexões e mostrar a necessidade de se criar um dicionário léxico sobre as RFCs, como o objetivo de facilitar os trabalhos futuros. Este dicionário, em um domínio específico (sobre as RFCs) é similar ao WordNet3, que se nomeou de WordIETF.

Contextualização

Resumindo, o conjunto de dados (textos não estruturados), isto é, o corpora que se deseja incluir no projeto é mostrado na Figura 2.

tese-corpusFigura 2. Corpora que interessa ao projeto final e que deve ser tratado.

Por razões de simplicidade, os exercícios preliminares serão reduzidos a um único corpus, como mostra a Figura 3

tese-corpusunico
Figura 3. Corpus sob o qual a experiência preliminar será feita.

Simplificando, fica mais fácil seguir a proposta mostrada na Figura 4, que mostra a evolução atual do que se tem em mente, para o futuro.

tese-proposta
Figura 4. A atual evolução do modelo e as questões de pesquisa envolvidas: (2), (3) e (4).

O item (1) da figura acima está desenhado na Figura 2 do texto “Preparando as RFCs para o UIMA” (https://ii.blog.br/2016/01/08/preparando-as-rfcs-para-o-uima/). O item (2) representa uma das três questões de pesquisa que, de imediato, leva à criação de um dicionário léxico, WordIETF, consignado a partir do corpus, parte do RFC Editor4.

Como estabelecer o WordIETF

Em um livro bastante interessante sobre processamento de textos (Ingersoll; Morton; Farris, 2013), ferramentas do Apache são indicadas: Hadoop5, Lucene+Solr6 com o PyLucene, Mahout7 e o openNLP8. Tais ferramentas são, realmente, suficientes para resolver desafios no domínio de um texto, como mostra a Figura 5.

tamming-desafios
Figura 5. Desafios na mantipulação de textos.

O UIMA já foi parcialmente testado e as outras propostas da Apache serão verificadas. A Python, com o seu NLTK (Natural Languange Tool Kit), permite sem maiores esforços, a construção do WordIETF e resolver os desafios da Figura 5. Oportunamente serão descritas as experiências.

Uma outra ferramenta, que pode ser até mesmo complementar é o Mathematica4. Pode o Mathematica resolver os desafios e contribuir para a construção do WordIETF? A resposta é sim, com veremos em novos documentos mais à frente.

Conclusões

Trata-se de um projeto de pesquisa que exige a construção de um dicionário léxico, o WordIETF. Observa-se a necessidade de cooperação e contribuições de eventuais interessados.

Uma das maneiras de receber colaboração e contribuições é a divulgação no âmbito do IETF e de outras comunidades interessadas. Neste sentido, caso haja tempo hábil será enviado um I-D para o IETF 96 (Berlim), em julho próximo.

Resultados parciais e dificuldades encontradas, evolução e outras informações úteis serão postas neste blogue.

Referências

BRAGA-FILHO, L. J. Modelo para Implementação de Elementos Inteligentes em
Domínios Restritos da Infraestrutura da Internet
. Dissertação (Mestrado) — Universidade Presbiteriana Mackenzie, São Paulo, SP, 8 2015.

BRAGA, J.; OMAR, N.; GRANVILLE, L. Z. Uma proposta para o uso de elementos
inteligentes em domínios restritos da infraestrutura da internet. In: Anais CSBC, WPIETFIRTF. Recife, Pernambuco, Brasil: [s.n.], 2015

CHOMSKY, N. Novos horizontes no estudo da linguagem e da mente. [S.l.]: Unesp, 2005.

INGERSOLL, G. S.; MORTON, T. S.; FARRIS, A. L. Taming text: how to find, organize,
and manipulate it. [S.l.]: Manning Publications Co., 2013.


1. https://pt.wikipedia.org/wiki/Charles_Darwin
2. https://en.wikipedia.org/wiki/Neil_Smith_%28linguist%29
3. https://wordnet.princeton.edu/
4. https://www.rfc-editor.org/
5. http://hadoop.apache.org/
6. http://lucene.apache.org/index.htm
7. http://mahout.apache.org/
8. https://opennlp.apache.org/index.html
9. http://www.wolfram.com/

Categorias:Apache, IETF, Modelos, TCP/IP, WordIETF

Preparando as RFCs para o UIMA

Introdução

Uma vez entendido o UIMA segue a aprendizagem sobre ele. Olhando primeira figura do texto Instalação do Apache UIMA (Apache UIMA Installation), vê-se o conjunto de material não estruturado a ser analisado, reproduzida na Figura 1, com ênfase no repositório do RFC Editor, onde repousam os principais documentos do IETF.

aeasd-1

Figura 1. O repositório das RFCs. Primeira base não estruturada a ser analisada pelo UIMA.

Como trabalhar com o repositório das RFCs

RFCs não possuem data e hora marcadas para aparecer e, estão em um formato que deve ser normalizado (brancos, figuras em texto, autores, diferenças de padrões de escrita, etc.), para adaptar-se ao UIMA ou outra aplicação. Este processo de normalização é, na verdade uma “arrumação” sobre os dados de entrada e possui as característica descritas por Wickham (2014)1. Portanto é necessário, um pré-processamento, no qual estas duas questões serão resolvidas. A Figura 2 apresenta um modelo preliminar a ser seguido.

uima-preprocessamentorfcs

Figura 2. O pré-processamento das RFCs.

O próprio RFC Editor recomenda um mecanismo2 de recuperação de RFCs usando o rsync, uma ferramenta disponível nos sistema a la Unix e também, no Windows. Como mostra a Figura 2, o rsync trás a base do RFC Editor para o diretório rfstemp/ local, de forma incremental, como se desejava. Sobre este diretório, um programa em Python (denominado preprocess.py) é executado periodicamente e, sempre, executa o rsync, transferindo as novas RFCs para o diretório rfcs/, as quais são consumidas pelo UIMA. A Figura 3 mostra o exemplo de uma execução do rsync, no Windows 10, via prompt e uma nova RFC disponível (rfc7715.txt). Naturalmente, esta execução não foi a primeira vez, oportunidade em que isto é, o diretório rfstemp/ já tinha sido populado com TODAS as RFCs.

uima-rsync-exemplo

Figura 3. Execução do rsync e a disponibilidade de uma nova RFC enfatizada em vermelho.

A periodicidade de execução do programa preprocess.py é feita, automaticamente, através do cron (um processo, também, disponível para o Windows). Ele preserva a informação sobre a última RFC atualizada, captura as novas, normalizando e colocando-as no diretório de entrada para o UIMA (rfcs/). O processo de normalização é simples, retirando tudo o que é texto inútil de cada RFC (brancos, rodapés, etc.). Em função do UIMA, o programa preprocess.py, eventualmente, evoluirá o processo de normalização e/ou aperfeiçoará a entrada (isto é, o conteúdo do diretório rfcs/).

O UIMA, ao consumir as RFCs deixa o diretório rfcs vazio. Nas atividades do UIMA, Java é a principal linguagem, como vimos no primeiro artigo da série: Instalação do Apache UIMA (Apache UIMA Installation). O segundo artigo é uma visão geral do UIMA: Funcionamento Básico do Apache UIMA


  1. Wickham, H. Tidy Statistic. Journal of Statistical Software, Foundation for Open Access Statistics, v. 59, n. 10, 2014.
  2. https://www.rfc-editor.org/retrieve/rsync/

Instalação do Apache UIMA (Apache UIMA Installation)

Introdução

Introduction


Este texto relata o processo de instalação do Eclipse, juntamente com o Apache UIMA1. O objetivo é usar o Apache UIMA, em uma primeira etapa, para testar a hipótese ilustrada pela Figura 1.


This paper reports the Eclipse installation process along with Apache UIMA1. The goal is to use the Apache UIMA, in a first step, to test the hypothesis illustrated in Figure 1.

aeasd
Figura 1. Modelo a ser testado no Apache UIMA.
Figure 1. Model to be tested in Apache UIMA.


Na figura, (1), representa o modelo AEASD (Autonomous Elements Architecture for Specific Domains) (BRAGA; OMAR; GRANVILLE, 2015), o qual organiza um ambiente de agentes inteligentes com características voltadas para o domínio específico dos Sistemas Autônomos, que povoam a Internet. Presume-se que os elementos inteligentes terão mais autonomia, se conseguirem aprender, ensinar e cooperar através de uma base de conhecimento ou ontologia, (2), local ou remota (como a Wikidata2 e/ou outras). Esta ontologia pode ser construída a partir de bases de dados não estruturadas, (3), desde que se possua as ferramentas adequadas (FAN et al., 2012). Um conjunto de tais ferramentas foi desenvolvido pela IBM (FERRUCCI, 2012) (FERRUCCI et al., 2010), através de uma competente equipe quando da construção do IBM Watson, (5), diante do incrível desafio de vencer humanos no Jeopardy! – existem diversos vídeos no YouTube sobre este evento, que aconteceu em 2011. Há fortes indícios de que com adaptações adequadas, tais técnicas possam ser transportadas para domínios específicos (FERRUCCI; BROWN, 2011), como o domínio de interesse da hipótese a ser testada, (4). Através das técnicas adaptadas, bases intermediárias, (6), poderão ser construídas, sobre as quais novas ferramentas, (7), podem direcionar o conhecimento adquirido no formato adequado, (2). Os elementos inteligentes do modelo AEASD irão interagir com as novas ferramentas adaptadas, (5), e desenvolvidas, (7).


In the figure, (1) represents the AEASD
model (Autonomous Elements Architecture for Specific Domains) (BRAGA; OMAR; GRANVILLE, 2015), which organizes an intelligent agents environment with features focused on the specific area of ​​Autonomous Systems, populating the Internet. It is assumed these smart elements will have more autonomy, if they can learn, teach and cooperate through a knowledge base or ontology, (2), local or remote (such as Wikidata2 and / or others). This ontology can be constructed from unstructured databases, (3), provided that it has the appropriate tools (FAN et al., 2012).
A set of such tools was developed by IBM (FERRUCCI, 2012) (FERRUCCI et al., 2010), through a competent team when the construction of the IBM Watson, (5), facing the incredible challenge to beat humans in Jeopardy! – there are several videos on YouTube about this event, which took place
in 2011. There is strong evidence that with appropriate adjustments, such techniques
can be transported to specific areas (FERRUCCI; BROWN, 2011), as the domain of interest hypothesis to be tested, (4). Through the adapted techniques, intermediate bases, (6), may be built, for which new tools, (7), can direct the acquired knowledge in the proper format, (2). Intelligent elements in AEASD model will interact with new adapted tools, (5), and developed, (7).
.

Neste texto, a preocupação é mostrar, informalmente, a experiência da implementação do Apache UIMA sob o ambiente do Eclipse (MARS.1) em Windows 10, sob Notebook Dual Core (inicialmente) e servir como guia de apoio aos interessados. Posteriormente, outros textos poderão ser produzidos com abordagens focadas no Apache UIMA, como ferramenta de análise dos dados não estruturados dentro do domínio da Infraestrutura da Internet e seus resultados em relação às experiências sobre a hipótese mostrada na Figura 1. A Figura 2, abstratamente, ilustra a tarefa do Apache UIMA em submeter informações (multi modal) do mundo não estruturado, sob um processo de transformação ao mundo dos dados estruturados. Sem mágica, naturalmente.

In this text, the concern is to show informally the experience of implementation of Apache UIMA under the Eclipse environment (MARS.1) in Windows 10, under Notebook Dual Core (initially) and serve as a guide to support interested. Later, other texts can be
produced with approaches focused on the Apache UIMA as unstructured data analysis tool within the Internet infrastructure domain and its results against experience on the hypothesis shown in Figure 1. Figure 2, abstractly, illustrates the Apache UIMA task
to submit information from (multi modal) unstructured world, in a process of transformation to the world of structured data. No magic, of course.

uima-estrutura
Figura 2. O que faz o Apache UIMA8.
Figure 2. What does the Apache UIMA8.

 

… from now on, only in Portuguese…

 

Instalação do Apache UIMA

 

São em sete, o número de etapas3 para se preparar o Apache UIMA para o trabalho a ser executado. Todas elas envolvem diretamente a implementação do Eclipse.

  1. Instalar o Eclipse
  2. Instalar os plugins UIMA no Eclipse
  3. Instalar algumas extensões complementares no Eclipse
  4. Instalar o UIMA SDK
  5. Instalar o código fonte UIMA nos arquivos jar
  6. Instalar o Javadocs do UIMA
  7. Preparar o Eclipse para ver o Código Exemplo

 

Instalação do Eclipse

 

1). Foi instalado o Java SE Develpment Kit (8u66)4

2). Foi instalado o Eclipse “for Java Developers”5, que inclui: Java IDE, cliente GIT, Editor XML, Myliyn, integrador Maven e WindowBulder. Em seguida foi incluído o m2e e o Py IDE. Para as instalações posteriores, veja a documentação6 do Eclipse.

3). Instalados os plugins do UIMA, conforme pode ser visto na Figura 3.

eclipse-uima

Figura 3. Versões dos plugins UIMA instalados no Eclipse.

4). Adicionar a variável de ambiente para o Maven7, recomentado em “One time setup ofr Maven” e “One time setup for Eclipse”. Detalhes nas Figuras 4 e 5.

eclipse-maven

Figura 4. Inclusão da variável de ambiente MAVEN_OPTS (Resultado final)

eclipse-maven2

Figura 5. Visão geral da operação de inclusão da variável de ambiente MAVEN_OPTS.

5). Instalar o UIMA SDK (Apache UIMA Version 2.8.1) disponível em http://mirror.nbtelecom.com.br/apache//uima//uimaj-2.8.1/uimaj-2.8.1-bin.zip . Descompacte-o em qualquer diretório. No meu caso foi em E:apache-uima. Em seguida crie a variável de ambiente %UIMA_HOME% para este diretório. Faça o mesmo para %ECLIPSE_HOME%, para o caminho C:Usersjbeclipsejava-marseclipse.

6). Em seguida executar adjustExamplePaths.bat, no diretório %UIMA_HOME%bin cujo resultado segue abaixo. É preciso ficar atento às quebras de linhas forçadas, para que o texto caiba integralmente.

E:apache-uimabin>adjustExamplePaths.bat
E:apache-uimabin>setlocal
E:apache-uimabin>if "" == "" (set UIMA_JAVA_CALL=java )  
else (set "UIMA_JAVA_CALL=binjava" )
E:apache-uimabin>"java" -cp "E:apache-uima/lib/uima-core.jar" 
org.apache.uima.internal.util.ReplaceStringInFiles 
"E:apache-uima/examples" .xml "C:/Program Files/apache-uima" 
"E:apache-uima" -ignorecase
Ignoring case
Working on file: E:apache-uimaexamplesdataxml
IBM_LifeSciences.xml
Working on file: E:apache-uimaexamplesdataxml
New_IBM_Fellows.xml
Working on file: E:apache-uimaexamplesdataxml
SeminarChallengesInSpeechRecognition.xml
Working on file: E:apache-uimaexamplesdataxml
TrainableInformationExtractionSystems.xml
Working on file: E:apache-uimaexamplesdataxml
UIMASummerSchool2003.xml
Working on file: E:apache-uimaexamplesdataxml
UIMA_Seminars.xml
Working on file: E:apache-uimaexamplesdataxml
WatsonConferenceRooms.xml
Working on file: E:apache-uimaexamplesdeployvinci
Deploy_MeetingDetectorTAE.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeployvinci
Deploy_PersonTitleAnnotator.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeployvinci
Deploy_XmiWriterWithTutorialTypeSystem.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdescriptors
MixedAggregate.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineGovernmentOfficialRecognizer_RegEx_TAE.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineNamesAndGovernmentOfficials_TAE.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineNamesAndPersonTitles_TAE.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_enginePersonTitleAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_enginePersonTitleAnnotator_WithinNamesOnly.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineRegExAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineSimpleEmailRecognizer_RegEx_TAE.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineSimpleNameRecognizer_RegEx_TAE.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineSimpleTokenAndSentenceAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineSofaExampleAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineUIMA_Analysis_Example.xml
Working on file: E:apache-uimaexamplesdescriptors
analysis_engineXmlDetagger.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerAnnotationPrinter.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerInlineXmlCasConsumer.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerXCasWriterCasConsumer.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerXmiEcoreCasConsumer.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerXmiWriterCasConsumer.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_consumerXmiWriterWithTutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_multiplierSegmenterAndTokenizerAE.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_multiplierSegment_Annotate_Merge_AE.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_multiplierSimpleTextMerger.xml
Working on file: E:apache-uimaexamplesdescriptors
cas_multiplierSimpleTextSegmenter.xml
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_Integrated.xml
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_Managed_Unix.xml
File modified, number of instances replaced: 5
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_Managed_Windows.xml
File modified, number of instances replaced: 5
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_NonManaged.xml
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_
NonManagedCasConsumer.xml
Working on file: E:apache-uimaexamplesdescriptors
collection_processing_engineMeetingFinderCPE_WithXmlDetagging.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdescriptors
collection_readerFileSystemCollectionReader.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdescriptors
collection_readerXmiCollectionReader.xml
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdescriptors
flow_controllerAdvancedFixedFlowController.xml
Working on file: E:apache-uimaexamplesdescriptors
flow_controllerMeetingDetectorTAE_AdvancedFixedFlow.xml
Working on file: E:apache-uimaexamplesdescriptors
flow_controllerMeetingDetectorTAE_Whiteboard.xml
Working on file: E:apache-uimaexamplesdescriptors
flow_controllerWhiteboardFlowController.xml
Working on file: E:apache-uimaexamplesdescriptors
soapServiceGovernmentTitleRecognizerService.xml
Working on file: E:apache-uimaexamplesdescriptors
soapServiceNamesAndPersonTitlesService.xml
Working on file: E:apache-uimaexamplesdescriptors
soapServicePersonTitleAnnotatorService.xml
Working on file: E:apache-uimaexamplesdescriptors
soapServiceSimpleNameRecognizerService.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex1RoomNumberAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex1TutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex2RoomNumberAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex3RoomNumberAndDateTime.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex3TutorialDateTime.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex3TutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex4MeetingAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex4MeetingDetectorTAE.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex4TutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex5RoomNumberAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex6TutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex6UimaAcronymAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex6UimaMeetingAnnotator.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialex6UimaMeetingDetectorTAE.xml
Working on file: E:apache-uimaexamplesdescriptors
tutorialsearchMeetingIndexBuildSpec.xml
Working on file: E:apache-uimaexamplesdescriptors
vinciServiceMeetingDetectorVinciService.xml
Working on file: E:apache-uimaexamplesdescriptors
vinciServicePersonTitleVinciService.xml
Working on file: E:apache-uimaexamplesdescriptors
vinciServiceXmiWriterVinciServiceWithTutorialTypeSystem.xml
Working on file: E:apache-uimaexamplesresourcesorg
apacheuimaexamplesSourceDocumentInformation.xml

E:apache-uimabin>"java" -cp "E:apache-uima/lib/uima-core.jar" 
org.apache.uima.internal.util.ReplaceStringInFiles 
"E:apache-uima/examples" .classpath "C:/Program Files/
apache-uima" "E:apache-uima" -ignorecase
Ignoring case
Working on file: E:apache-uimaexamples.classpath
File modified, number of instances replaced: 5

E:apache-uimabin>"java" -cp "E:apache-uima/lib/uima-core.jar" 
org.apache.uima.internal.util.ReplaceStringInFiles 
"E:apache-uima/examples" .launch "C:/Program Files/
apache-uima" "E:apache-uima" -ignorecase
Ignoring case
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Annotation Viewer.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA CAS Visual Debugger.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA CPE GUI.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Document Analyzer.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA JCasGen Merge.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA JCasGen.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA PEAR Installer.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Run AE.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Run CPE.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Start Vinci Service.launch
Working on file: E:apache-uimaexamplesrun_configuration
UIMA Start VNS.launch

E:apache-uimabin>"java" -cp "E:apache-uima/lib/uima-core.jar" 
org.apache.uima.internal.util.ReplaceStringInFiles 
"E:apache-uima/examples" .wsdd "C:/Program Files/
apache-uima" "E:apache-uima" -ignorecase
Ignoring case
Working on file: E:apache-uimaexamplesdeploysoap
Deploy_GovernmentTitleRecognizer.wsdd
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeploysoap
Deploy_NamesAndPersonTitles.wsdd
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeploysoap
Deploy_PersonTitleAnnotator.wsdd
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeploysoap
Deploy_SimpleNameRecognizer.wsdd
File modified, number of instances replaced: 1
Working on file: E:apache-uimaexamplesdeploysoap
Undeploy_GovernmentTitleRecognizer.wsdd
Working on file: E:apache-uimaexamplesdeploysoap
Undeploy_NamesAndPersonTitles.wsdd
Working on file: E:apache-uimaexamplesdeploysoap
Undeploy_PersonTitleAnnotator.wsdd
Working on file: E:apache-uimaexamplesdeploysoap
Undeploy_SimpleNameRecognizer.wsdd
E:apache-uimabin>

7). Execute no prompt, eclipse -clean, para carregar o Eclipse.

8). Inclua o caminho %UIMA_HOME% no Eclipse, como mostra a Figura 5.

eclipse-path

Figura 5. Incluindo o %UIMA_HOME% no Eclipse.

9). Crie o novo projeto exemplo do UIMA executando os passos, no Eclipse:

  • Selecione o menu “File” e “Import”
  • Selecione “General/Existing Project into Workspace” e clique no botão “Next”.
  • Clique em “Browse” e indique o diretório %UIMA_HOME%.
  • Clique em “Finish”. Isto irá criar um novo projeto no Eclipse, chamado “uimaj-examples”. Realmente, não houve erro de compilação, como mostra a Figura 6.

eclipse-noproblem

Figura 6. Nenhum erro de compilação do projeto exemplo do UIMA

Após estes passos, o código fonte do UIMA já foi inserido no ambiente do Eclipse, incluindo o Javadocs, não sendo necessário cumprir outras atividades. Portanto, o Eclipse está pronto para o UIMA! Cumpriu-se assim, todas as sete etapas da constantes da seção “Instalação do UIMA”, como mostra a Figura 7.

eclipse-pronto

Figura 7. Visão parcial do Eclipse pronto para o UIMA.

 

Comentários Finais

 

Esta iniciativa de preparar o Apache UIMA para ser testado foi motivado pela disciplina Cognição e Aplicações Computacionais [turma 01A] – 2015/2, ministrada pelos Profs. Dr. Nizam Omar e Dr. Ismar Frango Silveira, no Programa de Pós Graduação em Engenharia Elétrica e Computação, da Universidade Presbiteriana Mackenzie, São Pauo, aos quais expresso meus agradecimentos pela oportunidade.

 

Referências

 

BRAGA, J.; OMAR, N.; GRANVILLE, L. Z. Uma proposta para o uso de elementos inteligentes em domínios restritos da infraestrutura da internet. In: Anais CSBC 2015 – WPIETFIRTF. Recife, Pernambuco, Brasil: [s.n.], 2015.

FAN, J. et al. Automatic knowledge extraction from documents. IBM Journal of Research and Development, IBM, v. 56, n. 3.4, p. 5–1, 2012.

FERRUCCI, D.; BROWN, E. AdaptWatson: A methodology for developing and adapting Watson technology. Armonk, NY, 2011. 8 p. Disponível em: <http://domino.research.ibm.com/library/cyberdig.ns/papers/29303F8DC7A92FC9852579F30049ABCD&gt;.

FERRUCCI, D. A. Introduction to “This is Watson”. IBM Journal of Research and Development, IBM, v. 56, n. 3.4, p. 1–1, 2012.

FERRUCCI, D. et al. Building Watson: An overview of the DeepQA project. AI Magazine, v. 31, n. 3, p. 59–79, 2010.


  1. Apache UIMA. http://uima.apache.org/index.html
  2. Wikidata. https://www.wikidata.org/wiki/Wikidata:Main_Page
  3. UIMA Overview & SDK Setup. http://uima.apache.org/d/uimaj-current/overview_and_setup.pdf
  4. http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  5. http://www.eclipse.org/users/
  6. http://help.eclipse.org/mars/index.jsp
  7. http://uima.apache.org/one-time-setup.html#maven-setup
  8. Adaptation of Figure 2.1 available in http://uima.apache.org/d/uimaj-current/overview_and_setup.pdf

Reflexões sobre a Internet das Coisas (Reflections on IoT)

Em Português:

Está conectado? Então, provavelmente, está na Internet. Suas coisas (incluindo seus dados) estão conectadas? Então, provavelmente, suas coisas estão na Internet. Se estão na Internet, então, suas coisas estão no domínio de um Sistema Autônomo (AS). Suas coisas estão na nuvem? Então, suas coisas podem estar sob o domínio de mais de um AS (mas, pelo menos estão no domínio de um AS). ASes, que formam a Internet estão conectados, diretamente ou não. Trate a Internet como se fosse o Universo. Então, suas coisas podem ser tratadas como se fossem a matéria escura. Matéria escura existe mas não se sabe onde está. Então, suas coisas existem, mas não se sabe onde estão. Se não se sabe onde estão, então, suas coisas estão seguras!

English version:

Are you connected? So, probably, you are on the Internet. Your things (including their data) are connected? Then, probably, your things is on the Internet. If they are on the Internet, so your things is under the domain of an Autonomous System (AS). Your things are in the cloud? So, your things may be under more than one AS domain (but at least are under the domain of an AS). ASes that form the Internet are connected, directly or not. Treat the Internet as if it were the Universe. So your stuff can be treated as dark matter. Dark matter exists but do not know where it are. So your things exist, but it is not known where they are. If you do not know where they are, then your things are safe!

Categorias:TCP/IP

O App da Anatel e o futuro


 

Introdução

 

O app da Anatel, lançado neste mês de junho de 2015 foi um avanço enorme! A experiência deve agradar aos usuários brasileiros (gregos e troianos) e, sem nenhuma dúvida, um sucesso aplaudido.

Esta demonstração explícita por parte de Anatel, de que o usuário é o componente mais importante da governança da Internet brasileira traz um enorme alento e deve ser ampliado, em futuro próximo. Em outras palavras, deve se tornar mais sofisticado no sentido de facilitar mais ainda a vida do usuário. Por exemplo, o processo de autenticação não é uma boa alternativa, pois além de incômodo, pode trazer quebras indesejáveis de segurança e tende a produzir ações com resultados imprecisos.

Mas, o app foi um enorme avanço e deve ser usado intensivamente. Os efeitos colaterais indesejáveis não são tão graves, neste momento.

 

O futuro do app da Anatel

 

Existem inúmeras possibilidades de evolução do app da Anatel. É pouco provável que qualquer alternativa, que não o uso de agentes inteligentes ou Elementos Inteligentes (IEs), cause impacto com resultados efetivos para o usuário final. Uma proposta é a aplicação do modelo ANARD (Autonomous Network Architecture over Restricted Domains) representado na Figura 1 e com detalhes neste PDF.

 

Modleo ANARD (Versão abstrata)

Figura 1. Modelo ANARD (abstrato). O x é o ASN. Fonte: aqui.

 

A tarefa de desenvolvimento sairia da ANATEL e passaria para as operadoras de trânsito. Cada app, hospedado no cliente da operadora faria parte da colônia de IEs.

Embora, há mais de dois meses atrás eu tenha feito referência, em minha qualificação no Mackenzie, a algo semelhante ao app (inteligente) lançado pela ANATEL, o exemplo de aplicação do modelo foi sobre o IRR (Internet Routing Register), com sucesso suficiente e animador para escrever este texto e exibir a proposta.

O caso de uso da aplicação sobre o IRR é mostrado na Figura 2.

 

irr-caso-de-uso-do-anard

Figura 2. Componentes do ANARD em aplicação sobre o IRR.

 

A aplicação foi feita na linguagem shakespeariana Python!

Um efeito colateral interessante surgiu da aplicação. O IE Controlador, que possui o controle total sobre o domínio restrito, induz e facilita a criação de um mecanismo de segurança que se resolveu chamar DMS (Dark Matter Security). Sabe-se que inúmeros elementos inteligentes existem no domínio restrito, mas não se sabe onde eles se encontram. A Figura 3 ilustra este mecanismo.

 

dms

Figura 3. O mecanismo DMS. X:0 é o IE Controlador.

 

%d blogueiros gostam disto: