Universidade Federal de Juiz de Fora Instituto de Ciências Exatas Departamento de Ciência da Computação Computação Ubíqua Aplicada à Saúde Marcos Marins da Silva Corrêa JUIZ DE FORA JULHO, 2011 Marcos Marins da Silva Corrêa Computação Ubíqua Aplicada à Saúde Monografia submetida ao corpo docente do Departamento de Ciência da Computação Federal de Juiz da de Universidade Fora para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Marcelo Lobosco JUIZ DE FORA JULHO, 2011 Marcos Marins da Silva Corrêa Computação Ubíqua Aplicada à Saúde Monografia submetida ao corpo docente do Departamento de Ciência da Computação Federal de Juiz da de Universidade Fora para obtenção do grau de Bacharel em Ciência da Computação. 14 de Julho de 2011. Aprovada por: ____________________________________________ Marcelo Lobosco, orientador - UFJF D.Sc. em Engenharia de Sistemas e Computação,UFRJ ____________________________________________ Eduardo Pagani Julio - UFJF M.Sc. em Computação, UFF ____________________________________________ Rodrigo Weber dos Santos - UFJF D.Sc. em Matemática, UFRJ Agradecimentos Agradeço a Deus por ter me concedido esta vitória. Tudo é do pai, toda honra e toda glória. É Dele a vitória alcançada em minha vida. Agradeço à minha família, pelo investimento e amor incondicional. Agradeço ao meu orientador Lobosco, transmitidos, paciência e persistência. Agradeço à Sarah, minha maior companheira. pelos conhecimentos Resumo A Computação Ubíqua é um novo paradigma de computação, considerado o paradigma do século XXI. Ela propõe a alteração da computação pessoal tradicional, transformando o relacionamento entre pessoas e computadores. Seu princípio básico é a criação de ambientes saturados de artefatos eletrônicos integrados com usuário de maneira harmoniosa e imperceptível, com a finalidade de auxiliar as pessoas em suas atividades diárias. Um cenário como este, em que computadores detectam as necessidades dos usuários, pode ser de extrema utilidade no âmbito da saúde. Dessa forma, aumenta-se a segurança dos pacientes e evita-se o estresse e a sobrecarga de profissionais da área de saúde. Assim, este trabalho visa mostrar como a Computação Ubíqua pode ser aplicada na Saúde. O objetivo é mostrar um exemplo de aplicação pervasiva utilizando objetos eletrônicos já integrados ao atual moderno estilo de vida. Palavras-chave: Computação Ubíqua. Computação móvel. Assistência médica pervasiva. Abstract Ubiquitous Computing is a new computing paradigm, considered the twentyfirst century paradigm. It proposes changes in the traditional personal computing, transforming the relationship between people and computers. Its basic principle is the creation of environments saturated with electronic device invisibly and seamless integrated, aiming help people in their daily activities. A scenario like this one, with computers detecting user's needs, can be extremely useful in healthcare, since the patient security can be increased as well as it can prevent the stress and the overload in healthcare professionals. This work aims to show how Ubiquitous Computing can be applied in healthcare. The goal is to develop a pervasive application using electronic devices that are currently integrated into the current modern lifestyle. Key words: Ubiquitous Computing. Mobile computing. Pervasive Healthcare. Sumário 1. INTRODUÇÃO ..................................................................................................... 08 1.1. Motivação .......................................................................................................... 08 1.2 Objetivos ............................................................................................................. 09 1.3 Organização ....................................................................................................... 10 2. COMPUTAÇÃO UBÍQUA .................................................................................... 11 2.1. Histórico ............................................................................................................. 11 2.1.1. As Eras da Computação ................................................................................. 11 2.1.2. A origem ......................................................................................................... 13 2.2. Definição ............................................................................................................ 16 2.3. Problemas ......................................................................................................... 17 2.4. Aplicação na Saúde .......................................................................................... 18 2.4.1. Cuidados com o Idoso .................................................................................... 20 3. SUN JAVA WIRELESS TOOLKIT ........................................................................ 22 3.1. Linguagem e Plataforma Java ........................................................................... 22 3.2. Java 2 Platform, Micro Edition (J2ME) .............................................................. 23 3.2.1. Connected Limited Device Configuration (CLDC) .......................................... 24 3.2.2. Mobile Information Device Profile (MIDP) ...................................................... 25 3.3. Sun Java Wireless Toolkit para CLDC .............................................................. 27 4. MONITORAMENTO CARDÍACO VIA CELULAR ................................................. 28 4.1. Visão geral do aplicativo .................................................................................... 28 4.2. O MIDlet BPM .................................................................................................... 30 4.2.1. Primeiros passos ............................................................................................ 30 4.2.2. A classe Sender ............................................................................................. 31 4.2.3. Modos Médico e Paciente .............................................................................. 31 4.3. Análise ............................................................................................................... 32 5. CONCLUSÃO ....................................................................................................... 34 5.1 Trabalhos futuros ................................................................................................ 34 Referências Bibliográficas ........................................................................................ 36 8 1. Introdução A Computação Ubíqua, ou Computação Pervasiva, originou-se no final da década de 1980 como um novo paradigma de computação, prometendo ser o paradigma do século XXI. A promessa era de facilitar a utilização de computadores, até então considerada uma atividade complexa que demandava do usuário muita atenção. Os pesquisadores norte-americanos precursores nas ideologias deste paradigma se embasaram na alegação de que os computadores pessoais forçavam as pessoas a entrar em seu mundo, quando na verdade o contrário deveria acontecer. Ao invés de o computador se apresentar às pessoas como uma “caixa” em cima de uma mesa, para a Computação Ubíqua os ambientes deveriam ser saturados com os mais variados dispositivos com capacidades de computação e comunicação. Dessa forma, a informação estaria acessível a qualquer tempo e em todo lugar, ou seja, onipresente. Mas mais importante que isso, a Computação Ubíqua alteraria o relacionamento das pessoas com os computadores. Ao invés de os usuários enviarem comandos imperativamente aos computadores, estes é que deveriam detectar seus anseios e se adaptar às suas atividades. De acordo com Mark Weiser [6], as maiores tecnologias são aquelas que desaparecem, ou em outras palavras, a tecnologia deve ser utilizada sem a nítida sensação de que ela está ajudando na execução de tarefas. Ela deve funcionar como uma extensão das capacidades cognitivas. A Computação Ubíqua já é uma realidade. Existem diversas pesquisas na área e grandes projetos em empresas e universidades. E o mais importante é que aos poucos ambientes impregnados de dispositivos computacionais são criados em todo o mundo e as pessoas estão se utilizando de seus benefícios muitas vezes sem notar. Esta é a exata essência deste paradigma revolucionário. 1.1. Motivação 9 De acordo com a contextualização introdutória apresentada, ter ambientes saturados de dispositivos captando as necessidades das pessoas pode ser extremamente poderoso se for direcionado à área médica. Através de sensores interligados em rede, é possível monitorar diversas características fisiológicas e comportamentais de pacientes, tais como batimentos cardíacos, pressão arterial, peso, incontinência urinária, dentre outros. Neste sentido, a Computação Ubíqua pode representar uma melhoria na qualidade de vida tanto dos pacientes quanto dos profissionais de saúde. A tecnologia pode auxiliar na assistência médica em muitos sentidos, como por exemplo auxiliando para que os atendimentos emergenciais sejam feitos com maior rapidez em atendimentos emergenciais ou mesmo facilitando a detecção de sintomas de doenças ou mesmo o seu diagnóstico. Portanto, inúmeros são os benefícios do uso da Computação Ubíqua aplicada à Saúde, fugindo aos limites da imaginação o poder que teria uma moderna infraestrutura tecnológica hospitalar integrada com um sistema de sensores de monitoramento de pacientes. 1.2. Objetivos Diante do cenário apresentado, fica claro que Computação Ubíqua pode fornecer grande contribuição para a saúde. Neste cenário, o objetivo deste trabalho é apresentar um estudo de caso que mostre o potencial desta tecnologia para a aplicação na área da saúde. A aplicação desenvolvida neste trabalho ratifica a facilidade de se desenvolver aplicações ubíquas para as ferramentas já disponíveis hoje. Em particular, foi desenvolvida uma aplicação que monitora os batimentos cardíacos de um paciente a ser utilizada em um aparelho de telefone celular, dispositivo este que já está plenamente difundido no mundo atual e que as pessoas carregam sempre consigo. Apesar deste aparelho hoje não ter todos os sensores necessários para o pleno desenvolvimento da aplicação, acredita-se que em um futuro próximo esse quadro pode mudar, já que este aparelho a cada dia incorpora novas funcionalidades. Para lidar com a falta de alguns sensores necessários ao 10 desenvolvimento da aplicação, algumas funcionalidades que hoje não estão presentes nesses aparelhos foram simuladas. 1.3. Organização Este trabalho está organizado em mais quatro capítulos. O Capítulo 2 é voltado à apresentação da Computação Ubíqua. O Capítulo 3 apresenta a ferramenta Sun Java Wireless Toolkit (WTK). O Capítulo 4 apresenta a aplicação desenvolvida. O Capítulo 5 traz as conclusões e sugestões de trabalhos futuros. 11 2. Computação Ubíqua O termo Computação Ubíqua (do inglês Ubiquitous Computing) foi cunhado em 1988 para se referir a presença maciça e transparente de sistemas computacionais no cotidiano das pessoas. Seu principal objetivo é transformar o modo como o ser humano se relaciona com artefatos tecnológicos, tornando a presença destes cada vez mais imperceptível. O objetivo deste capítulo é apresentar a Computação Ubíqua. A Seção 2.1 traça um breve histórico da área. A Seção 2.2 introduz as principais definições e convenções de nomenclatura da área. A Seção 2.3 apresenta os problemas e desafios a serem enfrentados pela Computação Ubíqua. Por fim, a Seção 2.4 relaciona Computação Ubíqua com saúde e apresenta um exemplo de aplicação. 2.1. Histórico A evolução tecnológica tem sido tão expressiva que a todo momento nos deparamos com novidades cada vez mais surpreendentes nesta área. E cada vez mais a presença de artefatos tecnológicos em nossas vidas é maior. Mas talvez o que realmente importa não é a tecnologia em si, mas sim o seu relacionamento com as pessoas [1]. 2.1.1. As Eras da Computação Acerca do relacionamento do homem com a tecnologia, mais precisamente do homem em relação aos computadores, podemos classificá-lo de acordo com eras relativamente bem definidas [1]. No período referente à segunda metade do século 12 XX, houve duas grandes tendências para esse relacionamento: primeiramente o relacionamento mainframe, seguido pelo relacionamento Personal Computer, ou PC. Na era do mainframe, o computador era um recurso escasso, caro e era compartilhado com outros usuários, sempre especialistas. Era a era do relacionamento um computador – muitas pessoas. Hoje este tipo de relacionamento ainda existe: poder-se-ia dizer que qualquer computador, ainda que seja um PC, que seja compartilhado por várias pessoas é um mainframe. O computador pessoal sobressaiu-se ao mainframe por volta de 1984, quando o número usuários de PCs ultrapassou o de usuários de computadores compartilhados [2]. Entramos então na era do PC, com o relacionamento uma pessoa – um computador. Essa relação é por muitas vezes íntima e profunda: o computador guarda arquivos pessoais do usuário, e, por este motivo, o acesso ao mesmo e/ou aos seus arquivos muitas vezes exige senhas. Este relacionamento, bem como no caso anterior (mainframe), demanda muita atenção do usuário: ao se utilizar do computador a pessoa está concentrada, ocupada e desligada do mundo real. Mark Weiser e John Seely Brown comparam o computador ao automóvel: um item especial, caro e que requer considerável atenção para operá-lo [1]. Com o advento da Internet, a evolução das redes de computadores e os sistemas distribuídos, surge uma nova fase, na qual a Internet mescla elementos das duas eras anteriores. Em uma representação da arquitetura cliente-servidor em escala massiva, os servidores web podem ser vistos como mainframes sendo utilizados por vários PCs como clientes web. Mas esta é apenas uma era de transição, que vai aos poucos delineando uma nova forma de relacionamento para a terceira era: a era da Computação Ubíqua. Vislumbra-se que na terceira era cada usuário compartilhará muitos computadores. Além dos computadores pessoais, também serão utilizados muitos dispositivos embutidos em paredes, cadeiras, roupas, carros, etc. A Computação Ubíqua é fundamentalmente caracterizada pela conexão de objetos em um mundo computacional. O ponto de cruzamento desta era com a do Computador Pessoal seria entre 2005 e 2020 [2]. De fato, nos encontramos dentro deste ponto de cruzamento. Ainda não estamos completamente imersos no mundo da Computação Ubíqua, mas 13 estamos caminhando, ou correndo, ao encontro dele. Não é raro um usuário fazer uso de vários dispositivos eletrônicos ao mesmo tempo, entre computadores, players de áudio e vídeo, smartphones, PDAs, etc. E mais produtos estão sendo incluídos à esta lista, como os tablets, por exemplo. Além disso, já é possível encontrar ambientes providos com diversos sensores com o intuito de tornar certas atividades mais suaves e naturais. Um exemplo é o emprego de sensores em banheiros públicos de alguns shoppings e restaurantes. Eles já não possuem mais interruptores; ao entrar um sensor de movimento acende as luzes e os exaustores; ao distanciar do vazo sanitário, um dispositivo aciona a descarga, o que também evita o desperdício de água; e as torneiras também já não possuem mais abridores, basta posicionar as mãos em baixo da mesma para ativá-la, assim como os secadores de mão automáticos. Nas residências contemporâneas, cada indivíduo já está sendo compartilhado por vários tipos de computadores simultaneamente. Em qualquer casa hoje nós já encontramos diversos dispositivos eletrônicos, entre relógios, fornos microondas, controles remotos, aparelhos de som, televisores, aparelhos de DVD, home theaters, brinquedos, dentre muitos outros. Porém, estas casas modernas, cheias de tecnologia, não estão qualificadas como ambientes de Computação Ubíqua. Tais produtos não são em sua essência muito diferentes de tecnologias mais antigas e tradicionais e são usados quase sempre um por vez, demandando muita atenção do usuário. Contudo, uma vez conectados em rede, eles estarão tecnologicamente aptos para a Computação Ubíqua. Como foi dito anteriormente, o que realmente importa não é a tecnologia em si ou a sua ampla disseminação, mas sim a forma como ocorre o seu relacionamento com as pessoas. 2.1.2. A origem No final do ano de 1987, membros do Laboratório de Eletrônica e Imagem (EIL - Electronics and Imaging Laboratory) do Centro de Pesquisa Palo Alto da Xerox (PARC - Palo Alto Research Center Incorporated) propuseram fabricar telas de computador gigantes, do tamanho de paredes [3]. Essas telas teriam tecnologia 14 avançada e seriam capazes de se conectar com diversos outros dispositivos do ambiente. Rapidamente, membros de outros departamentos se voluntariaram a participar da criação de software e hardware para este novo tipo de sistema computacional. O ponto principal da proposta desenvolvida no PARC era o anseio de se introduzir uma facilidade de uso nestas telas. A facilidade imaginada permitiria o uso das telas como uma lousa tradicional. Adicionalmente, propôs-se a ampliação de suas funcionalidades ao se permitir que a tela fosse conectada em rede com outros dispositivos. A partir de então surgiram as primeiras ideias que se opunham ao então vigente paradigma “uma pessoa – um computador” e criou-se a concepção de se espalhar computadores por todo o ambiente, contudo de modo imperceptível ao usuário. Ao mesmo tempo em que se começava a delinear uma nova visão para o relacionamento homem-máquina nos laboratórios do PARC, um fato curioso ocorria paralelamente. Antropólogos da área de Tecnologia e Práticas de Trabalho estavam observando justamente como as pessoas utilizavam tecnologias em detrimento do modo que elas apenas diziam utilizá-la. Tais observações levaram alguns profissionais de tecnologia do PARC a pensar menos nas particularidades técnicas de um computador e mais no modo como a tecnologia é utilizada. Em particular, como os computadores foram incluídos nas atividades diárias e como eles interagem com o resto do ambiente físico. Como resultado desta nova forma de visualizar a relação homem-máquina, bem como a inserção da tecnologia no cotidiano, no início do ano de 1988 foi criado o programa de Computação Ubíqua no Laboratório de Ciência da Computação (CSL) do PARC [3]. Este projeto resultou em várias patentes e artigos fundamentais, dentro de uma ampla gama de áreas da Ciência da Computação até então consideradas independentes. Mas, no fim, criou-se uma nova área do ramo, que especulava sobre um meio físico impregnado por sensores invisíveis, atores, telas e elementos computacionais embutidos continuamente nos objetos do cotidiano e conectados através de uma rede. Durante este processo de concepção da Computação Ubíqua, Mark Weiser era o diretor de tecnologia do PARC [4] e teve grande participação com uma visão 15 única do futuro da computação. Tanto que é considerado o pai da Computação Ubíqua [5]. Em setembro de 1991, Weiser publicou na revista Scientific American o artigo “The computer for the 21st Century”, a primeira referência oficial ao novo paradigma de computação. Para explicar a sua pretensão com a Computação Ubíqua, Weiser faz uma analogia à escrita [6]. E como ela “desapareceu” entrelaçada às atividades diárias. Ao olhar uma placa na rua, uma pessoa absorve o seu conhecimento sem realmente realizar o ato de ler a mesma. Não é necessário parar, se desfocar do mundo ou daquilo que esteja fazendo e só então ler. Não é assim que acontece. A escrita está plena e suavemente integrada ao cotidiano social. Diferente do computador. O computador permanece em um mundo à parte. E para que as pessoas possam utilizá-lo, precisam se deslocar de um mundo à outro. Mas isso não é somente um problema de interface de usuário [6]. A ideia de computador como a dos desktops e laptops são apenas transições para o real potencial da Tecnologia da Informação (TI). Esses computadores realmente não conseguem fazer computações de maneira integrante e invisível na maneira como as pessoas vivem. Portanto, é preciso conceber uma nova maneira sobre computadores no mundo, uma maneira que leve em conta o ambiente natural do homem e faça os computadores desaparecerem no segundo plano. Depois de apresentar a Computação Ubíqua ao mundo, Mark Weiser publicou o artigo Some Computer Science Issues in Ubiquitous Computing na revista Communications of ACM em julho de 1993, dando enfoque mais científico ao tema [7]. Além disso, no artigo são apresentadas algumas tecnologias ubíquas já implementadas componentes nos de laboratórios hardware, da PARC. protocolos de Particularidades rede, técnicas aplicações, de métodos computacionais, etc, foram apresentadas [8]. A Computação Ubíqua já era uma realidade, de certo modo. Contudo, o assunto não foi amplamente debatido e pesquisado também devido à tecnologia disponível na época. Os anos seguintes foram de grande evolução tecnológica, em particular de sistemas distribuídos e de tecnologias móveis. Os dispositivos eletrônicos estavam cada vez menores, com poder computacional maior e melhor 16 capacidade conexão. Tudo isso com um custo cada vez menor, tanto financeiro quanto energético. Assim, a partir do final da década de 1990, o assunto naturalmente foi sendo cada vez mais discutido. Em 2001, Mahadev Satyanarayanan, um dos pioneiros em pesquisas relacionadas à Computação Móvel e Computação Pervasiva, publicou o artigo Pervasive Computing: Vision and Challenges [9], no qual ele formaliza e define a Computação Ubíqua. A partir dessa época, o número de publicações, pesquisas e o surgimento de projetos relacionados à Computação Ubíqua obtiveram um crescimento exponencial. Prova de todo esse crescimento é o surgimento de revistas como a Pervasive Computing Magazine e congressos internacionais como o UBICOMP. Ambos são mantidos por duas entidades das mais importantes no meio tecnológico, o IEEE e a ACM, respectivamente. 2.2. Definição O ramo da computação tratado neste trabalho na maioria das vezes é chamado de Computação Ubíqua (Ubiquitous Computing) ou Computação Pervasiva (Pervasive Computing). Em grande parte das publicações, os dois termos são tratados como sinônimos ou até mesmo duas formas de se referir a um mesmo tema. O termo “ubíquo” vem do latim ubiquus, que quer dizer onipresença, ou seja, estar ao mesmo tempo em toda a parte. Assim, o nome Computação Ubíqua, pode ser diretamente interpretado como Computação Onipresente, o que já remete à ideia de ambientes saturados de computadores. Já o termo “pervasivo” é um neologismo português, que vem do inglês pervasive, que teria como significado algo como penetrante ou que se infiltra. Então Computação Pervasiva remete a dispositivos eletrônicos embutidos em objetos pelo ambiente. De fato, por estes significados crus dos nomes, ambos podem ser encarados como sinônimos. Porém, em alguns casos, eles são tidos como diferentes. Kalle Lyytinen publicou um artigo em que distingue e define Computação Móvel, Computação Pervasiva e Computação Ubíqua [10]. Segundo Lyytinen, Computação Móvel é fundamentalmente relativa a aumentar a capacidade das pessoas de 17 carregar serviços computacionais consigo mesmas. E Computação Pervasiva implica que o computador tenha a capacidade de obter informações do ambiente em que ele está embutido e utilizá-lo para criar modelos computacionais dinamicamente. Ainda segundo Lyytinen, Computação Ubíqua significa ter algum dispositivo computacional, sendo carregados por pessoas, que tenha a capacidade de construir modelos computacionais incrementalmente e então configurar seus serviços adequadamente para os mais variados ambientes. Ou seja, é a junção em larga escala dos aspectos da Computação Móvel com a Computação Pervasiva. Para o pai da Computação Ubíqua, Mark Weiser, ela pode ser definida como a melhoria do uso de computadores através da disponibilização de diversos dispositivos computacionais pelo ambiente, tornando-os efetivamente invisíveis para o usuário [8]. Weiser exprime a ideia de fazer com que os computadores fiquem em segundo plano no ambiente e que se integrem de maneira harmoniosa ao cotidiano e às atividades diárias [3][6]. Para melhor definir a Computação Ubíqua, temos que nos voltar para sua história. O que levou os primeiros pesquisadores a pensar na Computação Ubíqua foi exatamente o modelo tradicional de uso do computador por eles considerado inapropriado. O intuito principal era de alterar as interfaces do relacionamento homem-máquina. Figurativamente, podemos dizer que, nessa relação clássica, a região física em que o usuário se encontra com o computador é perfeitamente bem definida. E é exatamente este o problema. A proposta da Computação Ubíqua é que não haja um delineamento claro desta região. A interface deve ser suavemente difusa, integrando o computador às atividades do homem e assim fazendo com que ele se torne uma extensão de suas capacidades cognitivas. A partir deste pensamente é que vem a definição: Computação Ubíqua é a criação de ambientes saturados de dispositivos computacionais com capacidade de comunicação, virtuosamente integrados com os usuários [9]. Essa é a definição que aqui consideraremos a mais apropriada. Além disso, atribuiremos equivalência de sentido entre os termos Computação Pervasiva e Computação Ubíqua, já que tal consideração é aceita pelo IEEE. 18 2.3. Problemas A Computação Ubíqua foi idealizada para melhorar a forma de interação entre homens e computadores. Contudo, é comum que ao se solucionar um problema, outros sejam criados. E no âmbito tecnológico não é diferente. Em seu início, o programa de Computação Ubíqua do PARC resultou em mais perguntas do que respostas [3]. Espalhar sensores e dispositivos eletrônicos pelo ambiente e muitas vezes fazer com que eles estejam invisíveis aos usuários, instantaneamente traz à tona o problema da privacidade. Quanto maior for o anseio por automatização dos sistemas, maior será o volume de informações a serem captadas do usuário. Contudo, podem ocorrer situações em que não queiramos compartilhar determinadas informações. O problema é como filtrar quais programas poderão usar essas informações e quais não poderão. E mais, como saber se certa informação foi armazenada? Também neste sentido, podemos detectar a questão da segurança da informação. Uma vez armazenada a informação, quem terá acesso à ela? Com ambientes saturados de dispositivos computacionais com capacidade de conexão, há a necessidade de prevenir e restringir que dispositivos não autorizados se tornem parte do sistema ubíquo. Para Mark Weiser, o problema da Computação Ubíqua é na verdade relativo ao controle [3]. Se o sistema computacional é invisível bem como extensível, tornase difícil saber o que controla o que. Tendo por base que toda ação é um comando, inclusive a ausência de ações, isso acarretaria em alguma consequência inoportuna? E no caso afirmativo, o que controlaria quais ações devem ser levadas em conta, outro software? Manter a simplicidade e o controle simultaneamente é ainda uma das maiores questões em aberto nas pesquisas da computação ubíqua. 2.4. Aplicação na Saúde 19 Observa-se nos últimos anos um aumento na expectativa de vida da população e, por conseguinte, no número de idosos. Em paralelo, o moderno estilo de vida acelerado de um mundo cada vez mais globalizado acarreta em um aumento no número de doenças crônicas em indivíduos de todas as idades. Ocorre também uma diminuição no número de médicos, enfermeiros e profissionais de saúde em termos proporcionais [11]. Estes fatores aliados a diversos outros, fazem crescer a cada ano os gastos com saúde de um modo geral. Um estudo feito em 2009 no Canadá, na província de Ontário, a mais populosa das dez províncias do país, apresentou estimativas para o exponencial crescimento dos gastos do governo com saúde [12]. A estimativa foi feita com o intuito de avaliar o quanto deveria ser investido de modo que o sistema de saúde mantivesse o nível do atendimento. Em 2014, os gastos representariam metade do total investido pela administração pública e já em torno de 2019 esta fração chegaria a 75%. Seguindo a projeção feita, em 2030 os gastos deveriam ser de 100%. O estudo apresentado é muito específico de certa região de Canadá. Mas pode servir como um exemplo e pode não ser muito diferente de outras regiões no mundo. Em pouco tempo, é possível que o modelo vigente de assistência médica não atenda mais aos desafios iminentes. Este modelo, concentrado em torno de pessoas altamente especializadas, localizadas em grandes hospitais pode ser comparado ao modelo de processamento de dados centralizado da primeira era da Computação, ou seja, à era dos mainframes [11]. Este “Modelo de Assistência Médica mainframe” precisa ser distribuído de certa forma. Com a ajuda da tecnologia, é possível produzir respostas mais rápidas e auxiliar profissionais de saúde e pacientes a gerenciar alguns indicadores específicos. Um modelo assistência médica distribuída, que permeie o cotidiano dos cidadãos, é muito mais apropriado para enfrentar os desafios citados. Principalmente no que diz respeito aos profissionais de saúde, que serão cada vez mais sobrecarregados, em virtude da população crescer em ritmo mais acelerado. O objetivo da Assistência Médica Pervasiva é habilitar este modelo distribuído para o gerenciamento da saúde e bem estar, através do uso de Tecnologias de 20 Informação e Comunicação (TIC), a fim de tornar a assistência médica disponível em qualquer lugar, a qualquer momento e para qualquer pessoa [13]. A Assistência Médica Pervasiva foca explicitamente no uso de novas tecnologias, ferramentas e serviços que possibilitem ao paciente desempenhar um papel mais ativo no gerenciamento e tratamento de doenças. Isso inclui suporte para a realização de autogerenciamento, automonitoramento, autocuidado, esforços preventivos, cooperação entre paciente e instituições de saúde, cooperação entre lar e hospital, consulta e monitoramento remotos [11]. Tudo isto com um certo limite de liberdade ao paciente, devida à importância do conhecimento específico dos profissionais de saúde. Particularmente, podemos afirmar que inevitavelmente a computação pervasiva irá se tornar uma realidade. E levando em consideração o seu poder intrínseco, pode se tornar uma grande aliada ao ser direcionada ao âmbito da saúde. Esta pode ser otimizada no que diz respeito ao uso de dispositivos de monitoramento, acesso a registros médicos, velocidade de atendimentos emergenciais, etc. Isto de modo independente dos outros fatores antes mencionados que estarão em déficit em virtude do aumento populacional. 2.4.1 Cuidados com o Idoso No estado de Oregon, nos Estados Unidos, existe um asilo de idosos que utiliza tecnologias pervasivas para melhorar a qualidade de vida de seus residentes. O ambiente do asilo foi construído de modo que os artefatos tecnológicos fossem “virtuosamente integrados com os usuários”, ou seja, seguindo o principal preceito da Computação Ubíqua. Sendo assim, a entidade visa proporcionar aos residentes tanta autonomia e responsabilidade quanto for possível [14]. O asilo, Elite Care, lembra mais um condomínio do que um hospital tradicional. No que diz respeito ao modelo de assistência social, não há médicos fazendo rondas pelos apartamentos, mas sim funcionários que eventualmente entram em contato com os residentes. Somado a este esquema, os sensores 21 pervasivos monitoram os sinais vitais e demais indicadores fisiológicos dos idosos, possibilitando-os viver normalmente e recebendo a devida assistência. O desenvolvimento das tecnologias e métodos de tratamento utilizados na instituição partiu da iniciativa dos seus fundadores, que utilizaram de sua experiência com os cuidados de seus próprios pais. No início do projeto os recursos eram escassos e os dispositivos pervasivos foram desenvolvidos com seus próprios esforços. Com um orçamento limitado, os artefatos resultantes integraram tecnologias de baixo custo, discrição e interface amigável para idosos. Mas muito do sucesso da companhia se deve ao auxílio de um comitê de consultoria integrado por membros bastante renomados. Dentre outros, podemos destacar a Intel, as Universidades de Harvard e Michigan e grandes centros de pesquisa médicohospitalares. Os sensores e a infraestrutura pervasiva ajudam os funcionários do asilo a identificar quando os idosos precisam de assistência. Cada residente possui um banco de dados específico que documenta suas atividades diárias e seus sinais vitais, como variações de peso e pressão sanguínea ao longo do tempo. Estes dados, acessíveis também aos familiares, permitem os enfermeiros monitorar tendências ou variações abruptas. Cada um também possui um crachá localizador que, além de funcionar como chave para o seu respectivo apartamento, também acionam as luzes dos ambientes quando necessário. O crachá ainda possui um botão que pode ser usado para chamar algum enfermeiro em caráter emergencial. Os apartamentos dos residentes são equipados com computadores com telas touch screen, conectados à Internet, que os permitem conversar com familiares e amigos. As máquinas são equipadas com aplicações com interface amigável à idosos, letras grandes para facilitar a leitura e reconhecimento de comandos por voz. As camas dos apartamentos também possuem sensores embutidos, por meio dos quais é possível identificar variações bruscas de peso. Estes sensores também identificam se estão ocorrendo certas situações durante a noite que podem denotar problemas de saúde. Idas frequentes ao banheiro ou demasiada inquietude recebem atenção especial dos médicos. Toda essa infraestrutura pervasiva possibilita que a proporção de médicos e enfermeiros por residente seja muito menor. As facilidades que ela proporciona 22 também reduz consideravelmente o estresse dos funcionários e aumenta a qualidade de vida dos idosos. Salvo reclamações ocasionais quanto à privacidade, são inegáveis os benefícios da Computação Ubíqua no monitoramento de pacientes que necessitam de constante assistência. Portanto esta clínica deve servir como exemplo de modelo de assistência médica pervasiva. 3. Sun Java Wireless Toolkit O Sun Java Wireless Toolkit (WTK) é um conjunto de ferramentas que torna possível o desenvolvimento de aplicações para celulares e outros dispositivos móveis sem fio. Embora seja baseado na especificação para o uso da plataforma Java, o WTK também suporta muitos outros pacotes opcionais, tornando-o muito poderoso [21]. Para entender melhor o funcionamento do Sun Java Wireless Toolkit e conhecer o seu potencial, é necessário conhecer algumas particularidades do Java. 23 A Seção 3.1 faz uma breve apresentação da linguagem Java bem como uma introdução das suas distintas plataformas. Na Seção 3.2 é apresentada a plataforma Java específica para dispositivos de capacidades limitadas. Por fim, a Seção 3.3 descreve algumas característica da ferramenta a ser utilizada neste trabalho, o Java Wireless Toolkit (WTK). 3.1. Linguagem e Plataforma Java Java é uma linguagem de programação que nasceu e cresceu nos anos 1990 desenvolvida pela Sun Microsystems [15]. Tem como principal característica a independência de plataforma, ou seja, os seus programas podem ser executados em distintos sistemas computacionais [16]. O que torna a independência de plataforma possível é a Máquina Virtual Java, do inglês Java Virtual Machine (JVM). Ao compilar um programa Java, um código intermediário é gerado, chamado de bytecode. Este bytecode é interpretado e/ou compilado em tempo de execução pela JVM, podendo gerar código de máquina para a maioria dos sistemas operacionais nas mais distintas plataformas de hardware. As aplicações desenvolvidas em Java podem utilizar-se de uma série de bibliotecas nativas desenvolvidas pela Sun. Estas bibliotecas são disponibilizadas através da Java Application Programming Interface (API). A JVM juntamente com a API formam o ambiente de execução Java, conhecido como Plataforma Java. Com a finalidade de abranger todas as necessidades do mercado, a Sun projetou a Java 2 em três edições [17]. Cada uma delas define uma tecnologia com um propósito diferente. Em ordem de lançamento, as edições são as seguintes: Java 2 Platform, Standard Edition (J2SE), que provê suporte ao desenvolvimento de aplicações para desktop e estações de trabalho. Contém a JVM, o compilador Java, a API padrão e outras ferramentas utilitárias; Java 2 Platform, Enterprise Edition (J2EE), para aplicações mais robustas e destinadas a servidores de grande porte. Fornece funcionalidade para aplicações Java distribuída, tolerante a falhas e multicamadas; 24 Java 2 Platform, Micro Edition (J2ME), que é a versão compacta da linguagem, direcionada para dispositivos móveis, como celulares, ou embutidos, como decodificadores de TV digital. Desta forma, o mais importante neste estudo é este último, o J2ME, uma vez que a Computação Ubíqua usa em demasia artefatos móveis e embarcados de capacidades limitadas. 3.2. Java 2 Platform, Micro Edition (J2ME) J2ME é um conjunto de especificações que tem por objetivo disponibilizar alternativas às tradicionais JVM, API e demais ferramentas do J2SE que possam atender às necessidades de equipamentos portáteis e dispositivos com capacidades menores que os computadores tradicionais [17]. A máquina virtual do J2ME é a Kilobyte Virtual Machine (KVM) derivada da JVM. A KVM é extremamente pequena e eficiente, garantindo ótimo desempenho. Essa máquina virtual executa um programa Java em qualquer processador de 16 bits com a quantidade mínima de 128 Kb de memória disponível [18]. Além disso as APIs específicas do J2ME são muito simples e leves para economizar espaço, memória e processamento. O J2ME possui uma arquitetura modular e escalável definida em um modelo de três camadas embutidas sobre o Sistema Operacional do dispositivo. As camadas são a de Perfil, a de Configuração, e a camada do Interpretador (KVM). Para este estudo, a Configuração e o Perfil importantes são, respectivamente, a Connected Limited Device Configuration (CLDC) e o Mobile Information Device Profile (MIDP). Cada um deles será detalhado a seguir. As aplicações Java desenvolvidas para o J2ME com a Configuração e o Perfil citados são chamadas de MIDlets e representam a camada mais alta nessa arquitetura. Estas camadas estão ilustradas na Figura 3.1. 25 Figura 3.1: Camadas da J2ME [17]. 3.2.1. Connected Limited Device Configuration (CLDC) Como dito anteriormente, J2ME foi lançado para que pudesse atender às necessidades de dispositivos de pequeno porte e capacidades limitadas. Contudo, mesmo entre estes dispositivos existem diferentes características que podem ser relativamente discrepantes, no que diz respeito a processamento, memória e conectividade. Assim, foi necessário definir um mínimo de funcionalidades (JVM e API) para artefatos com tais características semelhantes [17]. Estas definições de particularidades correspondem à Camada de Configuração da arquitetura J2ME. Uma determinada Configuração define o básico de funcionalidades e serve como base de execução e desenvolvimento. Ela atende a vários dispositivos em uma faixa de requisitos, mesmo desconhecendo as particularidades de cada dispositivo. Atualmente existem duas Configurações apenas: CDC ou Configuração de Dispositivos Conectados (do inglês Connected Device Configuration), que possui um conjunto de APIs que suportam equipamentos fixos com capacidade de conexão de médio porte, tal como televisores; e CLDC ou Configurações para Dispositivos com Conexão Limitada (do inglês Connected Limited Device Configuration) que possui um 26 conjunto de APIs destinadas a aparelhos cujo poder de processamento, display e memória são limitados, tal como celulares. Como o Sun Java Wireless Toolkit é destinado ao auxilio no desenvolvimento para CLDC, detalharemos aqui apenas esta Configuração. O CLDC é destinado a aparelhos com processadores RISC de 16 a 32 bits de no mínimo 16 MHz; mínimo de 160 KB de memória não-volátil para as bibliotecas e a máquina virtual; mínimo de 192 KB de memória disponível para a plataforma Java; baixo consumo de energia, muitas vezes funcionando com bateria; conectividade a algum tipo de rede, em sua maioria com uma conexão sem fio intermitente e largura de banda limitada [19]. O J2ME, no âmbito da configuração CLDC, possui algumas limitações em relação ao J2SE [17] com o intuito de tornar a plataforma mais simples para os dispositivos a ela direcionados. A primeira limitação é que não há suporte a números de ponto flutuante, cujas operações requerem mais processamento, o que pode ser demasiadamente custoso em dispositivos cujo hardware é limitado. O J2ME também não suporta chamadas para o método destrutor do objeto, método este que em outras plataformas dá ao programador a possibilidade de descrever que operações devem ser realizadas quando o objeto deixa de existir (object.finalize()). O suporte a erros é limitado, de modo que erros de tempo de execução são manipulados dependentemente da implementação. Pode-se destacar também a falta de suporte à Java Native Interface (JNI). 3.2.2. Mobile Information Device Profile (MIDP) Uma vez que a Configuração define as funcionalidades básicas de uma gama de dispositivos, o Perfil, a camada mais próxima do MIDlet, atende detalhes mais específicos do dispositivo. Embora existam apenas dois tipos de Configuração, existem diversos Perfis, como o Mobile Information Device Profile (MIDP), RMI Profile, Foundation Profile, PDA Profile, PersonalJava, etc [17]. Como utilizaremos o Sun Java Wireless Toolkit para o desenvolvimento de uma aplicação MIDP, detalharemos aqui apenas este Perfil. 27 Figura 3.2: Hierarquia das camadas da J2ME com representatividade numérica em cada nível, com destaque no Perfil de interesse. O Perfil de Dispositivo de Informação Móvel (do inglês Mobile Information Device Profile – MIDP) é uma peça chave do J2ME [20]. Quando combinado com o CLDC, fornece um ambiente de execução Java padrão para os mais populares dispositivos de informação móveis da atualidade, como telefones celulares e os mais usuais Assistentes Digitais Pessoais (PDAs). A especificação do MIDP foi definida através do Java Community Process (JCP) por um grupo de peritos de mais de 50 empresas, incluindo fabricantes de dispositivos importantes, operadoras e fornecedores de software móvel. Ele define uma plataforma para a implantação dinâmica e segura de aplicações de rede otimizadas. O CLDC e o MIDP fornecem a funcionalidade central exigida pelas aplicações móveis, na forma de um ambiente de execução Java padronizado e um poderoso conjunto de APIs. Usando MIDP, desenvolvedores podem escrever aplicativos apenas uma vez e, em seguida, implantá-los rapidamente para uma ampla variedade de dispositivos. Este Perfil tem sido amplamente adotado como a plataforma de escolha para aplicações móveis. Mundialmente, ele está em milhões de celulares e PDAs, e é suportado pelos principais Ambientes de Desenvolvimento Integrado (IDEs) [20]. 28 3.3. Sun Java Wireless Toolkit para CLDC O Sun Java Wireless Toolkit é o novo nome da ferramenta anteriormente conhecida por J2ME Wireless Toolkit. Ele é um conjunto de ferramentas para o desenvolvimento de aplicações baseadas na Configuração CLDC e no Perfil MIDP do J2ME [22]. Sua mais nova versão, a 2.5.1 [21], é disponibilizada gratuitamente para download para as plataformas Windows e Linux. O WTK é composto por três componentes principais [23]: o KToolbar, que automatiza diversas tarefas necessárias à criação de aplicativos MIDP; o emulador, que é o simulador de um celular para testar os aplicativos; e uma coleção de utilitários diversos. O WTK suporta uma vasta gama de APIs úteis no desenvolvimento de aplicações móveis. Possui também diversas funcionalidades que auxiliam o desenvolvedor a simular um ambiente muito próximo ao desejado. As opções vão desde a personalização da interface gráfica do emulador e outras personalizações em geral, até monitoramento de tráfego de rede e processamento [22]. A ferramenta é bastante intuitiva e o usuário tem a seu dispor um guia completo de uso e um outro apenas voltado para personalização. O próprio WTK pode ser usado como IDE independente, mas também é possível integrá-lo com algumas IDEs mais populares, como o NetBeans, por exemplo. 29 4. Monitoramento Cardíaco Através de Um Celular Um dos principais sinais vitais do ser humano é a freqüência cardíaca. A freqüência normal dos batimentos cardíacos de um adulto é de 60 até 100 ciclos, ou batidas, por minuto (bpm). Em alguns idosos ou outros portadores de disfunções cardíacas, extrapolar estes limites pode significar um sério risco ao indivíduo, podendo levar até à morte. O caso em que o coração bate menos de 60 vezes por minuto é chamado de bradicardia. E o caso em que ele ultrapassa as 100 batidas por minuto é chamado de taquicardia [24]. Monitorar constantemente os batimentos por minuto do coração de uma pessoa que corra riscos nestas situações e fornecer auxílio imediato quando necessário representa segurança ao paciente. Assim, é possível diminuir a ansiedade e aumentar a qualidade de vida do indivíduo, ainda que este esteja internado em clínicas ou casas de repouso como a que foi apresentada na Seção 2.4.1. Aparelhos que monitoram a freqüência cardíaca estão hoje disseminados, presentes em relógios usados por desportistas. O monitor de freqüência cardíaca funciona com uma cinta que deve ser usada no peitoral e de um relógio. A cinta contém um sensor que lê a frequência cardíaca e de uma unidade transmissora que emite os valores lidos para um receptor localizado no relógio. Um objeto comum que as pessoas costumam carregar sempre consigo é o celular. Através dele, conjugado a cinta transmissora que monitora os batimentos cardíacos e de uma unidade receptora localizada no próprio aparelho celular, seria possível enviar uma mensagem a um outro celular de um médico, enfermeiro ou outro responsável, emitindo um alerta em situações que representassem risco ao paciente. A aplicação descrita acima foi desenvolvida neste trabalho e será detalhada neste capítulo. A Seção 4.1 apresenta a visão geral do projeto. A Seção 4.2 detalha 30 algumas particularidades do aplicativo desenvolvido. E a Seção 4.3 finaliza fazendo a análise da aplicação. 4.1. Visão geral do aplicativo A aplicação, chamada de BPM, foi desenvolvida para a plataforma J2ME com o auxílio da ferramenta apresentada no Capítulo 3, o Sun Java Wireless Toolkit (WTK) para a Configuração CLDC e Perfil MIDP. Foi utilizado como base para o desenvolvimento o exemplo de rede utilizando datagramas que acompanha o WTK. O MIDlet possui arquitetura cliente-servidor, de modo que o celular do médico funciona como servidor e o do paciente como cliente. Um celular de médico pode estar conectado a vários celulares de clientes. Primeiramente, ao executar a aplicação, o usuário deve escolher entre executar no modo para celular de médico ou executar como o celular de um paciente, como mostrado na Figura 4.1. Figura 4.1: Tela inicial do MIDlet sendo executado no emulador do WTK. Devido ao padrão de segurança do Perfil MIDP, as aplicações sempre pedem permissão para acessar a rede [25]. Depois de aceitar a permissão de conexão, o 31 celular então permanece no modo que foi selecionado. As telas do modo médico e a do modo paciente são muito semelhantes. Ambas possuem um campo no qual é mostrado o status em que se encontra o celular e um campo para trocar mensagens livremente. A única diferença entre as telas é que no celular do paciente existe também o comando “Monitorar” que inicia o monitoramento dos batimentos cardíacos (ver Figura 4.2). Ao selecionar a opção monitorar no celular do paciente, o campo status permanece exibindo o valor correspondente aos batimentos por minutos. Nas ocorrências de taquicardia ou bradicardia, o celular do paciente envia uma mensagem automaticamente ao celular do médico, com os dizeres “alerta cardíaco”. Figura 4.2: Telas do MIDlet no modo médico (à esquerda) e no modo paciente (à direita). 4.2. O MIDlet BPM 4.2.1. Primeiros passos Os arquivos fontes dos projetos do WTK devem ficar no diretório src correspondente para serem compilados. Assim, geram o arquivo de extensão .jad 32 (Java Application Descriptor) no diretório bin. Este é o arquivo a ser posteriormente utilizado para instalar o MIDlet em um celular ou até mesmo no emulador. Apesar de não ser necessária neste último, também é possível simular a instalação. A classe principal (neste caso bpmMIDlet) precisa ser uma subclasse de javax.microedition.midlet.MIDlet da biblioteca do J2ME, da qual é criada uma instância ao executar o aplicativo no celular. Logo, é nesta classe que são definidas as ações iniciais do MIDlet, bem como a sua interface gráfica inicial. No MIDlet BPM, a classe bpmMIDlet é responsável por informar que o usuário deve escolher entre as opções de execução (médico ou paciente). Esta classe então cria uma instância da classe correspondente a escolhida pelo usuário e inicia o modo de execução passando a si mesma como parâmetro. 4.2.2. A classe Sender A classe Sender é a responsável por fazer os envios de mensagens por meio de datagramas. Ambas as classes Medico e Paciente (descritas a seguir) possuem como atributo um objeto Sender que cria entre clientes e servidor uma conexão (DatagramConnection). Para enviar mensagens através da função send, a instância do Sender recebe como parâmetros o endereço e o conteúdo da mensagem. De posse do endereço e da mensagem, o Sender cria o datagrama e envia através da DatagramConnection. Ao paciente é permitido que envie mensagens apenas ao servidor, ou seja, ao médico. Sendo assim, não é necessário que os datagramas dos pacientes possuam campo endereço. Estes datagramas então são simplesmente enviados ao servidor pela conexão entre eles. 4.2.3. Modos Médico e Paciente As classes dos dois modos de execução são muito parecidas. Basicamente, elas criam as interfaces necessárias para enviar e receber mensagens através do Sender. Como dito anteriormente, a diferença relevante entre elas está no comando “Monitorar” do celular do paciente. Selecionando esta opção, dá-se inicio à 33 simulação do dispositivo que estaria conjugado ao celular fazendo o monitoramento cardíaco do paciente. Os batimentos cardíacos são simulados através da geração de números pseudoaleatórios com auxilio da biblioteca java.util.Random. Essa biblioteca gera valores inteiros distribuídos uniformemente [26]. O valor inicial dos bpm (batimentos por minuto) é um inteiro aleatório entre 60 e 100, visto que esta é a faixa considerada normal para um adulto. O valor seguinte é gerado com base no valor atual da simulação de acordo com os seguintes critérios: 1. se o valor atual x está entre 60 e 100 bpm, então o próximo valor estará no intervalo [x -10; x + 10]; 2. se o valor atual x for menor que 60bpm, então o próximo valor estará no intervalo [x - 5; x + 10]; e 3. se o valor atual x for maior que 100bpm, então o próximo valor estará no intervalo [x - 10; x + 5]. Esses critérios foram adotados com a finalidade de gerar valores de bpm com oscilações mais suaves. E particularmente os itens 2 e 3, para que não se distanciassem muito daqueles valores considerados normais, ainda que dando essa possibilidade, porém com menor probabilidade. Foi também adotado o limite mínimo de zero bpm, por não existir bpm negativos, e máximo de 200 bpm, apenas para que o valor não cresça indiscriminadamente. Para evitar “alarmes falsos”, como o caso em que haja ocorrência de número de batimentos por minuto fora dos limites normais, mas que logo em seguida a freqüência volte ao normal, a aplicação espera para que ocorra por três vezes seguidas a medição de bpm considerada perigosa. Só então a mensagem de “alerta cardíaco” é enviada ao celular do médico. 4.3. Análise A partir dos valores gerados para os batimentos cardíacos em uma execução qualquer do MIDlet BPM, foi feito o gráfico a seguir: 34 Figura 4.3: Gráfico com os valores de bpm gerados na simulação ao longo do tempo. Nesta simulação os valores de bpm seguiam dentro dos valores normais até o instante 35 segundos, quando começou a cair. Entre os instantes de 38 a 40 segundos, houve três ocorrências seguidas de valores abaixo dos 60 bpm, quando uma mensagem foi enviada ao celular do médico. Logo após, entre os instantes de 42 a 44 segundos a situação se repetiu e outra mensagem foi enviada. A Figura 4.4 exibe as telas dos celulares do médico e do paciente durante uma simulação no momento em que o alerta é enviado. 35 Figura 4.4: Tela do médico (à esquerda) recebendo alerta e a tela do paciente (à direita) que o enviou. Tendo em vista o que foi proposto no início do capítulo, a aplicação desenvolvida obteve sucesso. Ela monitorara os batimentos ao longo do tempo e envia um alerta em casos que fujam da normalidade. É uma aplicação bastante simples, contudo pode ser vista como um primeiro passo para um sistema de monitoramento a ser utilizado de fato. Deve-se destacar que a simulação foi utilizada por não ser comum aparelho celular conjugado com aparelho de monitoração cardíaca. Neste caso, esse módulo seria substituído pela função que lê o valor real lido do sensor. 36 5. Conclusão A realização deste trabalho possibilitou vislumbrar o futuro no uso de dispositivos eletrônicos nas atividades diárias. Através do estudo da história da Computação Ubíqua, foi possível entender como os pesquisadores que a idealizaram e a definiram deram o ponto de partida na formalização deste novo paradigma de computação para o século XXI. Particularmente, ainda que o termo “Computação Ubíqua” não tivesse sido formalizado, a evolução das Tecnologias de Informação e Comunicação seguiria intuitivamente para este caminho. Tal afirmação é feita com base no processo de evolução do relacionamento do homem com o computador pessoal ao longo das “eras da computação”. Ademais, ficou claro com este estudo o quão promissor é este paradigma de computação. A conclusão principal deste trabalho é que aplicar Computação Ubíqua no âmbito da Saúde e prover um sistema de assistência médica pervasivo, pode ser extremamente poderoso. A utilização de tecnologias pervasivas para aumentar a autonomia de pacientes, fugindo de esquemas tradicionais de clínicas e hospitais, 37 significa um substancial aumento na qualidade de vida tanto de pacientes quanto profissionais de saúde. Através da aplicação desenvolvida, foi possível concluir que os celulares ou mesmo outros dispositivos como relógios podem ser de grande valia para a assistência médica pervasiva. De acordo com o atual estilo de vida, as pessoas têm o costume de carregá-los sempre consigo e portanto explorar seu uso para outros fins representa uma oportunidade que não deve ser desperdiçada. 5.1. Trabalhos Futuros Como seguimento deste trabalho, no que diz respeito à aplicação desenvolvida, há muitas possibilidades. O aplicativo pode ser melhorado em muitos aspectos. Do modo em que foi desenvolvido, os alertas são emitidos quando os batimentos por minuto fogem à um determinado padrão (neste caso, entre 60 e 100 bpm). Contudo, as zonas de risco podem ser diferentes de uma pessoa para outra. Dependendo da idade, da disfunção cardíaca específica ou outros fatores diversos como sedentarismo, por exemplo, o que é um risco para alguns pode não ser para outros. Dessa forma o aplicativo poderia ser melhorado fornecendo a opção de definir algumas preferências neste sentido. Mais especificamente, poderia-se determinar a zona alvo do paciente de modo direto ou mesmo calculá-lo automaticamente através de seus fatores de risco. Outra opção que poderia ser agregada seria fornecer ao médico a possibilidade de monitorar remotamente os batimentos do paciente. Ao invés de ficar apenas esperando receber um alerta de risco, ele poderia também verificar informações como a média dos batimentos nos últimos minutos, picos máximo e mínimo ou também tomar conhecimentos dos valores aferidos em tempo real. Além disso, aplicação foi construída para monitorar apenas batimentos cardíacos, mas pode ser incrementada para monitorar também a temperatura corpórea e pressão arterial, por exemplo. 38 Referências Bibliográficas [1] WEISER, Mark; BROWN, John Seely; The Coming Age Of Calm Technology; Xerox PARC, October, 1996. [2] IDC. “Transition to the Information Highway Era” in 1995-96 Information Industry and Technology Update”.p. 2. [3] WEISER, M.; GOLD, R.; BROWN, J. S. The origins of ubiquitous computing research at parc in the late 1980s. IBM Systems Journal, v. 38, n. 4, p. 693{696, 1999. [4] SAHA, D; MUKHERJEE, A. Pervasive Computing: A Paradigm for the 21st Century. IEEE Computer. 2003. [5] PARC “In memory of Dr. Mark Weiser”. Disponível em <http://www2.parc.com/csl/members/weiser/>. Acesso em 18 mai. 2011. [6] WEISER, M. The computer for the twenty-Frst century. Scientific American, p. 94-104, September 1991. 39 [7] CAMPIOLO, R Aspectos de Modelagem de Ambientes de Computação Ubíqua. 2005. Dissertação (Mestrado em Ciência da Computação)–Universidade Federal de Santa Catarina, Florianópolis, 2005. [8] WEISER, M. Some computer science issues in ubiquitous computing. Communications of the ACM, v. 36, n. 7, p. 75{84, July 1993. [9] SATYANARAYANAN, M. Pervasive computing: Vision and challenges. IEEE Personal Communications, v. 8, n. 4, p. 10{17, August 2001. [10] LYYTINEN, K.; YOO, Y. Issues and challenges in ubiquitous computing. Communications of the ACM, v. 45, n. 12, p. 62{65, December 2002. [11] MORAES, C. L. J. ; Prado, A. F. ; Souza, W.L. . Ambiente de Computação Ubíqua para o Cuidado de Saúde Pervasivo (ACUCSP). Anais do Seminário Integrado de Software e Hardware (SEMISH), 2009, Bento Gonçalves - RS. SEMISH - XXXVI Seminário Integrado de Software e Hardware, 2009. [12] SKINNER, Brett ; ROVERE, Mark. Paying More, Getting Less: Measuring the Sustainability of Government Health Spending in Canada. Fraser Institute. 2009. [13] BARDRAM, J.E.; MIHAILIDIS, A.; WAN, D. Pervasive Computing In Healthcare. CRC Press. 2007. ISBN: 978-0-8493-3621-8. [14] STANFORD, Vince. “Using Pervasive Computing to Deliver Elder Care”. IEEE Pervasive Computing, vol. 1, no. 1, pp. 10-13, Jan.-Mar. 2002. [15] PAMPLONA, Vitor Fernando. Tutorial Java: o que é Java? 2009. Disponível em <http://javafree.uol.com.br/artigo/871498/Tutorial-Java-O-que-e-Java.html>. Acesso em: 27 jul. 2011. [16] SCHAEFER, Carine. Protótipo de aplicativo para transmissão de dados a partir de dispositivos móveis aplicado a uma empresa de transportes. 2004. Trabalho de Conclusão de Curso (Graduação em Ciência da Computação)– Universidade Regional de Blumenau, Blumenau, 2004. [17] DEPINÉ, Fábio Marcelo. Protótipo de software para dispositivos móveis utilizando Java ME para cálculo de regularidade em rally. 2002. Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação)–Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau, Blumenau. [18] BARR, Michael. "Toward a Smaller Java," Embedded Systems Programming, June 2002. Disponível em <http://www.netrino.com/Embedded-Systems/HowTo/KVM-J2ME-Java-Virtual-Machine> Acesso em: 28 jul. 2011. [19] SUN Microsystems, Inc. “Java ME Technology Overview”. Disponível em <http://www.oracle.com/technetwork/java/javame/java-me-overview-402920.html> Acesso em: 28 jul. 2011. 40 [20] SUN Microsystems, Inc. “Mobile Information Device Profile (MIDP); JSR 37, JSR 118 Overview” Disponível em <http://www.oracle.com/technetwork/java/ Overview-140208.html> Acesso em: 28 jul. 2011. [21] SUN Microsystems, Inc. “Sun Java Wireless Toolkit for CLDC User’s Guide”. September, 2007. [22] SUN Microsystems, Inc “Sun Java Wireless Toolkit for CLDC Overview”. Disponível em <http://www.oracle.com/technetwork/java/overview-138293.html> Acesso em: 30 jun. 2011. [23] SUN Microsystems, Inc “Release Notes – Sun Java Wireless Toolkit for CLDC Version 2.5.1”. Documentation Home. May 2007. [24] VON EYE, Guenther. “Arritimias”. Disponível em <http://www.abcdasaude.com. br/artigo.php?32> Acesso em: 07 jul. 2011. [25] SUN Microsystems, Inc “Frequently Asked Questions – Sun Java Wireless Toolkit for CLDC Version 2.5.1”. May 2007. [26] SUN Microsystems, Inc “JavaME Documentation (CLDC 1.1)” Disponível em <http://download.oracle.com/javame/config/cldc/ref-impl/cldc1.1/jsr139/java/util/ Random.html > Acesso em: 07 jul. 2011. Anexo I – Código fonte bpmMIDlet.java package datagram; import java.io.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class bpmMIDlet extends MIDlet implements CommandListener { private static final String MEDICO = "Medico"; private static final String PACIENTE = "Paciente"; private static final String[] names = { MEDICO, PACIENTE }; private static Display display; private Form f; ChoiceGroup cg; private boolean isPaused; private Command exitCommand = new Command("Sair", Command.EXIT, 1); 41 private Command startCommand = new Command("Iniciar", Command.ITEM, 1); public bpmMIDlet() { display = Display.getDisplay(this); f = new Form("BPM"); cg = new ChoiceGroup("Escolha um modo", Choice.EXCLUSIVE, names, null); f.append(cg); f.addCommand(exitCommand); f.addCommand(startCommand); f.setCommandListener(this); display.setCurrent(f); } public static Display getDisplay() { return display; } public boolean isPaused() { return isPaused; } public void startApp() { isPaused = false; } public void pauseApp() { isPaused = true; } public void destroyApp(boolean unconditional) { } public void commandAction(Command c, Displayable s) { if (c == exitCommand) { destroyApp(true); notifyDestroyed(); } else if (c == startCommand) { String name = cg.getString(cg.getSelectedIndex()); if (name.equals(MEDICO)) { Medico medico = new Medico(this); medico.start(); } else { Paciente paciente = new Paciente(this); paciente.start(); } } } } Medico.java package datagram; 42 import java.io.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class Medico implements Runnable, CommandListener { private bpmMIDlet parent; private Display display; private Form f; private StringItem si; private TextField tf; private Command sendCommand = new Command("Enviar", Command.ITEM, 1); private Command exitCommand = new Command("Sair", Command.EXIT, 1); Sender sender; private String address; public Medico(bpmMIDlet m) { parent = m; display = Display.getDisplay(parent); f = new Form("Medico"); si = new StringItem("Status:", " "); tf = new TextField("Enviar:", "", 30, TextField.ANY); f.append(si); f.append(tf); f.addCommand(sendCommand); f.addCommand(exitCommand); f.setCommandListener(this); display.setCurrent(f); } public void start() { Thread t = new Thread(this); t.start(); } public void run() { try { si.setText("Plantão"); DatagramConnection dc = (DatagramConnection)Connector.open("datagram://:5555"); sender = new Sender(dc); while (true) { Datagram dg = dc.newDatagram(100); dc.receive(dg); address = dg.getAddress(); si.setText("Mensagem recebida - " + new String(dg.getData(), 0, dg.getLength())); } } catch (IOException ioe) { Alert a = new Alert("Server", "Porta 5000 em uso.", null, AlertType.ERROR); a.setTimeout(Alert.FOREVER); a.setCommandListener(this); 43 display.setCurrent(a); } catch (Exception e) { e.printStackTrace(); } } public void commandAction(Command c, Displayable s) { if ((c == sendCommand) && !parent.isPaused()) { if (address == null) { si.setText("Sem destinatario"); } else { sender.send(address, tf.getString()); } } if ((c == Alert.DISMISS_COMMAND) || (c == exitCommand)) { parent.destroyApp(true); parent.notifyDestroyed(); } } public void stop() { } } Paciente.java package datagram; import java.io.*; import java.util.Random; import java.util.Timer; import java.util.TimerTask; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class Paciente implements Runnable, CommandListener { private bpmMIDlet parent; private Display display; private Form f; private StringItem si; private TextField tf; private Random rand; private Timer timer; private Command sendCommand = new Command("Enviar", Command.ITEM, 1); private Command exitCommand = new Command("Sair", Command.EXIT, 1); private Command monitCommand = new Command("Monitorar", Command.ITEM, 1); private int limInf, limSup, ultimoBPM, znAlerta; Sender sender; public Paciente(bpmMIDlet m) { parent = m; display = Display.getDisplay(parent); 44 f = new Form("Paciente"); si = new StringItem("Status:", " "); tf = new TextField("Enviar:", "", 30, TextField.ANY); f.append(si); f.append(tf); f.addCommand(sendCommand); f.addCommand(exitCommand); f.addCommand(monitCommand); f.setCommandListener(this); display.setCurrent(f); rand = new Random(); timer = new Timer(); limInf = 60; limSup = 100; ultimoBPM = 0; znAlerta = 0; } public void start() { Thread t = new Thread(this); t.start(); } public void run() { try { DatagramConnection dc = (DatagramConnection)Connector.open("datagram://localhost:5555"); si.setText("Conectado ao medico"); sender = new Sender(dc); while (true) { Datagram dg = dc.newDatagram(100); dc.receive(dg); if (dg.getLength() > 0) { si.setText("Mensagem recebida - " + new String(dg.getData(), 0, dg.getLength())); } } } catch (ConnectionNotFoundException cnfe) { Alert a = new Alert("Paciente", "Primeiro inicie o celular do medico", null, AlertType.ERROR); a.setTimeout(Alert.FOREVER); display.setCurrent(a); } catch (IOException ioe) { ioe.printStackTrace(); } } public void commandAction(Command c, Displayable s) { if ((c == sendCommand) && !parent.isPaused()) { sender.send(null, tf.getString()); } if (c == exitCommand) { parent.destroyApp(true); parent.notifyDestroyed(); 45 } if (c == monitCommand) { timer.schedule(new RemindTask(), 1000, 1000); f.removeCommand(monitCommand); } } public void stop() { } public class RemindTask extends TimerTask { public void run() { boolean valido = false; while (!valido) { ultimoBPM = (rand.nextInt() % limSup); if ((ultimoBPM >= limInf) && (ultimoBPM >= 0) && (ultimoBPM <= 200)) { valido = true; if (ultimoBPM < 60) { limSup = ultimoBPM + 11; limInf = ultimoBPM - 5; if (limInf < 0) {limInf = 0;} }else{ if (ultimoBPM > 100) { limSup = ultimoBPM + 6; limInf = ultimoBPM - 10; if (limSup > 200) {limSup = 201;} }else{ limSup = ultimoBPM + 11; limInf = ultimoBPM - 10; } } } } si.setText("BPM: " + Integer.toString(ultimoBPM)); if ((ultimoBPM < 60) || (ultimoBPM > 100)) {znAlerta++;} else {znAlerta = 0;} if (znAlerta == 3) { tf.setString("Alerta cardiaco!"); sender.send(null, tf.getString()); } } public void stop() { } } } Sender.java package datagram; import java.io.*; import javax.microedition.io.*; 46 import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class Sender extends Thread { private DatagramConnection dc; private String address; private String message; public Sender(DatagramConnection dc) { this.dc = dc; start(); } public synchronized void send(String addr, String msg) { address = addr; message = msg; notify(); } public synchronized void run() { while (true) { // If no client to deal, wait until one connects if (message == null) { try { wait(); } catch (InterruptedException e) { } } try { byte[] bytes = message.getBytes(); Datagram dg = null; // Are we a sender thread for the client ? If so then there's // no address parameter if (address == null) { dg = dc.newDatagram(bytes, bytes.length); } else { dg = dc.newDatagram(bytes, bytes.length, address); } dc.send(dg); } catch (Exception ioe) { ioe.printStackTrace(); } // Completed client handling, return handler to pool and // mark for wait message = null; } } }