<?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>Plutor.org &#187; Projects</title>
	<atom:link href="http://plutor.org/blog/tags/projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://plutor.org/blog</link>
	<description></description>
	<lastBuildDate>Fri, 03 Feb 2012 14:12:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Velociraptor Roulette</title>
		<link>http://plutor.org/velociraptorroulette/</link>
		<comments>http://plutor.org/velociraptorroulette/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 13:27:07 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Del.icio.us]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[The culmination of three or four Hack Nights.]]></description>
			<content:encoded><![CDATA[The culmination of three or four Hack Nights.]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2009/01/06/velociraptor-roulette/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons learned from Film Addict</title>
		<link>http://plutor.org/blog/2008/12/20/lessons-learned-from-film-addict/</link>
		<comments>http://plutor.org/blog/2008/12/20/lessons-learned-from-film-addict/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 15:19:09 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Bloggings]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/?p=1948</guid>
		<description><![CDATA[It&#8217;s been a week since I posted Film Addict. It got posted to kottke.org, Slashfilm, USAToday.com, and became a Twitter and Facebook meme on some level. At this point, it has received 100,000 pageviews, and it was filled out 37,000 times (peaking at a rate of over 1000 per hour, but at this point still [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a week since I posted <a href="http://plutor.org/filmaddict/">Film Addict</a>.  It got posted to <a href="http://kottke.org/08/12/are-you-a-film-addict">kottke.org</a>, <a href="http://www.slashfilm.com/2008/12/16/ive-watched-74-of-imdbs-top-250/">Slashfilm</a>, <a href="http://blogs.usatoday.com/popcandy/2008/12/test-your-film.html">USAToday.com</a>, and became a <a href="http://search.twitter.com/search?q=filmaddict">Twitter</a> and Facebook meme on some level.  At this point, it has received 100,000 pageviews, and it was filled out 37,000 times (peaking at a rate of over 1000 per hour, but at this point still about once a minute).</p>
<p>Lessons learned:</p>
<ul>
<li>If I use <tt><a href="http://perldoc.perl.org/strict.html">strict</a></tt> and <tt><a href="http://perldoc.perl.org/warnings.html">warnings</a></tt>, I should keep an eye on the Apache error log.  I generated 10GB of errors in the first 24 hours, filling up /var on my webhost, which resulted in 8 hours of downtime during the Slashfilm surge.</li>
<li>Google Adsense now allows &#8220;personal&#8221; domains.  I tried to sign up in 2004, when <a href="http://plutor.org/blog/2004/08/31/132023/">Weboggle</a> was all the rage, and I was turned down because it lived under plutor.org.  I&#8217;m not sure when the policy changed, but I applied this week and was approved on Thursday.</li>
<li>Google ads don&#8217;t really make you much money.  At this point, the ads on the Film Addict page have made me $2.90, but even if I had had them from day one, I&#8217;d only have made about $15.</li>
<li>I sleep fine at night, even after creating something clearly intended to be meme-fodder.</li>
<li>With enough data, you can get awesome bell curves.  Histogram of number of movies seen:<br /><img src="http://chart.apis.google.com/chart?cht=bvs&#038;chs=350x125&#038;chd=t:16.4165931156222,11.2385995881141,19.8882024124743,30.2441894674904,42.4830832597823,55.3986466607826,70.7855251544572,80.2588996763754,90.1735804648426,100,96.2930273609885,88.1435716387173,77.6699029126214,70.5501618122977,56.3989408649603,47.9847013827596,38.246543100912,28.273021476905,22.9479258605472,17.5051485731097,13.0920859076199,9.29685201529862,6.11944689614592,4.47190350102971,2.85378052368344,0.764930862018241&#038;chco=4d89f9&#038;chbh=11,1&#038;chxt=x&#038;chxl=0:|0|||||50|||||100|||||150|||||200|||||250"/>
</li>
</ul>
<p>It didn&#8217;t end up going much of anywhere on Digg or Reddit or Delicious.  I&#8217;m not sure why, but I think part of it might have been the individual nature of the form.  You could compare your list against your friends&#8217;, but there was no community interest.  Another factor (especially on Delicious) was the unique id in every posted URL; there could never be enough posts of a single URL to get any momentum.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2008/12/20/lessons-learned-from-film-addict/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Film Addict</title>
		<link>http://plutor.org/blog/2008/12/13/film-addict/</link>
		<comments>http://plutor.org/blog/2008/12/13/film-addict/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 21:21:00 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Bloggings]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/?p=1934</guid>
		<description><![CDATA[A couple friends of mine posted one of those lame Facebook chain note things today. It was a list of a couple hundred movies, mostly 18-25-year-old targeted franchises from the past decade or so (think Scream, Saw, American Pie, etc) with some others (mostly very popular) thrown in. &#8220;Copy this list to your profile and [...]]]></description>
			<content:encoded><![CDATA[<p>A couple friends of mine posted one of those lame Facebook chain note things today.  It was a list of a couple hundred movies, mostly 18-25-year-old targeted franchises from the past decade or so (think Scream, Saw, American Pie, etc) with some others (mostly very popular) thrown in.  &#8220;Copy this list to your profile and check off the ones you&#8217;ve seen&#8221;.  The list&#8217;s arbitrary inclusion criteria angered me, so I decided to <a href="http://plutor.org/filmaddict/">make my own</a>, with a better inteface than &#8220;copy and paste it yourself&#8221;.  The list is IMDB&#8217;s <a href="http://www.imdb.com/chart/top">top 250</a>.</p>
<p>I posted it to <a href="http://projects.metafilter.com/1846/Film-Addict">MetaFilter Projects</a>.  Pretty much immediately, Mathowie <a href="http://twitter.com/mathowie/status/1055594954">Twittered it</a>.  At this point, more than 200 people have taken it already.  Give it a try, <a href="http://plutor.org/filmaddict/?f=rheue6je">compare your list to mine</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2008/12/13/film-addict/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>HTML Bingo</title>
		<link>http://plutor.org/blog/2008/01/09/html-bingo/</link>
		<comments>http://plutor.org/blog/2008/01/09/html-bingo/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 13:32:19 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[bingo]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2008/01/09/html-bingo/</guid>
		<description><![CDATA[After the moderate success of 24 bingo, and in response to a couple requests for the use of the code after I used it for MetaFilter bingo, I&#8217;m releasing my single-page JavaScript-powered HTML Bingo into the world. Enjoy.]]></description>
			<content:encoded><![CDATA[<p>After the moderate success of <a href="http://plutor.org/24/bingo.html">24 bingo</a>, and in response to a couple requests for the use of the code after I used it for <a href="http://plutor.org/mefi_bingo.html">MetaFilter bingo</a>, I&#8217;m releasing my single-page JavaScript-powered <a href="http://plutor.org/files/htmlbingo.tar.gz">HTML Bingo</a> into the world. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2008/01/09/html-bingo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redirect referer test</title>
		<link>http://plutor.org/blog/2007/11/08/redirect-referer-test/</link>
		<comments>http://plutor.org/blog/2007/11/08/redirect-referer-test/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 12:50:41 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[browser]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2007/11/08/redirect-referer-test/</guid>
		<description><![CDATA[A web user is looking at page A. He clicks on a link for page B. That page has a META Refresh to page C. What is the value of HTTP_REFERER for that last request? What if the redirect was a Status 307? Or a location.replace() JavaScript call? What if he&#8217;s using Opera? I&#8217;ve been [...]]]></description>
			<content:encoded><![CDATA[<p>A web user is looking at page A.  He clicks on a link for page B.  That page has a META Refresh to page C.  What is the value of HTTP_REFERER for that last request?  What if the redirect was a Status 307?  Or a location.replace() JavaScript call?  What if he&#8217;s using Opera?  I&#8217;ve been doing some <a href="http://spreadsheets.google.com/ccc?key=p9OzvzfDORuHx_tSk8YWITw&#038;hl=en">redirect referer tests</a> this week and I have results for some the most common browser/OS combinations.  I hope to expand them further.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2007/11/08/redirect-referer-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Live photocasting Halloween</title>
		<link>http://plutor.org/blog/2007/10/28/live-photocasting-halloween/</link>
		<comments>http://plutor.org/blog/2007/10/28/live-photocasting-halloween/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 13:01:06 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[halloween]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[party]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2007/10/28/live-photocasting-halloween/</guid>
		<description><![CDATA[Sometime during the planning of our two parallel Halloween parties, Chris and I realized we needed some way to allow the two groups to communicate. Videocasting was our first thought, but we didn&#8217;t have the equipment or the knowledge. But when it came to taking photos and putting them on websites, we had all kinds [...]]]></description>
			<content:encoded><![CDATA[<p>Sometime during the planning of our two parallel Halloween parties, Chris and I realized we needed some way to allow the two groups to communicate.  Videocasting was our first thought, but we didn&#8217;t have the equipment or the knowledge.  But when it came to taking photos and putting them on websites, we had all kinds of both.  Using something Chris had written a while ago as a guide, I wrote a quick script to pull the photos off the camera, resize them to a reasonable resolution, and upload them to our web server.  I then wrote a CGI that would pick a random photo from each location and place them side-by-side.  Chris asked me to make the algorithm weight towards newer photos, which was far easier than it would have been if we had been uploading to a service like Flickr or something.</p>
<p>After a rough (and late) start in Boston, things went well.  Philly took some naughty shots early, which got people riled up here and for a period of time, things were pretty lewd.  Eventually it became family-safe fun time party photos and some gentle photo-jabs were traded between the sister parties.  Sometime around midnight, Chris texted me &#8220;this is the best thing we&#8217;ve ever done.&#8221;  I agree.  That said, we learned things.  The script had all kinds of bugs (mostly because I wrote it without having the camera we were going to use or the software).  The CGI was <em>too</em> weighted towards new photos.  And whereas Chris had done this before and had a neat photobooth setup (a side room, tripod, IR trigger), Boston had a camera that had to be hand-shot and plugged back into the laptop every few minutes.</p>
<p>Will we ever be able to learn from the mistakes we made, and try out a new iteration of the script?  I certainly hope so.  Maybe we can hook in a third city.  California friends, I&#8217;m gesturing in your direction.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2007/10/28/live-photocasting-halloween/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>FeedWordPress Collapse Filter</title>
		<link>http://plutor.org/blog/2007/09/07/feedwordpress-collapse-filter/</link>
		<comments>http://plutor.org/blog/2007/09/07/feedwordpress-collapse-filter/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 13:40:45 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[feedwordpress]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[Plutor.org]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2007/09/07/feedwordpress-collapse-filter/</guid>
		<description><![CDATA[There&#8217;s a serious dearth of FeedWordPress filter plugins out there. I aim to rectify the situation. FeedWordPress Collapse Filter will collapse multiple posts being imported from a single feed into a single post. I use it here on Plutor.org to keep Flickr photos (which I frequently upload by the handfuls) from overwhelming everything else. Each [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a serious dearth of <a href="http://projects.radgeek.com/feedwordpress">FeedWordPress</a> filter plugins out there.  I aim to rectify the situation.  FeedWordPress Collapse Filter will collapse multiple posts being imported from a single feed into a single post.  I use it here on Plutor.org to keep Flickr photos (which I frequently upload by the handfuls) from overwhelming everything else.  Each syndicated feed can be separately configured to collapse (or not) with a different time threshold.</p>
<p><a href="/files/feedwordpress-collapse.tar.gz">Download FeedWordPress Collapse Filter 1.0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2007/09/07/feedwordpress-collapse-filter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trivia in the Boston Area</title>
		<link>http://plutor.org/blog/2006/09/26/trivia-in-the-boston-area/</link>
		<comments>http://plutor.org/blog/2006/09/26/trivia-in-the-boston-area/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 16:30:20 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Boston]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2006/09/26/trivia-in-the-boston-area/</guid>
		<description><![CDATA[We&#8217;re trying to find a new location for trivia night that&#8217;s a little more central than the current destination in way-north Somerville. So I whipped together my very first Google Maps mashup. It includes all of the Stump trivia locations as well as the T subway lines and stops.]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re trying to find a new location for trivia night that&#8217;s a little more central than the current destination in way-north Somerville.  So I whipped together <a href="http://plutor.org/temp/trivia/">my very first Google Maps mashup</a>.  It includes all of the <a href="http://www.trailsideentertainment.com/stump_locations.asp">Stump trivia locations</a> as well as the T subway lines and stops.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2006/09/26/trivia-in-the-boston-area/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gometric is expiring</title>
		<link>http://plutor.org/blog/2006/03/27/gometric-is-expiring/</link>
		<comments>http://plutor.org/blog/2006/03/27/gometric-is-expiring/#comments</comments>
		<pubDate>Mon, 27 Mar 2006 15:07:43 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2006/03/27/gometric/</guid>
		<description><![CDATA[The domain GoMetric.org is expiring on April 24. Should I renew it? Does anyone use it? It averages fewer than 20 hits a day, and it&#8217;s unclear how many of those hits are anything besides robots. Update 5 Apr &#8211; Fine, sheesh! I didn&#8217;t realize people actually still used it. Gometric is now renewed for [...]]]></description>
			<content:encoded><![CDATA[<p>The domain <a href="http://gometric.org">GoMetric.org</a> is expiring on April 24.  Should I renew it?  Does anyone use it?  It averages fewer than 20 hits a day, and it&#8217;s unclear how many of those hits are anything besides robots.</p>
<p class="update">Update 5 Apr &#8211; Fine, sheesh!  I didn&#8217;t realize people actually still <em>used</em> it.  Gometric is now renewed for another two years, and I have some ideas for some updates and whatnot.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2006/03/27/gometric-is-expiring/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Three Words, Five Minutes</title>
		<link>http://plutor.org/blog/2006/01/04/143114/</link>
		<comments>http://plutor.org/blog/2006/01/04/143114/#comments</comments>
		<pubDate>Wed, 04 Jan 2006 19:31:14 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2006/01/04/14.31.14/</guid>
		<description><![CDATA[I wrote Three words, five minutes this morning after about a year of procrastinating. It was initially going to be big and complicated, but since that was the source of the procrastination, I made it a single frameset with Writeboard as the writing interface. TWFM makes it surprisingly easy to just go and get a [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote <a href="http://plutor.org/threewords/">Three words, five minutes</a> this morning after about a year of procrastinating.  It was initially going to be big and complicated, but since that was the source of the procrastination, I made it a single frameset with <a href="http://writeboard.com/">Writeboard</a> as the writing interface.  TWFM makes it surprisingly easy to just go and get a little writing exercise, and even if it doesn&#8217;t inspire something longer, then it was worth it.</p>
<p>Nomad has been ignoring work with it all day.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2006/01/04/143114/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Greasemonkey Script: Metafilter Asynchronous Flagging</title>
		<link>http://plutor.org/blog/2005/12/08/065115/</link>
		<comments>http://plutor.org/blog/2005/12/08/065115/#comments</comments>
		<pubDate>Thu, 08 Dec 2005 11:51:15 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Greasemonkey Scripts]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2005/12/08/06.51.15/</guid>
		<description><![CDATA[I was inspired yesterday to work on a new Greasemonkey script. Reminded about Jesse Ruderman&#8217;s Bash.org Instant Voting script, I made a similar script for flagging posts and comments on Metafilter. Metafilter Asynchronous Flagging allows you to flag posts and comments without having to go through the two interstitial pages and losing your line of [...]]]></description>
			<content:encoded><![CDATA[<p>I was inspired yesterday to work on a new Greasemonkey script.  Reminded about Jesse Ruderman&#8217;s <a href="http://www.squarefree.com/2005/05/25/bashorg-instant-voting-user-script/">Bash.org Instant Voting</a> script, I made a similar script for flagging posts and comments on <a href="http://metafilter.com/">Metafilter</a>.  <a href="http://userscripts.org/scripts/show/2306">Metafilter Asynchronous Flagging</a> allows you to flag posts and comments without having to go through the <em>two</em> interstitial pages and losing your line of thought in the thread.</p>
<p>(I had to flag one of my own comments approximately thirty times while I was testing it.  I wonder what Mathowie thought about that.)</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2005/12/08/065115/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Greasemonkey Script &#8220;Flickr More Home&#8221; updated</title>
		<link>http://plutor.org/blog/2005/11/23/192111/</link>
		<comments>http://plutor.org/blog/2005/11/23/192111/#comments</comments>
		<pubDate>Thu, 24 Nov 2005 00:21:11 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Greasemonkey Scripts]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2005/11/23/19.21.11/</guid>
		<description><![CDATA[I updated the Greasemonkey script &#8220;Flickr More Home&#8221; today. It used to get its data from the RSS feelds, but I&#8217;d had problems with the feeds not actually showing my contacts&#8217; most recent photos. Plus they&#8217;d always be missing non-public photos that I had access to. So now it uses the HTML pages to get [...]]]></description>
			<content:encoded><![CDATA[<p>I updated the Greasemonkey script &#8220;<a href="http://userscripts.org/scripts/show/1584">Flickr More Home</a>&#8221; today.  It used to get its data from the RSS feelds, but I&#8217;d had problems with the feeds not actually showing my contacts&#8217; most recent photos.  Plus they&#8217;d always be missing non-public photos that I had access to.</p>
<p>So now it uses the HTML pages to get the list of photos instead.  I don&#8217;t know if that&#8217;s harder on Flickr&#8217;s servers (it&#8217;s certainly less <em>elegant</em>), but since it caches them, it&#8217;s only really two more hits per Flickring session.</p>
<p class="update">Update 14 Dec &#8211; Fixed to work with Greasemonkey 0.6.4</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2005/11/23/192111/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Greasemonkey Scripts</title>
		<link>http://plutor.org/blog/2005/03/25/072743/</link>
		<comments>http://plutor.org/blog/2005/03/25/072743/#comments</comments>
		<pubDate>Fri, 25 Mar 2005 12:27:43 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Greasemonkey Scripts]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2005/03/25/07.27.43/</guid>
		<description><![CDATA[I discovered the Firefox extension Greasemonkey in early March 2005. I had probably heard of it before then, but I don&#8217;t know why it had taken so long for me to really look at it. It&#8217;s exactly the kind of thing that appeals to me: injecting Javascript (often with DOM actions, possibly with Ajax) into [...]]]></description>
			<content:encoded><![CDATA[<p>I discovered the Firefox extension <a href="http://greasemonkey.mozdev.org/">Greasemonkey</a> in early March 2005.  I had probably heard of it before then, but I don&#8217;t know why it had taken so long for me to really look at it.  It&#8217;s exactly the kind of thing that appeals to me: injecting Javascript (often with DOM actions, possibly with Ajax) into any web page.  Every once in a while, I come up with an idea for a one-off script.  They&#8217;re all available from <a href="http://greasemonkeyed.com/people/72">my profile on Greasemonkeyed.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2005/03/25/072743/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Welt</title>
		<link>http://plutor.org/blog/2004/10/14/124247/</link>
		<comments>http://plutor.org/blog/2004/10/14/124247/#comments</comments>
		<pubDate>Thu, 14 Oct 2004 17:42:47 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2004/10/14/12.42.47/</guid>
		<description><![CDATA[Welt (Windows Event Log Tool) collects event logs from an arbtrary number of Windows machines and allows for centralized reporting and monitoring. I&#8217;ve built in a SiteScope hook, so we were able to replace 1200 NTEventLog monitors with fewer than fifty Welt monitors, and we now have far greater flexibility with thresholds. The engineering team [...]]]></description>
			<content:encoded><![CDATA[<p>Welt (Windows Event Log Tool) collects event logs from an arbtrary number of Windows machines and allows for centralized reporting and monitoring.  I&#8217;ve built in a SiteScope hook, so we were able to replace 1200 NTEventLog monitors with fewer than fifty Welt monitors, and we now have far greater flexibility with thresholds.  The engineering team also uses the Welt web interface to gather information about an outage.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2004/10/14/124247/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WEBoggle</title>
		<link>http://plutor.org/blog/2004/08/31/132023/</link>
		<comments>http://plutor.org/blog/2004/08/31/132023/#comments</comments>
		<pubDate>Tue, 31 Aug 2004 18:20:23 +0000</pubDate>
		<dc:creator>Plutor</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://plutor.org/blog/2004/08/31/13.20.23/</guid>
		<description><![CDATA[Boggle is arguably one of the best candidates for a simple online multiplayer game. All of the interaction between players is at a single moment, and the scoring can be easily automated. JavaScript with DOM allows you to do a lot of really neat things, so as a test of my skills, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>Boggle is arguably one of the best candidates for a simple online multiplayer game.  All of the interaction between players is at a single moment, and the scoring can be easily automated.  JavaScript with DOM allows you to do a lot of really neat things, so as a test of my skills, I decided to try to make a massively multiplayer online Boggle game.  It worked, but my backend code was pretty inefficient.  When I brought it down, Evan offered to mirror it.  He&#8217;s not only done that, but he&#8217;s improved the game beyond even my plans.  <a href="http://weboggle.shackworks.com/">Check out the game</a>.<br />
<span id="more-411"></span></p>
<h4>Motivation</h4>
<p>Around the the end of January, I was doing some reading for work on the <a href="http://www.w3.org/DOM/">Document Object Model</a> (DOM).  The DOM (ideally) allows JavaScript to access and modify any element in an HTML document in a heirarchical Object-Oriented fashion (well, as OO as Javascript can ever be).  The more I read about what was possible, the more I realized that I could create a totally interactive application written in merely HTML and JavaScript.</p>
<p>Then I remembered what I think is the most useful JavaScript feature in existance: asyncronous HTTP requests using the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmobjxmlhttprequest.asp">XMLHTTP object</a> for Internet Explorer or the <a href="http://www.mozilla.org/xmlextras/">XMLHttpRequest</a> object in Mozilla-based browsers.  Using this object and a little server-side scripting, I could not only keep important logic and large files like dictionaries on the server, but I could also create multiplayer (potentially <em>massively</em> multiplayer) interactive online games that required nothing but a modern browser.</p>
<p>Think about <a href="http://www.popcap.com/">PopCap</a>, <a href="http://www.pogo.com/">Pogo</a>, <a href="http://games.yahoo.com/">Yahoo Games</a>, and <a href="http://zone.msn.com/">MSN Games</a>.  Every single one of the games on these sites could be done without requiring a single plugin.  I thought about it, and I decided to set about demonstrating it.  (<small>It was only after this game was mostly completed that I noticed <a href="http://www.themaninblue.com/experiment/SSCrabble/">SSCrabble</a>.  While it uses similar client-side scripting techniques, it lacks the multiplayer functionality entirely, which is too bad.</small>)</p>
<h4>Technology</h4>
<p>WEBoggle is primarily HTML and JavaScript.  There&#8217;s fewer than 100 server-side lines of Perl, and a 90,000 word dictionary.</p>
<p>All WEBoggle requires is either Internet Explorer 5 or newer, or a Mozilla-based browser like <a href="http://www.mozilla.org/">Mozilla</a>, <a href="http://www.mozilla.org/products/firebird/">Firebird</a> or <a href="http://galeon.sourceforge.net/">Galeon</a>.  (<small>Internet Explorer 4 <em>should</em> work, but I&#8217;ve never tried it.</small>).  There are a few caveats, and good reasons why other common browsers like Opera do not work, but those are all listed in the Bugs section below.  Also, your browser must accept cookies.  Sorry.</p>
<h4>Cheating</h4>
<p>Cheating in an online game is an inherent problem.  I&#8217;ve worked as hard as I could in order to keep important scoring logic server-side in WEBoggle.  I&#8217;m only human, and it&#8217;s possible that I&#8217;ve missed something and it&#8217;s possible to modify the JavaScript source code so that it submits invalid words and they get erroneously scored.</p>
<p>A much easier way to cheat, however, is to write a script to give you all of the words that can be found on the board.  I could have made it more difficult to do this, but as long as the letters are legible to the player, you could simply type them into a command line script that would then give you a list of words to type back into the game.  There was simply no way to prevent this. (<small>I wrote such a script in about 60 seconds, so if you&#8217;re considering it, your effort won&#8217;t make you &#8220;the first&#8221;.  I was able to get more than 50 points consistantly.</small>)</p>
<p>I just hope that everyone who plays this game remembers that cheating is no fun, not for you, and not for anyone with whom you&#8217;re playing..</p>
<h4>Updates</h4>
<p>Once WEBoggle started generating several thousand player-games per day, it started interfering with the operation of the sites on <a href="http://www.discordians.net">my webhost</a>.  I took it down until I could make it more efficient, and a guy named Evan Simpson came forward with an offer to mirror it for the time being.</p>
<p>As anyone who&#8217;s seen my <a href="/projects/">Projects listing</a> will agree, I have a short attention span.  Updating WEBoggle kind of fell off my radar, and I told Evan that he was in charge.  He&#8217;s done far more than I ever planned or expected: &#8220;missing words&#8221; submissions, two simultaneous games (one of which is Big Boggle), the ability to rotate the board, and a list of &#8220;words that nobody found&#8221; with each round.</p>
<h4>Sightings</h4>
<ul>
<li>2004-02-18: <a href="http://metafilter.com/mefi/31287">MetaFilter</a></li>
<li>2004-08-13: <a href="http://www.metafilter.com/mefi/34965">MetaFilter</a></li>
<li>2004-08-*: <a href="http://del.icio.us/url/3e009511449806edfe96fb8ae9f260da">Delicious</a></li>
<li>2004-08-17: <a href="http://www.waxy.org/links/archive/2004/08/index.shtml">Waxy links</a></li>
</ul>
<h4>Acknowledgements</h4>
<p>I&#8217;d like to thank everyone who helped me test WEBoggle and suggested stupid improvements: BrainiACK, Nomad, Splatta, Kazy, and especially M.  Also, all the people who donated money through Paypal and posted links to WEBoggle on their blogs.  At its height, more than 6000 person-games were being played every day.  And a thousand thanks to Evan Simpson for mirroring and then improving the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://plutor.org/blog/2004/08/31/132023/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

