<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
      <title>pyo-friends</title>
      <description>Pythonic blogs I read</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=d8bd08d1cdd623259a1d4c879facccb1</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=d8bd08d1cdd623259a1d4c879facccb1&amp;_render=rss&amp;page=2"/>
      <pubDate>Thu, 01 Oct 2015 22:39:11 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>Don’t Invest More Emotion Than You Are Willing To Sacrifice</title>
         <link>http://www.ianbicking.org/blog/2015/09/dont-invest-more-emotion.html</link>
         <author>Ian Bicking</author>
         <guid isPermaLink="false">tag:www.ianbicking.org,2015-09-30:blog/2015/09/dont-invest-more-emotion.html</guid>
         <pubDate>Wed, 30 Sep 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Taking Down Tim Hentenaar</title>
         <link>http://zedshaw.com/2015/09/28/taking-down-tim-hentenaar/</link>
         <description>There is a blog post by Tim Hentenaar that says that people should not read my book, Learn C The Hard Way. It has the title “Don’t Learn C The Wrong Way” and it asserts that I am teaching C the wrong way, with a few examples as to why. The problem with Tim’s post, [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=330&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=330</guid>
         <pubDate>Mon, 28 Sep 2015 02:34:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>There is a blog post by Tim Hentenaar that says that people should not read my book, <a rel="nofollow" target="_blank" href="http://bit.ly/informitlcthw">Learn C The Hard Way</a>. It has the title “Don’t Learn C The Wrong Way” and it asserts that I am teaching C the wrong way, with a few examples as to why. The problem with Tim’s post, is that Tim actually doesn’t know how to teach much of anything, and is completely uninformed of the security defects that his own code has. In fact, Tim successfully demonstrates that he is actually a beginning coder who has no business telling others how to code. In this blog post I will simply take down Tim’s supposedly expert opinion by using his replies to me in an email exchange where he demonstrates his lack of understanding, and then tries to cover for it in the most laughable way.</p>
<p>First, let’s establish how much of an expert Tim thinks he is, and what he’s advising you, my reader to do:</p>
<blockquote><p>&#8220;Recently, I came across an e-book written by Zed A. Shaw entitled <a rel="nofollow" target="_blank" href="http://bit.ly/informitlcthw">Learn C The Hard Way</a>, and while I can commend the author for spending the time and energy to write it, I would <em>NOT</em> recomend (sic) it to anyone seriously interested in learning the C programming language. In fact, if you were one of the unlucky souls who happened to have purchased it. Go right now and at least try to get your money back!&#8221;</p></blockquote>
<p>That’s a very serious condemnation of my book, especially from someone who has never taught C, never written a book, can’t even spell “recommend”, and later demonstrates that he doesn’t have a clue about security defects inherent in C. So what are Tim’s complaints about my book?</p>
<h3>Tim Has No Teaching Experience</h3>
<p>The majority of his complaints about my book, <a rel="nofollow" target="_blank" href="http://bit.ly/informitlcthw">Learn C The Hard Way</a> stem from a lack of understanding in my (very successful) teaching method. To Tim, and most old school programmers, the way to teach something is to teach all of the topic at once in one huge chunk. You teach Make by writing a chapter on Make that tells the reader every single little thing about Make possible, and then demonstrate with some code. Here’s Tim’s statement to that effect:</p>
<blockquote><p>&#8220;At this point, the only thing I can think is, &#8220;I&#8217;d just love for you to show me a damn working Makefile!&#8221; A novice will be thinking, &#8220;What the hell&#8217;s a Makefile?&#8221; as the concept of a Makefile has not yet been introduced.&#8221;</p></blockquote>
<p>Then later he says:</p>
<blockquote><p>&#8220;I don&#8217;t know how to set-up my environment, this &#8220;Makefile&#8221; thing pulled a Jimmy Hoffa, and now I have to use this <em>Valgrind</em> thing, after I go download it and build it from source. Great…&#8221;</p></blockquote>
<p>The problem is, Tim didn’t read far enough to where I do explain how to make an environment, and misunderstood my purpose at that point in my book. I’m not teaching the reader to write a Makefile and start a project. I’m teaching them to quickly get their very simple C code to compile. My target readers are people who have a language like Python or Ruby but haven’t dealt with a compiled language before. But to Tim, this is insufficient because he thinks a beginner is like him and needs to know all of the Make to be able to use it.</p>
<p>This lack of understanding of an actual beginner is exactly why so many programmers are so terrible at teaching, or even writing basic software for non-developers. It’s not that a programmer is somehow emotionless or a “robot” like obnoxious nerd haters say. It’s that the majority of programmers have a far more advanced understanding of computing, and specifically the software they create. Through their path to that understanding have forgotten what it was like to be a beginner. This leads them to assume many things that just aren’t true. Such as, “Unless a beginner is taught every single aspect of Makefile construction they cannot use Make’s implicit build rules to build a basic C file.&#8221;</p>
<p>This means that Tim’s statements about how I teach are mostly invalid because he doesn’t understand how people learn to code. He’s never had to teach someone who’s just starting out so he thinks blasting them with a treatise on Makefiles is what they need 4 exercises into a course of study. By contrast, I actually sit with real people and have them go through my books, and then adapt the exercises based on where they get stuck. I also used to have comment sections on every page to gather information on how to improve exercises. Tim basically read K&amp;R and wrote some crappy C code, which we’ll see shortly.</p>
<p>However, Tim’s rabid and obnoxious condemnation of my book isn’t his actual opinion. In private emails he says this:</p>
<blockquote><p>&#8220;I don&#8217;t doubt the seriousness of your offer. In fact, one of my colleagues also read my article, and he and I were discussing it this evening, and he told me that he&#8217;s a fan of your writing style, and would love to see you write a really good book on C.&#8221;</p></blockquote>
<p>Tim doesn’t believe my book is entirely irreparable and a failure as he states, and in private he says there’s only a few problems with it. He even offered to help me make it better despite his lack of experience writing or teaching. What he actually thinks is I should write it the way <strong>he</strong> would write it, then it’d be a good book for you to buy. Despite Tim’s complete lack of qualifications in programming, writing, education, or anything other than having a blog, he thinks that his opinion is so superior that I should rewrite my book to fit his ideas of education, not a <strong>student’s model of learning based on actually sitting with readers and helping them</strong>.</p>
<p>This kind of arrogance and hubris leads me Tim’s largest failing in his post, this code right here:</p>
<pre>void copy(char from[], char to[], size_t n)
{
    size_t i = 0;

    if (!from || !to) return;
    while (i &lt; n &amp;&amp; (to[i] = from[i]) != '&#092;&#048;')
        i++;

    to[n] = '&#092;&#048;';
}
</pre>
<p>Tim’s claim is that this function here is superior to a function I had written called “safercopy”, but it has a critical buffer overflow that he actually attempts to defend in the most laughable way.</p>
<p>To understand Tim’s failure you need to see my original “safercopy”:</p>
<pre>int safercopy(int from_len, char *from, int to_len, char *to)
{
    int i = 0;
    int max = from_len &gt; to_len - 1 ? to_len - 1 : from_len;

    // to_len must have at least 1 byte
    if(from_len &lt; 0 || to_len &lt;= 0) return -1;

    for(i = 0; i &lt; max; i++) {
        to[i] = from[i];
    }

    to[to_len - 1] = '&#092;&#048;';
    return i;
}
</pre>
<p>What sends most C coders into a tizzy about this code is it came from a thought experiment I was doing where I did code analysis on the K&amp;R C book (the book by the authors of C). Many programmers took this as an offense to them (so rational), and so they would focus on how I said this function here (safercopy) was better than a similar string copy function in the K&amp;R C book. The problem is, to discredit my claims that mine is better, they would play this little semantic shell game:</p>
<ol>
<li>&#8220;Your function is vulnerable to Undefined Behavior (UB) just like the K&amp;R function.&#8221;</li>
<li>They then write some example that uses a totally different UB from the hundreds available, not the buffer overflow UB from a malformed C string.</li>
<li>Then proclaim that, since both functions are vulnerable to UB, my claim of mine being safe (notice, not safER), are invalid.</li>
</ol>
<p>This is a lot like you buying a new lock for your front door that’s really great, so you tell your friend about it. Your friend goes, “Pfft, your lock is no better than leaving your door open, I could totally break into it.” Your friend then shows up with a SWAT team battering ram and smashes the door in like butter and says, “See? Your lock is pointless. Just leave your door open.” You, and I, aren’t saying a better lock is completely foolproof and perfect. We are saying it is safer, not totally safe. Doors are easily bashed in using countless methods, right down to setting your house on fire. When we talk safety of the lock, we mean against lock picking compared to the other lock. To say I should leave my door open because there’s a thousand ways to get into my house is insane.</p>
<p>However, my function is more resistant to a common externally accessible vulnerability. This is something I would love to research, but UB has different levels of exploit surface that is accessible to an attacker from outside the running process. A C string is fairly trivial to clobber so that it is missing the ‘&#92;0’ terminator. It’s a bit more difficult to make random pointers go wherever you want, but still possible. It’s nearly impossible to rewrite the C code for a running process to cause a math error and make a compiler skipped a portion that was considered UB. When studying the security of C code we tend to just assume all UB is the same and don’t make this distinction of accessibility to an attacker. Bad C coders then use this UB to simultaneously defend bad code (“All code is breakable with UB”) and condemn other’s code (“Haha, you’re triggering UB”).</p>
<p>When I say my function is safER, I do not mean it is totally invincible. That is impossible in C, and one of the reasons I tell people to not use C anymore. I now firmly believe that C is impossible to write securely and is designed with flaws that are irreparable, mostly because of the huge number of UB that can easily be triggered externally.</p>
<p>I mean that the code in this simple function protects against this one buffer overflow that is often externally exploited, while the original K&amp;R code does not. That’s all.</p>
<p>Which leads me to Tim’s lack of understanding of his own code. Clearly, he thinks his code is even safer than mine, but if you look at it again:</p>
<pre>void copy(char from[], char to[], size_t n)
{
    size_t i = 0;

    if (!from || !to) return;
    while (i &lt; n &amp;&amp; (to[i] = from[i]) != '&#092;&#048;')
        i++;

    to[n] = '&#092;&#048;';
}
</pre>
<p>You’ll see that he only has one size, so if that size is invalid for the to variable then you get a buffer overflow. Here’s a trivial demonstration of it:</p>
<pre>#include &lt;stdio.h&gt;

void copy(char from[], char to[], size_t n) { 
    size_t i = 0;

    if (!from || !to) return;
    while (i &lt; n &amp;&amp; (to[i] = from[i]) != '&#092;&#048;') {
        printf(&quot;to[i]=%c, i=%zu&#92;n&quot;, to[i], i);
        i++;
    }

    printf(&quot;i=%zu, n=%zu&#92;n&quot;, i, n);
    to[n] = '&#092;&#048;';
}

int main(int argc, char *argv[])
{
    // thanks to @mistahzip for pointing out this 
    // is a better demonstration code
    char to[] = {'A','A','A','A'};
    char from[] = &quot;XXXXXX&quot;;

    copy(to, from, 6);

    printf(&quot;Final byte is: %x&#92;n&quot;, to[3]);
}
</pre>
<p>UPDATE: I had my original analysis wrong and I apologize for that. This is a better demonstration of the problem, and a new analysis showing the buffer overflow.  Thanks for @mistahzip for setting me straight and putting up with me being an asshole.  Just goes to show you, this shit is hard.</p>
<p>Tim&#8217;s code works as long as the strings are valid, however it&#8217;s incredibly common for C strings to be invalid, and that&#8217;s how you get the buffer overflows from C strings.  In this example, I&#8217;ve added printing so you can see what&#8217;s going on.  I use a malformed <strong>to</strong> array so that you can see, if it&#8217;s wrong then it gets overwritten with garbage.  In addition, he does <strong>to[n]</strong> which will always set the wrong byte if <strong>from</strong> is larger than <strong>to. </strong>Any C coder worth their salt would realize this, and in many ways this is worse than even the K&amp;R version since it is more complicated.</p>
<p>When you do this on many systems you just get a bus error of some sort, but not all. Many times you’ll have the end of one string still be inside a valid region of memory, and operating systems aren’t even close to foolproof on protecting buffer overflows. If you’re using a system that allocates stacks on the heap (such as in greenthreads), then you’ll typically blast right past this variable and into another function’s code. That’s very dangerous and creates remote code execution vulnerabilities.</p>
<p>You may be thinking, “Yeah but I could write code that breaks your <strong>safercopy</strong> too!” Yes, like I said, C has so much UB it’s an entirely unsafe language and you can destroy anything. The point though is that this is an insanely common and trivial programming error that is just bad math for one parameter. Mine you have the size for both so you don’t make this error <strong>as easily</strong>. You can still make the error, but it’s harder than with Tim’s. With Tim’s you’ll make this error all the time.</p>
<h3>Arrogance and Hubris</h3>
<p>I told Tim about this really silly error in his blog post and did he do the right thing and at least admit publicly that I demonstrated a trivial error in his code? Nope, not only has he not updated his code, further demonstrating that he doesn’t know what he’s talking about at all, but he proceeded to <strong>defend</strong> his code with the most asinine of defenses:</p>
<blockquote><p>&#8220;That&#8217;s why strncpy() / strlcpy() were written, but of course with all such things, there&#8217;s a performance penalty to pay. Even with length checking, it&#8217;s still possible to trigger UB, for example via integer promotion (i.e. strncpy() with a negative length, which I did point out) or having dest and src overlap. … It&#8217;s much harder to carry out a buffer overflow attack with SSP, DEP, and ASLR these days. Although there are always ways around the best intentioned restrictions.&#8221;</p></blockquote>
<p>His function, in his own words, isn’t wrong because, again, you can use a totally different set of UB to cause problems so this easily externally accessible one isn’t a problem. And there’s also strncpy/strlcpy, so his function is still valid (what?). Oh, and also there’s, like, uhhh oh SSP and DEP that totally protect against these problems (even though they don’t and we see it all the time). These are the words of someone stumbling to still be right to protect their ego, and demonstrates <strong>Tim’s lack of intellectual honesty and integrity.</strong></p>
<h3>Tim Is An Unqualified Beginner</h3>
<p>This is your classic defense from an arrogant programmer who refuses to admit that he actually doesn’t know what he’s talking about. When I receive complaints that my code isn’t working, even if it’s been run through the ringer over and over, I still go and double and triple check that it’s working. If Tim had sent me this kind of trivial defect I would have fixed my code and worked to find out why I caused the error. To programmers like Tim, who think they know C but are totally clueless about computer security, it’s inconceivable that his code could be wrong.</p>
<p>This is a sign of a beginner. A beginning programmer assumes his code is right even in the face of all evidence to the contrary, like Tim does here. They defend it to the end, because they are personally attached to their creation and not objective. An expert assumes his code could be wrong at any moment and adds as many defenses as possible. This shows that you should not listen to Tim about C coding, and definitely not learn anything from him. He is entirely unqualified and should be ignored.</p>
<h3>Conclusion</h3>
<p>Tim Hentenaar wrote a confused screed about my book being terrible and claiming nobody should buy it. However, his expertise is completely lacking to make that determination, his code has defects in it, and he arrogantly refused to admit that it had problems. He also defends his security defects with confused logic about UB and the existence of other functions that have nothing to do with his own code. Listening to Tim about how to learn C is therefore a dangerous thing to do. No book is perfect, and let me tell you that first printing of mine had loads of problems, but until Tim writes a better C book you’d do well to ignore his advice and him.</p>
<p>In fact, this is the problem with the majority of the detractors from my book. None of them have written books, and many of them don’t even code C or have C in production. Writing books and teaching people is incredibly difficult, much more difficult than hanging out in IRC yelling at beginners about Undefined Behavior or writing blog posts. Over this next week I’m going to systematically take down more of my detractors as I’ve collected a large amount of information on them, their actual skill levels, and how they treat beginners. Stay tuned for more.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/330/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/330/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=330&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
      </item>
      <item>
         <title>Help Wordnik Add One Million Words</title>
         <link>http://zedshaw.com/2015/09/23/help-wordnik-add-one-million-words/</link>
         <description>I’m going to tell you about a secret weapon I’ve been using for years in my writing, song writing, and naming of things: Wordnik. I’ve used Wordnik to change up wording and come up with creative phrasing, browse words for interesting ones, and to follow ideas and explore concepts. What I do is start at [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=328&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=328</guid>
         <pubDate>Wed, 23 Sep 2015 22:45:53 +0000</pubDate>
         <content:encoded><![CDATA[<p>I’m going to tell you about a secret weapon I’ve been using for years in my writing, song writing, and naming of things: <a rel="nofollow" target="_blank" href="https://www.wordnik.com/">Wordnik</a>. I’ve used Wordnik to change up wording and come up with creative phrasing, browse words for interesting ones, and to follow ideas and explore concepts.  What I do is start at a word I’m interested in or think might work for a concept, and then I follow all the various related words and this expands into even more conceptual ideas.  What I like about Wordnik is the collaborative nature of it and how it seems to be a “modern OED”, being more of a description of how English is rather than a proscription of how it should be.</p>
<p>Wordnik acts as a kind of inspiration engine for me because it has so many relational features.  From one word, such as <a rel="nofollow" target="_blank" href="https://www.wordnik.com/words/allocate#hear">allocate</a>, I can see all of this:</p>
<ul>
<li><span>&nbsp;The definition from several sources.</span></li>
<li>Examples of the usage in the popular press.</li>
<li>Currently known etymologies, which is very important to me since I like using old weird words like “octothorpe” to mess with people.</li>
<li>Related words in every form you can think of, which is essential when you’re doing creative writing or naming something.</li>
<li>Images related to the word, which I’ve used in exploring painting ideas.</li>
<li>Hear official and user created pronunciations of the word.</li>
</ul>
<p>So if you’re wondering how in the hell I come up with such awesome names for my projects, cram complex ideas into a tweet, and turn the phrase, then Wordnik is my main word tool.</p>
<p>One thing I do, almost every day, is something called object writing, and I use Wordnik’s “I always feel lucky” button to do that.  I just roll over to there, click the button, and work for 10 minutes on that word.  Today’s word is <a rel="nofollow" target="_blank" href="https://www.wordnik.com/words/entropy">entropy</a> and I’ll do a 10 minute piece of writing that explores all of my senses through that word, but Wordnik makes this even better because if I don’t like that word I use the <strong>Relate</strong> feature to find another word, or sometimes I’ll setup an extra level of difficulty where I use two related words.</p>
<p>If you want to improve your writing then start doing this every day.   It takes 10 minutes and will dramatically change your writing.</p>
<h3>One Million Words</h3>
<p>Wordnik right now is trying to do an ambitious dictionary project where they want to add one million missing words to their online dictionary.  The philosophy of Wordnik is to make the dictionary a description of what’s being used, not a proscription of what should be valid English.  Uptight weirdos will yell at you that “Ain’t is not a word!”  Well, those uptight assholes are wrong.  English is a language that steals words from every language it touches and makes it easy to invent new ones.</p>
<p>With that in mind, <a rel="nofollow" target="_blank" href="https://www.kickstarter.com/projects/1574790974/lets-add-a-million-missing-words-to-the-dictionary">Wordnik has spawned a Kickstart to add a million missing words to their online, free, collaborative, and easy to use dictionary.</a>  If you love words like I do, then this is a great project to back.  I mean, you probably backed a stupid watch that will do everything your phone does and probably fail to even talk to your phone.  You’ve probably backed a bunch of really crappy comic books, oh and let’s not forget that really terrible card game you never play.  And let’s face it, some of you have put money into Wikipedia just so the deletionists can continue to make sure that the only knowledge left is of wealthy assholes, politicians, and Linux distros.</p>
<p>I mean <strong>come on</strong>, you gave money to Wikipedia, the organization that thinks <strong>I</strong>, a three time published author is not notable enough to have a page, but gives <a rel="nofollow" target="_blank" href="https://en.wikipedia.org/wiki/GNewSense">GNewSense</a> Linux a fucking page.  A total of 3 people probably used that distro, and you donated money to keep that pointless piece of information around.</p>
<p>Wordnik is way better.  <a rel="nofollow" target="_blank" href="https://www.kickstarter.com/projects/1574790974/lets-add-a-million-missing-words-to-the-dictionary">Help them help everyone catalog all of English by clicking this link.</a></p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/328/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=328&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>writing</category>
      </item>
      <item>
         <title>Facebook Identity is Extortion and Slander</title>
         <link>http://zedshaw.com/2015/09/20/facebook-identity-is-extortion-and-slander/</link>
         <description>I’m currently dealing with a problem at Facebook where someone is impersonating me and Facebook refuses to do anything about it. I was notified by a friend that this profile zed.shaw was friending all of my actual friends and potentially messaging them as me. To stop the impersonator I wasn’t able to simply contact Facebook [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=325&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=325</guid>
         <pubDate>Sun, 20 Sep 2015 16:06:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>I’m currently dealing with a problem at Facebook where someone is impersonating me and Facebook refuses to do anything about it.  I was notified by a friend that <a rel="nofollow" target="_blank" href="https://www.facebook.com/zed.shaw">this profile zed.shaw</a> was friending all of my actual friends and potentially messaging them as me.  To stop the impersonator I wasn’t able to simply contact Facebook and have the profile taken down.  Instead I had to signup for my own <a rel="nofollow" target="_blank" href="https://www.facebook.com/zed.a.shaw">profile zed.a.shaw</a> and file a bug report with them.</p>
<p>This amounts to extortion.  If Facebook is claiming to require real names and identities on its platform, and requiring people to signup for Facebook to eliminate impostors, then they are extorting signups out of people.  Your only choice is to become a Facebook member and reserve your spot in their ad driven world even if you don’t want to use their platform at all (which I don’t).</p>
<p>However, this gets worse.  Here is their reply when I submitted the only kind of ticket I could figure out how to submit to correct the impostor:</p>
<p><a rel="nofollow" target="_blank" href="http://zedshaw.files.wordpress.com/2015/09/1442764184_full.jpeg"><img src="http://zedshaw.files.wordpress.com/2015/09/1442764184_thumb.jpeg?w=640" align="middle" class="aligncenter"></a>
<p>And the impostor is accepting Happy Birthday messages (on a day that’s not my birthday):</p>
<p><a rel="nofollow" target="_blank" href="http://zedshaw.files.wordpress.com/2015/09/1442764289_full.jpeg"><img src="http://zedshaw.files.wordpress.com/2015/09/1442764289_thumb.jpeg?w=640" align="middle" class="aligncenter"></a>
<p>This is proof the impostor is actually impersonating me, and Facebook chose to do nothing about it.</p>
<p>Rather than solve my problem they’re playing the typical bureaucratic game of telling me that I haven’t properly filled out the correct forms and submitted to the proper department to resolve this issue, please try again.  For a company that is claiming to create a safe space for everyone, even creating an <a rel="nofollow" target="_blank" href="https://www.facebook.com/safety/bullying/">anti-bullying hub</a>, this is unbelievable.  <strong>I should not have to navigate Facebook’s problem reporting system to have this resolved.</strong></p>
<p>In my case this could get potentially worse for Facebook.  I’m a published author with an actual business reason to not have impostors on a platform like Facebook.  Imagine if this person decided to start contacting potential readers and slandering me.  Or posting offensive messages pretending to be me so that readers of my books found them.  Well honestly I doubt this guy could do that better than me, but the point is, they could invent some form of slander that would ruin my book sales.  This person could also ruin my relationships with friends who are currently following the impostor account.  Since Facebook refuses to take the account down and transfer control to me, and they claim to enforce identity giving visitors a false sense of security in trusting this impostor, then Facebook is actually the one causing the slander.</p>
<p>I believe that their actions could fall under both the Safe Harbor laws for sites and possibly the spam laws, but it’s vague.  In the case of the safe harbor laws, they are exerting editorial control on identities and failing to enforce that means that allowing impostors makes them liable for any slander.  In the case of the spam laws (much less possible) they are requiring people to sign up for Facebook to report problems, and also making the process onerous and difficult.  The laws against spam require that people can unsubscribe from all contact with a company without logging in, and I believe you should be able to report abuse of a profile in the same way.  Much like a DMCA takedown or spam unsubscribe, I shouldn’t have to be a member of a social platform to report an abusive account on that platform.</p>
<p>Right now I’ve contacted the impostor and asked them to give up the account, since Facebook can’t, but I should not <strong>have</strong> to contact an abuser to have this resolved.  The entire point of having a system to report problems from abusive people is that I don’t want to talk to the abusive person.  I want their impostor account wiped out and all the messages they’ve sent to my real actual friends given to me so that I can make sure I was not maligned.  There should be one page that I go to report an account for abuse, and that’s it.  This extorting my eyeballs into viewing their shitty ads just to get an abusive asshole off my name is entirely wrong.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/325/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=325&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <media:content medium="image" url="http://zedshaw.files.wordpress.com/2015/09/1442764184_thumb.jpeg"/>
         <media:content medium="image" url="http://zedshaw.files.wordpress.com/2015/09/1442764289_thumb.jpeg"/>
         <category>rants</category>
      </item>
      <item>
         <title>Educational Mithridatism</title>
         <link>http://zedshaw.com/2015/09/14/educational-mithridatism/</link>
         <description>Some things that you need to do are a lot like arsenic. These are activities that you know you should do, but the act of doing them simply drives you mad and feels like they are killing you. Playing scales in music is a great example of this. You sit down to study guitar and [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=314&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=314</guid>
         <pubDate>Mon, 14 Sep 2015 22:34:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>Some things that you need to do are a lot like arsenic.  These are activities that you know you <strong>should</strong> do, but the act of doing them simply drives you mad and feels like they are killing you.  Playing scales in music is a great example of this.  You sit down to study guitar and you know you should do about 30 minutes of scales, but the mindless repetitive motion and pointless sound drives you to boredom.  You want to play like Stevie Ray Vaughan now! Fuck these scales!</p>
<p>You sit down to do these mindless, boring, stupid, pointless, annoying, exercises with no immediate value and all you see before you is a massive plate of arsenic.  You want to do it now! How can playing the same scale over and over possibly help?!  Now now now!  Ugh, this is so boring.  And then you stop before the arsenic kills you, but when you try to do what you really want you fail.  You stop playing scales and then sit down to play your favorite song and can’t, then you get frustrated and give up.  Fuck the guitar!  It’s stupid!</p>
<p>Many people who react this way to practice end up only ever attempting the things they can do naturally, which is really not many things for most humans.  If you can’t get immediate results without practice you give up and come up with crazy excuses about why it’s stupid.  Even worse, maybe you’re the kind of person who sets insanely unrealistic goals (like learning all of Steve Vai’s repertoire in one month) so that when you fail at it you can save face and say it was just too hard.  Well of course it is, if you’re incredibly unrealistic and don’t want to practice.</p>
<p>In <a rel="nofollow" target="_blank" href="http://bit.ly/informitzsthw">my books</a> I have exercises that are like this.  Things like making a deck of flash cards to memorize all the keywords in a language are exactly the kind of arsenic infected repetition that drives people nuts.  Typing the <strong>cd</strong> command 20 times to learn how to use it also seems useless and repetitive.  The reason I have these exercises is they’re a quicker way to get language proficiency than if you just banged your head on coding samples for hours on end.  A little bit of rote memorization has this magical quality of removing a main blocker to learning to use a language: symbol and word recognition.  Rather than write code and constantly have to stop to know what a word is, you already have that word primed in your memory and simply need to learn to apply it.</p>
<p>However, enjoying arsenic activities is not normal.  It’s a myth that there’s a small percentage of people who just can’t sit still and the rest of the world are perfect little angels who can do exactly as told and mindlessly write their names a million times to learn penmanship.  It’s bullshit.  Everyone has some tolerance level for boring shit, it’s just yours is probably lower than others, but nobody except a few people with some forms of atypical neurology can sit for 12 hours and do the same thing for no reason.  Not at first anyway.  This takes training.</p>
<p>I believe that the root of this belief in mindless repetition being a good character trait comes from America’s puritanical history.  You got into heaven by getting up early and working hard in the fields until you died of tuberculosis or famine.  If you worked hard enough you’d have enough money to buy your way into heaven, so lazy people just went to hell.  This interesting bit of history is also why bohemians seem to think that memorization creates boring robots who will never have a creative actualized soul.  Bohemians are simply reacting to the puritanical bullshit, but in the process inventing their own bullshit.</p>
<p>It’s important for learning and personal growth that you learn to tolerate rote education, but that <strong>only </strong>learning with rote methods will also hold you back.  The killer combination in education is when you use rote training for basic building block skills, and then apply them to creative problems to learn how to use them.  The world of programming is loaded with people who have memorized every square inch of manuals and standards, but who couldn’t code their way out of a lego castle, never producing a single piece of software of any substance.  There’s also a crazy number of painters who do nothing but conceptualize all day and have no idea why their paintings keep cracking and can’t make a cup look like a cup.  What you want is to be neither of those people by being both of them at the same time.</p>
<p>For me this is just second nature by now.  I can sit down and play scales on the guitar for hours, or draw the same thing over and over to prefect a technique, or do flash cards to learn a new language.  But, I’ve trained myself to turn off the heaving desperate anguish that flares up when I do them.  I didn’t naturally have this ability to practice basic skills for hours. I built my tolerance to it just like arsenic.</p>
<p>I’m going to call this practice <strong>Educational Mithridatism</strong>, after the king <a rel="nofollow" target="_blank" href="https://en.wikipedia.org/wiki/Mithridates_VI_of_Pontus">Mithridates VI</a> who was famous for having slowly increased the amount of poison he could tolerate so he couldn’t be poisoned.  Apparently his mother poisoned his father, which is definitely going to make someone crazy enough to eat poison every day.  Whether it’s true or not, there is some evidence that <a rel="nofollow" target="_blank" href="http://www.wired.co.uk/news/archive/2012-10/17/genetic-immunity-to-arsenic">humans can build a tolerance</a> to arsenic and other natural poisons.  For this essay, let’s just assume that you can do it, and I’m using it as an analogy.</p>
<p>The reason I like this analogy for doing things you must, but dread, is it frames the activity correctly. It is perfectly normal for you to hate boring repetitive things.  People who like doing boring shit are not magically better moral individuals than you are.  They are just different, and I bet if you asked them they’d say they wish they were more “creative” (which has it’s own self-defeating attitude I’ll write about next).  If you have a hard time sitting down and practicing, then don’t beat yourself up.  Admit that you hate it, that it feels like poison, it’s going to kill you, and take the challenge and build your tolerance.</p>
<h2>How To Do It</h2>
<p>You now want to train your tolerance for arsenic.  Arsenic isn’t really the best word since it’s not clear you can actually build a tolerance to it, so I’ll say you want to practice Educational Mithridatism (EM).  This will require you exposing yourself to what you hate, and slowly and methodically build a tolerance to it.  This will require exposure and effort, but I have a way that may help you do it.</p>
<p><strong>Purpose</strong>: The very first thing is you have to figure out what benefit you will get out of this activity if you can tolerate it.  The core of the problem is people who sit down to practice something seem to have no ability to see how it will benefit them.  Even worse they don’t believe others when told what the purpose is.  To begin, you need to clearly write down what the point is, and what you’ll get out of it.  Practicing scales will make it easier to play the music you like.  Learning to draw spheres makes it possible to render other spherical objects.  Learning the keywords to a language makes it easier to read and write code.  Before you begin the activity, review the benefits and hold that fixed in your mind.</p>
<p><strong>Baseline Tolerance: </strong>Next you’ll want to have some way to track how long you’re able to tolerate this activity.  Get a stopwatch or use your phone, sit down to do the activity, and the second you feel your rage rise up in your chest, stop.  Even if it’s just 2 seconds.  Stop the watch, and write that down in some kind of log book.  Just a little moleskin will work for this log book, but I also like the <a rel="nofollow" target="_blank" href="http://www.uncalendar.com/index.jsp">Uncalendar</a>, but whatever you do keep it simple.</p>
<p><strong>Building Tolerance</strong>: Once you have your baseline, even if it’s just 2 seconds, you can then start to build your tolerance.  Set a timer for that amount of time, plus “a little more”.  I say that vaguely because if it really is 2 seconds then you’ll need to probably try for 10 seconds or more.  If it’s 5 minutes then shoot for 6 minutes.  The purpose is to set the timer, then do the activity and not pay attention to the timer until it goes off.  Then tell yourself if you really made it or if you need to attempt that time again.  Keep trying to reach this time limit until you can do it successfully, recording each time you attempted.  Once you can reach that time, then kick up a bit more, again maybe 10% or a bit more.</p>
<p><strong>Take Breaks</strong>: Take a break for about 5-10 minutes between each attempt. If you don’t take a break then you won’t be recharging your resolve for the next attempt.  Force yourself to take a break no matter what.</p>
<p><strong>Make A Leap</strong>: Once you’re slowly inching your tolerance up in very measured ways you’ll want to attempt a leap.  You may be ready to double your time or more without realizing it. Either switch to a stop watch and just go for as long as you can then record how long it was, or set the timer for double or triple what you can handle.  Track how long you really did it during these leaps and then try to set that as your new level.  If you fail at a leap, don’t worry, just go back to slowly building it up.</p>
<p><strong>Test Your Goal</strong>: After you do these sessions for a while you’ll want to apply your training and see if it’s working.  It most likely won’t have any impact for a while, but one day you’ll try your goal activity and suddenly it’s way easier.  At a certain point you may even be able to just stop doing your tolerance building training and switch to simply doing your goal activity as your training.  For example, if you’re forcing yourself to memorize C language keywords, and one day reading C code is suddenly very easy, then you probably don’t need to memorize the keywords anymore.  Just start coding in C as much as possible.  Goal accomplished.</p>
<p><strong>Don’t Over Do It</strong>: The last note is to actually treat this like arsenic and don’t over do it.  You can easily push yourself too hard and burn yourself out, or if it’s a physical activity, harm your body.  The reason is you start tracking yourself and then you get excited that it’s working, so you decide to go for it and actually you are totally not ready.  Instead, build it in small doses, and when doing the arsenic activity feels natural you know you’re ready to try something challenging.</p>
<p>Hopefully this little essay helps out people who wish they could just sit down and practice something they despise but know they need.  The key is that you aren’t a less moral or stupid person because you can’t focus.  You’re just someone who never learned how to do it and need to train yourself.  It could take years, but if it’s important to you, then this is how you do it.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/314/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=314&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
      </item>
      <item>
         <title>Samsung Pay's MST Transactions and Merchant's Ability to Detect “Cloned” Magstripe Tracks</title>
         <link>http://lucumr.pocoo.org/2015/8/31/the-thing-about-samsung-pay</link>
         <description>&lt;p&gt;I have a weird obsession with payment systems.  They fascinate me.  I find
it very satisfying to make a credit card transaction and to get a text
message confirming the purchase on my phone a second afterwards.  As
someone obsessed with networks, scalability and user experience I find
this a very interesting field even though it's embedded in probably the
least agile and most regulated industry.  But not just the technology is
interesting, also the fraud aspect is.  Fraud prevention is an equally
interesting topic to ponder about.&lt;/p&gt;
&lt;p&gt;What makes frauds in payments so interesting is that there are many
different payment protocols that exist throughout the world and your
credit card is valid with almost all of them.  The fraud vectors are huge
and very often the only thing that keeps fraud rates down is a random spot
checks and common sense.&lt;/p&gt;
&lt;p&gt;The reason my interest got piqued again recently was Samsung Pay,
particularly the MST part.  MST, if you are not familiar with it, stands
for magnetic secure transmission.  The idea is that the phone emits
a magnetic field that carries the information of track 2 on a credit card
(at least in principle).  What this means is that you can go to a lot of
magstrip readers, hold your phone to it, and the reader thinks the card
was swiped.  (Assuming there are no other checks that a card is in a
slot)&lt;/p&gt;
&lt;p&gt;From a fraud perspective this seems crazy.  You scan someone's credit
card, duplicate it onto your phone and off you go.  Here are the results
of my investigation about how this is supposed to be used securely.&lt;/p&gt;
&lt;p&gt;But for this we need to cover some ground.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;a-bit-of-history&quot;&gt;
&lt;h2&gt;A Bit of History&lt;/h2&gt;
&lt;p&gt;If we don't go too far back, the earliest forms of standardized credit
card processing were based on a credit card number.  The credit card
number in itself is split into two parts.  The first six digits are the
IIN or Issuer Identification Number.  It identifies the network of the
card (MasterCard, AMEX, Visa, etc.) and might identify the bank within
that network.  The rest (the remaining 10-13 digits) are the PAN or
Primary Account Number.  IIN + PAN + expiration date + name of cardholder
are the basic requirements for making a credit card transaction.&lt;/p&gt;
&lt;p&gt;However as you can guess, since all that information is on the card there
is very little that actually protects a payment.  That's why on most of
those transactions done that way they will also ask for the signature of
the cardholder.  That signature really only plays a role if the
transaction gets disputed.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-magstripe&quot;&gt;
&lt;h2&gt;The Magstripe&lt;/h2&gt;
&lt;p&gt;What makes credit cards convenient for in-store purchases is that you do
not need to write down numbers, instead you can &amp;quot;swipe&amp;quot; the card.  At
least you do that in the US ;)  When you swipe the card, the reader reads
the two tracks on the magstripe.  They are almost the same with a
different data density.  Both tracks contain: IIN + PAN, country code,
expiration date and a field for discretionary data.  It also contains the
service code.  The service code tells the terminal how the card wants to
be confirmed (does it work internationally, does it need online
verification, does it need a pin, AM only etc.)&lt;/p&gt;
&lt;p&gt;Track 1 which has higher density also contains the card holder name and
has a bit of extra space for the discretionary data.  So if you swipe the
card, you have pretty much all the info that's written on it.  What's in
the discretionary data we will cover later.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;transaction-types-and-security-codes&quot;&gt;
&lt;h2&gt;Transaction Types and Security Codes&lt;/h2&gt;
&lt;p&gt;An important tool for understanding fraud and to combat it is to split the
one huge problem of credit card fraud into smaller sub-problems.  In
particular the most important split is &amp;quot;card present&amp;quot; or &amp;quot;card not
present&amp;quot; (CNP) which should indicate if the physical card was present at
the origin of the transaction or not.  So how do you do that if the data
is the same?  The earliest form of trying to combat this was the addition
of two security codes.  They have various different names (CVC, CVV, CID)
and on most cards it comes in two flavors: code 1 and code 2.  One is
stored in the magstripe in the discretionary data field, the other is
printed on the back of the card.  The idea is that you can differentiate
between transactions carrying no security code, or CVC1 or CVC2.  If
someone skimmed your card through a magstripe reader, they can get to all
data with the exception of CVC2.  If someone takes your card number via
phone they won't get your CVC1.&lt;/p&gt;
&lt;p&gt;At this point you can already see that there are different types of
transactions with different fraud parameters.  If someone does not use a
CVC code it does not mean that the transaction will be declined outright,
but it indicates that something is fishy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;emv&quot;&gt;
&lt;h2&gt;EMV&lt;/h2&gt;
&lt;p&gt;EMV is the answer for all problems and has been for a long time.  The
reason it plays little role here is because EMV in itself is secure (bad
chip implementations notwithstanding).  However EMV is still not rolled
out in the US and as such, there is a huge market where magstripe is still
something people need to deal with.  Also EMV without NFC support cannot
support MST which is the topic of discussion here.  We will come back to
that later however.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;modern-transaction-types&quot;&gt;
&lt;h2&gt;Modern Transaction Types&lt;/h2&gt;
&lt;p&gt;What should be clear now is that there are many different ways to make a
credit card transaction.  But what is that actual transaction?  At one
point you want your money.  If you get your money or not as a merchant
depends on if the transaction was fraudulent or not, and if it was, if you
had a chance to detect the fraud yourself.&lt;/p&gt;
&lt;p&gt;At one point you need to actually try to charge the issuer of the card as
a merchant.  Ideally you do it as quickly as possible.  If you do it at
the time you swipe the card, you might directly go online and check with
the card issuer if everything is in order.  This happens in most terminals
now where the terminal directly talks to the bank to record the
transaction.&lt;/p&gt;
&lt;p&gt;A more evolved version of this method is to replace the magstripe with a
EMV chip.  That chip can a challenge/response game with the payment
terminal which means that each purchase is unique and skimming the data
off the chip will not be any good for future transactions.  That again
will only work for transactions that actually use the EMV chip.  If you
just steal the magstripe and go to the US where all readers are magstripe,
this will do absolutely nothing to you.&lt;/p&gt;
&lt;p&gt;Likewise for online payments many issuing banks will use 3D Secure for
payment verification.  The idea is that the online form for your credit
card number also presents you an iframe with an extra input form by the
bank.  This allows a second factor to confirm the payment.  For instance
on my Austrian Erste Mastercard the second factor is a confirmation with a
transaction code.  The transaction will be declined unless I confirm the
payment in the iframe with a unique token sent to my phone via SMS.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;tokenization-apple-pay-samsung-pay&quot;&gt;
&lt;h2&gt;Tokenization: Apple Pay / Samsung Pay&lt;/h2&gt;
&lt;p&gt;In an ideal world the magstripe would no longer exist and all terminals
would use the EMV chip and online transactions would require 3D secure.
However that's clearly not happening because the US seem to take bloody
ages to replace their infrastructure.  And not just the US.  The idea to
force everybody to newer and in this case kinda incompatible technologies
did not work for many years, so an alternative has to appear.&lt;/p&gt;
&lt;p&gt;One alternative is what's often called &amp;quot;Tokenization&amp;quot; and oddly enough, it
works by replacing the customer equipment rather then the merchant one.
Instead of making all merchants upgrade their terminals to support EMV,
you instead upgrade the customer's credit card to a phone.&lt;/p&gt;
&lt;p&gt;To understand why that's necessary you need to understand that NFC is not
always NFC and in case of Samsung it might not even involve an actual RFID
chip at all.  In Europe when you use NFC for a payment the card transmits
a response to a challenge like an EMV chip is.  The transaction gets
confirmed safely either directly by the card or in combination with the
user's PIN.  In either case the transaction gets confirmed through the
issuer.  In the United States however EMV often does not exist, so NFC has
an alternative method where it transmits the MSD (magnet stripe data)
instead.  Apple Pay can do that similar to how Samsung Pay can transmit
the very same data via magnetic pulses or NFC.&lt;/p&gt;
&lt;p&gt;So how does that make anything any more secure?  Because of tokenization.
Remember how the credit card number is split into IIN and PAN and how the
magstripe contains this extra discretionary data.  The idea is that
assuming the terminal is connected to the internet and verifies
transactions with the issuing bank the phone can play a little trick.  The
bank provides the phone with a method to &amp;quot;clone&amp;quot; the card securely onto
the phone.  At this point the phone acts as a hardware token generator.
Whenever it confirms a transaction it replaces the PAN with a uniquely
generated one and places some extra data in the discretionary data part.
Both of that information gets transmitted to the issuing bank or TSP
(token service provider, so MasterCard or Visa) where the token PAN (DPAN)
gets replaced for the real PAN.  The actual flow is a bit more complex
than that, but in the end the transaction goes through like before.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-merchant-and-tokenization&quot;&gt;
&lt;h2&gt;The Merchant and Tokenization&lt;/h2&gt;
&lt;p&gt;The important part here however is the merchant and this is where things
get tricky.  With Apple Pay the transaction is always done through a form
of NFC.  Either NFC with MSD or proper EMV NFC.  It means that the
merchant explicitly agrees with this form of payment and will introduce
the system to the employees that accept the transactions.   To confirm
such a payment as a merchant you just make sure that the transaction is
made from an iphone and everything else &amp;quot;should be secure&amp;quot;.  The only
case of fraud is if someone managed to get a card on their phone which
they were not entitled too, but that's the bank's problem because they
should make that flow secure.&lt;/p&gt;
&lt;p&gt;The situation however is different with Samsung Pay and the reason for
that is MST.  As Samsung Pay works with non NFC POS terminals the question
is how a merchant can differ a phone that uses Tokenization properly or
a fraudulent phone that just relays the magstripe tracks from a stolen
card.  In fact, the merchant can't really do anything there because the
transaction is as far as I know indistinguishable from what is shown on
the terminal.  The only party that could reliably block the transaction is
the issuer or TSP.  This interestingly enough can be solved by supporting
EMV :)&lt;/p&gt;
&lt;p&gt;A modern card (one that would be used with Samsung Pay) could come with
magstripe and EMV and the magstripe could indicate that the card prefers
the chip over swiping.  In this case you could still clone the magstripe
into your phone, but the transaction would be declined if it used neither
tokenization nor the chip.  For this to work however, all merchants need
to support EMV which currently is not the case in the US.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-non-emv-apocalypse-of-2015&quot;&gt;
&lt;h2&gt;The Non EMV Apocalypse of 2015&lt;/h2&gt;
&lt;p&gt;Something interesting is going to happen end of October 2015.  The US will
finally start to force merchants to upgrade to terminals that support EMV.
From that point onwards any card that has an EMV chip, but the chip was
not used for the transaction and that transaction was fraudulent will
become the merchant's problem.  Assuming Samsung Pay becomes widespread
it could make this liability shift a bit more painful because as a
merchant you can not tell a good Samsung phone from a bad Samsung phone,
whereas you could probably tell an original credit card with embossed
numbers from a fake card with mismatching numbers and making your own
embossed cards with all the cards you skimmed is a lot more work than to
clone a card into a phone.&lt;/p&gt;
&lt;p&gt;So maybe EMV will become a bigger thing as a result of Samsung Pay even if
the technology in itself has some potential for magstripe abuse.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;death-of-msd&quot;&gt;
&lt;h2&gt;Death of MSD&lt;/h2&gt;
&lt;p&gt;Interestingly enough the roll-out of EMV in the US might have some bad
aspects for European travellers and others.  Our cards have a very
different fraud profile than American ones because domestic transactions
are done via EMV for nearly thirty nears now, with the liability shift
having happened more than 10 years ago.  In Europe cards prefer chip and
pin for terminals and NFC is only supported for EMV transactions.&lt;/p&gt;
&lt;p&gt;The US terminals might use the MSD data for NFC however.  So as a European
customer you might see an NFC logo somewhere, but because it uses NFC MSD
your European bank will decline the transaction because they only allow
EMV based NFC.  This is to be seen however, right now NFC terminals in the
US are still not very widespread and the liability shift did not happen
yet.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;safety-of-samsung-pay&quot;&gt;
&lt;h2&gt;Safety of Samsung Pay&lt;/h2&gt;
&lt;p&gt;So is it safe?  Implemented correctly with tokenization Samsung Pay seems
pretty safe.&lt;/p&gt;
&lt;p&gt;Will merchants like it?  If they have EMV terminals, they will not have a
problem with it.  If they only have legacy terminals without chip support,
they might become fraud magnets and they have little method to defend
themselves against it.&lt;/p&gt;
&lt;p&gt;Will the magstripe finally die?  Seems like magstripe found a second
coming in the US thanks to tokenization, MSD NFC and maybe even Samsung
Pay but most likely only as a transitional technology for EMV.&lt;/p&gt;
&lt;p&gt;I'm actually quite interested in if there are means of detecting a relayed
magstripe track for a merchant.  If someone knows, please let me know and
I will amend the article to reflect that.&lt;/p&gt;
&lt;/div&gt;</description>
         <author>Armin Ronacher</author>
         <guid isPermaLink="false">http://lucumr.pocoo.org/2015/8/31/the-thing-about-samsung-pay</guid>
         <pubDate>Mon, 31 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Conway’s Corollary</title>
         <link>http://www.ianbicking.org/blog/2015/08/conways-corollary.html</link>
         <author>Ian Bicking</author>
         <guid isPermaLink="false">tag:www.ianbicking.org,2015-08-27:blog/2015/08/conways-corollary.html</guid>
         <pubDate>Thu, 27 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>On Countries, Citizenships, Residence and Paying Taxes</title>
         <link>http://lucumr.pocoo.org/2015/8/9/on-countries-and-citizenships</link>
         <description>&lt;p&gt;Like many software engineers my life involved moving from one country to
another for work.  Since that moment this whole concept of relocation
fascinated me because almost everyone in my circle of friends ended up in
a place far from where they came but their stories were different.
I learned that the topic of relocation and immigration is a very complex
and diverse one.  How widely different the experience can be for different
people!  Most interesting about this however is how little people not
affected by this understand the complexities of being an immigrant in
another country.&lt;/p&gt;
&lt;p&gt;While my experience of moving to another country was the easiest
imaginable, it was harder for my wife.  How different immigration can be
is hard to imagine from the outside.&lt;/p&gt;
&lt;p&gt;Since immigration is a big topic again I figured I might share some of my
experience on the topic to shed some light on how all that stuff actually
works.&lt;/p&gt;
&lt;div class=&quot;section&quot; id=&quot;the-basics&quot;&gt;
&lt;h2&gt;The Basics&lt;/h2&gt;
&lt;p&gt;The most important part is to understand the legal basis for pretty much
all topics related to entering and leaving a country and the permits.
This is surprisingly complex because of the huge variety of different
terms for related topics.&lt;/p&gt;
&lt;dl class=&quot;docutils&quot;&gt;
&lt;dt&gt;Citizenship&lt;/dt&gt;
&lt;dd&gt;Citizenship is typically what you get at birth and it makes you the
citizen of a certain country.  In the majority of countries being a
citizen gives you certain rights but also obligations.  For instance
in Austria citizenship gives you the right to vote, but you are
required to defend your country.  Citizenship also almost always gives
you the right to live in a country though there might be further
requirements.&lt;/dd&gt;
&lt;dt&gt;Multiple Citizenships&lt;/dt&gt;
&lt;dd&gt;This refers to the idea of holding two (or more) active citizenships.
This is one of the more complex topics because of how different
countries approach this.  On the one hand are countries like Austria
which have the concept of dual citizenships but make it very hard to
hold multiple.  On the other there are countries like the US which do
not recognize other citizenships at all but will not prevent you from
holding multiple.  Lastly there are countries which outlaw multiple
citizenships altogether.&lt;/dd&gt;
&lt;dt&gt;Visas&lt;/dt&gt;
&lt;dd&gt;If you are not a citizen of a country you might need a visa to enter
or leave a country.  Visas in itself however do not necessarily give
you the right to actually be in a country.  A good example for that
would be a person who immigrates into a European country for work from
a country with a passport that requires you to have a visa.  In that
case you need a visa to cross the border and then you need a permit to
stay / permit to work.&lt;/dd&gt;
&lt;dt&gt;Permits&lt;/dt&gt;
&lt;dd&gt;Permits come in different flavours and not all countries have the same
approach to them.  In most countries there are permits to stay and
separate permits to work and sometimes there are residence permits
which work differently.  In Austria for instance there are permits
called “Aufenthaltstitel” which literally translates to “entitlement
for stay” which also usually comes with an indication if you are
allowed to become part of the workforce or not.  For instance a family
member permit gives you the right to work whereas a permit for stay
for students will only give you limited permissions for working.&lt;/dd&gt;
&lt;dt&gt;Passports&lt;/dt&gt;
&lt;dd&gt;&lt;p class=&quot;first&quot;&gt;Passports are travel documents and means to identify yourself
internationally.  As of a few years ago any person travelling will
need one of those which includes little children.  Interestingly
however passports are a lot more complex than you might think because
they are not directly linked to citizenship.  More about this later.&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;A passport gets you across a border and in many cases can act as an
universally accepted way to proof something about yourself.  For most
states in the world the passports follow a generally accepted format
which makes them very convenient and they are on of the few documents
you never need to translate.  Because of this, they will become your
best friend when you are not at home though they are by no means the
only document you need to reside in another country.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;relationship-citizenship-and-passport&quot;&gt;
&lt;h2&gt;Relationship Citizenship and Passport&lt;/h2&gt;
&lt;p&gt;Most people would assume that having a passport of one country makes you a
citizen thereof.  That however is not at all correct.  There are different
reasons for this and I can't go into all here.  The biggest reason why you
might have a passport of a country you are not a citizen of is because you
are a stateless person.&lt;/p&gt;
&lt;p&gt;For most people in the world once they hold a citizenship they cannot
become stateless.  The reason for this is that there are international
treaties where if ratified in a country you cannot lose your citizenship
unless you acquire another one.  There are some countries where this is
not the case.  The United States being the most popular of them.  A US
national can give up their US citizenship and become a stateless person
this way.  The reason this works is because you do not need to be a US
citizen to be a US national.  For instance people born in American Samoa
are US nationals but they are not US citizens.  This is also the part
where citizenship and nationality becomes unclear.  A person born in
American Samoa will for all intents and purposes be seen as a US citizen
as their passport will indicate that they have US nationality.&lt;/p&gt;
&lt;p&gt;On the other hand there are many stateless people living in Estona and
Lativa who are officially stateless.  The reason for this is that they are
Russian speaking and are either not entitled to Estonian or Latvian
citizenship or have no interest in applying for one.  They are issued a
special passport for stateless people which however some some special
powers an Estonian passport does not have: they can travel to Russia visa
free.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;how-do-i-migrate&quot;&gt;
&lt;h2&gt;How Do I Migrate?&lt;/h2&gt;
&lt;p&gt;This for many is the million dollar question.  How can I immigrate in a
foreign country?  Generally this question heavily depends on your own
citizenship and the laws of the country you want to become a resident of.&lt;/p&gt;
&lt;p&gt;Here are the most common ways to immigrate:&lt;/p&gt;
&lt;dl class=&quot;docutils&quot;&gt;
&lt;dt&gt;Freedom of Movement&lt;/dt&gt;
&lt;dd&gt;&lt;p class=&quot;first&quot;&gt;Sometimes you are entitled just like that to live in another country
like a citizen of that country would be.  This for instance is the
case within the European Union.  If you are German but you feel like
living in the Czech Republic, you can do so.  Just head there and
you're done.  That's not entirely true, you still need to do some
paper work in some cases (like registering etc.), but there is no rule
that prevents you.&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;This is by far the easiest route but it's restricted to a certain
population of the world, and there is good chance you as a reader are
not in that group.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Marry a Citizen&lt;/dt&gt;
&lt;dd&gt;&lt;p class=&quot;first&quot;&gt;Marriage is still the best way to get a permit of residence and it's
becoming an even better by the day because the requirements are so
stict nowadays.  However marriage does not immediately give you
residence and most people will probably have noticed that.  As an
example in order for me and my wife (who is not Austrian) to legally
live together with our child in Austria we need to have household
income of 17.500 EUR per year after taxes.  That does not sound like a
lot, but for many people it's not the easiest thing to show,
especially because those earnings need to exist regardless of the
outcome of your residence application.  For most people this means
showing that you have that much in cash available as you probably do
not live in the country yet to demonstrate a regular income through
paychecks.&lt;/p&gt;
&lt;p class=&quot;last&quot;&gt;In the United Kingdom the income requirement is currently 18.600 GBP /
year and you need to show income for 2.5 years.  Which means that if
you want to show it in savings, you need to have at least 62.500 GBP
on an account somewhere.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;Be Exceptional&lt;/dt&gt;
&lt;dd&gt;The only other way to immigrate is typically to be exceptional.  In
most countries this is either by being rich enough to invest into the
country and get residence or citizenship in the process or by being
extraordinary intelligent or in demand.  This works well for engineers
because engineers are in demand in almost all places.  However that is
no guarantee yet, as in most countries visas and permits are
restricted by numbers and there is a certain amount of luck
requirement to get one.&lt;/dd&gt;
&lt;dt&gt;Become a Citizen&lt;/dt&gt;
&lt;dd&gt;Most people cannot become a citizen from one day to another, but
sometimes they can.  In that case that is the way to go.  Typically
this is done by a prior claim to citizenship that you forgot about
(for instance to be born to a parent with a certain citizenship).
This most of the time is only possible for as long as you did not turn
18 yet.&lt;/dd&gt;
&lt;dt&gt;Claim Asylum&lt;/dt&gt;
&lt;dd&gt;In certain situations you might be getting away with claiming asylum.
Pretty sure the chances that you are a reader of this blog and you
quality for this route are very dim.  Asylum is restricted to people
who come from situations where their life is in danger.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;legal-immigration-is-hard&quot;&gt;
&lt;h2&gt;Legal Immigration is Hard&lt;/h2&gt;
&lt;p&gt;Legal immigration is expensive and a lot of work.  Besides the proof of
income (which just requires you to have money), there is a lot of time and
effort required.  All the documents you need (birth certificate, proof of
being in good legal standing, citizen certificate, proof of registration
in the original country, prior academic records, drivers license, etc.)
need to be apostiled or otherwise made work for international usage and
translated.  In some country many of those documents can only be retrieved
in a single place and then you need to go through notaries to get them
attested.  All steps need to be done in one exact order as each border
crossing needs to be planned and there is time involved in the paperwork.&lt;/p&gt;
&lt;p&gt;On top of that you often need to pass language exams so there is some
learning to do.  In Austria for instance you have to leave the country if
you cannot show German on an A2 level and you cannot even apply without
A1.  There are some exceptions to the rule (for instance this does not
apply to asylum seekers or people immigrating via freedom of movement) but
for the most part everybody has to go through.&lt;/p&gt;
&lt;p&gt;Finally:  Where do you pay taxes?  In most countries you pay taxes in the
country you have your primary residence.  However there are some
exceptions.  The US will tax you no matter where in the world you are, but
they will try to not double tax you for some time.  The US will also tax
you if you stop being a citizen and they think you relinquished your
citizenship to dodge taxes.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;section&quot; id=&quot;the-illegal-route&quot;&gt;
&lt;h2&gt;The Illegal Route&lt;/h2&gt;
&lt;p&gt;Many people I met over the years just never legally immigrated somewhere.
That however does not mean that they are illegally in the country.  It can
also mean that they just never immigrated to begin with and just hop from
country to country.  They are there as submarines either by pretending to
be tourists and regularly changing the place of living.&lt;/p&gt;
&lt;p&gt;This is a bit different from the traditional method of not crossing the
border much which many migrant workers do.  This however can turn terrible
the moment someone catches you.  Overstaying your permitted time in
Schengen for instance will lock you out for 5 years from almost the entire
European Union.&lt;/p&gt;
&lt;/div&gt;</description>
         <author>Armin Ronacher</author>
         <guid isPermaLink="false">http://lucumr.pocoo.org/2015/8/9/on-countries-and-citizenships</guid>
         <pubDate>Sun, 09 Aug 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Trade Design Coaching for Code Coaching</title>
         <link>http://zedshaw.com/2015/08/04/trade-design-coaching-for-code-coaching/</link>
         <description>I’ve been training in the arts for almost 3 years now and I’m recently interested in applying these skills to learning graphic design. I’m already not too bad at drawing and painting, and I’m able to paint in a variety of digital painting software. With this in mind, I would like to propose a trade. [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=311&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=311</guid>
         <pubDate>Tue, 04 Aug 2015 19:19:47 +0000</pubDate>
         <content:encoded><![CDATA[<p>I’ve been training in the arts for almost 3 years now and I’m recently interested in applying these skills to learning graphic design.  I’m already not too bad at <a rel="nofollow" target="_blank" href="https://www.flickr.com/photos/zedshaw/">drawing and painting</a>, and I’m able to paint in a variety of digital painting software.  With this in mind, I would like to propose a trade.  I would like to trade programming coaching for design coaching.</p>
<p>I propose that I meet up with a designer who really wants to learn to code at least 1-2 times a week, and I spend one hour coaching you through programming problems and training.  I’ll give you copies of my books, talk with you on IM and email, check out your code, and meet you in person to help you through it.  I make bad ass coders, but you’d have to be ready to work and really try.  Every day.  I’ll feed you books, online classes, and anything else to get you to trained.</p>
<p>What I want is the same for you but with design.  You’d tell me what books to buy (or just give me your hand-me-downs), and I’d work through them, do designs, websites, packaging, whatever it takes.  You then critique them and tell me how to improve it, and what to read next to understand what you’re teaching.  My goals is to finally be able to do my own designs and also to understand how design is taught.</p>
<p>I will warn you that I have a pretty strong opinion that most designers can’t draw for shit, don’t know a damn thing about the basics of color, and most of the “science” of design is complete bullshit mythology.  I’m really good at being open minded when I’m a student and forgetting what I know, so don’t worry that I’ll be ungrateful or not do what you say I need to do.  However, I may press you on things you claim but can’t back up.  In a way it might be a good way for you to find out if what you know is legit or not.</p>
<p>Think of this as a research project.  I’d love for a designer who has a similar opinion about programming.  I can <strong>definitely</strong> tell you all of the bullshit surface area and tricks of the trade that programmers use, and I welcome a designer who’s able to look at programming as an intelligent outsider.  If you’re up to the challenge, then this could be a good collaboration between two experts.</p>
<p>If you’re interested and can meet the time requirements, then please email me at <a rel="nofollow" target="_blank" href="mailto:help@learncodethehardway.org">help@learncodethehardway.org</a> with a link to your portfolio and tell me about your education.  For my qualifications I wrote <a rel="nofollow" target="_blank" href="http://learnpythonthehardway.org/book/">this book</a>, <a rel="nofollow" target="_blank" href="http://learnrubythehardway.org/book/">this book</a>, and soon this <a rel="nofollow" target="_blank" href="http://click.linksynergy.com/fs-bin/click?id=s7ocDPy57no&amp;offerid=145238.10000621&amp;type=3&amp;subid=0">book</a> will be published as well.  I can also give you personal references of people I’ve taught so you can check me out and confirm that I’m not a creepy weirdo (ok, just not creepy, I am kind of a weirdo).</p>
<p>Thank you for your time.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/311/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/311/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=311&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>design</category>
      </item>
      <item>
         <title>Mr. Teflon and the Failed Dream of Meritocracy</title>
         <link>http://zedshaw.com/2015/08/03/mr-teflon-and-the-failed-dream-of-meritocracy/</link>
         <description>You can either write software or you can’t. I’m not saying that people who can are special. Hell, total absolute complete fucking idiots with dried husks for skulls write code. Anyone can learn to code, but if you haven’t learned to code then it’s really not something you can fake. I can find you out [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=308&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=308</guid>
         <pubDate>Mon, 03 Aug 2015 04:07:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>You can either write software or you can’t.  I’m not saying that people who can are special.  Hell, total absolute complete fucking idiots with dried husks for skulls write code.  Anyone can learn to code, but if you haven’t learned to code then it’s really not something you can fake.  I can find you out by sitting you down and having your write some code while I watch.  A faker wouldn’t know how to use a text editor, run code, what to type, and other simple basic things.  Whether you can do it well is a whole other difficult complex evaluation for an entirely different topic, but the difference between “can code” and “cannot” is easy to spot.</p>
<p>Painting is another skill that you can either do or you can’t.  Again, this doesn’t mean the people who can paint are magical special beings who repel thetans with cadmium coated auras.  I’ve found, just like programmers, some of the dumbest fucking people in the universe are painters.  Hell, <strong>I</strong> can paint, which says a lot about how good you have to be to be able to “paint”.  It is a difficult skill to fake, and if I sat someone down and told them to paint I could spot a fake immediately.  The faker wouldn’t know how to mix, what colors do what, how much to put out, what brush to use, and other simple mechanics.</p>
<p>There are a great many skills where you can either do them or you can’t, and that’s where the concept of meritocracy comes from.  In a meritocracy it’s supposed to be that the only thing that matters is you can do the thing, and then competition is based on how well people do that thing.  In these environments you frequently hear of people who are just awesome at something getting tenure track positions at universities to teach it without any other formal education.  In art I know of two professors who did this, mostly because they were just crazy bad ass at drawing or painting.  Didn’t matter that they had zero degrees in art.  All that mattered was they could do the thing, and they were awesome at it.</p>
<p>The appeal of a meritocracy for weirdos like me and many of my friends is that we’re frequently judged for things that have absolutely nothing to do with who we are.  People have all sorts of disabilities, socioeconomic backgrounds, appearances, strange interests, and personality quirks that make them the targets of slick talking douchebags with angelic faces.  These pretty motherfuckers get away with literal murder while a weirdo like me gets death threats because I don’t like Haskell.  In my ideal environment, it wouldn’t matter what you look like, only that you can do the job and how well you do it.  That’s a meritocracy.</p>
<p>Obviously part of “doing the job” is being able to work with others, but that cuts both ways.  <strong>I</strong> have to shower and not invade people’s personal space, and <strong>you</strong> have to not comment on my fucking clothes or make fun of how I talk.  I have to be polite and say thank you and not hit people, and <strong>you</strong> have to stay off my computer and not walk around the office with an 8” hunting knife.  I have to work with people on a team and help folks out, and <strong>you</strong> have to not assume I’m gay because I like to paint.</p>
<p>In general, things in a business work better if you follow <strong>Zed’s #1 Rule Of Business</strong>:<br /><em>Don’t shit where you eat.</em></p>
<p>You like hunting knives and guns?  That’s your personal shit.  Do it at home or a gun range.  You like weekends full of BDSM sex with guys dressed in unicorn costumes?  Shit in your own mouth at home.  You like to smoke weed and think the girl in accounting would be a great addition to your bi-sexual poly relationship?  Super fecal. Definitely do it at home.  You’re a super religious Christian who has a mandate from God to convert the masses?  Yup, turds galore. Do it at Union Square.  You can totally be into these things, and tell people about it, and be yourself, but if you want the work environment and the meritocracy to function then you have to vanilla up to a point and reduce the drama.  That way everyone has a nice drama free day and can just work their damn job without worrying about being harassed because you’re a freak (and they leave you alone even though you’re a freak).</p>
<p>Incidentally all of these things have happened to me at places I’ve worked, and that’s your first clue about why the meritocracy is such bullshit.  Everyone who claims they have a meritocracy then uses this to act like total fucking assholes because if you extend the concept of meritocracy too far you can excuse any obnoxious ass behavior.  The real result of a meritocracy is to craft a character I like to call <strong>Mr. Teflon</strong>.  When you read those words you probably had a specific individual pop into your mind, but let me explain Mr. Teflon to you.</p>
<p>Mr. Teflon is that guy who is a complete total fucking asshole and a fuck up, but for some reason he never gets fired.  Maybe he did something heroic in the past, or maybe he has pictures of the CEO giving goats rim jobs.  Who knows, but this is the kind of guy who can cost the company $500k through his own incompetence, grab the ass of random women, never show up to work, yell and scream at managers, walk around with a knife, hack other people’s computers, and be an insulting prick to everyone and still keep his fucking job.  Nothing sticks to him ‘cause he’s coated in teflon.</p>
<p>My favorite Mr. Teflon was Rajiv, who would troll people’s accounts looking for nude pictures, kept crashing the fucking site because he hand edited servers as root, kept the network architecture a <strong>secret</strong> so everyone had to depend on him, clearly was doing coke at work, demanded that employees he just didn’t like be fired, and would incite near violence against anyone who tried to manage him.  In one incident he spent weeks on IM with the team undermining a product manager until finally the CEO had to fire the product manager because this Mr. Teflon managed to make everyone hate the product manager.  This guy was a total fucking asshole, but one time back in the day he managed to figure out a hack on OS X that nobody else did so he gained a position of power and nobody would fire him.  He later would cost the company insane amounts of money, but hey meritocracy right?  Gotta keep motherfuckers around who did a good job once way back in the day because it’s all about who does the best job!</p>
<p>Another great Mr. Teflon was Chris.  My first encounter with Chris was walking into the office after I’d been there 3 days to him screaming at the VP of Engineering, “Fuck you! Fuck you! Leave me alone you fucking asshole! You better shut the fuck up!”  Why? The VP of Engineering was trying to get him to write unit tests.  Chris was a short loser little asshole who had saved the company once, so nobody would fire him.  Eventually he walked up to me and asked, “Do you know Thomas?”  Thomas was a guy who hated me online, and I thought it was weird Chris would ask me about him.  I said I did and then Chris started typing quickly on his laptop with a weird grin on his face.  I strolled by casually and shoulder surfed him talking to Thomas on IRC telling him about me.  He actually hunted down one of my enemies and violated my privacy to inform on me!  That’s fucking crazy.  But, he was Mr. Teflon there so I couldn’t get rid of him.</p>
<p>Over the months this asshole Chris would constantly ask me what I thought of Thomas.  Since I knew that he knew Thomas I fed him huge lines of bullshit and misinformation, but one day Chris walks up and asks, “How do you store your passwords?”  He was really freaked out asking me this, like he knew he was doing something wrong.  He stammered and didn’t look me in the eyes, and I realized, holy shit, this guy is going on my computer and giving Thomas my password database, if he hasn’t done so already.  I immediately started taking my computer home and changed all my passwords, and then other weird shit started happening.  One day all SSL certificates to gchat and gmail stopped working, and when I started yelling about it Chris ran to his computer really quick in a panic.  I started bringing my own WiFi hotspot to work.  He came to work one day carrying a massive hunting knife, ‘cause, you know, that’s totally appropriate in an office.</p>
<p>Chris was an insulting, obnoxious, stupid fucking loser who probably violated my privacy and handed who knows what information to an enemy of mine online while walking around with knives, screaming at leadership and doing no work, but did he get fired?  Nope, because, meritocracy, and Chris had done like, one thing 2 years prior that meant he could be the absolute worst most abusive employee ever and never be fired.</p>
<p>I’m done with meritocracy after encountering Mr. Teflon assholes in every supposed meritocracy and seeing how that word ends up doing nothing more than keep barely capable losers who get lucky once in jobs despite their insanely fucked up behavior.  The failure of a meritocracy is that it has become a way to abuse people. Originally it was so that people who were different could keep their jobs in the face of mediocre losers who felt everyone should be just like them to have a job.  Now it’s used by mediocre losers to keep other mediocre losers in jobs just because they’re all alike.</p>
<p>The problem with throwing the meritocracy completely out is programming is a skills based job, and like I said you can either do it or you can’t.  Nobody wants the inverse situation where some mediocre asshole from HR denies promotions to people because they don’t have the right education.  The inverse of a meritocracy is organizations that are obsessed with certification and not on results where HR controls who gets promoted and rewarded.  These environments breed idiots who can fake their way through jobs until they&#8217;re in a position of power because they got a degree from Haavaaad and have a pretty smile.  The inverse of meritocracy is just as abusive and rewards people for their socioeconomic backgrounds rather than giving them a chance to shine despite where they come from.</p>
<p>The upside to HR run bureacratic companies is they don’t put up with Mr. Teflon.  These places have procedures and policies that you have to follow. They have sexual harassment training and dress codes.  They may be vanilla, but if I’d told HR that Chris was walking around with a fucking hunting knife, going on my laptop and not working he’d have been fired quick.  I don’t advocate the bureaucracy of HR run companies, but fuck me if that’s the only way to get rid of Mr. Teflon then let’s do this!  I was in the Army. I’ve worked for the government.  I can fill out some forms in triplicate to get rid of that complete loser.  I can put on a suit.  Hell yeah.</p>
<p>Actually, I’ll just work for myself since that’s the ultimate meritocracy.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/308/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/308/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=308&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>The Defense of The Personal</title>
         <link>http://zedshaw.com/2015/08/02/the-defense-of-the-personal/</link>
         <description>I’m sitting in a cafe desperately trying to not listen to the terrible poetry being read behind me. That “poetic voice” with the stilted broken weird inflection and rapid stream of consciousness streaming from an unaware hippy who thinks his monthly poetry jam slam thing makes him such a deep and introspective person. The poetry [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=301&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=301</guid>
         <pubDate>Sun, 02 Aug 2015 04:22:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>I’m sitting in a cafe desperately trying to not listen to the terrible poetry being read behind me.  That “poetic voice” with the stilted broken weird inflection and rapid stream of consciousness streaming from an unaware hippy who thinks his monthly poetry jam slam thing makes him such a deep and introspective person.  The poetry is deeply personal but only as deep as the person who writes it, which is to say if I have to listen to this dumbass singing another song about being a handy man for the last 30 years I’m going to lose my shit.</p>
<p>Reading poetry is like explaining jokes, except the person reading poetry is deeply attached to what he’s doing.  This is him baring his soul to an audience and since the poem is about his failing business, lost wife, dead father, forlorn lovers, and other personal tragedies nobody can say anything.  He can totally suck and everyone just grins and says, “Oh man Joe, that song was great!”  Even though that song was exactly the same as the last one he “sang” without any accompaniment or any form of musical skill.  By attaching a personal emotional connection to what he’s created he has shielded himself from criticism.</p>
<p>I see this in art classes too.  We’re looking at a stupid video installation, and lord man do I hate video installation.  But this one looked like it was making fun of video installation, not really attempting to make anything meaningful but just being random to be random.  We secretly know that most abstract contemporary artists just do random shit until someone buys it, but apparently verbalizing this truth into the world was a cardinal sin of art education.  My teacher (who I admire very much) admonished me since this video screen with a dinosaur bone in front and coated with birthday wrapping paper could be an expression of the time the artist was raped by a gang of roving oompa loompas one fateful night by the Salton Sea.</p>
<p>I doubt this artist actually thought that way, but there’s no way to know.  Because abstract creative works are open to interpretation, an artist can crank out total randomness and then back into the deep personal meaning to shield it from criticism and sell it.  If you craft a sculpture out of hunks of random metal from a ’57 Chevy because you’re a white dude who likes cars then you can be ripped to shreds by an art critic for being a typical dude.  If you cut apart a ’57 Chevy as a statement on rape, race, religion, sexuality or anything deeply personal then you have the perfect shield.  What critic wants to be the guy who ripped into a poor artist who was raped by his father’s religion’s sexualty?</p>
<p>We all know that most of this contemporary art is created simply because it sells and most of the artists have zero actual real emotional attachment to what they make.  They have emotional attachment to the fucking money.  What these artists want is to be able to put their works out there and sell them while at the same time avoiding any criticism which might suggest they aren’t as genuine as they claim, or that their art isn’t very good.  This is unfair to the audience because it removes <strong>our</strong> power to react to the art in a genuine way, even if that reaction is, “Fuck that sucks.&#8221;</p>
<p>I see this same defense of the personal among open source authors. I love it when people make things and publish what they make, but I’m a firm believer in living and dying by the sword, and if you’re publishing your work, well people are going to comment on it.  If you don’t want that then don’t put your shit out there.  Go find a little group that will keep it quiet until you can handle it.  Then when you’re ready put it out there and be ready to eat some shit, because if there’s one thing I’ve learned from putting myself out there over and over it&#8217;s that people who publish frequently are easy targets for total fucking assholes.  My rule is, learn to fight the assholes on the merits of your work or their personal agendas, and then listen and adapt to everyone else’s thoughts as part of the public expression experience.</p>
<p>With open source they have this perverse defense where they put their software out there, which is just a tool, nothing personal about it.  Art or poetry I can see being inspired by tragedy and hardship.  Software?  Shit, the only hardship that inspires my software is another project sucking so bad I craft something better in a fit of rage.  You think I hate poetry?  You should see my rage at shitty software.  What these authors do is claim their open source project is a labor of love and that they poured their lives into this project! It’s their baby! How dare you say it has bugs or that it sucks!  Who cares if it’s full of <a rel="nofollow" target="_blank" href="http://zedshaw.com/2015/07/26/turd-cookies/">turd cookies</a> they<strong> did it for free!  You have no right to criticize it!  My daughter is dying! I have cancer!<br /></strong><br />The same thing you were probably saying about these self-absorb pretentious artists and poets defending their art from criticism with the mantel of personal tragedy applies to open source.  You can’t go around saying that simply having invested your time in it means that nobody can get pissed at you for writing buggy shitty code.  You can definitely get angry at someone exploiting you, that’s for sure.  Some company abusing your good will to further their goals is wrong.</p>
<p>But if someone finds a bug in your shit, and it ruins their fucking day, then it’s your fault and you should apologize and fucking fix it.  That’s what I do.  I handled 330 tickets for all of my books last month, pro-bono, and apologized to everyone that found something stupid I did.  One person was an asshole to me, being abusive and insulting to programmers (while at the same time trying to become one) so I refunded his money and told him to go fuck himself.  Life’s too short to put up with one of those assholes.  Everyone else I helped out as best I could and actually apologized when I fucked up bad.  I didn’t take it personally when people were having a hard time because it was my fault they were having a hard time.  I felt sorry for them and did my best to make it better.</p>
<p>This defense of the personal in open source is so bad that <strong>twice</strong> I’ve had project leaders tell me strangely personal tragic shit about them to keep me from commenting publicly about their projects.  One told me he was dying of cancer, and another told me that his daughter was dying.  Yes, they told me this so that I wouldn’t say their project sucked.  That’s how fucking nuts defense of the personal is.  I would <strong>never</strong> tell a total stranger something like that just to protect my business, but these two idiots did.  Interestingly enough, neither of them died, and I believe both of them were lying, but I still stopped saying something because I didn’t want to be a dick.  But seriously, what kind of an asshole uses a kid with cancer to avoid fixing a fucking bug?</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/301/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/301/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=301&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Random Code Editor Idea</title>
         <link>http://zedshaw.com/2015/07/29/random-code-editor-idea/</link>
         <description>When I teach people to code I give them this simple procedure to follow: 1. Write the skeleton of the function.2. Write comments in English describing what that function should do.3. Under each comment fill in the code necessary to make it work. This procedure works for early programmers because they typically know how to [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=298&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=298</guid>
         <pubDate>Wed, 29 Jul 2015 23:11:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>When I teach people to code I give them this simple procedure to follow:</p>
<p>1. Write the skeleton of the function.<br />2. Write comments in English describing what that function should do.<br />3. Under each comment fill in the code necessary to make it work.</p>
<p>This procedure works for early programmers because they typically know how to write code, and know what they want it to do, but the gap between what they want and what to write is fairly large.  They don’t have enough experience to close the gap, but since they can describe what they want the function to do then that’s their start.</p>
<p>I find that starting with <strong>desired results</strong> works best for beginners and early coders.  Everyone uses a computer these days and know how software should work.  They can describe what they want their software to do much more easily than they can write code, so starting there gets them going.  Eventually after coding for a while they switch to thinking entirely in code, but even to this day when I can’t quite think of the code to write, I start with the comments and fill them in.</p>
<p>If I throw in testing into the teaching (usually when they’re more capable), then the procedure becomes a little more complex:</p>
<p>1. Write the skeleton of the function.<br />2. Write the test and first call of the function making it fail.<br />3. Write the comments in the function for what it should do.<br />4. Fill in the comments with code and keep expanding and running the test.</p>
<p>Yet, the process is still the same and focuses on describing what I want and then filling in the blanks.  In writing this is the same process I tell beginning writers.  Just talk out loud and say what you want to say, writing those as little notes, then fill in the paragraphs.  Or, create an outline then fill it in.  Same for painting, where I tell people to make a rough outline of what they want to paint, then figure out each piece of the outline.</p>
<p>In general, the way  you can solve a complex problem that’s difficult to visualize in any medium (code, words, paint, music, etc.) is to convert the problem to a paint-by-numbers problem.  Instead of just trying to do it all at once right in your head and get it right, you break it down into tiny problems, then solve each one.</p>
<p>What if code editors helped with this process specifically?  What I mean is, imagine your process becomes this:</p>
<p>1. Write the test or the function skeleton, doesn’t matter, and the editor makes the other one.<br />2. Go into the function, and start writing comments.<br />3. Editor guesses at what should go there and puts it under your comment, and it keeps running the test as you type.<br />4. You then edit the code as it pops in, or maybe alternate through what comes up, and it keeps running and working the test to bust your function.<br />5. Eventually the test passes and it knows to move on to the next comment.</p>
<p>It’s difficult to describe, but a way to think of it is a hyper embedded version of what programmers seem to do these days anyway, which is just search through Stack Overflow, documentation, APIs, and github using most of the words you’d put into a comment to find code.  Why not have the editor use fancy machine learning algorithms and a vast catalog of existing curated code to do this for you?</p>
<p>In addition to that, it seems possible to auto-generate enough test code to fuzz through most of what you write, especially if the language is more modern.  Maybe it’s something like <a rel="nofollow" target="_blank" href="http://lcamtuf.coredump.cx/afl/">AFL</a> generating tests that hammer your function finding things, and since it’s generating the code in the function it’s possible it could be smarter at this.</p>
<p>Just a random idea, but could be an interesting thing to research.  Call it “Comment Driven Coding” for lack of a better name.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/298/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=298&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
      </item>
      <item>
         <title>Turd Cookies</title>
         <link>http://zedshaw.com/2015/07/26/turd-cookies/</link>
         <description>FLOSSBro: “Hello sir and welcome to FLOSS Cafe. We have the best cookies in town! Would you like some free cookies? Fresh baked today.”Zed: “Oh man, yeah I love cookies. I was just looking for some actually. These look delicious. Mmmm. Bleggghaarrg Fuck!”FB: “What’s wrong?!”Z: “What the fuck?! Did you put turds in these cookies?!”FB: [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=293&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=293</guid>
         <pubDate>Sun, 26 Jul 2015 04:39:00 +0000</pubDate>
         <content:encoded><![CDATA[<p><strong>FLOSSBro</strong>: “Hello sir and welcome to FLOSS Cafe.  We have the best cookies in town!  Would you like some free cookies? Fresh baked today.”<br /><strong>Zed</strong>: “Oh man, yeah I love cookies.  I was just looking for some actually. These look delicious. Mmmm. Bleggghaarrg Fuck!”<br /><strong>FB</strong>: “What’s wrong?!”<br /><strong>Z</strong>: “What the fuck?! Did you put turds in these cookies?!”<br /><strong>FB</strong>: “Look sir, I’m going to ask you to not be rude with me. You have no right to question how I make cookies. They were free after all.”<br /><strong>Z</strong>: <em>Spits on ground.</em> “What the absolute magical unicorn fuck are you doing putting turds in cookies?!”<br /><strong>FB</strong>: “I’ll have you know that the turds are an essential ingredient of our cookies and I’m going to tell you again to not be offended by it!”<br /><strong>Z</strong>: “Is that a peanut? Disgusting.  Ugh. Who the fuck wants turds in their cookies?!”<br /><strong>FB</strong>: <em>Points at giant sentient fly in the corner of the cafe.</em> “That guy! So there!”<br /><strong>Larry</strong>: <em>Waves.</em><br /><strong>Z</strong>: “Whoa. Ok, that guy is a giant sentient fly. How many of those could there possibly be in the fucking world that you’d have to put turds in all of your cookies?”<br /><strong>FB</strong>: “Well I’ll have you know that if we <strong>don’t</strong> put turds in all of our cookies that sentient fly will shit on everyone else’s food and knock tables over then post really nasty reviews on Yelp.”<br /><strong>Z</strong>: “Wait, you put turds in all of your cookies so that a fly won’t write reviews in Yelp about the lack of turds in your cookies? Why do you even let him in here? I’m sure that’s some kind of health violation and shit.”<br /><strong>FB</strong>: “Because he is loud and obnoxious so if we don’t keep him happy he makes it bad for everyone else.  Anyway, I kind of like turds in my cookies too.  It was a great decision and now I’ve made it and I’m sticking by it.  I am right.”<br /><strong>Z</strong>: “What?! Do you seriously eat these?!”<br /><strong>FB</strong>: “Well, not exactly.  I have a batch I make for myself and special paying customers that only has a little bit of turd in the mix. It’s quite refreshing.”<br /><strong>Z</strong>: “Holy fuck, you mean, you put free cookies out with turds in them because a sentient fly demands turds, and then you charge people for cookies without turds? That’s fucking insane.”<br /><strong>FB</strong>: “You don’t have to eat them sir! Nobody said you had to eat my <strong>free</strong> cookies!”<br /><strong>Z</strong>: “You offered them to me asshole!  If I’d known there was turds in the free cookies I would have just bought the fucking turdless cookies from you and saved myself the epic amount of shit now coating the inside of my fucking mouth.”<br /><strong>FB</strong>: “Don’t talk to me that way sir! I gave you those cookies for free!”<br /><strong>Z</strong>: “I didn’t want turd cookies!  Why the hell do you even do that?! You should just <strong>not</strong> put turds in your cookies then sell that sentient fly asshole the ones with turds.”<br /><strong>FB</strong>: “You are not being constructive here.”<br /><strong>Z</strong>: “What? I am being constructive. Just don’t put turds in your cookies shithead!”<br /><strong>FB</strong>: “No, that’s <strong>de</strong>structive because it is telling me to change my mind about a clearly obvious and brilliant decision I made to put turds in my cookies.”<br /><strong>Z</strong>: “Alright, how <strong>do</strong> I give you <strong>constructive</strong> feedback that will get you to at least make a batch of cookies without turds in them at all? That’s what I want. Cookies without turds.  I’ll even fucking pay for them.&#8221;<br /><strong>FB</strong>: &#8220;I’m going to have to ask you to fill out a Recipe Task Form Management System request online.  It’s only 42 form fields at this website and your request will be added to a queue behind 153 other requests to change the recipe.”<br /><strong>Z</strong>: “What?! I have to fill out a fucking form online, for you, and you <strong>might</strong> fix it?! That’s insane!”<br /><strong>FB</strong>: “No, this is our process here at FLOSS Cafe sir.  All patrons must submit orders through our RTFMS and we handle only the orders we feel are worth our time.  Now, if you were a friend of mine, or a large corporation I might not make you fill out the form, but since you’re being a jerk I’m going to request that you fill out an RTFMS request.”<br /><strong>Z</strong>: “Alright, fine. I&#8217;ll fill out your fucking form. I’m curious to see if you’ll do it:&#8221;</p>
<p>DON’T PUT SHIT IN COOKIES, ASSHOLES.</p>
<p><strong>Z</strong>: “There, can I get some cookies that don’t have turds in them now?”<br /><strong>FB</strong>: “Oh see now you’re just being rude.  You have to show some respect. I mean, I just gave you free cookies and this is how you treat me? What an asshole.”<br /><strong>Z</strong>: “Oh, ok how about this fuckface:&#8221;</p>
<p>TAKE SHIT OUT OF COOKIES, PLEASE ASSHOLES.</p>
<p><strong>FB</strong>: “Sir, that is not being constructive.”<br /><strong>Z</strong>: “Oh you want constructive:&#8221;</p>
<p>USE MORE SUGAR INSTEAD OF SHIT, WEIRD LOSER MORON.</p>
<p><strong>Z</strong>: “Fuck you and your fucking turd cookies FLOSS Bro. I’m going to go start a restaurant that doesn’t put turds in their cookies and put you out of fucking business.”<br /><strong>FB</strong>: “Fine! You go do that! It’ll fail because you’re not positive and constructive and supportive of my work!  I do this in my spare time you know!”<br /><strong>Z</strong>: “Probably because you suck so bad nobody would pay you to do it for real.”<br /><strong>FB</strong>: “Fuck you!  You don’t get the entire concept of free cookies! If I give you free cookies you have to worship me!  Worship me for my free cookies asshole!”<br /><strong>Z</strong>: “I see! The truth comes out! I have to worship you and it’s not about having the best cookies in town.  It’s about you being recognized by giant sentient flies and nobody else.  Fuck off!”  <em>Slams door</em>.<br /><strong>Fly</strong>: <em>Walks up chewing on turd cookies</em>. “That guy’s such an asshole. These cookies rock.”<br /><strong>FB</strong>: “Thank you Larry.  I’m glad you’re happy.”  <em>Looks out at empty restaurant.</em></p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/293/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=293&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>rants</category>
      </item>
      <item>
         <title>A Product Journal: Objects</title>
         <link>http://www.ianbicking.org/blog/2015/07/product-journal-objects.html</link>
         <author>Ian Bicking</author>
         <guid isPermaLink="false">tag:www.ianbicking.org,2015-07-16:blog/2015/07/product-journal-objects.html</guid>
         <pubDate>Thu, 16 Jul 2015 00:00:00 +0000</pubDate>
      </item>
      <item>
         <title>I Can Kill Any Computer</title>
         <link>http://zedshaw.com/2015/07/08/i-can-kill-any-computer/</link>
         <description>I’ve been fighting the Pearson royalty payment system for about 4 months now. It seems every time I touch it I break something or other about it, and I’m sure it really only happens to me. This time I changed my address and that didn’t work. So then I tried to setup direct deposit of [&amp;#8230;]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://pixel.wp.com/b.gif?host=zedshaw.com&amp;#038;blog=75410050&amp;#038;post=288&amp;#038;subd=zedshaw&amp;#038;ref=&amp;#038;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot;/&gt;</description>
         <guid isPermaLink="false">https://zedshaw.wordpress.com/?p=288</guid>
         <pubDate>Wed, 08 Jul 2015 06:29:00 +0000</pubDate>
         <content:encoded><![CDATA[<p>I’ve been fighting the Pearson royalty payment system for about 4 months now.  It seems every time I touch it I break something or other about it, and I’m sure it really only happens to me.  This time I changed my address and that didn’t work.  So then I tried to setup direct deposit of my checks and that didn’t work because they didn’t recognize my bank (which is a massive bank).  A few weeks later they finally recognized my bank, so I setup direct deposit and then I have been in pending status for about 2 weeks.  Checking in today I was told that, you’ll love this, they don’t know why they can’t see my new settings.  I’m apparently in some kind of strange royalty payment purgatory and the only way out is to fax them paper versions of the same requests so they can use their other system to update my record.</p>
<p>Yes, to get paid by Pearson, I have to <strong>fax</strong> two pieces of paper to the royalty department so that they can look in the royalty department database and fix the record I can see on their website but that they can’t see.</p>
<p>This apparently only happens to me, and it’s fairly consistent.  You want to find out if your software works well?  Have me try to use it.  I tried out <a rel="nofollow" target="_blank" href="http://www.getblogo.com/">Blogo</a> for about two minutes and ran into errors all over the place.  Images not being put in the right spot, bold text not working, just loads of little things that only I encountered doing crazy things like adding images and making stuff bold.  They fixed them up and I’m still using it now.  It’s actually really nice.  I’m just cursed with a weird devil hand that drives software insane is all.</p>
<p>Google is another one that has been fighting me all week.  I am apparently the only person who cannot use Kubernetes.  Nearly everything I try ends in disaster.  Not a single getting started guide has worked, not even on their GKE platform.  Firewalls don’t work.  Compute nodes don’t work.  My account does weird things here and there.  No idea what I could be doing wrong, and I follow along with 4 of their documents with the same results.  Running Kubernetes myself is the same results.  Doesn’t run here.  Doesn’t run there. Needs this. Needs that.  Needs docker to build dockers that have dockers that build Kubernetes that only runs in dockers on core OS from boot to docker that is a container in a container that has OS X running Kubernetes with….</p>
<p>Yep, I’m just cursed to trigger nearly every bug you have.  You changed an option?  That’s the one I’ll run.  You got a race condition that only happens in one version of Vagrant and one version of Linux?  That’s the one I’ll try first.  And I’m not being weird when I make these choices since most of the time I’m trying to write a book so I stay fairly vanilla.  I just seem to trigger bugs along the way is all.</p>
<p>Another time my bank couldn’t connect my business credit card to my business bank account.  I’d asked them repeatedly for months to do this with no success.  This was mostly over their dumb internal email thing, but finally calling them on the phone led to a 40 minute call center threesome with me and two other people who then had to bring in a fourth guy who worked in “databases”.  For some reason, I just had one wrong bit set in one wrong place and there was no explanation.  I just didn’t have it, and it was a major deal to fix my account.  But why?  “No idea sir, you just had the wrong setting.&#8221;</p>
<p>That devil hand at work again.  Computers crash on me.  Every Mac I’ve owned has tanked in the first week and needed repairs or replacing.  Hard drives freeze up. It happens so often friends don’t believe me.  There’s no way anyone has those problems.  I do.  All the time.</p>
<p>I’ve also found that if I tell people about these bugs they tend to lose it, even if I’m nice about it.  I constantly have to double login at Paypal.  I complained about it and holy fucking jeebus did those dudes lose their shit.  Assholes from eBay emailed me like they were going to kick my ass because I pointed out the fucking obvious that making someone log in twice to a <strong>financial</strong> website means customers can be phished on the first login.  After random eBay assholes harass me I just stopped being nice.  I went from saying Paypal is broken to saying they’re fucking terrible programmers.  I mean fuck, if I’ve been using Paypal for years and I’m still having to log in twice every time then it’s not me it’s you jackasses.  Fix your shit.  Nobody else with authentication has this problem but fucking Paypal.</p>
<p>Oh, and I don’t fucking work for you.  I’m not going to waste 15-30 minutes navigating your bullshit bug tracker, filling out every random Jira/Bugzilla/Confluence/AgileXPHardon12000 tracking data point just so you can ignore me.  <strong>You</strong> fill out the damn ticket and ask me if it’s right.  That’s what I do.  I don’t make other people fill out bug reports. That’s just rude.</p>
<p>I’m convinced that this is what made me good at writing software.  I bring computational disaster upon myself so frequently that I just assume everything I touch is tainted and write software that protects against it as best I can.  I’m like the coder from <a rel="nofollow" target="_blank" href="https://en.wikipedia.org/wiki/Salusa_Secundus">Salusa Secondus</a> who had no idea things weren’t supposed to be this broken and ended up just making things solid to avoid it.  It is fun at times, but after two decades of constantly have to anticipate I’m getting tired of it.</p>
<p>If you want to find out how good your software is get me to use it.  I’ve brought systems to their knees just casually clicking around.   When that doesn’t work I do “crazy” things like, change my photo, or update my DNS records.  Things you totally didn’t anticipate someone doing?  Yup, I’ll end up doing it and then you’ll sigh and tell me nobody does that and I’ll just shrug and move on to the next product until one stops crapping out on me.</p>
<p>P.S. Blogo still fucks up bold. Sigh.</p><br />  <a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/zedshaw.wordpress.com/288/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zedshaw.wordpress.com/288/"/></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=zedshaw.com&#038;blog=75410050&#038;post=288&#038;subd=zedshaw&#038;ref=&#038;feed=1" width="1" height="1"/>]]></content:encoded>
         <media:content medium="image" url="http://2.gravatar.com/avatar/8c43ed7f065406bf171c0f3eb32cf615?s=96&amp;amp;d=identicon&amp;amp;r=G">
            <media:title type="html">zedshaw</media:title>
         </media:content>
         <category>rants</category>
      </item>
   </channel>
</rss>
<!-- fe2.yql.bf1.yahoo.com compressed/chunked Thu Oct  1 22:39:10 UTC 2015 -->
