<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.emmettshear.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Optimize Prime</title>
  <link>http://blog.emmettshear.com/</link>
  <description></description>
  <language>en</language>
  <pubDate>Sun, 24 Aug 2008 20:34:40 -0400</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Shortest parser</title>
    <link>http://blog.emmettshear.com/post/2008/08/23/Shortest-parser</link>
    <guid isPermaLink="false">urn:md5:35e89638bfec015e9a0fc132076e1ae0</guid>
    <pubDate>Sat, 23 Aug 2008 18:03:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;We have a programming problem we give out at Justin.tv: write a parser to
convert arithmetic expressions from infix to prefix (should deal with parens
and arbitrary variable names). I wrote a version when I first came up with the
problem, but I've lost it. So I thought I'd try writing it again and see how
short I could get it.&lt;/p&gt;
&lt;pre&gt;
# parse simple (no parens) arithmetic expressions =&amp;gt; prefix expressions
def parse_simple(expr, opers=%w(+ - * /))
  return expr if opers.empty? 
  return parse_simple(expr, opers[1..-1]) unless expr.include?(opers.first)
  &amp;quot;(#{opers.first} &amp;quot; + 
  expr.split(opers.first).map {|sub_expr| parse_simple(sub_expr, opers[1..-1]).strip}.join(&amp;quot; &amp;quot;) +
   &amp;quot;)&amp;quot;
end

