<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Andrei Zmievski</title>
	
	<link>http://gravitonic.com</link>
	<description>Life, technology, and other good things</description>
	<pubDate>Wed, 03 Jun 2009 21:26:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<geo:lat>37.380207</geo:lat><geo:long>-122.087871</geo:long><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://www.gravitonic.com/blog/archives/rss2.xml" type="application/rss+xml" /><item>
		<title>PHP Developers Meeting Notes</title>
		<link>http://gravitonic.com/2009/06/php-developers-meeting-notes</link>
		<comments>http://gravitonic.com/2009/06/php-developers-meeting-notes#comments</comments>
		<pubDate>Wed, 03 Jun 2009 21:26:31 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=805</guid>
		<description><![CDATA[Taking advantage of php&#124;tek bringing a lot of people together, we had a PHP developers meeting over 2 days before the conference. Day 1 was dedicated to technical issues in PHP 5 and 6, and day 2 was spent discussing potential features, migration issues, current roadblocks, etc.
The notes from the meeting are available on the [...]]]></description>
			<content:encoded><![CDATA[<p>Taking advantage of <a href="http://tek.mtacon.com/">php|tek</a> bringing a lot of people together, we had a PHP developers meeting over 2 days before the conference. Day 1 was dedicated to technical issues in PHP 5 and 6, and day 2 was spent discussing potential features, migration issues, current roadblocks, etc.</p>
<p>The <a href="  http://wiki.php.net/summits/pdmnotesmay09">notes from the meeting</a> are available on the wiki. These notes are not necessarily &#8220;decisions&#8221;, but they do reflect the consensus of the group that was at the meeting and hopefully present a more structured and outlined list of things that we can follow for PHP 5.4/6.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=KbvORlVZtLU:hMMysWsc0UM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=KbvORlVZtLU:hMMysWsc0UM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=KbvORlVZtLU:hMMysWsc0UM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=KbvORlVZtLU:hMMysWsc0UM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=KbvORlVZtLU:hMMysWsc0UM:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=KbvORlVZtLU:hMMysWsc0UM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=KbvORlVZtLU:hMMysWsc0UM:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/KbvORlVZtLU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/06/php-developers-meeting-notes/feed</wfw:commentRss>
		</item>
		<item>
		<title>May Wrap-up</title>
		<link>http://gravitonic.com/2009/06/may-wrap-up</link>
		<comments>http://gravitonic.com/2009/06/may-wrap-up#comments</comments>
		<pubDate>Tue, 02 Jun 2009 18:10:15 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Talks]]></category>

		<category><![CDATA[Travel]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=800</guid>
		<description><![CDATA[May has come and gone and for me almost half of it was spent on the road. SFO-DEN-BNA, BNA-ORD, ORD-ZRH-TXL-ZRH-ORD, ORD-SFO. To decipher that for you, I first went to Nashville to visit my friend Raquel and see the land of the honky tonks. I was surprised to find an almost full-sized replica of Parthenon [...]]]></description>
			<content:encoded><![CDATA[<p>May has come and gone and for me almost half of it was spent on the road. SFO-DEN-BNA, BNA-ORD, ORD-ZRH-TXL-ZRH-ORD, ORD-SFO. To decipher that for you, I first went to Nashville to visit my friend Raquel and see the land of the honky tonks. I was surprised to find an almost full-sized replica of Parthenon there, as well as a really great ƒood/drink scene. Some highlights include <a href="http://www.yelp.com/biz/3JpJ3b8r5jMdAb1yPmchrQ">Prince&#8217;s Hot Chicken Shack</a> (I dare you to order something more than medium hotness), a great beer place called <a href="http://www.yelp.com/biz/flying-saucer-nashville#hrid:5EoxM4nM7JHkFpG-BslEfw/src:self">The Flying Saucer</a> (150+ beers on the menu), and especially <a href="http://www.yelp.com/biz/4YoVUmkpUBNtdYa804Wzvg">The Patterson House</a> (recommended by the awesome <a href="http://stephdub.com/">Steph Dub</a>), where we spent a few hours snacking on tasty bits from the menu and drinking the awesome cocktails that the bartender mixologists prepared in front of us.</p>
<p>Then it was off to Chicago for <a href="http://tek.mtacon.com/">php|tek 2009</a> conference. The first two days were dedicated to the first real PHP developers meet-up since November 2005. On Monday we discussed technical issues with regard to PHP 5.3 and 6, and on Tuesday the topic shifted more towards potential features aside from Unicode to entice people to move to 6 and how to ease this migration. Overall it was a productive meeting and the notes should be posted soon. The next day I gave the opening keynote on the present and future of PHP. I managed to throw in a few inside jokes and funny photos in there to lighten up the morning mood. The rest of the conference was productive as well—there were great talks on everything from utilizing HTTP status codes to multi-level caching to a talk that <a href="http://blog.calevans.com/">Cal</a> gave on telecommuting. After the conference hours we stopped by the <a href="http://www.yelp.com/biz/the-map-room-chicago">Map Room</a> a couple times for some excellent beer flights (<a href="http://ratebeer.com/beer/new-belgium-la-folie/10513/">La Folie</a> on tap, OMG).</p>
<p> </p>
<div id="attachment_802" class="wp-caption alignright" style="width: 234px"><img class="size-medium wp-image-802" title="RailsWay??" src="http://gravitonic.com/wp/wp-content/uploads/2009/06/terry-224x300.jpg" alt="@tychay is not happy" width="224" height="300" /><p class="wp-caption-text">@tychay is not happy</p></div>
<p>After Chicago, I flew to Berlin for the International <a href="http://it-republik.de/php/phpconference/">PHP Conference Spring Edition 2009</a>. This year they accepted all 3 of my proposals, so I had my work cut out for me. Miraculously, I managed to make the German audience smile and even laugh a couple of times during my keynote. Success! The other two talks <strong><em>intl me this, intl me that</em></strong> on localizing and translating your pages, and <strong><em>All the Little Pieces</em></strong> on using PHP with memcached, mogilefs, and Gearman went well too. Funny enough, the RailsWay conference was going on at the same place—didn&#8217;t they know that Terry Chay is coming to town?! This was my first visit to Berlin, so <a href="http://terrychay.com/blog">Terry</a> and I played tourists for a bit and went to see Checkpoint Charlie, the remaining pieces of the Berlin Wall, Brandenburg Gate, and Reichstag. It is really amazing to consider that the Berlin Wall used to be 150 km long and embedded a piece of Western Germany in the middle of Eastern one.</p>
<p>Finally, I had a long series of flights home, and despite a mishap at the immigration in Chicago, arrived to my apartment safely and almost on time. It was great to see old friends and new faces and to talk to the best development community out there.</p>
<p>For those of you who wondered where to get the <strong>I � Unicode </strong>t-shirt that I wore during my keynote, I put <a href="http://www.zazzle.com/andreiz">the design up on Zazzle</a>, so you can get your own for the next gathering of the Unicode-minded folks.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=6xrImbAKfLs:NQnFaeqH52Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=6xrImbAKfLs:NQnFaeqH52Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=6xrImbAKfLs:NQnFaeqH52Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=6xrImbAKfLs:NQnFaeqH52Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=6xrImbAKfLs:NQnFaeqH52Y:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=6xrImbAKfLs:NQnFaeqH52Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=6xrImbAKfLs:NQnFaeqH52Y:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/6xrImbAKfLs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/06/may-wrap-up/feed</wfw:commentRss>
		</item>
		<item>
		<title>I Used DMCA</title>
		<link>http://gravitonic.com/2009/04/i-used-dmca</link>
		<comments>http://gravitonic.com/2009/04/i-used-dmca#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:29:03 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[Opinion]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=795</guid>
		<description><![CDATA[Yes, it&#8217;s true.
A recent post on Twitter from @atourino pointed to my VIM for (PHP) Programmers slidedeck on scribd.com. The slidedeck has been really popular, gathering close to 50,000 views, 2,500 downloads, a few dozen favorites ratings, and a &#8220;Hot&#8221; award. Good deal, eh? Except that I didn&#8217;t upload this slidedeck—someone else did.
Scribd&#8217;s about page [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, it&#8217;s true.</p>
<p>A recent <a href="http://twitter.com/atourino/statuses/1580129709">post on Twitter</a> from @atourino pointed to my <a href="http://www.scribd.com/doc/263139/VIM-for-PHP-Programmers">VIM for (PHP) Programmers</a> slidedeck on <a href="http://scribd.com">scribd.com</a>. The slidedeck has been really popular, gathering close to 50,000 views, 2,500 downloads, a few dozen favorites ratings, and a &#8220;Hot&#8221; award. Good deal, eh? Except that I didn&#8217;t upload this slidedeck—someone else did.</p>
<p>Scribd&#8217;s about page describes it as the place <em>&#8220;where you publish, discover and discuss original writings and documents&#8221;</em>. I&#8217;ve used it in the past to find all kinds of documents and there&#8217;s a lot to like about the site, but the keyword here is &#8220;original&#8221;. I really don&#8217;t mind sharing the slides—heck, I tell everyone at conferences to download them from my site—but on my <a href="http://gravitonic.com/talks">Talks</a> page I specifically ask people to obtain permission before re-publishing the slides elsewhere. It&#8217;s not a difficult thing to do. So far I&#8217;ve resisted putting a copyright notice on every slide, because I was hoping the common sense would apply, but apparently not for everyone.</p>
<p>I contacted Scribd&#8217;s customer support to see how I could take the ownership of the document in question. They replied that I would have to submit a <a href="http://support.scribd.com/forums/33563/entries/22980">DMCA copyright infringement notice</a> and ask for the document to be taken down. I understand that this is their policy, but I think this is going overboard, especially for a case like mine. I really wanted to handle this in a polite manner and in such a way that people&#8217;s links to the document wouldn&#8217;t break instead of doing the dickish move of demanding it be removed completely. At the same time, I feel that the person who uploaded my slides without permission was wrong. Thus, I had no choice but to send the DMCA notice along with a request for the document to be re-assigned to me.</p>
<p>I would encourage everyone to be more careful in handling publicly available content. Please check for any restrictions on usage and publishing, and if in doubt—ask. This will help avoid resorting to heavy-handed stuff like DMCA notices.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=9M6sgfsV0B0:gwAaNvFqkio:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=9M6sgfsV0B0:gwAaNvFqkio:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=9M6sgfsV0B0:gwAaNvFqkio:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=9M6sgfsV0B0:gwAaNvFqkio:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=9M6sgfsV0B0:gwAaNvFqkio:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=9M6sgfsV0B0:gwAaNvFqkio:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=9M6sgfsV0B0:gwAaNvFqkio:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/9M6sgfsV0B0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/04/i-used-dmca/feed</wfw:commentRss>
		</item>
		<item>
		<title>Speaking at Dutch PHP Conference 2009</title>
		<link>http://gravitonic.com/2009/04/speaking-at-dutch-php-conference-2009</link>
		<comments>http://gravitonic.com/2009/04/speaking-at-dutch-php-conference-2009#comments</comments>
		<pubDate>Thu, 09 Apr 2009 17:29:22 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=793</guid>
		<description><![CDATA[A couple of months ago I saw a teaser post from iBuildings about the new Dutch PHP Conference in Amsterdam this year. I really like Amsterdam, so I started racking my brain to see what kind of proposal I could submit. Not a day had passed when I got an email from Cal Evans asking [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of months ago I saw a teaser post from <a href="http://ibuildings.nl">iBuildings</a> about the new <a href="http://phpconference.nl">Dutch PHP Conference</a> in Amsterdam this year. I really like Amsterdam, so I started racking my brain to see what kind of proposal I could submit. Not a day had passed when I got an email from Cal Evans asking if I would like to give the opening keynote at the conference. Success! Of course I agreed and suggested an additional talk about distributed processing with PHP, titled &#8220;All the Little Pieces&#8221;.</p>
<p>The line-up for the conference looks great: Xdebug&#8217;s Derick Rethans, php|architect&#8217;s Marco Tabini, Zend Framework architect Matthew Weier O&#8217;Phinney, security guru Stefan Esser, &#8220;RESTful&#8221; Ben Ramsey, PHP core developer Scott MacVicar and many others. The early bird pricing is available until April 30, so I would encourage you to take advantage of it and come see what is bound to be a great event.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=LexPrSdlqKE:MLVAn8-ACzw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=LexPrSdlqKE:MLVAn8-ACzw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=LexPrSdlqKE:MLVAn8-ACzw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=LexPrSdlqKE:MLVAn8-ACzw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=LexPrSdlqKE:MLVAn8-ACzw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=LexPrSdlqKE:MLVAn8-ACzw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=LexPrSdlqKE:MLVAn8-ACzw:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/LexPrSdlqKE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/04/speaking-at-dutch-php-conference-2009/feed</wfw:commentRss>
		</item>
		<item>
		<title>Bloom Filters Quickie</title>
		<link>http://gravitonic.com/2009/04/bloom-filters-quickie</link>
		<comments>http://gravitonic.com/2009/04/bloom-filters-quickie#comments</comments>
		<pubDate>Fri, 03 Apr 2009 18:41:05 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=788</guid>
		<description><![CDATA[It&#8217;s been a couple of month since the release of pecl/memcached and I was getting the urge to write something else. At the same time, I was reading up on Bloom filters, but couldn&#8217;t find a PHP extension that implemented them. Thus, pecl/bloomy was born. Now, you may be wondering, what the heck is a [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a couple of month since the release of <a title="pecl/memcached" href="http://pecl.php.net/package/memcached">pecl/memcached</a> and I was getting the urge to write something else. At the same time, I was reading up on Bloom filters, but couldn&#8217;t find a PHP extension that implemented them. Thus, <a href="http://pecl.php.net/package/bloomy">pecl/bloomy</a> was born. Now, you may be wondering, what the heck is a Bloom filter why in the blooming sky would I want to use it? Well, read on.</p>
<p>A <a href="http://en.wikipedia.org/wiki/Bloom_filter">Bloom filter</a> is a probabilistic data structure that can be used to answer a simple question, is the given element a member of a set? Now, this question can be answered via other means, such as hash table or binary search trees. But the thing about Bloom filters is that they are incredibly space-efficient when the number of potential elements in the set is large. The way that they achieve this is by allowing false positives with a certain error rate. Basically, a Bloom filter will give you either &#8220;no&#8221; or &#8220;maybe&#8221; as the answer and it&#8217;s up to you to determine the false positive error rate that you can live with. The smaller the rate the larger the size of the filter, of course, but it takes only 9.6 bits per element for 1% rate and every time you add 4.8 bits, the error rate becomes ten times smaller. Compare this to other structures that require storing at least the data elements themselves in the majority of implementations. However, the more elements you add to the set, the larger the probability of false positives becomes, so it is important to estimate the size of your data set properly.</p>
<p>Another nice thing about Bloom filters is that the time to store and look up the element is constant and does not depend on how many elements are in the set. Now that&#8217;s a pretty nice property to have, isn&#8217;t it?</p>
<p>So, what are they good for? Well, Google <a href="http://en.wikipedia.org/wiki/BigTable">BigTable</a> uses Bloom filters to reduce the disk look-ups for non-existent data; <a href="http://code.google.com/p/the-cassandra-project/">Cassandra</a> also uses them to save IO; Digg might use them to implement checks for green tags on Digg buttons, i.e. have my friends Dugg this, etc. The possibilities are many.</p>
<p>The API of the extension is pretty simple. Create BloomFilter object and specify how many elements you expect to have in the set and what false positive rate you can tolerate. The extension will determine the optimal filter size and the number of hash functions to use. Then all do you is add and check elements.</p>
<p style="padding-left: 30px;"><code><span style="color: #000000;"><span style="color: #0000a0;">$b </span><span style="color: #b02000;">= new </span><span style="color: #0000a0;">BloomFilter</span><span style="color: #b02000;">(</span><span style="color: #0000a0;">100000</span><span style="color: #b02000;">, </span><span style="color: #0000a0;">0.001</span><span style="color: #b02000;">);<br />
</span><span style="color: #0000a0;">$b</span><span style="color: #b02000;">-&gt;</span><span style="color: #0000a0;">add</span><span style="color: #b02000;">(</span><span style="color: #206920;">&#8216;foo&#8217;</span><span style="color: #b02000;">);<br />
</span><span style="color: #0000a0;">$b</span><span style="color: #b02000;">-&gt;</span><span style="color: #0000a0;">add</span><span style="color: #b02000;">(</span><span style="color: #206920;">&#8216;bar&#8217;</span><span style="color: #b02000;">);<br />
</span><span style="color: #0000a0;">$answer1 </span><span style="color: #b02000;">= </span><span style="color: #0000a0;">$b</span><span style="color: #b02000;">-&gt;</span><span style="color: #0000a0;">has</span><span style="color: #b02000;">(</span><span style="color: #206920;">&#8216;foo&#8217;</span><span style="color: #b02000;">);<br />
</span><span style="color: #0000a0;">$answer2 </span><span style="color: #b02000;">= </span><span style="color: #0000a0;">$b</span><span style="color: #b02000;">-&gt;</span><span style="color: #0000a0;">has</span><span style="color: #b02000;">(</span><span style="color: #206920;">&#8216;zoo&#8217;</span><span style="color: #b02000;">);</span></span></code></p>
<p>Here we say that we expect to store 100,000 elements with a false positive rate of 0.1%. Then we add a couple of elements and check a couple too. Now, <code>$answer1</code> will be &#8220;yes&#8221;, but it may be wrong 0.1% of the time, i.e. if you check 1000 elements, you may expect to get &#8220;yes&#8221; for 1 of them when in fact it doesn&#8217;t exist in the set. The <code>$answer2</code> will always be &#8220;no&#8221; because &#8220;zoo&#8221; was never added to the filter.</p>
<p>What&#8217;s the performance like? From a simple benchmark with 0.1% false positive rate, the time to insert 100,000 items was 0.12 seconds, and time to check 100,000 items was 0.11 seconds (this is on my Macbook Pro). The space used by filter? 179721 bytes.</p>
<p>I encourage you to download the extension, play around with Bloom filters and see what uses can come up with.</p>
<p>UPDATE: <em>As Ryan pointed out in the comments, I misspoke when I said that $answer2 would always be &#8220;no&#8221; for &#8220;zoo&#8221;. It might be &#8220;yes&#8221;, but $answer2 would never be &#8220;no&#8221; for something that is in the filter, like &#8220;foo&#8221;.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=N01r__kcmoU:xbSk_qjifgU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=N01r__kcmoU:xbSk_qjifgU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=N01r__kcmoU:xbSk_qjifgU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=N01r__kcmoU:xbSk_qjifgU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=N01r__kcmoU:xbSk_qjifgU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=N01r__kcmoU:xbSk_qjifgU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=N01r__kcmoU:xbSk_qjifgU:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/N01r__kcmoU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/04/bloom-filters-quickie/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fixing FeedBurner Fiasco, Conclusion</title>
		<link>http://gravitonic.com/2009/03/fixing-feedburner-fiasco-conclusion</link>
		<comments>http://gravitonic.com/2009/03/fixing-feedburner-fiasco-conclusion#comments</comments>
		<pubDate>Fri, 06 Mar 2009 19:35:45 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[Other]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=780</guid>
		<description><![CDATA[In the previous post I mentioned that I was going to migrate to Google account on FeedBurner using a trick to avoid spamming the subscribers with old posts. The trick seemed to work fine, so here&#8217;s the explanation. I use WordPress (2.6), but this can be generalized to other systems. In wp-includes/feed-rss2.php, find the beginning [...]]]></description>
			<content:encoded><![CDATA[<p>In the previous post I mentioned that I was going to migrate to Google account on FeedBurner using a trick to avoid spamming the subscribers with old posts. The trick seemed to work fine, so here&#8217;s the explanation. I use WordPress (2.6), but this can be generalized to other systems. In <tt>wp-includes/feed-rss2.php</tt>, find the beginning of the post loop - the <tt>while( have_posts() )</tt> line - and add another one after it to exclude the posts dated earlier than the migration date from the feed. It should look something like this:</p>
<pre> <code><span style="color: #000000;"><span style="color: #0000a0;">&lt;?php </span><span style="color: #b02000;">while( </span><span style="color: #0000a0;">have_posts</span><span style="color: #b02000;">()) : </span><span style="color: #0000a0;">the_post</span><span style="color: #b02000;">();
 if (</span><span style="color: #0000a0;">get_post_time</span><span style="color: #b02000;">() &lt; </span><span style="color: #0000a0;">strtotime</span><span style="color: #b02000;">(</span><span style="color: #206920;">'2009-03-01'</span><span style="color: #b02000;">)) continue;
</span></span></code></pre>
<p>The end result of this is that your feed will contain only the items published after the specified date. This may be a bit strange for new subscribers, so I made a new blog post so as not to keep my feed completely empty, but for existing ones it should be transparent.</p>
<p>In general, I want to say that Google has completely mishandled this transition after their acquisition of FeedBurner. Chris Shiflett already <a href="http://shiflett.org/blog/2009/feb/migrating-from-feedburner-to-google">explained</a> what problems he saw with it, but I found one more: they broke the Awareness API. I noticed this because my feed statistics were all 0. Turns out that the old API URL (<tt>http://api.feedburner.com/</tt>) was gone, and you had to use the new one (<tt>http://feedburner.google.com/api</tt>). Breaking the legacy API URLs is a major violation of the contract you make with the users when you publish the API. At the very least, Google should have silently redirected the requests to the new API instead of doing the most egregious thing possible and simply removing the old URL. Shame on you, Google.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=wrL7s04-toA:TXAspZiyw7M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=wrL7s04-toA:TXAspZiyw7M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=wrL7s04-toA:TXAspZiyw7M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=wrL7s04-toA:TXAspZiyw7M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=wrL7s04-toA:TXAspZiyw7M:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=wrL7s04-toA:TXAspZiyw7M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=wrL7s04-toA:TXAspZiyw7M:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/wrL7s04-toA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/03/fixing-feedburner-fiasco-conclusion/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fixing FeedBurner Fiasco</title>
		<link>http://gravitonic.com/2009/03/fixing-feedburner-fiasco</link>
		<comments>http://gravitonic.com/2009/03/fixing-feedburner-fiasco#comments</comments>
		<pubDate>Fri, 06 Mar 2009 04:11:21 +0000</pubDate>
		<dc:creator>Andrei</dc:creator>
		
		<category><![CDATA[Other]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gravitonic.com/?p=776</guid>
		<description><![CDATA[If you use FeedBurner, you probably know that they were acquired by Google recently. They are also forcing you to migrate your account to Google on the next login. This presents a couple of issues detailed by Chris Shiflett in his post.
I&#8217;m going to attempt to avoid spamming my subscribers with a ton of recent [...]]]></description>
			<content:encoded><![CDATA[<p>If you use FeedBurner, you probably know that they were acquired by Google recently. They are also forcing you to migrate your account to Google on the next login. This presents a couple of issues detailed by Chris Shiflett in <a href="http://shiflett.org/blog/2009/feb/migrating-from-feedburner-to-google">his post</a>.</p>
<p>I&#8217;m going to attempt to avoid spamming my subscribers with a ton of recent posts by making sure that the feed contains only the posts dated after the migration. Chris and I are pretty sure that it will work, but I guess the only way is to push the button and see. If this works, I&#8217;ll post a quick explanation of how to hack WordPress to modify your feed this way.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=yVRG-820N0I:-yCcxzwXzZc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=yVRG-820N0I:-yCcxzwXzZc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=yVRG-820N0I:-yCcxzwXzZc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=yVRG-820N0I:-yCcxzwXzZc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=yVRG-820N0I:-yCcxzwXzZc:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/gravitonic-rss2?a=yVRG-820N0I:-yCcxzwXzZc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/gravitonic-rss2?i=yVRG-820N0I:-yCcxzwXzZc:F7zBnMyn0Lo" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/gravitonic-rss2/~4/yVRG-820N0I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gravitonic.com/2009/03/fixing-feedburner-fiasco/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
