<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.explainxkcd.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;user=82.16.27.115&amp;feedformat=atom</id>
		<title>explain xkcd - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;user=82.16.27.115&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=Special:Contributions/82.16.27.115"/>
		<updated>2013-06-19T21:18:28Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.1</generator>

	<entry>
		<id>http://www.explainxkcd.com/wiki/index.php?title=Talk:1196:_Subways</id>
		<title>Talk:1196: Subways</title>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=Talk:1196:_Subways"/>
				<updated>2013-04-08T08:35:14Z</updated>
		
		<summary type="html">&lt;p&gt;82.16.27.115: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I think the comic is making fun of the ridiculous scale-inaccuracies found in public transport plans, including subway plans, which make it hard to estimate actual distances and travel times.&lt;br /&gt;
&lt;br /&gt;
I think it's deffently a factor. &amp;lt;that one editor who always forgets to login&amp;gt;&lt;/div&gt;</summary>
		<author><name>82.16.27.115</name></author>	</entry>

	<entry>
		<id>http://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time</id>
		<title>Talk:1190: Time</title>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=Talk:1190:_Time"/>
				<updated>2013-03-25T10:39:35Z</updated>
		
		<summary type="html">&lt;p&gt;82.16.27.115: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pretty sure we're just getting trolled with this one [[Special:Contributions/99.108.190.136|99.108.190.136]] 04:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Can't tell if this is emo xkcd or trolling xkcd. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:53, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Something seems a little fishy because the image url is different than normal. [[User:Bugefun|Bugefun]] ([[User talk:Bugefun|talk]]) 04:55, 25 March 2013 (UTC)&lt;br /&gt;
