sexta-feira, 4 de março de 2011

Aula 05 - Contexto e Sensibilidade ao Contexto

Foram discutidos nesta aula assuntos relacionados ao contexto: histórico, definições e sistemas sensíveis ao contexto.

Inicialmente foi apresentado o contexto em Lógica. A lógica na sua tentativa de formalizar o pensamento humano faz uso de expressões cujos valores verdade dependem do contexto implícito. Por exemplo, ao avaliar a expressão "Brasília é a capital do Brasil" constatamos que ela é verdadeira. Todavia se essa expressão fosse avaliada em 1900, a resposta seria diferente, pois estaríamos em outra época. Percebemos que o tempo, que está implícito, é o contexto que influência a avaliação da expressão.

Em seguida vimos que o contexto em linguagens de programação está relacionado, no caso do paradigma imperativo, com o contexto estático (constantes, definições) e com o contexto dinâmico (comportamento durante a execução de um programa). Discutimos ainda a necessidade de um paradigma para aplicações ubíquas.

Um sistema tradicional é composto por: entrada, processamento e saída. Um sistema sensível ao contexto agrega um novo elemento: o contexto. Que influência o seu comportamento de acordo com a percepção do ambiente.

Foram apresentadas diversas definições de contexto, baseadas essencialmente no artigo Towards a Better Understanding of Context and Context-Awareness (Anind K. Dey and Gregory D. Abowd, 1999), que será o segundo artigo a ser resumido e discutido na disciplina.

De um modo geral essas definições afirmam que o contexto é um conjunto de informações relacionadas a localização, tempo, estado de entidades, entre outras. No entanto as definições têm diferenças. Por exemplo, na definição de Dey e Abowd (1999) essas entidades devem ser relevantes para a interação entre um usuário e uma aplicação. Já na definição de Viana (2010), o contexto pode ser utilizado em um momento posterior  para melhorar interação com o usuário ou adaptar a aplicação ou o conteúdo acessado. Viana apresenta ainda os conceitos de zona de observação (o que pode ser observado pelo sistema) e o de zona de interesse (o que o sistema deseja observar). O ontexto, num dado instante, é a interseção dessas zonas (Veja a figura abaixo adaptada de Viana (2010)). 



O contexto possui uma natureza evolutiva, isto é, elementos (entidades e relações) podem ser incluídos ou removidos. Possui ainda uma natureza dinâmica, o estado das entidades (e suas relações) que o compõe variam com o tempo. Viana (2010) representa a natureza evolutiva em função dos conceitos de zona de interesse e zona de observação. Essa relação pode ser entendida da seguinte maneira: com o passar do tempo tanto o que é de interesse do sistema quanto o que ele pode observar variam. Dessa forma, a interseção entre as duas zonas (o contexto) pode se modificar (aumentar ou diminuir) com o passar do tempo.

Sistemas sensíveis ao contexto foi um dos últimos temas discutidos. Eles são capazes de utilizar o contexto para mudar seu comportamento e prover serviços adequados aos seus usuários. Antes de concluir as discussões sobre contexto o Professor Lincoln apresentou sua definição para Sistema Ubíquo:

“Um sistema ubíquo pode ser entendido como um sistema distribuído, móvel ou não, onde seus componentes se agrupam de maneira dinâmica, espontânea, transparente e colaborativa para o compartilhamento de recursos, serviços e informações com o intuito de executar um conjunto de atividades particular em um determinado contexto.”

E logo após para Sistema Ubíquo Sensível ao Contexto:

“Assim, um sistema ubíquo sensível ao contexto é um sistema que utiliza o contexto (ou histórico de contexto) para garantir a realização da sua função, podendo para isso, alterar a sua interface de serviço ou modificar sua estrutura para gerar um novo comportamento.”

As notas de aula referentes a esta aula, ministrada em 01/03/2011, podem ser baixadas aqui.

Aula 04 - Computação Ubíqua: Requisitos Desafiadores

