Posts de September, 2009

[Igor Macaubas] Vídeo da palestra na XIII Mostra PUC – Intro a métodos ágeis

Wednesday, September 30th, 2009

Consegui no site da PUC Digital o vídeo da minha palestra na XIII Mostra PUC. O vídeo estava com o audio muito, mas muito baixo mesmo, praticamente impossível de ouvir, mas consegui com a ajuda de algumas ferramentas de edição de vídeos aumentar o ganho do aúdio para 200% e agora dá para ouvir a palestra tranquilo.

Segue abaixo o vídeo da palestra, assim como a apresentação e algumas fotos – resolvi juntar tudo nesse post, para ficar mais fácil de achar futuramente. Também vou disponibilizar um link para download do vídeo, em formato DivX, caso você queria ter o vídeo para assistir depois, sem precisar estar conectado. Vamos lá:

Baixe o vídeo aqui, em formato DivX: Vídeo - Palestra XII Mostra PUC - Rio - (359 MB)

A apresentação pode ser visualizada abaixo:

E baixada aqui: Apresentação - Introdução a métodos ágeis - (11.89 MB)

E abaixo ficam algumas fotos da palestra:

[Felipe Santiago] Localização e Rails 2.3

Tuesday, September 29th, 2009

De vez em quando somos desafiados a desenvolver projetos que necessitam de traduções para outras línguas. Para resolver isso, usamos técnicas de localização.O Rails facilita muito a nossa vida ao guardar mensagens de erro e todo o texto customizado que você desejar traduzir em apenas um lugar.

Abaixo segue um exemplo de um trecho do arquivo de tradução com mensagens de erro do Active Record traduzidos para português:

:activerecord => {
      :errors => {
        :template => {
          :header => {
            :one => "Identificamos 1 erro nesta operação",
            :other => "Identificamos {{count}} erros nesta operação"
          },
          :body => "Por favor, confira os seguintes campos:"
        },
        :messages => {
          :inclusion => "não está incluso na lista",
          :exclusion => "não está disponível",
          :invalid => "não é válido",
          :confirmation => "é diferente da confirmação",
          :accepted  => "precisa ser aceito",
          :empty => "não pode ser vazio",
          :blank => "não pode ser vazio",
          :too_long => "é muito longo (deve ser menor que {{count}} caracteres)",
          :too_short => "é muito curto (deve ser maior que {{count}} caracteres)",
          :wrong_length => "não é do tamanho correto (precisa ter {{count}} caracteres)",
          :taken => "não está disponível",
          :not_a_number => "não é um número",
          :greater_than => "precisa ser maior do que {{count}}",
          :greater_than_or_equal_to => "precisa ser maior ou igual a {{count}}",
          :equal_to => "precisa ser igual a {{count}}",
          :less_than => "precisa ser menor do que {{count}}",
          :less_than_or_equal_to => "precisa ser menor ou igual a {{count}}",
          :odd => "precisa ser ímpar",
          :even => "precisa ser par",
        }
      },

Seguindo o tutorial, para ativar a localização em um aplicativo Rails, basta definir as seguintes configurações em seu arquivo enviroment.rb:

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = 'pt-BR'

Dessa forma, define-se uma linguagem padrão para todo o site. Se quisermos alterar a linguagem durante a renderização das páginas, passando parâmetro na URL, pode-se definir os seguintes parâmetros no application controller.

before_filter :set_locale
 
def set_locale
    # update session if passed
    session[:locale] = params[:locale] if params[:locale]
 
    # set locale based on session or default
    I18n.locale = session[:locale] || I18n.default_locale
 
    # load locale from settings
    @locale_files = []
    ['yml', 'rb'].each do |type|
      locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}"
      if File.exists?(locale_file)
        @locale_files << locale_file
        I18n.load_path << locale_file
      end
    end
  end

Como viram, é bastante fácil “localizar” em Rails. Se você desejar também traduzir o conteúdo das páginas. Veja o codigo abaixo:

},
      :home => {
        :see_more_link => "Veja mais {{more_link}}",
        :see_all_link => "Saiba tudo sobre este {{all_link}}",
        :video_box_title => "Aperitivo",
        :events_box_title => "Últimos Eventos",
        :blog_box_title => "Blog",
        :followers_box_title => "Fãs",
        :scrapbook_box_title => "Scrapbook",
        :shopping_box_title => "Shopping"
      },

Criamos um dicionário de ítens a serem traduzidos. No template HTML, você deve fazer da seguinte forma:

<h1><%= I18n.t 'txt.home.video_box_title' %></h1>

Mais uma vez comprovamos a facilidade de traduzir com Rails. Para ter o arquivo de localização completo, entre em contato comigo que eu enviarei, pois ainda não disponibilizei no github. Se for urgente, você poderá encontrar em alguns perfis onde achei o modelo para me basear.

[Felipe Santiago] Localização e Rails 2.3

Tuesday, September 29th, 2009

De vez em quando somos desafiados a desenvolver projetos que necessitam de traduções para outras línguas. Para resolver isso, usamos técnicas de localização.O Rails facilita muito a nossa vida ao guardar mensagens de erro e todo o texto customizado que você desejar traduzir em apenas um lugar.

Abaixo segue um exemplo de um trecho do arquivo de tradução com mensagens de erro do Active Record traduzidos para português:

:activerecord => {
      :errors => {
        :template => {
          :header => {
            :one => "Identificamos 1 erro nesta operação",
            :other => "Identificamos {{count}} erros nesta operação"
          },
          :body => "Por favor, confira os seguintes campos:"
        },
        :messages => {
          :inclusion => "não está incluso na lista",
          :exclusion => "não está disponível",
          :invalid => "não é válido",
          :confirmation => "é diferente da confirmação",
          :accepted  => "precisa ser aceito",
          :empty => "não pode ser vazio",
          :blank => "não pode ser vazio",
          :too_long => "é muito longo (deve ser menor que {{count}} caracteres)",
          :too_short => "é muito curto (deve ser maior que {{count}} caracteres)",
          :wrong_length => "não é do tamanho correto (precisa ter {{count}} caracteres)",
          :taken => "não está disponível",
          :not_a_number => "não é um número",
          :greater_than => "precisa ser maior do que {{count}}",
          :greater_than_or_equal_to => "precisa ser maior ou igual a {{count}}",
          :equal_to => "precisa ser igual a {{count}}",
          :less_than => "precisa ser menor do que {{count}}",
          :less_than_or_equal_to => "precisa ser menor ou igual a {{count}}",
          :odd => "precisa ser ímpar",
          :even => "precisa ser par",
        }
      },

Seguindo o tutorial, para ativar a localização em um aplicativo Rails, basta definir as seguintes configurações em seu arquivo enviroment.rb:

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = 'pt-BR'

Dessa forma, define-se uma linguagem padrão para todo o site. Se quisermos alterar a linguagem durante a renderização das páginas, passando parâmetro na URL, pode-se definir os seguintes parâmetros no application controller.

before_filter :set_locale
 
def set_locale
    # update session if passed
    session[:locale] = params[:locale] if params[:locale]
 
    # set locale based on session or default
    I18n.locale = session[:locale] || I18n.default_locale
 
    # load locale from settings
    @locale_files = []
    ['yml', 'rb'].each do |type|
      locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}"
      if File.exists?(locale_file)
        @locale_files << locale_file
        I18n.load_path << locale_file
      end
    end
  end

Como viram, é bastante fácil “localizar” em Rails. Se você desejar também traduzir o conteúdo das páginas. Veja o codigo abaixo:

},
      :home => {
        :see_more_link => "Veja mais {{more_link}}",
        :see_all_link => "Saiba tudo sobre este {{all_link}}",
        :video_box_title => "Aperitivo",
        :events_box_title => "Últimos Eventos",
        :blog_box_title => "Blog",
        :followers_box_title => "Fãs",
        :scrapbook_box_title => "Scrapbook",
        :shopping_box_title => "Shopping"
      },

Criamos um dicionário de ítens a serem traduzidos. No template HTML, você deve fazer da seguinte forma:

<h1><%= I18n.t 'txt.home.video_box_title' %></h1>

Mais uma vez comprovamos a facilidade de traduzir com Rails. Para ter o arquivo de localização completo, entre em contato comigo que eu enviarei, pois ainda não disponibilizei no github. Se for urgente, você poderá encontrar em alguns perfis onde achei o modelo para me basear.

[Felipe Santiago] Localização e Rails 2.3

Tuesday, September 29th, 2009

De vez em quando somos desafiados a desenvolver projetos que necessitam de traduções para outras línguas. Para resolver isso, usamos técnicas de localização.O Rails facilita muito a nossa vida ao guardar mensagens de erro e todo o texto customizado que você desejar traduzir em apenas um lugar.

Abaixo segue um exemplo de um trecho do arquivo de tradução com mensagens de erro do Active Record traduzidos para português:

:activerecord => {
      :errors => {
        :template => {
          :header => {
            :one => "Identificamos 1 erro nesta operação",
            :other => "Identificamos {{count}} erros nesta operação"
          },
          :body => "Por favor, confira os seguintes campos:"
        },
        :messages => {
          :inclusion => "não está incluso na lista",
          :exclusion => "não está disponível",
          :invalid => "não é válido",
          :confirmation => "é diferente da confirmação",
          :accepted  => "precisa ser aceito",
          :empty => "não pode ser vazio",
          :blank => "não pode ser vazio",
          :too_long => "é muito longo (deve ser menor que {{count}} caracteres)",
          :too_short => "é muito curto (deve ser maior que {{count}} caracteres)",
          :wrong_length => "não é do tamanho correto (precisa ter {{count}} caracteres)",
          :taken => "não está disponível",
          :not_a_number => "não é um número",
          :greater_than => "precisa ser maior do que {{count}}",
          :greater_than_or_equal_to => "precisa ser maior ou igual a {{count}}",
          :equal_to => "precisa ser igual a {{count}}",
          :less_than => "precisa ser menor do que {{count}}",
          :less_than_or_equal_to => "precisa ser menor ou igual a {{count}}",
          :odd => "precisa ser ímpar",
          :even => "precisa ser par",
        }
      },

Seguindo o tutorial, para ativar a localização em um aplicativo Rails, basta definir as seguintes configurações em seu arquivo enviroment.rb:

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = 'pt-BR'

Dessa forma, define-se uma linguagem padrão para todo o site. Se quisermos alterar a linguagem durante a renderização das páginas, passando parâmetro na URL, pode-se definir os seguintes parâmetros no application controller.

before_filter :set_locale
 
def set_locale
    # update session if passed
    session[:locale] = params[:locale] if params[:locale]
 
    # set locale based on session or default 
    I18n.locale = session[:locale] || I18n.default_locale
 
    # load locale from settings
    @locale_files = []
    ['yml', 'rb'].each do |type|
      locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}"
      if File.exists?(locale_file)
        @locale_files << locale_file
        I18n.load_path << locale_file
      end
    end
  end

Como viram, é bastante fácil “localizar” em Rails. Se você desejar também traduzir o conteúdo das páginas. Veja o codigo abaixo:

},
      :home => {
        :see_more_link => "Veja mais {{more_link}}",
        :see_all_link => "Saiba tudo sobre este {{all_link}}",
        :video_box_title => "Aperitivo",
        :events_box_title => "Últimos Eventos",
        :blog_box_title => "Blog",
        :followers_box_title => "Fãs",
        :scrapbook_box_title => "Scrapbook",
        :shopping_box_title => "Shopping"
      },

Criamos um dicionário de ítens a serem traduzidos. No template HTML, você deve fazer da seguinte forma:

<h1><%= I18n.t 'txt.home.video_box_title' %></h1>

Mais uma vez comprovamos a facilidade de traduzir com Rails. Para ter o arquivo de localização completo, entre em contato comigo que eu enviarei, pois ainda não disponibilizei no github. Se for urgente, você poderá encontrar em alguns perfis onde achei o modelo para me basear.

[Guilherme Cirne] Novos Desafios…

Sunday, September 27th, 2009

… na Globo.com!

Desde o início do mês estou fazendo parte de um novo time. Trata-se do Time Beta (Peleteiro, Meyer, Bruno Neves e eu), responsável pelo desenvolvimento de novos produtos (ou novas versões de produtos existentes). Nosso primeiro produto é o Baixatudo, cujo release inicial já está no ar. Consideramos esse release uma versão bem básica do produto. Temos muito trabalho ainda pela frente e esperamos nos próximos releases entregar um produto cada vez melhor.

O lado ruim dessa mudança é sair do time de webmedia, onde tive a oportunidade de trabalhar com pessoas fodas e aprendi bastante! Nesse tempo que estive lá, trabalhamos em projetos bem interessantes. Além disso, acredito que tivemos algumas evoluções significativas, como:

  • Melhor preparação do backlog, envolvendo os especialistas de UX junto com o PO para deixar as histórias prontas pro time implementar (ainda há muito que melhorar nisso, mas acredito que foi dado um importante primeiro passo). Mais sobre isso em um post que já está tempo demais no meu drafts;
  • Cultura de deixar bem explícito os problemas que estamos enfrentando, com dados concretos, mostrando os impactos no projeto;
  • Grande preocupação com práticas ágeis como programação em par, desenvolvimento outside-in, TDD, BDD, integração contínua, etc. Sempre feito de forma pragmática, ou seja, focado em melhorar o desempenho do time e não por se tratar da última moda.

Por outro lado, no novo time estou bastante empolgado pois volto a exercer um papel mais de desenvolvimento. Tenho certeza que vou aprender e evoluir bastante e espero poder contribuir para o sucesso dos nossos projetos.

Ah, não se esqueça, estamos contratando!

[Rafael Biriba] Evite surpresas com endereços curtos usando o LongURL

Sunday, September 27th, 2009
http://longurl.org/

http://longurl.org/

Com o aumento no uso principalmente do twitter e de outras redes sociais, o uso de urls curtas (short url) também cresceu. Junto com este crescimento, o número de golpes online usando urls falsas que apontam diretamente para sites maliciosos.

Mascarar uma url comprometida, em um dos inúmeros serviços de shorturl, é algo extremamente simples. hoje em dia…

(http://is.gd/w) é a url que aponta para o google. Ou será que não ?

Por isso, acho importante apresentar o serviço disponibilizado pela LongURL. Acessando o site http://longurl.org/, logo na página inicial, podemos utilizar o recurso extensão de url curta… Ao fazer uma consulta, ele não só mostra a url de destino (url longa), como mostra uma pré-visualização do site.

longurl-expand

Mas, o que realmente me chamou a atenção foi a ferramenta LongURL Mobile Expander, que pode ser obtida neste link: http://longurl.org/tools. Com ela você pode “extender” as urls curtas automaticamente, sem precisar entrar o tempo todo no site da longurl. Você pode obter a ferramenta como um plugin para o firefox ou como um script para o greasemonkey. Em ambos o caso, o resultado é o mesmo, como apresenta a imagem a seguir:

longurl-exemplo

Ao posicionar o mouse em cima de uma url curta, após alguns segundos, uma pequena mensagem irá aparecer com o título da página de destino e o link. Caso você ainda não fique satisfeito, é possível clicar em [more], e ir para a página do longurl onde pode-se verificar a pré-visualização do site e outras informações.

A imagem acima foi retirada do twitter, mas a ferramenta funciona em qualquer site que exiba uma url curta suportada. Mesmo que a url esteja de alguma forma camuflada num link,  ainda sim será exibida. Acesse a página http://longurl.org/static/jquery_demo.html para mais exemplos.

Atualmente a ferramenta suporta mais de 200 sites de serviços de shortener URL, dentre elas: cli.gs, migre.me, twitterurl.net, tinyurl.com, tr.im, bit.ly e etc… A lista completa está acessível em: http://longurl.org/services

Para os desenvolvedores e webmasters, existe um plugin Jquery criado pela longurl que pode ser implementado em seu site/blog. Visite a página de demonstração ou o link http://plugins.jquery.com/project/longurl para mais informações.


Leia também:


[Bruno F. M. Souza] Inserindo legendas em vídeos com o mencoder

Friday, September 25th, 2009

Outro dia estávamos discutindo sobre a melhor forma de re-codificar um arquivo de vídeo original com sua respectiva legenda renderizada sobre o stream de vídeo… Pensei logo no mencoder!!!

Isso é necessário quando não temos um player com a funcionalidade de carregar um arquivo de legenda para tocar junto com o vídeo (overlay do texto da legenda + sincronização). Um exemplo é o player do PS3 (*).

Enfim, trata-se de algo que considero bastante útil e que resolvi compartilhar por aqui…

Setup Inicial

Especifique a fonte a ser utilizada:

$ cp /Library/Fonts/Arial.ttf ~/.mplayer/subfont.ttf

Escolha a formatação desejada para a fonte:

$ vim .mplayer/config

# Write your default config options here!

ffactor="10" #black outline
sub-bg-alpha="0" #background color ala closed captions
sub-bg-color="0" #black to white
subfont-text-scale="3.7" #truetype font scaling
subfont-blur="1" #Slight blur

Codificação do vídeo

A opção utilzada para referenciar os arquivos de legenda é o -sub <legenda.srt>. Para a renderização da legenda no arquivo de vídeo original, precisaremos re-codificar o stream de vídeo do arquivo. De preferência, com os mesmos parâmetros de codificação do original:

$ mplayer -vo null -frames 0 video.avi

Playing video.avi.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO: [DX50] 640×272 24bpp 25.000 fps 561.6 kbps (68.6 kbyte/s)
========================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
========================================================
========================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 80.0 kbit/5.21% (ratio: 10000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
========================================================

De posse dos parâmetros de codificação do stream de vídeo do arquivo original, podemos seguir com re-codificação do vídeo incluindo a legenda:

$ mencoder -vf scale=640x272 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=600 -sub "legenda.srt" -o video_com_legenda.avi video.avi

Daí, é aguardar a re-codificação do vídeo e testar ao final:

$ mplayer video_com_legenda.avi

Simples, não?!

(*) neste caso em específico temos a possibilidade de utilizar media servers DLNA que também fazem o streaming com as legendas, mas isso é assunto para outro post… ;)

[Bruno F. M. Souza] Inserindo legendas em vídeos com o mencoder

Friday, September 25th, 2009

Outro dia estávamos discutindo sobre a melhor forma de re-codificar um arquivo de vídeo original com sua respectiva legenda renderizada sobre o stream de vídeo… Pensei logo no mencoder!!!

Isso é necessário quando não temos um player com a funcionalidade de carregar um arquivo de legenda para tocar junto com o vídeo (overlay do texto da legenda + sincronização). Um exemplo é o player do PS3 (*).

Enfim, trata-se de algo que considero bastante útil e que resolvi compartilhar por aqui…

Setup Inicial

Especifique a fonte a ser utilizada:

$ cp /Library/Fonts/Arial.ttf ~/.mplayer/subfont.ttf

Escolha a formatação desejada para a fonte:

$ vim .mplayer/config

# Write your default config options here!

ffactor="10" #black outline
sub-bg-alpha="0" #background color ala closed captions
sub-bg-color="0" #black to white
subfont-text-scale="3.7" #truetype font scaling
subfont-blur="1" #Slight blur

Codificação do vídeo

A opção utilzada para referenciar os arquivos de legenda é o -sub <legenda.srt>. Para a renderização da legenda no arquivo de vídeo original, precisaremos re-codificar o stream de vídeo do arquivo. De preferência, com os mesmos parâmetros de codificação do original:

$ mplayer -vo null -frames 0 video.avi

Playing video.avi.
AVI file format detected.
[aviheader] Video stream found, -vid 0
[aviheader] Audio stream found, -aid 1
VIDEO: [DX50] 640×272 24bpp 25.000 fps 561.6 kbps (68.6 kbyte/s)
========================================================
Opening video decoder: [ffmpeg] FFmpeg’s libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
========================================================
========================================================
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 48000 Hz, 2 ch, s16le, 80.0 kbit/5.21% (ratio: 10000->192000)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)
========================================================

De posse dos parâmetros de codificação do stream de vídeo do arquivo original, podemos seguir com re-codificação do vídeo incluindo a legenda:

$ mencoder -vf scale=640x272 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=600 -sub "legenda.srt" -o video_com_legenda.avi video.avi

Daí, é aguardar a re-codificação do vídeo e testar ao final:

$ mplayer video_com_legenda.avi

Simples, não?!

(*) neste caso em específico temos a possibilidade de utilizar media servers DLNA que também fazem o streaming com as legendas, mas isso é assunto para outro post… ;)

[Bruno Mentges de Carvalho] Semana 1 Dia 1 (W1D1) – Couch to 5k

Monday, September 21st, 2009

Hoje comecei o programa couch to 5k (do sofá para 5 kilometros). Este programa visa capacitar uma pessoa completamente sedentária a correr 5km sem parar, tudo isso em apenas 9 semanas. Cada semana contém 3 treinos com um dia pelo menos de espaço entre cada treino, e cada treino é específico.

Se quiser ver os detalhes dos treinos pode ver aqui: http://www.cairnscommunications.com/fitness/couch-to-5k.htm

Daqui pra frente vou apenas relatar como foi e fazer o running log desse dia. É bem pessoal ! :)

Acordei hoje as 7:00 da manhã e meu cérebro começou a trabalhar contra, como de costume: “Dorme mais 10 minutinhos” “Ta frio, fica ae, dorme mais” eram pensamentos comuns. Mesmo com essa dificuldade, segui um conselho que ouvi de um camarada, Claudio Luz, que dizia “Vira pro lado e levanta!”.

Ao levantar fui ao banheiro e minha mulher continuou dormindo. A movimentação comum nessa hora lá em casa não rolou porque minha enteada (de 7 anos) conseguiu matar aula hoje reclamando que tinha ido dormir tarde e fazendo minha mulher se sentir culpada, haha criança é fogo. Tomei um copo de Ades e comecei a me arrumar. É, to substituindo o café com leite integral por Ades. Devo começar uma dieta em breve.

Minha mulher levantou e se arrumou para ir comigo me dar força! Muito legal. Saímos para começar o programa, e o controlador era uma aplicação que comprei pro Iphone: Couch to 5k da Felt Tip Inc. Nessa aplicação, ela marca o tempo que tenho de aquecimento (5 minutos de caminhada) e depois me avisa quando devo alternar entre correr e caminhar. Nessa primeira semana, devo correr 1 minuto e andar 1 minuto e meio durante 20 minutos.

Começamos a caminhar e iniciei o programa no telefone. Quando o programa mandava, corríamos, e quando mandava denovo, andávamos. Ao final da 3a corrida minha mulher preferiu só andar e eu continuei. Corria quando mandava e voltava andando quando era pra andar pra reencontrá-la. No final, consegui completar o dia inteiro e a sensação foi muito boa de dever cumprido. Minha mulher também ficou super feliz e vai se empenhar pra seguir o programa.

Voltamos, passamos na padaria, compramos pão e fomos pra casa. Ao chegar em casa entrei no banho, frio claro, e alonguei. Depois comi um pedaço de pao com manteiga e mais um copo de Ades e vim trabalhar.

Foi muito boa a experiência. O corpo ficou um pouco dolorido, principalmente as pernas, mas estava muito feliz de ter conseguido. Devo continuar o programa daqui a dois dias :) .

É isso aí !

[Cristiano Casado] Deep Green, o amigo de boteco.

Friday, September 18th, 2009

Você já ouviu falar do Deep Blue, o computador da IBM que desafiou Gary Kasparov em uma partida de xadrez na década passada. Este no vídeo é o Deep Green, o robô que joga sinuca. Deep Green é um projeto de robótica da universidade Queens. Eles também estão trabalhando com conceitos de realidade aumentada para alinhar a tacada do jogador com feixes de laser.