<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8216930037889709643</id><updated>2012-02-16T07:02:20.200-08:00</updated><category term='political divisiveness'/><category term='plots'/><category term='towns with funny names'/><category term='party of no'/><category term='politics'/><category term='cs'/><title type='text'>You Infinite Snake</title><subtitle type='html'>Brighten Godfrey's blog.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-3026987203178468043</id><published>2011-12-06T16:39:00.001-08:00</published><updated>2011-12-06T21:23:31.675-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Like a spider's web</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/--c55g623q2k/Tt64M7xCgjI/AAAAAAAAAL8/B5TaB_E3CPU/s1600/LondonAnecdotes1848.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="600" src="http://2.bp.blogspot.com/--c55g623q2k/Tt64M7xCgjI/AAAAAAAAAL8/B5TaB_E3CPU/s600/LondonAnecdotes1848.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p style="font-size:200%; line-height:150%"&gt;&lt;i&gt;“It is anticipated that the whole of the populous parts of the United States will, within two or three years, be covered with net-work like a spider's web.”&lt;/i&gt;&lt;/p&gt;

&lt;p align=right&gt;&amp;mdash; Illustration and quote from &lt;a href="http://books.google.com/books?id=AU5UaumQJvICe"&gt;&lt;i&gt;The London Anecdotes&lt;/i&gt;&lt;/a&gt;, 1848&lt;br&gt;Quoted in &lt;a href="http://tomstandage.wordpress.com/books/the-victorian-internet/"&gt;&lt;i&gt;The Victorian Internet&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-3026987203178468043?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/3026987203178468043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/like-spiders-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3026987203178468043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3026987203178468043'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/like-spiders-web.html' title='Like a spider&apos;s web'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/--c55g623q2k/Tt64M7xCgjI/AAAAAAAAAL8/B5TaB_E3CPU/s72-c/LondonAnecdotes1848.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1948793041901516218</id><published>2011-12-04T22:22:00.000-08:00</published><updated>2011-12-04T20:24:28.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Google+ vs. Facebook engagement</title><content type='html'>&lt;p&gt;Here's a little statistically-insignificant self-experimentation, based on 51 near-simultaneous posts to both Google+ and Facebook, from the beginning of September 2011 to the present.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-ODR21Q6_OJI/TtxDf_nwFTI/AAAAAAAAALM/XjzzqtCcvh4/s1600/scatterplot.jpeg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://2.bp.blogspot.com/-ODR21Q6_OJI/TtxDf_nwFTI/AAAAAAAAALM/XjzzqtCcvh4/s400/scatterplot.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;"Engagement" is the number of unique people (excluding me) who responded, either by commenting, liking or +1'ing the post, or liking or +1'ing a comment on the post.  (The scatterplot points are perturbed slightly from their true integral values so they don't completely overlap.) What's remarkable here is how coincidentally similar the engagement is on the two networks &amp;mdash; the difference is under 2 percent (!) despite the fact that my social network on Facebook is currently 2.25 times as large as on Google+.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Gk8i-zVwumk/TtxD3vwRA6I/AAAAAAAAALY/Kuw0Bb3efe0/s1600/means.jpeg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://2.bp.blogspot.com/-Gk8i-zVwumk/TtxD3vwRA6I/AAAAAAAAALY/Kuw0Bb3efe0/s400/means.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Google+ has very slightly higher engagement on STEM-related posts (science, technology, engineering, and mathematics), while Facebook is slightly higher for other posts, but the differences are well within 95% confidence intervals.&lt;/p&gt;

&lt;p&gt;It's possible my social network has somewhat shifted to Google+.  Here is the post set split into five chronological partitions with 10 or 11 posts in each.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-CfayN7x9xTU/TtxEBFXuK7I/AAAAAAAAALk/4T8u1SO1bvY/s1600/timeplot.jpeg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://1.bp.blogspot.com/-CfayN7x9xTU/TtxEBFXuK7I/AAAAAAAAALk/4T8u1SO1bvY/s400/timeplot.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Engagement as defined above excludes re-sharing posts, because I wasn't confident the two social networks are reporting these in the same way (e.g., do they both report recursive shares?).  But there is some interestingly significant difference in sharing behavior on Google+ with STEM posts seeing nearly &lt;em&gt;seven times&lt;/em&gt; as much sharing as non-STEM posts in this very small data set, an effect which didn't appear on Facebook.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-pGaliJVHCVA/TtxEG_fdbII/AAAAAAAAALw/nsaH-v2D4kc/s1600/share-means.jpeg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://3.bp.blogspot.com/-pGaliJVHCVA/TtxEG_fdbII/AAAAAAAAALw/nsaH-v2D4kc/s400/share-means.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Of course, all of this is specific to my social network, and really, the sample size is too small to draw any conclusions at all.  Now, if someone were to compare posts for a large number of people that cross-post publicly to Facebook and Google+, that could start to get interesting...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1948793041901516218?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1948793041901516218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/google-vs-facebook-engagement.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1948793041901516218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1948793041901516218'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/google-vs-facebook-engagement.html' title='Google+ vs. Facebook engagement'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ODR21Q6_OJI/TtxDf_nwFTI/AAAAAAAAALM/XjzzqtCcvh4/s72-c/scatterplot.jpeg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-294069146398417979</id><published>2011-12-02T15:37:00.001-08:00</published><updated>2011-12-02T16:03:45.400-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Matrix multiplication algorithms over time</title><content type='html'>&lt;p&gt;The asymptotically fastest algorithm for matrix multiplication takes time O(&lt;i&gt;n&lt;/i&gt;&lt;sup&gt;ω&lt;/sup&gt;) for some value of ω.  Here are the &lt;a href="http://blog.computationalcomplexity.org/2011/11/matrix-mult-you-heard-it-here-third.html"&gt;best known upper bounds&lt;/a&gt; on ω over time.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Dotb2FPFxpk/TtliwwjPt5I/AAAAAAAAAK0/8kdqlaD_-uk/s1600/multiplication.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://2.bp.blogspot.com/-Dotb2FPFxpk/TtliwwjPt5I/AAAAAAAAAK0/8kdqlaD_-uk/s400/multiplication.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="http://www.scottaaronson.com/blog/?p=839"&gt;The latest improvements&lt;/a&gt;, the first in over 20 years, are due to Andrew Stothers and Virginia Vassilevska Williams.  The latter gave an O(&lt;i&gt;n&lt;/i&gt;&lt;sup&gt;2.3727&lt;/sup&gt;)-time algorithm for multiplying matrices.&lt;/p&gt;

&lt;p&gt;When will the sometimes-conjectured ω = 2 be reached?  Certainly nothing wrong with taking a linear fit of this data, right?&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-vkOcwOMlhio/Ttljne9rQ1I/AAAAAAAAALA/Lk2QZfuPQfY/s1600/multiplication-fit.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="400" src="http://4.bp.blogspot.com/-vkOcwOMlhio/Ttljne9rQ1I/AAAAAAAAALA/Lk2QZfuPQfY/s400/multiplication-fit.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;So that would be around the year 2043.  Unfortunately, the pessimist's exponential fit asymptotes to ω = 2.30041...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-294069146398417979?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/294069146398417979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/matrix-multiplication-algorithms-over.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/294069146398417979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/294069146398417979'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/12/matrix-multiplication-algorithms-over.html' title='Matrix multiplication algorithms over time'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Dotb2FPFxpk/TtliwwjPt5I/AAAAAAAAAK0/8kdqlaD_-uk/s72-c/multiplication.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-8983626511231690586</id><published>2011-11-16T00:21:00.001-08:00</published><updated>2011-11-16T09:33:47.374-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Live-Blogging HotNets 2011 (Day Two)</title><content type='html'>&lt;p&gt;(OK, not quite live...)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011.html"&gt;Day One was over here.&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Session 5&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final85.pdf"&gt;Christopher Riederer&lt;/a&gt; spoke about auctioning your personal information.  Unfortunately I missed the talk, but it must have been a good one since there was quite a bit of discussion.&lt;/p&gt;

&lt;p&gt;Next up was &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final131.pdf"&gt;Vincent Liu&lt;/a&gt; speaking about Tor Instead of IP &amp;mdash; which is just what it sounds like, Tor as an Internet architecture.  Of course you can't just use Tor and they have proposals for controlling incoming traffic, DoS, and getting better efficiency (lower stretch) with enough diversity of jurisdiction and plausible routing-policy-compliance.  Similar to what &lt;a href="https://telex.cc/"&gt;Telex&lt;/a&gt; does with network-layer steganography, the general approach here is to make Internet connectivity an all or nothing proposition:  If you can get &lt;em&gt;anywhere&lt;/em&gt; outside a censored region, you can get &lt;em&gt;everywhere&lt;/em&gt; so all the censor can do is block the entire Internet.&lt;/p&gt;

&lt;p&gt;Last was Gurney et al's &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final30.pdf"&gt;Having your Cake and Eating it too: Routing Security with Privacy Protections&lt;/a&gt;.  The notion of security here is that the neighbors of an AS can verify that the AS in question selected and advertised routes according to its agreed-upon policy.  The privacy is that they can verify this without revealing any more information than the verification itself.  The paper presents protocols to verify several particular policies (e.g., if the AS was offered some route, then it advertised one). Could be useful for debugging interdomain connectivity issues.&lt;/p&gt;

&lt;h4&gt;Session 6&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final60.pdf"&gt;Steven Hong&lt;/a&gt; presented Picasso which provides a nice abstraction, hiding the complexity of full duplex signal shaping to utilize discontiguous spectrum fragments.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final112.pdf"&gt;Mohammad Khojastepour&lt;/a&gt; spoke about using antenna cancellation to improve full duplex wireless.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final157.pdf"&gt;Souvik Sen&lt;/a&gt; asked, Can physical layer frequency response information improve WiFi localization?  Yes.  And it involves driving Roombas around cafeterias.&lt;/p&gt;


&lt;h4&gt;Session 7&lt;/h4&gt;

&lt;p&gt;Poor old TCP felt snubbed at this workshop until &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final100.pdf"&gt;Keith Winstein&lt;/a&gt; started roasting it.  TCP is designed to work well in steady-state with very particular assumptions.  It fails under messy real world conditions &amp;mdash; hugely varying RTTs, stochastic rather than congestion-induced loss, very dynamic environments, and so on.  Keith's goal is to make transmission control more robust and efficient by modeling network uncertainty.  So the end-host has a model of the network (potentially including topology, senders, queues, etc.) but any of these elements can have unknown parameters describing their behavior.  Then it maintains a probability distribution over possible parameter values and updates its beliefs as evidence comes in from the network (e.g., ACKs).  At any given time, it takes whatever action maximizes expected utility (= some throughput / fairness / latency metric) given the current distribution of possible situations.  The action is a delay until sending next packet. It's a beautifully intuitive idea, or as a certain reviewer put it,&lt;/p&gt;

&lt;blockquote&gt;"This is the craziest idea I've heard in a very long time."&lt;/blockquote&gt;

&lt;p&gt;Keith showed a simulation in one small example where this approach decides to use a slow start behavior &amp;mdash; without that being hard-coded in &amp;mdash; but then after getting a little info, immediately sends at the "right" rate. But there are big challenges.  Some discussion touched on state explosion in the model, the danger of overfitting with an overly-complicated model, and how much the sender needs to know about the network.

&lt;p&gt;Q: What would be the first variable you'd add to the network model beyond what TCP captures?  A: Stochastic loss.&lt;/p&gt;

&lt;p&gt;Q (Barath): Should we add a control plane to disseminate information about the network to assist the model? A: anything that gets more info is good.&lt;/p&gt;

&lt;p&gt;Q (Ion): When won't this work?  A: Model mismatch &amp;mdash; if the truth is something the model didn't consider.&lt;/p&gt;

&lt;p&gt;Q: Do the smart senders coexist?  If you have 2 versions of the algorithm, do they coexist?  A: Good question.&lt;/p&gt;

&lt;p&gt;Next, a movie. The &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final40.pdf"&gt;BitMate paper&lt;/a&gt; &amp;mdash; "Bittorrent for the Less Priviliged" &amp;mdash; by Umair Waheed and Umar Saif was one of the few entirely-non-US papers.  Unfortunately visa issues prevented their attendance but Umar presented via a movie.  The problem is that high bandwidth BitTorrent nodes for mutually helpful clusters but no one wants to upload to low bandwidth nodes.  The solution included several interesting mechanisms but Umar said the one that got 80% of the benefit was something they call "Realistic Optimistic Unchoke" which improved unchoking of low-bandwidth peers.  BitMate gets dramatic improvements in efficiency and fairness.&lt;/p&gt;

&lt;p&gt;Umar took questions via Skype.  It was so 21st century.&lt;/p&gt;

&lt;p&gt;BitMate was &lt;a href="http://www.nytimes.com/external/gigaom/2011/02/28/28gigaom-bitmate-brings-bittorrent-to-the-developing-world-504.html"&gt;written up in the NYTimes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Q: what's your experience with real deployment? A: 40,000 users from 170 countries &amp;mdash; a lot from US "for reasons that escape me" (~40% from North America). Many users from Iran, probably to circumvent censorship.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final19.pdf"&gt;Vyas Sekar&lt;/a&gt; told us that a particular real 80,000 user network with tens of sites had 900 routers and &lt;em&gt;636 middleboxes&lt;/em&gt;  (Firewalls, NIDS, Media gateways, load balanceers, proxies, VPN gateways, WAN optimizers, Voice gateways).  Problem with middleboxes: device sprawl.  Another problem: dealing with many vendors (Bruce Davie, Cisco: &lt;em&gt;that&lt;/em&gt; problem we can fix!).  Result: high CapEx and high OpEx.  (Just network security cost $6B in 2010, $10B in 2016.) Also, middleboxes today are inflexible and difficult to extend.&lt;/p&gt;

&lt;p&gt;So most net innovation happens via middleboxes, but it doesn't come easily.  And middleboxes have been missing from the research community's discussion of innovation in networks.  The Vision: Enable innovation in middlebox deployments.  Approach: (1) software-centric implementations, (2) consolidated physical platform, (3) logically centralized open management APIs.  There are also opportunities for reduced costs (via multiplexing) and improved efficiency (via reuse of functions like session reconstruction of TCP flows).&lt;/p&gt;

&lt;h4&gt;Session 8&lt;/h4&gt;

&lt;p&gt;This was the data center session with three more cool papers, but unfortunately I had to leave early.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/program.shtml"&gt;See the full program.&lt;/a&gt;

&lt;p&gt;Overall I was impressed with the ideas and engaging presentations.  Thanks to the chairs &lt;a href="http://cs.wisc.edu/~akella"&gt;Aditya&lt;/a&gt; and &lt;a href="http://www.cs.berkeley.edu/~istoica/"&gt;Ion&lt;/a&gt; for a very well-run workshop. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-8983626511231690586?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/8983626511231690586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011-day-two.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8983626511231690586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8983626511231690586'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011-day-two.html' title='Live-Blogging HotNets 2011 (Day Two)'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1148947367444689890</id><published>2011-11-14T13:41:00.000-08:00</published><updated>2011-11-16T00:25:28.646-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Live-blogging HotNets 2011</title><content type='html'>&lt;p&gt;Lots of exciting talks and discussion at &lt;a href="http://conferences.sigcomm.org/hotnets/2011/"&gt;HotNets&lt;/a&gt;. Here are a few highlights.&lt;/p&gt;

&lt;h4&gt;Session 1&lt;/h4&gt;

&lt;p&gt;The first session was on Internet architecture.  &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final11.pdf"&gt;Ali Ghodsi&lt;/a&gt; spoke about three unanswered questions for the burgeoning area of {data/information/content}-{centric/oriented} networking.  These were privacy, data-plane efficiency, and whether ubiquitous caching (a key feature of nearly all the proposals) actually provides quantitative improvement.  For the latter point, the argument is that work on web caching from the late 1990's indicated that if you have caching near the edge (as already exists in present-day web caches), then adding ubiquitous caching to the architecture does not provide much more benefit due to heavy-tailed access distributions.  So, does the caching advantage of information-centric networking warrant such a large-scale architectural change?&lt;/p&gt;

