Archive for admin

Material do curso de Métodos e Técnicas de Pesquisa

Estou agora disponibilizando nesta página o material gerado e apresentado pelos alunos do mestrado em Ciência da Computação para a disciplina Métodos e Técnicas de Pesquisa, ministrada pelo prof. Dr. Henrique Nou Schneider.

Seguem abaixo as apresentações trabalhadas como aulas expositivas (ou baixe todas as apresentações de uma só vez clicando aqui):


Tema da aulaFormato PPT/PPTXFormato PDF
10 – Pesquisa Quantitativa e QualitativaDownloadDownload
11 – Modalidades de PesquisaDownloadDownload
12 – Tipos de Pesquisa CientíficaDownload
13 – Técnicas de Pesquisa – Documentação e EntrevistaDownload
14 – Técnicas de Pesquisa – História de Vida, Observação e QuestionárioDownload
15 – Aspectos Técnicos da Redação – parte 1DownloadDownload
16 – Aspectos Técnicos da Redação – parte 2 Download

E abaixo, os position papers escritos pelos alunos sobre o livro Filosofia da Ciência e da Tecnologia, de Regis de Morais (ou baixe todas os position papers de uma só vez clicando aqui):


Nome do aluno
Christiano Santos
Janisson Souza
Saulo Galilleo
Fernanda Passos
Felipe Vieira
Luiz Marcus Santos
Rafael Jacaúna
Rafael Jacaúna
Jovan Júnior
Edvan Sousa
Marcos Pereira
Fernando Teles
Leonardo Bezerra
Gabriel Araújo
Roberto Pizzi

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Material do curso de Programação Declarativa


Hoje apresento-lhes o material de suporte que utilizei na disciplina de Programação Declarativa. Ministrei-a no último semestre de aulas na Universidade Federal de Sergipe, mais especificamente em 2011/2.

Nessa disciplina, abordamos tanto o paradigma da programação funcional, quanto o paradigma da programação lógica, e devo dizer que foi um verdadeiro desafio para mim, não somente porque já não estudava Haskell (programação funcional) há mais de cinco anos, como também porque tudo o que eu sabia de Prolog resumia-se a uma ou duas aulas que tive durante a disciplina de Inteligência Artificial, ou seja, um desafio e tanto para elaborar todo o conteúdo enquanto aprendendo, e tudo isso durante um período letivo que já havia começado atrasado!

Durante a mesma, elaborei todo o material em apresentações para Microsoft Powerpoint (formato PPT), bem como escrevi os códigos-fonte dos exemplos em arquivos separados.

Bem, no fim das contas, acredito que o curso foi muito bem aplicado e muitos aprenderam este paradigma tão diferente da programação imperativa, nossa “velha amiga”.

E aqui está a apresentação composta por todos os slides usados em aula (um total de 305 slides :) ) em formato PPT mais os arquivos com códigos-fonte:

Material do curso de Programação Declarativa

Abaixo encontra-se a estrutura das aulas (em outra oportunidade espero publicar aqui artigos com o conteúdo textual de cada uma dessas aulas, mas acho que vai demorar bastante até que eu tenha tempo para fazer isso!):

  • Aula 01 – Paradigmas da programação
    • Programação imperativa
      • Programação estruturada
      • Programação orientada a objetos
      • Programação concorrente
    • Programação declarativa
      • Programação funcional
      • Programação lógica
      • Programação restritiva
    • Linguagens de programação multiparadigma
  • Aula 02 – Introdução à programação funcional
    • O que é uma função?
    • Exemplos de funções
    • Tipos de dados
    • A linguagem Haskell
    • Hugs 98
    • WinHugs
    • Exemplo de programa
    • Exercícios
  • Aula 03 – Tipos básicos e definições
    • Booleanos / lógicos
    • Inteiros
    • Caracteres
    • Fracionários
    • Indentação do código
    • Sobrecarga
    • Identificadores
    • Palavras reservadas
    • Exercícios
  • Aula 04 – Projetando e escrevendo programas
    • Eu sei exatamente o que preciso fazer?
    • Quais tipos de dados são necessários?
    • Que informações já possuo?
    • Posso dividir o problema em partes menores?
    • Posso usar recursão para resolver meu problema?
    • Exercícios
  • Aula 05 – Tuplas, listas e strings
    • Tuplas
    • Listas
    • Strings
    • Declaração de tipos
    • Funções genéricas
    • Exercícios
  • Aula 06 – Definições locais
    • Definições locais
    • Cláusula where
    • Expressão let
    • Escopo
  • Aula 07 – Funções sobre listas
    • Definições por casamento de padrões
    • A construção case
    • Recursão primitiva sobre listas
    • Exercícios
  • Aula 08 – Padrões de computação e funções de alta ordem
    • Padrões de computação sobre listas
    • Mapeamento (mapping)
      • A função map
    • Filtragem (filtering)
      • A função filter
    • Redução (folding)
      • A função foldr1
      • A função foldr
    • Funções de alta ordem
  • Aula 09 – Funções como valores
    • Definição a nível de função
    • Composição de funções
    • Cuidados com as composições
    • Expressões definindo funções
    • Notação Lambda
    • Aplicação parcial
    • Seção de operador
    • Currying e Uncurrying
    • Exercícios
  • Aula 10 – Polimorfismo e classes de tipos
    • Polimorfismo paramétrico e sobrecarga
    • Função de ordenação – caso 1
    • Classe de tipos
    • Função de ordenação – caso 2
    • Definição de uma classe e de uma instância
    • Exercícios
  • Aula 11 – Tipos algébricos
    • Por que tipos algébricos?
    • Introduzindo tipos algébricos
    • Tipos enumerados
    • Tipos produtos
    • Tipos alternativos
    • Definição geral de um tipo algébrico
    • Derivando instâncias de classes
    • Tipos algébricos recursivos
    • Construtores infix
    • Tipos algébricos polimórficos
  • Aula 12 – Tipos abstratos de dados
    • Por que tipos abstratos de dados?
    • Exemplo de um TAD
    • Introduzindo newtype
    • Instanciando classes
    • Exercícios
  • Aula 13 – Avaliação preguiçosa
    • Definição
    • Exemplos
    • Pontos-chave da avaliação preguiçosa
    • Cálculo para casamento de padrões
    • Cálculo para guardas
    • Cálculo para definições locais
  • Aula 14 – Introdução à programação lógica
    • O que é programação lógica?
    • Exemplos de inferência
    • Bases da programação lógica
    • Aplicações
    • Vantagens e desvantagens
    • A linguagem Prolog
    • Instruções em Prolog
    • Exemplo de programa e consulta
    • Variáveis em Prolog
    • Formas de declaração de fatos
    • Observações sobre declaração de fatos
    • Formas de consultas
    • Operadores
    • Conjunção
    • Disjunção
    • SWI-Prolog
    • Comandos trace e notrace
    • Exercícios
  • Aula 15 – Recursividade
    • Introdução
    • Operador cut ( ! )
    • Comando fail
    • Operador not
    • Exercícios
  • Aula 16 – Listas
    • Introdução
    • Manipulando listas
    • Predicado member
    • Predicado append
    • Predicado length
    • Exercícios
  • Aula 17 – Aritmética
    • Série de exercícios envolvendo cálculos aritméticos