# remove parens, then parse simple
def parse(expr, exprs = [])
  while expr.gsub!(/\(([^\(\)]+)\)/) {&amp;quot;expr:#{(exprs &amp;lt;&amp;lt; parse_simple($1)).size - 1}&amp;quot;}; end
  expr = parse_simple(expr)
  while expr.gsub!(/expr:(\d+)/) {exprs[$1.to_i]}; end
  expr
end
&lt;/pre&gt;
&lt;p&gt;I'm fairly satisfied with it; you could remove some lines through stupid
ruby tricks, but I don't see any more concise way to do it. I'd love to see
your stab at it though - how short can you get it? Language of choice.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2008/08/23/Shortest-parser#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2008/08/23/Shortest-parser#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/270619</wfw:commentRss>
      </item>
    
  <item>
    <title>Don't use Pound for load balancing</title>
    <link>http://blog.emmettshear.com/post/2008/03/03/Dont-use-Pound-for-load-balancing</link>
    <guid isPermaLink="false">urn:md5:c7ac2e0b999a1838822736b070d94e55</guid>
    <pubDate>Mon, 03 Mar 2008 18:35:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;We were using &lt;a href=&quot;http://www.apsis.ch/pound/&quot; hreflang=&quot;en&quot;&gt;Pound&lt;/a&gt;
for load balancing at Justin.tv until today. It was consistently using about
20% CPU, and during spikes would use up to 80% CPU. Under extremely high load,
it would occasionally freak out and break.&lt;/p&gt;
&lt;p&gt;We just switched to &lt;a href=&quot;http://nginx.net/&quot; hreflang=&quot;en&quot;&gt;Ngnix&lt;/a&gt;, and
load immediately dropped to around 3% CPU. Our pages feel a little snappier,
although that might be my imagination. Not only is the config format easier to
understand and better documented, but it offers a full webserver's complement
of functionality. We haven't hit any spikes yet, but given the current
performance I suspect it will cream pound.&lt;/p&gt;
&lt;p&gt;In short: Pound is out-dated. Nginx is a good replacement, although there
are &lt;a href=&quot;http://www.danga.com/perlbal/&quot; hreflang=&quot;en&quot;&gt;many&lt;/a&gt;, &lt;a href=&quot;http://www.linuxvirtualserver.org/&quot; hreflang=&quot;en&quot;&gt;many&lt;/a&gt;, &lt;a href=&quot;http://haproxy.1wt.eu/&quot; hreflang=&quot;en&quot;&gt;many&lt;/a&gt; other options I haven't
tried.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/nginx_vs_pound.jpg&quot; alt=&quot;Nginx vs. Pound&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Edit: More data now available!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/Picture_2.png&quot; alt=&quot;Week view on Pound vs. Ngnix&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2008/03/03/Dont-use-Pound-for-load-balancing#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2008/03/03/Dont-use-Pound-for-load-balancing#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/216460</wfw:commentRss>
      </item>
    
  <item>
    <title>The next tinyurl</title>
    <link>http://blog.emmettshear.com/post/2008/03/01/The-next-tinyurl</link>
    <guid isPermaLink="false">urn:md5:f95500457738e42a5497b0ee9be53d9f</guid>
    <pubDate>Sat, 01 Mar 2008 03:40:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;Tinyurl seems like a ridiculous idea for a website. The service is so simple
that any competent hacker I know could write the central feature in under half
an hour. It's not even original, in the sense that hashing long keys to short
keys is one of the oldest tricks in computer science.&lt;/p&gt;
&lt;p&gt;Yet writing it as a web service was original: Tinyurl is an Alexa top-1000
site. That's more traffic and usage than 90% of the startups I've met have (or
will probably ever have). Not bad for what couldn't have been more than an
afternoon's work. I don't believe it's the only simple utility that should
exist, and yet currently doesn't. It opens up the tantalizing possibility that
the right little hack could be used by millions of people.&lt;/p&gt;
&lt;p&gt;The best idea in this vein I've had so far applies the tinyurl concept to
the page itself. Most pages on the internet consist of a tiny patch of content,
surrounded by acres of ancillary and mostly unnecessary wrapping. Given a url,
the utility returns an embed for the actual content portion; the way this works
on YouTube, Alexa, Flickr, or Justin.tv(1) should be obvious. I can imagine
using this kind of a utility in several contexts in Justin.tv, and obviously it
would quickly become a favorite with linkjackers everywhere (2).&lt;/p&gt;
&lt;p&gt;Unfortunately, unlike tinyurl, this project would probably take a week to do
right, and I don't really have the time right now. So I doubt I'll get around
to writing this, but I hope someone else does. Let me know how it goes, so I
can claim credit for all your hard work.&lt;/p&gt;
&lt;p&gt;1. Sorry for the plug. &lt;a href=&quot;http://blog.emmettshear.com/post/2008/03/01/2&quot; title=&quot;2&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. As tinyurl is the friend of the shock-site trickster.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2008/03/01/The-next-tinyurl#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2008/03/01/The-next-tinyurl#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/215597</wfw:commentRss>
      </item>
    
  <item>
    <title>Insecure By Default</title>
    <link>http://blog.emmettshear.com/post/2007/08/22/Insecure-By-Default</link>
    <guid isPermaLink="false">urn:md5:a149d4144516ad4d561ecff767dfe322</guid>
    <pubDate>Wed, 22 Aug 2007 19:47:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;I never really paid much attention to the administration of SSH on my boxes.
I figured debian probably set it up to be essentially secure by default.&lt;/p&gt;
&lt;p&gt;While the algorithm is perfectly secure, there's a big problem. I was poking
around my system logs after reading an article about someone else's box being
compromised, and discovered multiple ip addresses trying to root passwords.
Now, we have root login disabled on our boxes. But the fact that someone could
just sit there guessing disturbed me greatly. What if someone actually wanted
to break into our boxes? It's not like our usernames are highly obfuscated.&lt;/p&gt;
&lt;p&gt;Turns out there's an easy solution:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ sudo apt-get install denyhosts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Denyhosts blocks (temporarily) anyone who makes a sufficient number of
failed login attempts. Why this behavior is not default, I am very unclear.
Just whitelist your own ip to make sure you don't lock yourself out:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ nano WORK_DIR/allowed-hosts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(look up the WORK_DIR in denyhosts.conf)&lt;/p&gt;
&lt;p&gt;When I installed denyhosts it instantly locked out 4 people who were
*currently* trying to crack our network. If you haven't considered installing
it yourself, perhaps you should.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2007/08/22/Insecure-By-Default#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2007/08/22/Insecure-By-Default#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/148872</wfw:commentRss>
      </item>
    
  <item>
    <title>Google Ownz Me</title>
    <link>http://blog.emmettshear.com/post/2007/04/09/Google-Ownz-Me</link>
    <guid isPermaLink="false">urn:md5:8970081b1e1e9aaa6bad6757872b6dd2</guid>
    <pubDate>Mon, 09 Apr 2007 16:04:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;Apparently I've been using my gmail account too much:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/Picture_5.png&quot; alt=&quot;Sector 6&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I'm not using anything like GmailFS...I'm not even close to filling up my
gmail account. I wonder what I did to trigger this?&lt;/p&gt;
&lt;p&gt;If someone at Google reads this - FIX MY EMAIL.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2007/04/09/Google-Ownz-Me#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2007/04/09/Google-Ownz-Me#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/96733</wfw:commentRss>
      </item>
    
  <item>
    <title>Oh the things that you'll see</title>
    <link>http://blog.emmettshear.com/post/2007/03/06/Oh-the-things-that-youll-see</link>
    <guid isPermaLink="false">urn:md5:fbe800ce3dce0b22b42856d04678874e</guid>
    <pubDate>Tue, 06 Mar 2007 00:31:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    I've wound up hacking a lot of Flash recently, which is a real PITA if you're
used to real development environments. For one thing, there's no way to get
debug output from a flash widget once it's been embedded in a real page.
Actually it turns out that there is: the &lt;a href=&quot;http://www.adobe.com/shockwave/download/alternates/&quot;&gt;Flash debug player.&lt;/a&gt;
After you install it, all trace output from any embedded flash player is
written to a log file. Throw tail -f on the file, and you can watch the trace
messages from your flash in real time. The cool thing is, you can also watch
the debug messages from everyone else. There are a few interesting ones, but
the best I've found so far is the YouTube embedded player. The tastiest bits:
&lt;blockquote&gt;
&lt;pre&gt;
START PLAYING :http://www.youtube.com/get_video?video_id=_-XoafyJ9K4&amp;amp;t=OEgsToPDskIMqdmC3eeaF1meusSwSKjs&lt;br /&gt;
playing.. the movie&lt;br /&gt;
status code is:NetStream.Play.Start&lt;br /&gt;
we got meta fuck yeah!&lt;br /&gt;
time is:127.494
&lt;/pre&gt;&lt;/blockquote&gt;
and
&lt;blockquote&gt;
&lt;pre&gt;
result xml:0&lt;br /&gt;
node is:0 length:1&lt;br /&gt;
status code is:NetStream.Buffer.Flush&lt;br /&gt;
status code is:NetStream.Buffer.Empty&lt;br /&gt;
showing the goddamn play button
&lt;/pre&gt;&lt;/blockquote&gt;
I'm always glad to see how much I have in common with the engineers at other
companies.</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2007/03/06/Oh-the-things-that-youll-see#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2007/03/06/Oh-the-things-that-youll-see#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/85696</wfw:commentRss>
      </item>
    
  <item>
    <title>Food Riffs</title>
    <link>http://blog.emmettshear.com/post/2007/01/04/Food-Riffs</link>
    <guid isPermaLink="false">urn:md5:76b87ac1ef033de9d076a975b742f834</guid>
    <pubDate>Thu, 04 Jan 2007 03:39:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;Justin and I were discussing baking lemon bars the other day, when the same
thought hit us both simultaneously: why are we so limited, to consider only the
Lemon variety?&lt;/p&gt;
&lt;p&gt;Lemon: &lt;a href=&quot;http://blog.emmettshear.com/public/P1010017.JPG&quot;&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/./.P1010017_t.jpg&quot; alt=&quot;OLYMPUS DIGITAL CAMERA &quot; /&gt;&lt;/a&gt; Lime: &lt;a href=&quot;http://blog.emmettshear.com/public/P1010016.JPG&quot;&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/./.P1010016_t.jpg&quot; alt=&quot;OLYMPUS DIGITAL CAMERA &quot; /&gt;&lt;/a&gt; Orange: &lt;a href=&quot;http://blog.emmettshear.com/public/P1010018.JPG&quot;&gt;&lt;img src=&quot;http://blog.emmettshear.com/public/./.P1010018_t.jpg&quot; alt=&quot;OLYMPUS DIGITAL CAMERA &quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They're still cooling. I'll update with the success, flavor-wise, tomorrow.
Later on the agenda: Grapefruit!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2007/01/04/Food-Riffs#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2007/01/04/Food-Riffs#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/67836</wfw:commentRss>
      </item>
    
  <item>
    <title>What's Wealth?</title>
    <link>http://blog.emmettshear.com/post/2006/12/19/Whats-Wealth</link>
    <guid isPermaLink="false">urn:md5:98493ac1698db6582796d34a3a81dfc0</guid>
    <pubDate>Tue, 19 Dec 2006 13:47:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;From &lt;a href=&quot;http://www.consumerist.com/consumer/debt/got-2200-congrats-youre-among-the-worlds-richest-people-222619.php&quot; hreflang=&quot;en&quot;&gt;The Consumerist&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A recent United Nations study on personal wealth found that having just
$2,200 per adult puts a household in the top 50% of the world's &amp;gt;richest.
However, thanks to large amounts of consumer debt, &amp;quot;many people in high-income
countries have negative net worth and - somewhat &amp;gt;paradoxically - are among
the poorest people in the world in terms of household wealth.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What does it truly mean to be wealthy? The American child of middle class
parents with student loans and credit cards is much more secure in his access
to all the accouterments of wealth for the duration of their entire life than a
debt-free child of Ugandan refugees. That security is the true measure of
wealth. Merely counting up the quantifiable assets (or debts) held is
ridiculously simplistic. First, there are personal intangible assets (the
American's college degree), familial assets (the American's parents probably
have positive networth), and most importantly societal assets (the security
that men won't come and raze your house). And I'd be wealthier renting an
apartment, in hock to my neck to the credit card companies in America than
living completely debt-free in Uganda.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/12/19/Whats-Wealth#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/12/19/Whats-Wealth#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/64785</wfw:commentRss>
      </item>
    
  <item>
    <title>Splay Tree</title>
    <link>http://blog.emmettshear.com/post/2006/12/04/Splay-Tree</link>
    <guid isPermaLink="false">urn:md5:380719ec3f75eb3bb439829774dd0c55</guid>
    <pubDate>Mon, 04 Dec 2006 21:58:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
        <category>code</category><category>ruby</category>    
    <description>    &lt;p&gt;There was no convenient Ruby implementation of Splay Trees. Now there is;
&lt;a href=&quot;http://blog.emmettshear.com/public/splay.rb&quot; hreflang=&quot;en&quot;&gt;this&lt;/a&gt; is pretty much a straight
port of the Java version available &lt;a href=&quot;http://www.link.cs.cmu.edu/link/ftp-site/splaying/SplayTree.java&quot; hreflang=&quot;en&quot;&gt;here&lt;/a&gt;. I wrote up a quick &lt;a href=&quot;http://blog.emmettshear.com/public/splay_test.rb&quot; hreflang=&quot;en&quot;&gt;set of tests&lt;/a&gt; as well.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/12/04/Splay-Tree#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/12/04/Splay-Tree#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/61179</wfw:commentRss>
      </item>
    
  <item>
    <title>This Blog Is Boring</title>
    <link>http://blog.emmettshear.com/post/2006/11/30/This-Blog-Is-Boring</link>
    <guid isPermaLink="false">urn:md5:9df96827fb6777092c2be986de06bddf</guid>
    <pubDate>Thu, 30 Nov 2006 11:36:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;I think that's objectively true. What I'm really worried about is that this
reflects my current personality, working for a startup: boring. More generally,
I've been concerned that everyone in startups winds up, to an outsider,
fundamentally boring. The startups in Crystal Towers (we need a collective name
- suggestions) were discussing this a few days ago. Someone noted that when
they went home they had no idea what to talk about with people, if they
couldn't discuss work. Luckily I didn't have that problem so much, but only
because there were other people pulling the conversation forward. If I had to
generate conversation topics on my own, I'm not sure I'd be able to do it for
long without work.&lt;/p&gt;
&lt;p&gt;Even this post is about startups and their effects. Which is a disease that
I've noticed even great writers I know who are involved in startups. And I'm
not even a particularly good writer, let alone great, so it's a fairly grim
outlook for me. My only hope is to retire to a monastery in the mountains.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/11/30/This-Blog-Is-Boring#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/11/30/This-Blog-Is-Boring#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/60073</wfw:commentRss>
      </item>
    
  <item>
    <title>Somehow it seems I always wind up rolling my own...</title>
    <link>http://blog.emmettshear.com/post/2006/11/07/Somehow-it-seems-I-always-wind-up-rolling-my-own</link>
    <guid isPermaLink="false">urn:md5:777ddbcbfbce5bf4027b3d09457d2980</guid>
    <pubDate>Tue, 07 Nov 2006 19:39:00 -0500</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;I spent a few days looking for a customizable real-time chat component to
use on our new project. There were plenty of excellent components (mostly built
in flash) that you couldn't customize at all. Since we need a bunch of features
that those chat clients don't offer, they were only tempting dead ends. In the
end, I decided to roll my own. In the search process I ran across &lt;a href=&quot;http://juggernaut.rubyforge.org&quot; hreflang=&quot;en&quot;&gt;Juggernaut&lt;/a&gt;, a Rails plugin
for persistent connections. Building basic chat off of Juggernaut has required
adding a couple feature enhancements (a system of handlers for connect and
disconnect events), but overall it's been a solid base. My new chat project is
called &lt;a href=&quot;http://rubyforge.org/projects/zinzani/&quot; hreflang=&quot;en&quot;&gt;Zinzani&lt;/a&gt;; most of the functionality is now in place, although the
default template is still very ugly.&lt;/p&gt;
&lt;p&gt;I'll try to make http://zinzani.rubyforge.org/ a functional demo soon.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/11/07/Somehow-it-seems-I-always-wind-up-rolling-my-own#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/11/07/Somehow-it-seems-I-always-wind-up-rolling-my-own#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/48070</wfw:commentRss>
      </item>
    
  <item>
    <title>That's very liberal of you</title>
    <link>http://blog.emmettshear.com/post/2006/10/26/Thats-very-liberal-of-you</link>
    <guid isPermaLink="false">urn:md5:50e68024f53c6b31210defb43141d309</guid>
    <pubDate>Thu, 26 Oct 2006 14:15:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
        <category>observation</category>    
    <description>    &lt;p&gt;It used to be that an act of generosity or mercy would be called &amp;quot;christian&amp;quot;
by many. I've always thought that was poor word choice, because those actions
aren't really in particularly Christian. &amp;quot;Frank led me to Jesus by his great
love of Christ. That was very Christian of him&amp;quot;: good word choice. &amp;quot;Frank let
me borrow his lawnmower. That was very Christian of him&amp;quot;: poor word choice.
It's an important word choice as well, because it implies that non-Christians
lack those traits and belief that outsiders lack generic positive traits is a
symptom of unwarranted discrimination and prejudice.&lt;/p&gt;
&lt;p&gt;Luckily, nowadays you don't hear that phrasing very often. It sounds
slightly archaic. But I recently overheard something here in San Francisco that
disturbed me. Someone said &amp;quot;He helped me set up the event; he's a real
liberal.&amp;quot; Liberal here is being used in the same sense as Christian; a place
holder for &amp;quot;good&amp;quot;. This is disturbing because it implies that the members of
this culture actually believe that conservatives lack personal, positive
traits. That's simply not true, and it's foolish to think otherwise. That kind
of attitude is exactly what we should be fighting: people are people, good and
bad, no matter what their religion or politics are. Neither Christians nor
liberals have any monopoly on kindness.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/26/Thats-very-liberal-of-you#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/26/Thats-very-liberal-of-you#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/44937</wfw:commentRss>
      </item>
    
  <item>
    <title>Adventures in Devices</title>
    <link>http://blog.emmettshear.com/post/2006/10/22/Adventures-in-Devices</link>
    <guid isPermaLink="false">urn:md5:d779bf413429f7c3b0edbbd60ffd3361</guid>
    <pubDate>Sun, 22 Oct 2006 15:55:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;Steps required to get Philips SPC900NC webcam to work under Ubuntu
(Dapper-Drake) Linux:&lt;/p&gt;
&lt;p&gt;wget
http://www.saillard.org/linux/pwc/snapshots/pwc-v4l2-20061020-042701.tar.bz2&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A big thank you to Saillard for putting in all the work for these
drivers!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;tar xjf pwc-v4l2-20061020-042701.tar.bz2 cd pwc-v4l2-20061020-042701&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;if you try to run make now, it will fail because there's no /build or
/source directory in /lib/module/`uname -r`&lt;/li&gt;
&lt;li&gt;so you need to get the kernel headers and softlink them in&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;sudo apt-get install linux-kernel-headers sudo ln -s
/usr/src/linux-headers-2.6.15-27-386/ /lib/modules/2.6.15-27-386/build&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;now make will work&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;make sudo make install modprobe pwc&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;plug in webcam and test:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;sudo apt-get install camorama camorama&lt;/p&gt;
&lt;p&gt;I don't even want to talk about how many dead ends I had to go down to
figure that out. At least I sort of understand how linux device support works
now...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/22/Adventures-in-Devices#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/22/Adventures-in-Devices#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/41120</wfw:commentRss>
      </item>
    
  <item>
    <title>Blacklist Script for Reddit</title>
    <link>http://blog.emmettshear.com/post/2006/10/18/Blacklist-Script-for-Reddit</link>
    <guid isPermaLink="false">urn:md5:a14539c804cd543d50c10f0b7c540298</guid>
    <pubDate>Wed, 18 Oct 2006 14:53:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;I've seen a lot of people complaining about the prevalence of political
articles on reddit. I myself have thought, &amp;quot;I would rather not see any more
stories about the LATEST OUTRAGE BUSH DEMOCRATS OMG&amp;quot;. So I wrote a simple
&lt;a href=&quot;http://greasemonkey.mozdev.org/&quot; hreflang=&quot;en&quot;&gt;greasemonkey&lt;/a&gt; script
that checks for the presence of various words in article titles. If it finds
one of the words, it calls removeSiteDom to remove it.&lt;/p&gt;
&lt;p&gt;If you like politics but never want to see &amp;quot;10 worthless CSS tricks!&amp;quot; again,
feel free to edit the word list.&lt;/p&gt;
&lt;p&gt;(download the script at &lt;a href=&quot;http://blog.emmettshear.com/public/nopolitics.user.js&quot; hreflang=&quot;en&quot;&gt;http://blog.emmettshear.com/public/nopolitics.user.js&lt;/a&gt;)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/18/Blacklist-Script-for-Reddit#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/18/Blacklist-Script-for-Reddit#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/40367</wfw:commentRss>
      </item>
    
  <item>
    <title>The World: Very Very Small</title>
    <link>http://blog.emmettshear.com/post/2006/10/16/The-World%3A-Very-Very-Small</link>
    <guid isPermaLink="false">urn:md5:74bd9956a1d5c3ec015f3618bb607de6</guid>
    <pubDate>Mon, 16 Oct 2006 15:48:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;We opened our mailbox at our new place, found a magazine sent to the
previous resident. Upstairs in our apartment where the Xobnis are crashing with
us, and Matt was browsing through it. He finds none other than Reddit mentioned
in an article. Tight circle...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/16/The-World%3A-Very-Very-Small#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/16/The-World%3A-Very-Very-Small#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/40003</wfw:commentRss>
      </item>
    
  <item>
    <title>Scratchtop</title>
    <link>http://blog.emmettshear.com/post/2006/10/14/Scratchtop</link>
    <guid isPermaLink="false">urn:md5:cc7ac6c85ff265368752a4a5b4421091</guid>
    <pubDate>Sat, 14 Oct 2006 19:47:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
        <category>idea code product</category>    
    <description>    &lt;p&gt;I threw together &lt;a href=&quot;http://scratchtop.com&quot; hreflang=&quot;en&quot; title=&quot;scratchtop&quot;&gt;scratchtop.com&lt;/a&gt; in frustration with all the current ways to
write and share simple documents on the web. Why are you making me register?
Why do I have to click 10 times to start writing my first document? Why do I
have to click edit and save? Why do I have to click at all? Feel free to use
scratch top, but be warned that it's still very much development software.&lt;/p&gt;
&lt;p&gt;As far as I know, scratch top is the simplest useful web application ever
written. Anyone know anything simpler?&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/14/Scratchtop#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/14/Scratchtop#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/39692</wfw:commentRss>
      </item>
    
  <item>
    <title>Arrival in San Francisco</title>
    <link>http://blog.emmettshear.com/post/2006/10/14/Arrival-in-San-Francisco</link>
    <guid isPermaLink="false">urn:md5:e0663a93f4bd968aa3d7d7ceeebc692f</guid>
    <pubDate>Sat, 14 Oct 2006 19:44:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;Haven't posted in a few weeks. Was busy driving across country. Trip was
fine, although Mormons stole Justin's sunglasses in Salt Lake City. Time to get
to work.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/10/14/Arrival-in-San-Francisco#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/10/14/Arrival-in-San-Francisco#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/39690</wfw:commentRss>
      </item>
    
  <item>
    <title>Lessons from eBaying Kiko</title>
    <link>http://blog.emmettshear.com/post/2006/09/18/Lessons-from-eBaying-Kiko</link>
    <guid isPermaLink="false">urn:md5:42f8b44fe070abde61f6416ccff76e1c</guid>
    <pubDate>Mon, 18 Sep 2006 23:03:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
        <category>kiko startups ebay advice</category>    
    <description>    &lt;p&gt;We at Kiko Software Incorporated have recently had an experience which is
fairly unique in the crowded software world: we successfully sold a full
software product on eBay. This hasn't been done too many times before (just
one, as far as I know), but it's a pretty good way to exit a startup. There are
a few potential problems areas though, and I'd like to share what we learned
from the process.&lt;/p&gt;
&lt;p&gt;Most importantly, specify the contract fully up front. Because we failed to
do this, we wound up negotiating that contract after the sale. As anyone who's
ever paid a lawyer to negotiate anything knows, that's more expensive than
you'd like. Luckily Tucows was very reasonable and the negotiations went fine;
if we'd been less lucky it could have been a real problem. Different sets of
terms are worth very different amounts. In our deal, we very specifically did
not offer a long term support contract with the software, even though that
could have potentially increased the final price quite a bit.&lt;/p&gt;
&lt;p&gt;If you think you have two potential sets of terms that would appeal to
different buyers and you're willing to entertain either, consider selling an
option bundled with the software. For example, if we'd been willing to offer a
long term support contract for a reasonable price, we could have included
that.&lt;/p&gt;
&lt;p&gt;Pay careful attention to eBay's terms of service though. From what I can
tell, certain kinds of options might be against the rules. Kiko's auction was
pulled on the 7th day (out of 10) for having 2 links to the kiko.com (one to
our main page, another to the API documentation). Apparently that's one over
the limit, and an extremely vigilant community member killed our auction for
it. We relisted it again as a 3 day auction and it doesn't seem any long term
harm was done, but it was very nerve wracking.&lt;/p&gt;
&lt;p&gt;Relisting it for 3 days was actually a mistake. We should have taken the
removal as a blessing in disguise and relisted it for 10. Another week and a
half would have given allowed more companies to bid. Corporations are slow. Ten
days isn't enough time for most of them to both find out about the auction and
go through their internal procedures. So a ten day auction is probably too
short. If you can find another auction site besides eBay that allows longer
auctions, you might consider using them.&lt;/p&gt;
&lt;p&gt;We did do at least one thing right when we started our auction at $50,000
instead of $1. It's easy to see why it's a good idea if you consider that the
real bids are all going to come in the last ten minutes of the auction. Earlier
bids are essentially meaningless noise, and a low starting price can only
induce more of those. The disadvantage of a low starting bid is you could be
forced to sell for less than your minimum. Why take the chance?&lt;/p&gt;
&lt;p&gt;Overall, the experience was extremely positive for us. Even with the
mistakes we made the process was very fast, the asset sold for more than we
expected, and our baby found a good home with Tucows. If you find your business
with an large, valuable asset, consider eBaying it. It may sound crazy, but it
seems to work.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/09/18/Lessons-from-eBaying-Kiko#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/09/18/Lessons-from-eBaying-Kiko#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/31179</wfw:commentRss>
      </item>
    
  <item>
    <title>The Privacy Continuum</title>
    <link>http://blog.emmettshear.com/post/2006/09/06/Aggregate-Information</link>
    <guid isPermaLink="false">urn:md5:a3351764378c65ba84d3e816a85ceb31</guid>
    <pubDate>Wed, 06 Sep 2006 00:22:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
            
    <description>    &lt;p&gt;The Facebook just released a &lt;a href=&quot;http://blog.facebook.com/blog.php?post=2207967130&quot; hreflang=&quot;en&quot;&gt;new
feature&lt;/a&gt; that shows all the recent changes from your friends on your main
page. Less than a day later, there are multiple groups protesting this as an
invasion of privacy; the largest I've found is nearly 25,000 students strong.
This is a very important reaction that we should pay attention to: a great many
people feel their privacy has been invaded, but no new information has been
revealed! The new feature only aggregates publicly available information. How
could that be an invasion of privacy?&lt;/p&gt;
&lt;p&gt;Because our previous conception of privacy, as public/private, is a flawed
dichotomy that must be discarded in the face of changing technology. Data is
not merely private or public, known or not known. Data has an associated cost
of retrieval which is either high or low. The strength of this reaction to the
new feature might have caught its creators by surprise, but it shouldn't have.
After all, The Facebook's walled-garden approach to schools is largely
responsible for its popularity, and that approach is entirely based around
increasing the cost of accessing data. No one really believes that information
they enter there is private, just that it will be relatively difficult for
outsiders to find. A huge amount of information had been entrusted to The
Facebook with the understanding that it would be available only to other users
of The Facebook, and to them only so long as they paid the time cost of looking
for it. Now that time cost has been reduced to nearly zero, privacy has been
reduced correspondingly. The protesting students' instinctive reaction is
precisely correct; the privacy bargain has been unilaterally modified.&lt;/p&gt;
&lt;p&gt;This is same kind of invasion of privacy being proposed by the Bush
Administration in the Total Information Awareness project. No private
information would go into the database, and yet aggregating that data into one
place is still an invasion of privacy. We all agree that our whereabouts are
not secret when we enter public spaces, yet I doubt many of us would be
comfortable with the government recording our every movement. That our
purchasing histories are public is no big deal when accessing one takes effort
and time; they are still mostly private because most people will not spend the
time to find them.&lt;/p&gt;
&lt;p&gt;Data aggregation is an invasion of privacy because it reduces the cost of
access to that data, and cost of access is the continuum upon which &amp;quot;public&amp;quot;
and &amp;quot;private&amp;quot; are poles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update: 4 hours later, it's up to 85,000 students.&lt;/li&gt;
&lt;li&gt;Update: A day later, it's up to 280,000 students.&lt;/li&gt;
&lt;li&gt;Update: A few days later, it maxed out around 750,000 students.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/09/06/Aggregate-Information#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/09/06/Aggregate-Information#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/28147</wfw:commentRss>
      </item>
    
  <item>
    <title>Things I Didn't Know About The History Of Schools</title>
    <link>http://blog.emmettshear.com/post/2006/08/31/Things-I-Didnt-Know-About-The-History-Of-Schools</link>
    <guid isPermaLink="false">urn:md5:d5f5d946c631d113c5d6d8fdf125bf15</guid>
    <pubDate>Thu, 31 Aug 2006 22:38:00 -0400</pubDate>
    <dc:creator>Emmett</dc:creator>
        <category>book review</category><category>education</category><category>facts</category>    
    <description>    &lt;ul&gt;
&lt;li&gt;In 1930, there were 260,000 schools in the USA (including approximately
150,000 ones with only a single teacher). In 2000, there were less than 95,000
schools almost none with only a single teacher. The average number of students
per school size grew from 89 to 502.&lt;/li&gt;
&lt;li&gt;The number of support staff per student has increased three-fold since
1950, from 1/83 to 1/27.&lt;/li&gt;
&lt;li&gt;The number of teachers per student has increased two-fold since 1950, from
1/26 to 1/12.&lt;/li&gt;
&lt;li&gt;The average number of years of experience for a teacher has increased 7
years since 1966, from 8 to 15. The average age of a teacher has also increased
by 7 years over the same time period, from 37 to 44.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The statistics are from &lt;a href=&quot;http://www.hoover.org/publications/books/3332201.html&quot; hreflang=&quot;en&quot;&gt;School
Figures&lt;/a&gt;, which is published by the Hoover Institute. I hadn't heard of them
before, but from reading their choice of statistics it's clear they're in the
privatization/school-choice crowd. The idea of school choice had an appeal for
me at one point, when I still believed that what made a school good could be
measured by tests. School choice advocates are entirely right that if you place
enough emphasis on competing for students via test scores and the school
ratings based on them, you'll see scores go up. The problem with that approach
is that any kind of test scores are basically broken as a measure of the
success of schools.&lt;/p&gt;
&lt;p&gt;For the first part, it's difficult to say whether test scores are truly
rising or falling at all. There are a huge number of confounding factors
involving demographic trends and changes in the tests themselves. Secondly,
even assuming we could correctly tease out the true change in test scores,
there's very little evidence that rising test scores mean better educated
students. It's difficult to deny that students who score 1600 on the SATs are
much more likely to be well educated and thoughtful than those who score 900.
But as those 1600 point scoring students would tell you, corelation is not
causation! It might be that on average tall students score higher on their
SATs, but that doesn't mean giving students stilts will improve test
scores.&lt;/p&gt;
&lt;p&gt;This is all a roundabout way of saying that I don't think much of the book,
although it has a lot of pretty graphs. They've managed to pull together a very
large and impressive number of statistics, a few of which are meaningful and
most of which are not. Other offenses include, but are not limited to:
extrapolating trends from as few as two data points, representing public
opinion polls as meaningful measures of something more than people's opinions,
and failing to consider alternate explanations for trends. I shouldn't pick on
them too much, since all of these are common crimes, but I wish for a book on
the history and facts of education that I could actually recommend at some
point.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.emmettshear.com/post/2006/08/31/Things-I-Didnt-Know-About-The-History-Of-Schools#comment-form</comments>
      <wfw:comment>http://blog.emmettshear.com/post/2006/08/31/Things-I-Didnt-Know-About-The-History-Of-Schools#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.emmettshear.com/feed/rss2/comments/26901</wfw:commentRss>
      </item>
    
</channel>
</rss>