<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="en"
   >
  <title type="text">Code Kills</title>
  <subtitle type="text"></subtitle>

  <updated>2012-01-22T21:05:58Z</updated>
  <generator uri="http://blogofile.com/">Blogofile</generator>

  <link rel="alternate" type="text/html" href="http://blog.codekills.net" />
  <id>http://blog.codekills.net/feed/atom/</id>
  <link rel="self" type="application/atom+xml" href="http://blog.codekills.net/feed/atom/" />
  <entry>
    <author>
      <name></name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">In case of Wikimergency (removing Wikipedia&#39;s blackout)</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2012/01/18/in-case-of-wikimergency" />
    <id>http://blog.codekills.net/2012/01/18/in-case-of-wikimergency</id>
    <updated>2012-01-18T07:06:12Z</updated>
    <published>2012-01-18T07:06:12Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">In case of Wikimergency (removing Wikipedia&#39;s blackout)</summary>
    <content type="html" xml:base="http://blog.codekills.net/2012/01/18/in-case-of-wikimergency">

&lt;p&gt;Here&#39;s a bookmarklet that will remove the &lt;a href=&#34;http://en.wikipedia.org/wiki/Wikipedia:SOPA_initiative/Learn_more&#34;&gt;SOPA&lt;/a&gt; blackout overlay from
Wikipedia:&lt;/p&gt;