Apesar de serem enumeradas aqui como sendo 17 aulas, algumas delas requereram mais de um dia de aula e cada dia de aula na verdade são duas horas-aula, totalizando assim as 60 horas-aula da disciplina de Programação Declarativa.

Se você gostou deste artigo, que tal...

Material do Curso de Programação 1

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Usabilidade

Pela definição da International Organization for Standardization (ISO), usabilidade é a extensão na qual um produto pode ser usado por usuários específicos para alcançar objetivos específicos com efetividade, eficiência e satisfação em um contexto de uso específico.

Segundo Dr. Henrique Nou Schneider, a usabilidade está relacionada aos estudos de ergonomia e da IHC, sendo diretamente ligada ao contato do usuário com a interface. Desta forma, é a capacidade do software permitir que o usuário alcance suas metas de interação com o sistema, oferecendo a ele facilidade de aprendizagem em um nível de utilização eficiente e apresentando poucos erros, limitando a necessidade de memorização da informação pelo usuário, elevando assim seu grau de satisfação.
Para Schneider entre os atributos da usabilidade têm-se:

  • Facilidade de Aprendizado: o sistema deve ser fácil de aprender de tal forma que o usuário consiga rapidamente explorá-lo e realizar suas tarefas com ele;
  • Eficiência de uso: o sistema deve ser eficiente a tal ponto de permitir que o usuário, tendo aprendido a interagir com ele, atinja níveis altos de produtividade na realização de suas tarefas;
  • Facilidade de memorização: após certo período sem utilizá-lo, o usuário não freqüente é capaz de retornar ao sistema e realizar a sua tarefa sem a necessidade de reaprender como interagir com ele;
  • Baixa taxa de erros: em um sistema com baixa taxa de erros, o usuário é capaz de realizar tarefas sem maiores transtornos, devendo o sistema recuperar-se de erros automaticamente, caso ocorram;
  • Satisfação subjetiva: o usuário deve considerar agradável a interação com o sistema e sentir-se subjetivamente satisfeito com ele.

A figura abaixo apresenta como se dá a aceitabilidade de um sistema pelo usuário, dividindo-se os valores necessários para atingir esse nível em aceitabilidade social e aceitabilidade prática. Pode-se verificar assim a importância da usabilidade e de seus cinco atributos na aceitabilidade prática de um sistema.


Estrutura hierárquica da aceitabilidade de um sistema

Ergonomia e Usabilidade em Jogos Casuais

A fim de melhor compreendermos a importância da Ergonomia e da Usabilidade em ICH, podemos estudar a aplicação das mesmas em um ramo que estudo bastante, o desenvolvimento de jogos casuais.

Segundo pesquisadores como Braga et al (2006), com os primeiros jogos, surgiram formas de controle com poucas opções de entrada de dados e interfaces gráficas bem simples, o que garantia o aprendizado dos mesmos por meio do método “tentativa-e-erro” de forma bem intuitiva e simples.

Entretanto, de acordo com a evolução histórica dos jogos eletrônicos, percebe-se que a entrada de comandos (joystick, teclado, mouse, etc.) diversificou-se tanto quanto a sua estrutura quanto a sua forma de uso, a fim de atender às necessidades dos diferentes gêneros dos jogos.

Além disso, as interfaces gráficas dos jogos tornaram-se mais sofisticadas e complexas, como forma de melhor prover novas opções e informações ao usuário.

Percebe-se assim que os jogos vêm se tornando cada vez menos ergonômicos e usáveis (BRAGA et al, 2006).

Desta forma, somente um grupo de pessoas, conhecidas como jogadores hardcore, podem tirar o máximo da interação com os jogos uma vez que estão acostumados aos mais diversos tipos de jogos, uma vez que estes ocupam uma boa parte de sua vida.

Entretanto, há alguns tipos de jogos que, ao serem projetados, visam atingir não somente os indivíduos supra citados, mas também os jogadores casuais: pessoas que gostam de jogar por prazer, mas que não o possuem como atividade de lazer primária.

Neste período de intensa disseminação tecnológica, os jogos para esse tipo de jogadores podem ser divididos em quatro grupos de acordo com o meio em que se desenvolve ou finalidade do mesmo: mobile games, jogos para TV digital, webgames e advergames.

Com a massificação do uso do celular, este se tornou uma forma de oferecer ao seu usuário entretenimento em qualquer lugar a qualquer hora em que ele assim deseje. Os mobile games são, portanto, uma forma de atender à demanda crescente por diversão.

Já o desenvolvimento da TV digital vem incentivando pesquisas para compreender-se todas as potencialidades com o advento da mesma. Uma das novas possibilidades é oferecer novos elementos lúdicos com maior interação entre o usuário e o programa do que aquela oferecida por simples filmes ou novelas.

Os webgames nasceram da disseminação da Internet e da exigência dos internautas por novo conteúdo, uso de mídias muito mais interativas e lúdicas por meio da grande Web.

Com a popularização dos jogos eletrônicos, surge uma nova forma de merchandising: o uso de jogos como forma de divulgação de uma marca e/ou produto. Os advergames buscam, através do entretenimento, apresentar ao usuário algum tipo de publicidade.

Observa-se então que, devido a natureza destes jogos, que um jogo casual precisa ser o mais ergonômico e usável possível, seja devido a limitações existentes na entrada de dados e na interface gráfica (caso dos celulares e da TV digital), seja de forma a atrair a atenção do jogador a fim de divulgar a sua propaganda (advergames) e oferecer o máximo de simplicidade em sua jogabilidade. Motivo este que leva os jogos casuais a buscarem utilizar-se de uma entrada de dados muito mais simplificada, interfaces gráficas com ótima visibilidade e uma estrutura interna do jogo que seja facilmente compreendida pelo usuário.

Outro fator importante é a curva de aprendizado de um jogo: quanto melhor ela for, mais usável ele será ao longo do tempo em que for jogado, sendo assim esta uma outra grande preocupação no desenvolvimento dos jogos casuais (BRAGA et al, 2006).

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Ergonomia – Parte 2

De acordo com a IEA, os domínios de especialização da ergonomia são:

  • Ergonomia física: está relacionada às características da anatomia humana, antropometria, fisiologia e biomecânica em sua relação à atividade física. Os tópicos relevantes incluem o estudo da postura no trabalho, manuseio de materiais, movimentos repetitivos, distúrbios músculos-esqueléticos relacionados ao trabalho, projeto de posto de trabalho, segurança e saúde;
  • Ergonomia cognitiva: refere-se aos processos mentais, tais como percepção, memória, raciocínio e resposta motora conforme afetem as interações entre seres humanos e outros elementos de um sistema. Os tópicos relevantes incluem o estudo da carga mental de trabalho, tomada de decisão, desempenho especializado, interação homem computador, stress e treinamento conforme esses se relacionem a projetos envolvendo seres humanos e sistemas;
  • Ergonomia organizacional: concerne à otimização dos sistemas sócio-técnicos, incluindo suas estruturas organizacionais, políticas e de processos. Os tópicos relevantes incluem comunicações, gerenciamento de recursos de tripulações (CRM – domínio aeronáutico), projeto de trabalho, organização temporal do trabalho, trabalho em grupo, projeto participativo, novos paradigmas do trabalho, trabalho cooperativo, cultura organizacional, organizações em rede, tele-trabalho e gestão da qualidade.

Porém, projetar objetos que melhor se adeqüem ao formato do corpo humano e a corrigir a postura dos usuários são uma das aplicações mais comuns da Ergonomia. Exemplos comuns incluem cadeiras projetadas para evitar que os usuários sentem em posições que tenham um efeito nocivo na coluna vertebral e a escrivaninha ergonômica que oferece uma gaveta ajustável para o teclado, uma tampa principal com altura ajustável e outros elementos que podem ser modificados pelo usuário.

Ergonomia é assim muito mais ampla do que olhar o lado psicológico e anatômico do ser humano, apesar da psicologia dos seres humanos ser, também, um elemento chave nesta ciência.

Esta porção psicológica da ergonomia é usualmente referida como Fatores Humanos ou Engenharia de Fatores Humanos nos Estados Unidos da América, enquanto Ergonomia cognitiva é o termo usado na Europa. O entendimento do projeto em termos de carga de trabalho mental, erro humano, a maneira como seres humanos percebem o ambiente que os cerca e, muito importante, as tarefas que eles executam, são todos analisados pelos ergonomistas.

Segundo Schneider (s.d.), a ergonomia cognitiva, de interfaces e de concepção possui grande importância no desenvolvimento de softwares para melhor se adequarem às necessidades do usuário. Uma vez que se levam em consideração diversos aspectos sobre a capacidade de adaptação do software e o modelo mental construído pelo usuário, faz-se necessário o emprego de uma equipe transdisciplinar.

Schneider (s.d.) assevera que no estudo da capacidade ergonômica de um software, deve-se observar quatro princípios básicos:

  • Visibilidade: Indica que as ações pretendidas correspondem às realizadas. Ou seja, refere-se à escolha das informações que devem ser visíveis ao usuário e organização da mesma, de forma a facilitar a compreensão. Assim, apenas as coisas necessárias têm que estar visíveis. A falta de visibilidade pode levar um software ao fracasso, pois a falta da mesma torna os softwares difíceis de serem operados, causando desinteresse aos usuários;
  • Affordance: Indica que as ações percebidas são na realidade as propriedades reais dos objetos. Ou seja, refere-se à capacidade de o usuário compreender o funcionamento de um componente do sistema pela forma como o mesmo se apresenta, sem necessidade de explicações. Bom affordance faz com que os softwares tenham uma interface mais enxuta, pois as informações relativas às explicações sobre determinados objetos não são necessários, pois eles já são auto-explicativos;
  • Mapeamento: Indica o relacionamento entre as entidades e seus movimentos e resultados. Logo, um objeto é fácil de ser usado quando existe um conjunto visível de ações possíveis e os controles exploram mapeamentos naturais;
  • Feedback: Fornece ao usuário, no dispositivo de saída, informações sobre o estado das ações por ele executadas. Ou seja, a resposta é retornada pelo sistema ao usuário devido a uma ação executada. Assim, a falta de feedback pode confundir o usuário.

Para Borges (s.d.), algumas regras devem ser seguidas para a boa manutenção da ergonomia de um sistema:

  • Esforço Mínimo do Usuário: visa reduzir o número de ações a serem desempenhadas pelo usuário, sendo delegadas tais atividades ao sistema, evitando falhas;
  • Memória Mínima do Usuário: busca uma curva de aprendizado acelerado, de forma que o uso do software possa ser aprendido facilmente e com o mínimo de informações a serem memorizadas;
  • Frustração Mínima: o sistema deve facilitar a execução das tarefas do usuário, removendo possíveis empecilhos e oferecendo a informação necessária para que toda ação seja bem sucedida;
  • Maximizar o uso de padrões e hábitos: busca facilitar o aprendizado, reduzir a quantidade de informações a serem memorizadas e minimizar o esforço do usuário;
  • Máxima tolerância para diferenças humanas: o sistema deve adequar-se aos diferentes perfis de usuários;
  • Máxima tolerância para mudanças ambientais: o sistema deve suportar mudanças do ambiente de hardware/software com um mínimo de esforço do usuário;
  • Notificação imediata de problemas: capacidade do sistema de notificar o usuário sobre problemas atuais ou futuros de forma clara e coerente;
  • Controle máximo de tarefas pelo usuário: sempre que possível, o usuário deve ter total controle sobre a seqüência de execução das tarefas;
  • Apoio máximo às tarefas: o sistema deve ser auto-suficiente quanto à capacidade de oferecer as informações necessárias para a conclusão de uma tarefa.

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Ergonomia – Parte 1

A Ergonomia é a ciência que se preocupa com a relação homem-trabalho e respectivos problemas relativos à saúde e segurança no trabalho. Ao mesmo tempo, a publicidade de produtos “ergonomicamente corretos” tem invadido o mercado. Assim, impõe-se saber distinguir o “joio do trigo” e, sobretudo, quando e onde é necessária uma ação ergonômica e quem a pode levar a efeito. Há, pois, que desmistificar a ergonomia e dá-la a conhecer, sobretudo, àqueles que são responsáveis pela concepção de sistemas (de trabalho ou utilitários) ou pela organização do trabalho.

Em termos gerais, pode-se dizer que a ergonomia visa a adaptação das tarefas ao homem. Quer se trate de um produto para consumo público ou de um posto de trabalho, a ergonomia oferece vantagens econômicas através da melhoria do bem-estar, da redução de custos e da melhoria da qualidade e produtividade. Assim, a concepção de qualquer produto ou sistema deve integrar critérios ergonômicos desde a fase de projeto, de forma a assegurar a sua eficiência.

Os ergonomistas, ao projetarem equipamentos, produtos, estações de trabalho e sistemas, objetivam maximizar o conforto, a satisfação e o bem-estar, garantir a segurança e minimizar os custos humanos do trabalho e a carga física, psíquica e cognitiva do operador.

Resulta, conseqüentemente, um segundo objetivo, que é permitir ao homem utilizar da melhor maneira e por mais tempo possível suas experiências, habilidades e potencialidades.

A ergonomia visa adaptar o trabalho ao homem, com relação ao ambiente físico em que este se desenvolve. Seu foco é, portanto, antropocêntrico. Sua ação pode ter igualmente efeitos econômicos – aumentando a qualidade da produção, o rendimento do trabalho, a produtividade do sistema – mas uma ação que vise apenas objetivos econômicos é uma ação de organização e não uma ação ergonômica.

Assim, cumpre-se fazer esta distinção:

  • Por um lado, porque os conhecimentos e técnicas colocados em prática na empresa não permitem, por si só, distinguir aquilo que pertence à Ergonomia, daquilo que faz parte da organização do trabalho e mesmo da engenharia;
  • Por outro lado, para recordar que a vocação da Ergonomia é de estar, primacialmente, a serviço do homem no trabalho.

Em termo etimológico, a palavra ergonomia deriva do grego ergon (trabalho) e nomos (normas, regras, leis).

E, como definição oficial, pode-se apresentar a da Associação Internacional de Ergonomia (IEA) adotada em agosto de 2000:

“A Ergonomia (ou Fatores Humanos) é uma disciplina científica relacionada ao entendimento das interações entre os seres humanos e outros elementos ou sistemas, e à aplicação de teorias, princípios, dados e métodos a projetos a fim de otimizar o bem estar humano e o desempenho global do sistema.”

A ergonomia é, assim, definida como uma ciência aplicada, na medida em que o seu objetivo – a atividade humana, quer seja profissional ou utilitária – nunca está desligado do contexto em que se insere nem dos objetivos em vista. Estes, prendem-se geralmente com a eficácia das ações, não perdem de vista a segurança e o conforto dos atores, podendo afirmar-se que este triângulo formaliza os objetivos da ação ergonômica, ou seja, a otimização das interações homem-sistema. Para alcançar este objetivo geral, a Ergonomia preconiza dois tipos de abordagem:

  • Uma ação sobre os sistemas, processos ou produtos, no sentido de torná-los adequados às características do homem e ao seu modo de funcionamento, eliminando todos os fatores de constrangimento, risco ou nocividade;
  • Uma ação sobre o homem através da formação, no sentido de torná-lo apto para a realização das tarefas que lhe são atribuídas e de prepará-lo para as transformações do trabalho decorrentes da evolução
    tecnológica (CASTRO, 2002, p. 43).

Trata-se, assim, de estudos referentes ao conforto, utilização, organização e documentação do software objetivando facilitar e aperfeiçoar o trabalho do usuário junto ao computador.

Desta maneira, os ergonomistas contribuem para o planejamento, projeto e a avaliação de tarefas, postos de trabalho, produtos, ambientes e sistemas de modo a torná-los compatíveis com as necessidades, habilidades e limitações das pessoas.

Portanto, a Ergonomia é uma área orientada para uma abordagem sistêmica de todos os aspectos da atividade humana. Para dar conta da amplitude dessa dimensão e poder intervir nas atividades do trabalho, faz necessário que os ergonomistas adotem uma abordagem holística de todo o campo de ação da área, tanto em seus aspectos físicos e cognitivos, como sociais, organizacionais, ambientais etc. Freqüentemente esses profissionais intervêm em setores particulares da economia ou em domínios de aplicação específicos. Esses últimos caracterizam-se por sua constante mutação, com a criação de novos domínios de aplicação ou do aperfeiçoamento de outros mais antigos.

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Uma Introdução à Interação Humano-Computador

Definindo Interação Humano-Computador

Segundo Baecker e Buxton (1987), Interação Humano-Computador (IHC) é “o grupo de processos, diálogos e ações através do qual um usuário humano emprega e interage com um computador”.

Para a Association for Computing Machinery (ACM): “Interação Humano-Computador é uma disciplina que se preocupa com o projeto, avaliação e implementação de sistemas de computadores para o uso humano”.

A IHC é uma área multidisciplinar que não está voltada somente para o estudo de computação ou do ser humano, mas que envolve ciência da computação e psicologia, dentre outras, e que está voltada para a aplicação do conhecimento dessa série de áreas para a obtenção de interfaces “amigáveis” possibilitando a comunicação do homem com o objeto de estudo da computação: o computador. Em outras palavras, IHC deve oferecer o meio mais adequado para que o usuário consiga maximizar sua experiência na interação com o computador, apesar de suas limitações e/ou restrições de tecnologia existentes.

Diferenciando interação e interface

Há dois termos que são usados indistintamente, mas que são diferentes: a Interação e a Interface. O campo de atuação da interação em IHC é tudo que ocorre durante a comunicação do homem (a realização de tarefas) e o computador. Já o conceito de interface é o componente (software) que mapeia as ações do usuário quando este solicita certo processamento ao sistema, através de uma aplicação e apresentação dos resultados pelo mesmo. Assim, a interação envolve, além da interface, o ambiente físico onde o trabalho é desenvolvido.

Encontram-se problemas de interface na maioria das aplicações atualmente, apesar de os projetistas investirem horas com a mesma, em virtude da não preocupação de quem as construiu com os fatores humanos: a percepção visual, a psicologia da leitura e o modelo mental do usuário.

Como um usuário recebe informações e executa tarefas

A habilidade do usuário no processo de obtenção de uma informação de um sistema interativo envolve três dos seus sentidos: a visão, a audição e o tato. A maioria das interações humano-computador ocorre através da visão. Os usuários processam e interpretam a informação visual para, a partir dos seus modelos mentais, extrair o conhecimento. Logo uma especificação apropriada de comunicação visual é o  elemento chave de uma interface “amigável”. Mas, ainda hoje muito da informação apresentada aos usuários é feita de forma textual, não se preocupando nem mesmo em facilitar a exibição dessa informação.

A informação é armazenada de duas formas possíveis  na memória humana: ou pela memória de curta duração, que possui, obviamente, capacidade de armazenamento e recordação limitados, ou pela memória de longa duração que é onde reside o conhecimento humano. Dessa forma o projetista de IHC deve se preocupar como as informações e estrutura da interface irão afetar esses tipos de memória. Caso contrário, corre-se o risco de se ter um sistema de difícil utilização por parte do usuário, perdendo em competitividade com outros que atendam a esses requisitos.

Além disso, a interface deve ser especificada de modo que o usuário possa desenvolver heurísticas (procedimentos, regras e estratégias) que tendem a ser específicas do domínio do conhecimento, devendo permanecer consistentes nas diferentes fases de interação, pois a maioria das pessoas não aplicam raciocínio indutivo ou dedutivo quando se deparam com um problema, além de terem de ser baseadas no conhecimento de problemas similares.

Nos tópicos a seguir abordar-se-ão as três preocupações fundamentais de Interação Humano-Computador: a Ergonomia, a usabilidade e a acessibilidade.

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Material do Curso de Interação Humano-Computador

Olá a todos! Após um longo tempo sem publicações de novos conteúdos didáticos (peço desculpas a todos, mas não estou mais atuando como professor, mas sim como desenvolvedor de jogos em tempo integral :-) ), decidi por organizar vários escritos meus e “montar um curso” de Interação Humano-Computador.

Àqueles que desconhecem, Interação Humano-Computador trata-se de uma disciplina que busca analisar como melhor adequar as ferramentas tecnológicas às necessidades e ergonomia do homem. Sendo assim, busca-se oferecer conforto e melhor produtividade por meio da adequação da máquina ao homem.

Vale salientar que podemos aplicar os princípios de IHC não somente ao hardware, à “parte anatômica” dos equipamentos, mas sim na forma como a pessoa interage com o mesmo a fim de concluir uma tarefa. É assim que podemos estudar Interação Humano-Computador para aplicar a dispositivos eletrônicos, desktop softwares, websites, etc.

