Formado

Formado

Olá! Antes de mais nada, feliz ano novo!

Fiquei 1 mês sem postar adequadamente devido a diversas ocupações que tive: SCWCD, Curso de EJB na SynOS, viagens de fim de ano e FORMATURA!

Finalmente, semana passada me formei Bacharel em Ciência da Computação! Nem é preciso dizer o tanto que teve bom. Depois de 5 anos ralando, cá estou bacharel.

Agora de volta a rotina… Vou retomar alguns posts sobre Ruby WATIR e outras features que ando trabalhando. E também enviarei fotos de alguns lugares que visitei recentemente. :)

Quem quiser ver fotos da formatura:

Inté!

Resumo

Nesta última sexta-feira 21, apresentamos nosso Trabalho de Diploma (ou TD, mesma coisa que TCC) na UNIFEI e fomos aprovados! :D

Nosso TD é sobre SOA, conceito apresentado no post anterior SOA (Service Oriented Architecture), onde tem também um pôster que apresentamos sobre o nosso trabalho.

 


Conteúdo

  1. Proposta
  2. Desenvolvimento
  3. Conclusão
  4. Arquivos

 


1. Proposta

O co-orientador e o orientador deste trabalho apresentaram um artigo, onde demonstraram a implementação de um sistema médico para o gerenciamento de imagens digitais denominado Picture Archiving and Communication System (PACS). O PACS, em conjunto com Radiology Information System (RIS) e Hospital Information System (HIS), formam a base para um serviço de Radiologia Filmless (tecnologia que indica a manipulação de imagens médicas sem utilizar filme fotográfico, que demandava relevante custo e tempo para revelar).

As imagens são obtidas de modalidades de imagens médicas digitais, como Ressonância Magnética Nuclear (RMN) e Tomografia Computadorizada (TC), em formato DICOM (Digital Imaging and Communication in Medicine) 3.0, indexadas, armazenadas e vinculadas ao RIS do Hospital para posterior visualização.

Este sistema PACS foi concebido e desenvolvido dentre um escopo bem-definido. No entanto, há diversos outros requisitos de negócio em ambientes médicos que necessitam de manipular as informações obtidas pelo sistema apresentado. De forma a permitir futuras integrações com tal sistema de forma escalável e padronizável, é proposta a utilização de SOA.

Com essa proposta em mente, é possível utilizar de serviços pré-existentes e também integrá-los entre si e também com serviços que venham a ser criados. Assim tem-se um sistema que pode trabalhar com todo o sistema legado, integrar as bases de dados e ser distribuído, facilitando o acesso das várias redes hospitalares que necessitam dessas informações.

A proposta baseia-se em realizar serviços de consulta utilizando dois sistemas existentes: um sistema RIS e um sistema de aquisição de imagens médicas. Cada serviço realizará consultas em ambos sistemas e depois unirá seus resultados sob uma mesma resposta, conforme o diagrama UML de caso de uso abaixo:

Diagrama UML de caso de uso

Diagrama UML de caso de uso


2. Desenvolvimento

Cada sistema acima teve suas principais funcionalidades exportadas como Web Services. Para cada sistema foi gerado um Web Service para expor seus serviços simples.

Utilizando estes Web Services, foi construido um outro Web Service de integração, denominado Web Service PACS, caracterizando-se como um serviço composto. Este Web Service possui interface parecida ao Web Service do sistema RIS, com exceção da mensagem de resposta, e segue o seguinte fluxo para cada requição:

  1. Extrai os parâmetros da requisição
  2. Chama o Web Service do sistema RIS, passando os parâmetros recebidos. Receberá uma lista com exames radiológicos ou uma lista com pacientes.
  3. Se recebeu uma lista com exames radiológicos, para cada exame radiológico chama o Web Service do sistema de aquisição de imagens, passando a identificação do exame como parâmetro. Receberá uma imagem para cada exame.
  4. Retorna uma mensagem SOAP contendo todas as informações solicitadas, provenientes de ambos sistemas.

Os Web Services descritos acima foram publicados no servidor Apache Axis2. Por sua vez, o Web Service PACS também foi publicado no ESB Apache ServiceMix. Assim, qualquer componente membro deste barramento poderá usufruir da mesma maneira e sob o controle da mesma infra-estrutura.

O diagrama UML de atividades abaixo ilustra todo o processo:

Diagrama UML de atividades

Diagrama UML de atividades


3. Conclusão

Com a organização em serviços das funcionalidades dos sistemas apresentados, e sua utilização sobre uma infra-estrutura padronizada, alcança-se a robustez necessária para que o sistema cresça sem maiores problemas, aumentando assim seu valor agregado. Além disso, é possível ter controle sólido sobre segurança, roteamento e monitoramento do serviço.

Ao publicar tais serviços sobre tal arquitetura orientada a serviços, torna-se possível a construção de operações mais complexas com respeito à gestão e manipulação de informações dos pacientes, como por exemplo a obtenção de prontuário completo para um paciente, baseado num histórico médico que possa estar distribuído em sistemas distintos e em localidades distintas.

Ainda, a utilização de SOA introduz diretrizes para guiar o desenvolvimento de futuras integrações entre outros sistemas médicos, fazendo respeito tanto sobre a questão tecnológica quanto a questão de pessoal.

Desta forma, ao aplicar SOA em um ambiente médico, concluimos que SOA é uma tecnologia adequada para a integração de ambientes heterogêneos como os ambientes da área médica.

 

4. Arquivos

Um trabalho acadêmico que fiz na UNIFEI em 2006 foi um sistema MRP para realizar a programação de uma linha de produção em termos do PCP – Planejamento e Controle da Produção.

Segundo meu professor Fabiano Leal, Materials Requirement Planning (MRP) é um sistema de informações computadorizado, desenvolvido especificamente para auxiliar as empresas na administração do estoque de demanda dependente e programar pedidos de reposição. Desenvolvido nos anos 60, na IBM, era voltado exclusivamente ao planejamento de materiais. Com o desenvolvimento dos meios computacionais, a idéia básica transformou-se no MRP II (Manufacturing Resource Planning) para atender não apenas ao setor produtivo, mas a toda a corporação.

O objetivo do sistema MRP é calcular as quantidades e os prazos dos vários elementos (materiais) necessários à constituição de uma certa quantidade de um certo produto num prazo de entrega definido.

Quem quiser se aprofundar no assunto, pode consultar o material do curso da disciplina do professor Fabiano Leal. Muito bom e auto-explicativo!

MRP usualmente compõe um sistema Enterprise Resource Planning (ERP), que segundo Wikipedia é um sistema de informações que integra todos os dados e processos de uma organização. A integração pode ser vista sob a perspectiva funcional (sistemas de: finanças, contabilidade, recursos humanos, fabricação, marketing, vendas, compras, etc) e sob a perspectiva sistêmica (sistema de processamento de transações, sistemas de informações gerenciais, sistemas de apoio a decisão, etc).

Pois bem, na ocasião que cursei as disciplinas EPR-27 (Planejamento e Controle da Produção) e CCO-511 (Programação Orientada a Objetos), eu desenvolvi um software em Java para calcular as Ordens Liberadas de uma produção, chamado de JMRP.

As atividades suportadas pelo sistema Java Materials Resource Planning (JMRP) são: gerenciamento de materiais, listas de materiais, políticas de loteamento, planos mestre de produção, estoques e ordens abertas, cálculo de programações de produção e emissão de relatórios de ordens liberadas de programações de produção.

O JMRP busca obter programações de produção otimizadas, de acordo com o mais difundido algoritmo de cálculo computacional da gestão de materiais. Desta forma, provê a simulação de cenários de problemas práticos de sistemas MRP, assumindo o papel de ferramenta de apoio ao ensino.

Para conhecer melhor o JMRP e ver alguns diagramas UML veja sua apresentação na disciplina CCO-511.

Na disciplina de EPR-27 apresentamos um artigo propondo a utilização do JMRP como complemento das aulas de EPR-27 em sala de aula, por ser um software de cunho didático, que dessa forma procura contribuir para a assimilação do conteúdo pelo aluno. Veja o artigo apresentado na disciplina EPR-27.

Este foi um projeto edificante para mim, onde pratiquei bastante meus conhecimentos em desenvolvimento OO em Java e MVC. Eu tinha intenção de dar continuidade ao mesmo, melhorando sua arquitetura e construindo interface web para disponibilizá-lo para acadêmicos em rede nacional, visando neste sentido escrever artigos sobre isto. Quem sabe um dia eu faço isso! :)

Um trabalho interessante que realizei foi uma iniciação científica na UNIFEI sob orientação do prof. Laércio Baldochi, sobre computação ubíqua.

Vou apresentar esse tema – computação ubíqua – segundo a proposta de minha iniciação científica:

A computação ubíqua tem se estabelecido como um novo paradigma de interação usuário-computador. Sua essência está em auxiliar atividades humanas de modo minimamente intrusivo, permitindo a integração transparente de tecnologia no cotidiano dos indivíduos [Weiser, 1991]. A computação ubíqua explora a utilização de novos dispositivos de interação, dentre os quais destacam-se os dispositivos portáteis, tais como celulares, palmtops e handhelds, e também superfícies eletrônicas em geral. Formas de interação mais naturais com esses dispositivos, baseadas em comandos de voz e interpretação de gestos, vêm sendo investigadas e constituem um tema de pesquisa importante nessa área.

Além de interfaces naturais, dois outros temas são relevantes para a área de computação ubíqua: ciência de contexto e aplicações de captura e acesso [Abowd & Mynatt, 2000]. Aplicações cientes de contexto são aquelas capazes de identificar pessoas e objetos, adaptando o ambiente a fim de atender as necessidades de seus usuários.

Já as aplicações de captura e acesso são utilizadas para permitir a captura e o acesso automatizados das mais diferentes experiências humanas, desde reuniões de trabalho até atividades educacionais em sala de aula. Gerenciando um conjunto de dispositivos ubíquos que incluem lousas eletrônicas, tablets, câmeras de vídeo e microfones, essas aplicações são capazes de registrar e armazenar diferentes fluxos de informação, permitindo visualizar posteriormente o conteúdo capturado em diferentes formatos de exibição.

As três grandes áreas nas quais se subdivide a Computação Ubíqua não são estanques. Uma aplicação de captura e acesso apresenta, em geral, interfaces naturais e processa informação de contexto. A representação, o armazenamento e o processamento de informação de contexto são problemas em aberto e têm sido objeto de investigação por diferentes grupos de pesquisa ao redor do mundo [Coutaz et al. 2005]

É um tema com muito campo de pesquisa, falando em termos acadêmicos. E na mesma época eu trabalhava com o mesmo professor com desenvolvimento de software que faça comunicação com Smart Cards.

Smart card
Smart card

Smart Cards são chips capazes de armazenar e executar aplicações computacionais, trabalhando com segurança robusta devido a criptografia utilizada nestes dispositivos.

Eu trabalhava utilizando Smart Cards com o SO MULTOS e utilizávamos uma API existente no Java 6 – javax.smartcardio – para realizar o acesso a tais dispositivos. No projeto de iniciação científica utilizamos Java Card dentro do cartão, JEE na aplicação que se comunicava com o cartão e Java Card RMI como middleware para tal comunicação.

O objetivo deste projeto é demonstrar a efetividade do uso de smart cards na construção de aplicações adaptáveis. Para tanto, o projeto utiliza de uma abordagem baseada na construção de um protótipo de software, que prevê a construção de aplicações de computação ubíqua adaptáveis às preferências e necessidades de seus usuários através do uso de smart cards para realizar a autenticação dos usuários e armazenar suas preferências pessoais.

Tal protótipo constitui-se de dois módulos: construção de uma aplicação web que permita a um usuário carregar e atualizar seus dados e preferências pessoais a partir de qualquer computador conectado à web; e construção de um componente de software responsável por comunicar-se com as aplicações de um smart card e recuperar dados pessoais do usuário, bem como suas preferências pessoais para diversas aplicações de captura e acesso, as quais se encontra habilitado a utilizar.

O projeto, financiado pela FAPEMIG, não foi concluído em vista de que surgiram oportunidades diferentes para mim. Entretanto, apresentarei um pôster sobre este trabalho na quinta que vem, dia 23 de outubro, na Jornada de Iniciação Científica 2008 na UNIFEI. Seguem os links:

Se alguém se interessar em dar continuidade à pesquisas e trabalhos na área de computação ubíqua e/ou smart cards, favor entrar em contato que eu encaminho para o professor.

Quem se interessar em Java Card, consulte o site do Igor Medeiros, é a melhor referência nacional em Java Cards que conheço. O Igor costuma ser sempre disponível para trocar idéias a respeito de Java Card,  está lançando um livro sobre esta tecnologia e sempre está escrevendo em revistas e apresentando em eventos.

Referências bibliográficas:

  • Weiser, M. (1991). The computer for the 21st century. Scientific American 265(3), 94–104. Reprinted in IEEE Pervasive Computing vol 1, n.1, 2002.
  • Abowd, G. D. and E. D. Mynatt (2000). Charting past, present, and future research in ubiquitous computing. ACMTransactions on Computer-Human Interaction 7 (1), 29–58.
  • Coutaz, J., J. L. Crowley, S. Dobson, and D. Garlan (2005). Context is key. Communications of the ACM. 48(3), 49–53.

SOA tornou-se um assunto muito quente em TI no Brasil nos últimos 2 anos (lá fora já tem mais tempo). Experimente ir em qualquer evento, ciclo de palestras, mesas de discussão etc, sempre haverá alguém falando sobre algo relacionado a SOA.

Observando tamanha relevância desse assunto, decidi fazer meu TD (trabalho de diploma) sobre SOA, juntamente com Leonardo Alvarenga Garcia e Thiago Felipe de Melo Matias, sob orientação do prof. Enzo Seraphim. Assim a gente tem contato com o assunto e podemos aprofundar um pouco o nosso estudo anteriormente esparso.

Mas o que é SOA?

Arquitetura
Arquitetura

Não se desiluda, mas isso não se responde direamente, tipo SOA é isso e ponto final. A resposta não é única, não é formal, não é concreta… A gente também queria achar essa resposta assim mas não rolou… :(

Se você procurar vai achar várias definições diferentes, e te digo que todas devem estar corretas: modelo arquitetural, estratégia para aliar negócios e TI, filosofia para integração de sistemas de software, infra-estrutura para comunicação entre sistemas de software, padrões para reutilização de sistemas de software etc….

Bem, nós estudamos um pouco, lemos uns livros, revistas e artigos, e escrevemos uma singela explicação em nosso TD:

A dinâmica do mundo dos negócios exige que as organizações de TI sejam ágeis, flexíveis e simples. Para promover comunicação nessa verdadeira Torre de Babel que tornou-se a área de TI, a Arquitetura Orientada a Serviços (SOA – Service-Oriented Architecture) propõe organização dos ativos de software de forma que eles possam representar Processos, Atividades ou Tarefas de Negócio de forma direta. Tais representações são chamadas de Serviços, que devem ser baseados em padrões e facilmente combinados e reutilizados visando a satisfação dos requerimentos do negócio.

Pensamos que fazer um trabalho acadêmico fosse algo muito desafiante, pois SOA está imerso no mercado de negócios e não no mundo acadêmico. No entanto, nosso grupo vislumbrou certas possibilidades de aplicação de SOA para propósitos que tenham respaldo acadêmico, entre elas a área médica, que nos chamou a atenção.

O nosso trabalho tem por objetivo apresentar o desenvolvimento de uma SOA que contemple a implantação simplificada de um PACS (Picture Archiving and Communication System) de um hospital, com a implementação de serviços para recuperação de informações em sistemas HIS (Hospital Information System) e RIS (Radiology Information System), objetivando obter o serviço de radiodiagnóstico, que pode ser utilizado por exemplo para obter um diagnóstico de mamografia mais rico.

Para tal estudamos conceitos sobre serviços, BPM (Busines Proccess Management), WS (Web Services), ESB (Enterprise Service Bus) e governança SOA. A revisão bibliográfica está quase pronta e será postada aqui em breve.

Quem quiser saber mais sobre SOA e sobre o nosso trabalho, veja o seguinte pôster sobre o nosso trabalho. Nós o apresentamos no I Composium em 23 de setembro na UNIFEI:

Para quem quiser se aprofundar no assunto SOA, recomendo as seguintes leituras:

Desde então tenho lido e pesquisado sobre SOA e estou aprendendo. Quem quiser trocar idéias a respeito disso, por favor entre em contato :)

Inté!