UPDATE : After the Google IO’13 started, the experiment has been moved to a new home : https://developers.google.com/events/io/experiment
If you just want the GoogleIO’13 easter eggs codes, jump directly to the bottom if this post. If you’re interested in how I got’em all, read along.
So, the main codebase is located in the /js/app.min.js of the site. But it’s compiled and pretty much unreadable. Luckily, I have Sight, a Chrome extension that indents/prettifies the code. But still, it’s still not readable.
I had to browse through the code to find some telltale signs, and what do you know, I find this :
ww.mode.register("home", ww.mode.HomeMode, null);
ww.mode.register("cat", ww.mode.CatMode, 231, 8);
var isAndroid = navigator.userAgent.match(/Android/);
isAndroid || ww.mode.register("space", ww.mode.SpaceMode, 42, 8);
ww.mode.register("pong", ww.mode.PongMode, 129, 8);
ww.mode.register("bacon", ww.mode.BaconMode, 144, 8);
ww.mode.register("simone", ww.mode.SimoneMode, 211, 8);
ww.mode.register("eightbit", ww.mode.EightBitMode, 83, 8);
ww.util.getAudioContextConstructor() && (ww.mode.register("song", ww.mode.SongMode, 219, 8), ww.mode.register("synth", ww.mode.SynthMode, 136, 8));
ww.mode.register("ascii", ww.mode.AsciiMode, 127, 8);
ww.mode.register("bowling", ww.mode.BowlingMode, 117, 8);
ww.mode.register("rocket", ww.mode.RocketMode, 69, 8);
ww.mode.register("burger", ww.mode.BurgerMode, 57, 8);
It doesn’t say much, but at least there is some chance I could decipher this mess.
Then I searched for the ww.mode.register function, which is :
ww.mode.register = function(a, b, c, d) {
ww.mode.modes[a] = {
klass: b,
pattern: c,
len: d
}
};
Klass, Pattern, and len. I looked for where is klass (easier and distinguishable) is called/located through the code, and I found this snippet, which unlocks pretty much everything :
for (c in a) a.hasOwnProperty(c) && a[c].pattern && (d = a[c], b[c] = {
klass: d.klass,
binaryPattern: ww.util.pad(d.pattern.toString(2), d.len)
});
Three things : ww.util.pad, d.pattern, and d.len.
ww.util.pad pretty much does an d.len-bit binary conversion (code below), in our case, always 8bit, and d.pattern is the c param in the ww.mode.register function,
ww.util.pad = function(a, b) {
for (var c = "" + a; c.length < b;) c = "0" + c;
return c
};
Now everything is crystal clear – All I had to do is to rewrite the ww.util.pad as a standalone function :
function io(a, b) {
for (var c = "" + a; c.length < b;) c = "0" + c;
return c;
}
And then, it’s just a matter of calling io() with the different patterns converted to binary:
var a = 219;
io(a.toString(2), 8); //outputs 11011011, which converts to IIOIIOII
List of all the GoogleIO’13 easter eggs and codes
Go to GoogleIO’13 site, and enter one of the following codes :
- Cat : IIIOOIII
- Space: OOIOIOIO
- Pong : IOOOOOOI
- Bacon : IOOIOOOO
- Simone : IIOIOOII
- Eightbit : OIOIOOII
- Synth : IOOOIOOO
- Song : IIOIIOII
- ASCII : OIIIIIII
- Bowling : OIIIOIOI
- Rocket : OIOOOIOI
- Burger : OOIIIOOI
You missed this:
Space: 00101010 (Isn’t enabled for Android)
Thanks Chris ! Updated ;)
Wonder why it isn’t enabled for Android. Does it work on iPhone or WP8 I wonder?
A quick app profiling shows that Space mode rendering takes roughly ~56% of the CPU … on a Macbook Pro i5 … Imagine what would it do to Android :D
Moreover, it does some heavy physics and calculations to render the different frames.
There are hidden modes (pinata,metaball and donut) too. You can get them by injecting some js
ww.mode.register(“pinata”, ww.mode.PinataMode, 1, 8);
app.loadModeByName_(“pinata”,1,1);
ww.mode.register(“metaball”, ww.mode.MetaBallMode, 2, 8);
app.loadModeByName_(“metaball”,1,1);
ww.mode.register(“donut”, ww.mode.DonutMode, 3, 8);
app.loadModeByName_(“donut”,1,1);
Wow you took the hard approach. Debugger is your friend, my friend. few breakpoints here and there, walk through the stack, let it do all the work for you and suddenly print out the already generated binary values and you’re done.
https://twitter.com/jonathanstanton/status/309464442586931200
ok sorry I wasn’t more clear. Step by Step:
goto: https://developers.google.com/events/io/
open up debug console (Chrome for me)
goto sources, expand the menu on the left, and click the tab Sources. navigate to
developers.google.com/events/io/js/app.min.js
(like so: http://i.imgur.com/Fc23oQA.png)
then click the little “{ }” Icon at the bottom which unobfuscated the JS.
goto line 379 and add a break point. Click on either the I or the O, debugger breaks. look at the scope variables on the side for “this.matchers_” which is an array of 96 objects. violà your binary.
Yup – that works too. But you have to go through the single matchers one by one … and construct the arrays !
I took a hard -but I guess more “formal” way ; )
test
Daniel:Un amigo aseguraba tener a su vez una amiga (relación tipo leyenda urbana) que las abrÃa con la cuenca del ojo. A falta de pruebas nunca le creà y supongo que no se referÃa a una “amiga” calavera.Pasando a otra cosa. A veces me he visto con mi botella de vino y sin descorchador ¿alguién conoce métodos alternativos para abrirlas? Digo, que no sea contra la cabeza de alguien o hundiendo el corcho, que al final termina saltando todo. Saludos.
salve ragazzi ho provato a sostituire la cartella jd cin quella trovata quà ma alla fine penso che non sia servito a nulla per le capche………….peccato… se mi date una manina please ve ne sarei grato!!!
Thanks for taking the time to post. It’s lifted the level of debate
If you add that the DNC had their convention right after FOUR tornado’s hit the area surrounding Denver/Aurora, and they did nothing to help cleanup, you begin to wonder where their priorities really lie. References : Was this answer helpful?
That is something. Thumbs up bro, and please beware of opening it* too much, lmout raha tadour had lyamat.
OIOIOOII makes an 8-bit logo
Does anyone know how to access the page to access the easter eggs now that Google IO has officially started?
@Elijah Lynn : Here you go >> https://developers.google.com/events/io/experiment
Titan poker scam,
they are a fucking unethical discrace to the poker world.
I didn’t exactly have a good experience with Titan either. I know Ipoker, titan poker are rigged. – They are known in Botting community as a safe place for testing and playing bot … fuckign scam, i believe it!! iPoker network should be closed. it is a complete scam!
Online Poker Safe Or Rigged?