:Maybe the comic slowly changes throughout the day. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:56, 25 March 2013 (UTC)&lt;br /&gt;
::Oh god, it does. [[User:Alpha|Alpha]] ([[User talk:Alpha|talk]]) 04:57, 25 March 2013 (UTC)&lt;br /&gt;
:::When uploading different versions of the image, use the naming convention time[iterationNumber].png. We'll compile all the images into one and display them as per [[Traffic Lights]]. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:05, 25 March 2013 (UTC)&lt;br /&gt;
::::Alright, so the comic appears to be switching between two states here: between [[media:time2.png|this]] and [[media:time3.png|this]]. If nothing new happens, I'll get to clipping the comics together. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:28, 25 March 2013 (UTC)&lt;br /&gt;
:::::Whoop, nope, [[media:time4.png|this]] just came up. Is there more to come? '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:34, 25 March 2013 (UTC)&lt;br /&gt;
::::::Alright, so a new one is posted every half-hour. Whoopee. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 06:06, 25 March 2013 (UTC)&lt;br /&gt;
:::::::And there's a new one! Megan leaning back and looking up...&lt;br /&gt;
::::::::Well, the image changed, who has the time to make a script to catch the new images and compile them into a gif? https://dl.dropbox.com/u/932170/time.png [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)It could be a reference to the old proverb &amp;quot; time and tide wait for none&amp;quot; Cueball and the girl could be waiting for the tide in the beach! (Just a guess)[[Special:Contributions/72.21.198.66|72.21.198.66]] 05:11, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The picture does chance with time. The URL includes a changing timestamp that I can't decipher. Compare these two URLS (which have slightly different images:&lt;br /&gt;
http://imgs.xkcd.com/comics/time/8eb156cce408df8bb83528382d6a2aa2ce6c74f3c573fd12b058cd1c56420672.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
&lt;br /&gt;
Perhaps there is a way to hack the URL to view future images. [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:29, 25 March 2013 (UTC)&lt;br /&gt;
: I would also like to add that knowing randall, these are not the only images. For all we know, the image will still be changing in 5 years while a tree grows in front of them. My point is: Are the URLs hackable, or did he encrypt them? [[Special:Contributions/199.30.248.121|199.30.248.121]] 05:33, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Likely there is a way to hack the URLs; they look like some sort of hash, probably a hashed timestamp. Of course, he could easily have added some salt to the hash, making it significantly *harder* to hack. But they're strings of a specific length, so it should be pretty easy to bruteforce it, fetch all the images, and then (maybe) reverse-engineer the sequence. *That* all depends on how many of them there are. [[Special:Contributions/76.90.249.178|76.90.249.178]] 05:44, 25 March 2013 (UTC)&lt;br /&gt;
:Good god, do you see how many digits are *in* that hash? The sun'll have burned out by the time we've tested every possible combination of digits. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 05:47, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It seems that the image is updated every 1/2 hour. [[Special:Contributions/152.23.97.150|152.23.97.150]] 06:17, 25 March 2013 (UTC)&lt;br /&gt;
: Given that the images switch back and forth between other images already seen, and that the comic should be viewable in the future, it seems unlikely that it's any thing like a simple sha256 of part of the timestamp.  I think it's more likely a function of half-hours and minutes (assuming we continue to get a new possible image every half-hour). [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: The images do cycle, yes. But for some reason I have never seen the img where Megan is looking behind her. Also wouldn't it be difficult to show a sequential story (like the rising tide) if the previous images keep cycling ?&lt;br /&gt;
&lt;br /&gt;
Hash appears to be SHA-256. I tried some obvious hashes (&amp;quot;1&amp;quot;, &amp;quot;11901&amp;quot;, &amp;quot;1190_1&amp;quot;, &amp;quot;1190.1&amp;quot;) to no avail. Maybe this is HMAC-SHA256? Also, I would suggest trying Unix timestamps. [[Special:Contributions/131.156.236.149|131.156.236.149]] 06:19, 25 March 2013 (UTC)&lt;br /&gt;
: I've been trying to make educated guesses as to what's being hashed here: http://www.xorbin.com/tools/sha256-hash-calculator ... he could also be using hash(hash2(value)) which would be virtually impossible to crack. [[Special:Contributions/99.153.248.206|99.153.248.206]] 06:59, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It's entirely possible that the &amp;quot;hash&amp;quot; is actually randomly generated. Just a thought. [[Special:Contributions/129.21.119.153|129.21.119.153]] 07:03, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Alright, this is probably not going to work, but I'm trying to exploit Randall's awesomeness here. Maybe he decided to take the time-stamps from the user? I don't know if that's even possible... That would then allow people in different time zones to obtain different images simultaneously. (What's the corollary of Godwin's law for a bunch of math-and-science nerds and relativity? Is there one?) Clicking the img src url on the comic's html page, give me this: http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png : Never mind.. apparently others see the same image too.&lt;br /&gt;
&lt;br /&gt;
Could he be doing this live? Monitoring the discussion on the net? Collaborative, crowdsourced comic-ing? Reminds me of those you-decide-what-the-character-does-next-and-flip-to-appropriate-page parallel plot novels.&lt;br /&gt;
&lt;br /&gt;
[[Special:Contributions/220.224.246.97|220.224.246.97]] 07:14, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Let's just compare the two pictures and see how the bottom right changes, which I believe is water and they are indeed waiting for the tide. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 07:19, 25 March 2013 (UTC)&lt;br /&gt;
:I'm adding urls to pictures bellow, edit freely.&lt;br /&gt;
::They change every 5 minutes, will try to keep track.&lt;br /&gt;
&lt;br /&gt;
http://www.explainxkcd.com/wiki/images/f/f8/time.png &lt;br /&gt;
http://imgs.xkcd.com/comics/time/1e349a579b5f9b5ed487ddf7e88244b70330941ddedac9c6abf6ed2e3f589b97.png&lt;br /&gt;
http://imgs.xkcd.com/comics/time/752687b61523144c61736cd89f8c153dc41e19128f72d78d44947ff800f057fa.png&lt;br /&gt;
http://dl.dropbox.com/u/932170/timeasdf.png &lt;br /&gt;
http://dl.dropbox.com/u/932170/time6.png&lt;br /&gt;
&lt;br /&gt;
:I have uploaded all the different images onto the wiki, in the order that they were revealed. To avoid needless duplication of effort, I'll put them up in the explanation page. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|purple|David}}&amp;lt;font color=green size=3px&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=indigo size=4px&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 07:44, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
It just went back to the second image... [[Special:Contributions/220.224.246.97|220.224.246.97]] 07:59, 25 March 2013 (UTC)&lt;br /&gt;
: And now changed to something new.  http://imgs.xkcd.com/comics/time/cdcc6b46b32c53f8596cd0106958b42c4260b9cbc022e6d94054147aa6554960.png&lt;br /&gt;
:: The images do look alike, but they're all different. Thanks David. [[User:Statharas.903|Statharas.903]] ([[User talk:Statharas.903|talk]]) 08:04, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
::: No..I checked the random string. They're exactly the same. In fact, now it's gone back to the second image. Again. [[Special:Contributions/220.224.246.97|220.224.246.97]] 08:07, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Just found this JavaScript code embedded in the comic HTML source (Update: Reformatted to prevent eye-bleeding): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(function (e) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function t() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function n() {&lt;br /&gt;
        this.listeners = new t&lt;br /&gt;
    }&lt;br /&gt;
    function r(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function i(e) {&lt;br /&gt;
        this.type = e&lt;br /&gt;
    }&lt;br /&gt;
    function s(e, t) {&lt;br /&gt;
        i.call(this, e), this.data = t.data, this.lastEventId = t.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function g(e, t) {&lt;br /&gt;
        var n = Number(e);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || t&lt;br /&gt;
    }&lt;br /&gt;
    function y(e, t, n) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof e[t] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; e[t](n)&lt;br /&gt;
        } catch (i) {&lt;br /&gt;
            r(i)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function b(t, r) {&lt;br /&gt;
        function B() {&lt;br /&gt;
            L = d, N !== null &amp;amp;&amp;amp; (N.abort(), N = null), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), S.readyState = d&lt;br /&gt;
        }&lt;br /&gt;
        function j(e) {&lt;br /&gt;
            var t = L === p || L === h ? N.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                n = null;&lt;br /&gt;
            if (L === h) {&lt;br /&gt;
                var r = f ? t !== &amp;quot;&amp;quot; ? N.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : N.contentType;&lt;br /&gt;
                if (r &amp;amp;&amp;amp; v.test(r)) {&lt;br /&gt;
                    L = p, T = !0, x = u, S.readyState = p, n = new i(&amp;quot;open&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onopen&amp;quot;, n);&lt;br /&gt;
                    if (L === d) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (L === p) {&lt;br /&gt;
                t.length &amp;gt; k &amp;amp;&amp;amp; (H = !0, T = !0);&lt;br /&gt;
                var o = 0,&lt;br /&gt;
                    a = t.indexOf(&amp;quot;\r&amp;quot;, k),&lt;br /&gt;
                    l = t.indexOf(&amp;quot;\n&amp;quot;, k);&lt;br /&gt;
                while (a !== -1 || l !== -1) {&lt;br /&gt;
                    a === -1 || l !== -1 &amp;amp;&amp;amp; l &amp;lt; a ? (o = l, l = t.indexOf(&amp;quot;\n&amp;quot;, o + 1)) : (o = a, a = t.indexOf(&amp;quot;\r&amp;quot;, o + 1));&lt;br /&gt;
                    var m = t.slice(k, o),&lt;br /&gt;
                        B = D;&lt;br /&gt;
                    D = t.slice(o, o + 1) === &amp;quot;\r&amp;quot;, k = o + 1;&lt;br /&gt;
                    if (!B || m.length !== 0 || D) {&lt;br /&gt;
                        _.push(m);&lt;br /&gt;
                        var j = _.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        _.length = 0;&lt;br /&gt;
                        if (j !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var I = &amp;quot;&amp;quot;,&lt;br /&gt;
                                q = j.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            q !== -1 &amp;amp;&amp;amp; (I = j.slice(q + (j.slice(q + 1, q + 2) === &amp;quot; &amp;quot; ? 2 : 1)), j = j.slice(0, q)), j === &amp;quot;data&amp;quot; ? A.push(I) : j === &amp;quot;id&amp;quot; ? O = I : j === &amp;quot;event&amp;quot; ? M = I : j === &amp;quot;retry&amp;quot; ? (u = g(I, u), x = u, b &amp;lt; u &amp;amp;&amp;amp; (b = u)) : j === &amp;quot;retryLimit&amp;quot; ? b = g(I, b) : j === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (w = g(I, w), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = setTimeout(R, w)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (A.length !== 0) {&lt;br /&gt;
                                E = O;&lt;br /&gt;
                                var U = M || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                n = new s(U, {&lt;br /&gt;
                                    data: A.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: O&lt;br /&gt;
                                }), S.dispatchEvent(n), U === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; y(S, &amp;quot;onmessage&amp;quot;, n);&lt;br /&gt;
                                if (L === d) return&lt;br /&gt;
                            }&lt;br /&gt;
                            A.length = 0, M = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                k !== t.length &amp;amp;&amp;amp; (_.push(t.slice(k)), k = t.length)&lt;br /&gt;
            }&lt;br /&gt;
            H &amp;amp;&amp;amp; P === 0 &amp;amp;&amp;amp; (H = !1, P = setTimeout(F, 80)), L !== p &amp;amp;&amp;amp; L !== h || !(e || k &amp;gt; 1048576 || C === 0 &amp;amp;&amp;amp; !T) ? C === 0 &amp;amp;&amp;amp; (T = !1, C = setTimeout(R, w)) : (L = c, N.abort(), C !== 0 &amp;amp;&amp;amp; (clearTimeout(C), C = 0), x &amp;gt; b &amp;amp;&amp;amp; (x = b), C = setTimeout(R, x), x = x * 2 + 1, S.readyState = h, n = new i(&amp;quot;error&amp;quot;), S.dispatchEvent(n), y(S, &amp;quot;onerror&amp;quot;, n))&lt;br /&gt;
        }&lt;br /&gt;
        function F() {&lt;br /&gt;
            P = 0, j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function I() {&lt;br /&gt;
            j(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function q() {&lt;br /&gt;
            j(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function R() {&lt;br /&gt;
            C = 0;&lt;br /&gt;
            if (L !== c) {&lt;br /&gt;
                j(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                C = setTimeout(R, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (m &amp;amp;&amp;amp; e.document &amp;amp;&amp;amp; (e.document.readyState === &amp;quot;loading&amp;quot; || e.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                C = setTimeout(R, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            N.onload = N.onerror = q, N.mozAnon === undefined ? N.onprogress = I : N.onreadystatechange = I, T = !1, C = setTimeout(R, w), k = 0, L = h, A.length = 0, M = &amp;quot;&amp;quot;, O = E, _.length = 0, D = !1, N.open(&amp;quot;GET&amp;quot;, t + ((t.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(E) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), N.withCredentials = o, N.responseType = &amp;quot;text&amp;quot;, f &amp;amp;&amp;amp; N.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), N.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        t = String(t);&lt;br /&gt;
        var o = Boolean(a &amp;amp;&amp;amp; r &amp;amp;&amp;amp; r.withCredentials),&lt;br /&gt;
            u = g(r ? r.retry : NaN, 1e3),&lt;br /&gt;
            b = g(r ? r.retryLimit : NaN, 3e5),&lt;br /&gt;
            w = g(r ? r.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            E = r &amp;amp;&amp;amp; r.lastEventId &amp;amp;&amp;amp; String(r.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            S = this,&lt;br /&gt;
            x = u,&lt;br /&gt;
            T = !1,&lt;br /&gt;
            N = new l,&lt;br /&gt;
            C = 0,&lt;br /&gt;
            k = 0,&lt;br /&gt;
            L = c,&lt;br /&gt;
            A = [],&lt;br /&gt;
            O = &amp;quot;&amp;quot;,&lt;br /&gt;
            M = &amp;quot;&amp;quot;,&lt;br /&gt;
            _ = [],&lt;br /&gt;
            D = !1,&lt;br /&gt;
            P = 0,&lt;br /&gt;
            H = !1;&lt;br /&gt;
        r = null, n.call(this), this.close = B, this.url = t, this.readyState = h, this.withCredentials = o, R()&lt;br /&gt;
    }&lt;br /&gt;
    function w() {&lt;br /&gt;
        this.CONNECTING = h, this.OPEN = p, this.CLOSED = d&lt;br /&gt;
    }&lt;br /&gt;
    t.prototype = {&lt;br /&gt;
        get: function (e) {&lt;br /&gt;
            return this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (e, t) {&lt;br /&gt;
            this.data[e + &amp;quot;~&amp;quot;] = t&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (e) {&lt;br /&gt;
            delete this.data[e + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, n.prototype = {&lt;br /&gt;
        dispatchEvent: function (e) {&lt;br /&gt;
            var t = String(e.type),&lt;br /&gt;
                n = this.listeners,&lt;br /&gt;
                i = n.get(t);&lt;br /&gt;
            if (!i) return;&lt;br /&gt;
            var s = i.length,&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; s) {&lt;br /&gt;
                var u = i[o];&lt;br /&gt;
                try {&lt;br /&gt;
                    u.call(this, e)&lt;br /&gt;
                } catch (a) {&lt;br /&gt;
                    r(a)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            r || n.set(e, r = []);&lt;br /&gt;
            var i = r.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (r[i] === t) return;&lt;br /&gt;
            r.push(t)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (e, t) {&lt;br /&gt;
            e = String(e);&lt;br /&gt;
            var n = this.listeners,&lt;br /&gt;
                r = n.get(e);&lt;br /&gt;
            if (!r) return;&lt;br /&gt;
            var i = r.length,&lt;br /&gt;
                s = [],&lt;br /&gt;
                o = -1;&lt;br /&gt;
            while (++o &amp;lt; i) r[o] !== t &amp;amp;&amp;amp; s.push(r[o]);&lt;br /&gt;
            s.length === 0 ? n[&amp;quot;delete&amp;quot;](e) : n.set(e, s)&lt;br /&gt;
        }&lt;br /&gt;
    }, s.prototype = i.prototype;&lt;br /&gt;
    var o = e.XMLHttpRequest,&lt;br /&gt;
        u = e.XDomainRequest,&lt;br /&gt;
        a = Boolean(o &amp;amp;&amp;amp; (new o).withCredentials !== undefined),&lt;br /&gt;
        f = a,&lt;br /&gt;
        l = a ? o : u,&lt;br /&gt;
        c = -1,&lt;br /&gt;
        h = 0,&lt;br /&gt;
        p = 1,&lt;br /&gt;
        d = 2,&lt;br /&gt;
        v = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        m = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    w.prototype = n.prototype, b.prototype = new w, w.call(b), l &amp;amp;&amp;amp; (e.EventSource = b)&lt;br /&gt;
})(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function e(e) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + e&lt;br /&gt;
    }&lt;br /&gt;
    function t() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var n = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            r = new EventSource(n);&lt;br /&gt;
        t(&amp;quot;connecting to event source:&amp;quot;, n), r.addEventListener(&amp;quot;open&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;error&amp;quot;, function (t) {&lt;br /&gt;
            e(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), r.addEventListener(&amp;quot;loadtest&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, t, !1), r.addEventListener(&amp;quot;comic/time&amp;quot;, function (e) {&lt;br /&gt;
            var n = JSON.parse(e.data),&lt;br /&gt;
                r = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                i = Math.round(Math.random() * n.spread);&lt;br /&gt;
            t(&amp;quot;waiting&amp;quot;, i, &amp;quot;seconds before displaying comic&amp;quot;, n.image), setTimeout(function () {&lt;br /&gt;
                r.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + n.image&lt;br /&gt;
            }, i * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (i) {&lt;br /&gt;
        e(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm no programmer but this looks important to me...&lt;br /&gt;
&lt;br /&gt;
:Doesn't really help. The script basically changes the image when something happens (probably some time passes, although it's possible there is more hidden there). WHAT image then appears is not directed by the script, but by the site. Specifically, the image displayed as first is taken from [http://c0.xkcd.com/redirect/comic/time http://c0.xkcd.com/redirect/comic/time], while the script asks for [http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber) http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;amp;r=(somenumber)] ... which is, if you get correct &amp;quot;r&amp;quot;, probably some json containing the image url. So, even if you hack the script, you will not get all possible urls. -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:17, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: ... actually, given that the script part doesn't seem to do anything just now, it's even possible it's for later (ie, starts producing images when the correct time come). Or maybe there is a bug somewhere in the code :-). -- [[User:Hkmaly|Hkmaly]] ([[User talk:Hkmaly|talk]]) 09:27, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Thanks for explaining. Why hasn't anyone posted this before? Could &amp;quot;location.hash&amp;quot; possibly have anything to do with the method used to generate the image hash key? Also, why is this code so difficult to follow (Obfuscation?)? So many questions... Sorry if this is just a huge waste of ''Time''.&lt;br /&gt;
&lt;br /&gt;
:::: &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; is the URI of the page. &amp;lt;code&amp;gt;location.hash&amp;lt;/code&amp;gt; is the part of the uri after the ''#'' character. If you go to [https://xkcd.com/1190/#verbose https://xkcd.com/1190/#verbose], you'll see some debugging output in your browser's debugging console (Firefox: Web Console or Firebug, Chrome: Development Tools). But nothing to decode the algorithm... :-( --[[Special:Contributions/83.243.48.2|83.243.48.2]] 10:01, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Before obfuscation... ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(function (global) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    function Map() {&lt;br /&gt;
        this.data = {}&lt;br /&gt;
    }&lt;br /&gt;
    function EventTarget() {&lt;br /&gt;
        this.listeners = new Map&lt;br /&gt;
    }&lt;br /&gt;
    function throwError(e) {&lt;br /&gt;
        setTimeout(function () {&lt;br /&gt;
            throw e&lt;br /&gt;
        }, 0)&lt;br /&gt;
    }&lt;br /&gt;
    function Event(type) {&lt;br /&gt;
        this.type = type&lt;br /&gt;
    }&lt;br /&gt;
    function MessageEvent(type, options) {&lt;br /&gt;
        Event.call(this, type), this.data = options.data, this.lastEventId = options.lastEventId&lt;br /&gt;
    }&lt;br /&gt;
    function getDuration(value, def) {&lt;br /&gt;
        var n = Number(value);&lt;br /&gt;
        return (n &amp;lt; 1 ? 1 : n &amp;gt; 18e6 ? 18e6 : n) || def&lt;br /&gt;
    }&lt;br /&gt;
    function fire(that, property, event) {&lt;br /&gt;
        try {&lt;br /&gt;
            typeof that[property] == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; that[property](event)&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            throwError(e)&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    function EventSource(url, options) {&lt;br /&gt;
        function close() {&lt;br /&gt;
            currentState = CLOSED, xhr !== null &amp;amp;&amp;amp; (xhr.abort(), xhr = null), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), that.readyState = CLOSED&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress(isLoadEnd) {&lt;br /&gt;
            var responseText = currentState === OPEN || currentState === CONNECTING ? xhr.responseText || &amp;quot;&amp;quot; : &amp;quot;&amp;quot;,&lt;br /&gt;
                event = null;&lt;br /&gt;
            if (currentState === CONNECTING) {&lt;br /&gt;
                var contentType = isXHR ? responseText !== &amp;quot;&amp;quot; ? xhr.getResponseHeader(&amp;quot;Content-Type&amp;quot;) : &amp;quot;&amp;quot; : xhr.contentType;&lt;br /&gt;
                if (contentType &amp;amp;&amp;amp; contentTypeRegExp.test(contentType)) {&lt;br /&gt;
                    currentState = OPEN, wasActivity = !0, retry = initialRetry, that.readyState = OPEN, event = new Event(&amp;quot;open&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onopen&amp;quot;, event);&lt;br /&gt;
                    if (currentState === CLOSED) return&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if (currentState === OPEN) {&lt;br /&gt;
                responseText.length &amp;gt; charOffset &amp;amp;&amp;amp; (wasAct = !0, wasActivity = !0);&lt;br /&gt;
                var i = 0,&lt;br /&gt;
                    i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, charOffset),&lt;br /&gt;
                    i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, charOffset);&lt;br /&gt;
                while (i1 !== -1 || i2 !== -1) {&lt;br /&gt;
                    i1 === -1 || i2 !== -1 &amp;amp;&amp;amp; i2 &amp;lt; i1 ? (i = i2, i2 = responseText.indexOf(&amp;quot;\n&amp;quot;, i + 1)) : (i = i1, i1 = responseText.indexOf(&amp;quot;\r&amp;quot;, i + 1));&lt;br /&gt;
                    var line = responseText.slice(charOffset, i),&lt;br /&gt;
                        oldWasCR = wasCR;&lt;br /&gt;
                    wasCR = responseText.slice(i, i + 1) === &amp;quot;\r&amp;quot;, charOffset = i + 1;&lt;br /&gt;
                    if (!oldWasCR || line.length !== 0 || wasCR) {&lt;br /&gt;
                        responseBuffer.push(line);&lt;br /&gt;
                        var field = responseBuffer.join(&amp;quot;&amp;quot;);&lt;br /&gt;
                        responseBuffer.length = 0;&lt;br /&gt;
                        if (field !== &amp;quot;&amp;quot;) {&lt;br /&gt;
                            var value = &amp;quot;&amp;quot;,&lt;br /&gt;
                                j = field.indexOf(&amp;quot;:&amp;quot;, 0);&lt;br /&gt;
                            j !== -1 &amp;amp;&amp;amp; (value = field.slice(j + (field.slice(j + 1, j + 2) === &amp;quot; &amp;quot; ? 2 : 1)), field = field.slice(0, j)), field === &amp;quot;data&amp;quot; ? dataBuffer.push(value) : field === &amp;quot;id&amp;quot; ? lastEventIdBuffer = value : field === &amp;quot;event&amp;quot; ? eventTypeBuffer = value : field === &amp;quot;retry&amp;quot; ? (initialRetry = getDuration(value, initialRetry), retry = initialRetry, retryLimit &amp;lt; initialRetry &amp;amp;&amp;amp; (retryLimit = initialRetry)) : field === &amp;quot;retryLimit&amp;quot; ? retryLimit = getDuration(value, retryLimit) : field === &amp;quot;heartbeatTimeout&amp;quot; &amp;amp;&amp;amp; (heartbeatTimeout = getDuration(value, heartbeatTimeout), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = setTimeout(onTimeout, heartbeatTimeout)))&lt;br /&gt;
                        } else {&lt;br /&gt;
                            if (dataBuffer.length !== 0) {&lt;br /&gt;
                                lastEventId = lastEventIdBuffer;&lt;br /&gt;
                                var type = eventTypeBuffer || &amp;quot;message&amp;quot;;&lt;br /&gt;
                                event = new MessageEvent(type, {&lt;br /&gt;
                                    data: dataBuffer.join(&amp;quot;\n&amp;quot;),&lt;br /&gt;
                                    lastEventId: lastEventIdBuffer&lt;br /&gt;
                                }), that.dispatchEvent(event), type === &amp;quot;message&amp;quot; &amp;amp;&amp;amp; fire(that, &amp;quot;onmessage&amp;quot;, event);&lt;br /&gt;
                                if (currentState === CLOSED) return&lt;br /&gt;
                            }&lt;br /&gt;
                            dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                charOffset !== responseText.length &amp;amp;&amp;amp; (responseBuffer.push(responseText.slice(charOffset)), charOffset = responseText.length)&lt;br /&gt;
            }&lt;br /&gt;
            wasAct &amp;amp;&amp;amp; progressTimeout === 0 &amp;amp;&amp;amp; (wasAct = !1, progressTimeout = setTimeout(p, 80)), currentState !== OPEN &amp;amp;&amp;amp; currentState !== CONNECTING || !(isLoadEnd || charOffset &amp;gt; 1048576 || timeout === 0 &amp;amp;&amp;amp; !wasActivity) ? timeout === 0 &amp;amp;&amp;amp; (wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout)) : (currentState = WAITING, xhr.abort(), timeout !== 0 &amp;amp;&amp;amp; (clearTimeout(timeout), timeout = 0), retry &amp;gt; retryLimit &amp;amp;&amp;amp; (retry = retryLimit), timeout = setTimeout(onTimeout, retry), retry = retry * 2 + 1, that.readyState = CONNECTING, event = new Event(&amp;quot;error&amp;quot;), that.dispatchEvent(event), fire(that, &amp;quot;onerror&amp;quot;, event))&lt;br /&gt;
        }&lt;br /&gt;
        function p() {&lt;br /&gt;
            progressTimeout = 0, onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onProgress2() {&lt;br /&gt;
            onProgress(!1)&lt;br /&gt;
        }&lt;br /&gt;
        function onLoadEnd() {&lt;br /&gt;
            onProgress(!0)&lt;br /&gt;
        }&lt;br /&gt;
        function onTimeout() {&lt;br /&gt;
            timeout = 0;&lt;br /&gt;
            if (currentState !== WAITING) {&lt;br /&gt;
                onProgress(!1);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (navigator.onLine === !1) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 500);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            if (webkitBefore535 &amp;amp;&amp;amp; global.document &amp;amp;&amp;amp; (global.document.readyState === &amp;quot;loading&amp;quot; || global.document.readyState === &amp;quot;interactive&amp;quot;)) {&lt;br /&gt;
                timeout = setTimeout(onTimeout, 100);&lt;br /&gt;
                return&lt;br /&gt;
            }&lt;br /&gt;
            xhr.onload = xhr.onerror = onLoadEnd, xhr.mozAnon === undefined ? xhr.onprogress = onProgress2 : xhr.onreadystatechange = onProgress2, wasActivity = !1, timeout = setTimeout(onTimeout, heartbeatTimeout), charOffset = 0, currentState = CONNECTING, dataBuffer.length = 0, eventTypeBuffer = &amp;quot;&amp;quot;, lastEventIdBuffer = lastEventId, responseBuffer.length = 0, wasCR = !1, xhr.open(&amp;quot;GET&amp;quot;, url + ((url.indexOf(&amp;quot;?&amp;quot;, 0) === -1 ? &amp;quot;?&amp;quot; : &amp;quot;&amp;amp;&amp;quot;) + &amp;quot;lastEventId=&amp;quot; + encodeURIComponent(lastEventId) + &amp;quot;&amp;amp;r=&amp;quot; + String(Math.random() + 1).slice(2)), !0), xhr.withCredentials = withCredentials, xhr.responseType = &amp;quot;text&amp;quot;, isXHR &amp;amp;&amp;amp; xhr.setRequestHeader(&amp;quot;Accept&amp;quot;, &amp;quot;text/event-stream&amp;quot;), xhr.send(null)&lt;br /&gt;
        }&lt;br /&gt;
        url = String(url);&lt;br /&gt;
        var withCredentials = Boolean(xhr2 &amp;amp;&amp;amp; options &amp;amp;&amp;amp; options.withCredentials),&lt;br /&gt;
            initialRetry = getDuration(options ? options.retry : NaN, 1e3),&lt;br /&gt;
            retryLimit = getDuration(options ? options.retryLimit : NaN, 3e5),&lt;br /&gt;
            heartbeatTimeout = getDuration(options ? options.heartbeatTimeout : NaN, 45e3),&lt;br /&gt;
            lastEventId = options &amp;amp;&amp;amp; options.lastEventId &amp;amp;&amp;amp; String(options.lastEventId) || &amp;quot;&amp;quot;,&lt;br /&gt;
            that = this,&lt;br /&gt;
            retry = initialRetry,&lt;br /&gt;
            wasActivity = !1,&lt;br /&gt;
            xhr = new Transport,&lt;br /&gt;
            timeout = 0,&lt;br /&gt;
            charOffset = 0,&lt;br /&gt;
            currentState = WAITING,&lt;br /&gt;
            dataBuffer = [],&lt;br /&gt;
            lastEventIdBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            eventTypeBuffer = &amp;quot;&amp;quot;,&lt;br /&gt;
            responseBuffer = [],&lt;br /&gt;
            wasCR = !1,&lt;br /&gt;
            progressTimeout = 0,&lt;br /&gt;
            wasAct = !1;&lt;br /&gt;
        options = null, EventTarget.call(this), this.close = close, this.url = url, this.readyState = CONNECTING, this.withCredentials = withCredentials, onTimeout()&lt;br /&gt;
    }&lt;br /&gt;
    function F() {&lt;br /&gt;
        this.CONNECTING = CONNECTING, this.OPEN = OPEN, this.CLOSED = CLOSED&lt;br /&gt;
    }&lt;br /&gt;
    Map.prototype = {&lt;br /&gt;
        get: function (key) {&lt;br /&gt;
            return this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        set: function (key, value) {&lt;br /&gt;
            this.data[key + &amp;quot;~&amp;quot;] = value&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;delete&amp;quot;: function (key) {&lt;br /&gt;
            delete this.data[key + &amp;quot;~&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
    }, EventTarget.prototype = {&lt;br /&gt;
        dispatchEvent: function (event) {&lt;br /&gt;
            var type = String(event.type),&lt;br /&gt;
                listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) {&lt;br /&gt;
                var listener = typeListeners[i];&lt;br /&gt;
                try {&lt;br /&gt;
                    listener.call(this, event)&lt;br /&gt;
                } catch (e) {&lt;br /&gt;
                    throwError(e)&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },&lt;br /&gt;
        addEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            typeListeners || listeners.set(type, typeListeners = []);&lt;br /&gt;
            var i = typeListeners.length;&lt;br /&gt;
            while (--i &amp;gt;= 0) if (typeListeners[i] === callback) return;&lt;br /&gt;
            typeListeners.push(callback)&lt;br /&gt;
        },&lt;br /&gt;
        removeEventListener: function (type, callback) {&lt;br /&gt;
            type = String(type);&lt;br /&gt;
            var listeners = this.listeners,&lt;br /&gt;
                typeListeners = listeners.get(type);&lt;br /&gt;
            if (!typeListeners) return;&lt;br /&gt;
            var length = typeListeners.length,&lt;br /&gt;
                filtered = [],&lt;br /&gt;
                i = -1;&lt;br /&gt;
            while (++i &amp;lt; length) typeListeners[i] !== callback &amp;amp;&amp;amp; filtered.push(typeListeners[i]);&lt;br /&gt;
            filtered.length === 0 ? listeners[&amp;quot;delete&amp;quot;](type) : listeners.set(type, filtered)&lt;br /&gt;
        }&lt;br /&gt;
    }, MessageEvent.prototype = Event.prototype;&lt;br /&gt;
    var XHR = global.XMLHttpRequest,&lt;br /&gt;
        XDR = global.XDomainRequest,&lt;br /&gt;
        xhr2 = Boolean(XHR &amp;amp;&amp;amp; (new XHR).withCredentials !== undefined),&lt;br /&gt;
        isXHR = xhr2,&lt;br /&gt;
        Transport = xhr2 ? XHR : XDR,&lt;br /&gt;
        WAITING = -1,&lt;br /&gt;
        CONNECTING = 0,&lt;br /&gt;
        OPEN = 1,&lt;br /&gt;
        CLOSED = 2,&lt;br /&gt;
        contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i,&lt;br /&gt;
        webkitBefore535 = /AppleWebKit\/5([0-2][0-9]|3[0-4])[^\d]/.test(navigator.userAgent);&lt;br /&gt;
    F.prototype = EventTarget.prototype, EventSource.prototype = new F, F.call(EventSource), Transport &amp;amp;&amp;amp; (global.EventSource = EventSource)&lt;br /&gt;
 })(this),&lt;br /&gt;
function () {&lt;br /&gt;
    function record(name) {&lt;br /&gt;
        (new Image).src = &amp;quot;http://xkcd.com/events/&amp;quot; + name&lt;br /&gt;
    }&lt;br /&gt;
    function log() {&lt;br /&gt;
        location.hash == &amp;quot;#verbose&amp;quot; &amp;amp;&amp;amp; console.log.apply(console, arguments)&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        var esURL = &amp;quot;http://c0.xkcd.com/stream/comic/time?method=EventSource&amp;quot;,&lt;br /&gt;
            source = new EventSource(esURL);&lt;br /&gt;
        log(&amp;quot;connecting to event source:&amp;quot;, esURL), source.addEventListener(&amp;quot;open&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_start&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;error&amp;quot;, function (ev) {&lt;br /&gt;
            record(&amp;quot;connect_error&amp;quot;)&lt;br /&gt;
        }, !1), source.addEventListener(&amp;quot;loadtest&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, log, !1), source.addEventListener(&amp;quot;comic/time&amp;quot;, function (ev) {&lt;br /&gt;
            var data = JSON.parse(ev.data),&lt;br /&gt;
                img = document.getElementById(&amp;quot;comic&amp;quot;).getElementsByTagName(&amp;quot;img&amp;quot;)[0],&lt;br /&gt;
                delay = Math.round(Math.random() * data.spread);&lt;br /&gt;
            log(&amp;quot;waiting&amp;quot;, delay, &amp;quot;seconds before displaying comic&amp;quot;, data.image), setTimeout(function () {&lt;br /&gt;
                img.src = &amp;quot;http://imgs.xkcd.com/comics/time/&amp;quot; + data.image&lt;br /&gt;
            }, delay * 1e3)&lt;br /&gt;
        }, !1)&lt;br /&gt;
    } catch (e) {&lt;br /&gt;
        record(&amp;quot;js_error&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Special:Contributions/79.180.173.88|79.180.173.88]] 09:48, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
http://imgs.xkcd.com/comics/time/426033682a26a0012a6f8e0c47287af91b7991a852d81c77402c937ffbd650c6.png&lt;/div&gt;</summary>
		<author><name>82.16.27.115</name></author>	</entry>

	<entry>
		<id>http://www.explainxkcd.com/wiki/index.php?title=1179:_ISO_8601</id>
		<title>1179: ISO 8601</title>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=1179:_ISO_8601"/>
				<updated>2013-02-28T15:03:44Z</updated>
		
		<summary type="html">&lt;p&gt;82.16.27.115: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 1179&lt;br /&gt;
| date      = February 27, 2013&lt;br /&gt;
| title     = ISO 8601&lt;br /&gt;
| image     = iso_8601.png&lt;br /&gt;
| titletext = ISO 8601 was published on 06/05/88 and most recently amended on 12/01/04.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
{{w|Public service announcement}}: Two commonly used date formats are {{w|Date format by country|dd.mm.yyyy and mm/dd/yyyy}} (the symbols separating the values, as well as the year being 2 or 4 digits notwithstanding). These differences are often causes for debate. However, the comic explains that the {{w|International Organization for Standardization}} (ISO) has standardized dates in the yyyy-mm-dd format, in its {{w|ISO 8601}} standard.&lt;br /&gt;
&lt;br /&gt;
The comic then lists many formats as &amp;quot;discouraged&amp;quot;. This list starts with commonly used formats, which include the two above as well as other commonly used ones, such as dd/mm/yy. However the list then starts listing formats ranging from uncommon to absurd, such as writing the date partly in Roman numerals and painting the date in m/d/yy format with white paint onto a hissing black cat.&lt;br /&gt;
&lt;br /&gt;
The ISO standard was published (to use yet another date format) on 5 June 1988 and amended on 1 December 2004, two dates given in the title text in mm/dd/yy format. Since the day values are less than 13, the format used demonstrates its ambiguity; it could be interpreted as other dates given in dd/mm/yy format (the last in several other formats as well). Anyway, the dates are not written in ISO 8601 format, contradicting the advice in this comic, adding a level of metahumor.&lt;br /&gt;
&lt;br /&gt;
The other mentioned formats are:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Date !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| 02/27/2013&lt;br /&gt;
| MM/DD/YYYY, used mostly in the US.&lt;br /&gt;
|-&lt;br /&gt;
| 02/27/13&lt;br /&gt;
| MM/DD/YY&lt;br /&gt;
|-&lt;br /&gt;
| 27/02/2013&lt;br /&gt;
| DD/MM/YYYY, used e.g. in South America, Canada ({{w|Date_and_time_notation_in_Canada|officially uses ISO 8601}}) and Europe.&lt;br /&gt;
|-&lt;br /&gt;
| 27/02/13&lt;br /&gt;
| DD/MM/YY&lt;br /&gt;
|-&lt;br /&gt;
| 20130227&lt;br /&gt;
| YYYYMMDD, also allowed in ISO 8601&lt;br /&gt;
|-&lt;br /&gt;
| 2013.02.27&lt;br /&gt;
| YYYY.MM.DD&lt;br /&gt;
|-&lt;br /&gt;
| 27.02.13&lt;br /&gt;
| DD.MM.YY, used e.g. in Germany&lt;br /&gt;
|-&lt;br /&gt;
| 27-02-13&lt;br /&gt;
| DD-MM-YY&lt;br /&gt;
|-&lt;br /&gt;
| 27.2.13&lt;br /&gt;
| D.M.YY&lt;br /&gt;
|-&lt;br /&gt;
| 2013. II. 27.&lt;br /&gt;
| YYYY. MM. DD., with month as {{w|Roman numerals}}, used in Hungary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;sup&amp;gt;27&amp;lt;/sup&amp;gt;⁄&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-13&lt;br /&gt;
| &amp;lt;sup&amp;gt;D&amp;lt;/sup&amp;gt;⁄&amp;lt;sub&amp;gt;M&amp;lt;/sub&amp;gt;-YY&lt;br /&gt;
|-&lt;br /&gt;
| 2013.158904109&lt;br /&gt;
| Year and decimal fraction of year – 58/365, February 27 being the 58th day of the year. This representation marks the end of that day.&lt;br /&gt;
|-&lt;br /&gt;
| MMXIII-II-XXVII&lt;br /&gt;
| Year-month-day in Roman numerals&lt;br /&gt;
|-&lt;br /&gt;
| MMXIII [and] LVII [over] CCCLXV&lt;br /&gt;
| Year and ''57''/365. This representation marks the start of the day, which is 57 days after the year started.&lt;br /&gt;
|-&lt;br /&gt;
| 1330300800&lt;br /&gt;
| {{w|Unix time|UNIX Timestamp}}, but for '''2012'''-02-27.&lt;br /&gt;
|-&lt;br /&gt;
| ((3+3)×(111+1)-1)×3/3-1/3&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Year/month/day with the parts written as arithmetic expressions, using just the digits 1 and 3. (The slashes are not to be interpreted as fraction lines.)&lt;br /&gt;
|-&lt;br /&gt;
| 27 [''on''] 02 [''on''] 2013&lt;br /&gt;
| An obfuscated date format not used ordinarily. This can be considered a compromise between the different formats: since we cannot agree on which position in the date the day, month and year parts shall be, we just write them all in the same place; we don't even need separators, which we cannot agree on either. On the other hand, reading it gets somewhat tricky...&lt;br /&gt;
|-&lt;br /&gt;
| 10/11011/1101&lt;br /&gt;
| Month/day/year in {{w|Binary number|binary}}.&lt;br /&gt;
|-&lt;br /&gt;
| 02/27/20/13&lt;br /&gt;
| A slash is absurdly placed in the middle of &amp;quot;2013&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0 [2,5] 1 [3] 2 [1,6,7] 3 [4] 7 [8]&lt;br /&gt;
| The large digits are to be placed at the positions listed above and below: 0 is used at positions 2 and 5, 1 is used on position 3, etc.; the result being 20130227&lt;br /&gt;
|-&lt;br /&gt;
| ''A cat, with the numerals'' 2-27-13 ''painted on it, going'' HISSSS&lt;br /&gt;
| In Western cultures, black cats and the number 13 are associated with bad luck. The cat might also just be angry that someone painted an (unstandardized) date on it.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
:Public Service Announcement:&lt;br /&gt;
&lt;br /&gt;
:Our different ways of writing dates as numbers can lead to online confusion. That's why in 1988 ISO set a global standard numeric date format. This is '''''the''''' correct way to write numeric dates:&lt;br /&gt;
&lt;br /&gt;
:2013-02-27&lt;br /&gt;
&lt;br /&gt;
:The following formats are therefore discouraged:&lt;br /&gt;
*02/27/2013&lt;br /&gt;
*02/27/13&lt;br /&gt;
*27/02/2013&lt;br /&gt;
*27/02/13&lt;br /&gt;
*20130227&lt;br /&gt;
*2013.02.27&lt;br /&gt;
*27.02.13&lt;br /&gt;
*27-02-13&lt;br /&gt;
*27.2.13&lt;br /&gt;
*2013. II. 27.&lt;br /&gt;
*&amp;lt;sup&amp;gt;27&amp;lt;/sup&amp;gt;⁄&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;-13&lt;br /&gt;
*2013.158904109&lt;br /&gt;
*MMXIII-II-XXVII&lt;br /&gt;
*MMXIII [and] LVII [over] CCCLXV&lt;br /&gt;
*1330300800&lt;br /&gt;
*((3+3)×(111+1)-1)×3/3-1/3&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;&lt;br /&gt;
*27 [''written on top of''] 02 [''written on top of''] 2013&lt;br /&gt;
*10/11011/1101&lt;br /&gt;
*02/27/20/13&lt;br /&gt;
*0 [2,5] 1 [3] 2 [1,6,7] 3 [4] 7 [8]&lt;br /&gt;
*''A cat, with the numerals'' 2-27-13 ''painted on it, going'' HISSSS&lt;br /&gt;
&lt;br /&gt;
{{comic discussion}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Math]]&lt;/div&gt;</summary>
		<author><name>82.16.27.115</name></author>	</entry>

	<entry>
		<id>http://www.explainxkcd.com/wiki/index.php?title=Talk:925:_Cell_Phones</id>
		<title>Talk:925: Cell Phones</title>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=Talk:925:_Cell_Phones"/>
				<updated>2013-01-11T17:14:11Z</updated>
		
		<summary type="html">&lt;p&gt;82.16.27.115: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;On first read I thought the joke is that the cell phone graph shape (somewhat) closely mimics the shape of the cancer graph, including the part where it begins to level off - implying that one linearly correlates with the other, with a 20 year delay (a typical time it takes for cancer to manifest, except in this case it's backwards). ultramage 14:17, 22 December 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That and the fact the graph is out by a scale factor of 1000 is always a fun way to screw over how the statistics look.&lt;/div&gt;</summary>
		<author><name>82.16.27.115</name></author>	</entry>

	<entry>
		<id>http://www.explainxkcd.com/wiki/index.php?title=Talk:1133:_Up_Goer_Five</id>
		<title>Talk:1133: Up Goer Five</title>
		<link rel="alternate" type="text/html" href="http://www.explainxkcd.com/wiki/index.php?title=Talk:1133:_Up_Goer_Five"/>
				<updated>2012-11-12T16:58:48Z</updated>
		
		<summary type="html">&lt;p&gt;82.16.27.115: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This comic is also a celebration of what many people, presumably including former NASA employee Randall, consider the greatest technological achievement ever. {{unsigned|158.169.131.14}}&lt;br /&gt;
&lt;br /&gt;
I'm surprised &amp;quot;ship&amp;quot; isn't among the most commonly used words in English. Where do these statistics come from? [[User:Davidy22|&amp;lt;span title=&amp;quot;I want you.&amp;quot;&amp;gt;&amp;lt;u&amp;gt;&amp;lt;font color=&amp;quot;purple&amp;quot; size=&amp;quot;2px&amp;quot;&amp;gt;David&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;quot;green&amp;quot; size=&amp;quot;3px&amp;quot;&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;sup&amp;gt;&amp;lt;font color=&amp;quot;indigo&amp;quot; size=&amp;quot;1px&amp;quot;&amp;gt;22&amp;lt;/font&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/span&amp;gt;]][[User talk:Davidy22|&amp;lt;tt&amp;gt;(talk)&amp;lt;/tt&amp;gt;]] 12:35, 12 November 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
:It makes sense that &amp;quot;capsule&amp;quot; and &amp;quot;spaceship&amp;quot; (as one word) are not in the &amp;quot;ten hundred&amp;quot; most-common words (Really, &amp;quot;thousand&amp;quot; isn't on this list either?), but not &amp;quot;fuel&amp;quot; and/or &amp;quot;tank&amp;quot;?  People (context: US Midwesterner) talk about filling up their cars all the time!  I'd like to see the original 1,000-word list. (Also: &amp;quot;Up Goer&amp;quot;?  Well, it goes up -- that's about ALL it does.  Makes sense, I guess.) --BigMal27 // [[Special:Contributions/192.136.15.149|192.136.15.149]] 13:13, 12 November 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
Maybe is Randall referring to [[wikipedia:Simplified Technical English|Simplified Technical English]]? — [[User:Ethaniel|Ethaniel]] ([[User talk:Ethaniel|talk]]) 14:09, 12 November 2012 (UTC)&lt;br /&gt;
:There is an entry in the Simple English Wikipedia: http://simple.wikipedia.org/wiki/Simplified_English . The Simple English Wikipedia is interesting to browse, and challenging to write articles for. [[User:J-beda|J-beda]] ([[User talk:J-beda|talk]]) 14:24, 12 November 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
I'm inclined to think this is also a nod to 1984's {{w|Newspeak}}, and the dumbing-down effect of an ''overly'' {{w|controlled language}}.  It's good to simplify (linguistic) complexity, but with that simplification of text comes a simplification of capacity, too.  We push back horizons by exploring unknowns, so restricting things to a small set of knowns may be counterproductive. -- [[User:IronyChef|IronyChef]] ([[User talk:IronyChef|talk]]) 15:13, 12 November 2012 (UTC)&lt;br /&gt;
&lt;br /&gt;
The comic is almost certainly using http://en.wiktionary.org/wiki/Appendix:Basic_English_word_list or another work list like it.[[Special:Contributions/82.16.27.115|82.16.27.115]] 16:58, 12 November 2012 (UTC)&lt;/div&gt;</summary>
		<author><name>82.16.27.115</name></author>	</entry>

	</feed>