Once upon a time, Stack Overflow used to have cool error page with a lolcat:

But... it's hard to say it... the cat is no more and was replaced with no else than Jarrod Dixon who is also shamelessly using The V-Tech Talking Whiz Kid Mouse PRO Deluxe!

Please bring the cat back! :)

Oh, and the funny thing is the image is still located in "error-cats": http://cdn.sstatic.net/img/error-cats/457516628.jpg

Edit: just noticed it's rotating! Also seen: Marc, unknown devs (maybe even Oded?!), but no cats.

OK, finally found the poor cat but it's just one of so many!

share|improve this question
29  
nice free-hand-circle, but I still don't see any difference in the two pictures –  nijansen Oct 30 '13 at 15:10
    
find 1 difference in the pic –  user221081 Oct 30 '13 at 15:10
13  
Railing in background is different. Cup moved. –  Bill the Lizard Oct 30 '13 at 15:12
2  
@Sklivvz come on, at least some explanation why it was changed? :( –  Shadow Wizard Oct 30 '13 at 15:12
2  
While bringing back lolcat, it would be nice if the primary server could be brought back too :P –  Travis J Oct 30 '13 at 15:13
1  
@TravisJ nah, it got bugs so the cat will just eat them. –  Shadow Wizard Oct 30 '13 at 15:15
1  
@Sklivvz So, Jarrod is supposed to eat the cats? –  Andrew's a Unitato Oct 30 '13 at 15:16
1  
@AndrewBarber - If Jarrod ate the cats then who is supposed to eat the bugs?! –  Travis J Oct 30 '13 at 15:17
    
@Sklivvz Since this is by design, how about we use the cat on Pets.SE? –  Yannis Oct 30 '13 at 15:18
1  
The red outline was incredibly helpful, Thank you from the bottom of my heart, no, seriously ><. –  Ricardo Oct 30 '13 at 15:29
2  
@Ricardo Don't tell me you're badmouthing Meta's freehand red circles ... –  Bart Oct 30 '13 at 15:43
5  
If you don't think that's one cool cat, you've never met Jarrod. –  Shog9 Oct 30 '13 at 17:05
4  
I'm disappointed nobody's got a full image list yet. That code was fun to write. –  Kevin Montrose Oct 30 '13 at 17:31
    
@KevinMontrose: So am I –  SLaks Oct 30 '13 at 18:26
1  
On a serious note, @Kevin: now that the error image is client side, can't you also do some client side history.pushState trickery to get a reloadable (homepage) URL into the browser's location bar? –  Arjan Oct 30 '13 at 23:52
show 10 more comments

4 Answers

up vote 12 down vote accepted

The cat is there, don't you worry. The images are rotated between our dev staff and that cat is still one of the options for the rotation.

share|improve this answer
3  
So you hire cats now? Just don't let him eat all the bugs! :-) –  Shadow Wizard Oct 30 '13 at 16:00
12  
@ShaWizDowArd Of course we hire cats... –  Anna Lear Oct 30 '13 at 16:15
1  
Who but Mr Mittens could be the community manager for pets.se? –  Kasra Rahjerdi Oct 30 '13 at 19:57
    
@Kasra one last question... who is the unicorn? :P –  Shadow Wizard Oct 31 '13 at 11:28
add comment

There is also an blue-eyed unicorn:

Horse error

Edit: as requested by Sha Wiz Dow Ard, here is the proof.

share|improve this answer
1  
Proof please, what is the picture real URL? Reloaded tons of times and never seeen it. –  Shadow Wizard Oct 30 '13 at 16:00
3  
I've seen it. Isn't that proof enough? –  Martijn Pieters Oct 30 '13 at 16:02
    
The computer and the table are the same, is it not enough for you? :) In fact, it's only displayed to special users. (just kidding, I updated my answer) –  n.1 Oct 30 '13 at 16:04
1  
Cool, it was just hard to believe! –  Shadow Wizard Oct 30 '13 at 16:05
3  
Just saw that one as well. sweet. –  aring Oct 30 '13 at 16:14
1  
Holy Sh!@$#, unicorns really DO exist in the web industry!!! :O –  Ricardo Oct 30 '13 at 19:19
add comment

Found all of them (there are 34, no more)

Method:

I took the code over here and started building upon it.

Firstly, I noticed that the final function was of this form:

function(t, o, x, z, p)
        {
            var s,
                y,
                w;
            var q = (Math.random() * 100) ^ 0;
            var u = q < 50 ? 0 : q < 75 ? 1 : q < 88 ? 2 : 3;
            s = l(o, x, z, p)[u];
            y = (Math.random() * s.b) ^ 0;
            var r = y;
            while (y >= 0)
            {
                w = s.a();
                if (c(231, [null, w]))
                {
                    y = y - 1
                }
            }
            var v = document.getElementById("error-cat");
            v.src = t + w + ".jpg";
            v.className = ""
        };

It gets called as StackExchange.error.init('https://cdn.sstatic.net/img/error-cats/', 9, 9, 15, 1);.

