<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.simonwillison.net/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-gb"><title>Simon Willison's Links</title><link href="http://simonwillison.net/" rel="alternate" /><id>http://simonwillison.net/</id><updated>2011-08-19T12:20:10Z</updated><author><name>Simon Willison</name></author><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.simonwillison.net/swn-links" /><feedburner:info uri="swn-links" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><entry><title>A quote from Brian Goetz
</title><link href="http://simonwillison.net/2011/Aug/19/peek/" rel="alternate" /><updated>2011-08-19T12:20:10Z</updated><id>http://simonwillison.net/2011/Aug/19/peek/</id><summary type="html">



&lt;div class="quote segment"&gt;&lt;blockquote cite="http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html"&gt;&lt;p&gt;There is plenty of evidence in the ecosystem to support the hypothesis that, if given the tools to do so easily, object-oriented programmers are ready to embrace functional techniques (such as immutability) and work them into an object-oriented view of the world, and will write better, less error-prone code as a result. Simply put, we believe the best thing we can do for Java developers is to give them a gentle push towards a more functional style of programming.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="cite"&gt; - &lt;a href="http://mail.openjdk.java.net/pipermail/lambda-dev/2011-August/003877.html"&gt;Brian Goetz&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;


</summary><category term="functionalprogramming" /><category term="java" /></entry><entry><title>How we use Redis at Bump
</title><link href="http://simonwillison.net/2011/Jul/16/bump/" rel="alternate" /><updated>2011-07-16T16:37:17Z</updated><id>http://simonwillison.net/2011/Jul/16/bump/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://devblog.bu.mp/how-we-use-redis-at-bump"&gt;How we use Redis at Bump&lt;/a&gt;. A couple of neat tricks I hadn’t seen before: using Redis to aggregate log files from multiple servers (they all push in to a Redis queue, then one process pulls from the queue and writes to disk), and using Redis blocking queues for RPC by specifying a different temporary queue to return the result.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="bump" /><category term="redis" /></entry><entry><title>A quote from Dan Manges, Braintree
</title><link href="http://simonwillison.net/2011/Jun/30/braintree/" rel="alternate" /><updated>2011-06-30T21:27:10Z</updated><id>http://simonwillison.net/2011/Jun/30/braintree/</id><summary type="html">



&lt;div class="quote segment"&gt;&lt;blockquote cite="http://www.braintreepayments.com/inside-braintree/how-we-built-the-software-that-processes-billions-in-payments"&gt;&lt;p&gt;We can deploy new versions of our software, make database schema changes, or even rotate our primary database server, all without failing to respond to a single request. We can accomplish this because we gave ourselves the ability suspend our traffic, which gives us a window of a few seconds to make some changes before letting the requests through. To make this happen, we built a custom HTTP server and application dispatching infrastructure around Python’s Tornado and Redis.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="cite"&gt; - &lt;a href="http://www.braintreepayments.com/inside-braintree/how-we-built-the-software-that-processes-billions-in-payments"&gt;Dan Manges, Braintree&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;


</summary><category term="deployment" /><category term="http" /><category term="redis" /><category term="tornado" /></entry><entry><title>The New Heroku (Part 4 of 4): Erosion-resistance &amp; Explicit Contracts
</title><link href="http://simonwillison.net/2011/Jun/29/heroku/" rel="alternate" /><updated>2011-06-29T17:26:36Z</updated><id>http://simonwillison.net/2011/Jun/29/heroku/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts/"&gt;The New Heroku (Part 4 of 4): Erosion-resistance &amp;amp; Explicit Contracts&lt;/a&gt;. I really like Adam’s description of Software Erosion—I’ve seen that happen to my projects a bunch of times, and it really is an important problem to solve.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="heroku" /><category term="softwareerosion" /></entry><entry><title>Visualizing WebKit's hardware acceleration
</title><link href="http://simonwillison.net/2011/Jun/27/webkit/" rel="alternate" /><updated>2011-06-27T10:31:19Z</updated><id>http://simonwillison.net/2011/Jun/27/webkit/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://mir.aculo.us/2011/02/08/visualizing-webkits-hardware-acceleration/"&gt;Visualizing WebKit’s hardware acceleration&lt;/a&gt;. Command line flags for launching Safari (and the iOS simulator) in a way that highlights areas of the screen that are being hardware accelerated—particularly useful if you are using the “-webkit-transform: translate3d(0,0,0)” trick.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="css" /><category term="ios" /><category term="safari" /><category term="webkit" /></entry><entry><title>On HTTP Load Testing
</title><link href="http://simonwillison.net/2011/May/18/loadtesting/" rel="alternate" /><updated>2011-05-18T10:17:14Z</updated><id>http://simonwillison.net/2011/May/18/loadtesting/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://www.mnot.net/blog/2011/05/18/http_benchmark_rules"&gt;On HTTP Load Testing&lt;/a&gt;. Mark Nottingham explains that running good HTTP benchmarks means understanding available network bandwidth, using dedicated physical hardware, testing at progressively higher loads and a whole lot more.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="http" /><category term="loadtesting" /><category term="marknottingham" /></entry><entry><title>We Need to Stop Google's Exploitation of Open Communities
</title><link href="http://simonwillison.net/2011/Apr/22/mapmaker/" rel="alternate" /><updated>2011-04-22T10:00:04Z</updated><id>http://simonwillison.net/2011/Apr/22/mapmaker/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://brainoff.com/weblog/2011/04/11/1635"&gt;We Need to Stop Google’s Exploitation of Open Communities&lt;/a&gt;. Mikel Maron from OpenStreetMap is justifiably angry about Google MapMaker, which copies OpenStreetMap’s model of crowdsourcing geographic data (even copying the OSM idea of Mapping Parties) but keeps the data under a much more restrictive license, and uses the Google brand to market itself to African governments.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="google" /><category term="mapmaker" /><category term="openstreetmap" /></entry><entry><title>Why Facebook open-sourced its datacenters
</title><link href="http://simonwillison.net/2011/Apr/9/facebook/" rel="alternate" /><updated>2011-04-09T07:54:31Z</updated><id>http://simonwillison.net/2011/Apr/9/facebook/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://arstechnica.com/business/news/2011/04/why-facebook-open-sourced-its-datacenters.ars"&gt;Why Facebook open-sourced its datacenters&lt;/a&gt;. Jon Stokes speculates that Facebook plan to use open source hardware to compete with Google at datacenter efficiency . This isn’t a new pattern. Years ago when I worked at Yahoo! I was furiously jealous of the secret sauce technologies that allowed Google to build big applications faster than anyone else, such as BigTable and map/reduce. Today, the open source world has created better, free alternatives—sponsored in part by Facebook, Yahoo! and other Google competitors.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="facebook" /><category term="google" /><category term="opensource" /></entry><entry><title>Qwery - The Tiny Selector Engine
</title><link href="http://simonwillison.net/2011/Apr/2/qwery/" rel="alternate" /><updated>2011-04-02T08:27:09Z</updated><id>http://simonwillison.net/2011/Apr/2/qwery/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://dustindiaz.com/qwery"&gt;Qwery—The Tiny Selector Engine&lt;/a&gt;. A quarter of the size of Sizzle (1K gzipped and minified) due to only supporting ID, class and attribute selectors. Could be useful for things like embeddable widgets and badges, where depending on a larger library is impolite.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="badges" /><category term="css" /><category term="javascript" /></entry><entry><title>Product design at GitHub
</title><link href="http://simonwillison.net/2011/Apr/2/product/" rel="alternate" /><updated>2011-04-02T07:51:32Z</updated><id>http://simonwillison.net/2011/Apr/2/product/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://warpspire.com/posts/product-design/"&gt;Product design at GitHub&lt;/a&gt;. At GitHub, every employee is a product designer.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="github" /></entry><entry><title>YC Is Not a School for Startups - It Is Marine Corp Boot Camp for Startup Founders
</title><link href="http://simonwillison.net/2011/Mar/20/yc/" rel="alternate" /><updated>2011-03-20T17:27:16Z</updated><id>http://simonwillison.net/2011/Mar/20/yc/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://earbitscom.posterous.com/yc-is-not-a-school-for-startups-it-is-marine#"&gt;YC Is Not a School for Startups—It Is Marine Corp Boot Camp for Startup Founders&lt;/a&gt;. This is a great description of what it’s actually like to do YC. If you’ve been wondering why I haven’t blogged much over the past three months, this is why.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="ycombinator" /></entry><entry><title>Your Web, Half a Second Sooner
</title><link href="http://simonwillison.net/2011/Mar/17/your/" rel="alternate" /><updated>2011-03-17T17:39:01Z</updated><id>http://simonwillison.net/2011/Mar/17/your/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://googlecode.blogspot.com/2011/03/your-web-half-second-sooner.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A blogspot%2FDcni %28Google Code Blog%29"&gt;Your Web, Half a Second Sooner&lt;/a&gt;. Google AdSense now serves a tiny bit of JavaScript that loads everything else in a dynamically populated iframe, thus avoiding blocking the rest of the page load. It’s about time online advertising  providers started taking page performance seriously.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="adsense" /><category term="advertising" /><category term="performance" /></entry><entry><title>DNS Prefetching Implications
</title><link href="http://simonwillison.net/2011/Mar/9/dns/" rel="alternate" /><updated>2011-03-09T22:54:51Z</updated><id>http://simonwillison.net/2011/Mar/9/dns/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://www.pinkbike.com/news/DNS-Prefetching-implications.html"&gt;DNS Prefetching Implications&lt;/a&gt;. deviantart use a subdomain per user, which meant the DNS prefetching feature in Firefox and Chrome was costing them an extra 10 billion DNS queries per month. Disabling it with a meta tag saves them $1600/month in DNS service charges.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="dns" /></entry><entry><title>A quote from Maciej Ceglowski
</title><link href="http://simonwillison.net/2011/Feb/11/testing/" rel="alternate" /><updated>2011-02-11T02:57:04Z</updated><id>http://simonwillison.net/2011/Feb/11/testing/</id><summary type="html">



&lt;div class="quote segment"&gt;&lt;blockquote cite="http://www.readwriteweb.com/hack/2011/02/pinboard-creator-maciej-ceglow.php"&gt;&lt;p&gt;One interesting quirk of Pinboard is a complete absence of unit tests. I used to be a die-hard believer in testing, but in Pinboard tried a different approach, as an experiment. Instead of writng tests I try to be extremely careful in coding, and keep the code size small so I continue to understand it. I’ve found my defect rate to be pretty comparable to earlier projects that included extensive test suites and fixtures, but I am much more productive on Pinboard.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="cite"&gt; - &lt;a href="http://www.readwriteweb.com/hack/2011/02/pinboard-creator-maciej-ceglow.php"&gt;Maciej Ceglowski&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;


</summary><category term="maciejceglowski" /><category term="pinboard" /><category term="testing" /></entry><entry><title>CSRF: Flash + 307 redirect = Game Over
</title><link href="http://simonwillison.net/2011/Feb/10/csrf/" rel="alternate" /><updated>2011-02-10T22:07:30Z</updated><id>http://simonwillison.net/2011/Feb/10/csrf/</id><summary type="html">

&lt;div class="blogmark segment"&gt;&lt;p&gt;&lt;a href="http://lists.webappsec.org/pipermail/websecurity_lists.webappsec.org/2011-February/007533.html"&gt;CSRF: Flash + 307 redirect = Game Over&lt;/a&gt;. Here’s the exploit that Django and Rails both just released fixes for. It’s actually a flaw in the Flash player. Flash isn’t meant to be able to make cross-domain HTTP requests with custom HTTP headers unless the crossdomain.xml file on the other domain allows them to, but it turns out a 307 redirect (like a 302, but allows POST data to be forwarded) confuses the Flash player in to not checking the crossdomain.xml on the host it is being redirect to.&lt;/p&gt;
&lt;/div&gt;




</summary><category term="crossdomainxml" /><category term="csrf" /><category term="django" /><category term="flash" /><category term="rails" /><category term="security" /></entry></feed>

