<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=141.101.98.29</id>
		<title>explain xkcd - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.explainxkcd.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=141.101.98.29"/>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php/Special:Contributions/141.101.98.29"/>
		<updated>2026-06-25T03:43:35Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=1537:_Types&amp;diff=95402</id>
		<title>1537: Types</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=1537:_Types&amp;diff=95402"/>
				<updated>2015-06-12T22:04:08Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: /* Explanation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 1537&lt;br /&gt;
| date      = June 12, 2015&lt;br /&gt;
| title     = Types&lt;br /&gt;
| image     = types.png&lt;br /&gt;
| titletext = colors.rgb(&amp;quot;blue&amp;quot;) yields &amp;quot;#0000FF&amp;quot;. colors.rgb(&amp;quot;yellowish blue&amp;quot;) yields NaN. colors.sort() yields &amp;quot;rainbow&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
{{incomplete|Title text not explained. More details before the list.}}&lt;br /&gt;
&lt;br /&gt;
This comic is a series of programming jokes about a ridiculous new programming language, perhaps inspired by [https://www.destroyallsoftware.com/talks/wat Gary Bernhardt's CodeMash 2012 lightning talk] on Javascript's unpredictable typing. The (highly technical) audience is unable to correctly guess the results of adding various Javascript types and roars with laughter when they're revealed.&lt;br /&gt;
&lt;br /&gt;
Most regular programming languages distinguish a number of types, e.g. integers , strings, lists,... All of which have different behaviours. The operation &amp;quot;+&amp;quot; is conventionally defined over more than one of these types. Applied to two integers, it returns their addition, but applied to two strings (denoted by being enclosed in quotes) it concatenates them:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt; 2 + 3&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
&amp;gt; &amp;quot;123&amp;quot; + &amp;quot;abc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;123abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While these behaviours are standard, conventional, and intuitive, there is a huge amount of variation among programming languages when you apply an operation like &amp;quot;+&amp;quot; to different types. One logical approach is to always return an error in all cases of type mixing, but it is often practical to allow some case mixing, since it can hugely simplify an operation. Variation and lack of a clearly more intuitive behaviour leads some languages to have weird results when you mix types.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;2 + &amp;quot;2&amp;quot;&amp;lt;/code&amp;gt; uses the &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; operator on a number and a string. In a normal language, this would result either the number &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; (addition), or &amp;lt;code&amp;gt;&amp;quot;22&amp;quot;&amp;lt;/code&amp;gt; (string concatenation); however, the new language converts the string to an integer, adds them to produce &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; and converts back to a string. Alternately, it is adding 2 to the ASCII value of the character &amp;lt;code&amp;gt;&amp;quot;2&amp;quot;&amp;lt;/code&amp;gt;, which (interpreted as a string) is &amp;lt;code&amp;gt;&amp;quot;4&amp;quot;&amp;lt;/code&amp;gt;. This is (somewhat) consistent with the behavior for item 4.&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;quot;2&amp;quot; + []&amp;lt;/code&amp;gt; adds a string to an array (a list), this time. This first inexplicably converts the string to a number again, and then it literally adds the number to the list by appending it (this would make sense if it was &amp;lt;code&amp;gt;[] + 2&amp;lt;/code&amp;gt;, but usually not the other way around). And then the result (the entire array) is converted to a string again.&lt;br /&gt;
# &amp;lt;code&amp;gt;(2/0)&amp;lt;/code&amp;gt; divides &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; by &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and quite reasonably results in &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt; (not a number).&lt;br /&gt;
# &amp;lt;code&amp;gt;(2/0)+2&amp;lt;/code&amp;gt; adds &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; is &amp;quot;added&amp;quot; to the string &amp;lt;code&amp;gt;&amp;quot;NaN&amp;quot;&amp;lt;/code&amp;gt; (again, the number is converted to a string for apparently no reason), which produces &amp;lt;code&amp;gt;&amp;quot;NaP&amp;quot;&amp;lt;/code&amp;gt;, as if &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; was added to &amp;lt;code&amp;gt;&amp;quot;N&amp;quot;&amp;lt;/code&amp;gt; to produce &amp;lt;code&amp;gt;&amp;quot;P&amp;quot;&amp;lt;/code&amp;gt; (as per alphabetical order or ASCII encoding; &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;01001110&amp;lt;/code&amp;gt;, and adding 2 to this results in &amp;lt;code&amp;gt;01010000&amp;lt;/code&amp;gt; which is &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &amp;lt;code&amp;gt;&amp;quot;&amp;quot;+&amp;quot;&amp;quot;&amp;lt;/code&amp;gt; looks like it is concatenating (adding) an empty string (i.e. &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;) to another empty string, which should produce an empty string. However, the entire thing is treated as one string (with the start quote being the first one and the end quote being the very last one), which produces the egregious '&amp;lt;code&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/code&amp;gt;'.&lt;br /&gt;
# &amp;lt;code&amp;gt;[1,2,3]+2&amp;lt;/code&amp;gt; seems to test whether it's sound to append &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; to the list &amp;lt;code&amp;gt;[1,2,3]&amp;lt;/code&amp;gt;, and concludes that it doesn't fit the pattern, returning the boolean value &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;. It could conceivably also be the result of an attempt to add &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; to the ''set'' &amp;lt;code&amp;gt;[1,2,3]&amp;lt;/code&amp;gt;, which already contains that element (although &amp;lt;code&amp;gt;{1,2,3}&amp;lt;/code&amp;gt; would be a more common notation for sets).&lt;br /&gt;
# &amp;lt;code&amp;gt;[1,2,3]+4&amp;lt;/code&amp;gt; returns &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; for much the same reason.&lt;br /&gt;
# &amp;lt;code&amp;gt;2/(2-(3/2+1/2))&amp;lt;/code&amp;gt; is a floating point joke. Floating point numbers are notoriously imprecise. With precise mathematics, &amp;lt;code&amp;gt;(3/2+1/2)&amp;lt;/code&amp;gt; would be exactly 2, hence the entire thing would evaluate to &amp;lt;code&amp;gt;2/0&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt; in Randall's new language. However, the result of &amp;lt;code&amp;gt;(3/2+1/2)&amp;lt;/code&amp;gt; is &amp;quot;just slightly off,&amp;quot; which makes the result &amp;quot;just slightly off&amp;quot; of &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt; (which would be ridiculous in a real language). The ironic thing is that fractions with 2 in the denominator are ''not'' the kind of numbers that typically suffer from floating point impreciseness. Additionally, if there was indeed a rounding error, the actual calculation becomes something like &amp;lt;code&amp;gt;2/0.0000000000000013&amp;lt;/code&amp;gt;, which should not return a &amp;lt;code&amp;gt;NaN&amp;lt;/code&amp;gt; since it is not division by zero.&lt;br /&gt;
# &amp;lt;code&amp;gt;range(&amp;quot; &amp;quot;)&amp;lt;/code&amp;gt; normally wouldn't make any sense. However, the new language appears to interpret it as ASCII, and in the ASCII table, character #32 is space, #33 is &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;, and #34 is &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;. So, instead of interpreting &amp;lt;code&amp;gt;&amp;quot; &amp;quot;&amp;lt;/code&amp;gt; as a string, it seems to be interpreted as &amp;lt;code&amp;gt;34, 32, 34&amp;lt;/code&amp;gt; (in ASCII), and then &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; appears to transform this into &amp;lt;code&amp;gt;34, 33, 32, 33, 34&amp;lt;/code&amp;gt; (the &amp;quot;ranges&amp;quot; between the numbers), which, interpreted as ASCII, becomes &amp;lt;code&amp;gt;['&amp;quot;', '!', ' ', '!', '&amp;quot;']&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;+2&amp;lt;/code&amp;gt; refers to the Chinese/Japanese (Kanji) number system, where the plus sign is instead the symbol &amp;lt;code&amp;gt;十&amp;lt;/code&amp;gt;. In Chinese, this symbol represents the number ten, and if you translate the &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; into Chinese, you get &amp;lt;code&amp;gt;二&amp;lt;/code&amp;gt;. Therefore, in full Chinese the code is &amp;lt;code&amp;gt;十二&amp;lt;/code&amp;gt; is equivalent to the number &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;2+2&amp;lt;/code&amp;gt; would normally be &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;. However, the interpreter takes this instruction to mean that the user wishes to increase the actual value of the number &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (aka the &amp;quot;literal value&amp;quot;) by &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; for the remainder of the program, making it &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; and then reports that the work is &amp;quot;Done&amp;quot;.  The result can be seen in the subsequent lines where all &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;s are replaced by &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;s.  This could be a reference to languages like Fortran where [http://everything2.com/title/Changing+the+value+of+5+in+FORTRAN literals could be assigned new values].&lt;br /&gt;
# &amp;lt;code&amp;gt;range(1,5)&amp;lt;/code&amp;gt; would normally return &amp;lt;code&amp;gt;[1, 2, 3, 4, 5]&amp;lt;/code&amp;gt;. However, since the value of &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; has been changed to &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, it returns &amp;lt;code&amp;gt;[1, 4, 3, 4, 5]&amp;lt;/code&amp;gt;, and this even affects the line number (which is 14 instead of 12).         &lt;br /&gt;
# &amp;lt;code&amp;gt;floor(10.5)&amp;lt;/code&amp;gt; should return &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; (the &amp;quot;floor&amp;quot; of a decimal number is that number rounded down). However, it instead returns {{w|ASCII art}} of the number on a &amp;quot;floor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The title text contains three further examples relating to color. &amp;lt;code&amp;gt;color.rgb(&amp;quot;blue&amp;quot;)&amp;lt;/code&amp;gt; returns the hexadecimal code for pure blue (as would be used in HTML, for example), which is how a real programming language might work. The lookup for &amp;quot;yellowish blue&amp;quot; returns &amp;quot;NaN&amp;quot; (Not a Number) again, which makes sense at one level because there is no such color as &amp;quot;yellowish blue&amp;quot; (yellow and blue make green). However a more typical result would have been a failure indicating that the color database does not include the name, in the same way that a typo such as &amp;quot;bluw&amp;quot; would. Similarly sorting the colors would normally produce some defined ordering, such as alphabetical, but in this language it generates the string &amp;quot;rainbow&amp;quot;. It seems that Randall's new language understands color theory in an unusually deep way.&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
My new language is great, but it has a few quirks regarding type:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [1]&amp;gt; 2+&amp;quot;2&amp;quot;&lt;br /&gt;
   =&amp;gt; &amp;quot;4&amp;quot;&lt;br /&gt;
 [2]&amp;gt; &amp;quot;2&amp;quot;+[]&lt;br /&gt;
   =&amp;gt; &amp;quot;[2]&amp;quot;&lt;br /&gt;
 [3]  (2/0)&lt;br /&gt;
   =&amp;gt; NaN&lt;br /&gt;
 [4]&amp;gt; (2/0)+2&lt;br /&gt;
   =&amp;gt; NaP&lt;br /&gt;
 [5]&amp;gt; &amp;quot;&amp;quot;+&amp;quot;&amp;quot;&lt;br /&gt;
   =&amp;gt; '&amp;quot;+&amp;quot;'&lt;br /&gt;
 [6]&amp;gt; [1,2,3]+2&lt;br /&gt;
   =&amp;gt; FALSE&lt;br /&gt;
 [7]&amp;gt; [1,2,3]+4&lt;br /&gt;
   =&amp;gt; TRUE&lt;br /&gt;
 [8]&amp;gt; 2/(2-(3/2+1/2))&lt;br /&gt;
   =&amp;gt; NaN.0000000000000013&lt;br /&gt;
 [9]&amp;gt; range(&amp;quot; &amp;quot;)&lt;br /&gt;
   =&amp;gt; ('&amp;quot;','!',&amp;quot; &amp;quot;,&amp;quot;!&amp;quot;,'&amp;quot;')&lt;br /&gt;
[10]&amp;gt; +2&lt;br /&gt;
   =&amp;gt; 12&lt;br /&gt;
[11]&amp;gt; 2+2&lt;br /&gt;
   =&amp;gt; DONE&lt;br /&gt;
[14]&amp;gt; RANGE(1,5)&lt;br /&gt;
   =&amp;gt; (1,4,3,4,5)&lt;br /&gt;
[13]&amp;gt; FLOOR(10.5)&lt;br /&gt;
   =&amp;gt; |&lt;br /&gt;
   =&amp;gt; |&lt;br /&gt;
   =&amp;gt; |&lt;br /&gt;
   =&amp;gt; |&lt;br /&gt;
   =&amp;gt; |___10.5___&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The alt text for the image starts out with colors.rgb(&amp;quot;blue&amp;quot;) yields &amp;quot;#0000FF&amp;quot;. Again, it just took a string, turned it into a variable, and made it a string again. However, the .rgb function shouldn't be returning a hex code for the color!&lt;br /&gt;
It then transitions into colors.rgb(&amp;quot;yellowish blue&amp;quot;) yields &amp;quot;NaN&amp;quot;. Seeing how it returned a hex code for the last one, attempting to get the RGB value of an [https://en.wikipedia.org/wiki/Impossible_color impossible color] would predictably cause it to return NaN.&lt;br /&gt;
Finally, colors.sort() yields &amp;quot;rainbow&amp;quot;. It just got stuffed through a prism, which sorted the colors into a rainbow!&lt;br /&gt;
{{comic discussion}}&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1537:_Types&amp;diff=95391</id>
		<title>Talk:1537: Types</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1537:_Types&amp;diff=95391"/>
				<updated>2015-06-12T19:13:35Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Relevant: WAT talk https://www.destroyallsoftware.com/talks/wat&lt;br /&gt;
&lt;br /&gt;
Are (6) and (7) about completing sequences?&lt;br /&gt;
&lt;br /&gt;
If the sequence was [1, 2, 3, ?] we would expect the ? to be a placeholder for 4. So [1, 2, 3]+2 is wrong := FALSE. But [1, 2, 3]+4 is correct := TRUE.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;+2 appears to be applying a unary + to the number 2&amp;quot; : or it adds the number of the line, 10, to 2 =&amp;gt; 12. Also, the eleventh line, &amp;quot;2+2&amp;quot; may add 2 to all the following 2, explaining line 12. (that theory is from a friend of mine) [[User:Seipas|Seipas]] ([[User talk:Seipas|talk]]) 12:17, 12 June 2015 (UTC)&lt;br /&gt;
: Also, for the lines 6 and 7, the operation &amp;quot;[1,2,3]+x&amp;quot; may add x to the set [1,2,3] and return true if the operation succeeded or false if not. Adding 2 to the set [1,2,3] returns false because 2 is already in [1,2,3]. [[User:Seipas|Seipas]] ([[User talk:Seipas|talk]]) 12:23, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yellowish Blue: http://www.livescience.com/17948-red-green-blue-yellow-stunning-colors.html is NaN!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;quot;The ironic thing is that fractions with 2 in the nominator are not the kind of numbers that typically suffer from floating point impreciseness.&amp;quot;''&lt;br /&gt;
- This is not technically correct.  Should read &amp;quot;fractions with 'power of 2' in the '''de'''nominator.  However, the 3/2 would cause precision errors.&lt;br /&gt;
: I don't know proper English wording for things, but 3/2=3*2^-1, so it would be represented exactly under IEEE-754 too. [[Special:Contributions/141.101.89.217|141.101.89.217]] 13:58, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Is there more to this comic, a fixed set of rules that can tie all the examples together, or does each line make its own joke independently? [[Special:Contributions/108.162.219.5|108.162.219.5]] 12:54, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;normally&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;This would make sense if it was &amp;lt;code&amp;gt;[] + 2&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It really wouldn't. Javascript returns &amp;lt;code&amp;gt;&amp;quot;2&amp;quot;&amp;lt;/code&amp;gt; (god knows why) and Python gives an error. Don't really feel like testing many other languages, but I also think it's not really a logical assumption to make at all. Can't think of a reason for &amp;lt;code&amp;gt;[] + 2&amp;lt;/code&amp;gt; to return &amp;lt;code&amp;gt;[2]&amp;lt;/code&amp;gt;... ever. It ''might'' make a little bit of sense in Randall's oddly typed language, but not in any sane one. --[[User:TotempaaltJ|TotempaaltJ]] ([[User talk:TotempaaltJ|talk]]) 12:35, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
: Javascript first converts &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; (the empty array) to the empty string (using the rule &amp;quot;stringify each element and join with a comma&amp;quot;), then treats the operation as &amp;lt;code&amp;gt;&amp;quot;&amp;quot; + 2&amp;lt;/code&amp;gt;, which results in conversion of the other operand to string and then concatenation. [[Special:Contributions/141.101.97.214|141.101.97.214]] 12:46, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
line 4: asci code of N + 2 = asci code of P [[User:SirKitKat|sirKitKat]] ([[User talk:SirKitKat|talk]]) 13:07, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
My favourite xkcd in a while. =8o) Of the list I got a good laugh out of numbers 8 and 13. [[User:Jarod997|Jarod997]] ([[User talk:Jarod997|talk]]) 13:11, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
I think a lot of this is his joke about programming languages loving the number 4. 2 + &amp;quot;2&amp;quot; = &amp;quot;4&amp;quot;, [1,2,3] + 4 = true, 2+2 = DONE, and the range one all seem to support this. Also reminds me of this: http://xkcd.com/221/&lt;br /&gt;
&lt;br /&gt;
Why isn't yellowish blue just green? [[User:Djbrasier|Djbrasier]] ([[User talk:Djbrasier|talk]]) 16:18, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
line 4: I read NaP as Not a Problem. [[Special:Contributions/141.101.104.12|141.101.104.12]] 17:00, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Line 3 is missing its prompt.  There does not appear to be any relevance to the joke, nor has anyone yet explained why it should be missing. Typo? [[Special:Contributions/108.162.221.183|108.162.221.183]] 17:10, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Note that some programming languages avoid the problem of overloaded '+' operator between operands of vividly different types by using other symbols for string concatenation (be it &amp;quot;a&amp;quot;~&amp;quot;b&amp;quot; or &amp;quot;a&amp;quot;.&amp;quot;b&amp;quot;) and numerical addition.  The real WTF is abusing '+' for string concatenation, which has very different properties from numerical addition, not being symmetrical for example: concat(&amp;quot;aa&amp;quot;, &amp;quot;bb&amp;quot;) == &amp;quot;aabb&amp;quot;, while concat(&amp;quot;bb&amp;quot;, &amp;quot;aa&amp;quot;) == &amp;quot;bbaa&amp;quot; != &amp;quot;aabb&amp;quot;. --[[User:JakubNarebski|JakubNarebski]] ([[User talk:JakubNarebski|talk]]) 17:38, 12 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Series of comics? I don't recall any others about Randall's new programming language... [[Special:Contributions/141.101.98.29|141.101.98.29]] 19:13, 12 June 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:1535:_Words_for_Pets&amp;diff=95079</id>
		<title>Talk:1535: Words for Pets</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:1535:_Words_for_Pets&amp;diff=95079"/>
				<updated>2015-06-08T17:00:01Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I skipped the first step by naming my cat &amp;quot;Cat&amp;quot;. On the plus side, even in the third year I was still mostly calling her by her name. --[[Special:Contributions/108.162.254.134|108.162.254.134]] 08:06, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
Not sure this is relevant enough to include, but there's [http://tvtropes.org/pmwiki/pmwiki.php/Main/ADogNamedDog a trope about that] [[Special:Contributions/188.114.111.224|188.114.111.224]] 11:39, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
I interpreted this slightly differently. In the first year, the pet is fresh and new, and you put the effort in to call it by its name. As time goes on, you get sloppier about it. In addition, I believe he missed a ring from it: Expletives. Within a year of having a new cat, I was calling it more by expletives than its name. [[User:Drmouse|Drmouse]] ([[User talk:Drmouse|talk]]) 14:24, 8 June 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
I disagree with the explanation. The comic is about words used to refer to the pet, i.e. to name the pet when talking to someone else, not to talk to the pet. For instance &amp;quot;I forgot to feed Lassie&amp;quot; might later become &amp;quot;I forgot to feed the dog&amp;quot;, then &amp;quot;I forgot to feed the damn thing&amp;quot; or whatever. Am I the only one to understand &amp;quot;refer&amp;quot; like this?&lt;br /&gt;
Zetfr 16:53, 8 June 2015 (UTC)&lt;br /&gt;
:In my household at least, we use the animal's species as its name. For example, instead of &amp;quot;Have you fed Lassie?&amp;quot;, we may say &amp;quot; Have you fed Dog?&amp;quot;. I think is what Randall is implying. [[Special:Contributions/141.101.98.29|141.101.98.29]] 17:00, 8 June 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=797:_debian-main&amp;diff=77152</id>
		<title>797: debian-main</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=797:_debian-main&amp;diff=77152"/>
				<updated>2014-10-14T16:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: /* Explanation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 797&lt;br /&gt;
| date      = September 24, 2010&lt;br /&gt;
| title     = debian-main&lt;br /&gt;
| image     = debian_main.png&lt;br /&gt;
| titletext = dpkg: error processing package (--purge): subprocess pre-removal script returned error exit 163: OH_GOD_THEYRE_INSIDE_MY_CLOTHES&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
{{w|Debian}} is a Linux distribution most notable for introducing {{w|Advanced Packaging Tool|APT}} (Advanced Packaging Tool). APT is a tool that functions as an automated general software installer for Linux systems; all one has to do is tell it what software package they would like to install, and the program will automatically fetch the software and all of its dependencies (other packages that a program relies on, such as a library for processing ZIP archives) from a central ''repository''. It will also automatically handle upgrades by automatically checking if the repository version of a package is higher than the currently installed version, and it can even handle the use of multiple repositories and linking between them; for example, if a piece of software is deemed worthy of inclusion in Debian's main repository, but as a stable release, the software developers can provide their own repository to provide a more experimental version for users who want it, and once that repository is added to APT's source list, APT will automatically realize that it should use the experimental version, since it has a higher version than that of the main repository. Although this wasn't the first package management system for easy Linux installation (that honor goes to {{w|RPM Package Manager|RPM}}), it is the first one that seamlessly integrated online installation and upgrades into the mix.&lt;br /&gt;
&lt;br /&gt;
debian-main is Debian's main repository, included by default in all Debian installations. It's what you might call the &amp;quot;canon&amp;quot; of Debian, containing only those packages that have been approved by official Debian developers. Thus, getting a package on debian-main means that it, theoretically, conforms to a standard of quality.&lt;br /&gt;
&lt;br /&gt;
In this case, however, the Debian developers seem to have not noticed that one of the dependencies for the package is &amp;quot;locusts.&amp;quot; {{w|Locust}}s are real insects, the migratory forms of several grasshopper species, that are best known for breeding extremely quickly, swarming, and devouring all green plant matter they come across, resulting in crop devastation (some consider this a plague). In some parts of the world they are also considered a delicacy. [[Cueball]] probably does not appreciate this as they crawl over his body searching for food, apparently spontaneously generated by APT as it saw that it needed &amp;quot;locusts&amp;quot; to install the package.&lt;br /&gt;
&lt;br /&gt;
The title text is an error line from &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt;, the program used to install/remove APT packages. Every package contains several scripts (although some of them may be empty) that are run on various events related to that package; these are used to perform any setup/cleanup tasks the package needs. This line is an error line indicating that one of those scripts has failed. The relevant portions are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;error processing package (--purge)&amp;lt;/code&amp;gt;: --purge is the option to purge a package completely from the system. This means that the program itself, all related data files, and all configuration files are removed from the system. So, the user was attempting to completely remove the locusts from the system without leaving a trace.&lt;br /&gt;
*&amp;lt;code&amp;gt;subprocess pre-removal script&amp;lt;/code&amp;gt;: The pre-removal script is the code run before actually removing a piece of software. Mostly, this allows long-running software (such as webservers) to stop themselves before removing anything, to avoid corrupting the hard disk. That means the error came while the computer was preparing to get rid of the locusts.&lt;br /&gt;
*&amp;lt;code&amp;gt;returned error exit 163&amp;lt;/code&amp;gt;: &amp;quot;Returned error&amp;quot; means just what it says, the script returned an error. &amp;quot;Exit&amp;quot; means that the error was a result of calling the &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt; function with a non-zero value, specifically the value 163. The exact value has no real significance other than signifying to a user or other application that understands what the code means; neither &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt; nor the Linux kernel itself treat any exit value specially, apart from checking whether the value is 0 (which means no error).&lt;br /&gt;
*&amp;lt;code&amp;gt;OH_GOD_THEYRE_INSIDE_MY_CLOTHES&amp;lt;/code&amp;gt;: This is the message returned along with the error. This seems to be the computer indicating that it is unwilling to go any further with the deletion because the locusts are crawling under its clothes.&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
:AAAAAAAA&lt;br /&gt;
:[A swarm of insects cover Cueball and his computer. He is leaning back on their chair, flailing to get away.]&lt;br /&gt;
&lt;br /&gt;
:My package made it into Debian-main because it looked innocuous enough; no one noticed &amp;quot;locusts&amp;quot; in the dependency list.&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
*This is fixed in [http://packages.debian.org/changelogs/pool/main/m/mingetty/current/changelog#versionversion1.07-2 Debian's mingetty 1.07-2] and above.&lt;br /&gt;
{{comic discussion}}&lt;br /&gt;
[[Category:Comics featuring Cueball]]&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=797:_debian-main&amp;diff=77150</id>
		<title>797: debian-main</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=797:_debian-main&amp;diff=77150"/>
				<updated>2014-10-14T16:40:43Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: /* Explanation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{comic&lt;br /&gt;
| number    = 797&lt;br /&gt;
| date      = September 24, 2010&lt;br /&gt;
| title     = debian-main&lt;br /&gt;
| image     = debian_main.png&lt;br /&gt;
| titletext = dpkg: error processing package (--purge): subprocess pre-removal script returned error exit 163: OH_GOD_THEYRE_INSIDE_MY_CLOTHES&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Explanation==&lt;br /&gt;
{{w|Debian}} is a Linux distribution most notable for introducing {{w|Advanced Packaging Tool|APT}} (Advanced Packaging Tool). APT is a tool that functions as an automated general software installer for Linux systems; all one has to do is tell it what software package they would like to install, and the program will automatically fetch the software and all of its dependencies (other packages that a program relies on, such as a library for processing ZIP archives) from a central ''repository''. It will also automatically handle upgrades by automatically checking if the repository version of a package is higher than the currently installed version, and it can even handle the use of multiple repositories and linking between them; for example, if a piece of software is deemed worthy of inclusion in Debian's main repository, but as a stable release, the software developers can provide their own repository to provide a more experimental version for users who want it, and once that repository is added to APT's source list, APT will automatically realize that it should use the experimental version, since it has a higher version than that of the main repository. Although this wasn't the first package management system for easy Linux installation (that honor goes to {{w|RPM Package Manager|RPM}}), it is the first one that seamlessly integrated online installation and upgrades into the mix.&lt;br /&gt;
&lt;br /&gt;
debian-main is Debian's main repository, included by default in all Debian installations. It's what you might call the &amp;quot;canon&amp;quot; of Debian, containing only those packages that have been approved by official Debian developers. Thus, getting a package on debian-main means that it, theoretically, conforms to a standard of quality.&lt;br /&gt;
&lt;br /&gt;
In this case, however, the Debian developers seem to have not noticed that one of the dependencies for the package is &amp;quot;locusts.&amp;quot; {{w|Locust}}s are a real insect, the migratory forms of several grasshopper species, that are best known for breeding extremely quickly, swarming, and devouring all green plant matter they come across, resulting in crop devastation (some consider this a plague). In some parts of the world they are also considered a delicacy. [[Cueball]] probably does not appreciate this as they crawl over his body searching for food, apparently spontaneously generated by APT as it saw that it needed &amp;quot;locusts&amp;quot; to install the package.&lt;br /&gt;
&lt;br /&gt;
The title text is an error line from &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt;, the program used to install/remove APT packages. Every package contains several scripts (although some of them may be empty) that are run on various events related to that package; these are used to perform any setup/cleanup tasks the package needs. This line is an error line indicating that one of those scripts has failed. The relevant portions are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;error processing package (--purge)&amp;lt;/code&amp;gt;: --purge is the option to purge a package completely from the system. This means that the program itself, all related data files, and all configuration files are removed from the system. So, the user was attempting to completely remove the locusts from the system without leaving a trace.&lt;br /&gt;
*&amp;lt;code&amp;gt;subprocess pre-removal script&amp;lt;/code&amp;gt;: The pre-removal script is the code run before actually removing a piece of software. Mostly, this allows long-running software (such as webservers) to stop themselves before removing anything, to avoid corrupting the hard disk. That means the error came while the computer was preparing to get rid of the locusts.&lt;br /&gt;
*&amp;lt;code&amp;gt;returned error exit 163&amp;lt;/code&amp;gt;: &amp;quot;Returned error&amp;quot; means just what it says, the script returned an error. &amp;quot;Exit&amp;quot; means that the error was a result of calling the &amp;lt;code&amp;gt;exit()&amp;lt;/code&amp;gt; function with a non-zero value, specifically the value 163. The exact value has no real significance other than signifying to a user or other application that understands what the code means; neither &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt; nor the Linux kernel itself treat any exit value specially, apart from checking whether the value is 0 (which means no error).&lt;br /&gt;
*&amp;lt;code&amp;gt;OH_GOD_THEYRE_INSIDE_MY_CLOTHES&amp;lt;/code&amp;gt;: This is the message returned along with the error. This seems to be the computer indicating that it is unwilling to go any further with the deletion because the locusts are crawling under its clothes.&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
:AAAAAAAA&lt;br /&gt;
:[A swarm of insects cover Cueball and his computer. He is leaning back on their chair, flailing to get away.]&lt;br /&gt;
&lt;br /&gt;
:My package made it into Debian-main because it looked innocuous enough; no one noticed &amp;quot;locusts&amp;quot; in the dependency list.&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
*This is fixed in [http://packages.debian.org/changelogs/pool/main/m/mingetty/current/changelog#versionversion1.07-2 Debian's mingetty 1.07-2] and above.&lt;br /&gt;
{{comic discussion}}&lt;br /&gt;
[[Category:Comics featuring Cueball]]&lt;br /&gt;
[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	<entry>
		<id>https://www.explainxkcd.com/wiki/index.php?title=Talk:249:_Chess_Photo&amp;diff=73783</id>
		<title>Talk:249: Chess Photo</title>
		<link rel="alternate" type="text/html" href="https://www.explainxkcd.com/wiki/index.php?title=Talk:249:_Chess_Photo&amp;diff=73783"/>
				<updated>2014-08-16T22:16:27Z</updated>
		
		<summary type="html">&lt;p&gt;141.101.98.29: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I've seen pictures of people doing this before I met xkcd, and I just read the confirmation at knowyourmeme.com that Randall started this. This is friggin' amazing.[[Special:Contributions/108.162.210.235|108.162.210.235]] 15:07, 17 November 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
Comics Missing!--[[Special:Contributions/108.162.250.8|108.162.250.8]] 10:38, 5 December 2013 (UTC)&lt;br /&gt;
:Could you compile these at the community portal? I'll see what I can do about this. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|#707|David}}&amp;lt;font color=#070 size=3&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=#508 size=4&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 11:16, 5 December 2013 (UTC)&lt;br /&gt;
::It's 5 in the morning, and this fixed now. '''[[User:Davidy22|&amp;lt;u&amp;gt;{{Color|#707|David}}&amp;lt;font color=#070 size=3&amp;gt;y&amp;lt;/font&amp;gt;&amp;lt;/u&amp;gt;&amp;lt;font color=#508 size=4&amp;gt;²²&amp;lt;/font&amp;gt;]]'''[[User talk:Davidy22|&amp;lt;tt&amp;gt;[talk]&amp;lt;/tt&amp;gt;]] 13:03, 5 December 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
The last sentence has always been upsetting me and never found the time to comment/correct: Blindfold chess doesn't require any actual blindfold, it's just called that way because the two players don't need a board and just communicate their moves. Therefore, the &amp;quot;blindfold&amp;quot; is not redundant, it is rather the simplest way to play chess on a roller coaster. --[[46.5.2.144]] 22:07, 16 August 2014 (UTC)&lt;/div&gt;</summary>
		<author><name>141.101.98.29</name></author>	</entry>

	</feed>