I knew that if I could remove the randomness from the code and replace it with iterations through all the possible values of the discretized random numbers, I'd be done.

Looking at var u = q < 50 ? 0 : q < 75 ? 1 : q < 88 ? 2 : 3;, u takes only 4 values, from 0 to 3.

Similarly, y takes only s.b values. s.b is l(o, x, z, p)[u].b. l is defined as

  l = function(r, q, o, p)
        {
            return [{
                        a: h(parseInt("thatisnot", 36)), b: r
                    }, {
                        a: h(parseInt("deadwhich", 36)), b: q
                    }, {
                        a: h(parseInt("caneternal", 36)), b: o
                    }, {
                        a: h(parseInt("lie", 36)), b: p
                    }]
        }

The b value is copied from the parameters of l, which is copied from the parameters of init. So I can just replace this code with

l = function()
{
    return [{
                a: h(parseInt("thatisnot", 36)), b: 9
            }, {
                a: h(parseInt("deadwhich", 36)), b: 9
            }, {
                a: h(parseInt("caneternal", 36)), b: 15
            }, {
                a: h(parseInt("lie", 36)), b: 1
            }]
},

and then I can replace y = (Math.random() * s.b) ^ 0; with a for loop from 0 to s.b, where s=s = l()[u];.

Similarly, the assignment for u can be replaced by a for loop from 0 to 3.

One would expect this to work, but the devs are pretty sneaky and managed to create exotic errors:

TypeError: Property 'puundefinedh' of object [object Array] is not a function

This meant that for some crazy reason, someone was trying to call Array.push(), except they were constructing the string "push" character by character and then using a["push"] to push to the array (if a was the array). Such code demands immediate revocation of jQuery licenses in usual circumstances, no doubt.

Anyway, I found likely candidates for this in the code in three places:

s[k[3] + ("" + m)[0] + ("" + !!0)[3] + k[0]](x)
...
return s[k[3] + ("" + {})[1] + k[3]]()
...
 t(v()[("" + !!0)[3] + ("" + m)[0] + ("" + {})[2] + ("" + !!0)[3] + ("" + {})[6] + ("" + !0)[1] + ("" + m)[5] + ("" + m)[1] + (typeof(""))[5]](v(), v()));

The first one is an obfuscation of "push", the second of "pop", the third of "substring". I replaced these with their literal counterparts, and the code worked.

Here is the final code. Run it in the terminal on the error page, along with StackExchange.error.init(), and the 2D array of links should be printed to the console.

A day may come when I understand the full obfuscation, but it is not this day. This day we oscillate!

share|improve this answer
1  
s/33/34/? (My text editor says 34 lines in that code block.) –  michaelb958 Oct 31 '13 at 10:32
    
...don't bother; see How can I see all the images of the error page? and Kevin's comments. (Though I'm curious how you got the list.) –  Arjan Oct 31 '13 at 10:35
    
@Arjan Posting the details now. Was pretty simple, actually. –  Manishearth Oct 31 '13 at 10:37
    
@Arjan updated with method (and collapsed the list), see above –  Manishearth Oct 31 '13 at 10:53
    
I found all 34 by brute force, you took the elegant route - nice! –  Shadow Wizard Oct 31 '13 at 11:27
    
Now, what if 9, 9, 15, 1 are other values...? ;-) –  Arjan Oct 31 '13 at 11:38
    
@Arjan I don't think anything happens. Decreasing them will give you less images, increasing them doesn't seem to create more images (just 404s) but I'll have to check. –  Manishearth Oct 31 '13 at 11:39
    
(Pssst, Kevin already said there are 34 images, so I'm sure it won't change. Soon.) –  Arjan Oct 31 '13 at 11:41
    
@Manishearth seems like 159632722.jpg & 420906910.jpg & 456788979.jpg are duplicates that makes your list shorter by 3 –  user221081 Oct 31 '13 at 12:04
    
@Manishearth oh actually one more 819884963.jpg –  user221081 Oct 31 '13 at 12:17
    
You are missing my picture! –  Sklivvz Oct 31 '13 at 15:41
    
@Sklivvz Hmm, is it in the code? Or do we need to do some additional tweaking to get to it? –  Manishearth Oct 31 '13 at 15:42
    
@Sklivvz just saw your request, added it here - you can now add yourself to the lolcats! ;) –  Shadow Wizard Nov 13 '13 at 13:30
    
@ShaWizDowArd Argh, I was just trolling Manish, you are taking me too seriously :-) –  Sklivvz Nov 13 '13 at 13:45
    
@Sklivvz I can never reject a good challenge, sorry! :D –  Shadow Wizard Nov 13 '13 at 14:17
add comment

It appears there are a set of images which are loaded, with a variety of people. I can't be sure if sometimes a cat will be shown... perhaps we just need a higher percentage of cats in the mix?

share|improve this answer
2  
Yeah, +1 for noticing it's rotating, lol! :) –  Shadow Wizard Oct 30 '13 at 15:52
add comment

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .