Se o preço da goiaba subir, a bolsa vai…

Esse é um post sobre um interessante artigo que saiu na Science mês passado.

O jogo do ultimato, foi criado por estudiosos de economia e de teoria dos jogos. Nesse jogo, uma banca oferece uma quantia fixa de dinheiro a dois jogadores. O primeiro jogador recebe todo o dinheiro e faz uma proposta de divisão do dinheiro para o segundo jogador, oferecendo uma parcela do dinheiro. O segundo jogador tem a chance de avaliar a proposta. Se achá-la boa pode aceitá-la e o dinheiro é dividido como proposto pelo primeiro jogador. Mas se o segundo jogador achar a proposta muito baixa, pode recusá-la. Se isso ocorrer, então nenhum dos dois leva nada.

A ação mais racional nesse jogo seria a de aceitar sempre a proposta do primeiro jogador, não importando qual ela fosse. Porém, na prática, seres humanos tendem a querer punir os jogadores que oferecem propostas injustas, rejeitando-as.

A serotonina (5H-T) é um neurotransmissor conhecido por regular o humor. Ela é alvo de vários anti-depressivos que ajem inibindo sua recaptação nas sinapses (o PROZAC é um deles). O efeito dessas drogas é o de manter a serotonina ligada por mais tempo em seus receptores, compensando uma teórica diminuição de seus níveis no cérebro (principalmente em casos de depressão).

Um dos precursores da serotonina no organismo é o aminoácido triptofano. Se houver uma falta aguda de triptofano no organismo, então a via metabolica de produção de serotonina é desligada.

O artigo que citei no ínicio do post, trata de um estudo onde pessoas passaram por uma depleção aguda de triptofano em suas dietas e então foram submetidas ao jogo do Ultimato. Os resultados foram comparados com o de pessoas com dietas com níveis normais de triptofano E o resultado foi então meio surpreendente: essas pessoas passaram a rejeitar com maior frequência propostas menos justas do que pessoas com dietas normais. Estariam então o humor e o senso de fair-play ligados? ;-)

Mas o que eu mais gostei foi como uma manipulação da bioquímica do cérebro humano pôde alterar o comportamento e influenciar diretamente na tomada de decisões de pessoas.

E o que o título do post a ver com tudo isso? Bom, na verdade o título é uma situação hipotética (e meio exagerada) que eu imaginei: é sabido que a goiaba é uma fruta que possui níveis altos de triptofano. Imaginem agora se o preço da goiaba sobe muito e pessoas que compram e vendem ações na bolsa de valores param de comer goiaba. A bolsa vai cair? Subir? A resposta eu deixo para os especuladores :-)

Biologia, Economia, Teoria dos Jogos 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Groovy, outro sabor na JVM

(Nota do editor: Ainda na série “try a little help from my friends”, a contribuição do nosso amigo Wilson Freitas)

Desde que comecei a trabalhar com linguagens fortemente tipadas, passei a tratar tipagem estática como um dogma. Simplemente não fazia sentido usar uma linguagem que não verificasse os tipos em tempo de compilação. Com o tempo algumas linguagens começaram a despontar na mídia: Ruby e Python são duas que despertaram minha curiosidade. Mas a enorme inércia de anos e anos trabalhando na plataforma Java tratou de matar minha vontade de aprender (mais) uma linguagem de programação.

Quando falo de anos trabalhando com Java, não estou me referindo apenas à linguagem, mas a todo o mundaréu de frameworks e especificações tais como Hibernate, Struts, Spring, Jakarta*, EJB, JNDI, JMS, e mais trocentas mil coisas que não cabem neste post. É muito difícil para um profissional abrir mão de toda essa parafernália que gastou anos aprendendo pra começar a trabalhar com uma linguagem completamente nova, tendo que descobrir como fazer aquelas coisas que em Java estão “na ponta da língua”.

Então, um belo dia eu vi um artigo qualquer sobre uma tal de Groovy. A princípio achei que era mais uma linguagem: “putz, pra que o povo inventa tanta linguagem!”, mas algumas coisas me chamaram a atenção:

  • Assim como Ruby, Groovy é uma linguagem dinâmica que permite malabarismos impensáveis em Java.
  • Groovy tem um interpretador que gera Java byte code sob demanda, que em seguida é executado por uma JVM comum, o que permite criar scripts que podem ser executados diretamente na linha de comando.
  • Groovy é um “sabor” de Java. A sintaxe é muito parecida, o que a torna muito fácil para quem já está acostumado com o velho Java.
  • Como no final das contas tudo é byte code, classes Java podem ser instanciadas em código Groovy e vice versa, ou seja, todos os milhares de trecos que já foram escritos em Java podem ser usados dentro de código Groovy.

Estas características do Groovy me convenceram que valia a pena estudar a linguagem, que vem sendo a minha porta de entrada para o paradigma de linguagens dinâmicas. Ainda não estou usando o Groovy no desenvolvimento em si, mas como uma ferramenta de apoio a algumas tarefas do dia a dia, como processamento de arquivos em lote por exemplo.

Não vou alongar este post enumerando as features do Groovy, mesmo porque elas podem ser facilmente encontradas no site oficial, vou me limitar a mostrar dois trechos de código, um em Groovy e outro em Java, que executam a mesma tarefa, que é aplicar um filtro uma lista de mapas, gerando uma segunda lista com os itens filtrados.

código JAVA

import java.util.*;

public class ExemploJava {

public static void main(String[] args) {
  new ExemploJava().rodarExemplo();
}

public void rodarExemplo(){
  List<Map<String, Object>> personagensLost =
  new ArrayList<Map<String,Object>>();

  personagensLost.add(obterPersonagem("Kate", 28));
  personagensLost.add(obterPersonagem("Jack", 38));
  personagensLost.add(obterPersonagem("Desmond", 39));
  personagensLost.add(obterPersonagem("Hurley", 27));
  personagensLost.add(obterPersonagem("Locke", 50));
  personagensLost.add(obterPersonagem("Walt", 12));

  List<Map<String, Object>> personagensFitrados =
  new ArrayList<Map<String,Object>>();
  for (Map<String, Object> personagem : personagensLost) {
   Integer idade = (Integer)personagem.get("idade");
   if(idade >= 20 && idade <= 30){
    personagensFitrados.add(personagem);
    System.out.println(String.format(
     "Personagem [%s] filtrado",
     personagem.get("nome")));
   }
  }
 }

private Map<String, Object> obterPersonagem(String nome, Integer idade) {
  Map<String, Object> mapa = new HashMap<String, Object>();
  mapa.put("nome", nome);
  mapa.put("idade", idade);
  return mapa;
 }
}

e o código equivalente Groovy

def personagensLost = [
 [nome:"Kate", idade:28]
 ,[nome:"Jack", idade:38]
 ,[nome:"Desmond", idade:39]
 ,[nome:"Hurley", idade:27]
 ,[nome:"Locke", idade:50]
 ,[nome:"Walt", idade:12]
]

def personagensFiltrados =
 personagensLost.findAll{ (20..30).contains(it.idade) }

personagensFiltrados.each {
  println "Personagem [${it.nome}] filtrado"
}

Ao comparar as duas versões desse programa, o que mais me chama a atenção não é a diferença de linhas de código, mas sim a clareza do Groovy em comparação com o Java. O fato de listas e mapas serem construções nativas da linguagem tornam as tarefas relacionadas a estas estruturas de dados muito mais simples, e o código mais inteligível.

Obviamente eu poderia usar uma lib como commons collections para filtrar os elementos da lista na versão Java, mas minha idéia aqui é comparar as linguagens usando apenas as APIs comuns, incluídas com o development kit padrão. Eu inclusive criei um método privado para reduzir o volume de código Java, mas mesmo assim, a diferença de linhas de código é grande. Não significa que isso vai ocorrer para todos os casos, nem significa que Groovy Rocks e Java Sucks. O que quero mostrar é que o Groovy é uma ferramenta extremamente útil para profissionais proficientes em Java que querem enveredar pelo mundo das linguagens dinâmicas, sem ter que abrir mão do SimpleDateFormat quando ele for necessário.

Wilson Freitas é arquiteto de sistemas com 12 anos de experiência em desenvolvimento de software. Atualmente trabalha na Vetta Technologies. Bacharel em Ciência da Computação pela UFBA.

Desenvolvimento 1 Comentário

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Príncipes Modernos

Quanto mais eu leio notícias sobre os negócios das grandes corporações, mais eu penso que Maquiavel seria um consultor milionário se vivesse no nosso tempo. Hoje eu li (veja o texto aqui) que o Yahoo! vai ceder seu sistema de busca para qualquer um poder colocar no próprio site, em troca do direito de colocar anúncios nas respostas. Isso depois do Jerry Yang (executivo-chefe e um dos fundadores do Yahoo!) criticar duramente a “política de desestabilização” que a Microsoft estaria promovendo contra o grupo e em particular contra sua direção.

Ele se referia às declarações feitas pela Microsoft que diziam que a empresa ainda estava disposta a comprar o Yahoo! mas que isso não será possível enquanto a atual direção estiver no poder mas que a situação pode ser diferente e as negociações podem se concretizar caso um novo conselho de diretores seja eleito na próxima assembléia-geral do grupo, marcada para 1o. de agosto.

Duas manobras maquiavélicas clássicas para conseguir aliados. A da Microsoft criando inimigos do príncipe dentro dos seus próprios domínios e a do Yahoo! firmando alianças com os pequenos para se fortalecer ante os grandes. Acho que Maquiavel aprovaria as duas condutas e penso que mesmo o Carl Icahn (grande acionista do Yahoo!, que tenta renovar completamente o conselho de diretores e que pretende substituir Yang) também, pois ao mesmo tempo em que ele ganhou preciosos aliados na base de acionistas, ele se befeficia de um Yahoo! mais forte diante da Microsoft, o que seria intere$$ante até mesmo no caso de uma possível venda.

Internet, Negócios 0 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Google e os Mundos Virtuais

Com o lançamento do Lively, o Google se aventura pela mercado de Mundos Virtuais, ou quase isso. Ao contrário do Second Life, o Lively utiliza o conceito de quartos virtuais (virtual rooms), espaços 3D de dimensões reduzidas se comparadas às de uma ilha do SL.

Google Lively

Os usuários Lively podem criar seu próprios quartos contendo, além de mobília e decoração virtuais (com uma biblioteca interessante e que pode receber contribuições de terceiros), fotos e vídeos vindos diretamente do YouTube, óbvio. O interessante do sistema é a capacidade de embutir tais quartos em páginas WEB normais e assim permitir a qualquer um que esteja navegando pela página o acesso a um ambiente 3D, diretamente no browser (IExplorer 7 e Firefox por hora).

Agora é só esperar o Google abrir a API do Lively (como tem feito com suas outras aplicações) para nós aqui do VettaLabs tornarmos a “brincadeira” ainda mais divertida com nossos cachorros virtuais inteligentes ;-).

Mundos Virtuais, Web 2.0 1 Comentário

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Weka

Depois dos 2 excelentes posts do Lúcio sobre Machine Learning (ML), você pode estar se perguntando: mas como utilizo tudo isso na prática? Neste post irei apresentar (sem detalhes para não ficar chato) uma ferramenta bastante difundida e utilizada no mundo na área de ML: o Weka (Waikato Environment for Knowledge Analysis).

Weka é um pacote de código aberto (com licença GNU General Public License) composto de algoritmos de ML implementados em Java. Seu desenvolvimento foi iniciado em 1993 e ficou nas mãos de uma equipe da Universidade de Waikato na Nova Zelândia durante aproximadamente 13 anos. Em 2006, o projeto foi incorporado ao conjunto de soluções de uma empresa de BI chamada Pentaho.

A versão mais recente conta com diversos algoritmos de ML implementados, incluindo algoritmos de clustering, classificação, regras de associação e regressão. Além dos algoritmos, também conta com uma gama de implementações relacionadas com pré-processamento dos dados, filtros e interfaces para visualização. Para entrada de dados, o Weka permite os formatos ARFF (formato desenvolvido especificamente para o Weka), CSV e leitura diretamente do banco de dados via JDBC. Além da possibilidade de utilizar o Weka incluído no seu código Java, também é possível utilizar uma ferramenta gráfica chamada de Explorer para entrada de dados e execução dos algoritmos. Pelo Explorer, você pode ter uma visão gráfica dos seus dados de entrada, executar facilmente diferentes filtros e algoritmos e realizar avaliações dos modelos. Porém, ao lidar com quantidades muito grandes de dados (o que geralmente é o caso na utilização de ML) e também para automatizar o processo, é melhor utilizar o Weka diretamente no seu código.

O código do projeto é muito bem estruturado e escrito, adotando as melhores práticas e padrões de desenvolvimento orientado por objetos. Em um projeto desenvolvido aqui no Labs, tive que modificar o código de um filtro para adaptá-lo aos nossos requisitos. E essa tarefa não foi um bicho de sete cabeças, mesmo sendo um código totalmente desconhecido a princípio.

Pra finalizar, gostaria de deixar uma dica de um excelente livro para os interessados no assunto, tanto de Machine Learning e Data Mining em geral quanto do Weka. O livro é Data Mining: Practical Machine Learning Tools and Techniques.

Data Mining 5 Comentários

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Como criar uma startup de tecnologia inovadora?

Quando eu estava terminando minha graduação (sem datas, OK? ;-)) havia muitos amigos meus com excelentes idéias para produtos inovadores que só precisavam de um empurrãozinho para decolarem e se tornarem um grande sucesso. Pelo menos isso é o que pensávamos à época. Na verdade criar um produto de sucesso a partir de uma idéia brilhante exige “um pouco mais” que um simples empurrãozinho.

O empurrão inicial é a parte fácil, na verdade. Com ele você resolve metade do problema que é transformar sua idéia brilhante em um produto. A outra metade do problema consiste em transformar o produto em um produto de sucesso. Essa é a parte difícil. Mas vamos por partes. Eu quero discutir cada um dos pontos em posts separados, para o texto não ficar muito grande.

Felizmente a cultura tanto do governo quanto do empresariado brasileiro mudou muito nos últimos anos. Hoje há inúmeras maneiras de se conseguir dinheiro do governo e do setor privado para o desenvolvimento de projetos de Pesquisa e Desenvolvimento (P&D). Se você tem uma idéia inovadora e precisa de dinheiro para transformar essa idéia em um produto (nem que seja apenas para se pagar enquanto você gasta seu tempo em seu projeto ao invés de procurar um emprego), a receita é, na verdade, muito simples.

  1. Certifique-se que sua idéia é realmente uma inovação. Parece ridículo mas o fato é que a maioria das pessoas têm uma idéia totalmente errada sobre o que é inovação. inovação não é uma novidade científica com cara de produto. Para se tornar uma inovação, a novidade tem de criar ou transformar um produto para o qual há demanda de mercado. Não existe inovação sem mercado. Um produto só é inovador se ele tem potencial para modificar o mercado em que está inserido. Desta forma um software capaz de resolver o problema do caixeiro viajante em tempo polinomial não seria uma inovação, mesmo sendo uma tremenda novidade científica.
  2. Para conseguir dinheiro do governo ou do setor privado, você precisará provar não apenas a viabilidade técnica da sua idéia mas também (e até mais importante) a sua viabilidade comercial. Minha sugestão é que você gaste um tempo escrevendo um relatório para você mesmo sobre sua idéia. Isso ajuda a pensar sistematicamente em todos os pontos e ainda te dá a base do que você vai precisar para entrar com um pedido de verba em um edital público ou para elaborar um plano de negócio para um investidor capitalista.
  3. Se após concluir o passo anterior você ainda acredita que seu produto é uma inovação e quer buscar dinheiro para financiar seu desenvolvimento, você precisa decidir de onde você vai buscar dinheiro. Há 3 opções mais comuns: (1) Contratar empréstimo junto ao BNDES, FINEP ou outro órgão de fomento (você vai precisar devolver o dinheiro em algum momento); (2) Levantar investimento do setor privado junto a fundos de “capital semente” ou investidores pessoa física e (3) Entrar em editais públicos de entidades de fomento a pesquisa e inovação como CNPq, FINEP e FAPEMIG.

Quanto ao relatório, você tem de ser capaz de descrever sua idéia em 4 parágrafos. Cada um respondendo a cada uma das seguintes perguntas: (1) “O quê é o seu produto?” (2) “Para quê ele serve?” (3) “Por quê o mercado precisa dele?” (4) “Como você vai conseguir implementá-lo?”. Em seguida você precisa explicitar a forma como o mercado será afetado por seu produto: quais são seus possíveis clientes, quais são seus potenciais concorrentes (diretos e indiretos), como seus concorrentes vão responder ao lançamento do seu produto e qual é sua vantagem competitiva para enfrentá-los. Na minha opinião, ter pensado em todas essas questões é o mínimo para você ao menos pleitear recursos em um edital público ou de um investidor capitalista.

    O BNDES tem uma série de linhas de empréstimos com juros subsidiados pelo governo apropriados para a criação de novos produtos. É relativamente fácil conseguir um empréstimo desses mas há o risco do produto acabar sendo um fiasco e você terminar o processo com uma bela dívida. A FINEP tem um programa de financiamento a juro zero (http://www.jurozero.finep.gov.br/jurozero_prod), bem mais interessante porque eles cobram apenas a correção monetária do valor emprestado mas mesmo assim o risco do endividamento em caso de fracasso continua. Para fugir desse risco (ou transferí-lo para outra pessoa ;-) você pode buscar um sócio capitalista para seu novo negócio ou dinheiro público através de editais.

    Os fundos de capital semente estão se tornando cada vez mais comuns. A grande vantagem de ir por esse caminho, na minha opinião é que o dinheiro vem acompanhado de duas coisas muito importantes para o sucesso do seu produto (que eu espero discutir em maiores detalhes no próximo post): (1) consultoria em gestão empresarial feita pelos próprios investidores, que em geral são empresários experimentados que têm todo o interesse em ver seu produto virar um sucesso dado que eles serão seus sócios e (2) uma lista de contatos a que você dificilmente teria acesso se trabalhasse sozinho. O principal ponto negativo é óbvio: sua participação nos lucros fica diluída. A pergunta neste caso passa a ser se sua expectativa para o crescimento do “tamanho do bolo” compensa ou não a “fatia menor” do bolo que você terá no final das contas.

    Quanto aos editais, esses estão também cada vez mais populares e mais pródigos. A FINEP, por exemplo, tem um edital de subvenção econômica que financia projetos da ordem de 1 a 3 milhões de reais. CNPq e FAPEMIG também têm uma série de editais interessantes para projetos menores. A vantagem dessas agências é que elas publicam vários editais diferentes ao longo do ano de forma que se você for persistente e tiver de fato um bom projeto em mãos as chances de conseguir algum dinheiro é muito grande. Note que você não precisa estar associado a nenhuma instituição de ensino ou pesquisa para participar da maioria desses editais. De fato, uma boa parte desses é direcionada exatamente para pequenas empresas ou pesquisadores individuais.

    Continuo a discussão no próximo post.

    Inovação 7 Comentários

    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...

    Aprendizagem de Máquina ao Alcance de Todos - (2)

    Voltando sem muitas delongas ao exemplo da primeira parte desse artigo, vamos considerar novamente o nosso banco de dados de pessoas caracterizadas cada uma por um “registro” seguindo o mesmo formato, com campos de peso, altura, idade, sexo, etc. Agora, vamos supor que além dessa caracterização por dados biométricos sabemos que essas pessoas estão classificadas em dois grupos, digamos que com e sem histórico de problemas cardíacos. Em jargão de biologia, as pessoas com histórico cardíaco são “Casos”, as sem são “Controles”.

    Em Aprendizagem de Máquina, a chamada Aprendizagem Supervisionada consiste em treinar um “modelo” (uma função ou algoritmo de classificação) a reconhecer casos e controles automaticamente. É o tipo de problema aplicável exatamente a massas de dados com informação de categoria, como a do exemplo acima. Essa massa de dados é chamada de “conjunto de treinamento”, justamente porque sua função é servir como uma coleção de exemplos que são usados para “dizer” ao classificador onde ele está errando e onde ele deve melhorar - daí o “supervisionado” no nome desse tipo de aprendizagem.

    Exatamente como um método de classificação pode conseguir resultados melhores ou piores dado um conjunto de exemplos? Bom, existem inumeráveis algoritmos de aprendizagem supervisionada - redes neurais, métodos evolutivos, árvores de decisão, todos eles podem ser usados para classificação. Para fins didáticos, porém, vou focar aqui em um método bem geométrico, as SVMs (do Inglês Support Vector Machines).

    Como já disse na Parte 1, cada “campo” do banco de dados descrevendo as coisas sendo classificadas (no exemplo pessoas) é visto como uma dimensão (no sentido espacial da coisa mesmo) em aprendizagem de máquina. Se os registros tiverem só três campos - digamos, peso, altura e idade - temos três dimensões, e as pessoas são “vistas” por um algoritmo de ML como pontos num espaço tridimensional com eixos de idade, peso e altura. Assim Fulano pode ocupar o ponto em 1,80 metros, 75 quilos e 36 anos, enquanto Beltrano está no ponto 1,72m, 60Kg, 28a. Esse é um exemplo não tão difícil de visualizar porque usa um espaço tridimensional como aquele de largura, comprimento e altura onde vivemos, mas na prática os problemas de ML lidam quase sempre com “hiperespaços” multidimensionais. Em problemas de Bioinformática são comuns espaços com milhares de dimensões, por exemplo.

    De qualquer forma, voltando às SVMs, o que elas fazem é (supersimplificando a coisa) encontrar uma “hipersuperfície” que divide esse “espaço” do problema em dois lados. Uma divisão boa é aquela que deixa os pontos representando Casos de um lado da superfície e os pontos representando Controles do outro lado. No nosso exemplo das pessoas com e sem problemas cardíacos ocupando um espaço tridimensional, vamos enxergar o espaço 3D como um cubo e supor que a maioria dos casos ocupa a metade do cubo correspondendo a pessoas com mais peso e mais idade, enquanto os controles se concentram nas pessoas mais novas e magras. Um plano cortando o cubo em dois na diagonal, paralelo ao eixo de altura, já dá uma divisão razoável então. Talvez essa divisão razoável deixe muitos pontos ainda nos lados errados, então podemos experimentar outras coisas como inclinar o plano (talvez em relação ao eixo de altura, para fatorar pessoas que são pesadas porque são grandes), ou mesmo experimentar uma superfície que não seja plana, mas sim curva, correndo em uma forma meio ondulada que divida os dois conjuntos de pontos quase perfeitamente. (No caso de SVMs, o tipo de superfície é determinado pela chamada “função de kernel” - que no caso do plano é uma função linear.)

    Finalmente, é interessante também computar a superfície de forma a que, além de separar o mais corretamente possível os pontos, ela também mantenha uma certa distância desses pontos, sem “passar raspando” em nenhum deles. Isso tem a ver com o que talvez seja a mais desejada e mais difícil de obter das características de um bom classificador: a capacidade de generalização. Isto é, a capacidade de corretamente classificar elementos novos, desconhecidos, que não estavam no conjunto de treinamento. No caso das SVMs, podemos visualizar que uma superfície correndo muito “rente” pelos pontos limítrofes da, digamos, Categoria Caso, pode erroneamente classificar um monte de pontos como Controle, mesmo eles caindo perto dos pontos de Caso, simplesmente porque a superfície está rente demais e não inclui pontos próximos que provavelmente também são Casos. Em casos assim, podemos “antropomorfizar” o que aconteceu dizendo que o classificador na verdade não aprendeu nada, apenas “decorou” os pontos que foram mostrados a ele…

    No fim das contas, todo classificador gerado por aprendizagem supervisionada faz essencialmente a mesma coisa que a SVM - seccionar o espaço do problema em regiões correspondentes a categorias. Só que eles trabalham sob princípios que não são tão obviamente geométricos (e didáticos) como no caso da SVM, daí não vou falar sobre eles aqui. Finalmente, aprendizagem supervisionada não é categorização - coisas como regressão simbólica também caem nessa subdivisão de ML. Mas acho que isso já fugiria um pouquinho do nível “feijão com arroz” implicado pelo título. :)

    Inteligência Artificial 1 Comentário

    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...

    “Serve o vinho celeste, Ganymede”

    Jupiter: …”Pour forth heaven’s wine, Idaean Ganymede, And let it fill the Daedal cups like fire.” Percy Bysshe Shelley, Prometheus Unbound

    Na mitologia grega, Ganimedes era um príncipe troiano, filho de Tros, cuja beleza arrebatou Zeus (ou Júpiter na mitologia romana) de tal forma que ele mandou uma águia (ou se transformou em uma, dependendo da versão) para raptá-lo e levá-lo para o Olimpo. Lá, tornou-se um dos amantes de Zeus e copeiro dos deuses. Ganimedes também é a maior lua de Júpiter e a maior do sistema solar e foi a terceira descoberta por Galileu Galilei.

    Agora, além desses significados, Ganymede (Ganimedes em inglês) também denomina a nova versão anual dos projetos da Eclipse Foundation lançada ontem, dia 25 de junho. Precedida por Europa e Callisto, ela é uma coleção de 23 projetos distintos, cujas novas versões são lançadas de forma coordenada, para evitar incompatibilidades entre eles e facilitar a vida dos usuários.

    Apesar do Eclipse poder ser usado para o desenvolvimento em C, C++, Ruby e Python, o lançamento dessa nova versão é particularmente relevante para a comunidade de desenvolvimento Java, posto que o Eclipse tornou-se uma das IDEs mais utilizadas pelos desenvolvedores dessa linguagem. Algumas mudanças mais visíveis estão na IDE, como melhorias na área de assistência de contexto (as teclas Ctrl+Espaço), novos tipos de refactoring, uma nova interface para atualização de plugins, dentre outras novidades além de correções de bugs da versão anterior. Porém, há atualizações igualmente interessantes em outras áreas, como as novas versões da ferramenta de relatório BIRT e do Mylyn, um plugin de interface focada em tarefas (task-focused interface) e que faz integração entre a IDE e ferramentas de rastreamento de issues como o Bugzilla e o Trac, e novas adições como o Rich Ajax Platform (RAP), que permite a construção de aplicações Web baseadas em AJAX usando o mesmo modelo de desenvolvimento de aplicações RCP. Porém, nem tudo são flores: o suporte nativo ao sistema de controle de versão Subversion, outra adição bastante esperada, não está totalmente “transparente” como o do CVS. Para ativá-lo, é necessário que o usuário faça o download de componentes localizados em servidores fora da Eclipse Foundation, sendo que um deles possui versão compilada apenas para Win32 (no caso o conector JavaHL).

    Para aqueles que querem instalar a nova versão, basta visitar o site do Eclipse Ganymede, onde também se encontra a lista com as mudanças ocorridas. E “deixa-o encher as taças como fogo”. :-D

    Paulo Ferreira de Moura Junior, é arquiteto de sistemas com passagem em empresas como a Borland do Brasil e Vetta Technologies. Bacharel em Ciência da Computação pela UFMG, trabalha atualmente na Geolabs.

    Desenvolvimento 0 Comentários

    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...

    Aprendizagem de Máquina ao Alcance de Todos - (1)

    Volta e meia surge algum artigo aqui no blog falando de aplicações de inteligência artificial e frequentemente usando termos que podem soar meio misteriosos para muitos, como o críptico “aprendizagem de máquina”, às vezes também usado em sua forma original em Inglês, “machine learning”. Penso que talvez esse termo pode ainda evocar na cabeça de muitos uma imagem de coisa scifi incompreensível, então decidi escrever este artigo (em dois “capítulos”) sobre o beabá da aprendizagem de máquina para mostrar que, uma vez explicado, o tal Machine Learning (ou ML) pode até parecer meio prosaico…

    A definição vaga e por alto (e não sei se existe uma definição exata e profunda, a propósito :) de ML como um todo é: um método ou algoritmo para descobrir de forma automatizada padrões em uma massa de dados. Acho que essa definição não diz muito coisa sem exemplos, então vamos dar alguns nomes a alguns bois.

    Vamos supor que você tenha um banco de dados com características de várias pessoas. As características podem ser qualquer coisa (digamos, peso, altura, idade, etc), desde que possam ser comparadas de forma quantitativa ou lógica. Esse conjunto de valores de características descrevendo cada pessoa é chamado vetor de características, em jargão de ML.

    Já que o valor da altura de uma pessoa é comparável com o valor da altura de outra, o mesmo acontecendo com peso, idade e demais dimensões (=outro jargão de ML - bem, na verdade de ciências exatas em geral, nesse caso :) do vetor de características, então acaba que dois vetores inteiros podem ser comparados um com o outro, levando em conta todas as suas dimensões ao mesmo tempo. É possível criar o que chamamos de medida de similaridade, que é simplesmente uma conta envolvendo todas as dimensões de dois vetores que no final solta um número - quanto mais alto esse valor, mais similares são esses vetores.

    De posse dessa medida, já é possivel fazer coisas divertidas em ML - por exemplo juntar as pessoas parecidas umas com as outras, dividindo o conjunto original em vários subconjuntos de pessoas parecidas. Esse tipo de processo é o chamado clustering - ou aglomeração, traduzindo - e é a base da vertente de ML chamada de aprendizado não-supervisionado.

    A parte do “aprendizado” nesse nome vem do fato de que antes os elementos do conjunto de dados sendo analisado eram completamente amorfos, não-estruturados, “farinha do mesmo saco” por assim dizer; após o clustering, porém, temos grupos separados nos quais veremos padrões. No exemplo do clustering de pessoas, talvez se forme um aglomerado de pessoas baixas e gordas, outro de pessoas altas, um de pessoas velhas de peso médio, e por aí vai.

    Já a parte do “não supervisionado” vem do fato de que não é preciso dizer ao algoritmo de clustering sendo usado (existe uma infinidade deles) se os resultados que ele está produzindo são bons ou ruins, ele mesmo toma suas próprias “decisões” de como fazer melhor a aglomeração. Aliás, é difícil dizer quantitativamente e de forma geral, irrestrita, se um clustering é bom ou ruim, no sentido de que é algo um tanto subjetivo - existe uma multiplicidade de métricas de qualidade de clustering, com aplicações apropriadas caindo em vários casos diferentes.

    Existe também, é claro, a aprendizagem supervisionada, o outro grande campo da Aprendizagem de Máquina. Mas isso é assunto para a Parte 2 deste artigo…

    Data Mining, Inteligência Artificial 0 Comentários

    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...

    Interfaces telepáticas: quando o Mundo do Amanhã chega hoje mesmo

    Recentemente, surgiu aqui no Labs um anteprojeto de um projeto para talvez, quem sabe, trabalharmos com a identificação automática de fases do sono em “polissonografias”, que são dados neurofisiológicos e cardio-respiratórios coletados de pessoas dormindo. A parte neurofisiológica da coisa serviu de inspiração para eu escrever este artigo acerca das “interfaces telepáticas”, como as chamo. Alguns diriam que “interfaces neurais” talvez seja um termo melhor, mas gosto das imagens de pulp scifi que “telepáticas” evoca. :)

    Aliás, o tema de interfaces capazes de ler diretamente a mente do usuário é recorrente na ficção científica. A mais antiga referência _scifi_ sobre interfaces telepáticas de que me lembro está no clássico inesquecível O Planeta Proibido. Numa das cenas desse filme de 1956, um dos personagens usa um aparelho que é capaz de ler e interpretar sua mente, inclusive mostrando as imagens em que ele está pensando. No filme, essa tecnologia é alienígena e apresentada como algo centenas de milhares de anos à frente da ciência humana - o que é bastante curioso, considerando-se que o filme se passa séculos no futuro, em uma época onde os humanos viajam pelo espaço em discos voadores antigravitacionais e cruzam anos-luz em tempos razoáveis passando pelo “hiperespaço”.

    Ou seja, esse parece ser mais um dos casos muito freqüentes em que a ficção científica acerta acerca de uma previsão sobre o futuro, mas erra feio a ordem do que virará realidade primeiro. Alguns experimentos com resultados inesperados e algumas teorias exóticas até dão alguma esperança de que um dia teremos antigravidade de disco voador ou saltos hiperespaciais como no filme, mas na melhor das hipóteses isso está num futuro imprevisivelmente distante. Já as interfaces telepáticas estão bem próximas. Mais precisamente, elas já estão aqui!

    Lembro de pesquisas sobre leitura e interpretação de sinais cerebrais desde os anos 90. Inicialmente, essas pesquisas visavam ajudar pessoas com deficiências físicas, possibilitando a sinais de seus cérebros “contornar” paralisias e outras condições. A pesquisa de anos atrás sobre a movimentação do ponteiro de um mouse usando a mente é emblemática dessa era. Porém, como era de se esperar, essas pesquisas começam aos poucos a ser aplicadas ao mercado muito mais vasto de consumidores em geral…

    Assim, há alguns meses surgiu a demonstração de uma interface de “subvocalização” para celulares, que capta os impulsos nervosos que o cérebro envia para a garganta e interpreta as palavras sem que a pessoa tenha de efetivamente verbalizá-las - ideal para ter conversas telefônicas privadas mesmo em ambientes cheios de gente. Também apareceu recentemente, e já está disponível comercialmente, um controle telepático para videogames.

    Essas aplicações envolvem análise de sinais eletroencefalográficos ou atividade de conjuntos de nervos superficiais específicos - o que certamente já rende um bom número de aplicações divertidas, como exemplificado. Porém, esse meio de aquisição de certa forma capta apenas comandos que o cérebro emite “propositalmente”. Mas a verdadeira fronteira final das interfaces telepáticas, que vai além da captação de comandos diretos do cérebro, envolve a observação direta da atividade cerebral, que potencialmente poderia levar à possibilidade de saber o que uma pessoa está realmente pensando. Uma pesquisa divulgada poucas semanas atrás por exemplo descobriu que as mesmas áreas cerebrais tendem a se ativar quando pessoas diferentes estão pensando na mesma palavra, um princípio que se bem desenvolvido poderia levar a um “leitor universal de pensamentos”. Outra aplicação relativamente recente é o detetor de mentiras com 90% de acerto. Esta última, a propósito, cai no que muitos vêem como o “lado negro” das tecnologias de telepatia artificial, já que levanta uma série de questões éticas e legais.

    É claro que, ao contrário do que acontece com as interfaces “eletroencefalográficas”, que no fim das contas usam simples eletrodos, essas aplicações bem mais ousadas observam a atividade cerebral por fMRI (do Inglês para Imagem por Ressonância Magnética Funcional), ou seja, usam máquinas enormes e caras, tornando difícil imaginar uma popularização desses métodos. Porém, avanços também recentes em magnetômetros atômicos acenam com a possibilidade de máquinas de fMRI portáteis e baratas em um futuro não muito distante. Mais espantosamente, magnetômetros atômicos poderiam em tese ser sensíveis o suficiente para monitorar o magnetismo até de neurônios individuais, podendo registrar a atividade cerebral com um nível de detalhe impensável hoje em dia. Talvez, quem sabe, até o suficiente para alcançar o “upload” tão almejado pelo movimento Trans-Humanista. Mas isso já é outra viagem, que talvez um dia eu tenha coragem de encarar em um artigo futuro. :)

    Ciências cognitivas, Inovação, Memória, Usabilidade 0 Comentários

    1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
    Loading ... Loading ...

    « Previous Entries Next Entries »