Posts Tagged ‘Google’

Google’s Pacman Doodle – Engenharia Reversa

Postado em 21 mai 2010
Categoria(s) Algoritmo, CSS, Game, Jogo, Web 2.0

Na página do Google de hoje (21 de maio de 2010) tem um doodle do Pacman – e o mais interessante disso: é jogável! E é o primeiro doodle jogável do Google.

Sendo um geek, eu decidi dar uma olhada no código-fonte para descobrir como o Google fez isso.

Eu não fiz engenharia reversa do código inteiro, eu só queria ter uma ideia geral de como eles tinham feito isso. Parece-me que o Google, afinal, tem um código extramamente conciso e eficiente para resolver muitos dos seus problemas.

Assim, em primeiro lugar eles têm um elemento div que contém a área do jogo:

<div id=lga>
  <a href="/search?q=PAC-MAN+30th+Anniversary&ct=pacman10-hp&oi=ddle" id="dlink">
  </a>
  <div id=logo style="width:554px;height:186px;background:black url(logos/pacman10-hp.png) 0 0 no-repeat;position:relative;margin-bottom:9px" title="PAC-MAN's 30th Birthday! Doodle with PAC-MAN™ & ©1980 NAMCO BANDAI Games Inc.">
    <div id="logo-l" style="width:200px;height:2px;left:177px;top:157px;background:#990;position:absolute;display:none;overflow:hidden">
      <div id="logo-b" style="position:absolute;left:0;background:#ff0;height:8px;width:0">
      </div>
    </div>
  </div>
  ...
</div>

E depois há o script mágico:

<script>
    google.pml = function() {
        function d(a) {
            if (!google.pml_installed) {
                google.pml_installed = true;
                if (!a) {
                    document.getElementById("logo").style.background = "black";
                    window.setTimeout(function() {
                        var b = document.getElementById("logo-l");
                        if (b) b.style.display = "block"
                    }, 400)
                }
                a = document.createElement("script");
                a.type = "text/javascript";
                a.src = "logos/js/pacman10-hp.2.js";
                google.dom.append(a)
            }
        }
        function e() {
            if (document.f && document.f.btnI) document.f.btnI.onclick = function() {
                typeof google.pacman != "undefined" ? google.pacman.insertCoin() : d(false);
                return false
            }
        }
        if (!google.pml_loaded) {
            google.pml_loaded = true;
            window.setTimeout(function() {
                document.f && document.f.q && document.f.q.value == "" && d(true)
            }, 1E4);
            e();
            google.rein && google.rein.push(e);
            google.dstr && google.dstr.push(function() {
                google.pacman && google.pacman.destroy();
                if (google.pml_installed) {
                    for (var a = (document.getElementById("xjsc") || document.body).getElementsByTagName("script"), b = 0, c; c = a[b++];) c.src.indexOf("/logos/js") != -1 && google.dom.remove(c);
                    google.pml_installed = false
                }
            });
            google.pacManQuery = function() {
                google.nav(document.getElementById("dlink").href)
            }
        }
    };
</script>

O que parece estar fazendo é o seguinte:

  • Define o estilo CSS e propriedades para vários elementos HTML jogáveis;
  • Carrega o código Javascript do Pacman: http://www.google.com/logos/js/pacman10-hp.2.js (nota: esse link era válido quando eu carreguei isso em 21 de maio de 2010, o dia do doodle, mas pode ser removido mais tarde. Depende do Google, e eu não quero guardar uma cópia offline por razões legais e outros.);
  • Quando o jogo é terminado, redireciona para o link do elemento a id=”dlink”, e basicamente procura pela frase “PAC-MAN 30th Anniversary”;
  • Responde ao botão “Insert Coin” quando é pressionado e reinicia o jogo.

No estilo Google: realmente puro e eficiente!

Eu usei dois recursos online para formatar o HTML e Javascript do Google melhor:

Esse post é uma tradução do post: http://sumanrs.wordpress.com/2010/05/21/googles-pacman-doodle-reverse-engineering-101/

  • Share/Bookmark

Novo Google Acesse Agora!!!

Postado em 25 nov 2009
Categoria(s) Lab

Essa é nova interface do Google.

Captura_de_tela

Quer usar ela? Claro que sim!
Vamos lá!

Navegador Chrome

1) Abra o navegador Chrome;
2) Clique com o botão direito da barra de endereço;
3) Selecione a opção “Edit Search Engines”;
4) Clique na linha “Google (Default)” e no botão “Edit”;
5) Mude o keyword de “google.com.br” para “google.com”;
6) Feche a tela;
7) Acesse http://www.google.com;
8) Cole na barra de endereço o seguinte código:

javascript:void(document.cookie="PREF=ID=20b6e4c2f44943bb:U=4bf292d46faad806:TM=1249677602:LM=1257919388:S=odm0Ys-53ZueXfZG;path=/; domain=.google.com");

9) Dê um refresh no navegador;
10) Pronto! Olha a nova interface do Google!

Captura_de_tela-2

Navegador Firefox

No Firefox, é mais complicado.

1) Com o Firefox fechado.
2) Vá em C:\Arquivos de Programas\Mozilla Firefox\searchplugins e abra o arquivo google.xml;
3) Com o Bloco de Notas. Procure o texto:

<Param name="q" value="{searchTerms}"/>

4) e, depois dele, cole este texto:

<Param name="hl" value="en"/>

5) Salve e feche o arquivo;
6) Abra o Firefox;
7) Cole na barra de endereço o seguinte código:

javascript:void(document.cookie="PREF=ID=20b6e4c2f44943bb:U=4bf292d46faad806:TM=1249677602:LM=1257919388:S=odm0Ys-53ZueXfZG;path=/; domain=.google.com");

