<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Disqus - Latest Comments for btaylor</title><link>https://disqus.com/by/btaylor/</link><description></description><atom:link href="https://disqus.com/btaylor/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Wed, 28 Sep 2011 18:34:13 -0000</lastBuildDate><item><title>Re: Social Cookbook: an open source Open Graph app - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/social-cookbook-an-open-source-open-graph-app#comment-322182968</link><description>&lt;p&gt;This is just because we are in the Developer Beta period of Timeline. All of this will work once Timeline rolls out more broadly in a couple of weeks.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Wed, 28 Sep 2011 18:34:13 -0000</pubDate></item><item><title>Re: Social Cookbook: an open source Open Graph app - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/social-cookbook-an-open-source-open-graph-app#comment-322182859</link><description>&lt;p&gt;This is just because we are in the Developer Beta period of Timeline. All of this will work once Timeline rolls out more broadly in a couple of weeks.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Wed, 28 Sep 2011 18:34:04 -0000</pubDate></item><item><title>Re: Social Cookbook: an open source Open Graph app - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/social-cookbook-an-open-source-open-graph-app#comment-321574214</link><description>&lt;p&gt;Yah, this is just because of the limited rollout.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Wed, 28 Sep 2011 03:15:15 -0000</pubDate></item><item><title>Re: Web Sockets in Tornado - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/web-sockets-in-tornado#comment-32954384</link><description>&lt;p&gt;I observed this issue as well, and it appears to be a bug in the kqueue implementation in &lt;a href="http://ioloop.py" rel="nofollow noopener" target="_blank" title="ioloop.py"&gt;ioloop.py&lt;/a&gt; that was recently submitted. For a quick workaround, delete lines 419 - 421 in tornado/&lt;a href="http://ioloop.py" rel="nofollow noopener" target="_blank" title="ioloop.py"&gt;ioloop.py&lt;/a&gt;. I am diagnosing the issue now and hope to have a "real" patch soon.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sun, 07 Feb 2010 15:54:59 -0000</pubDate></item><item><title>Re: crad on tumblr - Web Application Development with Tornado</title><link>http://crad.tumblr.com/post/351142148#comment-31090276</link><description>&lt;p&gt;Thanks for the great writeup!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sun, 24 Jan 2010 17:17:15 -0000</pubDate></item><item><title>Re: Web Sockets in Tornado - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/web-sockets-in-tornado#comment-27687454</link><description>&lt;p&gt;What browser are you using? You may need the Developer Channel of Chrome for Web Socket support (&lt;a href="http://dev.chromium.org/getting-involved/dev-channel)" rel="nofollow noopener" target="_blank" title="http://dev.chromium.org/getting-involved/dev-channel)"&gt;http://dev.chromium.org/get...&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Thu, 31 Dec 2009 16:53:30 -0000</pubDate></item><item><title>Re: OAuth WRAP support in FriendFeed for feedback - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/oauth-wrap#comment-26974412</link><description>&lt;p&gt;It is a custom blog written with Tornado (&lt;a href="http://www.tornadoweb.org/)" rel="nofollow noopener" target="_blank" title="http://www.tornadoweb.org/)"&gt;http://www.tornadoweb.org/)&lt;/a&gt; that runs on Google AppEngine. Source code is available at &lt;a href="http://github.com/finiteloop/blog" rel="nofollow noopener" target="_blank" title="http://github.com/finiteloop/blog"&gt;http://github.com/finiteloo...&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Tue, 22 Dec 2009 13:38:19 -0000</pubDate></item><item><title>Re: test - David Krisch's blog</title><link>http://david-krisch.appspot.com/entry/test#comment-16930829</link><description>&lt;p&gt;Mind updating your disqus ID? I am getting emails for all these comments because they are still associated with the "bretttaylor" disqus ID from my blog template that you copied.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 19 Sep 2009 15:59:58 -0000</pubDate></item><item><title>Re: Experimenting with Google App Engine - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/experimenting-google-app-engine#comment-16512919</link><description>&lt;p&gt;The source code for this blog is now checked in at &lt;a href="http://github.com/finiteloop/blog/tree/master" rel="nofollow noopener" target="_blank" title="http://github.com/finiteloop/blog/tree/master"&gt;http://github.com/finiteloo...&lt;/a&gt; now that we have open sourced Tornado (&lt;a href="http://bret.appspot.com/entry/tornado-web-server)" rel="nofollow noopener" target="_blank" title="http://bret.appspot.com/entry/tornado-web-server)"&gt;http://bret.appspot.com/ent...&lt;/a&gt;.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 12 Sep 2009 17:41:10 -0000</pubDate></item><item><title>Re: The technology behind Tornado, FriendFeed's web server - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/tornado-web-server#comment-16500492</link><description>&lt;p&gt;The asynchronous features are not available in Google AppEngine, but a subset of Tornado's features do work in AppEngine. See &lt;a href="http://www.tornadoweb.org/documentation#wsgi-and-google-appengine" rel="nofollow noopener" target="_blank" title="http://www.tornadoweb.org/documentation#wsgi-and-google-appengine"&gt;http://www.tornadoweb.org/d...&lt;/a&gt; and the included "appengine" example for a full-featured App Engine example app.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 12 Sep 2009 12:07:10 -0000</pubDate></item><item><title>Re: The technology behind Tornado, FriendFeed's web server - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/tornado-web-server#comment-16389114</link><description>&lt;p&gt;I can't imagine there is much of a performance difference. The bottom is not that complex in my opinion. See &lt;a href="http://ioloop.py" rel="nofollow noopener" target="_blank" title="ioloop.py"&gt;ioloop.py&lt;/a&gt; and &lt;a href="http://iostream.py" rel="nofollow noopener" target="_blank" title="iostream.py"&gt;iostream.py&lt;/a&gt; for the details.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Thu, 10 Sep 2009 17:42:25 -0000</pubDate></item><item><title>Re: The technology behind Tornado, FriendFeed's web server - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/tornado-web-server#comment-16314810</link><description>&lt;p&gt;When we started, we did use Twisted. In practice, I found Twisted tedious. The deferred abstraction works, but I didn't love it in practice. Likewise, the HTTP/web support in Twisted is very chaotic (see &lt;a href="http://twistedmatrix.com/trac/wiki/WebDevelopmentWithTwisted" rel="nofollow noopener" target="_blank" title="http://twistedmatrix.com/trac/wiki/WebDevelopmentWithTwisted"&gt;http://twistedmatrix.com/tr...&lt;/a&gt; - even they acknowledge this). In general, it seems like Twisted is full of demo-quality stuff, but most of the protocols have tons of bugs.&lt;/p&gt;&lt;p&gt;Given all those factors, it didn't seem to provide a lot of value. Our core I/O loop is actually pretty small and simple, and I think resulted in fewer bugs than would have come up if we had used Twisted.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Thu, 10 Sep 2009 13:50:36 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-14914785</link><description>&lt;p&gt;Replicate away - that's why we published it. FYI, the entire site is licensed under Creative Commons (&lt;a href="http://creativecommons.org/licenses/by/2.5/)" rel="nofollow noopener" target="_blank" title="http://creativecommons.org/licenses/by/2.5/)"&gt;http://creativecommons.org/...&lt;/a&gt;, and all the source code under Apache 2. I am not sure which type of license is appropriate for a description of a scheme like this, so if you want an official license, you can consider it licensed under both and choose whichever seems most appropriate.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sun, 16 Aug 2009 14:13:15 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-9933642</link><description>&lt;p&gt;Indexes are stored as btrees on disk, so you can iterate over them both backwards and forwards equally efficiently.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Mon, 25 May 2009 14:30:59 -0000</pubDate></item><item><title>Re: Why I Didn&amp;rsquo;t Get to See FriendFeed&amp;rsquo;s Redesign</title><link>http://www.sarahintampa.com/sarah/2009/04/06/why-i-didnt-get-to-see-friendfeeds-redesign.html#comment-7908635</link><description>&lt;p&gt;So sorry. We were pretty swamped finishing things this weekend, and am extremely sorry we didn't connect. We will make ourselves more accessible in the future. We appreciate your being so candid, and sorry again for the miscommunication on our end.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Mon, 06 Apr 2009 13:32:20 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6997337</link><description>&lt;p&gt;We do include multiple columns in the same table. We treat them just like we would treat keys on other tables. Here is one of our standard many-to-one indexes, which indexes two properties (stream_ids[] and sort_time):&lt;/p&gt;&lt;p&gt;CREATE TABLE index_stream_id_sort_time (&lt;br&gt;    stream_id BINARY(16) NOT NULL,&lt;br&gt;    sort_time INT NOT NULL,&lt;br&gt;    entry_id BINARY(16) NOT NULL,&lt;br&gt;    PRIMARY KEY (stream_id, sort_time, entry_id),&lt;br&gt;    UNIQUE KEY (entry_id, stream_id)&lt;br&gt;) ENGINE=InnoDB;&lt;/p&gt;&lt;p&gt;We don't use any SQL joins in our current system.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sun, 08 Mar 2009 14:52:57 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6973595</link><description>&lt;p&gt;We do compression in the client as a part of the serialization process.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 07 Mar 2009 01:25:25 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6732467</link><description>&lt;p&gt;We are definitely open to open sourcing it. It is not quite abstracted enough, and it is a bit intertwined with our code's FriendFeed-isms, but Ben Golub and I talked about it a bit recently, and I am committed to make it happen at some point.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 28 Feb 2009 18:36:30 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6729729</link><description>&lt;p&gt;Yes, we explicitly were not trying to achieve ACID semantics. See &lt;a href="http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6729708" rel="nofollow noopener" target="_blank" title="http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6729708"&gt;http://bret.appspot.com/ent...&lt;/a&gt; for a more detailed explanation.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 28 Feb 2009 15:21:24 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6729708</link><description>&lt;p&gt;1. We are actually ok with false negatives. As I said, the "Cleaner" runs continuously, so that false negatives are fixed within a couple of seconds. From a UI perspective, the user wouldn't see an entry in their feed for a couple of seconds if something crashes until the cleaner runs. For our system, that experience is acceptable (and the loosened constraints mean we can do a bunch of write optimizations that we wouldn't otherwise be able to do).&lt;/p&gt;&lt;p&gt;2. We have multiple databases, so the auto_increment can't work as a global ID. Furthermore, for practical reasons, we want to know the ID before we insert into the database. We use standard UUIDs for this purpose.&lt;/p&gt;&lt;p&gt;3. The choice of MEDIUMBLOB was simply based on our current needs.&lt;/p&gt;&lt;p&gt;4. We run many more than two instances of MySQL on a variety of different hosts. The example above is extremely simplified for the purposes of this blog post. We have run multiple instances on separate disks on the same machine. As long as they have enough memory so you are not going to disk for reads, this method works to a point. In particular, it helps if you want to, e.g., make more shards than you actually need right now so you can accommodate future growth. Put a couple of shards on each machine at first, then expand to 2X the number of machines when growth warrants it.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 28 Feb 2009 15:19:24 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6719528</link><description>&lt;p&gt;250 million entries. We store many more entities (the biggest other chunk of entities are comments). We aren't giving out our user numbers at this point, sorry.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Sat, 28 Feb 2009 00:46:16 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6715851</link><description>&lt;p&gt;We create new indexes in parallel by running one "cleaner" per shard. We don't want to parallelize much more than that because we don't want to disrupt other processes that are already using the DB. We don't use hadoop. It turns out it is so easy to parallelize, we haven't needed any specialized infrastructure to do so - we just parallelize by splitting into entry ID groups.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Fri, 27 Feb 2009 20:03:27 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6708810</link><description>&lt;p&gt;We do shard our indexes. We query all the relevant index shards in parallel and over-fetch. The indexes are stored in sort order, so sorting is not an issue. To paginate, we fetch start + num and truncate in Python.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Fri, 27 Feb 2009 15:09:23 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6705946</link><description>&lt;p&gt;Yes, we are definitely going to check that out. That was the one project that seemed most promising in our evaluation, and we still plan on doing a full evaluation.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Fri, 27 Feb 2009 13:23:08 -0000</pubDate></item><item><title>Re: How FriendFeed uses MySQL to store schema-less data - Bret Taylor's blog</title><link>http://bret.appspot.com/entry/how-friendfeed-uses-mysql#comment-6705959</link><description>&lt;p&gt;We use the Google Chart API: &lt;a href="http://code.google.com/apis/chart/" rel="nofollow noopener" target="_blank" title="http://code.google.com/apis/chart/"&gt;http://code.google.com/apis...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bret Taylor</dc:creator><pubDate>Fri, 27 Feb 2009 13:22:50 -0000</pubDate></item></channel></rss>