<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for rcaden</title>
    <link>http://www.advogato.org/person/rcaden/</link>
    <description>Advogato blog for rcaden</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Sun, 7 Sep 2008 05:47:02 GMT</pubDate>
    <item>
      <pubDate>Thu, 14 Aug 2008 15:06:32 GMT</pubDate>
      <title>Adding ReCaptcha to a Weblog</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=39</link>
      <guid>http://www.cadenhead.org/workbench/news/3389/adding-recaptcha-weblog</guid>
      <description>&lt;p&gt;I've added a &lt;a href="http://recaptcha.net/" &gt;ReCaptcha component&lt;/a&gt; to the comment form on &lt;a href="http://www.cadenhead.org/workbench/" &gt;Workbench&lt;/a&gt; to deter spammers. The ReCaptcha system presents two hard-to-read words that must be typed in successfully for a comment to be saved. Here's what the component looks like:&lt;/p&gt;&lt;p align="center"&gt;&lt;img src="http://www.cadenhead.org/workbench/gems/recaptcha-box.png" width="321" height="130" alt="Recaptcha box for spam detection" /&gt;&lt;/p&gt;&lt;p&gt;I tried as long as possible to avoid using captchas, but the amount of spam hitting this blog continues to grow, particularly from foreign IP addresses. Workbench has received 16,000 comments and more than 260,000 spam since it began accepting comments in 2002.&lt;/p&gt;&lt;p&gt;The ReCaptcha project serves a &lt;a href="http://recaptcha.net/learnmore.html" &gt;useful purpose&lt;/a&gt;, digitizing old books and newspaper articles by getting millions of people to identify words that OCR software couldn't recognize. Adding the component took around 10 minutes: I signed up for a ReCaptcha account, stored the PHP library &lt;span class="fileref"&gt;recaptchalib.php&lt;/span&gt; on my web server, and added less than 20 lines of PHP to the page that takes comments.&lt;/p&gt;&lt;p&gt;The addition of captchas serves as official notice that my &lt;a href="http://www.cadenhead.org/workbench/news/3044/detecting-weblog-spam-comment-flak" &gt;comment flak technique&lt;/a&gt; failed to deter spammers. I'm retiring that code.&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Sat, 2 Aug 2008 15:06:29 GMT</pubDate>
      <title>SiteMeter Crashes Internet Explorer with 'Operation Aborted'</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=38</link>
      <guid>http://www.cadenhead.org/workbench/news/3386/sitemeter-crashes-internet-explorer</guid>
      <description>&lt;p&gt;Last night several of my web sites, including the &lt;a href="http://www.drudge.com/" &gt;Drudge Retort&lt;/a&gt;, began crashing Internet Explorer with the error message "Internet Explorer cannot open the Internet site ... Operation aborted."&lt;/p&gt;&lt;p&gt;I've encountered this error before, and when it occurs out of the blue on a site you haven't changed, the culprit is usually a &lt;a href="http://clientside.cnet.com/code-snippets/manipulating-the-dom/ie-and-operation-aborted/" &gt;problem with third-party Javascript code&lt;/a&gt;, as CNet's Clientside blog explains:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;IE does this when you attempt to modify a DOM element before it is closed. This means that if you try and append a child element to another and that other element (like the document.body) is still loading, you'll get this error.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;To find the error, remove JavaScript widgets one at a time from your site until the error disappears. The culprit here was SiteMeter, which made some &lt;a href="http://weblog.sitemeter.com/2008/07/31/stat-counter-display/" &gt;recent changes&lt;/a&gt; to its code. I've pulled the SiteMeter code until they announce a fix.&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 8 Jul 2008 20:10:26 GMT</pubDate>
      <title>Displaying Twitter Updates on a Web Page</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=37</link>
      <guid>http://www.cadenhead.org/workbench/news/3380/displaying-twitter-updates-web-page</guid>
      <description>&lt;p&gt;I recently began using &lt;a href="http://twitter.com/rcade" &gt;Twitter&lt;/a&gt;, a microblogging service for posting short, chat-like blog entries and reading what other users of the service are doing. The site has severe reliability problems, but it's still an entertaining way to get real-time updates from bloggers I read along with others I know who've been sucked into Twitter's maw.&lt;/p&gt;&lt;p&gt;I wrote some code to display my most recent Twitter update on my weblog, &lt;a href="http://www.cadenhead.org/workbench/" &gt;Workbench&lt;/a&gt;, in a sidebar at upper right. This afternoon, I've released the &lt;a href="http://www.cadenhead.org/workbench/twitter-rss-to-html" &gt;Twitter-RSS-to-HTML PHP script&lt;/a&gt; under an open source license. The script requires &lt;a href="http://magpierss.sourceforge.net/" &gt;MagpieRSS for PHP&lt;/a&gt;, an open source PHP library that can parse RSS and Atom feeds.&lt;/p&gt;&lt;p&gt;MagpieRSS caches feed data, so at times when Twitter is glacially slow or can't be accessed, this script won't hurt the performance of your server.&lt;/p&gt;&lt;p&gt;The first release of the script only works with a Twitter user's RSS feed, which can be found in the "RSS" link at the bottom of a user's Twitter page. The only tough part about writing the script was creating regular expressions to turn URLs into hyperlinks and "@" references into links to Twitter user pages:&lt;/p&gt;&lt;p class="sourcecode"&gt;// turn URLs into hyperlinks&lt;br /&gt;$tweet = preg_replace("/(http://)(.*?)/([w./&amp;=?-,:;#_~%+]*)/", "&amp;lt;a href="\0"&amp;gt;Link&amp;lt;/a&amp;gt;", $tweet);&lt;br /&gt;// link to users in replies&lt;br /&gt;$tweet = preg_replace("(@([a-zA-Z0-9]+))", "&amp;lt;a href="http://www.twitter.com/\1"&amp;gt;\0&amp;lt;/a&amp;gt;", $tweet);&lt;/p&gt;&lt;p&gt;If you're reading this and wondering why anyone should bother with Twitter, I recommend reading the updates by &lt;a href="http://twitter.com/jayrosen_nyu" &gt;Jay Rosen&lt;/a&gt;, a journalism chair at New York University who uses the service to share a running dialogue on the media. He punches above his weight in this 140-character-or-less medium.&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 26 May 2008 21:17:00 GMT</pubDate>
      <title>Following Web Page Redirects with Java</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=36</link>
      <guid>http://www.cadenhead.org/workbench/news/3358/following-web-page-redirects-java</guid>
      <description>&lt;p&gt;CNET moved a bunch of its blogs to a different domain this weekend, including &lt;a href="http://news.cnet.com/beyond-binary/" &gt;Beyond Binary&lt;/a&gt;, &lt;a href="http://news.cnet.com/coops-corner/" &gt;Coop's Corner&lt;/a&gt;, &lt;a href="http://news.cnet.com/geek-gestalt/" &gt;Geek Gestalt&lt;/a&gt;, &lt;a href="http://news.cnet.com/one-more-thing/" &gt;One More Thing&lt;/a&gt;, &lt;a href="http://news.cnet.com/otl/" &gt;Outside the Lines&lt;/a&gt; and &lt;a href="http://news.cnet.com/the-social/" &gt;The Social&lt;/a&gt;. I mention this because the change hosed &lt;a href="http://www.meme13.com/" &gt;Meme13&lt;/a&gt;, which treated all six as if they were newly discovered sites.&lt;/p&gt;&lt;p&gt;One of my ground rules for developing Meme13 is that I won't hand-edit the site to make it smarter. I need the application to recognize when existing sites in its database have moved.&lt;/p&gt;&lt;p&gt;Meme13 monitors sites using a Java application I wrote that downloads web pages with the &lt;a href="http://hc.apache.org/httpclient-3.x/" &gt;Apache HTTPClient 3.0 class library&lt;/a&gt;. Web servers indicate that a page has moved by sending an HTTP redirect response of either "301 Moved Permanently," which indicates a permanent move, or "302 Found," which is intended for temporary changes. I wrote a Java method that can find the current location of a web page, even if it has been redirected one or more times:&lt;/p&gt;&lt;p class="sourcecode"&gt;public String checkFeedUrl(String feedUrl) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String response = feedUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpClient client = new HttpClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpMethod method = new HeadMethod(feedUrl);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;method.setFollowRedirects(false);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// request feed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int statusCode = client.executeMethod(method);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((statusCode == 301) | (statusCode == 302)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// feed has moved&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Header location = method.getResponseHeader("Location");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (!location.getValue().equals("")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// recursively check URL until it's not redirected any more&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response = checkFeedUrl(location.getValue());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response = feedUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (IOException ioe) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response = feedUrl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return response;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;The &lt;a href="http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/methods/HeadMethod.html" &gt;HeadMethod&lt;/a&gt; class requests a web page's headers instead of requesting the entire page, consuming far less bandwidth as it checks for redirects. My Java method looks for both kinds of redirects, because web publishers have a bad habit of using "302 Found" when they've moved a page permanently.&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 20 May 2008 02:20:56 GMT</pubDate>
      <title>Setting the Link on a ShareThis Widget</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=35</link>
      <guid>http://www.cadenhead.org/workbench/news/3354/setting-link-sharethis-widget</guid>
      <description>
          &lt;p&gt;&lt;a href="http://www.cadenhead.org/workbench/gems/share-this-meme13.png" &gt;&lt;img src="http://www.cadenhead.org/workbench/gems/share-this.png" width="360" height="374" alt="ShareThis widget" border="0" align="right" hspace="2" /&gt;&lt;/a&gt;I'm continuing to work on &lt;a href="http://www.meme13.com/" &gt;Meme13&lt;/a&gt;, a site that packages together the last 13 sites to show up on the &lt;a href="http://www.techmeme.com/lb" &gt;Techmeme Leaderboard&lt;/a&gt; so they can be sampled as a &lt;a href="http://www.meme13.com/atom.xml" &gt;feed&lt;/a&gt; or web site. The site has attracted around 25 RSS subscribers in its first month.&lt;/p&gt;&lt;p&gt;I've added a &lt;a href="http://www.sharethis.com/" &gt;ShareThis widget&lt;/a&gt; on each entry that makes it easy to share content from Meme13 on sites like De.licio.us, Digg and Facebook.&lt;/p&gt;&lt;p&gt;Normally, ShareThis links to the page the widget has been displayed on. That doesn't suit my purposes on Meme13, because I'm trying to promote the originators of the content. If someone reads the article about &lt;a href="http://ryanspoon.com/blog/2008/05/18/landing-a-great-start-up-job-the-best-job-resources/" &gt;landing a startup job&lt;/a&gt; by Ryan Spoon on Meme13, the ShareThis widget should link to the article on Spoon's blog.&lt;/p&gt;&lt;p&gt;ShareThis has a &lt;a href="http://sharethis.com/publisher?type=stapi" &gt;JavaScript API&lt;/a&gt; that can be used to teach the widget new tricks. Here's the JavaScript code to set the widget's target link and display the widget:&lt;/p&gt;&lt;p class="sourcecode"&gt;&amp;lt;p&amp;gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;SHARETHIS.addEntry({&lt;br /&gt;title:'&amp;lt;TMPL_VAR title&amp;gt;',&lt;br /&gt;url:'&amp;lt;TMPL_VAR link ESCAPE="HTML"&amp;gt;',&lt;br /&gt;}, {button:true} );&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;&lt;p&gt;The &lt;span class="sourcecode"&gt;&amp;lt;TMPL_VAR title&amp;gt;&lt;/span&gt; and &lt;span class="sourcecode"&gt;&amp;lt;TMPL_VAR link ESCAPE="HTML"&amp;gt;&lt;/span&gt; tags are part of the template language used by &lt;a href="http://www.planetplanet.org/" &gt;Planet Planet&lt;/a&gt;, the software that publishes Meme13. Here's how the same thing could be done in PHP:&lt;/p&gt;&lt;p class="sourcecode"&gt;&amp;lt;p&amp;gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;SHARETHIS.addEntry({&lt;br /&gt;title:'&amp;lt;? echo $site_title; ?&amp;gt;',&lt;br /&gt;url:'&amp;lt;? echo $site_link; ?&amp;gt;',&lt;br /&gt;}, {button:true} );&lt;br /&gt;&amp;lt;/script&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;
      </description>
    </item>
    <item>
      <pubDate>Fri, 2 May 2008 16:13:49 GMT</pubDate>
      <title>How to Crash Your Apache Server with PHP</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=34</link>
      <guid>http://www.cadenhead.org/workbench/news/3344/crash-your-apache-server-php</guid>
      <description>
          &lt;p&gt;I returned from a trip out of town Monday to crashing web servers that ate my lunch all week long. For several days, I used the &lt;span class="menucommand"&gt;top&lt;/span&gt; command in Linux and watched helplessly as two servers ground to a halt with load averages higher than 100.&lt;/p&gt;&lt;p&gt;Top reports the processes that are taking up the most CPU, memory and time. On the server running &lt;a href="http://www.cadenhead.org/workbench/" &gt;Workbench&lt;/a&gt;, the culprit was always httpd, the Apache web server. This didn't make sense, because Apache serves web pages, images, and other files with incredible efficiency. You have to hose things pretty badly to make Apache suck.&lt;/p&gt;&lt;p&gt;If you know the process ID of a server hog, Apache can tell you what that process is doing in its server status report, a feature that requires the &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_status.html" &gt;mod_status&lt;/a&gt; module. The report for &lt;a href="http://httpd.apache.org/server-status" &gt;Apache's web site&lt;/a&gt; shows what they look like.&lt;/p&gt;&lt;p&gt;Using this report, I found the culprit: A PHP script I wrote to receive trackback pings was loading the originating site before accepting the ping, which helps ensure it's legit:&lt;/p&gt;&lt;p class="sourcecode"&gt;// make sure the trackback ping's URL links back to us&lt;br&gt;$handle = fopen($url, "r");&lt;br&gt;$tb_page = '';&lt;br&gt;while (!feof($handle)) {&lt;br&gt;  $tb_page .= fread($handle, 8192);&lt;br&gt;}&lt;br&gt;fclose($handle);&lt;br&gt;$pos = strpos($tb_page, "http://www.cadenhead.org/workbench");&lt;br&gt;if ($pos === false) {&lt;br&gt;  $error_code = 1;&lt;br&gt;  send_response(1, "No link found to this site.");&lt;br&gt;  exit;&lt;br&gt;}&lt;/p&gt;&lt;p&gt;Most trackback pings are not legit -- I've received 600 from spammers in just the past three hours. Each ping required Apache to check the spammer's site, download a page if it existed, and look for a link to Workbench. A single process performing this task could occupy more than 50 percent of the CPU and run for a minute or more.&lt;/p&gt;&lt;p&gt;I'm surprised Apache ran at all after I added trackback a couple months ago. I was beginning to think the web server software was idiot-proof, but I've proven otherwise.&lt;/p&gt;
      </description>
    </item>
    <item>
      <pubDate>Fri, 2 May 2008 00:10:56 GMT</pubDate>
      <title>Twitter: Where Ruby on Rails Goes Off the Track</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=33</link>
      <guid>http://www.cadenhead.org/workbench/news/3343/twitter-ruby-rails-goes-off</guid>
      <description>
          &lt;p&gt;&lt;img src="http://www.cadenhead.org/workbench/gems/twitter-bird-dead.png" width="280" height="169" alt="Twitter Bird Flies No More" align="right" hspace="3"&gt;An article posted on &lt;i&gt;eWeek&lt;/i&gt; today was written in an alternate universe &lt;a href="http://www.eweek.com/c/a/Application-Development/Ruby-Rails-Give-Twitter-its-Tweet/" &gt;where Twitter works&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;As the maker of one of the largest applications using Ruby on Rails on the Web, Twitter knows a thing or two about scaling applications built with the popular development framework.&lt;/p&gt;&lt;p&gt;Britt Selvitelle, a senior engineer at Twitter, offered a few tips and tricks for scaling Ruby on Rails and expressed particular appreciation for the Rails framework itself and the language is it based on, Ruby.&lt;/p&gt;&lt;p&gt;"For us, for a large part of our system, Ruby has been the tool that fit," Selvitelle said.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The subhead of the article: "Twitter's reliance on Ruby and Ruby on Rails proves the language's resilience."&lt;/p&gt;&lt;p&gt;Twitter's a nice service, but it's one of the most crash-prone sites I've ever visited. The fact it was written in Ruby on Rails makes me wonder whether the Rails framework can scale, at least once you reach the big leagues and have several hundred thousand users hammering on your web application. On the same day as the &lt;i&gt;eWeek&lt;/i&gt; article, TechCrunch &lt;a href="http://www.techcrunch.com/2008/05/01/twitter-said-to-be-abandoning-ruby-on-rails/" &gt;floated a rumor&lt;/a&gt; that Twitter is dumping Ruby on Rails.&lt;/p&gt;&lt;p class="smallprint" align="right"&gt;-- via &lt;a href="http://www.meme13.com/" &gt;Meme13&lt;/a&gt;&lt;/p&gt;
      </description>
    </item>
    <item>
      <pubDate>Thu, 17 Apr 2008 12:21:22 GMT</pubDate>
      <title>Meme13: Angering New Bloggers in Tech</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=32</link>
      <guid>http://www.cadenhead.org/workbench/news/3341/meme13-angering-new-bloggers-tech</guid>
      <description>
          &lt;p&gt;&lt;a href="http://www.meme13.com/" &gt;Meme13&lt;/a&gt; is getting knocked around a bit by people who think that it's just another scraper republishing RSS feeds, hurting the search-engine rank and traffic of the publishers who created the content. Two of those people are &lt;a href="http://www.deepjiveinterests.com/2008/04/15/meme13-a-scraper-blog-gets-facetime-on-techmeme-yay/" &gt;Tony Hung&lt;/a&gt; and &lt;a href="http://www.problogger.net/archives/2008/04/16/meme13-thoughts-of-a-featured-blogger/" &gt;Darren Rowse&lt;/a&gt;, bloggers currently featured on Meme13. Hung writes:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;... Meme13 is simply pulling feeds and republishing them all.&lt;/p&gt;&lt;p&gt;Like any &lt;a href="http://geekmadness.net/" rel="nofollow" &gt;good&lt;/a&gt; &lt;a href="http://www.techmacro.com/" rel="nofollow" &gt;ol'&lt;/a&gt; &lt;a href="http://igvard.intwaynet.com/" rel="nofollow" &gt;scraper&lt;/a&gt; &lt;a href="http://allcompgamesnews.blogspot.com/2008/04/mashable_14.html" rel="nofollow" &gt;blog&lt;/a&gt;. ...&lt;/p&gt;&lt;p&gt;More of the GD same -- and what's really funny (again, not in a ha ha way) is not even that Meme13 acknowledges what side of the debate its on, but that its apparently deaf to one of the bigger memes on the leaderboard that its supposedly tracking, and, one of the "bottom 13" that it wants to highlight who felt pretty vocal about the issue (me)!&lt;/p&gt;&lt;p&gt;I am flabbergasted, exhausted, and ... just flabbergasted.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Hung's lament was the top post on Meme13 for several hours Tuesday night. My day-old robot has already turned against its creator.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.meme13.com/" &gt;&lt;img src="http://www.meme13.com/images/title-narrow.png" width="243" height="60" alt="Meme13" align="right" hspace="2" border="0"&gt;&lt;/a&gt;I'm mindful of these concerns, but I don't think the new service is leeching. I'm aware that "I'm helping you" is Web 2.0-speak for "I'm helping myself to your work" -- one commenter on Rowse's ProBlogger posts the rather Confucian "verbal statements of warm fuzzy intentions can mask a blatant ripoff" -- but the idea I'm pursuing here is an RSS mashup that brings new subscribers to publishers.&lt;/p&gt;&lt;p&gt;Sites only are featured on Meme13 for a short time -- currently around two weeks -- before they drop off and never appear again. The web site doesn't archive anything, so when Hung's &lt;a href="http://www.deepjiveinterests.com" &gt;Deep Jive Interests&lt;/a&gt; is replaced by a newer blog in around nine days, there will be nothing on Meme13 to hurt his search rank.&lt;/p&gt;&lt;p&gt;When I developed Meme13, I considered the idea of only making it available as a &lt;a href="http://www.meme13.com/atom.xml" &gt;feed&lt;/a&gt;, because I think that's where the purpose is most clear.&lt;/p&gt;&lt;p&gt;I created this because I needed it. I want to sample new blogs and subscribe to the interesting ones with as little effort on my part as possible. If you see exactly what a feed contains during its trial period on Meme13, including images, full text and the feed's own ads, it makes it easier to decide if you want to subscribe.&lt;/p&gt;&lt;p&gt;This approach appears to be a novel application of RSS -- a rolling reader that constantly changes its list of subscribed feeds.&lt;/p&gt;&lt;p&gt;I'm going to hammer at this idea for a while before giving up on the concept of mashing together full feed entries. If this experiment angers more of the bloggers it's designed to benefit, you can follow their reactions by subscribing to Meme13.&lt;/p&gt;
      </description>
    </item>
    <item>
      <pubDate>Thu, 17 Apr 2008 12:21:22 GMT</pubDate>
      <title>Meme13: Finding New Bloggers in Tech</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=31</link>
      <guid>http://www.cadenhead.org/workbench/news/3340/meme13-finding-new-bloggers-tech</guid>
      <description>
          &lt;p&gt;Steven Hodson &lt;a href="http://www.winextra.com/2008/03/30/its-hard-to-do-original-when-theres-nobody-to-listen/" &gt;writes&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;I get a real kick out of it &lt;a href="http://www.scripting.com/stories/2008/03/30/proofThatTheEndIsNear.html" &gt;when people start pontificating&lt;/a&gt; on why the tech blogosphere is becoming nothing more than [a] self-fulfilling chamber filled with the dull echos of me-too posting that attach themselves like leeches to the supposed brilliant writings of the blogosphere mucky mucks.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Me too.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.meme13.com/" &gt;&lt;img src="http://www.meme13.com/images/title-narrow.png" width="243" height="60" alt="Meme13" align="right" hspace="2" border="0"&gt;&lt;/a&gt;Every six months or so, techbloggers reach the joint realization that we're all linking to the same people having the same thoughts about the same subjects. Somebody blames &lt;a href="http://www.techmeme.com/" &gt;Techmeme&lt;/a&gt;, a site that collects the most popular links, and we all link to that guy. The resulting argument shows up on Techmeme. A good time is had by all. Last time around, I &lt;a href="http://www.cadenhead.org/workbench/news/3276/techmeme-we-find-sites-you-already-visit" &gt;said&lt;/a&gt; I wanted a Techmeme that pretends the most-linked tech sources don't exist, then looks at what's being linked by everybody else. The top bloggers link to each other constantly. You have to look elsewhere for up-and-coming bloggers who are still working in the sweet spot that lies between obscure and insufferable.&lt;/p&gt;&lt;p&gt;This morning, I'm launching a new site, &lt;a href="http://www.meme13.com/" &gt;Meme13&lt;/a&gt;, to find those bloggers.&lt;/p&gt;&lt;p&gt;Meme13 mashes together the last 13 sites that made their first appearance on the &lt;a href="http://www.techmeme.com/lb" &gt;Techmeme Leaderboard&lt;/a&gt;. You can read these sites by visiting Meme13 or subscribing to its &lt;a href="http://www.meme13.com/atom.xml" &gt;feed&lt;/a&gt;, which contains the latest entries from all of them.&lt;/p&gt;&lt;p&gt;I've been tracking the leaderboard since Feb. 4. In that time, 175 different sites have made an appearance on the top-100 list. The current Meme13 made their Techmeme debut in the past two weeks:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://aws.typepad.com/aws/" &gt;Amazon Web Services&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://bigtech.blogs.fortune.cnn.com/" &gt;Big Tech&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.problogger.net/" &gt;ProBlogger Blog Tips&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.deepjiveinterests.com/" &gt;Deep Jive Interests&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://thomashawk.com/" &gt;Thomas Hawk's Digital Connection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://technology.newscientist.com/" &gt;New Scientist Technology Headlines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dvlabs.tippingpoint.com/blog/" &gt;DVLabs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogmaverick.com/" &gt;Blog Maverick&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.news.com/the-iconoclast/" &gt;The Iconoclast&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.9to5mac.com/" &gt;9 to 5 Mac&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://andrewchen.typepad.com/andrew_chens_blog/" &gt;Futuristic Play&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.web-strategist.com/blog" &gt;Web Strategy by Jeremiah&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.news.com/8300-10787_3-60.html" &gt;Coop's Corner&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;When a new site appears, the oldest Meme13 site drops off. So far, sites have stuck around for approximately two weeks. Over time Meme13 should get better at finding lesser-known sites as its database grows.&lt;/p&gt;&lt;p&gt;Meme13's an XML hack that downloads OPML data using a &lt;a href="http://www.cafeconleche.org/XOM/" &gt;XOM&lt;/a&gt;-based Java application, stores the elements in a MySQL database and uses &lt;a href="http://www.planetplanet.org/" &gt;Planet Planet&lt;/a&gt; to publish the feeds as a web site and Atom feed. It's updated hourly and published automatically.&lt;/p&gt;&lt;p&gt;The site needs a lot of work, particularly on the interface, but I figured it was time to loose this experiment upon the world.&lt;/p&gt;
      </description>
    </item>
    <item>
      <pubDate>Sun, 2 Mar 2008 00:10:40 GMT</pubDate>
      <title>Loading Ad Javascript with PHP</title>
      <link>http://www.advogato.org/person/rcaden/diary.html?start=30</link>
      <guid>http://www.cadenhead.org/workbench/news/3325/loading-ad-javascript-php</guid>
      <description>
          &lt;p&gt;I serve ads on the &lt;a href="http://www.drudge.com/" &gt;Drudge Retort&lt;/a&gt; using &lt;a href="http://www.blogads.com/" &gt;Blogads&lt;/a&gt;, a great ad broker that occasionally has trouble serving the ads. When this happens, pages on the Retort load more slowly because they can't fetch a Javascript program and CSS stylesheet required by Blogads.&lt;/p&gt;&lt;p&gt;I decided to fix this problem by writing &lt;a href="http://www.cadenhead.org/workbench/code/cache-remote-file.php.txt" &gt;Cache Remote File&lt;/a&gt;, a PHP script that performs three functions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Save a cached copy of a remote file&lt;/li&gt;&lt;li&gt;Display the cached copy for 10 minutes before requesting the file again&lt;/li&gt;&lt;li&gt;Display the cached copy when the remote server is offline or slow&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The script will give up trying to load the remote file after three seconds, which keeps it from hanging when the remote server is having difficulties. It can be customized to load any URL of any content type and requires PHP 4 or higher with cURL support. I've released it under the GPL. Let me know if you have any problems with it or can improve the script.&lt;/p&gt;
      </description>
    </item>
  </channel>
</rss>