8) Dê um refresh no navegador;

  • Share/Bookmark

Google Code Jam Is Back!

Postado em 21 jul 2009
Categoria(s) Algoritmo

We’re excited to announce Google Code Jam 2009, this year’s iteration
of Google’s annual programming competition, which offers coders from
around the world an opportunity to solve complex algorithmic problems
under time pressure, using the programming languages and tools of
their choice.

The contest will have a new format this year, starting with online
rounds and ending in a 25-person final in our Mountain View,
California headquarters. We’re still choosing exact times for
everything, but for planning purposes we wanted to give you this
tentative schedule. Please note that the timing may change:

Early-Mid August: Registration will open.
+4 Weeks: Qualification round
+1 Week: Rounds 1A, 1B, 1C
+1 Week: Round 2
+1 Week: Round 3
November: World Finals in Mountain View

Online rounds begin soon, so start practicing!

The Google Code Jam Team
http://code.google.com/codejam.

  • Share/Bookmark

Como foi o Yahoo! Hack Day 2008 no Brasil

Postado em 10 nov 2008
Categoria(s) Reflexões

Pessoal,

Eu e o Nei nesse final de semanas participamos do Yahoo! Hack Day e construímos essa aplicação: http://www.patrickespake.com/hacktrip/web/ busque por cidades internacionais.

O objetivo da nossa aplicação era buscar informações sobre uma determinada cidade, mostrando informações sobre hotéis, notícias, restaurantes, dúvidas, trips, fotos e mapa.

Para construir o projeto nós usamos o symfony, svn (unfuddle.com), Prototype, Scriptaculous e algumas Api’s do Yahoo descritas abaixo:

1. Para Hotéis nós usamos a api: Yahoo local (http://developer.yahoo.com/local/) essa api é meio estranha não funciona muito legal, os parâmetros de configuração na documentação não funcionam como o esperado e as vezes trazem uns destinos malucos, funciona +- para destinos internacionais;
2. Para Restaurantes usamos a api: Yahoo local mesmo problema descrito acima;
3. Para Notícias usamos a api: BOSS (http://developer.yahoo.com/search/boss/), essa api foi mais tranquila de usar e a documentação está funcionando legal para ela, ela server para fazer buscar dos resultados do mecanismo de busca do Yahoo para uma determina string, fotos e notícias;
4. Para Trips usamos a api: Travel (http://developer.yahoo.com/travel/) essa api é bem enrolada, ela disse que trás uma porção de coisas e na verdade só traz trips marcadas pelas pessoas;
5. Para Fotos usamos a api: Flickr (http://developer.yahoo.com/flickr/) essa api permite puxar fotos uma determinada tag e conjuntos de tags ficou um recurso interessante para puxar fotos de uma determinada cidade, mas ela é meio enrolada na parte que informa onde essa api pode ou não pode ser usada;
6. Para Mapa usamos a api: Google Maps, nós tentamos usar a api de mapas do Yahoo, mas ela é muito ruim e o mapa é feio para caramba, se contar que a gente mandava setar os marcadores no mapa e algumas vezes ele se perdia, nós construímos dois mapas um com o Yahoo e outro com o Google e mandamos setar os marcadadores o do Yahoo alguns marcadores ficaram errados. Essa api de mapa deles é meio bichada.

Uma coisa legal que a gente fez foi implementar a api do geonames.org, essa api permite buscar cidades no mundo inteiro, nós usamos ela para fazer o autocomplete do campo de busca, você digita o nome da cidade e ele começa a buscar as informações de geo desse destino.

A minha conclusão sobre as Api’s do Yahoo! são as seguintes:

Elas são ruins, não são muito boas, falta documentação de qualidade e muitas vezes elas tem um comportamento estranho. As únicas api’s que parecem ser melhores são as do Yahoo! Respostas, Delicious e Flickr, as demais são meio problemáticas. O mais interessante é que a gente conversou com várias pessoas do Yahoo! sobre essas deficiências e eles nós aconselhavam a usar as api’s do Google ou de outros, é molé. Eu esperava que eles falassem que as api’s deles tem problemas e estão trabalhando para melhorar, mas na verdade não.

Bom na verdade eu esperava mais em termos de tecnologia legal deles, e fiquei meio desencatado para usar essas Api’s. Muitas só permitem sugar informações e não permitem interação.

O Nei perguntou sobre as Api’s Local e Travel e os caras nem sabiam que existiam, teve que aparecer um dev gringo para testar e descobrir algumas informações para a gente.

No geral os outros devs do evento também tiveram a mesma sensação que a nossa, essas críticas eram os comentários gerais do evento e até nas apresentações dos projetos o pessoal aproveitou para criticar esses problemas.

Eu acredito que o evento acabou tendo um efeito contrário, ao invés do pessoal querer usar as api’s do Yahoo eles agoram sabem todos esses problemas e perderam o interesse.

Para quem tiver interesse pode baixar o projeto: http://www.patrickespake.com/hacktrip.tar.gz

Abraço.

  • Share/Bookmark

Como obter a latitude e longitude no Google Maps

Postado em 06 nov 2008
Categoria(s) Web 2.0

Por exemplo acesse:
http://maps.google.com.br/maps?f=q&hl=pt-BR&geocode=&q=Curitiba&sll=-25.382495,-49.295654&sspn=0.725822,1.235962&ie=UTF8&ll=-25.428393,-49.273682&spn=0.725546,1.235962&z=10&g=Curitiba&iwloc=addr

Agora limpe a barra de endereço e digite o seguinte código:

1
javascript:void(prompt('',gApplication.getMap().getCenter()));

Vai aparecer um prompt no navegador com as coordenadas.

  • Share/Bookmark