<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[michael-mccracken.net]]></title>
  <link href="http://michael-mccracken.net/atom.xml" rel="self"/>
  <link href="http://michael-mccracken.net/"/>
  <updated>2013-04-10T08:54:28-07:00</updated>
  <id>http://michael-mccracken.net/</id>
  <author>
    <name><![CDATA[Michael McCracken]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Links]]></title>
    <link href="http://michael-mccracken.net/2013/04/links/"/>
    <updated>2013-04-10T08:41:00-07:00</updated>
    <id>http://michael-mccracken.net/2013/04/links</id>
    <content type="html"><![CDATA[<ul>
<li><a href="http://lambda-the-ultimate.org/node/4710">DYNAMO</a>
  Someone has rewritten one of the earliest simulation systems in JavaScript (the fate of all interesting software). Also includes a link to an article about the history of simulation software that sounds very interesting.</li>
<li><a href="http://feeds.seriouseats.com/~r/seriouseatsfeaturesvideos/~3/yfScRT6TNzw/the-food-lab-crab-cakes.html">The Food Lab: The Crabbiest Crab Cakes</a>
  I love crab cakes, but I&#8217;m not sure I really want to try to make them at home. If I do, I&#8217;ll use these tips. The Food Lab is fun stuff.</li>
<li><a href="http://mjtsai.com/blog/2013/03/30/debug-it/">Debug It!</a>
  A review of a book on debugging, which is a topic that I think should be taught right alongside programming. See also <a href="http://whyprogramsfail.com">&#8220;Why Programs Fail&#8221;</a></li>
<li><a href="http://www.givedirectly.org/">GiveDirectly: introducing a radical new way to give! | GiveDirectly</a>
  Send cash straight to poor people. If their assertions are true, it&#8217;s a really interesting idea, and I can&#8217;t believe it hasn&#8217;t been done before. It also seems transparently better than microloans.</li>
<li><a href="https://github.com/ContinuumIO/Bokeh">ContinuumIO/Bokeh · GitHub</a>
  Something to look out for &#8211; a Python ggplot that works with HTML5 is a great idea. &#8220;Bokeh (pronounced boh-Kay) is an implementation of Grammar of Graphics for Python, that also supports the customized rendering flexibility of Protovis and d3. Although it is a Python library, its primary output backend is HTML5 Canvas.  There are many excellent plotting packages for Python, but they generally do not optimize for the particular needs of statistical plotting (easy faceting, bulk application of aesthetic and visual parameters across categorical variables, pleasing default color palettes for categorical data, etc.). The goal of Bokeh is to provide a compelling Python equivalent of ggplot in R.&#8221;</li>
<li><a href="http://kk.org/cooltools/archives/10441">FitDesk X1</a>
  Level up from a standing desk? I&#8217;d love to try this for a day.</li>
<li><a href="http://lambda-the-ultimate.org/node/4699">Concurrent Revisions</a>
  DVCS-like concurrent programming. Interesting sounding research - I haven&#8217;t read it yet&#8230;</li>
<li><a href="http://www.hockeyabstract.com/playerusagecharts">Many thanks to @robvollmannhl and the good folks at Hockey Abstract for these great interactive Player Usage Charts: hockeyabstract.com/playerusagecha…</a>
  Player Usage Charts are fascinating, but I can never figure out why people always change the axes so that the dots fill the space. It makes it impossible to compare two charts, and it&#8217;s not obvious, so you end up comparing charts without realizing that it&#8217;s meaningless.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mock nested properties with python-mock]]></title>
    <link href="http://michael-mccracken.net/2013/02/mock-nested-properties-with-python-mock/"/>
    <updated>2013-02-21T15:05:00-08:00</updated>
    <id>http://michael-mccracken.net/2013/02/mock-nested-properties-with-python-mock</id>
    <content type="html"><![CDATA[<p>Python&#8217;s <a href="http://www.voidspace.org.uk/python/mock/">mock</a> library (part of stdlib in 3.3+) is a great tool for writing concise tests.
Its documentation is very good, and rewards multiple reads - but I found one thing that wasn&#8217;t totally clear, even after looking through a few times.
I wanted to use PropertyMock to mock nested Properties. Specifically, I had patched the python Gnome-introspection wrapper for libsoup at the top level <code>Soup</code> objcet, and I also wanted to replace one of its nested constant properties, Soup.MemoryUse.COPY with a sentinel that I controlled, for later comparison.</p>

<p>The idiom for PropertyMock is to assign a PropertyMock to the type object of the Mock object whose property you want control of.
What I found is that because Mocks auto-create properties, it&#8217;s possible to do nested mocking in one line, like this:</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">import</span> <span class="nn">mock</span>
</span><span class='line'><span class="n">m</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">Mock</span><span class="p">()</span>
</span><span class='line'><span class="nb">type</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">d</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">PropertyMock</span><span class="p">(</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">sentinel</span><span class="o">.</span><span class="n">my_value</span><span class="p">)</span>
</span><span class='line'><span class="k">assert</span><span class="p">(</span><span class="n">m</span><span class="o">.</span><span class="n">a</span><span class="o">.</span><span class="n">b</span><span class="o">.</span><span class="n">c</span><span class="o">.</span><span class="n">d</span> <span class="o">==</span> <span class="n">mock</span><span class="o">.</span><span class="n">sentinel</span><span class="o">.</span><span class="n">my_value</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>


<p>So my soup example looks roughly like this (mixing testing and tested code, and repeating literals for brevity):</p>

<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="n">json_body</span> <span class="o">=</span> <span class="s">&quot;{}&quot;</span>
</span><span class='line'><span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="n">gi</span><span class="o">.</span><span class="n">repository</span><span class="o">.</span><span class="n">Soup</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_soup</span><span class="p">:</span>
</span><span class='line'>    <span class="kn">from</span> <span class="nn">gi.repository</span> <span class="kn">import</span> <span class="n">Soup</span>
</span><span class='line'>    <span class="nb">type</span><span class="p">(</span><span class="n">mock_soup</span><span class="o">.</span><span class="n">MemoryUse</span><span class="p">)</span><span class="o">.</span><span class="n">COPY</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">PropertyMock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="n">mock</span><span class="o">.</span><span class="n">sentinel</span><span class="o">.</span><span class="n">COPY</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'>    <span class="c"># tested code:</span>
</span><span class='line'>    <span class="n">message</span> <span class="o">=</span> <span class="n">Soup</span><span class="o">.</span><span class="n">Message</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s">&quot;POST&quot;</span><span class="p">,</span> <span class="s">&quot;http://fake.com/api&quot;</span><span class="p">)</span>
</span><span class='line'>    <span class="n">message</span><span class="o">.</span><span class="n">set_request</span><span class="p">(</span><span class="s">&#39;application/json&#39;</span><span class="p">,</span> <span class="n">Soup</span><span class="o">.</span><span class="n">MemoryUse</span><span class="o">.</span><span class="n">COPY</span><span class="p">,</span> <span class="n">json_body</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">json_body</span><span class="p">))</span>
</span><span class='line'>
</span><span class='line'>    <span class="c"># checking:</span>
</span><span class='line'>    <span class="k">assert</span><span class="p">(</span><span class="n">mock_soup</span><span class="o">.</span><span class="n">mock_calls</span> <span class="o">==</span> <span class="p">[</span><span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="o">.</span><span class="n">Message</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="s">&quot;POST&quot;</span><span class="p">,</span> <span class="s">&quot;http://fake.com/api&quot;</span><span class="p">),</span>
</span><span class='line'>                                    <span class="n">mock</span><span class="o">.</span><span class="n">call</span><span class="o">.</span><span class="n">Message</span><span class="o">.</span><span class="n">new</span><span class="p">()</span><span class="o">.</span><span class="n">set_request</span><span class="p">(</span><span class="s">&#39;application/json&#39;</span><span class="p">,</span>
</span><span class='line'>                                                                        <span class="n">sentinel</span><span class="o">.</span><span class="n">COPY</span> <span class="c"># &lt;--- this was the point</span>
</span><span class='line'>                                                                        <span class="s">&quot;{}&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)])</span>
</span></code></pre></td></tr></table></div></figure>


<p>It&#8217;s often possible to think of a shorter, clearer use of the mock library after revisiting a problem, but so far this still seems good. Let me know in the comments if you have a suggestion for improvements.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Don't Snooze]]></title>
    <link href="http://michael-mccracken.net/2013/02/dont-snooze/"/>
    <updated>2013-02-08T08:18:00-08:00</updated>
    <id>http://michael-mccracken.net/2013/02/dont-snooze</id>
    <content type="html"><![CDATA[<p>Mailbox is a new iPhone email app that grabbed a lot of attention recently, partly because of their waiting list for using it.
It&#8217;s a gmail-only system that stores copies of your email on Mailbox&#8217;s servers, so they can do new features beyond the standard mail client.
Even though I got through the waiting list a week ago, I haven&#8217;t tried it myself, because I wasn&#8217;t</p>

<p>I have a few religious beliefs about email.
One is that processing incoming email is different from</p>

<p>that you should only process a message once - when you first see it, you should decide what to do next with it, even if that&#8217;s &#8220;read it again later&#8221;,</p>

<p>I call it a religion because I believe it, but I don&#8217;t always practice
it. I have an inbox full of things I&#8217;ve looked at once and am
procrastinating on, partly because it&#8217;s hard to move things to the
todo list that I use from Gmail. It annoys me every time I look at my
email, and I&#8217;ve forgotten important things that I left sitting
there. This is exactly why I think it&#8217;s important that our tools
encourage good habits, instead of encoding bad ones.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mac IRC clients]]></title>
    <link href="http://michael-mccracken.net/2012/12/mac-irc-clients/"/>
    <updated>2012-12-13T09:03:00-08:00</updated>
    <id>http://michael-mccracken.net/2012/12/mac-irc-clients</id>
    <content type="html"><![CDATA[<p>At Canonical, we are spread all over and keep in touch via IRC. I&#8217;ve
tried out a bunch of IRC clients, but nothing is quite right. I&#8217;ll
explain. Here&#8217;s a list of some things I want from a client - it&#8217;s
probably not complete, but it&#8217;ll do for now:</p>

<ol>
<li><p>Don&#8217;t crash. A bouncer makes crashes recoverable, but I shouldn&#8217;t
have to use one just to keep the backlog around.</p></li>
<li><p>I need to search the backlog. Incremental search is best.</p></li>
<li><p>Show multiple channels at once, in one window.</p></li>
<li><p>Highlight mentions of my nick so I can glance at a window and see if anyone&#8217;s asking me something. Use Growl or notification center, too.</p></li>
<li><p>Make it obvious when I&#8217;ve disconnected, and reconnect robustly.</p></li>
<li><p>Let me hide/fade out join/leave notifications and other admin messages.</p></li>
<li><p>Keep my place so I know what messages are new.</p></li>
<li><p>Make it obvious which channel I&#8217;m looking at, and even more
obvious which channel I&#8217;m about to type in. (Nothing is great at this)</p></li>
<li><p>Spell-check is nice, but autocorrect is awful for IRC and
technical discussions. Needs a global switch.</p></li>
<li><p>Don&#8217;t show unread counts. Some channels are chatty and I&#8217;m just in them listening for my name.</p></li>
</ol>


<p>Here are the clients I&#8217;ve tried and why they aren&#8217;t quite perfect:</p>

<h2><a href="http://colloquy.info">Colloquy</a></h2>

<p>Colloquy is a nice full-featured open source client. I&#8217;ve used it the
most. However - it doesn&#8217;t show multiple channels in one window at the
same time, and doesn&#8217;t keep your place. I&#8217;ve had some problems with
reconnection, where I thought IRC was quiet when I was actually just
disconnected and didn&#8217;t know it.</p>

<p>I have to turn autocorrect off for each room I&#8217;m in, which I only
remember after the first time it really annoys me by mangling some
jargon.</p>

<p>There&#8217;s also some general buggy behavior, and I have a short list of
bugs I&#8217;d like to report someday, but I don&#8217;t have time to fix them.</p>

<p>Years ago I hacked my own version of a place marker that I liked, but
I can&#8217;t remember why it didn&#8217;t make it in, and of course the code is
lost now.</p>

<p>The backlog search looks like it should be powerful, but in my
experience it just doesn&#8217;t work - it never displays any results. I&#8217;m
not sure what the deal is there.</p>

<p>(As a side note, Colloquy&#8217;s iPhone app is the only iPhone IRC client
I&#8217;ve used. It seems to work fine, and I don&#8217;t use it enough to have
specific gripes. Just having to have IRC open on my phone is
guaranteed to annoy me more than the software itself could.)</p>

<h2><a href="http://www.emacswiki.org/ERC">Emacs ERC</a></h2>

<p>My current setup is just to run ERC in an emacs window alongside my
code editing.  This has super flexible window splitting and size
management and unbeatable search for your backlog, since it&#8217;s just
another emacs buffer. There&#8217;s another nice benefit - if you&#8217;re writing
about code, emacs&#8217; tab-completion for strings across all buffers means
that you can easily autocomplete SomeReallyLongFunctionName in
chats. This saves a lot of typing and cut n&#8217; pasting. When you do need
to cut n&#8217; paste, it&#8217;s nicer to do it between emacs buffers than
between apps.</p>

<p>The defaults are not ideal, as usual with emacs you need to dig around
to find a good setup.</p>

<p>There&#8217;s a module to colorize nicknames according to a hash of the
name, so it&#8217;s easier to tell people apart. Other clients have similar
features but I think I like emacs&#8217; the best for some reason - maybe
the palette is nicer.</p>

<p>There&#8217;s a module to mark your place that only works if you left the
cursor in the backlog, which is a little weird. It will highlight my
nick when mentioned, but not the whole line.</p>

<p>Since it&#8217;s open source, I have the same problem as Colloquy, it&#8217;s
hackable, but I don&#8217;t really have time for that. And emacs is fun to
hack on, so it&#8217;s a potentially dangerous time sink.</p>

<h2><a href="http://conceitedsoftware.com/products/linkinus">Linkinus</a></h2>

<p>This is a nice client with some minor flaws and a little flakiness. I
liked it but moved on because of minor annoyances.</p>

<p>It has a kind-of nifty &#8220;conversation tracking&#8221; feature that tries to
highlight messages in a back-and-forth when you hover over it with the
mouse (but only in the currently selected channel). It&#8217;s not really
that useful, but I think it could be if pushed further. I&#8217;d like to
see more clients try this kind of thing, since separating multiple
concurrent conversations is hard on IRC, and it can be hard to avoid
them.</p>

<p>Lets you display multiple channels in one window, but that needs some
improvement. There&#8217;s just one text-entry field so it&#8217;s easy to type
something to the wrong channel.</p>

<p>The split display has some issues. The split channel views don&#8217;t show
you the channel name anywhere, and in some cases don&#8217;t even show you
the channel topic, which may or may not be helpful anyway. So it can
take some effort to figure out what channel you&#8217;re looking at,
especially if there are many of the same people talking on two
channels.</p>

<p>It can save a set of channels as a group, but it doesn&#8217;t save the
relative sizes of the splits in the group, so if you want to flip
between groups, you&#8217;d better be OK with even splits.</p>

<p>Finally, it only supports vertical splits, so with more than two
channels, you just get a couple unreadably long lines per channel.</p>

<p>It has a very barebones backlog search, but it does work.</p>

<p>They&#8217;ve also clearly tried to re-design the account setup / prefs
experience, but I&#8217;m not a big fan of an inspector palette - I wanted
to compare settings between two servers and it will only show me one
at a time. This was also the biggest point of flakiness, where some
edits wouldn&#8217;t commit and I couldn&#8217;t tell if the settings were being
changed.</p>

<h2><a href="http://www.codeux.com/textual/">Textual</a></h2>

<p>Textual is an open-source app
<a href="http://github.com/Codeux/Textual">(github.com/Codeux/Textual)</a> that
is for sale on the Mac app store. This is an interesting approach that
I think has some merit - people may still contribute code or bug
fixes, but it&#8217;s also nice to know that if the app ever gets abandoned,
it could be resurrected. That said, I tried building from source to
enable a quick hack once but the master branch didn&#8217;t build for me, so
they&#8217;re not trying to make it easy.</p>

<p>It lets me hide some admin messages, has automatic &amp;
manual scrollback markers to keep track of what I&#8217;ve missed.</p>

<p>This has a setting to &#8220;Track conversations using nickname
highlighting&#8221; but I couldn&#8217;t really tell what it was doing.</p>

<p>This also has a pretty barebones search, but again, it works.</p>

<p>I tried this for a few days and liked it, but ultimately switched
away, I think mostly because you can&#8217;t display multiple channels -
there&#8217;s just one window and it doesn&#8217;t split up.</p>

<h2><a href="http://mediaware.sk/ware/?page_id=35">Mango</a></h2>

<p>I haven&#8217;t tried Mango. The screenshots in the App Store and feature
listings don&#8217;t lead me to believe that it&#8217;s anything significantly
different from the others. I&#8217;d be glad to hear from fans, though.</p>

<p>So, what do you use? Have I missed anything great?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[PyObjC and Twisted]]></title>
    <link href="http://michael-mccracken.net/2012/11/pyobjc-and-twisted/"/>
    <updated>2012-11-01T15:31:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/11/pyobjc-and-twisted</id>
    <content type="html"><![CDATA[<p>@inlineCallbacks doesn&#8217;t work in NSObject subclasses
- use old time deferreds if that&#8217;s palatable
- if not, set up &#8216;helper functions&#8217;</p>

<p>testing with twisted.trial and python-mock works fine</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[More out of date links]]></title>
    <link href="http://michael-mccracken.net/2012/10/selected-links/"/>
    <updated>2012-10-25T12:35:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/10/selected-links</id>
    <content type="html"><![CDATA[<ul>
<li><a href="http://hammerprinciple.com/therighttool">Programming Languages · Hammer Principle</a>
  Very interesting survey site to answer the question &#8220;what language is right for what task?&#8221;</li>
<li><a href="http://james-iry.blogspot.co.uk/2010/05/types-la-chart.html">One Div Zero: Types à la Chart</a>
  A chart of languages according to type power/safety. Seems reasonable. Made me curious about the ones in the top right.</li>
<li><a href="https://github.com/philsquared/Catch/wiki">Home · philsquared/Catch Wiki</a>
  C++ unit testing framework, all in headers, looks nice.</li>
<li><a href="http://ferd.ca/an-open-letter-to-the-erlang-beginner-or-onlooker.html">ferd.ca -> An Open Letter to the Erlang Beginner (or Onlooker)</a>
  Interesting, balanced article about what makes erlang nice.</li>
<li><p><a href="http://worrydream.com/oatmeal/blind.html">&#8220;Research is a blind date with knowledge.&#8221; worrydream.com/oatmeal/blind.…</a></p></li>
<li><p><a href="http://mail.python.org/pipermail/pypy-dev/2012-October/010602.html">Splitting RPython (the language) and PyPy (a python interpreter) plan: mail.python.org/pipermail/pypy…</a>
  Sounds interesting. I wonder if RPython will grow in popularity separately.</p></li>
<li><p><a href="http://saltandfat.com/post/33437971658">Double-corn tortillas</a>
  I&#8217;d love to try this sometime.</p></li>
<li><p><a href="https://github.com/clips/pattern">clips/pattern · GitHub</a>
  Web-mining in python. Lots of functionality here, BSD license.</p></li>
<li><p><a href="http://www.brainpickings.org/index.php/2012/06/12/the-art-of-coffee-1961/">The Art of Coffee: A Mad Men Era Short Film | Brain Pickings</a>
  I loved &#8220;This is Coffee!&#8221;. 12 minute promotional short film from 1961 about coffee. It&#8217;s wonderful to imagine the worn old mugs of my grandparents&#8217; generation new again, filled with something better than the electric-percolated canned junk I know they drank. Also great to see the Chemex in there, exactly the same as I use it today.</p></li>
<li><a href="http://worrydream.com/LearnableProgramming/">Learnable Programming</a>
  Very clear and well-argued essay about how to make a more-understandable programming environment. I agreed with everything, and was left wondering how to apply this line of thought to more complex software. (Everyone has seen this by the time I post this list.)</li>
<li><a href="http://robrohan.com/2009/09/14/objc-signaturevo/">@objc.signature(‘v@:@@o<sup>@’)</sup> | Times New Rohan</a>
  List of objc.signature codes</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links]]></title>
    <link href="http://michael-mccracken.net/2012/10/links/"/>
    <updated>2012-10-08T00:47:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/10/links</id>
    <content type="html"><![CDATA[<ul>
<li><p><a href="http://stackoverflow.com/questions/10857030/whats-so-bad-about-template-haskell">What&#8217;s so bad about Template Haskell? - Stack Overflow</a></p>

<p>  A bunch of good answers to why Template Haskell is occasionally maligned.</p></li>
<li><p><a href="http://stackoverflow.com/questions/10845179/which-haskell-ghc-extensions-should-users-use-avoid/10849782#10849782">Which Haskell (GHC) extensions should users use/avoid? - Stack Overflow</a></p>

<p>  Interesting list of aesthetic judgements of haskell extensions. At press time I don&#8217;t know what most of these words mean.</p></li>
<li><p><a href="http://www.yesodweb.com/blog/2011/04/yesod-template-haskell">Yesod and Template Haskell</a></p>

<p>  Short post on why Yesod uses template haskell (which has a bad rep)</p></li>
<li><p><a href="http://imakewebthings.com/deck.js/">deck.js » Modern HTML Presentations</a></p>

<p>  Best &#8220;Write your presentations in HTML&#8221; thing I&#8217;ve seen yet, although I&#8217;m not sure how great it&#8217;d be at complex visuals or builds. Yes sometimes builds are good! <em>SOMETIMES</em>.</p></li>
<li><p><a href="http://redbot.org/">REDbot</a></p>

<p>  RED is a robot that checks HTTP resources to see how they&#8217;ll behave, pointing out common problems and suggesting improvements. Although it is not a HTTP conformance tester, it can find a number of HTTP-related issues.</p></li>
<li><p><a href="https://github.com/visi-lang/visi">.@dpp’s Visi looks to be exactly the thing when Soulver isn’t enough and spreadsheets are rigid github.com/visi-lang/visi #emerginglangs</a></p>

<p>  Should I look at this before posting a link? Nah&#8230; But I will look at it, eventually! It looks interesting, I love this kind of stuff - although as usual I wonder if this is something you can already get in Mathematica but no one knows because it&#8217;s so expensive.</p></li>
<li><p><a href="http://highscalability.com/blog/2012/7/30/prismatic-architecture-using-machine-learning-on-social-netw.html">High Scalability - Prismatic Architecture - Using Machine Learning on Social Networks to Figure Out What You Should Read on the Web </a></p>

<p>  Probably interesting? I skimmed this, I&#8217;m not gonna lie, I don&#8217;t remember much.</p></li>
<li><p><a href="http://deslide.clusterfake.net/">Deslidefied HTML</a></p>

<p>  Really useful bookmark to make slideshow news articles readable on one page. I am using it all the time!</p></li>
<li><p><a href="http://pragprog.com/magazines/2012-09/thinking-functionally-with-haskell">Thinking Functionally with Haskell</a></p>

<p>  &#8220;&#8221;In which we explore what modern type systems bring to the table. Imagine an approach to programming where you write down some description of what your code should do, then before running your code you run some automatic tool to see if the code matches the description. That’s Test-driven development, you say!  Actually, this is what you are doing when you use static types in most languages too. Types are a description of the code’s inputs and outputs, and the check ensures that inputs and outputs match up and are used consistently. Modern type systems—such as in Haskell or above—are very flexible, and allow these descriptions to be quite detailed; plus they are not too obtrusive in use and often very helpful.  One point I’ll investigate here is how advances in types are converging with new ideas on testing, to the point where (I claim) the old distinctions are starting to blur and starting to open up exciting new possibilities—hence my suggestion that we need a new word to describe what we’re doing that is free from preconceptions and out-dated thinking.  So put aside your bad experiences from Java, and prepare to be amazed! &#8220;&#8221;</p></li>
<li><p><a href="http://feedproxy.google.com/~r/ezyang/~3/3Vb6-OhkZws/">So you want to hack on IMAP…</a></p>

<p>  &#8220;Well, first off, you’re horribly misinformed: you do not actually want to hack on IMAP.&#8221; (I agree, IMAP bad.)</p></li>
<li><p><a href="http://waxy.org/2008/06/the_machine_that_changed_the_world/">The Machine That Changed the World: Great Brains - Waxy.org</a></p>

<p>  Documentary about computing history:
  &#8220;It&#8217;s a whirlwind tour of computing before the Web, with brilliant archival footage and interviews with key players — several of whom passed away since the filming. Jointly produced by WGBH Boston and the BBC, it originally aired in the UK as The Dream Machine before its U.S. premiere in January 1992. Its broadcast was accompanied by a book co-written by the documentary&#8217;s producer Jon Palfreman.&#8221;</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A Testing Story]]></title>
    <link href="http://michael-mccracken.net/2012/10/a-testing-story/"/>
    <updated>2012-10-03T11:37:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/10/a-testing-story</id>
    <content type="html"><![CDATA[<p>Tests are great! This year I&#8217;ve started working on a codebase with a
significant unit test suite for the first time in a while, and good
coverage has definitely come in handy. Now I&#8217;m going to share a
story where a single test did double duty.</p>

<p>Our filesystem events listening daemon was crashing occasionally on my
system, and I didn&#8217;t know how to reproduce it. No one else seemed to
be getting these crashes, either. The system was saving a backtrace,
and it was always the same, but I wasn&#8217;t sure I believed its line
numbers. As a start, I made a guess at the lines that were really
failing, and added a ton of debug dumps to inspect the state. (Since
this daemon is run as root using launchd, it&#8217;s still easiest to just
use the old printf-n&#8217;-stare debug method.)</p>

<p>Then I tried a lot of stuff to poke at it, even leaving Spotify on
overnight in an attempt to recreate the conditions of the bug. No
luck. It seemed like it would only crash when I wasn&#8217;t trying to get
it to crash - pretty frustrating.</p>

<p>I finally found it, but only after giving up for a while. I checked in
again after working for a while on another project, and hey, lots of
new crashes! With all my extra debug info, I could see what was going
on - a string that couldn&#8217;t be encoded in UTF-8 was being handled by
some code that assumed it could be. It was a filesystem path with
invalid characters.</p>

<p>What was the path that was killing my daemon? It was a temp file written
by the test suite for the other project. It was a non-utf8 path,
written to test the unicode handling of the GUI, and it had the
wonderful (in retrospect) side effect of poking a bug in the daemon
too. It&#8217;s so satisfying when you find a bug&#8217;s cause and it completely explains all the symptoms you were seeing.</p>

<p>One test exercising the unicode handling of multiple projects, now that&#8217;s coverage!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[disposable]]></title>
    <link href="http://michael-mccracken.net/2012/09/disposable/"/>
    <updated>2012-09-06T08:17:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/09/disposable</id>
    <content type="html"><![CDATA[<p>Computing gadgets don&#8217;t last long enough. I wanted to write a lot
about this, but since I don&#8217;t have good answers, I figured I might as
well just pose some questions.</p>

<p>All the time, we&#8217;re throwing out something that still works,
because there&#8217;s something new that works better.</p>

<p>Working better is great! Faster chips and better screens and cameras
make our lives easier and help us make cool new stuff.</p>

<p>I used to work near people designing processors, so I know it&#8217;s plenty
hard just to keep that part of the system progressing. And I know that
newer stuff will use less energy, which is great. I know that people
designing data centers think hard about their efficiency, and upgrade
ruthlessly to improve it.</p>

<p>But how carefully are we considering the impact of getting rid of all
that old equipment? How do we compare whether it&#8217;s really, globally,
ethically, better to improve speed &amp; efficiency vs. just keep using
old stuff? How do we factor in things like
<a href="http://en.wikipedia.org/wiki/Coltan_mining_and_ethics">resources mined in conflict zones</a>?</p>

<p>I recently remodeled a house, and among all the advice I read, I
remember this best: &#8220;The greenest building material is the one that&#8217;s
already there.&#8221; (It was about floors. We put in new bamboo
anyway. That old parquet was awful, but I hope the new stuff stays
there for a hundred years or more.)</p>

<p>I know that designing e.g., a great modern smartphone, is extremely
difficult, even &#8216;only&#8217; considering functionality, space and power
constraints. Designing something that small and integrated that could
still be upgraded partially, keeping around parts that still work,
sounds near impossible, but wouldn&#8217;t it be great? It sounds like a fun
challenge.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA['Editor Wars']]></title>
    <link href="http://michael-mccracken.net/2012/08/editor-wars/"/>
    <updated>2012-08-16T23:44:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/08/editor-wars</id>
    <content type="html"><![CDATA[<p>An idea I&#8217;d like to see: Editor Wars, the game of hacking at code.</p>

<p>Hackers compete on how fast they can complete code editing tasks from
a variety of languages, with results plotted and dissected on a
web leaderboard. The idea is not to evaluate language understanding or
design, but simply editing skill and speed in the kind of thing that
editor flame wars start over.</p>

<p>The tasks could be simple refactorings, like renaming a function
throughout a source tree, or extracting code into a method. I&#8217;d expect
this would show advantages of specialized refactoring tools in some
IDEs. Other tasks might be more complex, like writing a new set of
functions, a whole class, or adding functions to a class to conform to
a protocol or interface. Good template support and autocomplete might
be an advantage here. Or maybe you want to add conditional debug
logging around a set of functions, with each call having a separate
hardcoded counter value? Surely powerful macros win this task?
Naturally, new tasks could be submitted by the public, and voted on.
Each task would have a &#8220;correct&#8221; answer, but if you&#8217;re really clever
you could always suggest a better correct answer.</p>

<p>Use of extensions and custom macros would be happily encouraged, as
long as you can share what you&#8217;ve used.</p>

<p>You&#8217;d need either an editor plugin or at least something that watches
files efficiently to get the split-second timing your contestants will
demand. Ideally you&#8217;d be able to record keystrokes and grab the source
for any macros you call, then the site would be able to show a replay
for the viewing public.</p>

<p>It&#8217;d be fascinating to learn how other people use your favorite editor
by watching the best of the best compete. Not to mention, just imagine
the forum threads arguing over the graphs from the vast database of
editor timings.</p>

<p>Anyone want to build this?</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Selected Links from this April]]></title>
    <link href="http://michael-mccracken.net/2012/08/selected-links-from-this-summer/"/>
    <updated>2012-08-15T15:06:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/08/selected-links-from-this-summer</id>
    <content type="html"><![CDATA[<p>Since my new blogging setup doesn&#8217;t automatically pull pinboard links
into summary posts like before, I&#8217;m going to run through my bookmarks
manually. Sound like fun? Let&#8217;s go:</p>

<ul>
<li><a href="http://ivory.idyll.org/blog/apr-12/replication-i">Our approach to replication in computational science</a> - &#8220;bioinformatician makes code and all analyses available. very admirable, and yet a little worrying that this is so rare. It is also rare in computer science, where it is arguably easier to share.&#8221;</li>
<li><a href="http://www.modsquadhockey.com/forums/">ModSquadHockey Forums</a> - good reviews of equipment with painful forum UI. BTW, yes, a Bauer Concept II full shield will definitely fit a Stealth S19 (2010 model) helmet. You&#8217;re welcome.</li>
<li><a href="http://www.hockeymonkey.com/helmet-compatibility-charts.html">Hockey Helmet Cage/Visor Compatibility Charts</a> - really useful, but sadly not fully complete. An impossible task.</li>
<li><a href="http://www.inference.phy.cam.ac.uk/opengazer/">Opengazer: open source gaze tracker for ordinary webcams</a> - Presented without comment. Have you used this?</li>
<li><a href="https://storm.canonical.com/">Storm Python ORM</a> - Python ORM from Canonical, used in launchpad.</li>
<li><a href="http://radar.oreilly.com/2012/04/great-machine-learning-products.html">What it takes to build great machine learning products</a> - I think the answer was careful definition of the problem domain?</li>
<li><a href="http://news.ycombinator.com/item?id=3851691">A calculator that only shows the answer after you give a suitable estimate</a> - Really cool idea. The magic is in how to adjust the tolerance so it seems fair. Linked to the HN post because the comments are so polarized - it&#8217;s interesting to swatch people violently miss the point.</li>
<li><a href="http://www.gnu.org/software/parallel/">GNU Parallel</a> - Well if you don&#8217;t know, now you know: &#8220;GNU parallel is a shell tool for executing jobs in parallel using one or more computers.&#8221; Super useful. You don&#8217;t have to use GNU parallel if you like something else that&#8217;s similar, but you should probably know at least one tool for this stuff.</li>
<li><a href="http://do.cooperteam.net/">GNOME + Do</a> - quicksilver for gnome. I left out the part in the page title that says &#8220;Crazy Delicious&#8221; because come on, people. These are computers.</li>
<li><a href="http://openendedgroup.com/field/">Field visualization software</a> - &#8220;An environment for writing code to rapidly and experimentally assemble and explore algorithmic systems&#8221; - A really fascinating project. It looks like big ball of squeak, python, and processing that Bret Victor rolled up. I wanted to try it out in April but haven&#8217;t had a chance.</li>
<li><a href="http://circa-lang.org/about/introduction.html">circa</a> - A programming language that lets you manipulate the AST and do round trips. I forget what I meant by that exactly. I also wrote that &#8216;state is first class&#8217;. You&#8217;d better go look at the page if that sounds interesting. Don&#8217;t ask me!</li>
</ul>


<p>That&#8217;s it for April. Look for May&#8217;s bookmarks sometime in 2014.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[My last wordpress upgrade]]></title>
    <link href="http://michael-mccracken.net/2012/08/no-more-wordpress/"/>
    <updated>2012-08-15T08:21:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/08/no-more-wordpress</id>
    <content type="html"><![CDATA[<p>My last wordpress upgrade was a long time ago, and it&#8217;s going to stay that way.</p>

<p>These posts about blogging are really only interesting years later,
and only to me, when I look back and think about what I was doing that
I thought I had time to mess with blogging software.</p>

<p><a href="http://michael-mccracken.net/blog/2005/12/25/test-wordpress/">Last time</a> I made a major change was switching to wordpress from
blosxom back in December 2005, over Christmas break. I was at my
parents&#8217; house and had nothing to do after everyone went to bed at 9pm.</p>

<p>These days I can&#8217;t remember the feeling of having nothing to do, but I
went ahead and switched things up anyway, exactly because I don&#8217;t have
time to mess with things like upgrading wordpress.</p>

<p>So I&#8217;m going with octopress on github user pages. I like generating a
static site from text files, and github pages are sort of convenient. (sort of)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: Hacking, Music in Python, Rust & unitasking]]></title>
    <link href="http://michael-mccracken.net/2012/04/links-hacking-music-in-python-rust-unitaskimg/"/>
    <updated>2012-04-11T09:15:15-07:00</updated>
    <id>http://michael-mccracken.net/2012/04/links-hacking-music-in-python-rust-unitaskimg</id>
    <content type="html"><![CDATA[<p>My shared links for April 5th through April 6th:</p>

<ul>
<li><p><a href="http://lemire.me/blog/archives/2011/06/06/why-i-still-program/">Why I still program</a> - &#8220;I believe that the rejection of programming as a lower activity can be explained by the Theory of the leisure class. In effect, we do not seek utility but prestige. There is no prestige in tool-making, cooking or farming. To maximize your prestige, you must rise up to the leisure class: you work must not be immediately useful.&#8221;</p></li>
<li><p><a href="http://lemire.me/blog/archives/2012/03/20/from-counting-citations-to-measuring-usage-help-needed/">From counting citations to measuring usage (help needed!)</a> - Building a Better Citation Index</p></li>
<li><p><a href="http://mailplaneapp.com/blog/entry/workhacks.com_top_3_gmail_management_apps_for_mac">workhacks.com: Top 3 Gmail Management Apps for Mac - Mailplane Blog</a> - includes a list of gmail plugins that look useful</p></li>
<li><p><a href="http://prezjordan.github.com/Melopy/">Melopy</a> -
<code>  <br/>
"""</p>

<blockquote><blockquote><blockquote><p>from melopy import Melopy
m = Melopy('mysong')
m.add_quarter_note('A4')
m.add_quarter_note('C#5')
m.add_quarter_note('E5')
m.render()
[==================================================] 100%
Done
"""
</code></p></blockquote></blockquote></blockquote></li>
<li><p><a href="http://doc.rust-lang.org/doc/tutorial.html#expression-syntax">Rust Language Tutorial: Expression Syntax</a> - Starts out good, but the &#8220;leave out a semicolon to return a value&#8221; leaves a bad taste. Why overload semicolons like that? Why not just use &#8216;ret&#8217;?</p></li>
<li><p><a href="http://www.deliberatism.com/blog/forget-self-improvement/">Forget Self-Improvement</a> -</p></li>
<li><p><a href="http://blogs.hbr.org/schwartz/2012/03/the-magic-of-doing-one-thing-a.html">The Magic of Doing One Thing at a Time - Tony Schwartz - Harvard Business Review</a> - A few good points on avoiding multitasking burnout. Nothing too new, but maybe if people keep repeating it in places like HBR, then it&#8217;ll start to become conventional business wisdom?</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: Flattr, Haskell, Haskell QuickCheck, and Stuart Cheshire (of Bolo fame)]]></title>
    <link href="http://michael-mccracken.net/2012/04/links-flattr-haskell-haskell-quickcheck-and-stuart-cheshire-of-bolo-fame/"/>
    <updated>2012-04-06T09:20:31-07:00</updated>
    <id>http://michael-mccracken.net/2012/04/links-flattr-haskell-haskell-quickcheck-and-stuart-cheshire-of-bolo-fame</id>
    <content type="html"><![CDATA[<p>My shared links for April 4th:</p>

<ul>
<li><p><a href="http://www.stuartcheshire.org/rants/Networkdynamics.html">Stuart&#8217;s &#8220;Law of Networkdynamics&#8221;</a> -</p></li>
<li><p><a href="https://flattr.com/">Flattr - Social micropayments</a> - An interesting model that I hadn&#8217;t heard of. You set a monthly amount to spend and when you see a flattr button, you click on it. They then divide your monthly amount among the people you clicked on that month.</p></li>
</ul>


<p>Sounds great but I have never seen a button, unless it&#8217;s been hidden among many other warts.</p>

<ul>
<li><p><a href="http://bos.github.com/strange-loop-2011/slides/slides.html#(1">Haskell: Functional Programming, Solid Code, Big Data (1)</a>) - Bryan O&#8217;Sullivan&#8217;s Haskell tutorial from Strange Loop 2011</p></li>
<li><p><a href="http://www.yellosoft.us/quickcheck">QuickCheck | YELLOSOFT</a> - Lots of ports of QuickCheck</p></li>
<li><p><a href="http://dan.bravender.us/2009/6/21/Simple_Quickcheck_implementation_for_Python.html">Simple Quickcheck implementation for Python</a> - Random test generation that is not as nice as Haskell&#8217;s quickcheck but will do the job.</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: Haskell, Music OCD Tools, Terrorism, Probability for Ranking things]]></title>
    <link href="http://michael-mccracken.net/2012/04/links-haskell-music-ocd-tools-terrorism-probability-for-ranking-things/"/>
    <updated>2012-04-06T09:16:32-07:00</updated>
    <id>http://michael-mccracken.net/2012/04/links-haskell-music-ocd-tools-terrorism-probability-for-ranking-things</id>
    <content type="html"><![CDATA[<p>My shared links for March 30th through April 3rd:</p>

<ul>
<li><p><a href="http://magicmaps.evanmiller.org/">Magic Maps: Now You See It.</a> - Very cool app for working with maps and time series data</p></li>
<li><p><a href="http://evanmiller.org/how-not-to-sort-by-average-rating.html">How Not To Sort By Average Rating</a> - Shows the best way to sort by positive/negative rankings that is robust to small sample sizes</p></li>
<li><p><a href="http://m.foreignaffairs.com/articles/66186/john-mueller-and-mark-g-stewart/hardly-existential">terrorism hardly existential threat. 2010</a> -</p></li>
<li><p><a href="http://mailplaneapp.com/blog/entry/workhacks.com_top_3_gmail_management_apps_for_mac/#When:12:06:06Z">workhacks.com: Top 3 Gmail Management Apps for Mac</a> includes a list of gmail plugins that look useful</p></li>
<li><p><a href="http://www.yesodweb.com/">Yesod Web Framework for Haskell</a> -</p></li>
<li><p><a href="http://beets.radbox.org/">beets: the music geek&#8217;s media organizer</a> - The purpose of beets is to get your music collection right once and for all. It catalogs your collection, automatically improving its metadata as it goes using the MusicBrainz database. (It also downloads cover art for albums it imports.) Then it provides a bouquet of tools for manipulating and accessing your music.</p></li>
</ul>


<p>Because beets is designed as a library, it can do almost anything you can imagine for your music collection. Via plugins, beets becomes a panacea:</p>

<p>Embed and extract album art from files&#8217; tags.
Listen to your library with a music player that speaks the MPD protocol and works with a staggering variety of interfaces.
Fetch lyrics for all your songs from databases on the Web.
Manage your MusicBrainz music collection.
Analyze music files&#8217; metadata from the command line.
Clean up crufty tags left behind by other, less-awesome tools.
Browse your music library graphically through a Web browser and play it in any browser that supports HTML5 Audio.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Canonical design blog on Holistic UI]]></title>
    <link href="http://michael-mccracken.net/2012/03/canonical-design-blog-on-where-small-pieces-loosely-joined-needs-some-tweaking/"/>
    <updated>2012-03-30T05:29:00-07:00</updated>
    <id>http://michael-mccracken.net/2012/03/canonical-design-blog-on-where-small-pieces-loosely-joined-needs-some-tweaking</id>
    <content type="html"><![CDATA[<p><a href="http://design.canonical.com/2012/03/holistic-ui-is-smarter-ux/">Holistic UI is smarter UX</a> - They use notifications as an example of why small pieces loosely joined might not be great UI. It&#8217;s really interesting to see how common UI devices such as notifications have evolved across various platforms. Someone should do a gallery of notifications over the years - bonus points if you start with a ␇!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links for mid-March see scalable python around corners. And Future Spies on Facebook!]]></title>
    <link href="http://michael-mccracken.net/2012/03/links-for-mid-march-see-scalable-python-around-corners-and-future-spies-on-facebook/"/>
    <updated>2012-03-30T05:20:56-07:00</updated>
    <id>http://michael-mccracken.net/2012/03/links-for-mid-march-see-scalable-python-around-corners-and-future-spies-on-facebook</id>
    <content type="html"><![CDATA[<p>My shared links for March 18th through March 26th:</p>

<ul>
<li><p><a href="http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html">7 Years of YouTube Scalability Lessons in 30 Minutes</a> - Notes from a PyCon talk about the very pragmatic design philosophy at YouTube.</p></li>
<li><p><a href="https://github.com/bkad/discoball">bkad/discoball * GitHub</a> - shell tool to match and colorize lines of text</p></li>
<li><p><a href="http://pragprog.com/book/kcdc/the-developer-s-code">The Pragmatic Bookshelf | The Developer&#8217;s Code</a> -</p></li>
<li><p><a href="http://www.nature.com/news/how-to-see-around-corners-1.10258">How to see around corners : Nature News &amp; Comment</a> - And we thought the future was flying cars.</p></li>
<li><p><a href="http://www.theregister.co.uk/2012/03/19/cia_internet_of_things/page2.html">ARM&#8217;s ultra-low-power fridge-puter chips: Just what the CIA ordered • The Register</a> - Out of context interesting quote: &#8220;The spy boss was chiefly concerned with the huge amounts of data that can be collected from American citizens who intend to become CIA agents - in an age when parents set up Twitter and Tumblr accounts for their newborns, managing the identities of future operatives suddenly becomes non-trivial.&#8221;</p></li>
<li><p><a href="http://reprog.wordpress.com/2012/02/27/who-needs-access-you-need-access/">Who needs access? You need access!</a> - new site about open access to research aimed at lay people (I think)</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: JS, LaTeX, Live drawing and sound.]]></title>
    <link href="http://michael-mccracken.net/2012/03/links-js-latex-live-drawing-and-sound/"/>
    <updated>2012-03-19T07:29:25-07:00</updated>
    <id>http://michael-mccracken.net/2012/03/links-js-latex-live-drawing-and-sound</id>
    <content type="html"><![CDATA[<p>My shared links for March 5th through March 17th:</p>

<ul>
<li><p><a href="http://codemirror.net/">CodeMirror</a> - &#8220;CodeMirror is a JavaScript library that can be used to create a relatively pleasant editor interface for code-like content ― computer programs, HTML markup, and similar. If a mode has been written for the language you are editing, the code will be coloured, and the editor will optionally help you with indentation.&#8221;</p></li>
<li><p><a href="http://tacosw.com/latexian/">Latexian: A LaTeX Editor for Mac OS X</a> - Nice looking latex editor with live preview.</p></li>
</ul>


<p>10.6 or higher so I can&#8217;t try it just now.</p>

<ul>
<li><p><a href="http://www.youtube.com/watch?v=JupqhcT4ONY">Core Graphics live - YouTube</a> - Demo of live-preview graphics drawing tool</p></li>
<li><p><a href="http://drc-fir.sourceforge.net/">DRC: Digital Room Correction</a> - &#8220;RC is a program used to generate correction filters for acoustic compensation of HiFi and audio systems in general, including listening room compensation. DRC generates just the FIR correction filters, which can be used with a real time or offline convolver to provide real time or offline correction. DRC doesn&#8217;t provide convolution features, and provides only some simplified, although really accurate, measuring tools.&#8221;</p></li>
<li><p><a href="https://github.com/shoaibkamil/asp/wiki">ASP: A SEJITS Implementation for Python * shoaibkamil/asp Wiki * GitHub</a> -</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: More PyPy, Academia, Censorship we Love, and Monads]]></title>
    <link href="http://michael-mccracken.net/2012/03/more-pypy-academia-censorship-we-love-and-monads/"/>
    <updated>2012-03-06T03:39:03-08:00</updated>
    <id>http://michael-mccracken.net/2012/03/more-pypy-academia-censorship-we-love-and-monads</id>
    <content type="html"><![CDATA[<p>My shared links for March 1st through March 5th:</p>

<ul>
<li><p><a href="http://stackoverflow.com/questions/8452396/does-pypy-translate-itself/8569919#8569919">python - Does PyPY translate itself? - Stack Overflow</a> - An informative answer about how PyPy works</p></li>
<li><p><a href="http://lars.com/2011/01/08/on-reviewing-research-papers/">On reviewing research papers « Lars Bergstrom</a> - So, PL has a culture of really useful reviews, huh?</p></li>
<li><p><a href="http://www.paulgraham.com/love.html">How to Do What You Love</a> - &#8220;If you think something&#8217;s supposed to hurt, you&#8217;re less likely to notice if you&#8217;re doing it wrong. That about sums up my experience of graduate school.&#8221;</p></li>
</ul>


<p>Boom!</p>

<ul>
<li><p><a href="http://www.themillions.com/2012/03/ban-this-book-an-uncensored-look-at-the-lorax-and-other-dangerous-books.html">The Millions : Ban This Book: An Uncensored Look At The Lorax And Other Dangerous Books</a> -</p></li>
<li><p><a href="http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html">A Neighborhood of Infinity: You Could Have Invented Monads! (And Maybe You Already Have.)</a> - A practical way of thinking about monads.</p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Links: Structure editing, Unix History, OSS Legal Issues Primer]]></title>
    <link href="http://michael-mccracken.net/2012/03/links-structure-editing-unix-history-oss-legal-issues-primer/"/>
    <updated>2012-03-01T04:53:14-08:00</updated>
    <id>http://michael-mccracken.net/2012/03/links-structure-editing-unix-history-oss-legal-issues-primer</id>
    <content type="html"><![CDATA[<p>My shared links for February 27th through March 1st:</p>

<ul>
<li><p><a href="http://news.ycombinator.com/item?id=3649518">Pretty Lisp | Hacker News</a> I don&#8217;t like this. Great comment thread though - lots of people agree with me. I think maybe enthusiasm for structure editors is a sign of youthful optimism and inexperience.</p></li>
<li><p><a href="http://interviews.slashdot.org/story/04/10/18/1153211/rob-pike-responds">2004 Rob Pike Q&amp;A Interview - Slashdot</a> - &#8220;(And speaking of Doug, he&#8217;s the unsung hero of Unix. He was manager of the group that produced it and a huge creative force in the group, but he&#8217;s almost unknown in the Unix community. He invented a couple of things you might have heard of: pipes and - get this - macros. Well, someone had to do it and that someone was Doug. As Ken once said when we were talking one day in the Unix room, &#8220;There&#8217;s no one smarter than Doug.&#8221;)
&#8221;</p></li>
<li><p><a href="http://news.ycombinator.com/item?id=3638045">How To Build a Naive Bayes Classifier | Hacker News</a> - Useful comment thread about building naive bayes classifiers</p></li>
<li><p><a href="http://www.softwarefreedom.org/resources/2008/foss-primer.html#x1-130002.5">A Legal Issues Primer for Open Source and Free Software Projects - Software Freedom Law Center</a> -</p></li>
</ul>

]]></content>
  </entry>
  
</feed>