&lt;code&gt;
javascript:(function(){document.getElementById(&#34;mw-sopaOverlay&#34;).style.display = &#34;none&#34;; var ids = [&#34;mw-page-base&#34;, &#34;mw-head-base&#34;, &#34;content&#34;, &#34;mw-head&#34;, &#34;mw-panel&#34;, &#34;footer&#34;]; for (var i = 0; i &lt; ids.length; i += 1) document.getElementById(ids[i]).style.display = &#34;block&#34;;})()
&lt;/code&gt;

&lt;p&gt;Or &lt;a href=&#34;javascript:(function(){document.getElementById(&amp;qt;mw-sopaOverlay&amp;qt;).style.display = &amp;qt;none&amp;qt;; var ids = [&amp;qt;mw-page-base&amp;qt;, &amp;qt;mw-head-base&amp;qt;, &amp;qt;content&amp;qt;, &amp;qt;mw-head&amp;qt;, &amp;qt;mw-panel&amp;qt;, &amp;qt;footer&amp;qt;]; for (var i = 0; i &lt; ids.length; i += 1) document.getElementById(ids[i]).style.display = &amp;qt;block&amp;qt;;})()&#34;&gt;bookmark this link&lt;/a&gt;.&lt;/p&gt;


</content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">On Startups and Identity</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/10/18/on-startups-and-identity" />
    <id>http://blog.codekills.net/2011/10/18/on-startups-and-identity</id>
    <updated>2011-10-18T19:18:42Z</updated>
    <published>2011-10-18T19:18:42Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">On Startups and Identity</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/10/18/on-startups-and-identity">&lt;div class=&#34;document&#34;&gt;
&lt;p&gt;A curious thing I&#39;ve noticed recently is that a large number of startups don&#39;t
include any information about the identity of the founders/employees.&lt;/p&gt;
&lt;p&gt;I find this strange because, in my opinion, a big advantage of working with (or
using the product of) a startup is that I can get to know the person (or
people) behind the scenes. They might even be someone I know, or someone a
friend knows.&lt;/p&gt;
&lt;p&gt;I would go on, but I would just be repeating what Jason Cohen says in &lt;a class=&#34;reference external&#34; href=&#34;http://blog.asmartbear.com/youre-a-little-company-now-act-like-one.html&#34;&gt;You&#39;re a
little company, now act like one&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, if you&#39;re part of a startup: please, include your identity and the
identity of the other founders/employees somewhere on your website.&lt;/p&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">What Makes a Good Resume</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/10/17/what-makes-a-good-resume" />
    <id>http://blog.codekills.net/2011/10/17/what-makes-a-good-resume</id>
    <updated>2011-10-18T01:40:54Z</updated>
    <published>2011-10-18T01:40:54Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">What Makes a Good Resume</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/10/17/what-makes-a-good-resume">&lt;div class=&#34;document&#34;&gt;
&lt;p&gt;I&#39;ve read a small but nontrival number of resumes in my life, and each time
I&#39;ve vocalized strong feelings about what makes a resume good or bad.&lt;/p&gt;
&lt;p&gt;Some people, presumably mistaking these strong feelings for expertise,
have asked me for advice when writing their resume... So I will summarize here
the things which I appreciate or despise while reading a resume.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: these are just my feelings. It&#39;s likely that people similar
to me will have similar feelings, but it&#39;s unlikely that someone like me
will be the first one reading your resume.&lt;/p&gt;
&lt;p&gt;For many positions a non-technical recruiter or HR person will be the first
to see your resume. They will likely apply naive pattern matching against a
given set of buzzwords to determine the quality of applicants, so a section
containing buzzwords and synonyms (ex, &amp;quot;Python, CPython, Django 1.3, Django
1.2, Django forms, Django admin, AJAX, ...&amp;quot;) would likely be helpful
(although, again, I can&#39;t speak with authority as I&#39;m not a non-technical
recruiter).&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;reference external&#34; href=&#34;http://stevehanov.ca/&#34;&gt;Steve Hanov&lt;/a&gt; has a &lt;a class=&#34;reference external&#34; href=&#34;http://stevehanov.ca/blog/index.php?id=56&#34;&gt;comic that might be helpful&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As I&#39;m looking at a resume I&#39;m trying to answer three questions: what does the
applicant know? How well do they know it? Would an interview with this
applicant be a waste of time?&lt;/p&gt;
&lt;p&gt;Some of the things I like to see are:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A summary of skills, programming languages and tools&lt;/strong&gt; &lt;em&gt;sorted by
experience&lt;/em&gt;. I can&#39;t count the number of times a applicant includes a list
like this on their resume:&lt;/p&gt;
&lt;blockquote&gt;
&lt;dl class=&#34;docutils&#34;&gt;
&lt;dt&gt;&lt;strong&gt;Programming languages&lt;/strong&gt;:&lt;/dt&gt;
&lt;dd&gt;Python, Java, C/C++, Objective-C, JavaScript, C#, Visual Basic, HTML,
CSS, Perl, Scheme, ML, Prolog.&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Tools&lt;/strong&gt;:&lt;/dt&gt;
&lt;dd&gt;Make, Vim, Emacs, Word, Power Point, Terminal, Linux, Firefox, Flash
Player.&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;
&lt;p&gt;This kind of list is &lt;em&gt;absolutely useless&lt;/em&gt;. Actually, no, that&#39;s not true.
It&#39;s very useful. It tells me that the applicant doesn&#39;t feel the need to
distinguish between their knowledge of Prolog and their knowledge of
JavaScript, and they think C is similar enough to C++ to warrant listing them
together.&lt;/p&gt;
&lt;p&gt;A list ordered by experience is much more useful. For example, my list might
look something like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;dl class=&#34;docutils&#34;&gt;
&lt;dt&gt;&lt;strong&gt;Programming languages&lt;/strong&gt;:&lt;/dt&gt;
&lt;dd&gt;Python (5 years, 50k &lt;a class=&#34;reference external&#34; href=&#34;http://en.wikipedia.org/wiki/Source_lines_of_code&#34;&gt;SLOC&lt;/a&gt;), ActionScript (2 years, 20k SLOC),
JavaScript (5 years, 5k SLOC), HTML+CSS (5 years), C (2 years, 2k
SLOC), some knowledge of PHP, Scheme, Haskell, and ML.&lt;/dd&gt;
&lt;dt&gt;&lt;strong&gt;Tools&lt;/strong&gt;:&lt;/dt&gt;
&lt;dd&gt;Vim (6 years), Bash (4 years), POSIX shell environment and utilities (4
years), Linux (8 years, mostly Debian and server administration),
Mercurial (3 years), git (1 year).&lt;/dd&gt;
&lt;/dl&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alternatively, the headings &amp;quot;most experience with&amp;quot; and &amp;quot;some experience with&amp;quot;
could be used, as they give some idea of both expertise and breadth.&lt;/p&gt;
&lt;p&gt;It&#39;s also worth noting that, at least in students, &lt;a class=&#34;reference external&#34; href=&#34;http://computinged.wordpress.com/2011/08/17/eric-mazurs-keynote-at-icer-2011-observing-demos-hurts-learning-and-confusion-is-a-sign-of-understanding/&#34;&gt;self assessment of
knowledge is useless&lt;/a&gt;, so when I see &amp;quot;export&amp;quot; or &amp;quot;very good&amp;quot; in a resume I
mentally replace it with &amp;quot;&lt;a class=&#34;reference external&#34; href=&#34;http://www.damninteresting.com/unskilled-and-unaware-of-it/&#34;&gt;dangerously ignorant&lt;/a&gt;&amp;quot;.&lt;/p&gt;
&lt;a class=&#34;reference external image-reference&#34; href=&#34;http://www.slideshare.net/olvemaudal/deep-c&#34;&gt;&lt;img alt=&#34;https://img.skitch.com/20111018-cct5dckmiwpi2tg8a3r12mtket.png&#34; src=&#34;https://img.skitch.com/20111018-cct5dckmiwpi2tg8a3r12mtket.png&#34; /&gt;&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;Relevant links&lt;/strong&gt;. I feel like this should go without saying, but I would
guess that less than 10% of the resumes I have read included &lt;em&gt;any kind&lt;/em&gt; of
link.&lt;/p&gt;
&lt;p&gt;I appreciate any links to a applicant&#39;s online presence: a blog or personal
website (if it has been updated in the last five years) is good, and an account
on GitHub, BitBucket, StackOverflow, Reddit or other social site would be even
better. It&#39;s hard to convey interpersonal and communication skills on a resume,
but social sites serve as a good way to demonstrate those skills.&lt;/p&gt;
&lt;p&gt;And a corollary which, based on experience, isn&#39;t as obvious as you might
expect: &lt;em&gt;irrelevant&lt;/em&gt; links (for example, to a &amp;quot;home page&amp;quot; without any
interesting content) are worse than useless - they waste my time and make the
applicant look silly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Length&lt;/strong&gt;. I don&#39;t care. After the summary of skills, languages and tools I&#39;m
usually skimming for interesting things... And if the applicant has three pages
worth of interesting things, I would like to read those three pages. But if the
applicant has three pages of boring things, I will probably skim the second and
glance over the third.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Relevant work experience&lt;/strong&gt;. And, more specifically, &lt;em&gt;specific&lt;/em&gt; work
experience. A statement like &amp;quot;worked on a team&amp;quot; or &amp;quot;helped implement&amp;quot; isn&#39;t as
helpful as &amp;quot;wrote server-side JavaScript&amp;quot; or &amp;quot;designed the database schema&amp;quot;.
Also, while others might, I don&#39;t care about unrelated work experience.&lt;/p&gt;
&lt;p&gt;It&#39;s also useful to include the technologies used at a job. For example:
&amp;quot;MegaCorp - 2001 - 2003; - Designed database schema to optimize sale
transactions; - Performed A/B testing to optimize widget sales; Technologies:
PostgreSQL, PHP, libABTestOMatic&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;School&lt;/strong&gt;. As a university dropout, I&#39;m a bit biased here, but I care very
little about school or degrees unless they are directly relevant to the job at
hand. For example, if I the position I&#39;m hiring for would benefit from a strong
knowledge of a particular academic field, formal education in that field would
be important... But, in general, I haven&#39;t found formal education to be very
important for the types of programming that I do, so it&#39;s not important to me
while I&#39;m hiring.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Look, feel and other little things&lt;/strong&gt; are important too. Not in the
it-needs-to-look-pretty sense — I don&#39;t have any problem with a bland resume
written in Word — but in the fanatic-attention-to-detail sense. I want a
programmer who cares as much as I do about consistency, attention to detail and
never, ever, under any circumstances using tabs and spaces interchangeably. If
an applicant&#39;s resume has bullets that don&#39;t line up, text in random fonts and
obviously missing punctuation, I&#39;m going to assume that their code will look
similar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cover letters&lt;/strong&gt;. I have read one or two very good cover letters where the
applicant gave specific reasons they were interested in the job and why they
would be worth my time to interview. They were short, to the point, and
distinctly lacking in phrases such as &amp;quot;I would make an excellent …&amp;quot;. I
appreciated these cover letters. I have skimmed and subsequently ignored all
other cover letters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt;: I want a resume to show me in as much detail as is sensible what the
applicant has done, what they know, and why they are a good programmer. Bonus
points for interesting content and links to social sites like StackOverflow or
Reddit.&lt;/p&gt;
&lt;p&gt;PS: My startup is (or will in the near future be) hiring! If you&#39;re interested
in working for a Toronto based startup which employs incredibly brilliant
people, uses a lot of Python, produces a real, physical product, and pays real,
actual money, send me an email: &lt;a class=&#34;reference external&#34; href=&#34;mailto:david&amp;#64;wolever.net&#34;&gt;david&amp;#64;wolever.net&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">RIM: did you just tell me to Google &#39;you do not have write permission&#39;?</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/07/28/rim--did-you-just-tell-me-to-google-'you-do-not-have-write-permission'-" />
    <id>http://blog.codekills.net/2011/07/28/rim--did-you-just-tell-me-to-google-'you-do-not-have-write-permission'-</id>
    <updated>2011-07-28T15:41:35Z</updated>
    <published>2011-07-28T15:41:35Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">RIM: did you just tell me to Google &#39;you do not have write permission&#39;?</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/07/28/rim--did-you-just-tell-me-to-google-'you-do-not-have-write-permission'-">&lt;div class=&#34;document&#34;&gt;
&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: I have been trying to develop for the PlayBook, and I have run
into silly, time-consuming problems at every step. I have sent some of these
errors to &lt;a class=&#34;reference external&#34; href=&#34;https://twitter.com/#!/BlackBerryDev/&#34;&gt;&amp;#64;BlackBerryDev&lt;/a&gt;, and have
received generally unhelpful responses (for example, see &lt;a class=&#34;reference external&#34; href=&#34;http://twitter.com/wolever/status/95900673861885953&#34;&gt;my message&lt;/a&gt;, &lt;a class=&#34;reference external&#34; href=&#34;http://twitter.com/BlackBerryDev/status/95952589992108032&#34;&gt;RIM&#39;s reply&lt;/a&gt;, &lt;a class=&#34;reference external&#34; href=&#34;http://twitter.com/wolever/status/95953920098189312&#34;&gt;my reply&lt;/a&gt;, &lt;a class=&#34;reference external&#34; href=&#34;http://twitter.com/BlackBerryDev/status/96220987548385280&#34;&gt;RIM&#39;s second reply&lt;/a&gt;)... But the
message I received today deserves a response longer than 140 characters.&lt;/p&gt;
&lt;p&gt;My initial message was:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#64;BlackBerryDev eg, BS unhelpful errors like this: &lt;a class=&#34;reference external&#34; href=&#34;http://twitpic.com/5u4sco&#34;&gt;http://twitpic.com/5u4sco&lt;/a&gt;&lt;/p&gt;
&lt;p class=&#34;attribution&#34;&gt;&amp;mdash;&lt;a class=&#34;reference external&#34; href=&#34;https://twitter.com/wolever/status/94496389471539200&#34;&gt;https://twitter.com/wolever/status/94496389471539200&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And &amp;#64;BlackBerryDev replied with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#64;wolever This error is a common mac permissions error, not specific to our
tooling.  Check
[&lt;a class=&#34;reference external&#34; href=&#34;http://www.google.ca/search?q=%22You+do+not+have+write+permissions+to+the+chosen+installation+destination%22&#34;&gt;http://www.google.ca/search?q=%22You+do+not+have+write+permissions...&lt;/a&gt;]
for examples  ^SA&lt;/p&gt;
&lt;p class=&#34;attribution&#34;&gt;&amp;mdash;&lt;a class=&#34;reference external&#34; href=&#34;http://twitter.com/BlackBerryDev/status/96594875293761537&#34;&gt;http://twitter.com/BlackBerryDev/status/96594875293761537&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And this is my reply to the above:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As you have apparently never debugged a permission error before, ^SA, so
let me tell you how it works.&lt;/p&gt;
&lt;p&gt;When sensible software can&#39;t write to a file or directory, it includes a
full path to the file or directory in the error message. Using this
information, it is possible to example the file or directory in question
and determine the correct course of actions (for example, changing the
permissions).&lt;/p&gt;
&lt;p&gt;However, the shitty InstallAnywhere software used by the PlayBook SDK is,
unsurprisingly, not sensible. So when it encounters a permission error, its
error message does not include any such information. In fact, the only hint
about the install directory I&#39;m given is that it&#39;s:&lt;/p&gt;
&lt;blockquote&gt;
Inside &amp;quot;Research in Motion&amp;quot; on the folder &amp;quot;SDKs&amp;quot; on the disk &amp;quot;Enoch&amp;quot;.&lt;/blockquote&gt;
&lt;p&gt;Which makes the permission error impossible to debug without something like
an install log.&lt;/p&gt;
&lt;p&gt;But I don&#39;t know where the install log is (if it exists), and frankly I
don&#39;t care.&lt;/p&gt;
&lt;p&gt;What I do care about, though, is that you have sent me a link to a Google
search (without even using &lt;a class=&#34;reference external&#34; href=&#34;http://lmgtfy.com/&#34;&gt;lmgtfy&lt;/a&gt;!) that you
clearly haven&#39;t looked at (because if you had, you would see that 1/3 of
the results are Linux-specific, 1/3 of the results are the file which
defines the error message, and 1/3 of the results are mirrors of the same
message, which suggests a simple “fix permissions” (which, by the way,
would not, and did not, fix the problem).&lt;/p&gt;
&lt;p&gt;So, &amp;#64;BlackBerryDev: if your future messages will piss me off and insult me
in the same way that these messages have, I would rather you simply didn&#39;t
respond to me at all.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And, while I&#39;m standing on my little soap box here, I&#39;d like to send RIM a
small message too:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RIM,&lt;/p&gt;
&lt;p&gt;It seems obvious to me that the &lt;em&gt;only&lt;/em&gt; way you will be able to get on top
is &lt;a class=&#34;reference external&#34; href=&#34;http://www.youtube.com/watch?v=8To-6VIJZRE&#34;&gt;developers&lt;/a&gt;... But, at
the moment, your development experience is &lt;strong&gt;terrible&lt;/strong&gt;. Just ask
&lt;em&gt;anyone&lt;/em&gt; who has tried to develop for the PlayBook.&lt;/p&gt;
&lt;p&gt;Fortunately I also &lt;em&gt;know&lt;/em&gt; that you have the skill in-house to improve on
this. You know those &lt;a class=&#34;reference external&#34; href=&#34;http://tinyhippos.com/&#34;&gt;TinyHippos&lt;/a&gt; guys you
recently acquired? They know what they&#39;re doing. Listen to them. If they
suggest crazy things like sending both signing keys in one email (instead
of &lt;a class=&#34;reference external&#34; href=&#34;http://twitpic.com/5w83yy&#34;&gt;two identical emails&lt;/a&gt;), do it. If they
suggest getting in bed with Adobe and VMware so PlayBook developers can
start developing without spending &lt;em&gt;hours&lt;/em&gt; creating accounts and
downloading demos, do it. Do whatever it takes to make development easy and
painless.&lt;/p&gt;
&lt;p&gt;Want some other starting points? &lt;a class=&#34;reference external&#34; href=&#34;https://twitter.com/#!/search/RIM%20OR%20BlackBerryDev%20OR%20PlayBook%20from%3Awolever&#34;&gt;Here&#39;s what I&#39;ve complained about on
Twitter&lt;/a&gt;
(&lt;a class=&#34;reference external&#34; href=&#34;/uploads/rim_OR_BlacKBerryDev_OR_PlayBook_from_wolever.html&#34;&gt;static mirror&lt;/a&gt;).  Put more
people behind &amp;#64;BlackBerryDev so they can reply quickly and helpfully. Make
it possible to get developer signing keys instantly. Etc...&lt;/p&gt;
&lt;p&gt;I would really like to develop for the PlayBook. I really would. But as it
stands, I&#39;ve spent three hours dealing with the kind of crap I&#39;ve
documented above for every hour I&#39;ve spent writing code. And that&#39;s just no
fun.&lt;/p&gt;
&lt;p class=&#34;attribution&#34;&gt;&amp;mdash;David&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">Running Multiple Firefox Profiles for Fun and Profit</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/07/10/running-multiple-firefox-profiles-for-fun-and-profit" />
    <id>http://blog.codekills.net/2011/07/10/running-multiple-firefox-profiles-for-fun-and-profit</id>
    <updated>2011-07-10T17:07:40Z</updated>
    <published>2011-07-10T17:07:40Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">Running Multiple Firefox Profiles for Fun and Profit</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/07/10/running-multiple-firefox-profiles-for-fun-and-profit">&lt;div class=&#34;document&#34;&gt;
&lt;style&gt;
img.exampleimg {
    border: 1px solid;
    margin-left: 30px;
}
&lt;/style&gt;&lt;p&gt;For a long time I have found it useful to run three (or more) different
browsers: Safari for my day-to-day browsing, Firefox for my development work
and Camino for Facebook and Google apps. This separation is part pragmatism
– it&#39;s useful to clear cookies or disable FlashBlock while I&#39;m developing
without my main browser being affected – and part paranoia – I&#39;m not logged in
to Facebook or Google on my main browser, so it&#39;s harder for them to track me
and I&#39;m less likely to be hurt by a cross-site-scripting (or similar) attack.&lt;/p&gt;
&lt;p&gt;Recently Safari&#39;s memory leaks &lt;a class=&#34;footnote-reference&#34; href=&#34;#id2&#34; id=&#34;id1&#34;&gt;[0]&lt;/a&gt; and the launch of Firefox 5 have pushed me
to re-evaluating my browser preferences... And this is the result:&lt;/p&gt;
&lt;img alt=&#34;/uploads/FirefoxIcons.png&#34; class=&#34;exampleimg&#34; src=&#34;/uploads/FirefoxIcons.png&#34; /&gt;
&lt;p&gt;Three customized versions of Firefox and three &lt;a class=&#34;reference external&#34; href=&#34;http://support.mozilla.com/en-US/kb/Profiles&#34;&gt;profiles&lt;/a&gt; to match.&lt;/p&gt;
&lt;p&gt;The customizations are straight forward:&lt;/p&gt;
&lt;ol class=&#34;arabic simple&#34;&gt;
&lt;li&gt;&lt;tt class=&#34;docutils literal&#34;&gt;Firefox.app&lt;/tt&gt; was copied three times, and the name was to the role of that
copy (“Browsing.app”, etc).&lt;/li&gt;
&lt;li&gt;The &lt;a class=&#34;reference external&#34; href=&#34;http://support.apple.com/kb/HT2493&#34;&gt;icon was changed&lt;/a&gt; on each app.&lt;/li&gt;
&lt;li&gt;The &lt;tt class=&#34;docutils literal&#34;&gt;CFBundleName&lt;/tt&gt; in
&lt;tt class=&#34;docutils literal&#34;&gt;$NAME.app/Contents/Resources/en.lproj/InfoPlist.strings&lt;/tt&gt; was changed from
“Firefox” to &lt;tt class=&#34;docutils literal&#34;&gt;$NAME&lt;/tt&gt; (changing the application name which appears in the
top left corner of the screen).&lt;/li&gt;
&lt;li&gt;After the “Browsing” profile was setup (correct plugins installed, etc), it
was copied twice to create the “Dev” and “Facebook” profiles (profiles are
stored at &lt;tt class=&#34;docutils literal&#34;&gt;~/Library/Application Support/Firefox/Profiles/&lt;/tt&gt;, and the
&lt;tt class=&#34;docutils literal&#34;&gt;profiles.ini&lt;/tt&gt; file, in &lt;tt class=&#34;docutils literal&#34;&gt;Application Support/Firefox/&lt;/tt&gt;, must also be
updated).&lt;/li&gt;
&lt;li&gt;A &lt;a class=&#34;reference external&#34; href=&#34;http://www.getpersonas.com/&#34;&gt;persona&lt;/a&gt; was added to the “Facebook” and
“Dev” profiles (specifically a &lt;a class=&#34;reference external&#34; href=&#34;http://www.getpersonas.com/en-US/persona/10574&#34;&gt;pastel sky blue&lt;/a&gt; and &lt;a class=&#34;reference external&#34; href=&#34;http://www.getpersonas.com/en-US/persona/10536&#34;&gt;pastel mandarin&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;reference external&#34; href=&#34;http://noscript.net/&#34;&gt;NoScript&lt;/a&gt; was installed on the “Facebook” profile
(for a little bit of added paranoia).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With these customizations, it&#39;s easy to visually distinguish between the
browsers, both from the main windows:&lt;/p&gt;
&lt;img alt=&#34;/uploads/StackedBrowsers.png&#34; class=&#34;exampleimg&#34; src=&#34;/uploads/StackedBrowsers.png&#34; /&gt;
&lt;p&gt;And from the dock/command+tab application list:&lt;/p&gt;
&lt;img alt=&#34;/uploads/BrowsersDockView.png&#34; class=&#34;exampleimg&#34; src=&#34;/uploads/BrowsersDockView.png&#34; /&gt;
&lt;p&gt;And that&#39;s my current browsing setup :)&lt;/p&gt;
&lt;table class=&#34;docutils footnote&#34; frame=&#34;void&#34; id=&#34;id2&#34; rules=&#34;none&#34;&gt;
&lt;colgroup&gt;&lt;col class=&#34;label&#34; /&gt;&lt;col /&gt;&lt;/colgroup&gt;
&lt;tbody valign=&#34;top&#34;&gt;
&lt;tr&gt;&lt;td class=&#34;label&#34;&gt;&lt;a class=&#34;fn-backref&#34; href=&#34;#id1&#34;&gt;[0]&lt;/a&gt;&lt;/td&gt;&lt;td&gt;it would be using almost a gigabyte of memory, even if I only had one
or two tabs open.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <author>
      <name>David Wolever</name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">Scroll Wheel Emulation for the TrackMan Marble</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/06/04/scroll-wheel-emulation-for-the-trackman-marble" />
    <id>http://blog.codekills.net/2011/06/04/scroll-wheel-emulation-for-the-trackman-marble</id>
    <updated>2011-06-04T20:26:00Z</updated>
    <published>2011-06-04T20:26:00Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">Scroll Wheel Emulation for the TrackMan Marble</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/06/04/scroll-wheel-emulation-for-the-trackman-marble">

&lt;p&gt;I recently had to get a new mouse, and because Logitec has discontinued my mouse of choice, the &lt;a href=&#34;http://reviews.logitech.com/7061/166/logitech-trackman-wheel-reviews/reviews.htm&#34;&gt;TrackMan Wheel&lt;/a&gt;[0], I got a &lt;a href=&#34;http://www.logitech.com/en-us/mice-pointers/trackballs/devices/4680&#34;&gt;TrackMan Marble&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unlike every other modern mouse, the Marble doesn&#39;t have any sort of scroll wheel… But fortunately this can be emulated in software. I&#39;ve done this on my Mac using &lt;a href=&#34;http://pqrs.org/macosx/keyremap4macbook/&#34;&gt;KeyRemap4MacBook&lt;/a&gt; and &lt;a href=&#34;/uploads/private.xml&#34;&gt;a custom private.xml&lt;/a&gt;. I&#39;ve also been told that &lt;a href=&#34;http://simans.net/marble/&#34;&gt;Marble Mouse Scroll Wheel&lt;/a&gt; (&lt;a href=&#34;/uploads/marbleinst.exe&#34;&gt;mirrored marbleinst.exe&lt;/a&gt;) works well on Windows.&lt;/p&gt;
&lt;p&gt;[0]: It has been replaced by, of all things, a wireless version. Why does a stationary mouse need to be wireless? I&#39;ve got no idea. Maybe it&#39;s a conspiracy between Logitec and Duracell?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <author>
      <name>David Wolever</name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">Four Kinds of Pair Programming</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/06/02/four-kinds-of-pair-programming" />
    <id>http://blog.codekills.net/2011/06/02/four-kinds-of-pair-programming</id>
    <updated>2011-06-02T04:16:00Z</updated>
    <published>2011-06-02T04:16:00Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">Four Kinds of Pair Programming</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/06/02/four-kinds-of-pair-programming">

&lt;p&gt;In thinking about the pair programming that I&#39;ve done, I realized that I can separate all of my past partners (all 6-8 of them) into four categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Equally skilled&lt;/li&gt;
&lt;li&gt;Less skilled&lt;/li&gt;
&lt;li&gt;Much less skilled&lt;/li&gt;
&lt;li&gt;Skilled in a different domain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of these, I have found the “less skilled” partners to be the most frustrating. Not because of their personality[0], but because during the sessions I&#39;ve felt like there is a mutual understanding of the goal, but I would just be able to get there more quickly (for example, because I&#39;m more experienced with the libraries or environment). I haven&#39;t felt this way with the “much less skilled” partners because I believe there is a mutual understanding that the session more akin to a tutorial… So, in my mind, the goal becomes “teach my partner” instead of “solve a problem”.&lt;/p&gt;
&lt;p&gt;The times I&#39;ve paired with an “equally skilled” partner do not stand out in my memory, so I assume they went &lt;em&gt;okay&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;My favourite pairing experience was when a friend and I had to figure out the inner workings of some example C code for a micro controller. My friend knew a lot about micro controllers, I knew a lot about C, and together we were able to reverse engineer the hideous example code much more quickly than either of us alone could have. It was a lot of fun.&lt;/p&gt;
&lt;p&gt;[0]: as I write this, I don&#39;t have any specific people in mind, just memories of my experience.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <author>
      <name>David Wolever</name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">Comment Notifications</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2011/03/08/comment-notifications" />
    <id>http://blog.codekills.net/2011/03/08/comment-notifications</id>
    <updated>2011-03-08T20:26:00Z</updated>
    <published>2011-03-08T20:26:00Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">Comment Notifications</summary>
    <content type="html" xml:base="http://blog.codekills.net/2011/03/08/comment-notifications">

&lt;p&gt;It appears that, at some point, I stopped getting notifications of new comments… I&#39;ve sorted that out now, though, and please forgive me for my tardiness in replying to old comments.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <author>
      <name>David Wolever</name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">Equality in JavaScript</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2010/12/31/equality-in-javascript" />
    <id>http://blog.codekills.net/2010/12/31/equality-in-javascript</id>
    <updated>2010-12-31T15:21:00Z</updated>
    <published>2010-12-31T15:21:00Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">Equality in JavaScript</summary>
    <content type="html" xml:base="http://blog.codekills.net/2010/12/31/equality-in-javascript">

&lt;p&gt;After seeing &lt;a href=&#34;http://imgur.com/7unV7&#34;&gt;Problem, Boole?&lt;/a&gt;, a table of comparisons in PHP, I decided to bang up a quick JavaScript version (a cell is green when &lt;code&gt;column == row&lt;/code&gt;):&lt;/p&gt;
&lt;script&gt;
(function() {
  var head = document.getElementsByTagName(&#34;head&#34;)[0];
  var style = document.createElement(&#34;style&#34;);
  style.type = &#34;text/css&#34;;
  style.appendChild(document.createTextNode(&#34;.result { width: 35px; height: 35px; } .col-header, .row-header { font-weight: bold; } .col-header { text-align: center; } .row-header { text-align: right; } .dark { background-color: #DDD; } .result.true.dark { background-color: #0C0; } .result.true.light { background-color: #0F0; }&#34;));
  head.appendChild(style);
})();
&lt;/script&gt;
&lt;table id=&#34;#javascript_equality&#34;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;true&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;false&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;1&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;0&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;-1&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;&#34;1&#34;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;&#34;0&#34;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;&#34;-1&#34;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;&#34;&#34;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;&#34;javascript&#34;&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;null&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;undefined&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;[]&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;{}&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;[[]]&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;[0]&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;[1]&lt;/td&gt;&lt;td class=&#34;col-header light&#34;&gt;NaN&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;true&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;false&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;1&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;0&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;-1&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;&#34;1&#34;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;&#34;0&#34;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;&#34;-1&#34;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;&#34;&#34;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;&#34;javascript&#34;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;null&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;undefined&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;[]&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;{}&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;[[]]&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;[0]&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header light&#34;&gt;[1]&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result true light&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false light&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&#34;row-header dark&#34;&gt;NaN&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;td class=&#34;result false dark&#34;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The source can be found over at GitHub: &lt;a href=&#34;https://gist.github.com/761080&#34;&gt;https://gist.github.com/761080&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <author>
      <name>David Wolever</name>
      <uri>http://blog.codekills.net</uri>
    </author>
    <title type="html">ifdiff wraps diffs in `#if`s</title>
    <link rel="alternate" type="text/html" href="http://blog.codekills.net/2010/10/05/ifdiff-wraps-diffs-in---if-s" />
    <id>http://blog.codekills.net/2010/10/05/ifdiff-wraps-diffs-in---if-s</id>
    <updated>2010-10-06T02:38:00Z</updated>
    <published>2010-10-06T02:38:00Z</published>
    <category scheme="http://blog.codekills.net" term="Uncategorized" />
    <summary type="html">ifdiff wraps diffs in `#if`s</summary>
    <content type="html" xml:base="http://blog.codekills.net/2010/10/05/ifdiff-wraps-diffs-in---if-s">

&lt;p&gt;If you&#39;ve taken an &lt;a href=&#34;http://www.eecs.harvard.edu/~syrah/os161/&#34;&gt;OS/161&lt;/a&gt; based operating systems course[0], you probably ran into one of those fun little eccentricities that makes higher education so enjoyable: the requirement that all code be added in &lt;code&gt;#if&lt;/code&gt; blocks.&lt;/p&gt;
&lt;p&gt;For example, if the original code looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int foo = 3;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And I change it to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;int foo = 4;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&#39;m actually required to submit something that looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#if !STUFF
int foo = 3;
#else
int foo = 4;
#endif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, my friend &lt;a href=&#34;http://twitter.com/#!/dj3vande&#34;&gt;Dave&lt;/a&gt; didn&#39;t find this very amusing, so he commissioned me to write a script which would massage a diff produced by &lt;code&gt;$VCS diff&lt;/code&gt;, adding all the &lt;code&gt;#if&lt;/code&gt;s required to make the TAs happy :&lt;/p&gt;
&lt;pre&gt;
$ hg diff -r initial:
...
-int foo = 3;
+int foo = 4;
...
$ !! | ifdiff STUFF
...
+#if !STUFF
 int foo = 3;
+#endif
+#if STUFF
+int foo = 4
+#endif
...
&lt;/pre&gt;
&lt;p&gt;The code can be downloaded and forked over at GitHub: &lt;a href=&#34;http://gist.github.com/612687#file_ifdiff&#34;&gt;ifdiff — http://gist.github.com/612687&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;[0]: For the record, &lt;a href=&#34;http://www.cdf.toronto.edu/~csc369h/fall/&#34;&gt;CSC369&lt;/a&gt; was one of my favorite courses.&lt;/p&gt;
</content>
  </entry>
</feed>