Como citou o Paulo Ramon no post da aula 3 da nossa disciplina, há muito a ser vencido para que essa coisa toda de ubiquidade seja posta em prática. Na nossa quarta aula vimos que são mais do que desafiadores os requisitos para tornar real esse novo paradigma. Principalmente os requisitos não funcionais que se tornam cada vez mais difíceis de serem modelados.

Foram listados alguns requisitos que são desafiadores como a Mobilidade, que é fundamental na computação ubíqua. Dispositivos podem se mover, assim como pessoas e até mesmo o código dos programas. Então, como prever para quais dispositivos nosso código vai se mover? A capabilidade de cada um?

Um novo conceito foi nos apresentado, Contexto. Agora as nossas aplicações devem ser capazes de identificar situações do ambiente que podem influenciar diretamente no comportamento dela. A definição de contexto será melhor apresentada no post da próxima aula que será feito pelo Adriano Dodo.

Temos agora que nos preocupar com a heterogeneidade de dispositivos. Quantidade e diversidade destes dispositivos e aplicações que estarão disponíveis assim como fazer esses diversos dispositivos e aplicações se comunicarem e cooperarem para atingir seus objetivos.

A computação ubíqua também prever que os dispositivos poderão tomar decisões de forma autônoma, percebendo o ambiente, identificando atores e mudanças no contexto. Com isso temos que nos preocupar agora também com a privacidade. Cuidados devem ser tomados para que os usuários não se sintam invadidos.

É necessário que os dispositivos estejam sempre disponíveis e sejam invisíveis, as pessoas não precisam ver o perceber que os dispositivos ubíquos ou aplicações estejam espalhados pelo ambiente. As aplicações também devem adaptar seu conteúdo para diferentes dispositivos, redes e usuários. Elas devem se reconfigurar de acordo com o ambiente e o dispositivo que elas se encontram, e serem tolerantes a falhas e   exceções que podem ocorrer no ambiente.

Agora mais que nunca a portabilidade, que se caracteriza pela independência de hardware, sistema operacional ou linguagem de programação, se torna necessária. O reuso de soluções já criadas se torna fundamental na computação ubíqua.

Para tentar resolver todos esses problemas existem algumas soluções como: Sistemas de Middleware, Componentes de Software, Meta Modelos para ambientes heterogêneos, Coordenação do Contexto entre outras.

Discutimos as principais limitações para o desenvolvimento de software ubíquo e vimos que essas soluções listadas anteriormente são específicas para problemas isolados, não existindo uma preocupação com todas as etapas do desenvolvimento. A reutilização é negligenciada ou tratada de maneira não sistemática. O foco é colocado na implementação em detrimento da modelagem e as linguagens de programação atuais não são adequados para o desenvolvimento de software ubíquo.

Vimos que alguns processos de desenvolvimento da engenharia de software, como Linha de Produto de Software, Desenvolvimento Generativo de Software e Desenvolvimento Baseado em Componentes são limitados uma vez que não foram concebidos para lidar com esse tipo de software. O problema parece está na concepção do modelo computacional.

Por fim, vimos que novos direcionamentos como a Ubiquitous Abstract Machine, proposta por Robin Milner, que é uma alternativa a visão da máquina de von Neuman, podem nos ajudar no desenvolvimento de sistemas ubíquos.

As notas de aula referentes a esta aula, ministrada em 28/02/2011, podem ser baixadas aqui.

segunda-feira, 21 de fevereiro de 2011

Aula 03 - Princípios Fundamentais da Computação Ubíqua

Para quem nunca antes tinha ouvido muito de computação ubíqua nossas duas primeiras aulas foram, digamos, de deixar qualquer um de queixo caído. Seja por viajar muito nas ideias dessa coisa toda chamada ubiquidade apresentada nessas aulas ou mesmo por desacreditar que países como Brasil, Rússia China e Índia (BRICs), nunca consigam chegar, de fato, a usufruir de tal paradigma (seria isso apenas um paradigma?)


Mais especificamente na terceira aula, eu pensei que seria mais viagem por parte do professor, mas me enganei totalmente, foi nessa aula que colocamos os pés no chão e nos demos conta do quanto há a ser vencido e do quanto há a ser trabalhado para se colocar em prática tudo aquilo visto nas aulas 1 e 2.