&lt;p&gt;In later one-on-one discussions, Dan Massey (who later gave an interesting talk on &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final33.pdf"&gt;the IPv4 grey market&lt;/a&gt;) argued that at least for the NDN project, ubiquitous caching is not the focus. Something more important is being able to do policy-aware multipath load balancing &amp;mdash; in a very dynamic way in the network, by shipping content requests optimistically to multiple locations and seeing what ends up working well.  A kind of speculative execution for forwarding.  This may not be specific to content-awareness, but Dan argued that if you want to make this work, you end up needing something like NDN's Pending Interest Table mechanism. (The discussion was brief, but hopefully I restated the argument accurately.)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final17.pdf"&gt;Dave Andersen&lt;/a&gt; and &lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final12.pdf"&gt;Scott Shenker&lt;/a&gt; argued that the primary goal of a future Internet architecture should be to accommodate evolution within the architecture itself, rather than just adding new functionality.  The XIA approach introduces the notion of data-plane fallbacks so the sender can ask for new functionality and if it isn't supported everywhere, things still work.  Scott focused on bringing evolvability to the architecture by applying the principles of extensibility and modularity.&lt;/p&gt;

&lt;p&gt;There were several questions about what would be the incentives to deploy either approach.  Scott responded that while incentives are important, first we need to understand what &lt;em&gt;technical&lt;/em&gt; mechanisms we need to make evolvability feasible &amp;mdash; which previously we have not understood.   Ion Stoica asked, What would be the first thing that would drive deployment of one of the future Internet architectures?  Some of the answers included &lt;a href="http://en.wikipedia.org/wiki/SCADA"&gt;SCADA&lt;/a&gt; networks which need extreme security, content caching (despite the first talk!) where content providers have monetary incentives, and (from Hari) the ability to deploy differential pricing by having more information about applications' intent (though users may not like this!).&lt;/p&gt;

&lt;p&gt;Another question was whether these architectures would actually have fixed the processes which led to ossification in practice (e.g., via middlebox problems); and whether they'd aid deployment of protocols like secure BGP which have had problems in practice.&lt;/p&gt;

&lt;h4&gt;Session 2&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final4.pdf"&gt;Haitao Zheng&lt;/a&gt; from UCSB spoke about building wireless data centers, where directional wireless interfaces on racks of servers can be dynamically steered to connect pairs of racks that need to communicate.  If you want to connect racks of servers with high-bandwidth wireless links, interference is a big problem.  Their approach is 3D beamforming:  Rather than aiming the radio directly (in the 2D plane at the top of racks), bounce it off a reflective ceiling and put an absorber around the target.  This direction of reception reduces interference. In addition to having many pretty pictures of interference patterns, this is part of a &lt;a href="http://ccr.sigcomm.org/online/?q=node/645"&gt;line&lt;/a&gt; &lt;a href="http://www.cs.illinois.edu/~singla2/hotnets10.pdf"&gt;of&lt;/a&gt; &lt;a href="http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p38.pdf"&gt;work&lt;/a&gt; (in wireless and optical) that has a very cool approach &amp;mdash; we always think of changing the traffic flow to match the topology; now we can &lt;em&gt;change the physical topology&lt;/em&gt; to match the traffic.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final35.pdf"&gt;Abhinav Pathak&lt;/a&gt; talked about finding energy bugs in mobile devices &amp;mdash; as he said, that hits &lt;em&gt;three&lt;/em&gt; hot keywords.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final32.pdf"&gt;Jonathan Perry&lt;/a&gt; spoke about Rateless Spinal Codes.  My main question: why do coding schemes get to have such &lt;a href="http://en.wikipedia.org/wiki/Tornado_codes"&gt;cool&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Raptor_code"&gt;names&lt;/a&gt;?&lt;/p&gt;

&lt;h4&gt;Session 3&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final3.pdf"&gt;Mark Reitblatt&lt;/a&gt; spoke on "Consistent Updates for Software-Defined Networks: Change You Can Believe In!".  Here is the problem they are solving: As you are reconfiguring your network how can you be sure your policy (like availability or security) is preserved even during the transition?  Traditionally, this is hard because of the inconsistency of having one set of forwarding rules deployed some places, and another set deployed other places.  Actually, it might seem impossible.  Even if you magically deploy a change everywhere instantly, you can still get policy violations because &lt;em&gt;packets travel across non-negligible time&lt;/em&gt;.  Can you solve it?  Yes you can!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final103.pdf"&gt;Junda Liu&lt;/a&gt; should get some sort of award for giving the most entertaining talk that also featured a state machine diagram.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final56.pdf"&gt;Barath Raghavan&lt;/a&gt; calculated the energy and &lt;a href="http://en.wikipedia.org/wiki/Emergy"&gt;emergy&lt;/a&gt; of the Internet, which has been getting some &lt;a href="http://www.newscientist.com/blogs/onepercent/2011/10/307-gw-the-maximum-energy-the.html"&gt;press&lt;/a&gt; recently and which generated a lot of discussion on the complexities and implications of measuring society's energy use.&lt;/p&gt;

&lt;p&gt;Awesome feature of this session: all the talks finished early!&lt;/p&gt;


&lt;h4&gt;Session 4&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final26.pdf"&gt;Jon Howell&lt;/a&gt; spoke on a proposed refactoring (and narrowing) of the API for web applications executing on user machines.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final55.pdf"&gt;Ethan Katz-Bassett&lt;/a&gt; spoke about Machiavellian Routing.  The coolness here is a trick by which ISPs can control &lt;em&gt;inbound&lt;/em&gt; routing, so if they notice there is a connectivity problem at some AS they can induce other senders to avoid the problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://conferences.sigcomm.org/hotnets/2011/papers/hotnetsX-final33.pdf"&gt;Dan Massey&lt;/a&gt; noted that a grey market is emerging for IPv4 addresses and argued that we need a way not to prevent the market from existing outside the traditional Internet governance, but instead to verify what transactions happen.  This would make the market more honest and efficient.  Most interesting point from discussion (I think from Jon Howell): Why do we want to improve the IPv4 market?  This will allow more efficient use of available IPv4 addresses ... but if we let the market be as baroque and inconvenient as possible, it will encourage deployment of IPv6 sooner!&lt;/p&gt;


&lt;p&gt;&lt;a href="http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011-day-two.html"&gt;Onward to Day Two...&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1148947367444689890?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1148947367444689890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1148947367444689890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1148947367444689890'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/11/live-blogging-hotnets-2011.html' title='Live-blogging HotNets 2011'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-3098148516884481202</id><published>2011-10-20T17:09:00.000-07:00</published><updated>2011-11-14T20:43:03.653-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>The other Barack</title><content type='html'>According to &lt;a href="http://www.barackobama.com/one-million-info"&gt;this data&lt;/a&gt;, exactly two people named Barack have donated to the Obama campaign.

So, who's the other one?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-3098148516884481202?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/3098148516884481202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/10/other-barack.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3098148516884481202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3098148516884481202'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/10/other-barack.html' title='The other Barack'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-3711995202136207233</id><published>2011-08-03T01:12:00.000-07:00</published><updated>2011-11-28T23:13:22.066-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>What's wrong with computer science reviewing?</title><content type='html'>&lt;p&gt;There is a sense among some researchers in computer science that &lt;b&gt;many peer reviews in our field are bad&lt;/b&gt; &amp;mdash; in particular, too often unfairly slanted against papers in various ways that do not encourage good science and engineering.  Why might this be happening and what can we do about it?&lt;/p&gt;
 

&lt;p&gt;[Aside: you can now &lt;a href="https://plus.google.com/102845740959911684459/posts"&gt;follow me on Google+&lt;/a&gt; or &lt;a href="feed://plusfeed2.appspot.com/102845740959911684459"&gt;via an RSS feed&lt;/a&gt;. Short posts there, long posts here.]&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;h4&gt;The problem&lt;/h4&gt;

&lt;p&gt;First of all, let me be clear: (1) I think most reviews, regardless of whether they recommend acceptance or rejection, are well done and reflect care and significant time that the reviewers have invested. (2) Exciting, impactful research still manages to get done, so the system does generally work pretty well.  Still, that doesn't mean we can't improve it. (3) Despite the fact that I try to take care with each review, statistically speaking I have probably committed each of the problems discussed here.&lt;/p&gt;
 
&lt;p&gt;With the fine print out of the way ... what is this possible problem? The evidence is almost all ancedotal and biased. But since that is all we have, let me supply some anecdotes, first that reviews are often negative:&lt;/p&gt;
 
 &lt;ul&gt;
  &lt;li&gt;&lt;p&gt;This July's edition of Computer Communication Review &lt;a href="http://ccr.sigcomm.org/online/files/p3-v41n3ed-keshav-editorial.pdf"&gt;rejected all its peer-reviewed submissions&lt;/a&gt;, thus matching (at least for one issue) the Journal of Universal Rejection as the &lt;a href="http://www.universalrejection.org/"&gt;most prestigious journal as judged by acceptance rate&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

  &lt;li&gt;&lt;p&gt;Jeffrey Naughton critiqued the state of research in the databases community with bad reviewing ("Reviewers hate EVERYTHING!") as a key problem, giving the anecdote that in SIGMOD 2010, out of 350 submissions, &lt;a href="http://pages.cs.wisc.edu/~naughton/naughtonicde.pptx"&gt;only paper 1 had all reviews rate it "accept" or higher; and only 4 had an average rating of "accept" or higher&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

  &lt;li&gt;Taking a recent major systems-and-networking-related conference as a representative presumably-normal example, papers received generally 4 or 5 reviews and were scored on a scale of 1 to 5.  Out of about 177 submissions, only six accepted papers received &lt;em&gt;any&lt;/em&gt; 5's.  Only one received more than a single 5, which also says something about variance.&lt;/p&gt;&lt;/li&gt;

  &lt;li&gt;"...there is a pervasive sense of unease within these communities about the quality and fairness of the review process and whether our publication processes truly serve the purposes for which they are intended. ... It was clear from the reaction to the panel that concerns with the reviewing process cut across many, if not all, fields of computer science." (&lt;a href="http://portal.acm.org/citation.cfm?id=1462581"&gt;Panel summary&lt;/a&gt; from a session at the 2008 CRA Conference at Snowbird)&lt;/li&gt;

  &lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Is it just a reweighting problem?&lt;/b&gt; If reviews were just conservative numerically, any problem could be fixed by "curving" the scores up. That would be nice, but ... another anecdote:&lt;/p&gt;

 &lt;ul&gt;
  &lt;li&gt;A survey asked authors of SIGCOMM 2009 submissions whether they agreed that "The reviews were technically correct".  &lt;a href="http://www.sigcomm.org/sites/default/files/SIGCOMM%2009%20Comm%20FB.pdf"&gt;Roughly one-third of respondents disagreed or strongly disagreed&lt;/a&gt;, about a third agreed or strongly agreed, and another third had no opinion.&lt;/li&gt;
 &lt;/ul&gt;

&lt;p&gt;Even taking into account the fact that the survey included authors whose submissions were rejected and might just be grumpy, those numbers seem undesirable.  Reviews are sometimes wrong or emphasize unimportant or subjective problems, even when the paper gets accepted.  (And that's not necessarily the reviewer's fault.)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;But this is true in every field, right?&lt;/b&gt; After all, authors have been complaining about criticisms for centuries.  Here, by the way, are a couple favorite criticisms:&lt;/p&gt;
  
 &lt;blockquote&gt;"Your manuscript is both good and original. But the part that is good is not original, and the part that is original is not good." (unattributed)
 &lt;/blockquote&gt;

 &lt;blockquote&gt;"In one place in Deerslayer, and in the restricted space of two-thirds of a page, Cooper has scored 114 offenses against literary art out of a possible 115.  It breaks the record." (Mark Twain, How to Tell a Story and Other Essays.)
 &lt;/blockquote&gt;

&lt;p&gt;Getting back to the point, there is plenty of precedent for reviewers not seeing the light. But there is anecdotal evidence that this is a &lt;b&gt;bigger problem in CS&lt;/b&gt; than in certain other areas:&lt;/p&gt;

 &lt;ul&gt;
  &lt;li&gt;&lt;p&gt;A study of NSF panel reviews found that reviewers in computer science give lower scores on average than in other areas.   (&lt;b&gt;Note:&lt;/b&gt; I read this in CACM or some other magazine but now I can't find it; if you can, please let me know.) &lt;b&gt;Update:&lt;/b&gt; &lt;a href="http://cacm.acm.org/blogs/blog-cacm/134743-yes-computer-scientists-are-hypercritical/fulltext"&gt;Here's the data&lt;/a&gt;: CISE proposals average 0.41 points lower than other directorates.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;While it appears to be a common (but not universal) belief in CS that reviewers are too-often wrong and frustrating, I'm told by at least one physicist that that is not the general feeling about reviewers in that field. They are "rarely out to actively find problems with your paper", and while they may often misunderstand parts of the paper, the authors can respond and usually the reviewers or the journal editor will accept the response. Publication is still competitive and often annoying for other reasons, but reviewers are generally reasonable.&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;

&lt;p&gt;&lt;b&gt;So what? Does this have any negative impact?&lt;/b&gt; As pointed out by others: &lt;/p&gt;

 &lt;ul&gt;
  &lt;li&gt;&lt;p&gt;Researchers may be discouraged. (I know of at least one top PhD graduate who went to industry citing weariness with "selling" papers as one cause.)&lt;/p&gt;&lt;/li&gt;
  
  &lt;li&gt;&lt;p&gt;It puts CS at a disadvantage with other fields, if we are generally more negative in grant proposal reviews.  As Naughton wrote, &lt;em&gt;"funding agencies believe us when we say we suck"&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
  
  &lt;li&gt;&lt;p&gt;More speculative or unusual work (with dozens of &lt;em&gt;potential&lt;/em&gt; challenges for the approach that a reviewer could cite) is at a disadvantage compared to work with well-known quantitative metrics for evaluation.&lt;/p&gt;&lt;/li&gt;

  &lt;li&gt;&lt;p&gt;Variance in reviews may make papers more likely to return for another round of reviewing at another conference, increasing time to publication and reviewer workload.&lt;/p&gt;&lt;/li&gt;

 &lt;/ul&gt;
  
&lt;h4&gt;Causes of the problem&lt;/h4&gt;

&lt;p&gt;Naughton suggested that &lt;em&gt;"Reviewers are trained by receiving bad reviews from other reviewers who have received bad reviews in the past"&lt;/em&gt;.  Keshav &lt;a href="http://ccr.sigcomm.org/online/files/p3-v41n3ed-keshav-editorial.pdf"&gt;suggested&lt;/a&gt; human failings and increasing reviewer workloads.  Without disagreeing with those possibilities, I'm wondering &lt;b&gt;what about CS in particular might exacerbate the problem?&lt;/b&gt;  Here are two ideas.
&lt;/p&gt;

&lt;ol&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;No author response to reviewers.&lt;/b&gt; As a consequence of CS's focus on conferences, most venues (in my area) have no opportunity for authors to answer reviewer criticism.  The communication is author ---&amp;gt; reviewer ---&amp;gt; author, with no feedback to reviewer.  It's a little like putting papers on trial without a defense team.  As a result:
  &lt;ul&gt;&lt;li&gt;Bad reviews are more likely to happen, because the reviewer typically never learns if they have submitted a bad review, and is not really held accountable.&lt;/li&gt;
   &lt;li&gt;Once a bad review does happen, there's no chance to fix it.&lt;/li&gt;
  &lt;/ul&gt;&lt;/p&gt;&lt;/li&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;Focus on bugs.&lt;/b&gt; (This is extremely speculative.)  As computer scientists, we are &lt;em&gt;really great&lt;/em&gt; at spotting bugs, and that's a good thing when you're writing code.  Possibly, some of that carries over into reviewing more than it should. Maybe bug-finding is easier than thinking carefully about contributions of the paper &amp;mdash; especially if, once you honestly think there's a bug, you don't have to do any more work even if you're wrong. (Just noticed that &lt;a href="http://www.usenix.org/event/wowcs08/tech/full_papers/crowcroft/crowcroft.pdf"&gt;someone else&lt;/a&gt; had the same idea.)&lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;

&lt;h4&gt;Fixing the problem&lt;/h4&gt;

&lt;p&gt;I'm suggesting these as possible directions to discuss, not as solutions I think are guaranteed to work.&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;&lt;p&gt;&lt;b&gt;Allow authors to respond to reviewers.&lt;/b&gt; Just as in TCP's three-way handshake, one would hope that both involved parties get feedback. Responses, at least in theory, (1) create incentive for better reviews and feedback to help improve, (2) allow authors to point out simple misunderstandings in reviews. (Note that some venues, like ASPLOS, have rebuttals.  And in fact, &lt;a href="http://www.sigcomm.org/publications/computer-communication-review"&gt;CCR&lt;/a&gt; has reasonably fast turnaround and allows responses to reviewer comments as they arrive.  Apparently that didn't help the July issue, though...)&lt;/p&gt;

  &lt;p&gt;One could argue that reviewers already have an incentive to do well, because they have their reviews looked at (or even voted upon!) by other program committee members. But other reviewers don't know the paper and its area as well as the authors; and reviewers have at least as much incentive to maintain a friendly relationship with other reviewers as they do to argue the case for a specific paper.  Arguing a case after one reviewer has taken a negative stand involves extra effort and to a certain extent puts one's reputation on the line. I suspect &lt;b&gt;the most effective response comes from the authors.&lt;/b&gt;  They have the needed incentive and knowledge.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That seems like the most obvious approach, but it does require organizational change.  There are some smaller steps that might be easier on an individual level.&lt;/p&gt;

&lt;ol start=2&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;Avoid &lt;a href="http://pages.cs.wisc.edu/~naughton/naughtonicde.pptx"&gt;Naughton&lt;/a&gt;'s checklist for bad reviewing.&lt;/b&gt; Quoting him directly:
 &lt;blockquote&gt;
 &lt;ul&gt;
  &lt;li&gt;Is it "difficult"?&lt;/li&gt;
  &lt;li&gt;Is it "complete"?&lt;/li&gt;
  &lt;li&gt;Can I find any flaw?&lt;/li&gt;
  &lt;li&gt;Can I kill it quickly?&lt;/li&gt;
 &lt;/ul&gt;
 &lt;/blockquote&gt;&lt;/p&gt;
 &lt;/li&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;Focus on what a paper contributes, not on what it doesn't contribute,&lt;/b&gt; which is always an infinitely long list.  Focusing on the absent results will inevitably lead any paper to the wastebin of rejection and any author to a pit of misery.&lt;/p&gt;
  
  &lt;p&gt;In particular, it seems to me that &lt;em&gt;"This paper didn't show X"&lt;/em&gt; is, by itself, not a valid criticism.  It is an irrelevant factoid unless it negates or diminishes some other contribution in the paper.  If it is fair to argue that particular results are absent, then my first beef with every paper is going to be that it fails to resolve whether P &amp;ne; NP.&lt;/p&gt;
  
  &lt;p&gt;Of course, a paper should get more "contribution points" for a better and more thorough evaluation, but perhaps it's OK to leave some questions unanswered.  Particularly since it's often hard to predict which particular dimension or potential inefficiency the reviewers will be interested in.  Leaving certain questions unanswered is entirely compatible with the paper making other useful contributions.&lt;/p&gt;&lt;/li&gt;


 &lt;li&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://arxiv.org/corr/home"&gt;Submit to arXiv&lt;/a&gt;&lt;/b&gt;, bypassing the reviewing process entirely and letting other researchers judge what they want to read.  Subscribe to arXiv RSS feeds so you find out about other people's work more quickly.  Of course, arXiv currently has limited value for CS systems and networking researchers, since other such researchers tend not to look for papers there.  More on that later.&lt;/p&gt;&lt;/li&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;Adopt policies that tolerate some reviewer pessimism.&lt;/b&gt; As an example of what seems to me like a bad idea, a recent workshop had a reviewing policy that allowed a single reviewer to effectively veto a paper if they strongly disliked it.&lt;/p&gt;&lt;/li&gt;

 &lt;li&gt;&lt;p&gt;&lt;b&gt;Implement feedback yourself.&lt;/b&gt; If a conference doesn't provide a means for author feedback to reviewers, the reviewer could implement this herself by including in the review a way to provide feedback, e.g., a link to a Google Docs form that could preserve the anonymity of the reviewer and authors. Disadvantage: This only fixes a piece of the problem and might seem strange to PC chairs and authors. &lt;/p&gt;&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Other past suggestions include reducing PC workloads, making reviews public, maintaining memory across conferences (so resubmissions are associated with old reviews), and much more; see links above and below.&lt;/p&gt;

&lt;p&gt;The open question is, which of these will best improve the quality of reviews and, ultimately, CS research? My guess is that any good solution will include some form of author response to reviewers, but there are several ways to do that.&lt;/p&gt;

&lt;em&gt;There's voluminous past discussion on this topic.  Related links:&lt;/em&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href="http://www.usenix.org/event/wowcs08/tech/"&gt;Workshop on Organizing Workshops, Conferences, and Symposia for Computer Systems&lt;/a&gt;, in particular, see papers/talks in the 11:00 a.m. session.  One became &lt;a href="http://cacm.acm.org/magazines/2009/1/15664-viewpoint-scaling-the-academic-publication-process-to-internet-scale/pdf"&gt;an article in CACM&lt;/a&gt;.&lt;/li&gt;

 &lt;li&gt;&lt;a href="http://ccr.sigcomm.org/drupal/?q=node/348"&gt;Open Issues in Organizing Computer Systems Conferences&lt;/a&gt; (Jeffrey Mogul and Tom Anderson, CCR July 2008)&lt;/li&gt;

 &lt;li&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=1462581"&gt;Paper and proposal reviews: is the process flawed?&lt;/a&gt; (summary of a panel session at the 2008 CRA Conference at Snowbird)&lt;/li&gt;

 &lt;li&gt;&lt;a href="http://www.nature.com/nature/journal/v473/n7348/full/473452b.html"&gt;Peer reviews: make them public&lt;/a&gt; (Nature correspondence)&lt;/li&gt;

 &lt;li&gt;&lt;a href="http://go.nature.com/witfzb"&gt;Peer reviews: some are already public&lt;/a&gt; (Nature correspondence)&lt;/li&gt;
 
 &lt;li&gt;&lt;a href="http://cacm.acm.org/blogs/blog-cacm/100284-how-should-peer-review-evolve/fulltext"&gt;How Should Peer Review Evolve?&lt;/a&gt; (Ed Chi, blog@cacm)&lt;/li&gt;
 
 &lt;li&gt;&lt;a href="http://cacm.acm.org/magazines/2009/5/24632-conferences-vs-journals-in-computing-research/fulltext"&gt;Conferences vs. Journals in Computing Research&lt;/a&gt; (Moshe Vardi, CACM 2009)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; SIGCOMM 2012 &lt;a href="http://conferences.sigcomm.org/sigcomm/2012/cfp.php"&gt;will have rebuttals&lt;/a&gt;.  Also, &lt;a href="http://cacm.acm.org/blogs/blog-cacm/123611-the-nastiness-problem-in-computer-science/fulltext"&gt;Bertrand Meyer&lt;/a&gt; has something to say about CS reviewing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-3711995202136207233?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/3711995202136207233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/08/whats-wrong-with-computer-science.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3711995202136207233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3711995202136207233'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/08/whats-wrong-with-computer-science.html' title='What&apos;s wrong with computer science reviewing?'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1317918464894659930</id><published>2011-04-13T19:59:00.000-07:00</published><updated>2011-04-13T21:15:13.415-07:00</updated><title type='text'>Vote Tuesday!</title><content type='html'>&lt;p&gt;6-year-old Tuesday Muse raised money for Japan with her artwork, and now &lt;a href="http://nameoftheyear.blogspot.com/2011/04/its-tuesday.html"&gt;she's totally excited&lt;/a&gt; to be in the Name of the Year competition.  But she's in a tough match against Joe Shortsleeve.  Why not help her out? &lt;b&gt;&lt;a href="http://nameoftheyear.blogspot.com/2011/04/2011-noty-bulltron-regional-part-3.html"&gt;Vote Tuesday Muse for Name of the Year!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;center&gt;&lt;a href="http://nameoftheyear.blogspot.com/2011/04/2011-noty-bulltron-regional-part-3.html"&gt;&lt;img src="http://3.bp.blogspot.com/-uWv7nDf0-bM/TaR8bXSfCDI/AAAAAAAAAH8/9tInN9S5prU/s1600/photo-1-1.JPG"&gt;&lt;/a&gt;&lt;/center&gt;

&lt;p&gt;NOTY has a strong ballot of 64 names this year &amp;mdash; including Yolanda Supersad, Dr. Loveday Conquest, Courvoisier Winetavius Richardson, and &lt;a href="http://www.mercedes-bunz.de/about/"&gt;Mercedes Bunz&lt;/a&gt;, who, some readers of this blog may be interested to note, has penned a &lt;a href="http://www.amazon.de/Vom-Speicher-Verteiler-Geschichte-Internet/dp/3865990258/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1253443504&amp;sr=8-1"&gt;history of the Internet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As long as I'm linking...&lt;/p&gt;

&lt;center&gt;
&lt;table border=0&gt;

&lt;tr&gt;&lt;td width="50%"&gt;&lt;b&gt;&lt;a href="https://american.redcross.org/site/Donation2?5052.donation=form1&amp;df_id=5052&amp;idb=0"&gt;Donate to Japan disaster relief&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;td width="50%"&gt;&lt;a href="https://american.redcross.org/site/Donation2?5052.donation=form1&amp;df_id=5052&amp;idb=0"&gt;&lt;img src="https://american.redcross.org/images/RCO/logo.gif"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.mathjax.org/"&gt;&lt;img src="http://www.mathjax.org/wp-content/uploads/2009/05/accessibility_s125_v3.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;a href="http://www.mathjax.org/"&gt;MathJax: Beautiful math in all browsers&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td height=100&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Speed_of_light_from_Earth_to_Moon.gif"&gt;A visualization of the speed of light&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Speed_of_light_from_Earth_to_Moon.gif"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Speed_of_light_from_Earth_to_Moon.gif/120px-Speed_of_light_from_Earth_to_Moon.gif" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.mymodernmet.com/profiles/blogs/interview-mysterious-postit"&gt;&lt;img src="http://2.bp.blogspot.com/-a1wiiRq5ddI/TaZs0UMwB9I/AAAAAAAAAHw/bd-5IeUFk8Y/s320/johnkennmortensen1.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;a href="http://www.mymodernmet.com/profiles/blogs/interview-mysterious-postit"&gt;Post-it note monsters&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;b&gt;&lt;a href="http://www.davidkunzman.net/extern/siebel/index.php"&gt;Our CS building at Illinois&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.davidkunzman.net/extern/siebel/index.php"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 160px; height: 145px;" src="http://3.bp.blogspot.com/-JKknD6j1WTU/TaZuNgg4rBI/AAAAAAAAAH4/SgwE_QlzBgo/s320/SiebelMiniPlanet_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5595280765399641106" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.youtube.com/watch?v=SczraSQE3MY"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 130px; height: 97px;" src="http://1.bp.blogspot.com/-6MToaSRgu14/TaZvUBuAGbI/AAAAAAAAAIA/YbN3ItvIeFs/s320/safe_image.php.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5595281976903866802" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=SczraSQE3MY"&gt;Scott Aaronson's ad for theoretical computer science&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/watch?v=yZAXQHgZNRc"&gt;How real people react to that Stringy Haired Ghost Girl from The Ring or maybe The Grudge (via Philip Levis)&lt;/a&gt;&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;img style="cursor:pointer; cursor:hand;width: 130px; height: 97px;" src="http://1.bp.blogspot.com/-ZsJj-9x5q4k/TaZwD9Edz8I/AAAAAAAAAII/GimPq5WuR9o/s320/safe_image-1.php.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5595282800289632194" /&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;&lt;a href="http://iml.univ-mrs.fr/~girard/mustard/article.html"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 155px;" src="http://3.bp.blogspot.com/-JDci9hP8wZ0/TaZzyYG1edI/AAAAAAAAAIQ/CbsSj68mN_Q/s200/tumblr_ljbeg78zMz1qh0u8vo1_400.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5595286896356194770" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;"It is immediate from the definition that a given classical watch may have several extensions into a &lt;a href="http://iml.univ-mrs.fr/~girard/mustard/article.html"&gt;mustard watch&lt;/a&gt;, whereas given a mustard watch W' there is only one underlying classical watch W from which W' is derived." (via &lt;a href="http://fasterdonuts.tumblr.com/"&gt;Jeff Erickson&lt;/a&gt;)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;


&lt;/table&gt;


&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1317918464894659930?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1317918464894659930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/04/vote-tuesday.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1317918464894659930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1317918464894659930'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/04/vote-tuesday.html' title='Vote Tuesday!'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-uWv7nDf0-bM/TaR8bXSfCDI/AAAAAAAAAH8/9tInN9S5prU/s72-c/photo-1-1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-4370693789863945161</id><published>2011-02-12T23:52:00.000-08:00</published><updated>2011-12-02T17:46:33.442-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Attractive scientific plots with gnuplot</title><content type='html'>&lt;p&gt;I use &lt;a href="http://www.gnuplot.info/"&gt;gnuplot&lt;/a&gt; for nearly all my graph-drawing for academic publications.  On the whole, it's clean and relatively flexible, and that combined with inertia has been enough to keep me from trying interesting alternatives like &lt;a href="http://matplotlib.sourceforge.net/"&gt;matplotlib&lt;/a&gt;, &lt;a href="http://plot.micw.eu/"&gt;Plot&lt;/a&gt;, &lt;a href="http://ploticus.sourceforge.net/doc/welcome.html"&gt;ploticus&lt;/a&gt;, and &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt;.  However, gnuplot's default output is not especially pretty.  I often see graphs in papers that look like this...&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-08e5_JzkcIk/TVeOED2iosI/AAAAAAAAAHY/_eNeaC6XEDU/s1600/default_gnuplot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/-08e5_JzkcIk/TVeOED2iosI/AAAAAAAAAHY/_eNeaC6XEDU/s400/default_gnuplot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5573079264298967746" /&gt;&lt;/a&gt;

&lt;p&gt;...or worse, if it's been bitmapped rather than using EPS or PDF. With some tweaking, however, one can produce much more attractive output.  I would much rather look at plots like this:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-S6i5b6GJZ1c/TaCn_Iviu1I/AAAAAAAAAHo/YXlEltnqovQ/s1600/beautiful-gnuplot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 241px;" src="http://1.bp.blogspot.com/-S6i5b6GJZ1c/TaCn_Iviu1I/AAAAAAAAAHo/YXlEltnqovQ/s400/beautiful-gnuplot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5593655440314645330" /&gt;&lt;/a&gt;

&lt;p&gt;In fact it looks better.  Blogger doesn't seem to support any vector image format, but here are the &lt;a href="http://brighten.bigw.org/youinfinitesnake/gnuplot/template.pdf"&gt;pdf version&lt;/a&gt; and the &lt;a href="http://brighten.bigw.org/youinfinitesnake/gnuplot/template.svg"&gt;svg version&lt;/a&gt;.  To produce the PDF version, you need gnuplot 4.4's pdfcairo terminal. Below, you can see the gnuplot files for the above two plots.&lt;/p&gt;

&lt;center&gt;
&lt;table border="0" cellspacing="1" cellpadding="0" width="500" bgcolor="#C6C6C6"&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0" align=center&gt;
   &lt;button onclick="document.getElementById('boring_default_gnuplot').style.display = 'inline'"&gt;Expand boring default&lt;/button&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0"&gt;
&lt;div id="boring_default_gnuplot" style="display:none;"&gt;
&lt;pre&gt;
set terminal postscript eps color

set output "boring_default.eps"
set xlabel "x axis label"
set ylabel "y axis label"

set key bottom right

set xrange [0:1]
set yrange [0:1]

plot "template.dat" \
   index 0 title "Example line" w lp, \
"" index 1 title "Another example" w lp
&lt;/pre&gt;
&lt;/div&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;

&lt;table border="0" cellspacing="1" cellpadding="0" width="500" bgcolor="#C6C6C6"&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0" align=center&gt;
   &lt;button onclick="document.getElementById('beautified_gnuplot').style.display = 'inline'"&gt;Expand beautified gnuplot (PDF version)&lt;/button&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0"&gt;
&lt;div id="beautified_gnuplot" style="display:none;"&gt;
&lt;pre&gt;
# Note you need gnuplot 4.4 for the pdfcairo terminal.

set terminal pdfcairo font "Gill Sans,9" linewidth 4 rounded

# Line style for axes
set style line 80 lt rgb "#808080"

# Line style for grid
set style line 81 lt 0  # dashed
set style line 81 lt rgb "#808080"  # grey

set grid back linestyle 81
set border 3 back linestyle 80 # Remove border on top and right.  These
             # borders are useless and make it harder
             # to see plotted lines near the border.
    # Also, put it in grey; no need for so much emphasis on a border.
set xtics nomirror
set ytics nomirror

#set log x
#set mxtics 10    # Makes logscale look good.

# Line styles: try to pick pleasing colors, rather
# than strictly primary colors or hard-to-see colors
# like gnuplot's default yellow.  Make the lines thick
# so they're easy to see in small plots in papers.
set style line 1 lt rgb "#A00000" lw 2 pt 1
set style line 2 lt rgb "#00A000" lw 2 pt 6
set style line 3 lt rgb "#5060D0" lw 2 pt 2
set style line 4 lt rgb "#F25900" lw 2 pt 9

set output "template.pdf"
set xlabel "x axis label"
set ylabel "y axis label"

set key bottom right

set xrange [0:1]
set yrange [0:1]

plot "template.dat" \
   index 0 title "Example line" w lp ls 1, \
"" index 1 title "Another example" w lp ls 2
&lt;/pre&gt;
&lt;/div&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;br&gt;

&lt;table border="0" cellspacing="1" cellpadding="0" width="500" bgcolor="#C6C6C6"&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0" align=center&gt;
   &lt;button onclick="document.getElementById('beautified_gnuplot_svg').style.display = 'inline'"&gt;Expand beautified gnuplot (SVG version)&lt;/button&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td bgcolor="#E0E0E0"&gt;
&lt;div id="beautified_gnuplot_svg" style="display:none;"&gt;
&lt;pre&gt;
set terminal svg size 320,240 fname "Gill Sans" fsize 9 rounded dashed

# Line style for axes
set style line 80 lt 0
set style line 80 lt rgb "#808080"

# Line style for grid
set style line 81 lt 3  # dashed
set style line 81 lt rgb "#808080" lw 0.5  # grey

set grid back linestyle 81
set border 3 back linestyle 80 # Remove border on top and right.  These
             # borders are useless and make it harder
             # to see plotted lines near the border.
    # Also, put it in grey; no need for so much emphasis on a border.
set xtics nomirror
set ytics nomirror

#set log x
#set mxtics 10    # Makes logscale look good.

# Line styles: try to pick pleasing colors, rather
# than strictly primary colors or hard-to-see colors
# like gnuplot's default yellow.  Make the lines thick
# so they're easy to see in small plots in papers.
set style line 1 lt 1
set style line 2 lt 1
set style line 3 lt 1
set style line 4 lt 1
set style line 1 lt rgb "#A00000" lw 2 pt 7
set style line 2 lt rgb "#00A000" lw 2 pt 9
set style line 3 lt rgb "#5060D0" lw 2 pt 5
set style line 4 lt rgb "#F25900" lw 2 pt 13

set output "template.svg"
set xlabel "x axis label"
set ylabel "y axis label"

set key bottom right

set xrange [0:1]
set yrange [0:1]

plot "template.dat" \
   index 0 title "Example line" w lp ls 1, \
"" index 1 title "Another example" w lp ls 2
&lt;/pre&gt;
&lt;/div&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;/center&gt;

&lt;p&gt;Now here's something for which I would pay (some) real money: a gnuplot terminal which outputs directly to Keynote.  Then, for example, during a presentation, one could have lines in the plot appear one at a time, explaining each without the distraction of showing irrelevant objects. This should actually be quite doable since Keynote's format is just a zipped XML.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update 2011.04.09:&lt;/b&gt;  Mac users of macports may note that the default install of gnuplot for some reason &lt;a href="https://trac.macports.org/ticket/27893"&gt;excludes pdfcairo&lt;/a&gt;.  Abhinav Bhatele writes with instructions for enabling pdfcairo in macports:

&lt;blockquote&gt;
&lt;pre&gt;
$ sudo port edit gnuplot

Add these lines somewhere in the file (I added them before the lua variant):

variant pangocairo description "Enable pdfcairo" {
     depends_lib-append      port:pango
     configure.args-delete   --without-cairo
     configure.args-append   --with-cairo
}

$ sudo port info gnuplot

Just to check that pangocairo variant exists. And then:

$ sudo port uninstall gnuplot
$ sudo port install gnuplot +pangocairo

You'll need to keep in mind that if you do port selfupdate,
the edited version of the portfile might get overwritten.
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;b&gt;Update to the update 2011.12.04:&lt;/b&gt; Looks like macports now includes the pangocairo variant, but still does not install it by default; so it should work if you run just the last two lines.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update 2011.04.09:&lt;/b&gt; Added SVG version and made it slightly more beautiful.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-4370693789863945161?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/4370693789863945161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/02/attractive-scientific-plots-with.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/4370693789863945161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/4370693789863945161'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2011/02/attractive-scientific-plots-with.html' title='Attractive scientific plots with gnuplot'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-08e5_JzkcIk/TVeOED2iosI/AAAAAAAAAHY/_eNeaC6XEDU/s72-c/default_gnuplot.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-8918885728786828498</id><published>2010-12-28T13:19:00.000-08:00</published><updated>2010-12-28T13:21:47.301-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>A peer-reviewing horror story</title><content type='html'>&lt;p&gt;&lt;a href="http://www.gutenberg.ca/ebooks/james-runes/james-runes-00-h.html"&gt;A peer-reviewing horror story&lt;/a&gt;.  Don't let this happen to you.&lt;/p&gt;

&lt;p&gt;Also &lt;a href="http://www.gutenberg.org/ebooks/9629"&gt;available&lt;/a&gt; in various ebook formats.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-8918885728786828498?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/8918885728786828498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/12/peer-reviewing-horror-story.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8918885728786828498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8918885728786828498'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/12/peer-reviewing-horror-story.html' title='A peer-reviewing horror story'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-263184864829197008</id><published>2010-10-23T22:05:00.000-07:00</published><updated>2010-10-24T00:47:16.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Google Frequency Plotter</title><content type='html'>&lt;script src="http://www.google.com/uds/api?file=uds.js&amp;amp;v=1.0" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
    //&lt;![CDATA[

 function trim(s) {
  return s.replace(/\s+$/, '').replace(/^\s+/, '');
 }

 // This function scales the submitted values so that
 // maxVal becomes the highest value.
 var EXTENDED_MAP=
   'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.';
 var EXTENDED_MAP_LENGTH = EXTENDED_MAP.length;
 function extendedEncode(arrVals, maxVal) {
   var chartData = 'e:';

   for(i = 0, len = arrVals.length; i &lt; len; i++) {
     // In case the array vals were translated to strings.
     var numericVal = new Number(arrVals[i]);
     // Scale the value to maxVal.
     var scaledVal = Math.floor(EXTENDED_MAP_LENGTH * 
         EXTENDED_MAP_LENGTH * numericVal / maxVal);

     if(scaledVal &gt; (EXTENDED_MAP_LENGTH * EXTENDED_MAP_LENGTH) - 1) {
       chartData += "..";
     } else if (scaledVal &lt; 0) {
       chartData += '__';
     } else {
       // Calculate first and second digits and add them to the output.
       var quotient = Math.floor(scaledVal / EXTENDED_MAP_LENGTH);
       var remainder = scaledVal - EXTENDED_MAP_LENGTH * quotient;
       chartData += EXTENDED_MAP.charAt(quotient) + EXTENDED_MAP.charAt(remainder);
     }
   }

   return chartData;
 }



    var app;
    var searchControl = new GSearchControl();
 var counts = new Array();
 var pendingQueries = new Array();
 pendingQueries[0]="new york";
 pendingQueries[1]="champaign";
 var currentQuery;
 var isRangeQuery = false;
 var maxPoints = 51;
 
 var template;
 var domain;
 var underscores = /_+/g;

    function OnLoad() {
      app = new App();
    }

    function App() {
  // tell the search control to call be on start/stop
  searchControl.setSearchCompleteCallback(app, App.prototype.OnSearchComplete);
  var searcher = new GwebSearch();
  var options = new GsearcherOptions();
  searchControl.addSearcher(searcher, options);
  searchControl.draw(document.getElementById("searchcontrol"));
    }

    App.prototype.OnSearchComplete = function(sc, searcher) {
  if (searcher.cursor === undefined) {
   counts[currentQuery] = 0;
   appendStatus("!");
  }
  else {
   counts[currentQuery] = parseInt(searcher.cursor.estimatedResultCount);
   appendStatus(".");
  }
  executePending();
    }

    App.prototype.OnSearchStarting = function(sc, searcher, query) {}
    App.prototype.OnKeep = function(result) {}

    function method_closure(object, method, opt_argArray) {
      return function() {
        return method.apply(object, opt_argArray);
      }
    }

    GSearch.setOnLoadCallback(OnLoad);


 function executePending() {
  while (pendingQueries.length &gt; 0 &amp;&amp; counts[pendingQueries[pendingQueries.length - 1]]) {
   // Skip over the ones we've done  
   pendingQueries.pop();
   appendStatus(".");
  }
  if (pendingQueries.length &gt; 0) {
   q = pendingQueries.pop();
   currentQuery = q;
   searchControl.cancelSearch();
   searchControl.execute(q); 
  }
  else {
   allDone();
  }
 }

 function message(m) {
  document.getElementById('messages').innerHTML += m + "&lt;br&gt;";  
 }

 function alertMsg(m) {
  document.getElementById('alertBox').innerHTML += "&lt;font color=red&gt;[!]&lt;/font&gt; " + m;     
 }
 
 function clearAlert() {
  document.getElementById('alertBox').innerHTML = "";  
 }

 function appendStatus(m) {
  document.getElementById('statusBox').innerHTML += m;  
 }

 function setStatus(m) {
  document.getElementById('statusBox').innerHTML = m;  
 }

 function formatQuery(x) {
  return template.replace(underscores, x);
 }

 function execute() {
  pendingQueries = new Array();
  template = document.getElementById("inputTemplate").value;
  
  clearAlert();

  if (template.indexOf("_") &lt; 0) {
   alertMsg("You didn't enter a _ in the first text field.");
  }
  
  setStatus("Getting data");
  document.getElementById('loadingImg').innerHTML =  '&lt;img src="http://brighten.bigw.org/youinfinitesnake/loading_indicator.gif" border=0&gt;';

  domainString = document.getElementById("inputDomain").value;
  if (domainString.match(/^([0-9]+)-([0-9]+)$/)) {
   isRangeQuery = true;
   var endpoints = domainString.match(/[0-9]+/g);
   var start = parseInt(endpoints[0]);
   var end   = parseInt(endpoints[1]);
   var stepSize = Math.max(1, Math.ceil((end - start + 1) / maxPoints));
   if (stepSize &gt; 1) {
    alertMsg("Exceeded limit of " + maxPoints + " data points; I'll plot " + start + ", " + (start + stepSize) + ",  " + (start + 2*stepSize) + ", ...");
   }
   domain = new Array();
   var j = 0;
   for (i = start; i &lt;= end; i += stepSize) {
    domain[j] = i;
    pendingQueries[j] = formatQuery(i);
    j++;
   }
  }
  else {
   isRangeQuery = false;
   domainString = domainString.replace(/,\s*$/, '');
   domain = domainString.split(",");
   for (i = 0; i &lt; domain.length; i++) {
    domain[i] = trim(domain[i]);
    q = formatQuery(domain[i]);
    pendingQueries[i] = q;
   }   
  }
  pendingQueries.reverse();
  executePending();
 }


 function allDone() {
  appendStatus("done.");
  document.getElementById('loadingImg').innerHTML = '';
  
  max_y = 0;
  var y_values = new Array();
  for (i = 0; i &lt; domain.length; i++) {
   y_values[i] = counts[formatQuery(domain[i])];
   if (y_values[i] &gt; max_y) {
    max_y = y_values[i];
   }
  }
  
  var imgURL;
  
  if (isRangeQuery) {
   imgURL = "http://chart.apis.google.com/chart?chxr=0,0," + max_y + "|1," + domain[0] + "," + domain[domain.length - 1] + "&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=" + extendedEncode(y_values,max_y) + "&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=" + escape("Google results for " + template);
  }
  else {
   var xlabels = "";
   var maxLen = Math.max(1, Math.floor(70 / domain.length));
   for (i = 0; i &lt; domain.length; i++) {
    if (domain[i].length &gt; maxLen) {
     xlabels += "|" + domain[i].substring(0,maxLen-1);
    }
    else {
     xlabels += "|" + escape(domain[i]);
    }
   }
   imgURL = "http://chart.apis.google.com/chart?chxr=1,0," + max_y + "&amp;chxt=x,y&amp;chxl=0:" + xlabels +  "&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=" + extendedEncode(y_values,max_y) + "&amp;chtt=" + escape("Google results for " + template);
  }
  document.getElementById("resultPlot").src = imgURL;
  document.getElementById("plotPermalink").href = imgURL;
 }
 
 function checkEnter(e){
  var characterCode;
  if (e &amp;&amp; e.which) { characterCode = e.which }
  else { e = event; characterCode = e.keyCode }
  if (characterCode == 13) { execute(); }
  return (characterCode != 13)
  }

    //]]&gt;
    &lt;/script&gt;

 
 &lt;p&gt;Here's an app version of &lt;a href="http://xkcd.com/715/"&gt;this xkcd comic&lt;/a&gt; that lets you plot the frequency of phrases according to Google searches.&lt;/p&gt;

 &lt;center&gt;
 &lt;table border=0 cellspacing=1 cellpadding=0 width=400 bgcolor=#C6C6C6&gt;
  &lt;tr&gt;&lt;td align=center bgcolor=#E0E0E0&gt;
   &lt;table border=0 width=400&gt;
    &lt;tr&gt;
     &lt;td align=right valign=middle&gt;Plot&lt;/td&gt;
     &lt;td align=left valign=middle&gt;&lt;input type=text value="&amp;quot;my favorite number is _&amp;quot;" size="40" maxlength="80" id="inputTemplate" onKeyPress="return checkEnter()"&gt;&lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;
     &lt;td align=right valign=top&gt;for _ in&lt;/td&gt;
     &lt;td align=left&gt;
      &lt;textarea rows=2 cols=40 onKeyPress="return checkEnter()" id="inputDomain"&gt;0-30&lt;/textarea&gt;&lt;br&gt;
      &lt;font color="#555555" size="-1"&gt;Enter a range like 1-10 or&lt;br&gt;a list like monday,tuesday,wednesday&lt;/font&gt;
     &lt;/td&gt;
    &lt;/tr&gt;&lt;tr&gt;
     &lt;td colspan=2 align=center&gt;&lt;input type=button onclick="execute();" value="Execute"&gt;&lt;/td&gt;
    &lt;/tr&gt;
   &lt;/table&gt;
  &lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td bgcolor=#E0E0E0&gt;
   &lt;table border=0 width=400&gt;&lt;tr&gt;&lt;td width=30&gt;
    &lt;div id="loadingImg" style="background-color:#E0E0E0; width:30px; height:30px;"&gt;&lt;/div&gt;
   &lt;/td&gt;&lt;td&gt;
    &lt;div id="statusBox" style="background-color:#E0E0E0;"&gt;&lt;/div&gt;
   &lt;/td&gt;&lt;/tr&gt;
   &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;div id="alertBox" style="background-color:#E0E0E0;"&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
   &lt;/table&gt;
  &lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td align=center&gt;
   &lt;img id="resultPlot" src="http://chart.apis.google.com/chart?chxr=0,0,151|1,0,30&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:CHPrOaqYXvYKdq8L..dPLBPrQGoQIeMtHoLcGWEqC9KLIeYKhDHoDZGWEqBsBs&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22my%20favorite%20number%20is%20_%22" width=400 height=300&gt;
   &lt;br&gt;&lt;a href="http://chart.apis.google.com/chart?chxr=0,0,151|1,0,30&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:CHPrOaqYXvYKdq8L..dPLBPrQGoQIeMtHoLcGWEqC9KLIeYKhDHoDZGWEqBsBs&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22my%20favorite%20number%20is%20_%22" id="plotPermalink"&gt;Permalink to this chart&lt;/a&gt;
  &lt;/td&gt;&lt;/tr&gt;
 &lt;/table&gt;
&lt;/center&gt;
 
 &lt;p&gt;Some examples below the fold.&lt;/p&gt;
 
 &lt;a name='more'&gt;&lt;/a&gt;

 &lt;h4&gt;Sanity checks&lt;/h4&gt;
 &lt;center&gt;&lt;p&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=0,0,512|1,1,15&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:__IgFoGQ..DgCgHwCwlAEAFYAoAQAI&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22i%20have%20_%20fingers%22"&gt;&lt;/p&gt;

 &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=x4o-TeMHys0"&gt;&lt;img border=0 src="http://chart.apis.google.com/chart?chxr=1,0,167000&amp;chxt=x,y&amp;chxl=0:|heat|price|cost|tuition|rent&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:AAAAAAAA..&amp;chtt=Google%20results%20for%20%22the%20_%20is%20too%20damn%20high%22"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/center&gt;

 &lt;h4&gt;How convenient.&lt;/h4&gt;

 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=1,0,81&amp;chxt=x,y&amp;chxl=0:|sunday|monday|tuesday|wednesday|thursday|friday|saturday&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:h-..W6fmeBxxgZ&amp;chtt=Google%20results%20for%20%22I%20was%20sick%20on%20_%22"&gt;&lt;/center&gt;

 &lt;h4&gt;Politics&lt;/h4&gt;

 &lt;center&gt;
  &lt;p&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=1,0,123&amp;chxt=x,y&amp;chxl=0:|obama|mccain|palin|toomey|sestak&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:..LcBC__CF&amp;chtt=Google%20results%20for%20%22i%20donated%20to%20_%22"&gt;
  &lt;p&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=1,0,134&amp;chxt=x,y&amp;chxl=0:|republican|democrat|conservati|liberal|independent|tea%20party&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:..xMKgCYBbA9&amp;chtt=Google%20results%20for%20%22i%20will%20vote%20for%20a%20_%22"&gt;&lt;br&gt;[Thanks: Bryan]&lt;/p&gt;
 &lt;/center&gt;

 &lt;h4&gt;Most frequent birth year: 1982&lt;/h4&gt;
 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=0,0,2100|1,1880,2010&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:AjAfAnAVATAXANA0AdAdBAAdBIAbAyBfBhA0AwBVBnCaBnBfBbBrBtBzCGBfD5DBCMCxD.DSCxDaD.EYGGE.PiFuFbG6GEGyH1HfKJHEIeJLUgLJJyLTOUOQQRPaRXUUQDSjbRa6YQaoh1aifsZYgnbljqcdcSdYoOeHgnauiIfYbricfslLu7gnjqexj9o1g6rRkRnA2Po1..oOlyqqhhoidKcvmGcSYnSxSlQhNOIiFhDgCSBvBdA4A0BABEAqBKAbA0&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22I%20was%20born%20in%20___%22"&gt;&lt;/center&gt;
 
 &lt;h4&gt;What you've got&lt;/h4&gt;

 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=1,0,15000&amp;chxt=x,y&amp;chxl=0:|normal|beautiful|thin|smart|stupid|fat&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:A3BiGGNLVa..&amp;chtt=Google%20results%20for%20%22I%27m%20too%20_%22"&gt;&lt;/center&gt;

 &lt;h4&gt;Mind your phone&lt;/h4&gt;

 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=1,0,48500&amp;chxt=x,y&amp;chxl=0:|nerve|house|job|keys|money|phone|wife|husband|mind|wallet&amp;chbh=a,0,2&amp;chs=400x300&amp;cht=bvg&amp;chco=A2C180&amp;chd=e:CICz..DYEAoPF-HvZNII&amp;chtt=Google%20results%20for%20%22i%20lost%20my%20_%22"&gt;&lt;/center&gt;

 &lt;h4&gt;Procreation&lt;/h4&gt;

 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=0,0,17400|1,0,15&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:AGAQ..79fHPqFsC.ByBFBAAjAgARAKAM&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22I%20have%20_%20children%22"&gt;&lt;/center&gt;

 &lt;center&gt;&lt;img src="http://chart.apis.google.com/chart?chxr=0,0,498|1,0,15&amp;chxt=y,x&amp;chs=400x300&amp;cht=lc&amp;chco=3D7930&amp;chd=e:____00..8h9Ct4aFeMRmW4RmOpKaHtIG&amp;chg=-1,-1,1,1&amp;chls=3,4,0&amp;chm=B,C5D4B5BB,0,0,0&amp;chtt=Google%20results%20for%20%22I%20have%20_%20grandchildren%22"&gt;&lt;/center&gt;


 &lt;p&gt;Post permalinks to your favorites in the comments below.&lt;/p&gt;

 &lt;p&gt;Disclaimers: The number of search results reported by Google's search API is known to be occasionally bogus and is not a reliable indicator of anything in particular.  Also, there's some bug here if you do a range query with only a single value. Finally, an exclamation point in the status message indicates an error in one query or the lack of any results.&lt;/p&gt;
 

    &lt;div id="searchcontrol" style="display:none;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-263184864829197008?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/263184864829197008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/google-frequency-plotter.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/263184864829197008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/263184864829197008'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/google-frequency-plotter.html' title='Google Frequency Plotter'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-2661348724708897549</id><published>2010-10-19T18:11:00.000-07:00</published><updated>2010-10-19T18:14:26.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Ig Nobel candidate</title><content type='html'>"University of Ljubljana researcher Borut Povse is conducting experiments in which a robot limb repeatedly hits human volunteers on the arm to evaluate human-robot pain thresholds in order to facilitate adherence to Isaac Asimov's first law of robotics, which prohibits robots from injuring people." [&lt;a href="http://technews.acm.org/archives.cfm?fo=2010-10-oct%2Foct-18-2010.html#487652"&gt;ACM TechNews&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-2661348724708897549?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/2661348724708897549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/ig-nobel-candidate.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2661348724708897549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2661348724708897549'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/ig-nobel-candidate.html' title='Ig Nobel candidate'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1362849283696792726</id><published>2010-10-02T23:27:00.000-07:00</published><updated>2010-10-02T23:29:38.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Public reviewing</title><content type='html'>&lt;p&gt;The New York Times has a &lt;a href="http://www.nytimes.com/2010/08/24/arts/24peer.html"&gt;piece&lt;/a&gt; on public review, even to the point of crowdsourcing, as a partial alternative to peer review for scholarly publications.  The interesting bit is that at least one journal, Shakespeare Quarterly, has tested this open review process.  You can &lt;a href="http://mediacommons.futureofthebook.org/mcpress/ShakespeareQuarterly_NewMedia/"&gt;view the submitted papers and discussion&lt;/a&gt; (including a paper providing an information-theoretic analysis of Shakespeare).  The interface seems well designed and allows commenting on individual paragraphs.&lt;/p&gt;

&lt;p&gt;There are doubtless situations where this opens the reviewing process to trolls, flamewars, or inerudite remarks.  On the other hand, assuming the comments are used to help inform a final judgement by experts, there could be advantages.  Reviewing a paper is sometimes like an &lt;a href="http://en.wikipedia.org/wiki/NP_(complexity)"&gt;NP&lt;/a&gt; search problem, to find the contributions and weaknesses.  Public review could be seen as using crowdsourcing to tackle the search problem.  Certain comments would be easily verifiable by an expert, even without relying on the trustworthiness of the anonymous commenter, yet would not necessarily have been noticed by any particular expert. (The same easy-verification property is one reason Wikipedia is useful even when you're looking for a reliable answer to a question.)&lt;/p&gt;

&lt;p&gt;In computer networking research, the closest we come to a collaborative, real-time form of reviewing is &lt;a href="http://www.sigcomm.org/learn/computer-communication-review/"&gt;Computer Communication Review&lt;/a&gt; which has just recently started returning reviews to authors as they are submitted, and allowing authors to comment on the reviews.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Unrelated fun ...&lt;/b&gt; here's &lt;a href="http://seaquence.org/about/"&gt;Seaquence&lt;/a&gt;, a clever visualization of musical composition.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1362849283696792726?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1362849283696792726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/public-reviewing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1362849283696792726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1362849283696792726'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/10/public-reviewing.html' title='Public reviewing'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-9103386909562085246</id><published>2010-09-14T21:56:00.000-07:00</published><updated>2010-09-15T22:01:48.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Programming Language Wars: The Movie</title><content type='html'>&lt;script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
      google.load('visualization', '1', {'packages':['motionchart']});
      google.setOnLoadCallback(initChart);

 var data;
 var chart;
 var options;

    function initChart() {
        data = new google.visualization.DataTable();
        data.addColumn('string', 'Language');
        data.addColumn('number', 'System');
        data.addColumn('number', 'Source code length (gzipped)');
        data.addColumn('number', 'CPU time');
        data.addColumn('number', 'Real time');
        data.addColumn('number', 'Memory');

        data.addRows([

   ['Ada 2005 GNAT', 1, 2.49046321525886, 2.22030051296019, 2.22079455164586, 3.24460431654676],
   /* ['ATS', 1, 5.87123287671233, 1.08113257127841, 1.07997505907062, 1.54545454545455], */
   ['Ruby MRI', 1, 1.08327085079169, 203.635186997043, 203.538525997549, 6.86930576321142],
   ['C GNU gcc', 1, 2.76319610000612, 1.11410201082652, 1.11390393223971, 1.83789151219567],
   ['Lua LuaJIT', 1, 1.33319342945553, 3.41951865501443, 3.41769056131967, 4.76855234557221],
   ['Smalltalk VisualWorks', 1, 1.96385542168675, 15.5231700050419, 15.5201649862511, 45.5957446808511],
   ['Python CPython', 1, 1.23698090162114, 40.2360585552232, 39.8718332039757, 6.36814107571503],
   ['Scala', 1, 2.1135225375626, 2.25225838667211, 2.25580022701476, 48.1914893617021],
   ['Python PyPy', 1, 1.1320286308243, 29.4562501597268, 29.4520817853089, 21.1568942474479],
   ['Python IronPython', 1, 1.1320286308243, 94.9420970783002, 94.5160076268887, 60.2374645737955],
   ['Clean', 1, 1.94939740998577, 2.9739290914029, 3.06056335619509, 6.79450757575757],
   ['Erlang HiPE', 1, 1.68373493975904, 7.91854975477838, 7.91700274977085, 9.66906474820144],
   ['Fortran Intel', 1, 2.12891986062718, 2.17351598173516, 2.17579908675799, 1.65151515151515],
   ['C# Mono', 1, 2.34243784817494, 3.95123977478984, 3.89482115951512, 8.37798219922087],
   ['Perl', 1, 1.15963855421687, 91.2764887857695, 91.4549845440495, 9.79982948663297],
   ['C++ GNU g++', 1, 3.27330417323964, 1.09552032289321, 1.11630135378967, 2.37266787264421],
   ['Pascal Free Pascal', 1, 2.29385964912281, 2.1025641025641, 3.06829515679148, 1],
   ['Ruby 1.9', 1, 1.07594936708861, 58.5446160603177, 58.5044629792215, 7.63829787234043],
   ['F# Mono', 1, 2.07123287671233, 3.19433474056925, 3.19645856980704, 23.6515151515152],
   ['OCaml', 1, 1.45297121855758, 4.18870111198282, 4.22536601853578, 3.10347466707485],
   ['Go 6g 8g', 1, 1.83561643835616, 3.70685840707965, 4.54052511415525, 3.51063829787234],
   ['JavaScript TraceMonkey', 1, 1.13003095975232, 30.9263698630137, 30.9252283105023, 10.7279577258049],
   ['Java 6 -server', 1, 3.03791469194313, 2.35840707964602, 2.38126843657817, 34.3723404255319],
   ['Ruby JRuby', 1, 1.09059233449477, 38.4696163447642, 38.4476896823313, 290.431654676259],
   ['Java 6 -Xint', 1, 2.87616099071207, 19.8946886446886, 27.8594867094409, 27.8191489361702],
   ['Racket', 1, 1.69250180245133, 6.26768946882237, 6.26642330106626, 38.0824275362318],
   ['Lua', 1, 1.23847655430083, 24.5546778561873, 29.9254086889846, 4.54654460638845],
   ['JavaScript V8', 1, 1.16470588235294, 7.56996837328689, 7.5685609532539, 11.6702127659574],
   ['Mozart/Oz', 1, 1.49122807017544, 47.8086809151681, 47.7472258792552, 18.2727272727273],
   ['Python 3', 1, 1.25829127613554, 43.6493394271517, 43.340599133295, 7.99808391518318],
   ['Haskell GHC', 1, 1.92622950819672, 1.95268361581921, 1.95079088999737, 5.38693386515697],
   ['PHP', 1, 1.39859835219679, 81.6943635676469, 81.6026414244733, 17.4845261121857],
   ['Java 6 steady state', 1, 2.72054942133695, 1.57164189296655, 1.65501018035128, 59.060309199449],
   ['Lisp SBCL', 1, 2.71052631578947, 3.98901098901099, 3.9006266786034, 20.8769470404984],

   ['Perl', 4, 1.28631051752922, 107.31740123509, 58.9649489216799, 11.3617021276596],
   ['Ada 2005 GNAT', 4, 3.77710843373494, 2.22102682827182, 1.17410632447296, 3.30215827338129],
   ['C# Mono', 4, 2.34243784817494, 3.99070834864628, 2.56176821668685, 8.58570534876447],
   ['Fortran Intel', 4, 2.12891986062718, 2.16666666666667, 2.1689497716895, 1.66666666666667],
   /*['ATS', 4, 5.87123287671233, 1.08034423860202, 1.01035747021082, 1.70798601774671],*/
   ['Pascal Free Pascal', 4, 2.41232227488152, 3.08586414008967, 3.08334037697574, 1],
   ['C++ GNU g++', 4, 2.95041588986089, 1.12677344898508, 0.876784005951452, 2.39157330125182],
   ['C GNU gcc', 4, 2.76319610000612, 1.11587410119731, 1.00217762489001, 1.82102835665051],
   ['F# Mono', 4, 2.07123287671233, 3.19560579236461, 2.02868927589368, 23.6515151515152],
   ['Python CPython', 4, 1.23698090162114, 52.9688056076098, 21.4093599182969, 6.37170774920165],
   ['OCaml', 4, 1.79966611018364, 3.6324200913242, 2.89757103574702, 2.74820143884892],
   ['Go 6g 8g', 4, 1.83561643835616, 3.69898769803441, 4.53995433789954, 3.46808510638298],
   ['Ruby JRuby', 4, 1.07594936708861, 77.8747765503965, 46.967596506058, 195.932806324111],
   ['Java 6 -server', 4, 3.03791469194313, 3.09523809523809, 1.63989856297549, 34.1936758893281],
   ['Scala', 4, 2.13080168776371, 2.71660084434155, 1.51229148375768, 49.1808510638298],
   ['Java 6 -Xint', 4, 2.87616099071207, 19.8397435897436, 19.4565801253357, 21.498023715415],
   ['Python 3', 4, 1.42714007655028, 52.5521304242726, 27.1868700121705, 7.35390461152788],
   ['Haskell GHC', 4, 1.92622950819672, 3.90042536736272, 2.57593688362919, 4.73381294964029],
   ['PHP', 4, 1.42718060455142, 81.8553290850075, 44.2544899554814, 17.47695035461],
   ['Erlang HiPE', 4, 1.68373493975904, 18.1739071224295, 8.35889092575619, 11.2446043165468],
   ['Java 6 steady state', 4, 2.68717067474295, 1.60217854697841, 1.33917800512992, 52.6532671768565],
   ['Lisp SBCL', 4, 3.02397260273973, 4.003663003663, 3.91136974037601, 19.5606060606061],
         ]);
        chart = new google.visualization.MotionChart(document.getElementById('chart_div'));

  options = {};
  options['state'] = '{"xZoomedDataMax":3.77710843373494,"yLambda":0,"yAxisOption":"4","sizeOption":"5","orderedByX":false,"yZoomedDataMax":203.538525997549,"orderedByY":false,"duration":{"multiplier":1,"timeUnit":"Y"},"nonSelectedAlpha":0.4,"time":"1901","colorOption":"5","iconKeySettings":[],"yZoomedIn":false,"xZoomedDataMin":1.07594936708861,"yZoomedDataMin":0.876784005951452,"playDuration":2000,"xZoomedIn":false,"uniColorForNonSelected":false,"xAxisOption":"2","showTrails":true,"iconType":"BUBBLE","xLambda":1,"dimensions":{"iconDimensions":["dim0"]}}';
  options['width'] = 600;
  options['height'] = 400;
  options['showChartButtons'] = true;
        chart.draw(data, options);
    }
 function plotCPUvsTime() {
  options['state'] = '{"xZoomedDataMax":203.635186997043,"yLambda":0,"yAxisOption":"4","sizeOption":"5","orderedByX":false,"yZoomedDataMax":203.538525997549,"orderedByY":false,"duration":{"multiplier":1,"timeUnit":"Y"},"nonSelectedAlpha":0.4,"time":"1901","colorOption":"5","iconKeySettings":[],"yZoomedIn":false,"xZoomedDataMin":1.09552032289321,"yZoomedDataMin":0.876784005951452,"playDuration":2000,"xZoomedIn":false,"uniColorForNonSelected":false,"xAxisOption":"3","showTrails":true,"iconType":"BUBBLE","xLambda":0,"dimensions":{"iconDimensions":["dim0"]}}';
  chart.draw(data, options);
 }
 function resetToDefaults() {
  options['state'] = '{"xZoomedDataMax":3.77710843373494,"yLambda":0,"yAxisOption":"4","sizeOption":"5","orderedByX":false,"yZoomedDataMax":203.538525997549,"orderedByY":false,"duration":{"multiplier":1,"timeUnit":"Y"},"nonSelectedAlpha":0.4,"time":"1901","colorOption":"5","iconKeySettings":[],"yZoomedIn":false,"xZoomedDataMin":1.07594936708861,"yZoomedDataMin":0.876784005951452,"playDuration":2000,"xZoomedIn":false,"uniColorForNonSelected":false,"xAxisOption":"2","showTrails":true,"iconType":"BUBBLE","xLambda":1,"dimensions":{"iconDimensions":["dim0"]}}';
  chart.draw(data, options);  
 }
    &lt;/script&gt;
    
 
 
 &lt;p&gt;In computer science and hacker circles, the programming language wars have, it seems, been raging since the &lt;a href="http://www.fh-jena.de/~kleine/history/languages/Kernighan-WhyPascalIsNotMyFavoriteProgrammingLanguage.pdf"&gt;beginning of time&lt;/a&gt;. A little electronic archaeology reveals some amusing exchanges:&lt;/p&gt;
 
 &lt;ul&gt;
  &lt;li&gt;&lt;tt&gt;"By all means create your own dialect of FORTH. While your at it, you can add the best features of PL-I, F77 and CORAL66. Then, look me up when you get out of college and we'll show you how it's done when you have to make a living"&lt;/tt&gt; [&lt;a href="http://groups.google.com/group/net.works/browse_thread/thread/5e34456a547c318e/374288b615fa6436"&gt;1985 thread&lt;/a&gt;]&lt;/li&gt;
  &lt;li&gt;&lt;tt&gt;"This debate ... is very much like two engineers engaged in building a three-mile bridge arguing over the brand of blue-print paper they use."&lt;/tt&gt; [&lt;a href="http://groups.google.com/group/comp.sys.apple/browse_thread/thread/3c701294e71201a7/b53de53f0ef838be"&gt;1987 thread&lt;/a&gt;]&lt;/li&gt;
 &lt;/ul&gt;
   
&lt;p&gt;Passionate arguments can often be improved by actual measurements.  How fast, expressive, and efficient is a particular language?  That's what &lt;a href="http://shootout.alioth.debian.org/"&gt;The Computer Language  
Benchmarks Game&lt;/a&gt; set out to provide, measuring time, source code length, and memory use of several dozen languages across a set of benchmarks.&lt;/p&gt;

&lt;p&gt;If you have measurements, why not improve them with a visualization?  And so I present to you an interactive, multi-dimensional, dynamic, whizbang-o-matic rendering of the Programming Language Wars.&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;div id="chart_div" style="width: 550px; height: 400px;"&gt;&lt;/div&gt;


&lt;p&gt;Each circle is a language.  Its horizontal position represents the &lt;b&gt;gzipped source code size&lt;/b&gt; used to implement the benchmarks, which is intended to measure the language's "expressiveness".  Its vertical position represents the &lt;b&gt;real time&lt;/b&gt; used to execute the 
benchmarks, and its size (and color) indicate how much &lt;b&gt;memory&lt;/b&gt; was used.&lt;/p&gt;

&lt;p&gt;The cluster of languages in the top left are slow but expressive scripting languages. At the bottom right you will find C and C++, the fastest languages, but which take quite a bit more coding to get the job done.  In between there is a tradeoff between speed and expressiveness, where lie languages like &lt;a href="http://en.wikipedia.org/wiki/Objective_Caml"&gt;OCaml&lt;/a&gt; (which I happen to use whenever possible).&lt;/p&gt;
 
&lt;p&gt;Actually, each point is only a summary of the language's performance: Consider some metric, like real time, and some particular language L.  The Benchmarks Game folks ran implementations of a set of about 12 benchmarks (FASTA, Mandelbrot, ...) in L.  L's time for each benchmark is divided by the best time across all languages for that benchmark.  This gives us a normalized score for each benchmark; we take the median of these to produce a summary real time score for L.  Then we do the same for the other metrics: CPU time, source code length, and memory.&lt;/p&gt;
 

&lt;p&gt;The plot shows data for a &lt;b&gt;single-core&lt;/b&gt; x86 box (assuming you haven't yet messed around with the controls).  If you press the movie button in the bottom left, it will transition to results on a &lt;b&gt;quad-core&lt;/b&gt; box.  (Still normalized by the best single-core score.  The labels say 1901 and 1904 since Google's API wants dates.) &lt;b&gt;TIP:&lt;/b&gt; When you play the animation, select a few languages you're interested in and check the Trails checkbox, so the movement stands out.&lt;/p&gt;

&lt;p&gt;To better visualize which languages' implementations took advantage of parallelism, &lt;INPUT TYPE=BUTTON OnClick="plotCPUvsTime();" VALUE="plot real time vs. CPU"&gt; and then click Play. The languages that move downward have improved their real time. Some stay in the same spot, probably indicating that the Computer Language Benchmarks Game doesn't have the best implementations.  &lt;INPUT TYPE=BUTTON OnClick="resetToDefaults();" VALUE="Reset to defaults"&gt;&lt;/p&gt;

&lt;h4&gt;Fine.  Just tell me which language is best.&lt;/h4&gt;

&lt;p&gt;These benchmarks are &lt;i&gt;almost certainly not representative of what you want to do.&lt;/i&gt; There are various flaws in this approach &amp;mdash; how we choose to summarize (the median here) will affect the ordering of languages; the implementations are not perfect; some languages are missing implementations for some benchmarks; even for one language there are many possible implementations with different tradeoffs and only the fastest was tested; and so on.  Perhaps most significantly, we're completely lacking important metrics like programmer time, maintainability, and bugginess.&lt;/p&gt;

&lt;p&gt;Thus, just as someone out there thinks &lt;a href="http://www.spanglercandy.com/spangler/products/circuspeanuts.php"&gt;Circus Peanut Gelatin pie&lt;/a&gt; is a good idea, so most of these languages are the right tool for &lt;i&gt;some&lt;/i&gt; job.  We can't use these benchmarks to brand a language as useless.  What I think the benchmarks and visualization &lt;i&gt;can&lt;/i&gt; do is introduce you to general-purpose languages that may be a better solution for many tasks.&lt;/p&gt;

&lt;p&gt;In particular, you might want to take a gander at the &lt;a href="http://en.wikipedia.org/wiki/Pareto_efficiency"&gt;Pareto-optimal&lt;/a&gt; languages: those which, for every other language L, are better than L in at least one metric under consideration.  If we consider source code length and real time as the two metrics, then the Pareto-optimal languages are:&lt;/p&gt;

&lt;table align=center cellspacing=10&gt;
 &lt;tr&gt;&lt;th&gt;1 core&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;4 cores&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
   &lt;table border=0&gt;
    &lt;tr&gt;&lt;th style="background-color:#000000;color:#FFFFFF" width=200&gt;More expressive&lt;/th&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#EFFF6F"&gt;Ruby 1.9&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#DFFF7F"&gt;Ruby JRuby&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#CFFF8F"&gt;Javascript TraceMonkey&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#BFFF9F"&gt;Python PyPy&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#AFFFAF"&gt;JavaScript V8&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#9FFFBF"&gt;Lua LuaJIT&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#8FFFCF"&gt;Haskell GHC&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#7FFFDF"&gt;Java 6 SteadyState&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#6FFFEF"&gt;C GNU gcc&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th style="background-color:#000000;color:#FFFFFF" width=200&gt;Faster&lt;/th&gt;&lt;/tr&gt;
   &lt;/table&gt;
  &lt;/td&gt;

  &lt;td width=30&gt;&lt;/td&gt;

  &lt;td&gt;
   &lt;table border=0&gt;
    &lt;tr&gt;&lt;th style="background-color:#000000;color:#FFFFFF" width=200&gt;More expressive&lt;/th&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#FFFF6F"&gt;Ruby JRuby&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#EFFF7F"&gt;Python CPython&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#DFFF8F"&gt;Erlang HiPE&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#CFFF9F"&gt;OCaml&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#BFFFAF"&gt;Haskell GHC&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#AFFFBF"&gt;F# Mono&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#9FFFCF"&gt;Scala&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#8FFFDF"&gt;Java 6 Steady State&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#7FFFEF"&gt;C GNU gcc&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td bgcolor="#6FFFFF"&gt;C++ GNU c++&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th style="background-color:#000000;color:#FFFFFF" width=200&gt;Faster&lt;/th&gt;&lt;/tr&gt;
   &lt;/table&gt;
  &lt;/td&gt;


 &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;From top to bottom, these languages trace the best points in the tradeoff between expressiveness (at top) and speed (at bottom). Perhaps what this does best is to illustrate why it is hard to pick a "best" language. For the single-core case, 27% of the languages are on the list above; for quad-core, 48% made the cut. &lt;b&gt;Even with just two simple metrics, many languages might be considered "optimal"!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Coming soon: a visualization of the 3D tradeoff space.&lt;/p&gt;

&lt;h4&gt;Notes&lt;/h4&gt;

&lt;p&gt;Last year, &lt;a href="http://blog.gmarceau.qc.ca/2009/05/speed-size-and-dependability-of.html"&gt;Guillaume Marceau&lt;/a&gt; produced informative plots based on the The Computer Language Benchmarks Game, similarly showing the tradeoffs between metrics. The CLBG has now &lt;a href="http://shootout.alioth.debian.org/u32q/code-used-time-used-shapes.php"&gt;included similar plots on their site&lt;/a&gt;.  &lt;i&gt;[Updated: the CLBG didn't use Marceau's plots directly.]&lt;/i&gt; The visualization here summarizes more (which can be good and bad), includes the memory metric and the quad-core data, and lets you interactively play with the data thanks to &lt;a href="http://code.google.com/apis/visualization/documentation/gallery/motionchart.html"&gt;Google Motion Charts&lt;/a&gt;.  A chat with &lt;a href="http://www.cs.brown.edu/people/rfonseca/"&gt;Rodrigo Fonseca&lt;/a&gt; several years ago got me interested in plotting these tradeoffs. Finally, my apologies to those without Flash for the chart.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-9103386909562085246?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/9103386909562085246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/09/programming-language-wars-movie.html#comment-form' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/9103386909562085246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/9103386909562085246'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/09/programming-language-wars-movie.html' title='Programming Language Wars: The Movie'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-604952965212640939</id><published>2010-08-30T04:54:00.000-07:00</published><updated>2010-08-30T05:41:54.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>What happened to the Internet on Friday</title><content type='html'>&lt;p style="border-style:solid; border-width:1px;"&gt;&lt;b&gt;Note to readers:&lt;/b&gt; &lt;i&gt;Judging from the past, this blog will have posts related to both computer science and politics.  If you like, you can view &lt;a href="http://youinfinitesnake.blogspot.com/search/label/cs"&gt;just CS&lt;/a&gt; or &lt;a href="http://youinfinitesnake.blogspot.com/search/label/politics"&gt;just politics&lt;/a&gt; posts, or subscribe to feeds for &lt;a href="http://youinfinitesnake.blogspot.com/feeds/posts/default/-/cs"&gt;just CS&lt;/a&gt; or &lt;a href="http://youinfinitesnake.blogspot.com/feeds/posts/default/-/politics"&gt;just politics&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;On Friday, a large disruption of Internet traffic &lt;a href="http://www.networkworld.com/news/2010/082710-research-experiment-disrupts-internet-for.html"&gt;made the news&lt;/a&gt; as an experiment gone awry. What actually happened? It's a good lesson in how fragile and insecure the Internet's routing protocol can actually be.&lt;/p&gt;

&lt;a name='more'&gt;&lt;/a&gt;

&lt;p&gt;There was indeed a major event on Friday. A plot by Earl Zmijewski of Renesys &lt;a href="http://www.renesys.com/blog/2010/08/house-of-cards.shtml"&gt;shows&lt;/a&gt; that at the moment the experiment started &amp;mdash; 8:41 GMT &amp;mdash; about 3,000 IP prefixes became unstable.  That is, the routes to these prefixes were quickly changing or being advertised and withdrawn.  (An IP prefix is a chunk of destination IP addresses, the basic unit on which Internet routing operates.) Since there are roughly 300,000 prefixes announced globally, this is about 1% of the prefixes on the entire Internet.&lt;/p&gt;

&lt;p&gt;We can also observe the effects by looking at the total amount of "chatter" in the Internet's global routing protocol, BGP.  I created the following graphs based on raw data from the &lt;a href="http://www.routeviews.org/"&gt;Route Views project&lt;/a&gt;.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/THuc8SrNpPI/AAAAAAAAAG8/IZi1kJC_0N4/s1600/updates-linx.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/THuc8SrNpPI/AAAAAAAAAG8/IZi1kJC_0N4/s400/updates-linx.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511171128637105394" /&gt;&lt;/a&gt;

&lt;p&gt;This plot shows the rate of BGP messages received by one particular router, located at the &lt;a href="http://en.wikipedia.org/wiki/London_Internet_Exchange"&gt;London Internet Exchange&lt;/a&gt;.  Routers are continually exchanging messages about new, changing, or unavailable routes to destinations all around the world.   However, as you can see, the event in question vastly increased the rate of routing updates, exceeding the "background radiation" of messages by about a factor of 6.&lt;/p&gt;

&lt;p&gt;The event was visible globally.  Here is the same plot, for a router at Equinix in Ashburn, VA.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/THudHsm92SI/AAAAAAAAAHE/HKqqaTwKte0/s1600/updates-eqix.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/THudHsm92SI/AAAAAAAAAHE/HKqqaTwKte0/s400/updates-eqix.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511171324577175842" /&gt;&lt;/a&gt;

&lt;p&gt;How can a disruption of this magnitude happen?  Based on a &lt;a href="http://www.merit.edu/mail.archives/nanog/msg11505.html"&gt;note&lt;/a&gt; from RIPE, it went something like this:&lt;/p&gt;

&lt;ol&gt;
 &lt;li&gt;Researchers at &lt;a href="http://www.ripe.net/info/ncc/index.html"&gt;RIPE&lt;/a&gt; and Duke create a BGP announcement message, which advertises the availability of an IP prefix under their control.  The message uses an unusual format, but one which complies with the BGP protocol format.&lt;/li&gt;

 &lt;li&gt;The message begins to propagate from router to router on the Internet, as normal, until...&lt;/li&gt;

 &lt;li&gt;...it reaches some router running the Cisco IOS XR software.  These routers have (or had) buggy software which, upon receipt of the unusual message, corrupted the message before propagating it to other neighboring routers.&lt;/li&gt;

 &lt;li&gt;A neighboring router (call it N) has now received a malformed message from the Cisco router (call it C).  N then follows the BGP protocol specifications which &lt;a href="http://tools.ietf.org/html/rfc4271#section-6"&gt;require&lt;/a&gt; that N terminates its BGP connection to C. This disrupts traffic to &lt;b&gt;any destination&lt;/b&gt; which N reached via C (and vice versa) &amp;mdash; not just traffic to the prefix originally announced by RIPE!&lt;/li&gt;

 &lt;li&gt;It is likely (depending on router configuration, so I'm not sure how common this is) that either C or N then attempts to re-establish the BGP connection.  In this case, C re-advertises every route it knows about to N &amp;mdash perhaps all 300,000 of them.  And one of these would presumably be the corrupted message, causing the connection to again be terminated, and the process to repeat indefinitely.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;It's always a good idea to isolate security problems to contain damage.  And many BGP problems can be isolated close to the origin of the bad announcement.  This event, on the other hand, apparently caused (brief) widespread damage for two reasons.&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;It spread &lt;b&gt;geographically&lt;/b&gt; because the original announcement message was entirely valid, and was handled correctly by many routers.  Thus, the message could reach buggy routers anywhere on the planet.&lt;/li&gt;
 &lt;li&gt;It spread to &lt;b&gt;many IP prefixes&lt;/b&gt; beyond the original announced prefix, because the BGP protocol spec asserts that if a router sends a bad message for one prefix, it's unsafe to communicate with that router for destinations in &lt;i&gt;any&lt;/i&gt; prefix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Similar events &lt;a href="http://www.renesys.com/blog/2009/02/the-flap-heard-around-the-worl.shtml"&gt;have&lt;/a&gt; &lt;a href="http://www.uknof.org.uk/uknof12/Davidson-4_byte_asn.pdf"&gt;occurred&lt;/a&gt; in the past.&lt;/p&gt;

&lt;p&gt;Despite the headlines ("Research experiment disrupts Internet") on &lt;a href="http://tech.slashdot.org/story/10/08/28/1319211/Duke-Research-Experiment-Disrupts-Internet-Traffic"&gt;Slashdot&lt;/a&gt; and &lt;a href="http://www.networkworld.com/news/2010/082710-research-experiment-disrupts-internet-for.html"&gt;Network World&lt;/a&gt; and the Renesys &lt;a href="http://www.renesys.com/blog/2010/08/house-of-cards.shtml"&gt;post&lt;/a&gt;'s point of view, I find it hard to place much of the blame on the researchers.  I assume it was not their intent to stress-test the live Internet.  Clearly, one problem was the software bug which Cisco &lt;a href="http://www.cisco.com/en/US/products/products_security_advisory09186a0080b4411f.shtml"&gt;quickly acknowledged and fixed&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But we can also think about the protocol design.  One way to better isolate the damage might have been for the router N to discard only the single malformed message from C, logging an error message but not terminating the entire BGP session between N and C.  The counter-argument is that receipt of one malformed announcement raises the probability that other announcements are malformed, too.  Indeed, in this bug, C &lt;a href="http://www.merit.edu/mail.archives/nanog/msg11505.html"&gt;apparently&lt;/a&gt; declared an incorrect header length; something similar to this could plausibly confuse N's parsing of all subsequent messages from C.&lt;/p&gt;

&lt;p&gt;Looking into the much more distant future, a very different approach would be to base routing decisions on end-to-end observable behavior (do my packets actually get through to the destination along this path, or not?) rather than on relatively uninformative and attack-prone control plane announcements.  This robustness is one potential benefit of designs like our &lt;a href="http://www.cs.uiuc.edu/homes/pbg/pathlets/"&gt;pathlet routing&lt;/a&gt; and Xiaowei Yang's &lt;a href="http://www.cs.duke.edu/nds/wiki/user_selected_routes"&gt;NIRA&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-604952965212640939?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/604952965212640939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/08/what-happened-to-internet-on-friday.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/604952965212640939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/604952965212640939'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/08/what-happened-to-internet-on-friday.html' title='What happened to the Internet on Friday'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqyK36WvRNs/THuc8SrNpPI/AAAAAAAAAG8/IZi1kJC_0N4/s72-c/updates-linx.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-8472125914324913364</id><published>2010-07-27T02:11:00.001-07:00</published><updated>2010-07-29T01:18:42.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plots'/><category scheme='http://www.blogger.com/atom/ns#' term='party of no'/><category scheme='http://www.blogger.com/atom/ns#' term='political divisiveness'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Political divisiveness at an all-time high, quantitatively speaking</title><content type='html'>&lt;p&gt;There's a lot of talk about politics becoming more divisive across parties, with less and less common ground, and Republicans being called and &lt;a href="http://politicalwire.com/archives/2010/07/26/republicans_embrace_party_of_no_strategy.html"&gt;embracing&lt;/a&gt; the  "party of no" label.  But is it true?  No need to speculate; we can find out with the help of &lt;a href="http://www.senate.gov/pagelayout/legislative/a_three_sections_with_teasers/votes.htm"&gt;the raw data&lt;/a&gt; in the form of Senate roll call votes (the last ~21.5 years of which are conveniently available), plus some perl scripts.&lt;/p&gt;

&lt;h4&gt;Number of votes over time&lt;/h4&gt;

&lt;p&gt;Let's start with something simple.  Here's the number of yea/nay votes over time in the Senate.  (By yea/nay votes, I mean I'm excluding some exceptional votes such as when the vote is Guilty/Not Guilty.)  As the plot below shows, the number of votes has remained fairly steady across time, except that odd-numbered years get more votes and there was an unprecedented spike in 1995. And of course, 2010 is at a disadvantage for obvious reasons.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/TE6jTMCTsnI/AAAAAAAAAGE/Amodh6q8knQ/s1600/num_votes.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/TE6jTMCTsnI/AAAAAAAAAGE/Amodh6q8knQ/s400/num_votes.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498511745109701234" /&gt;&lt;/a&gt;

&lt;h4&gt;The Party of No&lt;/h4&gt;

&lt;p&gt;Does one party vote "no" more often? Below is the fraction of Yea votes cast by each party across time.  There is some signal in this data, such as the Republican takeover in the mid-90s.  And 2010 is so far at very low fraction of Yea votes by Republicans (49%), beat only by 1993 (43%).  But this data clearly requires some more interpretation as to what a Yea or Nay vote actually means. One has to question, for example, why Republicans voted Yea more often in 2009 than Democrats.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jTdbXYMI/AAAAAAAAAGM/XMGCiGJFBYc/s1600/fraction_yea.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jTdbXYMI/AAAAAAAAAGM/XMGCiGJFBYc/s400/fraction_yea.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498511749778202818" /&gt;&lt;/a&gt;

&lt;h4&gt;The naysayingest senator&lt;/h4&gt;

&lt;p&gt;Moving to individual member stats, aggregated over the 21.5 years of the data, most members vote no about 30-40% of the time, but there are outliers who are quite agreeable and quite disagreeable:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QqyK36WvRNs/TE6jTvC0ePI/AAAAAAAAAGU/tHv9P2WTi0k/s1600/naysayingness_cdf.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_QqyK36WvRNs/TE6jTvC0ePI/AAAAAAAAAGU/tHv9P2WTi0k/s400/naysayingness_cdf.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498511754507090162" /&gt;&lt;/a&gt;

&lt;p&gt;Here are the top 20 outliers on either end.  Current sitting senators, none of whom are in the Yeasayingest column, are linked to their Wikipedia pages.&lt;/p&gt;

&lt;center&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th colspan=2&gt;Yeasayingest&lt;/th&gt;&lt;th colspan=2&gt;Naysayingest&lt;/th&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;Member&lt;/th&gt;&lt;th&gt;% Nay&lt;/th&gt;&lt;th&gt;Member&lt;/th&gt;&lt;th&gt;% Nay&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Barkley (I-MN)*&lt;/td&gt;&lt;td&gt;14.3&lt;/td&gt;  &lt;td&gt;Wallop (R-WY)&lt;/td&gt;&lt;td&gt;49.9&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Carnahan (D-MO)&lt;/td&gt;&lt;td&gt;21.5&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/Jim_DeMint"&gt;DeMint (R-SC)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;47.9&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Burdick (D-ND)&lt;/td&gt;&lt;td&gt;23.7&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/Tom_Coburn"&gt;Coburn (R-OK)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;47.8&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Matsunaga (D-HI)&lt;/td&gt;&lt;td&gt;24.0&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/George_LeMieux"&gt;LeMieux (R-FL)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;45.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Krueger (D-TX)&lt;/td&gt;&lt;td&gt;24.3&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/Carte_Goodwin"&gt;Goodwin (D-WV)&lt;/a&gt;*&lt;/td&gt;&lt;td&gt;45.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Burdick, Quentin S (D-ND)&lt;/td&gt;&lt;td&gt;24.8&lt;/td&gt;  &lt;td&gt;Symms (R-ID)&lt;/td&gt;&lt;td&gt;45.1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mathews (D-TN)&lt;/td&gt;&lt;td&gt;25.6&lt;/td&gt;  &lt;td&gt;Armstrong (R-CO)&lt;/td&gt;&lt;td&gt;45.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Riegle (D-MI)&lt;/td&gt;&lt;td&gt;26.1&lt;/td&gt;  &lt;td&gt;Humphrey (R-NH)&lt;/td&gt;&lt;td&gt;44.9&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Bentsen (D-TX)&lt;/td&gt;&lt;td&gt;26.2&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/David_Vitter"&gt;Vitter (R-LA)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;43.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Sanford (D-NC)&lt;/td&gt;&lt;td&gt;26.8&lt;/td&gt;  &lt;td&gt;&lt;a href="http://en.wikipedia.org/wiki/John_Barrasso"&gt;Barrasso (R-WY)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;43.4&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;
&lt;/center&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Jim_DeMint"&gt;Jim DeMint&lt;/a&gt; takes the prize as the naysayingest sitting senator, but he's &lt;a href="http://en.wikipedia.org/wiki/Malcolm_Wallop"&gt;Walloped&lt;/a&gt; by the naysayingest of all time who voted no on almost half his votes. Malcolm Wallop very nearly maximized the entropy of his votes. Again, this data should be taken with a grain of salt, since how often one votes Nay depends on who currently controls congress.&lt;/p&gt;

&lt;p&gt;*Barkley and Goodwin don't really count; Barkley was briefly appointed to replace Paul Wellstone and only cast 14 votes, 12 of them Yea. Goodwin &lt;a href="http://politicalwire.com/archives/2010/07/20/new_senator_to_be_sworn_in_just_before_vote.html"&gt;was appointed&lt;/a&gt; less than two weeks ago to replace Robert Byrd and has only cast 11 votes, 6 of them Yea.&lt;/p&gt;

&lt;h4&gt;General disagreement&lt;/h4&gt;

&lt;p&gt;Yea or Nay votes could mean almost anything, depending what question is being voted upon.  Here's a more robust metric: the &lt;b&gt;agreement&lt;/b&gt; of a vote is 1 if everyone voted the same way, 0 if the vote was split 50/50, and linearly interpolated in between.  We're currently at an all-time low of 34.4% (where "all-time" = the last 21.5 years), as you can see below.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jUFygzPI/AAAAAAAAAGc/L_mW02WpFls/s1600/agreement.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jUFygzPI/AAAAAAAAAGc/L_mW02WpFls/s400/agreement.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498511760612707570" /&gt;&lt;/a&gt;

&lt;p&gt;But this doesn't expose the divisiveness between parties.&lt;/p&gt;

&lt;h4&gt;Political divisiveness&lt;/h4&gt;

&lt;p&gt;Here's what we really want to see: the average distance between Republicans and Democrats.  On some particular vote, we can represent the average Democrat position as the fraction of Dems voting Yea; same for Republicans.  &lt;b&gt;Divisiveness&lt;/b&gt; is the distance between these two average positions.  For example, if 50% of Dems and 50% of Reps vote yes, then divisiveness is 0.  If 10% of Dems and 90% of Reps vote yes (or vice versa), then divisiveness is 0.8.&lt;/p&gt;

&lt;p&gt;The data shows a striking difference. Politics were more centrist in the late 80s. Divisiveness didn't move much for about 18 years, but then divisiveness dramatically spiked since the beginning of the Obama administration, setting a record in 2009 and another record so far in 2010.  The difference here is really quite dramatic: 29% divisiveness in 1989, vs. 70% today.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jUg7GrhI/AAAAAAAAAGk/WXq_M9L89DM/s1600/divisiveness.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/TE6jUg7GrhI/AAAAAAAAAGk/WXq_M9L89DM/s400/divisiveness.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498511767896501778" /&gt;&lt;/a&gt;

&lt;h4&gt;Party unity&lt;/h4&gt;

&lt;p&gt;Party unity is closely related to divisiveness.  I'm defining unity as the fraction of members who take the majority position in their party, so 0.5 is the minimum score and 1 is the maximum.  Party unity appears to have increased over time, though with some wild shifts particularly on the Republican side.  Interestingly, Democrats seem to be just as unified as Republicans on the mean vote.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/TE6jpaiUaXI/AAAAAAAAAGs/D8ekMQ0Q7K0/s1600/unity.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/TE6jpaiUaXI/AAAAAAAAAGs/D8ekMQ0Q7K0/s400/unity.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5498512126959184242" /&gt;&lt;/a&gt;

&lt;p&gt;Anyone know where to get data going back earlier than 1989?&lt;/p&gt;

&lt;h4&gt;Update (July 29, 2010):&lt;/h4&gt;

&lt;p&gt;A few important points to emphasize:&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;One shouldn't read too much into this data.  Divisiveness, as defined above, has increased---but this says nothing about &lt;i&gt;why&lt;/i&gt; it has increased.  As commenter GoldenBoy pointed out &lt;a href="http://politicalwire.com/archives/2010/07/27/political_divisiveness_at_an_all_time_high.html"&gt;at politicalwire.com&lt;/a&gt;, we should naturally expect divisiveness to increase when one party has control of congress and the White House, since they have less need to work with the other party in order to pass legislation.  The analysis here really says nothing about to what extent this or other factors caused the increased divisiveness.&lt;/li&gt;

&lt;li&gt;Political scientists have performed much more extensive analysis than the simple graphs I've plotted in this post.  &lt;a href="http://www.umich.edu/~bnyhan/"&gt;Brendan Nyhan&lt;/a&gt; pointed me to &lt;a href="http://voteview.com/"&gt;Voteview.com&lt;/a&gt; which has &lt;a href="http://voteview.com/polarizedamerica.asp#POLITICALPOLARIZATION"&gt;great plots of polarization, party unity, and more&lt;/a&gt; back to 1879.  As a commenter below noted, they also have &lt;a href="http://voteview.com/downloads.asp#PARTYSPLITSDWNL"&gt;complete historical roll call data&lt;/a&gt; back to the first Congress.&lt;/li&gt;

&lt;li&gt;It's important to put the recent increase in divisiveness in the context of a longer-term trend of &lt;a href="http://voteview.com/polarizedamerica.asp#POLITICALPOLARIZATION"&gt;increasing polarization&lt;/a&gt;.  There does seem to be a divisiveness spike in the last couple years, but in general an increase is not surprising.&lt;/li&gt;

&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-8472125914324913364?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/8472125914324913364/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/07/political-divisiveness-at-all-time-high.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8472125914324913364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8472125914324913364'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/07/political-divisiveness-at-all-time-high.html' title='Political divisiveness at an all-time high, quantitatively speaking'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqyK36WvRNs/TE6jTMCTsnI/AAAAAAAAAGE/Amodh6q8knQ/s72-c/num_votes.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1218869523677889055</id><published>2010-06-07T15:15:00.000-07:00</published><updated>2010-06-07T15:42:46.546-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='towns with funny names'/><title type='text'>Please exercise your civil responsibilities</title><content type='html'>&lt;p&gt;by voting for the best-named towns. (Note: having trouble viewing this in your RSS reader? &lt;a href="http://youinfinitesnake.blogspot.com/2010/06/please-exercise-your-civil.html"&gt;Try this.&lt;/a&gt;)&lt;/p&gt;

&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=259735"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/944424-259735"&gt;Click Here for Poll&lt;/a&gt;&lt;a href="http://www.questionpro.com" title="online survey"&gt;Online Survey&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.surveyanalytics.com/enterprise-feedback-management.html" title="Enterprise Feedback Management"&gt;Enterprise Feedback Management&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.micropoll.com" title="Polls"&gt;Polls&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.contactpro.com" title="email marketing"&gt;Email Marketing&lt;/a&gt;&lt;BR&gt;&lt;BR&gt; | &lt;a href="http://www.ideascale.com/" title="crowdsourcing software"&gt;Crowdsourcing Software&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.micropoll.com/akira/MicroPoll?mode=html&amp;id=259735"&gt;View MicroPoll&lt;/A&gt;&lt;/div&gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;

&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=259891"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/944424-259891"&gt;Click Here for Poll&lt;/a&gt;&lt;a href="http://www.questionpro.com" title="online survey"&gt;Online Survey&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.surveyanalytics.com/enterprise-feedback-management.html" title="Enterprise Feedback Management"&gt;Enterprise Feedback Management&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.micropoll.com" title="Polls"&gt;Polls&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.contactpro.com" title="email marketing"&gt;Email Marketing&lt;/a&gt;&lt;BR&gt;&lt;BR&gt; | &lt;a href="http://www.ideascale.com/" title="crowdsourcing software"&gt;Crowdsourcing Software&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.micropoll.com/akira/MicroPoll?mode=html&amp;id=259891"&gt;View MicroPoll&lt;/A&gt;&lt;/div&gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;

&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=259892"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/944424-259892"&gt;Click Here for Poll&lt;/a&gt;&lt;a href="http://www.questionpro.com" title="online survey"&gt;Online Survey&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.surveyanalytics.com/enterprise-feedback-management.html" title="Enterprise Feedback Management"&gt;Enterprise Feedback Management&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.micropoll.com" title="Polls"&gt;Polls&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.contactpro.com" title="email marketing"&gt;Email Marketing&lt;/a&gt;&lt;BR&gt;&lt;BR&gt; | &lt;a href="http://www.ideascale.com/" title="crowdsourcing software"&gt;Crowdsourcing Software&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.micropoll.com/akira/MicroPoll?mode=html&amp;id=259892"&gt;View MicroPoll&lt;/A&gt;&lt;/div&gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;

&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=259893"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/944424-259893"&gt;Click Here for Poll&lt;/a&gt;&lt;a href="http://www.questionpro.com" title="online survey"&gt;Online Survey&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.surveyanalytics.com/enterprise-feedback-management.html" title="Enterprise Feedback Management"&gt;Enterprise Feedback Management&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.micropoll.com" title="Polls"&gt;Polls&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.contactpro.com" title="email marketing"&gt;Email Marketing&lt;/a&gt;&lt;BR&gt;&lt;BR&gt; | &lt;a href="http://www.ideascale.com/" title="crowdsourcing software"&gt;Crowdsourcing Software&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.micropoll.com/akira/MicroPoll?mode=html&amp;id=259893"&gt;View MicroPoll&lt;/A&gt;&lt;/div&gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;

&lt;script language="JavaScript" src="http://www.micropoll.com/akira/MicroPoll?id=259894"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;div&gt;&lt;a href="http://www.micropoll.com/akira/mpview/944424-259894"&gt;Click Here for Poll&lt;/a&gt;&lt;a href="http://www.questionpro.com" title="online survey"&gt;Online Survey&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.surveyanalytics.com/enterprise-feedback-management.html" title="Enterprise Feedback Management"&gt;Enterprise Feedback Management&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.micropoll.com" title="Polls"&gt;Polls&lt;/a&gt;&lt;BR&gt; | &lt;a href="http://www.contactpro.com" title="email marketing"&gt;Email Marketing&lt;/a&gt;&lt;BR&gt;&lt;BR&gt; | &lt;a href="http://www.ideascale.com/" title="crowdsourcing software"&gt;Crowdsourcing Software&lt;/a&gt;&lt;BR&gt;&lt;a href="http://www.micropoll.com/akira/MicroPoll?mode=html&amp;id=259894"&gt;View MicroPoll&lt;/A&gt;&lt;/div&gt;&lt;/noscript&gt;&lt;!-- END MICROPOLL JAVASCRIPT CODE --&gt;

&lt;p&gt;Yes, these are all real places.  See also &lt;a href="http://nameoftheyear.blogspot.com/"&gt;Name of the Year&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1218869523677889055?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1218869523677889055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/06/please-exercise-your-civil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1218869523677889055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1218869523677889055'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/06/please-exercise-your-civil.html' title='Please exercise your civil responsibilities'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-3401712392610740263</id><published>2010-05-02T12:57:00.000-07:00</published><updated>2010-05-02T13:04:34.494-07:00</updated><title type='text'>Eyjafjallajökull</title><content type='html'>&lt;p&gt;&lt;a href="http://www.swisseduc.ch/stromboli/perm/iceland/eyafallajokull_20100416-en.html"&gt;Incredible photos&lt;/a&gt; of lightning storms over Eyjafjallajökull Volcano in Iceland.&lt;/p&gt;

&lt;p align=center&gt;&lt;a href="http://www.swisseduc.ch/stromboli/perm/iceland/eyafallajokull_20100416-en.html"&gt;&lt;img src="http://www.swisseduc.ch/stromboli/perm/iceland/icons-eya-20100416/ejafjalla16apr2010-mfulle4145j-small.jpg" border=0&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-3401712392610740263?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/3401712392610740263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/05/eyjafjallajokull.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3401712392610740263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3401712392610740263'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/05/eyjafjallajokull.html' title='Eyjafjallajökull'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1121997553992789835</id><published>2010-03-02T22:46:00.001-08:00</published><updated>2010-03-02T22:46:59.521-08:00</updated><title type='text'>An optimization problem</title><content type='html'>&lt;p&gt;You are interviewed for an arbitrary job, which happens to do a background check.  What criminal record maximizes your chance of being hired?&lt;/p&gt;

&lt;p&gt;"None" is a valid criminal record, but is unlikely to be the optimal answer.&lt;/p&gt;

&lt;p&gt;Inspired by a true story.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1121997553992789835?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1121997553992789835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/03/optimization-problem.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1121997553992789835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1121997553992789835'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2010/03/optimization-problem.html' title='An optimization problem'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-8577286133475992833</id><published>2009-06-13T14:13:00.000-07:00</published><updated>2010-08-04T13:19:59.048-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>SIGCOMM 2009</title><content type='html'>&lt;p&gt;For readers interested in networking, I note that the &lt;a href="http://conferences.sigcomm.org/sigcomm/2009/program.php"&gt;SIGCOMM 2009 program&lt;/a&gt; is now available.&lt;/p&gt;

&lt;p&gt;Also available is &lt;a href="http://www.cs.berkeley.edu/~pbg/pathlet_routing-sigcomm09.pdf"&gt;Pathlet Routing&lt;/a&gt;, our paper with Igor Ganichev, Scott Shenker, and Ion Stoica. Pathlet routing is a new Internet routing architecture which can improve scalability by enabling very small forwarding tables, and can allow senders to choose between multiple paths for improved reliability and path quality.  The idea is basically to do &lt;a href="http://en.wikipedia.org/wiki/Source_routing"&gt;source routing&lt;/a&gt; over a virtual topology whose nodes are arbitrary virtual nodes (vnodes) and whose links are sequences of vnodes (pathlets). Intuitively, this architecture is highly flexible because vnodes can represent arbitrary granularities, and because pathlets can represent policy constraints on routing while simultaneously enabling a large number of path choices.  This is because sources can stitch together pathlets to form an end-to-end route in potentially exponentially many ways.&lt;/p&gt;

&lt;p&gt;An interesting property of the design is that it doesn't impose a global requirement on what "style" of routing policy is used, but rather allows multiple styles to coexist.  One router could choose to have routes like in today's Internet, with a giant forwarding table specifying only a single allowed route to each destination.  And the next router could have a tiny forwarding table that still gives the network owner some control, but provides a high degree of path choice for the senders.  I think of this as being very much in the spirit of the principle of &lt;i&gt;designing for variation in outcome&lt;/i&gt; advocated by Clark et al. in their &lt;a href="http://conferences.sigcomm.org/sigcomm/2002/papers/tussle.pdf"&gt;Tussle in Cyberspace&lt;/a&gt; paper.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-8577286133475992833?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/8577286133475992833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2009/06/sigcomm-2009.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8577286133475992833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/8577286133475992833'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2009/06/sigcomm-2009.html' title='SIGCOMM 2009'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-2398684363147988</id><published>2008-11-01T22:32:00.000-07:00</published><updated>2010-08-06T21:44:11.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Progress</title><content type='html'>&lt;p&gt;Gallup &lt;a href="http://www.pollingreport.com/politics.htm"&gt;has asked&lt;/a&gt;, "If your party nominated a generally well-qualified person for president who happened to be X, would you vote for that person?" for X = {Catholic, black, Jewish, female, hispanic, Mormon, homosexual, atheist}.  Below I have plotted their results over time.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SQ08xx7TGGI/AAAAAAAAAF4/JDUoGdlKVEg/s1600-h/opinions.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SQ08xx7TGGI/AAAAAAAAAF4/JDUoGdlKVEg/s400/opinions.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5263930365379287138" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;Update August 6, 2010:&lt;/b&gt; The link to the raw data above no longer has it.  But you may be able to get it through some combination of &lt;a href="http://www.gallup.com/poll/3979/americans-today-much-more-accepting-woman-black-catholic.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.gallup.com/poll/26611/some-americans-reluctant-vote-mormon-72yearold-presidential-candidates.aspx#1"&gt;here&lt;/a&gt; (on the latter link, click through to the second page).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-2398684363147988?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/2398684363147988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/11/progress.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2398684363147988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2398684363147988'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/11/progress.html' title='Progress'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_QqyK36WvRNs/SQ08xx7TGGI/AAAAAAAAAF4/JDUoGdlKVEg/s72-c/opinions.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-7656520315378487330</id><published>2008-10-12T23:03:00.000-07:00</published><updated>2008-10-12T23:13:10.832-07:00</updated><title type='text'>Angel Island fire</title><content type='html'>Happening right now, a large fire on &lt;a href="http://en.wikipedia.org/wiki/Angel_Island_State_Park"&gt;Angel Island&lt;/a&gt; visible around the San Francisco Bay.  For size comparison, the island peaks at 788 feet; in the third picture is what I think is a three-story ferry. See also &lt;a href="http://www.sfgate.com/cgi-bin/object/article?f=/c/a/2008/10/12/BAVT13G0AJ.DTL&amp;o=0"&gt;SFGate photos&lt;/a&gt;.
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SPLl3Aifz-I/AAAAAAAAAFg/KN-zJ-UUii8/s1600-h/DSC03263.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SPLl3Aifz-I/AAAAAAAAAFg/KN-zJ-UUii8/s400/DSC03263.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5256516448295047138" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/SPLl3mgCXYI/AAAAAAAAAFo/TFr3z34Hqig/s1600-h/DSC03265.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/SPLl3mgCXYI/AAAAAAAAAFo/TFr3z34Hqig/s400/DSC03265.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5256516458485276034" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SPLl3pC5WXI/AAAAAAAAAFw/7jnyF8VdAN4/s1600-h/DSC03270.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SPLl3pC5WXI/AAAAAAAAAFw/7jnyF8VdAN4/s400/DSC03270.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5256516459168356722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-7656520315378487330?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/7656520315378487330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/10/angel-island-fire.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/7656520315378487330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/7656520315378487330'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/10/angel-island-fire.html' title='Angel Island fire'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqyK36WvRNs/SPLl3Aifz-I/AAAAAAAAAFg/KN-zJ-UUii8/s72-c/DSC03263.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-2300499310596314956</id><published>2008-10-04T02:36:00.000-07:00</published><updated>2008-10-04T03:01:47.534-07:00</updated><title type='text'>How Berkeley Can You Be?</title><content type='html'>A few photos from the Thirteenth Annual "How Berkeley Can You Be!?" Parade, Sunday, September 28, 2008.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SOc81N3G4OI/AAAAAAAAAEg/eluainJyzKM/s1600-h/DSC03221.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SOc81N3G4OI/AAAAAAAAAEg/eluainJyzKM/s400/DSC03221.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253234375302504674" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc81d9TKoI/AAAAAAAAAEo/Gvk6eFgdWjU/s1600-h/DSC03223.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc81d9TKoI/AAAAAAAAAEo/Gvk6eFgdWjU/s400/DSC03223.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253234379623443074" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc81nBmF1I/AAAAAAAAAEw/WIhfAD9i0uE/s1600-h/DSC03225-cropped.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc81nBmF1I/AAAAAAAAAEw/WIhfAD9i0uE/s400/DSC03225-cropped.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5253234382057379666" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc810dlvNI/AAAAAAAAAE4/N0HUtjveRC8/s1600-h/DSC03228.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SOc810dlvNI/AAAAAAAAAE4/N0HUtjveRC8/s400/DSC03228.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253234385664457938" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/SOc81-LokcI/AAAAAAAAAFA/SOrfc41AdDk/s1600-h/DSC03229.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/SOc81-LokcI/AAAAAAAAAFA/SOrfc41AdDk/s400/DSC03229.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253234388273500610" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QqyK36WvRNs/SOc-rXngJZI/AAAAAAAAAFI/4BuvA2Z58qE/s1600-h/DSC03232.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_QqyK36WvRNs/SOc-rXngJZI/AAAAAAAAAFI/4BuvA2Z58qE/s400/DSC03232.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253236405145970066" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/SOc-renuKYI/AAAAAAAAAFQ/fitUIWGKFqk/s1600-h/DSC03234.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/SOc-renuKYI/AAAAAAAAAFQ/fitUIWGKFqk/s400/DSC03234.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253236407025936770" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SOc-r213epI/AAAAAAAAAFY/RjeOew8jD9k/s1600-h/DSC03233.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SOc-r213epI/AAAAAAAAAFY/RjeOew8jD9k/s400/DSC03233.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5253236413527718546" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-2300499310596314956?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/2300499310596314956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/10/how-berkeley-can-you-be.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2300499310596314956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/2300499310596314956'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/10/how-berkeley-can-you-be.html' title='How Berkeley Can You Be?'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqyK36WvRNs/SOc81N3G4OI/AAAAAAAAAEg/eluainJyzKM/s72-c/DSC03221.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-3947832374925486113</id><published>2008-09-25T18:20:00.000-07:00</published><updated>2010-08-04T13:21:38.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>An arbitrage opportunity</title><content type='html'>Nate Silver &lt;a href="http://www.fivethirtyeight.com/2008/09/intrade-betting-is-suspcious.html"&gt;noted a discrepancy&lt;/a&gt; between the market prices for bets on who will win the presidential election at &lt;a href="http://www.intrade.com/"&gt;Intrade&lt;/a&gt; vs. other markets like the &lt;a href="http://www.biz.uiowa.edu/iem/"&gt;Iowa Electronic Market&lt;/a&gt;, with strange bidding patterns at Intrade. More discussion over at &lt;a href="http://weblog.fortnow.com/2008/09/markets-and-polls.html"&gt;Computational Complexity&lt;/a&gt;. To help visualize it, here is a graph of the closing prices of &lt;a href="http://data.intrade.com/graphing/jsp/downloadClosingPrice.jsp?contractId=173055"&gt;PRESIDENT.DEM2008&lt;/a&gt; at Intrade and &lt;a href="http://iemweb.biz.uiowa.edu/pricehistory/PriceHistory_GetData.cfm"&gt;PRES08_WTA&lt;/a&gt; at IEM.

&lt;b&gt;Update:&lt;/b&gt; CQpolitics: &lt;a href="http://www.cqpolitics.com/wmspage.cfm?docID=news-000002976265"&gt;Trader Drove Up Price of McCain ‘Stock’ in Online Market&lt;/a&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QqyK36WvRNs/SNw7t6l1f0I/AAAAAAAAAEQ/0TfTQlIkAFs/s1600-h/arbitrage.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_QqyK36WvRNs/SNw7t6l1f0I/AAAAAAAAAEQ/0TfTQlIkAFs/s400/arbitrage.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5250136925615259458" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SNw7t4GCwwI/AAAAAAAAAEY/S3snB0tHMz4/s1600-h/arbitrage_diff.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SNw7t4GCwwI/AAAAAAAAAEY/S3snB0tHMz4/s400/arbitrage_diff.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5250136924945040130" /&gt;&lt;/a&gt;

It certainly looks as though there's been an unusually large difference in prices lately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-3947832374925486113?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/3947832374925486113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/09/arbitrage-opportunity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3947832374925486113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/3947832374925486113'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/09/arbitrage-opportunity.html' title='An arbitrage opportunity'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QqyK36WvRNs/SNw7t6l1f0I/AAAAAAAAAEQ/0TfTQlIkAFs/s72-c/arbitrage.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1592509820890071145</id><published>2008-09-11T00:23:00.000-07:00</published><updated>2010-08-04T13:21:56.066-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Recent results in nonlinear peer-to-peer reviewing algorithms</title><content type='html'>&lt;p&gt;On Monday I received spam, as many periodically do, from the World Multi-Conference on Systemics, Cybernetics and Informatics, WMSCI '09.  Their peer review process having been previously &lt;a href="http://www.nature.com/nature/journal/v434/n7036/full/nature03653.html"&gt;demonstrated&lt;/a&gt; by Stribling &lt;i&gt;et al.&lt;/i&gt; to be susceptible to &lt;a href="http://pdos.csail.mit.edu/scigen/"&gt;random paper generation&lt;/a&gt;, they have a new strategy:

&lt;blockquote&gt;Submitted papers or extended abstracts will have three kinds of reviews: double-blind (by at least three reviewers), non-blind, and participative &lt;b&gt;peer-to-peer&lt;/b&gt; reviews.&lt;/blockquote&gt;

(Emphasis mine.) The conference web site further &lt;a href="http://www.iiis2009.org/wmsci/Website/Pptpr.asp?vc=1"&gt;describes&lt;/a&gt; the peer-to-peer review process as

&lt;blockquote&gt;Informal, nonlinear, systemically interactive methods, for the achievement of what is called bottom-up quality[.]&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;This is great news; as a sometime peer-to-peer researcher myself, I'm eager to see nonlinear peer-to-peer reviewing technology adopted.&lt;/p&gt;

&lt;p&gt;I understand that as future work WMSCI is developing an &lt;a href="http://www.nist.gov/dads/HTML/obliviousAlgorithm.html"&gt;oblivious algorithm&lt;/a&gt; for ad-hoc low-power reviewing.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1592509820890071145?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1592509820890071145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/09/recent-results-in-nonlinear-peer-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1592509820890071145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1592509820890071145'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/09/recent-results-in-nonlinear-peer-to.html' title='Recent results in nonlinear peer-to-peer reviewing algorithms'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-5087713553064517303</id><published>2008-08-22T02:23:00.000-07:00</published><updated>2010-08-04T13:22:15.811-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Computer Science Research Trends</title><content type='html'>&lt;script language="JavaScript"&gt;
function setTrendGraph(form) {
 var i = document.getElementById("trend-browser-img");
 var a = document.getElementById("trend-browser-link");
 if (form.research_trend_graph.value == "2") {
  i.src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPA1Ny8yI/AAAAAAAAADg/iukebqttMQo/s400/trends2.gif";
  a.href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPA1Ny8yI/AAAAAAAAADg/iukebqttMQo/s1600-h/trends2.gif";
  }
 else if (form.research_trend_graph.value == "3") {
  i.src="http://1.bp.blogspot.com/_QqyK36WvRNs/SLJPBIsQ_CI/AAAAAAAAADo/Ecimn_CPti0/s400/trends3.gif";
  a.href="http://1.bp.blogspot.com/_QqyK36WvRNs/SLJPBIsQ_CI/AAAAAAAAADo/Ecimn_CPti0/s1600-h/trends3.gif";
  }
 else if (form.research_trend_graph.value == "4") {
  i.src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBG99SiI/AAAAAAAAADw/kFF0Wde5k_I/s400/trends4.gif";
  a.href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBG99SiI/AAAAAAAAADw/kFF0Wde5k_I/s1600-h/trends4.gif";
  }
 else if (form.research_trend_graph.value == "5") {
  i.src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBcmMJII/AAAAAAAAAD4/ahYJVTsXOcs/s400/trends5.gif";
  a.href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBcmMJII/AAAAAAAAAD4/ahYJVTsXOcs/s1600-h/trends5.gif";
  }
 else if (form.research_trend_graph.value == "6") {
  i.src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBZTEkbI/AAAAAAAAAEA/3q_eEabNNio/s400/trends6.gif";
  a.href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPBZTEkbI/AAAAAAAAAEA/3q_eEabNNio/s1600-h/trends6.gif";
  }
 else if (form.research_trend_graph.value == "7") {
  i.src="http://3.bp.blogspot.com/_QqyK36WvRNs/SLJP-gvgNtI/AAAAAAAAAEI/XAMYSGoyAkY/s400/trends7.gif";
  a.href="http://3.bp.blogspot.com/_QqyK36WvRNs/SLJP-gvgNtI/AAAAAAAAAEI/XAMYSGoyAkY/s1600-h/trends7.gif";
  }
 }
&lt;/script&gt;

&lt;p&gt;Computer science is a fast-changing field of research. Can we track some of its changes in the past?  To answer this or any other question, experimental computer science researchers have essentially three options:
&lt;ol&gt;
&lt;li&gt;Write a program.&lt;/li&gt;
&lt;li&gt;Search the Internet.&lt;/li&gt;
&lt;li&gt;Write a program that searches the Internet.&lt;/li&gt;
&lt;/ol&gt;
We'll take the last approach in this post.  We can pick a term and look at &lt;b&gt;term frequency&lt;/b&gt;, that is the fraction of abstracts containing the term, as a function of time.  Conveniently the ACM Digital Library and Guide have an &lt;a href="http://portal.acm.org/advsearch.cfm"&gt;advanced search&lt;/a&gt; that we can exploit to analyze term frequency across decades of abstracts.  We'll start with a generic term, &lt;i&gt;performance:&lt;/i&gt;&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SLJN3_TsTEI/AAAAAAAAADQ/VEz9Pn2MX0Y/s1600-h/needs_normalization.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SLJN3_TsTEI/AAAAAAAAADQ/VEz9Pn2MX0Y/s320/needs_normalization.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238334940867480642" /&gt;&lt;/a&gt;

&lt;p&gt;Let me say now, in case it becomes unclear later, that all the data presented here is actually derived from the ACM's database; it is not made up. (As for the &lt;i&gt;interpretation&lt;/i&gt; of the data, well, ...) Moving on, we can plot a couple other terms, &lt;i&gt;which&lt;/i&gt; and &lt;i&gt;that&lt;/i&gt;:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJN3zWGayI/AAAAAAAAADY/wF2VKnVy4do/s1600-h/needs_normalization1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJN3zWGayI/AAAAAAAAADY/wF2VKnVy4do/s320/needs_normalization1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238334937656355618" /&gt;&lt;/a&gt;

&lt;p&gt;The naive reader will conclude that conjunctions went out of fashion in the mid 80's, and came back after the dot com crash. However, the inappropriately perspicacious reader realizes that this conclusion is subtly flawed, because the word "that" might be a pronoun, adjective, or adverb: not just a conjunction. Fortunately the astute reader realizes we can look at relative instead of absolute frequencies to help clean up the data set.&lt;/p&gt;

&lt;p&gt;The next group of figures are normalized by the term &lt;i&gt;performance&lt;/i&gt;. For example, the blue line in the first plot below shows freq(&lt;i&gt;mobile&lt;/i&gt;) / freq(&lt;i&gt;performance&lt;/i&gt;).&lt;/p&gt;

&lt;table border=0 cellspacing=1 cellpadding=0 width=400 bgcolor=#C6C6C6&gt;&lt;tr&gt;&lt;td align=center bgcolor=#E0E0E0&gt;
&lt;form name=trend_browser_form&gt;
 Select plot:
 &lt;select name="research_trend_graph" onChange="setTrendGraph(this.form)"&gt;
  &lt;option value="2"&gt;performance, interactive, mobile, ad hoc&lt;/option&gt;
  &lt;option value="5"&gt;proof, simulation, experiment&lt;/option&gt;
  &lt;option value="3"&gt;TCP, RAID, BGP, DHT&lt;/option&gt;
  &lt;option value="4"&gt;supercomputer, cluster, data center&lt;/option&gt;
  &lt;option value="6"&gt;simple, efficient, correct, reliable&lt;/option&gt;
  &lt;option value="7"&gt;system, algorithm, network, database&lt;/option&gt;
 &lt;/select&gt;
&lt;/form&gt;

Click on the image below for a larger version.
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td bgcolor="#FFFFFF" width=400 height=220 align=center valign=center&gt;

&lt;a id="trend-browser-link" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"
href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJPA1Ny8yI/AAAAAAAAADg/iukebqttMQo/s1600-h/trends2.gif"&gt;&lt;img
id="trend-browser-img" style="border:0; margin:0;" src="http://3.bp.blogspot.com/_QqyK36WvRNs/SLJPA1Ny8yI/AAAAAAAAADg/iukebqttMQo/s400/trends2.gif" border=0&gt;&lt;/a&gt;

&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Now some "matchups", where &lt;i&gt;x&lt;/i&gt; v. &lt;i&gt;y&lt;/i&gt; = freq(&lt;i&gt;x&lt;/i&gt;) / freq(&lt;i&gt;y&lt;/i&gt;).  Click on an image to enlarge.&lt;/p&gt;

&lt;table&gt;&lt;tr&gt;&lt;td align="center" valign="center"&gt;&lt;b&gt;distributed&lt;br&gt;v.&lt;br&gt;centralized&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMd58uMuI/AAAAAAAAAC4/lqyqcC-SVKw/s1600-h/distributed-centralized.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMd58uMuI/AAAAAAAAAC4/lqyqcC-SVKw/s320/distributed-centralized.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238333393240732386" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td align="center" valign="center"&gt;&lt;b&gt;flat&lt;br&gt;v.&lt;br&gt;hierarchical&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMmnWj1jI/AAAAAAAAADA/SigzTeQanYw/s1600-h/flat-hierarchical.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMmnWj1jI/AAAAAAAAADA/SigzTeQanYw/s320/flat-hierarchical.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238333542867654194" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td align="center" valign="center"&gt;&lt;b&gt;Berkeley&lt;br&gt;v.&lt;br&gt;Stanford&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QqyK36WvRNs/SLJMBJAkWLI/AAAAAAAAACw/ebvhRT0Sdv4/s1600-h/berkeley-stanford.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_QqyK36WvRNs/SLJMBJAkWLI/AAAAAAAAACw/ebvhRT0Sdv4/s320/berkeley-stanford.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238332899067189426" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td align="center" valign="center"&gt;&lt;b&gt;Us&lt;br&gt;v.&lt;br&gt;Them&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMunpD8SI/AAAAAAAAADI/_ETDCS36h3Y/s1600-h/us-them.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_QqyK36WvRNs/SLJMunpD8SI/AAAAAAAAADI/_ETDCS36h3Y/s320/us-them.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238333680384209186" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;They're winning, but we're gaining on Them.&lt;/p&gt;

&lt;p&gt;Now our final, and perhaps most important, plot.&lt;/p&gt;

&lt;table&gt;&lt;tr&gt;&lt;td align="center" valign="center"&gt;&lt;b&gt;Good&lt;br&gt;v.&lt;br&gt;Evil&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QqyK36WvRNs/SLHvC93xGMI/AAAAAAAAACI/Jgqzs2DH2dI/s1600-h/good-evil.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_QqyK36WvRNs/SLHvC93xGMI/AAAAAAAAACI/Jgqzs2DH2dI/s320/good-evil.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5238230675855841474" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;While computer science is solidly on the side of good, several abstracts in this search were disturbingly megalomaniacal, such as J. R. Landry's "&lt;a href="http://portal.acm.org/citation.cfm?id=1355238.1355256"&gt;Can computing professionals be the unintentional architects of evil information systems?&lt;/a&gt;", in ACM SIGMIS-CPR, 2008.  The author "discusses how the technical rational paradigm supports the creation of systems that embody administrative evil" and aims to "determine if information systems can harm or be evil, the frequency of harm, and response to harm by designers and users."&lt;/p&gt;

&lt;p&gt;We can be thankful that according to its abstract, the paper is only "a research-in-progress".&lt;/p&gt;
&lt;p&gt;&lt;i&gt;This post was originally an Outrageous Opinion at SIGCOMM'08.
Here's a PDF of the &lt;a href="http://www.cs.berkeley.edu/~pbg/sigcomm08-outrageous_opinion.pdf"&gt;original presentation&lt;/a&gt;.
&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-5087713553064517303?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/5087713553064517303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/computer-science-research-trends.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/5087713553064517303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/5087713553064517303'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/computer-science-research-trends.html' title='Computer Science Research Trends'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QqyK36WvRNs/SLJN3_TsTEI/AAAAAAAAADQ/VEz9Pn2MX0Y/s72-c/needs_normalization.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-4331200979765007108</id><published>2008-08-15T15:24:00.000-07:00</published><updated>2010-08-04T13:22:41.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Judicial Linguistics</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;There is nothing inherently argumentative or prejudicial about transitive verbs [.]&lt;/p&gt;&lt;p&gt;&amp;mdash; Sacramento County Superior Court Judge &lt;a href="http://www.mercurynews.com/breakingnews/ci_10140389"&gt;Timothy M. Frawley&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

Turns out it's &lt;a href="http://www.sacbar.org/members/saclawyer/sept_oct2002/frawley.html"&gt;not his first&lt;/a&gt; foray into judicial linguistics.

&lt;blockquote&gt;During a recent trial, both attorneys handling a case before Judge Timothy M. Frawley misused the word "acclimated" while questioning a witness. Frawley ... waited for a break in the proceedings and, outside the presence of the jury and witness, alerted the attorneys to the correct use of the word.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-4331200979765007108?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/4331200979765007108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/judicial-linguistics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/4331200979765007108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/4331200979765007108'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/judicial-linguistics.html' title='Judicial Linguistics'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8216930037889709643.post-1220298630325238965</id><published>2008-08-06T02:31:00.000-07:00</published><updated>2011-12-06T16:37:52.956-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cs'/><title type='text'>Graphing English</title><content type='html'>&lt;script language="JavaScript"&gt;
function connect(form) {
 document.getElementById('waitmessage').innerHTML = '&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://brighten.bigw.org/youinfinitesnake/loading_indicator.gif" border="0"&gt;&lt;/td&gt;&lt;td valign=center&gt;&lt;b&gt;&lt;font color="#cc6600"&gt;finding connection; just a moment...&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;';
 var wordvis = document.getElementById("wordvis");
 if (form.word1.value == 'predaceous' &amp;&amp; form.word2.value == 'prehension') {
  wordvis.src = 'http://brighten.bigw.org/youinfinitesnake/second-largest-component.gif';
  }
 else {
  wordvis.src = 'http://brighten.bigw.org/youinfinitesnake/wordgraph.cgi?word1=' +  form.word1.value + '&amp;word2=' + form.word2.value;
  }
 }
function checkEnter(e){
 var characterCode;
 if (e &amp;&amp; e.which) { characterCode = e.which }
 else { e = event; characterCode = e.keyCode }
 if (characterCode == 13) {
  connect(document["wordgraphform"])
  }
 return (characterCode != 13)
 }
function showSecondLargest() {
 document.wordgraphform.word1.value = 'predaceous';
 document.wordgraphform.word2.value = 'prehension';
 connect(document.wordgraphform);
 return false;
 }
function hidePleaseWait() {
 document.getElementById('waitmessage').innerHTML = '';
 }
&lt;/script&gt;

&lt;p&gt;Given two words, can we connect them by a chain of synonyms? For example: &lt;i&gt;&lt;b&gt;minuscule&lt;/b&gt; &amp;mdash; little &amp;mdash; short &amp;mdash; poor &amp;mdash; wretched &amp;mdash; ugly &amp;mdash; frightful &amp;mdash; tremendous &amp;mdash; &lt;b&gt;enormous&lt;/b&gt;&lt;/i&gt;. Try some:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;[Note, the tool's offline right now due to a system reinstallation ... should come back shortly ... -- Dec 6, 2011]&lt;/b&gt;&lt;/p&gt;

&lt;a name="wordapp"&gt;&lt;/a&gt;
&lt;center&gt;
&lt;table border=0 cellspacing=1 cellpadding=0 width=550 bgcolor=#C6C6C6&gt;&lt;tr&gt;&lt;td align=center bgcolor=#E0E0E0&gt;Connect two words with a chain of synonyms:&lt;br&gt;&lt;form
name=wordgraphform&gt;
&lt;input type=text name=word1 size="12" maxlength="80" onKeyPress="return checkEnter()" value="black"&gt;
&lt;input type=text name=word2 size="12" maxlength="80" onKeyPress="return checkEnter()" value="white"&gt;
&lt;input type=button value=connect onClick="connect(this.form)"&gt;&lt;div id=waitmessage&gt;&lt;/div&gt;&lt;/form&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#FFFFFF"&gt;&lt;iframe frameborder=0 width=550 height=400 src="http://brighten.bigw.org/youinfinitesnake/black-white.gif" name="wordvis" id="wordvis" onload="hidePleaseWait()"&gt;&lt;/iframe&gt;
&lt;tr&gt;&lt;td align=center bgcolor=#E0E0E0&gt;&lt;form method="get" action="http://wordnet.princeton.edu/perl/webwn" enctype="multipart/form-data" name="f"&gt;Look up a word:&lt;input type="text" name="s" size=15 maxlength="500"&gt;&lt;input type="submit" name="sub" value="WordNet it"&gt;&lt;/form&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/center&gt;

&lt;p&gt;In the graphs above, each node is a word and an edge connects each pair of displayed words that can be synonymous. The raw data on semantic relationships is from Princeton's &lt;a href="http://wordnet.princeton.edu/"&gt;WordNet&lt;/a&gt; project.&lt;/p&gt;

&lt;p&gt;Many word pairs are not linked.  How large is the largest connected component&amp;mdash;that is, the largest set of words such that any pair in the set can be connected by a chain of synonyms? An interesting graph theoretic question.&lt;/p&gt;

&lt;p&gt;The answer is that the largest component has &lt;b&gt;25,105 words&lt;/b&gt;, or 17% of all words in the database.  Meanwhile, the &lt;i&gt;second largest&lt;/i&gt; component is over six hundred times smaller, with only &lt;b&gt;38&amp;nbsp;words&lt;/b&gt; (&lt;b&gt;&lt;a href="#wordapp" onClick="showSecondLargest()"&gt;show it above&lt;/a&gt;&lt;/b&gt;).&lt;/p&gt;

&lt;p&gt;Is this structure bizarre?  Actually it's roughly what one would expect knowing random graph theory, which I'll now attempt to explain in one paragraph.  A classic (Erdős–Rényi) &lt;a href="http://en.wikipedia.org/wiki/Random_graph"&gt;random graph&lt;/a&gt; consists of &lt;i&gt;n&lt;/i&gt; nodes, connected by a bunch of edges chosen uniform-randomly.  Suppose the number of edges is such that on average, each node has &lt;i&gt;d&lt;/i&gt; neighbors (for us, &lt;i&gt;d&lt;/i&gt; synonyms).  Imagine exploring a connected component by starting at one node and expanding outward: first looking at the nodes that are one step away from the starting point, then two steps away, and so on.  What happens to the size of this frontier? If &lt;i&gt;d&lt;/i&gt;&amp;nbsp;&lt;&amp;nbsp;1 then the frontier tends to &lt;i&gt;shrink&lt;/i&gt; by a certain percentage in each step, so with high probability it dies out before the component gets very large. On the other hand, if &lt;i&gt;d&lt;/i&gt;&amp;nbsp;&gt;&amp;nbsp;1, then the frontier tends to &lt;i&gt;expand&lt;/i&gt; by a certain percentage in each step. Chances are pretty good that the frontier just gets bigger and bigger until the component includes a good fraction of all &lt;i&gt;n&lt;/i&gt; nodes in the graph. That's the giant component.  The second largest component must be very small, specifically &lt;i&gt;O&lt;/i&gt;(log&amp;nbsp;&lt;i&gt;n&lt;/i&gt;) nodes, since otherwise it's likely to intersect with, and thus be absorbed by, the giant component.&lt;/p&gt;

&lt;p&gt;Our graph of English has &lt;i&gt;d&lt;/i&gt; = 2.92 synonyms per word. But of course English is not a random graph&amp;mdash;which, with the same &lt;i&gt;d&lt;/i&gt;, would have a largest component of 93% of its nodes and a second largest of about 5 nodes. Considering that we get within an order of magnitude without modeling any of the structure of the language except the number &lt;i&gt;d&lt;/i&gt;, this is not so bad. And WordNet doubtless does not perfectly represent English: for example, it's plausible that common words are better annotated with synonymy relations than, say, &lt;i&gt;abulia&lt;/i&gt; or &lt;i&gt;vituperation&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;I was led to think of this topic during conversation with some folks from &lt;a href="http://www.cs.ucl.ac.uk/"&gt;UCL&lt;/a&gt; and &lt;a href="http://www.bme.cmu.edu/"&gt;CMU&lt;/a&gt;. But others have built a graph out of WordNet too (after all, it is called Word&lt;i&gt;Net&lt;/i&gt;).  A paper by Kamps, Marx, Mokken, and de Rijke, &lt;a href="http://staff.science.uva.nl/~kamps/publications/2004/kamp:usin04.pdf"&gt;Using WordNet to Measure Semantic Orientations of Adjectives&lt;/a&gt;, scores words based on their relative distance to "good" vs. "bad".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8216930037889709643-1220298630325238965?l=youinfinitesnake.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://youinfinitesnake.blogspot.com/feeds/1220298630325238965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/graphing-english.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1220298630325238965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8216930037889709643/posts/default/1220298630325238965'/><link rel='alternate' type='text/html' href='http://youinfinitesnake.blogspot.com/2008/08/graphing-english.html' title='Graphing English'/><author><name>Brighten Godfrey</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