Espero desta forma vir a preencher possíveis lacunas ou ao menos tentar trazer um pouco de minha experiência profissional para aqueles que estão interessados em tal assunto.

Os artigos do curso serão elaborados e publicados gradativamente aqui, infelizmente sem data prevista para cada uma delas, já que o estarei fazendo em minhas horas vagas.

Por sorte, tenho material suficiente para a parte inicial, que estarei extraindo da monografia que escrevi em conjunto com meu amigo Frederico Santos do Vale.

Aula 1 – Uma Introdução à Interação Humano-Computador

Aula 2 – Ergonomia – Parte 1

Aula 3 – Ergonomia – Parte 2

Aula 4 – Usabilidade

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Games e Educação – Um novo blog para educar e entreter

Este artigo, diferente dos anteriores, tem como objetivo apresentar o blog de meu amigo Fábio de Melo Silva, o blog Games e Educação. Trata-se de um blog voltado principalmente (mas não somente) para educadores e outras pessoas interessadas em saber como se pode aplicar os jogos na educação dos nossos jovens.

Desta forma, com uma linguagem que une entretenimento e educação, o autor apresenta os principais eventos e publicações que abordam esse assunto tão comentado porém pouco aplicado na educação brasileira.

Jogos podem educar, isso é fato, todos nós já sabemos. Mas, como conseguir aplicar os jogos de forma tão educativa dentro e fora da sala de aula? Além de buscar responder essa pergunta, o blog do autor aponta várias fontes de referência onde podemos procurar mais informações e, assim, responder essa pergunta.

Dentre os destaques atuais do blog estão o SBGames (Simpósio Brasileiro de Jogos e Entretenimento Digital) e o Seminário Jogos Eletrônicos, Educação e Comunicação, que chega à sua sexta edição.

Além disso, você pode acessar e ler o artigo publicado no SBGames 2009, publicação da qual tive o prazer de participar, e que teve como autor principal Marcelo Cunha, um outro amigo nosso e também pesquisador focado na área games e educação.

Bem, é isso. A dica está dada: se você está interessado em aprender mais sobre jogos educativos ou o uso de quaisquer jogos na educação, não perca a oportunidade de conhecer mais por meio desse blog!

Se você gostou deste artigo, que tal...

O Uso de Agentes Inteligentes na Educação

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Redes neurais baseadas em competição

Introdução

Em diversos exemplos estudados, as redes às vezes decidiam por mais de um valor como resposta em vez de um único valor correto, como aconteceu quanto a classificação de letras e a rede retornava como resposta a uma entrada que ela tanto poderia ser um E como um K.
Para resolver esse tipo de problema, pode-se forçar a rede a tomar uma decisão por meio de alguma estrutura adicional, mecanismo esse conhecido como competição.
A forma mais extrema de competição é conhecida como “o vencedor leva tudo”, na qual somente um neurônio deve possuir saída diferente de zero ao final da competição.
Algumas redes desse tipo são a Maxnet, Chapéu Mexicano, Quantização do Vetor de Aprendizagem (do inglês, Learning Vector Quantization – LVQ) e Mapeamentos Auto-Organizáveis de Kohonen (cuja abreviação em inglês é SOM).
Além da característica competitiva, podemos destacar o fato de que as redes de Kohonen utilizam-se de aprendizado não supervisionado, buscando similaridades nos vetores de entrada a fim de agrupá-los em clusters.
Várias das redes apresentadas no livro utilizam-se da regra de aprendizado conhecida como “aprendizado Kohonen”. Nesta forma de aprendizado, as unidades que atualizam seus pesos o fazem de forma a determinar o novo vetor de pesos como sendo a combinação linear do antigo vetor peso e do vetor de entrada atual, tomando-se o cuidado de escolher como unidade a ser atualizada aquela cujo vetor peso esteja mais próximo do vetor de entrada a ser aprendido.
Há duas principais abordagens para determinar o vetor peso mais próximo ao vetor padrão em redes auto-organizáveis.
A primeira delas emprega o cálculo do quadrado da distância Euclidiana (Dj) entre o vetor de entrada e o vetor peso, escolhendo o vetor peso de menor valor Dj como sendo o mais próximo.
O segundo método usa o produto escalar (dot product, em inglês) do vetor de entrada e do vetor peso, que é o valor de entrada (y_inj) para cada unidade. Quanto maior o produto escalar menor o ângulo entre os vetores peso e entrada (se o comprimento de ambos for um), podendo assim ser interpretado como a correlação entre esses vetores.

Mapeamentos Auto-Organizáveis de Kohonen

As redes neurais auto-organizáveis propostas por Kohonen possuem a característica de preservar topologias, aspecto esse não identificado em outras redes. Desta forma, assumem uma estrutura topológica entre as unidades de agrupamento (clusters). Essa característica também é observada no cérebro.
Algumas das observações a respeito do funcionamento de um mapa auto-organizável são:

  • Dados p sinais de entrada, cada qual formado por n-tuplas, são capazes de agrupá-los em m clusters;
  • Atualiza somente os vetores peso da unidade j e seus vizinhos (em uma vizinhança de raio R), sendo j a unidade cujo vetor peso está mais próximo do vetor entrada;
  • Seu aprendizado é não supervisionado.

Arquitetura
A figura abaixo apresenta a arquitetura de uma rede de Kohonen:

Já a figura abaixo ilustra as vizinhanças R = 0, 1 e 2 para unidades de uma rede dispostas em um array bidimensional em uma grade retangular:

Em uma grade hexagonal, teríamos a seguinte disposição gráfica:

Algoritmo

  • Inicialize pesos
  • Estabeleça parâmetros de vizinhança topológica
  • Estabeleça parâmetros de taxa de aprendizado
  • Enquanto condição de parada for falsa, faça
    • Para cada vetor de entrada x, faça
      • Para cada j
        • Dj = 0
        • Para cada i
          • Dj = Dj + (wij – xi)2
      • Encontre índice J tal que DJ seja mínimo
      • Para todas as unidades j na vizinhança especificada de J
        • Para todos os i
          • wij = wij + α[xi – wij]
    • Atualize taxa de aprendizado
  • Reduza raio da vizinhança topológica em tempos determinados

Observações:

  • A taxa de aprendizado decresce lentamente em função do tempo;
  • O raio de vizinhança também decresce enquanto o processo de clustering progride;
  • Valores aleatórios podem ser estabelecidos para os pesos inicialmente.

[Conteúdo pertencente ao Material do curso de Redes Neurais Artificiais]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Associação de Padrões

Algoritmos de Treinamento para Associação de Padrões

Redes associativas são redes cujo objetivo é associar determinados tipos de padrão a outros a fim de que a rede possa reconhecer ou não uma determinada entrada, mesmo que parte das informações estejam “perdidas” ou “erradas”.

Dado um par associado s:t composto por um vetor s de n elementos e um vetor t de m elementos, necessitamos então de uma rede com n vetores de entrada e m vetores de saída e os pesos podem ser representados em uma matriz W de n linhas por m colunas.

Desta forma, para testarmos se a rede associa corretamente um determinado padrão s a um padrão t, o produto de s por W, sendo aplicado à função de ativação, deverá resultar em t, ou seja:

f(s.W) = t

Regra Hebb

Regra mais simples para a determinação de pesos para uma rede neural associativa.

Algoritmo:

  • Inicialize todos os pesos wij = 0;
  • Para cada vetor de treinamento s:t faça
    • xi = si;
    • yj = tj;
    • wij = wij + xi*yj;

Como se pode perceber Cálculo de pesos de uma rede neural , ou seja, a matriz de pesos W é igual ao produto externo dos vetores s e t.

Matriz dos vetores de treinamento

Perfect recall versus cross talk

Quanto maior for a correlação dos vetores de entrada, maior será o cross talk (ou seja, há contribuições dos vetores nos pesos de forma a perder a precisão).
Já no caso de vetores ortogonais (que são não correlacionados) a rede Hebb irá produzir pesos corretos, conseguindo assim um perfect recall.

Regra Delta

A regra Delta consegue reproduzir melhores resultados que a regra Hebb quando os vetores de entrada do treinamento são não ortogonais.
Como já vimos, a regra Delta original expressa a variação de pesos da seguinte forma:

Variação dos pesos na regra delta original

Uma variação da regra Delta leva em consideração uma função de ativação diferenciável de forma que a diferencial desta entra no cálculo da variação de pesos da seguinte forma:

Variação dos pesos na regra delta modificada

Redes Neurais de Memória Heteroassociativa

São redes em que os pesos são determinados de tal forma que elas podem armazenar um conjunto P de associações padrões.
Uma rede heteroassociativa assemelha-se à representada na figura abaixo:

Exemplo de rede heteroassociativa

Em seu treinamento tanto a regra Hebb quanto a regra Delta pode ser empregada.

A função de ativação das unidades de saída pode ser de uma das seguintes formas:

  • Função de ativação step bipolar Função de ativação step bipolar
  • Função de ativação step binária Função de ativação step binária
  • Função de ativação incluindo um threshold θi (usada em redes de memória associativa bidirecional – BAM) Função de ativação incluindo um threshold

Dado um conjunto de associações padrões S = s(1):t(1), … , s(i):t(i), … , s(P):t(P), se treinarmos uma rede associativa por regra Hebb para cada um desses padrões, teremos matrizes de pesos W(1) , … , W(i), … , W(P). Uma rede heteroassociativa treinada por regra Hebb para o conjunto de padrões S terá uma matriz de pesos W = W(1) + … + W(2) + … + W(P).

Rede Autoassociativa

Uma rede autoassociativa trata-se de um caso especial de rede heteroassociativa na qual o vetor de entrada do treinamento e a saída desejada são idênticos, desta forma, o treinamento resulta naquilo que é chamado de armazenamento do vetor.
A arquitetura de uma rede autoassociativa é, então, da seguinte forma:

Modelo de rede autoassociativa

A matriz W de pesos será tal que possuirá n linhas por n colunas e pode ser encontrada a partir da seguinte forma:

Cálculo da matriz de pesos

Que expressa a soma das matrizes-peso para cada padrão por meio da regra Hebb em um único somatório.
É necessário dizer também que, após o cálculo da matriz W, é comum “zerar-se” (estabelecer seu valor para zero) a diagonal principal dessa matriz, pratica esta que visa aumentar a plausibilidade biológica e previne a produção da matriz identidade para os pesos (quando empregada a regra Delta), além de ser necessário no caso da rede ser iterativa.

Capacidade de Armazenamento

A capacidade de uma rede de armazenamento autoassociativa depende do número de componentes que os vetores armazenados possuem e da correlação existente entre eles, sendo que quanto menor a correlação entre eles, mais vetores podem ser armazenados, alcançando número máximo quando todos os vetores são ortogonais entre si.
Sendo assim, dados vetores bipolares mutuamente ortogonais de n componentes, n – 1 destes vetores é o número máximo que se pode armazenar usando a matriz peso da soma dos produtos externos (com os termos das diagonais “zerados”).

Rede Autoassociativa Iterativa

Algumas redes não são capazes de associar na primeira tentativa um vetor que possua muitas “incertezas” (no caso de padrões bipolares, representadas pelo valor zero), entretanto o fazem muito bem após iterar sobre o resultado, ou seja, utilizar o resultado obtido na iteração anterior como nova entrada, até que não mais haja incertezas sobre os dados.
Essas redes são conhecidas como redes autoassociativas iterativas e encontram nas redes de Hopfield algumas de suas mais fortes representantes.
Nesse tipo de rede é muito comum ter todos os n neurônios conectados entre si, o que leva a deixar de identificar suas camadas como camada de entrada e camada de saída.

Autoassociador Linear Recorrente

Trata-se do tipo mais simples de rede neural autoassociadora iterativa.
Apresenta todos os seus neurônios interconectados e os pesos podem ser encontrados pela regra Hebb.
Uma vez que a regra Hebb trata-se do somatório das componentes dos vetores de entrada (para ser mais específico, do quadrado das componentes), os pesos correspondentes podem crescer indefinidamente, alterando assim a confiabilidade das informações obtidas por essa rede.
Para resolver isso, desenvolveu-se uma modificação deste tipo de rede, criando assim o “Brain-State-in-a-Box” (redes BSB).
Essas redes possuem esse nome porque impõem limites ao crescimento por meio da modificação da função de ativação, restringindo assim os valores possíveis a um cubo. Neste tipo de rede, as autoconexões (os termos da diagonal principal da matriz) não são “zerados”, havendo uma autoconexão com peso 1.
Uma outra possibilidade é trabalhar com uma função de ativação baseada no threshold. Neste caso, podemos ter vetores de entrada bipolares, pesos simétricos ( wij = wji ) e nenhuma autoconexão ( wii = 0 ) tendo como função threshold a seguinte:
Função de ativação de autoassociador linear recorrente

Rede Discreta de Hopfield

As redes de Hopfield também são completamente interconectadas, possuem pesos simétricos e nenhuma autoconexão. O que realmente as difere das anteriores é o fato de que somente uma unidade terá seu valor de ativação atualizado de cada vez e cada uma dessas unidades continua a receber um sinal externo além do sinal de cada um dos outros neurônios na rede.
Essa atualização assíncrona permite a determinação da função de Lyapunov (ou função de energia), capaz de descrever de que forma a rede convergirá para a solução.
A inicialização dos pesos (lembrando que se trata de armazenamento de padrões, ou seja, uma rede autoassociativa) pode ser feita usando-se a regra Hebb e, após esta, para cada vetor de entrada deve-se atualizar de forma assíncrona (escolhendo aleatoriamente um neurônio de cada vez, mas tendo o cuidado de atualizar todos na mesma proporção) os valores de ativação, até que estes atinjam a convergência para aquilo que será a resposta de nossa rede.
Nossa função de ativação pode trabalhar com um valor θi ou ter como threshold o valor zero.
Inicialmente, a entrada externa (ou seja, os valores do vetor de entrada) era usada somente no início de cada passo, entretanto algumas modificações da rede de Hopfield podem utilizar-se da entrada externa durante todo o processo.

Função Energia

Função energia

Capacidade de Armazenamento
Hopfield para padrões binários – Capacidade de armazenamento para hopfield para padrões binários

Hopfield para padrões bipolares – Capacidade de armazenamento para hopfield para padrões bipolares

Memória Associativa Bidirecional (BAM)

Uma rede BAM é capaz de armazenar um conjunto de associações-padrão por meio da soma de matrizes de correlação bipolares.
Sua arquitetura consiste de duas camadas de neurônios, cada qual conectado a todos os neurônios da outra camada por meio de conexões bidirecionais.
Uma vez que o sinal será enviado e retornado entre essas camadas diversas vezes até convergir, é convencionado denominar essas camadas de “camada X” e “camada Y”, em vez de camadas de entrada e saída.
A arquitetura de uma rede BAM fica, então, da seguinte forma:

Modelo de rede BAM

BAM discreta

Há duas formas de rede BAM que se utilizam de padrões de entrada e saída discretos são as formas binárias e bipolares, ambas com um comportamento muito similar.
O cálculo do peso é encontrado mais uma vez por meio do produto externo das formas bipolares dos vetores pares de treinamento. Além disso, a função de ativação continua sendo uma função step, sendo que, agora, quando o valor de entrada for igual ao threshold, a função de ativação opta por manter o valor de ativação previamente conhecido.
Uma função de ativação pode ser, por exemplo (considerando uma rede BAM bipolar):
Função de ativação para rede BAM bipolar

BAM contínua

Uma rede BAM contínua transforma de forma suave e contínua a saída em um valor no intervalo [0, 1] usando para isso não mais uma função step, mas sim uma função sigmóide logística.
A função de ativação é:

Função de ativação para uma rede BAM contínua

O cálculo do y_inj leva em consideração o valor de um bias, diferentemente das outras redes associativas que temos visto aqui.

Outros Conceitos

Distância Hamming

A distância Hamming entre dois vetores x1 e x2 (denotada por H[x1, x2]) trata-se do número de componentes diferentes que estes possuem.
A distância média Hamming entre dois vetores é Cálculo da distância hamming
, valor este que expressa o percentual de diferenças que há entre os dois vetores.

Apagar uma associação armazenada

Seja xc o complemento de um vetor bipolar x (ou seja, um vetor que inverte os valores 1 por –1 e vice-versa).
Codificar uma matriz-peso para armazenar xc:tc é o mesmo que codificá-la para armazenar x:t.
Entretanto, se ela for treinada para armazenar xc:t ou x:tc, ela perderá as informações armazenadas a respeito do par associado x:t, o que é facilmente provado por meio de álgebra linear.

[Conteúdo pertencente ao Material do curso de Redes Neurais Artificiais]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS