<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Laughing Meme &#187; hacks</title>
	<atom:link href="http://laughingmeme.org/tag/hacks/feed/" rel="self" type="application/rss+xml" />
	<link>http://laughingmeme.org</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:54:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mapping Hacks available for pre-order!</title>
		<link>http://laughingmeme.org/2005/02/24/mapping-hacks-available-for-pre-order/</link>
		<comments>http://laughingmeme.org/2005/02/24/mapping-hacks-available-for-pre-order/#comments</comments>
		<pubDate>Thu, 24 Feb 2005 17:01:21 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[friends]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[gis]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[oreilly]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=2835</guid>
		<description><![CDATA[Congrats Schuyler and Jo! (but I want it before June!)]]></description>
			<content:encoded><![CDATA[<p>Congrats Schuyler and Jo!  (but I want it <em>before</em> June!)</p>
<p><a href='http://www.oreilly.com/catalog/mappinghks/index.html'>http://www.oreilly.com/catalog/mappinghks/index.html</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2005/02/24/mapping-hacks-available-for-pre-order/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDF Hacks</title>
		<link>http://laughingmeme.org/2004/12/03/pdf-hacks/</link>
		<comments>http://laughingmeme.org/2004/12/03/pdf-hacks/#comments</comments>
		<pubDate>Sat, 04 Dec 2004 06:14:57 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[hacks]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=965</guid>
		<description><![CDATA[Spent a while flipping through PDF Hacks in the bookstore last night (procrastinating on packing), and it looked solid. If I was going to be hacking on PDFs and ebooks, I&#8217;d pick it up, even if some of the hacks felt a bit, um, hackish, and showed a Windows bent. Still to save you time, [...]]]></description>
			<content:encoded><![CDATA[<p>Spent a while flipping through <a href="http://www.oreilly.com/catalog/pdfhks/">PDF Hacks</a> in the bookstore last night (procrastinating on packing), and it looked solid.  If I was going to be hacking on PDFs and ebooks, I&#8217;d pick it up, even if some of the hacks felt a bit, um, hackish, and showed a Windows bent.</p>

<p>Still to save you time, I can boil down well over the half the book into 2 words: <a href="http://www.accesspdf.com/pdftk/">use pdftk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2004/12/03/pdf-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress RSS Aggregator</title>
		<link>http://laughingmeme.org/2004/07/18/wordpress-rss-aggregator/</link>
		<comments>http://laughingmeme.org/2004/07/18/wordpress-rss-aggregator/#comments</comments>
		<pubDate>Sun, 18 Jul 2004 23:26:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[cvs]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[magpie]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[syndication]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=861</guid>
		<description><![CDATA[I&#8217;ve been playing with the idea of a devblog for a while, a place which collates the various feeds associated with a project into a simple location for easy viewing, and commenting it. Fisheye, and CIA are full blown attempts at solving this very problem for large open source projects. This morning, unable to get [...]]]></description>
			<content:encoded><![CDATA[<p>
I&#8217;ve been playing with the idea of a devblog for a while, a place which collates the various feeds associated with a project into a simple location   for easy viewing, and commenting it.  <a href="http://www.cenqua.com/fisheye/">Fisheye</a>, and <a href="http://cia.navi.cx/stats/project/debian-nonprofit">CIA</a> are full blown attempts at solving this very problem for large open source projects.  This morning, unable to get back to sleep, seemed simpler and faster to write something new, then finish reading the install instructions.
</p>

<p><p>
I present my quick and dirty <a href="http://laughingmeme.org/code/wp-rss-aggregate.php.txt">RSS-to-Wordpress aggregator</a>.  There are a number of tools that allow you to display an RSS feed on your <a href="http://wordpress.org">WordPress</a> blog, and several that allow you to import an RSS into your blog, but I didn&#8217;t find any that worked as aggregators, periodically polling a feed, and creating new posts from the items found within.  So that is what I built.
</p>
<p>
<h3>Some features:</h3>
 <ul> 
 <li>dc:date becomes the post<em>date, dc:creator (or dc:contributor) becomes the post</em>author, title maps to title, description to post_content, dc:subject to category.</li></p>

<p><li>a postmeta variable is used to track which RSS items have been seen before, and only insert them once.</li></p>

<p><li>you can assign 1 or more categories to be automatically attached to each post per feed. (e.g. a &#8216;CVS Commits&#8217; category)</li></p>

<p><li>new authors, and new categories are auto-vivified if they don&#8217;t exist.</li>
 </ul>
</p>
<p>
<h3>Limitations:</h3>
<ul>
  <li>I wrote this to parse our internal <a href="http://laughingmeme.org/cvs2rss/">cvs2rss</a> feeds, and our <a href="http://laughingmeme.org/work/archives/001772.html">Twiki feed</a>.  Those both produce RSS 1.0 feeds that conform to my particular RSS aesthetics.  As such the script doesn&#8217;t try to hard to support other versions of RSS.</li></p>

<p><li>Links are treated as perma-links, and unique identifiers.</li></p>

<p><li>Ignores content:encoded</li></p>

<p><li>Only handles inserts, not updates</li></p>

<p><li>I wrote this with <a href="http://wordpress.org/nightly/">nightly build</a> 2004-7-14, your milage may vary.</li>
</ul></p>

<p>None of these would be hard to fix, but this was good enough for my needs this morning, in the short period of time I wanted to spend on it.
</p>
<p>
<h3>Todo</h3>
Some other features that would be nice to:
  <ul>
<li> Store config in the database and add WP UI for managing aggregated feeds (should be doable with option groups?)</li>
  <li> Support adding categories by name instead of id. (and auto-vivify categories)</li>
</ul>
Uses <a href="http://magpierss.sf.net">Magpie</a> (surprise!), so you get to leverage support for fetching private RSS feeds. (which I&#8217;d recommend for serving up internal RSS feeds)  Expanding on the devlog theme, you might want to include the RSS from your project management tool, and bug tracker. (we aren&#8217;t currently using RSS enable tools for this, but if, for example, you were using <a href="http://www.taskspro.com/">TasksProp</a> or <a href="http://www.basecamphq.com/">Basecamp</a>, those would be good feed to include.)
</p>
<p>
<h3>A Few Observations on WordPress</h3>
<ul>
  <li>Doesn&#8217;t support PHP5 yet.  I&#8217;m not sure how pervasive the problem is, but it uses a modified version of <a title="ick, requires email address to download" href="http://www.jvmultimedia.com/home/articles.php?articleId=2">ezSQL</a> for its DB abstraction layer, which isn&#8217;t PHP5 compatible.  Too bad they aren&#8217;t building on top of PEAR DB.</li></p>

<p><li>Excellent for whipping up an attractive, feature rich blog. </li></p>

<p><li>Faster then expected, really zippy in fact, at least without load.</li></p>

<p><li>Code is kind of a mess (or at least old school PHP).  Very little OO, SQL, and HTML is scattered around, core use of global variables.</li></p>

<p><li>I&#8217;m not a fan of the &#8220;PHP is already a template argument&#8221;, but I understand why some people are.</li></p>

<p><li>Doesn&#8217;t feel as polished as MT, but is certainly more hackable.  Reminds me of the <a href="http://kwiki.org">Kwiki</a> &#8220;every installation is a snowflake&#8221; goal.  Interesting to see if this creates a surge of creativity, or just balkanization.</li></p>

<p><li>Option groups, and the postmeta table make it incredibly simple to add new features.</li></p>

<p><li>PHP5+SQLite support, and a one-click install could make WP the Kwiki of blogging tools.</li></p>

<p></ul>
</p>
<p>
<b>update [2004/10/28]</b>:  In Boston, but on Seattle time, fill in some extra details.  This quick hack is growing faqs, and might need to sprout a page of its own pretty soon.  In the mean time there is a <a href="http://laughingmeme.org/code/wp-rss-aggregate.php.txt">new version</a> which uses a simple config file, and has expanded <a href="http://del.icio.us">del.icio.us</a> support.
</p>
<p>
<h3>FAQ</h3>
<ol>
<li>How do I print the link of the original RSS item? 
<pre><code>
&lt;?php echo get<em>post</em>meta($id, 'wp<em>agg</em>rss_id', true) ?&gt;
</code></pre>
<li>Dates aren&#8217;t working, all my posts are from 1969.  Currently wp-rss-agg only supports dates in dc:date field, however there is a feature in magpie-cvs that should make it simple to provide Atom and RSS 2.0 date compatibility as well.</li> 
</ol>
</p>
<p>
<b>update</b>:  <a href="http://projects.radgeek.com/feedwordpress/">FeedWordPress</a> is an actively developed and maintained version of this script.  Charles has taken it beyond my simple proof of concept, and it is almost certainly what you&#8217;re looking for.
</p></p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2004/07/18/wordpress-rss-aggregator/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Burrow out of captive portals by tunneling ssh over DNS</title>
		<link>http://laughingmeme.org/2004/06/21/burrow-out-of-captive-portals-by-tunneling-ssh-over-dns/</link>
		<comments>http://laughingmeme.org/2004/06/21/burrow-out-of-captive-portals-by-tunneling-ssh-over-dns/#comments</comments>
		<pubDate>Mon, 21 Jun 2004 20:37:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[Aside]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=2355</guid>
		<description><![CDATA[Sounds like I have a date with Starbucks to try this.]]></description>
			<content:encoded><![CDATA[<p>Sounds like I have a date with Starbucks to try this.</p>
<p><a href='http://www.boingboing.net/2004/06/21/tunneling_ssh_over_d.html'>http://www.boingboing.net/2004/06/21/tunneling_ssh_over_d.html</a></p>]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2004/06/21/burrow-out-of-captive-portals-by-tunneling-ssh-over-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracking Referers for Sourceforge Hosted Site</title>
		<link>http://laughingmeme.org/2003/12/23/tracking-referers-for-sourceforge-hosted-site/</link>
		<comments>http://laughingmeme.org/2003/12/23/tracking-referers-for-sourceforge-hosted-site/#comments</comments>
		<pubDate>Wed, 24 Dec 2003 02:35:00 +0000</pubDate>
		<dc:creator>Kellan</dc:creator>
				<category><![CDATA[credibility]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sourceforge]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://lm.quxx.info/?p=691</guid>
		<description><![CDATA[Hosting a project with Sourceforge is great. They provide bandwidth, CVS with anonymous access (something I never set up on my own boxes), and above all, a certain credibility. But they don&#8217;t provide good traffic analysis. There was some recent discussion if people were actually finding Magpie searching for PHP RSS parsing, or if they [...]]]></description>
			<content:encoded><![CDATA[<p>
Hosting a project with Sourceforge is great.  They provide bandwidth, CVS with anonymous access (something I never set up on my own boxes), and above all, a certain credibility.  But they don&#8217;t provide good traffic analysis.  There was some recent discussion if people were actually finding Magpie searching for PHP RSS parsing, or if they were simple <a href="http://images.google.com/images?q=magpie">searching for a picture of a magpie</a>.
</p>

<p><p>
So here is a bit of Javascript that will fetch a remote image from your <a href="http://magpierss.sf.net">Sourceforge project home page</a> and tack the original referer url to the image.</p>

<pre>
&lt;script language="javascript"&gt;
var img = "http://example.org/bigbrother.gif"
var ref = parent.document.referrer;
document.write("&lt;img src=\""+img+"?"+escape(ref)+"\"&gt;");
&lt;/script&gt;

</pre>

<p>I imagine this is what someone like <a href="http://sitemeter.com">SiteMeter</a> does.
</p></p>
]]></content:encoded>
			<wfw:commentRss>http://laughingmeme.org/2003/12/23/tracking-referers-for-sourceforge-hosted-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

