Posts Tagged ‘ufabc’

Implementando Rubycas Server e Client

junho 29th, 2011

Aqui na UFABC possuímos uma base para autenticação de usuários centralizada no LDAP. Para evitar desconfortos aos usuários, bem como para facilitar a vida de nós, que desenvolvemos as aplicações e, é claro, as interfaces de login em cada uma delas, comecei a pesquisar maneiras de realizar um Single Sign-On (SSO) para todas as aplicações já em produção e para as futuras.

Inicialmente pensei em simplesmente criar uma sessão genérica que pudesse ser acessada por diversas aplicações, porém, o que parecia ser mais simples e rápido acabou se mostrando menos seguro e infinitamente menos portável. Logo desisti da idéia e comecei a pesquisar outras soluções de SSO.

O Maurício me indicou uma série de sistemas/bibliotecas baseados em diferentes protocolos, todos para Ruby. No meio da lista o Rubycas me chamou atenção, principalmente por utilizar um protocolo já utilizado e implementado em forma de clients para outras linguagens e por possibilitar a autenticação no LDAP.

Não vou entrar em detalhes sobre a história e funcionamento do protocolo CAS de SSO, mas suas primeiras implementações foram feitas em Java, quando se tornou um projeto da Jasig.

Para saber mais sobre como funciona o protocolo CAS visite este link. Basicamente existe um server que é uma interface web que autentica um usuário em alguma base de autenticação (LDAP no caso da UFABC) e redireciona para algum client que é sua aplicação.

RUBYCAS SERVER

A primeira coisa que fiz após ler um pouco sobre o protocolo CAS e sobre o projeto Rubycas foi tentar fazer o download do rubycas-server, seguindo as instruções desta página, instalei a gem rubycas-server em uma nova rvm gemset e segui as instruções destadesta pagina. As dores de cabeça começaram.

A gem possui dependências de gems antigas, o que ocasionou diversos problemas em alguns requires e em alguns métodos. Fiz alguns monkey patch’s para corrigir estes probleminhas, e após brigar muito com seu arquivo de configuração consegui fazer subir um “Frankenstein” no Webrick.

Foi um avanço, comecei a implementar os clients pois estava com pressa, mas mais tarde voltei ao server, definitivamente eu não queria fazer deploy de um Frankenstein:

  1. Clonei este projeto (O projeto!) do Github:  $ git clone git://github.com/gunark/rubycas-server.git meu_diretorio/rubycas-server;
  2. Entrei na pasta do projeto, editei o arquivo rubycas-server.gemspec e troquei a dependência da gem sqlite3 pelo meu adaptador de bd preferido;
  3. Instalei todas as dependências: $ bundle install
  4. Executei $ ./bin/rubycas-server e o arquivo localizado em ./config/config.example.yml foi automaticamente copiado para /etc/rubycas-server/config.yml
  5. Editei o arquivo /etc/rubycas-server/config.yml configurando o meu servidor e porta da aplicação, o meu adaptador de banco de dados, e meu modo de autenticação (LDAP);
  6. Fiz a aplicação subir localmente no Webrick rodando novamente $ ./bin/rubycas-server
  7. Testei a aplicação em http://localhost:<porta_escolhida> e visualizei a interface de login com sucesso!
  8. Para fazer deploy, como centralizamos nossos códigos no SVN, importei o projeto para nosso servidor SVN e fiz o checkout na máquina de produção;
  9. Dentro da pasta do projeto na máquina de produção repeti as etapas 3, 4 e 5, mas no arquivo de configuração não escolhi o meu servidor (webrick, mongrel, phusion passenger – apache, etc);
  10. Como iria publicar o rubycas-server no Apache (com o Phusion Passenger previamente instalado) entrei no diretório /etc/apache2/vhosts.d e criei um novo arquivo de configuração direcionando o meu host para a pasta da minha aplicação;
  11. Reiniciei o Apache e minha interface de login (Rubycas-server) passou a funcionar em produção desde então!

RUBYCAS CLIENT

A instalação e configuração do rubycas-client foi bem menos traumática. Transformei duas de nossas aplicações em dois clients para se autenticarem noserver que eu já tinha configurado:

  1. Instalei a gem rubycas-client;
  2. Entrei no diretório do projeto da minha aplicação;
  3. Editei o arquivo ./config/environment.rb em uma aplicação feita em Rails 2.x.x e ./config/application.rb em uma feita em Rails 3.x.x e inseri o seguinte código:
        require 'casclient'
        require 'casclient/frameworks/rails/filter'
    
        CASClient::Frameworks::Rails::Filter.configure(
          :cas_base_url => "https://<meu_server>/"
        )
  4. Editei o arquivo ./app/controllers/application_controller.rb e inseri o seguinte código no início do arquivo:  before_filter CASClient::Frameworks::Rails::Filter
  5. Apartir deste momento as aplicações já passaram a funcionar como clients. Um client se comporta basicamente da seguinte maneira: Verifica se a sessão cas_user existe, caso positivo cabe à sua aplicação decidir se fornece ou não permissão ao usuário logado, caso negativo redireciona o usuário para o rubycas-server, onde deve ser feita a autenticação, caso o usuário digite seu login e senha corretamente ele é redirecionado para a aplicação anterior (client), com a sessão cas_user contendo uma string com seu nome de usuário;
  6. O client é bastante flexível. A documentação (http://rubycas-client.rubyforge.org/) me ajudou bastante, principalmente para me ajudar a implementar o logout e a fazer os testes automatizados
E foi assim que consegui implementar um SSO aqui na UFABC. A partir de agora vou monitorar o desempenho e a eficiência do sistema e futuramente avaliar a necessidade de implementar ou não o Shiboleth (outro sistema de SSO que se comunica com a federação Cafe, que não entra no caso agora).

Vale lembrar que os clients do CAS podem ser implementados em outras linguagens além do Ruby (Java, PHP, .NET, etc), veja aqui.

Espero que tenha ajudado, ou ao menos dado alguma idéia. Qualquer coisa podem entrar em contato!

Tomada de decisões: Teoria da utilidade e do prospecto

novembro 29th, 2009

Em minha última aula de Psicologia Cognitiva demos continuidade ao tema tomada de decisões, abordando heurísticas e métodos utilizados por seres humanos em suas decisões, julgamentos e raciocínio. Neste post vou me concentrar nas teorias da utilidade e do prospecto.

o-pensador

O professor Peter Claessens deu início fazendo a seguinte proposta fictícia à classe:

Você tem a opção de jogar 2 dados de 6 lados. Caso o resultado dos 2 dados lançados sejam iguais, você ganha R$12,00, caso contrário, você perde R$3,00. Você toparia entrar na aposta?

Segundo a Teoria Normativa, aquela inspirada pela economia, a probabilidade do resultado ser 2 dados iguais é de 1/6, enquanto a probabilidade de ser 2 dados diferentes é de 5/6. Assim sendo, o valor esperado para aquele que aceita a aposta é calculado da seguinte maneira:

Valor esperado = 1/6 x R$12,00 + 5/6 x R$3,00 = -R$0,50

Podemos considerar então, 2 tipos de decisão daquele que recebeu a proposta:

Decisão A: Não aceitar – Ganho esperado de R$0,00

Decisão B: Aceitar – Ganho esperado de -R$0,50 (Perda de R$0,50)

Podendo concluir que, segundo a teoria normativa ou teoria da utilidade esperada, a melhor decisão seria não aceitar a proposta, considerando que o ganho esperado é maior.

Daniel KAHNEMANEntretando, a Teoria do Prospecto, proposta por Kahneman & Tversky, ou Teoria descritiva, que levou o psicólogo Kahneman ganhar o prêmio Nobel de economia em 2002, evidencia, através de experimentos comportamentais, o fato de que as tomadas de decisões entre os seres humanos seguem alguns padrões que não necessariamente são baseadas em probabilidades de ganhos esperados. Vejamos as seguintes propostas:

Jogo A: Escolher entre

  • Ganho de R$500,00 com 100% de probabilidade
  • Ganho de R$1000,00 com 50% de probabilidade (sendo os outros 50%, R$0,00)

Jogo B:Escolher entre

  • Perda de R$500,00 com 100% de probabilidade
  • Perda de R$1000,00 com 50% de probabilidade (sendo os outros 50%, R$0,00)

Os experimentos comportamentais revelaram que no caso do Jogo A, a maioria das pessoas optou pelo ganho certo de R$500,00, enquanto no  Jogo B, a maioria optou pela perda incerta de R$1000,00. Ou seja, a perda “pesa mais” para o ser humano, que possui aversão ao risco em ganho e busca de risco em perda.

Vejamos outro experimento comportamental. Dois dilemas foram propostos aos voluntários:

Dilema 1: Aplicando a vacina

  • A, 200 pessoas serão salvas com probabilidade de 100%
  • B, 600 pessoas serão salvas com probabilidade de 33,3%

Dilema 2: Aplicando a vacina

  • C, 400 pessoas morrerão com probabilidade de 100%
  • D, Niguém morrerá com probabilidade de 33,3%

Os resultados revelaram que no caso do Dilema 1, 72% das pessoas optaram pela aversão ao risco (vacina A), enquanto no Dilema 2, 78% das pessoas optaram pela busca de risco (vacina D). Estes resultados revelam a limitação da racionalidade do ser humano, visto que se forem analisadas as probabilidades dos 2 dilemas, se tratam exatamente do mesmo problema. Este é o chamado efeito de estruturação: quando o mesmo problema leva a estratégias diferentes devido ao enquadramento (aspectos irrelevantes para a decisão).

Em aula vimos ainda sobre alguns aspectos da tomada de decisões em grupo. Nestes tipos de decisão temos geralmente alguns aspectos vantajosos: acumulação de idéias, conhecimento e memória. E alguns desnvantajosos: O pensamento de grupo pode atrapalhar a tendência para evitar conflitos, causar atitude de mente fechada, supressão de dissensão, unânimidade falsa e decisões prematuras, conservadoras e imperfeitas. O “andídoto” proposto para evitar estas desvantagens me lembrou muito as idéias do desenvolvimento ágil, que já comentei em outros posts: Líder imparcial, cultura aberta à crítica construtiva, a informações vindas de fora, formação de subgrupos, etc.

Concluímos que a teoria da utilidade desconsidera o fato de que muitas situações de risco são sujeitas a pressão emocional e de tempo, e que existem algumas variáveis que nos impossibilitam de utilizar 100% de nossa racionalidade – todos os cálculos e probabilidades nem sempre cabem em nossa memória de trabalho. E é por este motivo que o ser humano acaba, naturalmente, utilizando heurísticas: modelos de tomada de decisão que nem sempre retornam a solução otimizada, mas a mais sensata, levando em consideração as inúmeras variáveis que possuem os seres-humanos.

Saiba mais sobre:

Daniel Kahneman: http://en.wikipedia.org/wiki/Daniel_Kahneman

Teoria do prospecto:http://en.wikipedia.org/wiki/Prospect_theory

Não percam os meus próximos 2 posts: Continuarei tratando sobre o tema “Tomada de Decisões”, abordando métodos e heurísticas utilizadas por seres-humanos em Julgamentos e Raciocínio.

Até a próxima!

Psicologia Cognitiva – Memória

outubro 29th, 2009

Continuando a exposição das aulas de psicologia cognitiva, tratarei neste post sobre um dos mecanismos mais importantes da cognição e da inteligência humana, a memória, definida em aula como “Habilidade de adquirir, reter e usar informações e conhecimentos”.

A memória implica em constantes mudanças, no contexto humano trata-se de informações que de alguma maneira podem ser armazenadas e posteriormente utilizadas, basicamente consiste em consolidação, quando a informação desaparece da consciência e evocação, quando a informação retorna à consciência. Seu bom funcionamento, paradoxalmente, depende do esquecimento.

Assistam o seguinte vídeo, um teste psicológico em que há 2 times, um de branco e um de preto, cada um tocando bolas de basquete entre os seus jogadores. O objetivo é contar o número de passes que o time de branco faz entre os seus jogadores, mas fiquem atentos pois a velocidade dos passes e os jogadores de preto podem confundir a sua contagem:

Update: Para melhores resultados no testes é interessante que o vídeo seja carregado antes de assisti-lo.

Em sala de aula a grande minoria das pessoas, não me lembro exatamente quantas, perceberam que há uma “surpresa” no meio do vídeo. Isto se deve ao fato de que geralmente o cérebro “exclui” elementos que não possuem importância para o foco de sua atenção – a exclusão do gorila de sua memória é essencial para que você conte corretamente o número de passes entre os jogadores de branco.

Outro caso curioso sobre esquecimento citado em aula foi o de Solomon Shereshevsky, um homem com uma memória “quase perfeita”, capaz de lembrar os mínimos detalhes de um livro, os dados de uma lista telefônica inteira, todos os objetos de um ambiente, etc., pelo fato de que seu cérebro raramente excluía informações de sua memória. Parece ser muito bom e divertido, mas Solomon não conseguia reconhecer nem mesmo as faces de seus próprios familiares, uma vez que cada expressão era interpretada como imagens distintas em seu cérebro – prestava atenção nos detalhes ao custo do sentido global, não abstraindo nem metaforizando quase nada.

Vamos fazer mais um teste – Tente decorar durante uns 5 segundos (colabore) as palavras abaixo, em seguida desvie o seu olhar do monitor e escreva em uma folha de papel as palavras que conseguir lembrar.

Retrato
Libélula
Casaco
Violino
Pálpebra
Tomate
Laudo
Prancha
Irmão

Provavelmente você conseguiu se lembrar das palavras que estavam mais no topo (Retrato, Libélula…) e na base (Prancha, Irmão…), é o que ocorre, em média, com as pessoas que fazem este teste, pelo fato de que as palavras localizadas no topo da lista tiveram muito mais tempo para serem consolidadas do que as restantes, uma provável relação com a memória de longo prazo e as da base ainda estão ativas por serem mais recentes (considerando que a maioria das pessoas lê de cima para baixo), uma provável relação com a memória de curto prazo, enquanto as do meio nem foram suficientemente consolidadas a ponto de serem evocadas por sua consciência, nem são tão recentes a ponto de ainda estarem ativas em sua consciência.

As evidências observadas em cada modelo ou tipo de memória nos levam a chegar em algumas conclusões e deduzir algumas técnicas de memorização. Não é meu objetivo expor todas estas técnicas, nem ensiná-los a como ter uma memória excepcional, mas são exemplos interessantes dados em aula :

Vejam este pequeno exemplo sobre memória sensorial:

letrasEsta imagem foi exibida para alguns voluntários durante 50 milisegundos. Niguém se recordou de todas as letras. Alguns sinais sonoros foram associados a cada fileira e as associações foram ensinadas aos voluntários. A tarefa seguinte era tentar recordar as letras correspondentes ao sinal sonoro emitido – a maioria das pessoas se lembrou de todas as letras da fileira, levando à conclusão de que o tempo de consolidação da informação tem importância, mas a maneira como esta informação é estruturada é trivial para a sua evocação.

Em outro teste realizado em aula, uma voluntária saiu da sala enquanto a seguinte sequência de números foi apresentada durante uns 2 segundos a um segundo voluntário:

1 4 0 2 8 0 5 6 0

Ao tentar se recordar de todos os números, em ordem, o resultado não foi muito positivo – alguns números foram esquecidos e outros estavam em posições diferentes. A voluntária fora da sala foi chamada e a seguinte sequência foi apresentada também durante uns 2 segundos:

140   280  560

Ela se recordou de todos os números sem nenhuma dificuldade. A técnica chamada de agrupamento (chunking) nos mostra que provavelmente o ser humano possui uma quantidade limitada de elementos que podem ser acessíveis em curto prazo, desta maneira, elementos agrupados se tornam um só elemento, facilitando a evocação.

A eficiência do agrupamento visual também foi demonstrado em um experimento com voluntários novatos e experientes em jogos de xadrez:

  • Arranjos de peças reais, que geralmente são oriundos de determinadas sequências de jogadas, foram apresentados a todos os voluntários:
    • Jogadores experientes se lembraram em média da posição de 16 peças;
    • Novatos se lembraram em média da posição de 4 peças;
  • Arranjos de peças aleatórios foram apresentados a todos os voluntários:
    • Jogadores experientes se lembraram em média da posição de 3 peças;
    • Novatos se lembraram em média da posição de 3 peças;

Hierarquizar elementos ou informações (criando mapas ou fluxogramas) também é um método eficiente para facilitar a evocação, uma vez que ela é realizada através de conexões entre os neurônios – um elemento se relaciona ao outro no cérebro humano, esquematizá-lo no papel é uma boa pedida!

O estado no qual um indivíduo se encontra enquanto consolida informações também influencia. Alguns voluntários foram levados a estudar/memorizar em diferentes situações:

  • Dentro e fora da água
    • Os que estudaram dentro se lembraram de mais coisas quando tentaram evocar informações dentro do que fora;
    • Os que estudaram fora se lembraram de mais coisas quando tentaram evocar informações fora do que dentro;
  • Com e sem ruído
    • Os que estudaram com ruído se lembraram de mais coisas quando tentaram evocar informações com do que sem ruído;
    • Os que estudaram sem ruído se lembraram de mais coisas quando tentaram evocar informações sem do que com ruído;
  • Triste ou feliz
    • Os que estudaram tristes se lembraram de mais coisas quando tentaram evocar informações tristes do que felizes;
    • Os que estudaram felizes se lembraram de mais coisas quando tentaram evocar informações felizes do que tristes;

Esta é outra boa dica para quem deseja estudar ou memorizar coisas, mas é muito importante lembrar que para que as informações possam ser evocadas com facilidade em qualquer lugar ou situação é necessário que os estudos e a memorização aconteçam em lugares distintos, com influências distintas.

A consolidação da memória também pode ser sugestionada. Voluntários assistiram a um vídeo de acidente de carro, em seguida foram questionados da seguinte maneira:

“Qual era a velocidade aproximada do carro quando se (verbo)?”

No qual o verbo variou com cada voluntário (esmagou, chocou, bateu, tocou). Quanto “mais intensos” eram os verbos da pergunta, maiores foram as estimativas das velocidades respondidas. No acidente nenhum vidro do carro se quebrou, mas as pessoas foram questionadas sobre este fato e as que ouviram a primeira pergunta com os verbos “mais intensos” responderam mais positivamente do que as que ouviram a pergunta com os verbos “menos intensos”.

Este tipo de consolidação após evento é muito comum em audiências judiciais, em que testemunhas podem ser sugestionadas a fornecer uma determinada resposta dependendo da meneira como a questão é realizada.

Estudamos alguns modelos sobre o funcionamento da memória propostos por diferentes pesquisadores em diferentes épocas. Não vou entrar em detalhes sobre cada um deles, mas todos se relacionam ou com memórias de curto e longo prazo ou com memória de trabalho (ligada mais a representações visuais e fonológicas do que ao tempo) ou com relações entre todos estes tipos de memória, com alguns alicerces semânticos e sintáticos da informação que pode ser armazenada.

Aí vão alguns links sobre diferentes tipos e modelos de memória vistos em aula:

Artigo sobre memória da Wikiédia

Modelo de memória proposto por Atkinson & Shiffrin em 1968

Modelo de memória proposto por Baddeley & Hitch em 1974

Modelo de memória proposto por Craik & Lockhart em 1972

Obrigado pessoal, até a próxima!

Nem tudo é o que parece ser

outubro 11th, 2009

Quarta-feira (07/10) tive outra aula de psicologia cognitiva, que foi muito interessante por sinal. Demos início aos estudos sobre percepção e sistemas sensoriais – mecanismos do nosso organismo e da nossa mente utilizados para a representação do mundo.

Antes de dar continuidade, gostaria de salientar como é curioso o fato de que muitas vezes temos idéias e opiniões sobre um determinado assunto, mas só nos convencemos e começamos a crer realmente nestas hipóteses quando presenciamos algo sistematizado pleiteando o que acreditávamos. Foi mais ou menos o que ocorreu nesta aula – Minhas idéias e noções acabaram sendo confirmadas, principalmente pelo caráter científico como as explicações foram realizadas.

O que é a realidade?

realidade_ilusao

Percebem como a nossa mente insiste em nos mostrar coisas que não existem? Pois foi justamente esta a idéia principal da última aula – ilustrar através de ilusões de ótica e de explicações científicas sobre como funciona a percepção do ser humano, para evidenciar o fato de que o mundo como o observamos e percebemos pode não ser o mesmo que outros seres percebem.

Conhecemos os 5 mecanismos de nosso organismo utilizados para a nossa percepção do mundo externo, os 5 sentidos (visão, audição, olfato, paladar e tato). Podemos extendê-los através destes fatores:

Visual: Radiação eletromagnética;

Audição: Pressão do ar;

Química: Moléculas e íons;

Somestesia: Pressão/lesão mecânica e temperatura;

Propriocepção: Posição do corpo;

Interocepção: Pressão/lesão internas.

Como pode ser notado, estes mecanismos funcionam cada um de acordo com um tipo de interferência externa ao organismo, fazendo com que ele reaja de formas variadas, criando assim a nossa percepção.

Nesta aula nos concentramos em estudar a influência da luz em nossos olhos, que gera a visão, e a influência da pressão do ar em nossos ouvidos, que gera a audição.

Assistam esta explicação sobre o funcionamento da audição humana e esta explicação sobre o funcionamento da visão humana.

É evidente que em outros seres vivos, ou mesmo em alguns humanos com deficiências nestes sistemas sensoriais, qualquer alteração no esquema de lentes, cones, bastonetes, retina, entre outros componentes do olho ou no tímpano, nos ossículos e em outros componentes do ouvido, a percepção do mundo também é alterada, evidenciando como pode (ou não) ser limitado o nosso conhecimento sobre o “mundo real”.

Um fato interessante que ocorre frequentemente com as nossas mentes é a ilusão baseada em nossas experiências diárias, vejam este exemplo:

furos1

Percebam que há saliências nas colunas laterais e central da imagem acima e concavidades na segunda e na terceira coluna. Isto na verdade é o que a maioria das pessoas percebem, uma ilusão causada pela nossa mente pelo simples fato de que estamos acostumados com luz que vem de cima (em casa, na rua, o sol, a lua, etc), se estas luzes do nosso dia-a-dia viessem de baixo, o efeito seria contrário.

Nesta aula ainda vimos alguma coisa sobre os nossos limites de percepção – limites máximos e mínimos de frequencias visuais e auditivas que um ser humano pode perceber, e as maneiras como isto também pode se tornar um fator limitante do nosso conhecimento sobre o que realmente ocorre ao nosso redor.

Todos estes assuntos me remetiam sempre à mesma história da Caverna de Platão e pretendo dedicar um post exclusivo a este tema.

É isto aí, as aulas estão ficando mais interessantes a cada dia, não deixem de acompanhar as seguintes! ;)

Enquanto isso, divirtam-se com algumas ilusões de ótica e surpreendam-se com o poder da nossa mente…

Gnothi Seauton

outubro 6th, 2009

Segunda-feira passada (28/09) iniciaram as aulas do 3º trimestre na UFABC. Cursarei 4 disciplinas durante estes 3 meses: Algorítimos e Estruturas de Dados I, Introdução às Equações Diferenciais e Ordinárias, Transformações Químicas e Psicologia Cognitiva.

Darei uma atenção especial a esta última disciplina, ministrada pelos professores Dr. Peter Maurice e Dr. Yossi Zana. Através de posts tentarei expor as aulas, trabalhos, experimentos e minhas idéias sobre o tema.

O título do post Gnothi Seauton, do grego, Conhece-te a ti mesmo,  foi utilizado em minha primeira aula de psicologia cognitiva para ilustrar a idéia central da disciplina.

Gnothi Seauton

Vitral com a versão contraída de γνῶθι σαυτόν

Ainda estamos nas aulas introdutórias, não me aprofundarei, portanto, sobre elas nestes primeiros posts (Introdução à psicologia cognitiva e Neurociência cognitiva)

Segue abaixo alguns temas e assuntos que serão explorados em futuros posts, baseados nas aulas, não necessariamente em ordem cronológica:

Percepção – Quais são os mecanismos cognitivos que nos possibilitam representar o mundo externo.

Atenção e consciência – O  que é consciência e qual é sua relação com atenção.

Memória – O que afeta nossa habilidade de recuperar informações da memória.

Representação de informação – Há sons e imagens em nosso cérebro?

Linguagem – Como entendemos e produzimos a fala.

Solução de problemas e criatividade – Quais estratégias são utilizadas para resolver problemas.

Tomada de decisão e racionalização – Como tomamos uma decisão.

Emoção e motivação – Como estados afetivos influenciam processos cognitivos.

Inteligência humana e artificial – Humanos são mais inteligentes do que computadores?

Espero que os assuntos despertem alguma curiosidade, pois pretendo explorá-los de forma peculiar, com exemplos práticos e argumentos científicos.

Até as próximas!