Mais especificamente esta 3ª aula falou dos Princípios Fundamentais da Computação Ubíqua, dos quais posso citar: Descentralização; Diversificação; Conectividade e Simplicidade. Lembrando que todos foram apresentados formalmente e logo em seguida foram feitos questionamentos a respeito de cada um.Aprofundado-se um pouco mais em cada um desses princípios temos que na computação ubíqua cada dispositivo fica encarregado de executar uma tarefa específica, dado isso podemos dizer que os computadores deixam de centralizar as tarefas, ou seja, deixa "de mão" toda a responsabilidade computacional para torná-la distribuída entre os vários dispositivos existentes na computação Ubíqua. Esse é o princípio da Descentralização.

Dado o princípio da Descentralização temos que vários dispositivos, cada um com sua função específica, irão interagir em um ambiente comum. Ficando a cargo dos sistemas computacionais definir qual o mais adequado para executar determinado serviço. Isto nos dá um aspecto geral do segundo princípio, que trata da Diversificação dos vários dispositivos que interagem entre si na computação ubíqua. É claro que fica a cargo dos próprios sistemas identificar qual destes é mais apropriado para executar determinada tarefa de acordo com seu formato, capacidade, tamanho, etc.


Vimos que um princípio leva a outro e não seria diferente com o princípio da Conectividade. Pois aqui (na computação ubíqua) a ideia de um mundo sem fronteiras é possível. Tudo isso sobre uma grande rede Heterogênea e com padrões suficientemente robustos para englobar os mais diversos tipos de dispositivos apresentados no princípio anterior.

Por fim, mas não menos importante temos o princípio da Simplicidade. Ele prega que tudo isso deve ser executado da forma mais simples possível. É aqui que entra a ideia dos dispositivos invisíveis visto na segunda aula e aquela famosa frase, em uma tradução livre, de Mark Weiser "(...) as tecnologias mais profundas e duradouras são aquelas que desaparecem". Acho que esse desaparecer é tornar o processo tão simples a ponto de deixá-lo habitual, como o ato de escovar os dentes ou almoçar usando talheres (para as culturas ocidentais).

Paralelamente falamos de "Ecossistema de Software", segundo a Wikipédia Ecossistema nada mais é que "(...) o conjunto formado por todas as comunidades que vivem e interagem em determinada região e pelos fatores abióticos que atuam sobre essas comunidades." Mas como não estamos falando de biologia e sim de Computação Ecossistema de Software ao meu ver é o conjunto formado por todas as soluções, tecnologias, hardware, etc que interagem em torno de um determinado Software desenvolvido com um fim específico, formando assim um ecossistema em torno daquele Software. O Adroid, bem como os últimos produtos desenvolvidos pela Apple são um bom exemplo disso.

Nessa aula também tivemos a participação de termos como "Possíveis Estratégias" e " Desenvolvimento de Padrões" dentro do ambiente de computação ubíqua.

Concluo esse pequeno resumo de aula concordando em parte com o professor Licoln quando este fala que tecnologia suficiente para se criar um ambiente ubíquo nós temos, mas acho que dado as barreiras tecnológicas das quais nosso povo (brasileiro) é obrigado a suportar e nossa cultura do conformismo, ainda temos que vencer muito obstáculos (sem contar os questionamento feito em sala de aula) para trazermos para a minha ou para a sua casa ou mesmo para nossa cidade ou estado aquilo apresentado até o momento (vejam que não estou falando de um grupo específico e sim da aplicação das ideias aqui apresentadas no dia a dia de cada um).

As notas de aula referentes a esta aula, ministrada em 21/02/2011, podem ser baixadas aqui.


Todos as Imagens utilizadas nesta postagem são oriundas da própria Internet, todos os direitos reservados a seus respectivos autores. Imagens usadas com a finalidade de resenha.

Aula 2 - Introdução a Computação Ubíqua

A história da computação pode ser dividida em três grandes fases que são caracterizadas pela forma como os usuários interagiam com os computadores. Na primeira fase , temos a era dos mainframes, que eram grandes computadores que serviam a vários usuários de uma organização. Na segunda fase, temos a era dos micro computadores, que se caracterizou pela utilização de um computador por usuário e possibilitou a disseminação de aplicativos comerciais e de escritórios. A terceira fase, pode-se dizer que é a fase que estamos agora, em que há uma variedade enorme de dispositivos eletrônicos com poder computacional, que fornecem conjuntamente serviços para o usuário.

Não obstante, termo computação ubíqua não é tão recente assim, ele foi cunhado por Mark Weiser, um cientista do laboratório de pesquisa da Xerox, que na época também definiu os termos Calm Technology e Disappear Computing, e criou uma escala de dispositivos para classificar produtos eletrônicos.

A computação ubíqua possui várias características fundamentais, como a proatividade das aplicações e a execução de tarefas de foma imperceptível para o usuário. Mas esta também apresenta características da computação móvel e da pervasiva, estando na interseção dessas grandes áreas, pois apresenta um grande grau de mobilidade e embarcamento.

A computação ubíqua, embora seja mais conhecida no meio acadêmico, já apareceu bastante em filmes, como minority report, que mostravam cenários futuristas, que hoje já não são tão futuristas assim, pois algumas dessas tecnologias apresentadas como futuristas nos filmes já se encontram disponíveis para usuários domésticos.

Os fatores que têm contribuído para a disseminação da computação ubíqua estão relacionados com sua aplicação em diferentes domínios, todos com o intuito de auxiliar as pessoas na execução de tarefas rotineiras, como por exemplo, ir ao médico, viajar, fazer negócios, dentre outros.

Contudo, a computação ubíqua enfrenta vários desafios, pois conta com uma gama de dispositivos heterogêneos que precisam se comunicar uns com os outros através de diferentes redes. O que se torna ainda mais difícil quando soma-se a complexidade das aplicações terem que acompanhar o usuário, proverem serviços personalizados, responderem a estímulos do ambiente e fazerem isso tudo de forma autônoma.

Os desafios nos levam a algumas questões fundamentais sobre a forma pela qual as aplicações devem ser desenvolvidas. O que nos leva a pensar em como navegar entre diferentes redes de forma imperceptível, como descobrir serviços e como projetar uma aplicação para ser executada em diferentes dispositivos.

As notas de aula referentes a esta aula, ministrada  em 15/02/2011, podem ser baixadas aqui.

Aula 1 - Introdução ao Curso

A computação ubíqua tem como finalidade tornar o uso dos computadores mais amigáveis e agradáveis. Para tanto, a computação tem se tornado onipresente auxiliando as pessoas na execução de suas tarefas de uma maneira quase imperceptível. No entanto, para atingir estes objetivos, tem-se a criação de novos cenários, em que emergem novos paradigmas e desafios no desenvolvimento de software. Diante disso, o estudo de técnicas de desenvolvimento de software para computação ubíqua, observando as boas práticas de engenharia de software, tem se tornado extremamente importante.

Neste contexto, a disciplina de Tópicos IV tem como objetivos apresentar aos alunos os principais conceitos envolvidos no processo de desenvolvimento de aplicações para computação ubíqua e mostrar as principais tecnologias envolvidas nesse processo.

A disciplina é ministrada professor Lincoln Souza Rocha (email: lincolnrocha [at] ufc [dot] br - twitter: @lincolnsrocha) e possui encontros presenciais às segundas e terças-feiras em sala de aula.

Vejam alguns vídeos ilustrativos/motivadores sobre Computação Ubíqua apresentados na primeira aula da disciplina em ordem cronológica mostrando as visões futuristas ao longo do tempo:

HP CoolTown Video

Microsoft Future Vision: Healthcare

Microsoft Sustainability: Productivity, Future Vision

A Day made of Glass

As notas de aula referentes a esta aula, ministrada em 14/02/2011, podem ser baixadas aqui.