37

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!

28
  • 31
    nice free-hand-circle, but I still don't see any difference in the two pictures
    – nikolas
    Oct 30, 2013 at 15:10
  • find 1 difference in the pic
    – user221081
    Oct 30, 2013 at 15:10
  • 17
    Railing in background is different. Cup moved. Oct 30, 2013 at 15:12
  • 2
    @Sklivvz come on, at least some explanation why it was changed? :( Oct 30, 2013 at 15:12
  • 3
    While bringing back lolcat, it would be nice if the primary server could be brought back too :P
    – Travis J
    Oct 30, 2013 at 15:13
  • 1
    @TravisJ nah, it got bugs so the cat will just eat them. Oct 30, 2013 at 15:15
  • 1
    @Sklivvz So, Jarrod is supposed to eat the cats? Oct 30, 2013 at 15:16
  • 1
    @AndrewBarber - If Jarrod ate the cats then who is supposed to eat the bugs?!
    – Travis J
    Oct 30, 2013 at 15:17
  • @Sklivvz Since this is by design, how about we use the cat on Pets.SE?
    – yannis
    Oct 30, 2013 at 15:18
  • 1
    The red outline was incredibly helpful, Thank you from the bottom of my heart, no, seriously ><. Oct 30, 2013 at 15:29
  • 2
    @Ricardo Don't tell me you're badmouthing Meta's freehand red circles ...
    – Bart
    Oct 30, 2013 at 15:43
  • 5
    If you don't think that's one cool cat, you've never met Jarrod.
    – Shog9
    Oct 30, 2013 at 17:05
  • 5
    I'm disappointed nobody's got a full image list yet. That code was fun to write. Oct 30, 2013 at 17:31
  • 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, 2013 at 23:52
  • 1
    Heh, I should pay more attention to who I'm commenting at. :D On the plus side, now there's a reference to the related question on this one.
    – JakeRobb
    Mar 18, 2015 at 20:30

4 Answers 4

15

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.

4
  • 4
    So you hire cats now? Just don't let him eat all the bugs! :-) Oct 30, 2013 at 16:00
  • 14
    @ShaWizDowArd Of course we hire cats...
    – Adam Lear StaffMod
    Oct 30, 2013 at 16:15
  • 2
    Who but Mr Mittens could be the community manager for pets.se? Oct 30, 2013 at 19:57
  • @Kasra one last question... who is the unicorn? :P Oct 31, 2013 at 11:28
19

There is also an blue-eyed unicorn:

Horse error

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

6
  • 1
    Proof please, what is the picture real URL? Reloaded tons of times and never seeen it. Oct 30, 2013 at 16:00
  • 6
    I've seen it. Isn't that proof enough? Oct 30, 2013 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)
    – A.L
    Oct 30, 2013 at 16:04
  • 2
    Cool, it was just hard to believe! Oct 30, 2013 at 16:05
  • 3
    Just saw that one as well. sweet.
    – aring
    Oct 30, 2013 at 16:14
  • 1
    Holy Sh!@$#, unicorns really DO exist in the web industry!!! :O Oct 30, 2013 at 19:19
16

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!

15
  • 1
    s/33/34/? (My text editor says 34 lines in that code block.) Oct 31, 2013 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, 2013 at 10:35
  • @Arjan Posting the details now. Was pretty simple, actually. Oct 31, 2013 at 10:37
  • @Arjan updated with method (and collapsed the list), see above Oct 31, 2013 at 10:53
  • I found all 34 by brute force, you took the elegant route - nice! Oct 31, 2013 at 11:27
  • Now, what if 9, 9, 15, 1 are other values...? ;-)
    – Arjan
    Oct 31, 2013 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. Oct 31, 2013 at 11:39
  • (Pssst, Kevin already said there are 34 images, so I'm sure it won't change. Soon.)
    – Arjan
    Oct 31, 2013 at 11:41
  • @Manishearth seems like 159632722.jpg & 420906910.jpg & 456788979.jpg are duplicates that makes your list shorter by 3
    – user221081
    Oct 31, 2013 at 12:04
  • @Manishearth oh actually one more 819884963.jpg
    – user221081
    Oct 31, 2013 at 12:17
  • You are missing my picture!
    – Sklivvz
    Oct 31, 2013 at 15:41
  • @Sklivvz Hmm, is it in the code? Or do we need to do some additional tweaking to get to it? Oct 31, 2013 at 15:42
  • @Sklivvz just saw your request, added it here - you can now add yourself to the lolcats! ;) Nov 13, 2013 at 13:30
  • @ShaWizDowArd Argh, I was just trolling Manish, you are taking me too seriously :-)
    – Sklivvz
    Nov 13, 2013 at 13:45
  • @Sklivvz I can never reject a good challenge, sorry! :D Nov 13, 2013 at 14:17
5

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?

1

You must log in to answer this question.

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