<?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>Allen Day's Blog</title>
	<atom:link href="http://www.spicylogic.com/allenday/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.spicylogic.com/allenday/blog</link>
	<description>♥data♥</description>
	<lastBuildDate>Mon, 21 Jun 2010 23:28:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Eclipse setup notes for Android and PhoneGap Development</title>
		<link>http://www.spicylogic.com/allenday/blog/2010/06/14/eclipse-setup-notes-for-android-and-phonegap-development/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2010/06/14/eclipse-setup-notes-for-android-and-phonegap-development/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 02:49:48 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Random musings]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/?p=125</guid>
		<description><![CDATA[
Install Eclipse for Java
Install Android SDK
Install Eclipse plugins


Subclipse http://subclipse.tigris.org/update_1.6.x
Egit http://download.eclipse.org/egit/updates
PyDev http://pydev.org/updates
ADT http://dl-ssl.google.com/android/eclipse

]]></description>
			<content:encoded><![CDATA[<ol>
<li>Install Eclipse for Java</li>
<li>Install Android SDK</li>
<li>Install Eclipse plugins</li>
</ol>
<ul>
<li>Subclipse http://subclipse.tigris.org/update_1.6.x</li>
<li>Egit http://download.eclipse.org/egit/updates</li>
<li>PyDev http://pydev.org/updates</li>
<li>ADT http://dl-ssl.google.com/android/eclipse</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2010/06/14/eclipse-setup-notes-for-android-and-phonegap-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sartorial crash course</title>
		<link>http://www.spicylogic.com/allenday/blog/2010/01/31/sartorial-crash-course/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2010/01/31/sartorial-crash-course/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 11:53:06 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/?p=115</guid>
		<description><![CDATA[Disclaimer: I&#8217;m not claiming to be an expert, or even of above average knowledge when it comes to clothing.  I have noticed, however, that I&#8217;ve acquired enough knowledge over the last couple of years to be above-average in my peer group.  Constructive feedback welcome.
I&#8217;m approaching this from a technical angle.  There are a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>Disclaimer: I&#8217;m not claiming to be an expert, or even of above average knowledge when it comes to clothing.  I have noticed, however, that I&#8217;ve acquired enough knowledge over the last couple of years to be above-average in my peer group.  Constructive feedback welcome.</p>
<p>I&#8217;m approaching this from a technical angle.  There are a lot of very interesting, technical, useful (and some vestigial) features in clothing, from the weave of the cloth to the cut of the garment to the orientation of buttonholes.  Here are a few jumping off points for similarly-minded guys:</p>
<p>Books to read.  Of the 20 or so I reviewed at bookstores or by purchase, these stood out the most for their quality and depth of content:</p>
<ul>
<li><a href="http://www.amazon.com/Details-Mens-Style-Manual-Ultimate/dp/159240328X">Details Men&#8217;s Style Manual: The Ultimate Guide for Making Your Clothes Work for You<br />
<img src="http://www.spicylogic.com/allenday/blog/wp-content/uploads/2010/01/517511-ULmL._BO2204203200_PIsitb-sticker-arrow-clickTopRight35-76_AA240_SH20_OU01_.jpg" alt="" width="240" height="240" /></a></li>
<li><a href="http://www.amazon.com/Gentleman-Timeless-Guide-Fashion-Lifestyle/dp/0841608938">Gentleman: A Timeless Guide to Fashion<br />
<img src="http://www.spicylogic.com/allenday/blog/wp-content/uploads/2010/01/51UXChYDKVL-1._SL500_AA240_.jpg" alt="" width="240" height="240" /></a></li>
</ul>
<p>Best sites:</p>
<ul>
<li><a href="http://www.mensflair.com/style-advice/odd-colour-combinations.php">Men&#8217;s Flair</a> &#8211; good information on foundation principles.  Cloth, color coordination, etc.  Just the right balance of theoretical and practical info.<br />
<img src="http://www.spicylogic.com/allenday/blog/wp-content/uploads/2010/01/c-blue-brwn.jpg" alt="" width="200" height="196" /></p>
<p><img src="http://www.spicylogic.com/allenday/blog/wp-content/uploads/2010/01/suit-back.jpg" alt="" width="263" height="535" /></li>
<li><a href="http://askandyaboutclothes.com">Ask Andy About Clothes</a> &#8211; good information on men&#8217;s fashion.  Focus leans toward classic/traditional American.  Has a great &#8220;for sale&#8221; section</li>
<li><a href="http://styleforum.net">Style Forum</a> &#8211; equally good information on men&#8217;s fashion, from a different angle.  Focus leans toward contemporary/trendy</li>
<li><a href="http://www.basenotes.net">BaseNotes</a> &#8211; good information on fragrances</li>
<li><a href="http://ebay.com">eBay</a> &#8211; best place to score deals if:
<ol>
<li>you&#8217;ve done your home work and know what you&#8217;re looking for, and</li>
<li>you&#8217;re willing to buy/wear pre-owned.</li>
</ol>
</li>
</ul>
<p>Probably the single best thing you can do though is go to a high-end deparment store.  If you&#8217;re in LA like me, which you probably are if you&#8217;re reading this, then in order, you should pay a visit to Neiman Marcus in Beverly Hills, Barneys New York (next to Neiman Marcus), Nordstroms (preferrably @ The Grove, or alternatively Westside Pavilion), Alandale&#8217;s in Culver City.  Just go try stuff on.  Plan on spending half a day experiencing a range of price/quality points.  One good thing about men&#8217;s clothing I learned vs. women&#8217;s is that you tend to be paying more for quality of materials and construction than trendiness.  So really, try on the high-end, well engineered garments.  You might be surprised (as I was) at the range of craftsmanship &#8212; you literally feel it.  Also, plan on visiting the dept. stores a few times, and try on the same garments again.  You&#8217;ll get a better feel for what works for you this way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2010/01/31/sartorial-crash-course/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>8 Keys to Effective Crowdsourcing</title>
		<link>http://www.spicylogic.com/allenday/blog/2010/01/30/8-keys-to-effective-crowdsourcing/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2010/01/30/8-keys-to-effective-crowdsourcing/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 13:27:06 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Crowdsourcing]]></category>
		<category><![CDATA[Random musings]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/?p=114</guid>
		<description><![CDATA[The key to effective crowdsourcing is effective communication.  You communicate with your crowdsourced workers so that you can train them.  Training has a measurable cost, and you want to minimize this cost to make most effective use of your time and your budget.
Consider the situation when you&#8217;re in a professional position, or the flipside and [...]]]></description>
			<content:encoded><![CDATA[<p><strong>The key to effective crowdsourcing is effective communication</strong>.  You communicate with your crowdsourced workers so that you can train them.  Training has a measurable cost, and you want to minimize this cost to make most effective use of your time and your budget.</p>
<p>Consider the situation when you&#8217;re in a professional position, or the flipside and you&#8217;re training someone to take on a new role.  Assuming you are/have the &#8220;right&#8221; person with regard to relevant skills to perform the requisite tasks, why is training required?  <strong>Knowledge transfer needs to occur</strong>.  The same is also true for crowdsourced workers.  So how can we effectively transfer knowledge to workers who may only be spending a <em>few seconds</em> on your task?</p>
<p><strong>Key 1: Be consistent.</strong></p>
<p>Use similar phrasings and images for all of your task descriptions.  This allows workers to come up to speed in a minimum amount of time.  Imagine how hard it would be to read your email if each message opened in a differently styled window.  Similar phrasings/images are just one example of how to employ&#8230;</p>
<p><strong>Key 2: Use variables.</strong></p>
<p><a href="http://smartsheet.com">Smartsheet.com</a> got this right.  Have a look at these 2 tasks submitted from Smartsheet to <a href="http://mturk.com">Amazon&#8217;s Mechanical Turk</a>:<br />
<a href="http://img34.imageshack.us/g/picture7au.png/"><img class="alignnone" src="http://img64.imageshack.us/img64/1047/picture8fa.png" alt="" width="400" /></a></p>
<p>Look closely at what&#8217;s going on here.  The two tasks&#8217; input <em>variables</em> (<strong>Blog Name</strong> and <strong>Blog URL</strong>) are identical, only their values change.  Note also that there are 2114 tasks just like this available.  Workers like to have lots of very similar tasks because&#8230;</p>
<p><strong>Key 3: Batch tasks.</strong></p>
<p>Crowdsourced workers like batches of similar tasks because it presents an opportunity for them to set up a workflow, or even write a small computer program to do the tasks for them, for you.  The cost of learning how to do a task is amortized over the entire batch, letting them make more efficient use of time (and letting you make more efficient use of your budget).</p>
<p><strong>Key 4: Be visual.</strong></p>
<p>The adage &#8220;a picture is worth one thousand words&#8221; couldn&#8217;t be more fitting to communicating with crowdsourced workers.  Images are very information dense, are more friendly to scanning, and are able to more quickly communicate non-linear process structure when compared to text.  The most effective visual tool I have found thus far is to&#8230;</p>
<p><strong>Key 5: Use flow charts.</strong></p>
<p>Consider learning to use <a href="http://en.wikipedia.org/wiki/Flowchart">flow charts</a>, and also to <a href="http://www.breezetree.com/images/flow-chart-symbols.png">extend your visual vocabulary</a>.  I&#8217;m an avid user of <a href="http://en.wikipedia.org/wiki/Omnigraffle">OmniGraffle</a> for creating diagrams for crowdsourcing (as well as for myself).  I&#8217;ll be presenting some flow charts in the future.  You will find that by presenting your task graphically and in a formal way as a flow chart (as opposed to simply giving graphical examples), users will do more work for the same price because you&#8217;ve made it easier for them.  The flow chart also forces you be clear about what you want, which brings us to&#8230;</p>
<p><strong>Key 6: Know what you want.  Be unambiguous.</strong></p>
<p>Know what you expect the worker to do for you.  Make each task so simple that it&#8217;s virtually impossible for a worker to do it incorrectly.  Break up complex tasks into their most elementary pieces.  Ideally one task = one decision.  Make each task closed-ended.  Do not leave any room for ambiguity.</p>
<p>Designing tasks in this way requires more effort on your part, but will result in less money spent and higher-quality results.</p>
<p><strong>Key 7: Improve through iteration.</strong></p>
<p>Being unambiguous on the first try is nigh on impossible.  It&#8217;s for the same reason that you &#8220;bounce&#8221; ideas off of your peers/friends &#8212; to see how your approach to an idea or task might be sub-optimal or misunderstood.</p>
<p>Iteratively remove ambiguity.  Submit a sampling tasks out of a larger batch with a test task description.  See where the crowdsourced workers make mistakes.  Re-examine your task description to a) find the misunderstanding, and b) disambiguate it.</p>
<p><strong>Key 8. Build validators into your tasks.</strong></p>
<p>Make sure the worker&#8217;s work is validated before it gets to you.  This could mean having workers check each others&#8217; work, and can even involve some fancy statistics.  It could also mean writing a bit of javascript or some other backend systems to validate worker inputs (e.g. you ask for a minimum 300-word document.  count the words with javascript before they submit).  This is getting a bit more advanced, but opens more opportunity for more complex tasks by delegating part of the work to the computer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2010/01/30/8-keys-to-effective-crowdsourcing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google/HTC Nexus One Unboxing</title>
		<link>http://www.spicylogic.com/allenday/blog/2010/01/15/googlehtc-nexus-one-unboxing/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2010/01/15/googlehtc-nexus-one-unboxing/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 09:26:51 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2010/01/15/googlehtc-nexus-one-unboxing/</guid>
		<description><![CDATA[

]]></description>
			<content:encoded><![CDATA[<p><a class="image_link" title="P1000457" href="http://www.flickr.com/photos/allenday/4272763656/in/set-72157623204787854/"><img id="primary_photo_img" class="pc_img" src="http://farm3.static.flickr.com/2735/4272763656_db2320fdd1_m.jpg" border="0" alt="P1000457" width="180" height="240" /></a></p>
<p><a class="image_link" title="P1000441" href="http://www.flickr.com/photos/allenday/4272759774/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2783/4272759774_9cb415d140_s.jpg" border="0" alt="P1000441" width="75" height="75" /></a><a class="image_link" title="P1000442" href="http://www.flickr.com/photos/allenday/4272017657/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4018/4272017657_184b0a8d7d_s.jpg" border="0" alt="P1000442" width="75" height="75" /></a><a class="image_link" title="P1000443" href="http://www.flickr.com/photos/allenday/4272760332/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4063/4272760332_2dcc7f0f04_s.jpg" border="0" alt="P1000443" width="75" height="75" /></a><a class="image_link" title="P1000444" href="http://www.flickr.com/photos/allenday/4272018181/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4004/4272018181_3d7f324a9d_s.jpg" border="0" alt="P1000444" width="75" height="75" /></a><a class="image_link" title="P1000445" href="http://www.flickr.com/photos/allenday/4272760776/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2750/4272760776_2dfb13a90d_s.jpg" border="0" alt="P1000445" width="75" height="75" /></a><a class="image_link" title="P1000446" href="http://www.flickr.com/photos/allenday/4272018587/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4042/4272018587_e95f6d5682_s.jpg" border="0" alt="P1000446" width="75" height="75" /></a><a class="image_link" title="P1000447" href="http://www.flickr.com/photos/allenday/4272761272/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4065/4272761272_28007e0699_s.jpg" border="0" alt="P1000447" width="75" height="75" /></a><a class="image_link" title="P1000448" href="http://www.flickr.com/photos/allenday/4272761542/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2708/4272761542_5f1d400f77_s.jpg" border="0" alt="P1000448" width="75" height="75" /></a><a class="image_link" title="P1000449" href="http://www.flickr.com/photos/allenday/4272761770/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2695/4272761770_9cfe48716f_s.jpg" border="0" alt="P1000449" width="75" height="75" /></a><a class="image_link" title="P1000450" href="http://www.flickr.com/photos/allenday/4272761990/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2709/4272761990_7de6468ba4_s.jpg" border="0" alt="P1000450" width="75" height="75" /></a><a class="image_link" title="P1000451" href="http://www.flickr.com/photos/allenday/4272019775/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2714/4272019775_60ca1ee85b_s.jpg" border="0" alt="P1000451" width="75" height="75" /></a><a class="image_link" title="P1000452" href="http://www.flickr.com/photos/allenday/4272019997/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4052/4272019997_5df8e778b4_s.jpg" border="0" alt="P1000452" width="75" height="75" /></a><a class="image_link" title="P1000453" href="http://www.flickr.com/photos/allenday/4272762746/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4009/4272762746_1f041dc70f_s.jpg" border="0" alt="P1000453" width="75" height="75" /></a><a class="image_link" title="P1000454" href="http://www.flickr.com/photos/allenday/4272020533/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4060/4272020533_b8ff9e4618_s.jpg" border="0" alt="P1000454" width="75" height="75" /></a><a class="image_link" title="P1000455" href="http://www.flickr.com/photos/allenday/4272020741/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4052/4272020741_3c4ffc3cc6_s.jpg" border="0" alt="P1000455" width="75" height="75" /></a><a class="image_link" title="P1000456" href="http://www.flickr.com/photos/allenday/4272021009/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4027/4272021009_22b9a17e77_s.jpg" border="0" alt="P1000456" width="75" height="75" /></a><a class="image_link" title="P1000457" href="http://www.flickr.com/photos/allenday/4272763656/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2735/4272763656_db2320fdd1_s.jpg" border="0" alt="P1000457" width="75" height="75" /></a><a class="image_link" title="P1000458" href="http://www.flickr.com/photos/allenday/4272763880/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4057/4272763880_8c8b6bd290_s.jpg" border="0" alt="P1000458" width="75" height="75" /></a><a class="image_link" title="P1000459" href="http://www.flickr.com/photos/allenday/4272021759/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4064/4272021759_cbcf8e279b_s.jpg" border="0" alt="P1000459" width="75" height="75" /></a><a class="image_link" title="P1000460" href="http://www.flickr.com/photos/allenday/4272021993/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4064/4272021993_ec53985d95_s.jpg" border="0" alt="P1000460" width="75" height="75" /></a><a class="image_link" title="P1000461" href="http://www.flickr.com/photos/allenday/4272764658/in/set-72157623204787854/"><img class="pc_img" src="http://farm5.static.flickr.com/4029/4272764658_049b6d195c_s.jpg" border="0" alt="P1000461" width="75" height="75" /></a><a class="image_link" title="P1000464" href="http://www.flickr.com/photos/allenday/4272764868/in/set-72157623204787854/"><img class="pc_img" src="http://farm3.static.flickr.com/2796/4272764868_2060806d69_s.jpg" border="0" alt="P1000464" width="75" height="75" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2010/01/15/googlehtc-nexus-one-unboxing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to fix the meetup.com broken exported calendars.</title>
		<link>http://www.spicylogic.com/allenday/blog/2010/01/15/how-to-fix-the-meetupcom-broken-exported-calendars/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2010/01/15/how-to-fix-the-meetupcom-broken-exported-calendars/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 08:57:12 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/?p=112</guid>
		<description><![CDATA[I&#8217;m a big fan of meetup.com, but they&#8217;re so tragically unhip when it comes to mashups/integration/web 2.0.  One of my biggest gripes until about 6 months ago was that they had no facility (besides API) for exporting a calendar of meetups to my calendar app (I use Google Calendar), or any other calendar app for [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of <a href="http://meetup.com">meetup.com</a>, but they&#8217;re so tragically unhip when it comes to mashups/integration/web 2.0.  One of my biggest gripes until about 6 months ago was that they had no facility (besides API) for exporting a calendar of meetups to my calendar app (I use Google Calendar), or any other calendar app for that matter.</p>
<p>They introduced an export feature recently, but it&#8217;s pretty useless.  Here&#8217;s why: they offer two calendars</p>
<ul>
<li>[Calendar A] contains all upcoming items in all your meetup groups</li>
<li>[Calendar B] contains upcoming items which you have RSVP&#8217;d with &#8220;yes&#8221; or &#8220;maybe&#8221;.</li>
</ul>
<p>That&#8217;s it.  The calendars exported don&#8217;t even contain links that allow you to RSVP from directly inside your calendar &#8212; you have click through to the meetup.com site, log in, then RSVP.  Ugh.</p>
<p> </p>
<p>Come on, product guys.  What&#8217;s really called for is 4 separate calendars.</p>
<ul>
<li>[Calendar "yes"] All groups, &#8220;yes&#8221; events</li>
<li>[Calendar "maybe"] All groups, &#8220;maybe&#8221; events</li>
<li>[Calendar "no"] All groups, &#8220;no&#8221; events</li>
<li>[Calendar "none"] All groups, events to which I have not yet submitted an RSVP.</li>
</ul>
<p>I was finally just pissed off enough about the status quo that I fixed it for myself, and below I share the code.  You can try it out here: <a href="http://spicylogic.com/allenday/cgi-bin/mu.cgi?key=&lt;your_api_key&gt;&amp;cal=&lt;calendar&gt;">http://spicylogic.com/allenday/cgi-bin/mu.cgi?key=&lt;your_api_key&gt;&amp;cal=&lt;calendar&gt;</a> </p>
<p>where &lt;your_api_key&gt; can be found <a href="http://www.meetup.com/account/oauth_apps/">here</a> and &lt;calendar&gt; is one of &#8220;yes&#8221;, &#8220;no&#8221;, &#8220;none&#8221;, &#8220;maybe&#8221;.</p>
<p>Okay, here&#8217;s the code.  Install it on your own machine if possible, my ISP will appreciate it.  If you find fuckups, let me know and I&#8217;ll update the post.</p>

<div class="wp_syntax"><div class="code"><pre class="perl"><span style="color: #808080; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #000000; font-weight: bold;">use</span> strict;
<span style="color: #000000; font-weight: bold;">use</span> CGI <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>:standard<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">use</span> Date::<span style="color: #006600;">Manip</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>ParseDate ParseDateString ParseDateDelta DateCalc UnixDate<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">use</span> Date::<span style="color: #006600;">Parse</span>;
<span style="color: #000000; font-weight: bold;">use</span> HTML::<span style="color: #006600;">Entities</span>;
<span style="color: #000000; font-weight: bold;">use</span> LWP::<span style="color: #006600;">Simple</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>get<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">use</span> XML::<span style="color: #006600;">DOM</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">use</span> constant URL_EVENTS =<span style="color: #66cc66;">&amp;</span>gt; <span style="color: #ff0000;">'http://api.meetup.com/events?key=%s&amp;amp;member_id=%d&amp;amp;format=xml'</span>;
&nbsp;
<span style="color: #000066;">print</span> header<span style="color: #66cc66;">&#40;</span><span style="color: #000066;">q</span><span style="color: #66cc66;">&#40;</span>text<span style="color: #66cc66;">/</span>calendar<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$parser</span> = <span style="color: #000000; font-weight: bold;">new</span> XML::<span style="color: #006600;">DOM</span>::<span style="color: #006600;">Parser</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mode</span> = param<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'cal'</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$key</span>  = param<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'key'</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$user</span> = param<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'user'</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">!</span> <span style="color: #0000ff;">$mode</span> <span style="color: #66cc66;">||</span> <span style="color: #66cc66;">!</span> <span style="color: #0000ff;">$key</span> <span style="color: #66cc66;">||</span> <span style="color: #66cc66;">!</span> <span style="color: #0000ff;">$user</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #000066;">die</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$events_url</span> = <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span> URL_EVENTS, <span style="color: #0000ff;">$key</span>, <span style="color: #0000ff;">$user</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">#warn $events_url;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$events_txt</span> = get<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$events_url</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">#warn $events_txt;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$events_dom</span> = <span style="color: #0000ff;">$parser</span>-<span style="color: #66cc66;">&amp;</span>gt;parse<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$events_txt</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">#warn $events_dom;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #000066;">qq</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">BEGIN</span>:VCALENDAR\nPRODID:-<span style="color: #66cc66;">//</span>Meetup Inc<span style="color: #66cc66;">//</span>RemoteApi<span style="color: #66cc66;">//</span>EN\nVERSION:<span style="color: #cc66cc;">2.0</span>\nMETHOD:PUBLISH\nCALSCALE:GREGORIAN\nX-ORIGINAL-URL:http:<span style="color: #66cc66;">//</span>www.meetup.com<span style="color: #66cc66;">/</span>\nX-WR-CALNAME:mu <span style="color: #0000ff;">$mode</span>\n<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$events</span> = <span style="color: #0000ff;">$events_dom</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'item'</span> <span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$i</span> = <span style="color: #cc66cc;">0</span> ; <span style="color: #0000ff;">$i</span> <span style="color: #66cc66;">&amp;</span>lt; <span style="color: #0000ff;">$events</span>-<span style="color: #66cc66;">&amp;</span>gt;getLength<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> ; <span style="color: #0000ff;">$i</span>++ <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$event</span> = <span style="color: #0000ff;">$events</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$i</span> <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_id</span>    = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'id'</span>             <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_rsvp</span>  = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'myrsvp'</span>         <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr0</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_name'</span>     <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr1</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_address1'</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr2</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_address2'</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr3</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_address3'</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr4</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_city'</span>     <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr5</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_state'</span>    <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_addr6</span> = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_zip'</span>      <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_desc</span>  = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'description'</span>    <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_link</span>  = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'event_url'</span>      <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_name</span>  = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'name'</span>           <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_lat</span>   = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_lat'</span>      <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_lon</span>   = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'venue_lon'</span>      <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$n_start_time</span>  = <span style="color: #0000ff;">$event</span>-<span style="color: #66cc66;">&amp;</span>gt;getElementsByTagName<span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">'time'</span>           <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;item<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>-<span style="color: #66cc66;">&amp;</span>gt;getFirstChild<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$start_time</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$end_time</span>;
&nbsp;
  <span style="color: #808080; font-style: italic;">#my $dummy_time = &quot;20000101T000000Z&quot;;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$sec</span>,<span style="color: #0000ff;">$min</span>,<span style="color: #0000ff;">$hour</span>,<span style="color: #0000ff;">$mday</span>,<span style="color: #0000ff;">$mon</span>,<span style="color: #0000ff;">$year</span>,<span style="color: #0000ff;">$wday</span>,<span style="color: #0000ff;">$yday</span>,<span style="color: #0000ff;">$isdst</span><span style="color: #66cc66;">&#41;</span> = <span style="color: #000066;">localtime</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$dummy_time</span> = <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">q</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">%</span>04d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dT<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dZ<span style="color: #66cc66;">&#41;</span>, <span style="color: #0000ff;">$year</span> + <span style="color: #cc66cc;">1900</span>, <span style="color: #0000ff;">$mon</span> + <span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">$mday</span>, <span style="color: #0000ff;">$hour</span>, <span style="color: #0000ff;">$min</span>, <span style="color: #0000ff;">$sec</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_start_time</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ss</span>,<span style="color: #0000ff;">$mm</span>,<span style="color: #0000ff;">$hh</span>,<span style="color: #0000ff;">$day</span>,<span style="color: #0000ff;">$month</span>,<span style="color: #0000ff;">$year</span>,<span style="color: #0000ff;">$zone</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ss</span>,<span style="color: #0000ff;">$mm</span>,<span style="color: #0000ff;">$hh</span>,<span style="color: #0000ff;">$day</span>,<span style="color: #0000ff;">$month</span>,<span style="color: #0000ff;">$year</span>,<span style="color: #0000ff;">$zone</span><span style="color: #66cc66;">&#41;</span> = strptime<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_start_time</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$start_time</span> = <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">q</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">%</span>04d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dT<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dZ<span style="color: #66cc66;">&#41;</span>, <span style="color: #0000ff;">$year</span> + <span style="color: #cc66cc;">1900</span>, <span style="color: #0000ff;">$month</span> + <span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">$day</span>, <span style="color: #0000ff;">$hh</span>, <span style="color: #0000ff;">$mm</span>, <span style="color: #0000ff;">$ss</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$eday</span> = <span style="color: #0000ff;">$day</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$hh</span> == <span style="color: #cc66cc;">23</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #0000ff;">$eday</span> = <span style="color: #0000ff;">$day</span> + <span style="color: #cc66cc;">1</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ehh</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$hh</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">%</span> <span style="color: #cc66cc;">24</span>;
    <span style="color: #0000ff;">$end_time</span>   = <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">q</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">%</span>04d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dT<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02d<span style="color: #66cc66;">%</span>02dZ<span style="color: #66cc66;">&#41;</span>, <span style="color: #0000ff;">$year</span> + <span style="color: #cc66cc;">1900</span>, <span style="color: #0000ff;">$month</span> + <span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">$eday</span>, <span style="color: #0000ff;">$ehh</span>, <span style="color: #0000ff;">$mm</span>, <span style="color: #0000ff;">$ss</span> <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$start_time</span> = <span style="color: #ff0000;">''</span>;
    <span style="color: #0000ff;">$end_time</span> = <span style="color: #ff0000;">''</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$mode</span> eq <span style="color: #0000ff;">$n_rsvp</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$id</span>   = <span style="color: #0000ff;">$n_id</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$name</span> = <span style="color: #0000ff;">$n_name</span> ? <span style="color: #0000ff;">$n_name</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">&quot;&quot;</span>;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$desc</span> = <span style="color: #0000ff;">$n_desc</span> ? <span style="color: #0000ff;">$n_desc</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">&quot;&quot;</span>;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$addr</span> = <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr0</span> ? <span style="color: #0000ff;">$n_addr0</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr1</span> ? <span style="color: #0000ff;">$n_addr1</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr2</span> ? <span style="color: #0000ff;">$n_addr2</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr3</span> ? <span style="color: #0000ff;">$n_addr3</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr4</span> ? <span style="color: #0000ff;">$n_addr4</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr5</span> ? <span style="color: #0000ff;">$n_addr5</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">', '</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>
             . <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$n_addr6</span> ? <span style="color: #0000ff;">$n_addr6</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #808080; font-style: italic;">#$desc =~ s/(.)/(ord($1) &amp;gt; 127) ? &quot;&quot; : $1/egs;</span>
&nbsp;
    <span style="color: #0000ff;">$name</span> = HTML::<span style="color: #006600;">Entities</span>::<span style="color: #006600;">decode_entities</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$name</span> <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$desc</span> = HTML::<span style="color: #006600;">Entities</span>::<span style="color: #006600;">decode_entities</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$desc</span> <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$addr</span> = HTML::<span style="color: #006600;">Entities</span>::<span style="color: #006600;">decode_entities</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$addr</span> <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$name</span> =~ <span style="color: #000066;">s</span><span style="color: #66cc66;">/</span>,<span style="color: #66cc66;">/</span>\\,<span style="color: #66cc66;">/</span>g;
    <span style="color: #0000ff;">$desc</span> =~ <span style="color: #000066;">s</span><span style="color: #66cc66;">/</span>,<span style="color: #66cc66;">/</span>\\,<span style="color: #66cc66;">/</span>g;
    <span style="color: #0000ff;">$addr</span> =~ <span style="color: #000066;">s</span><span style="color: #66cc66;">/</span>,<span style="color: #66cc66;">/</span>\\,<span style="color: #66cc66;">/</span>g;
&nbsp;
    <span style="color: #0000ff;">$desc</span> =~ <span style="color: #000066;">s</span><span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;">#\\n#gs;</span>
    <span style="color: #0000ff;">$desc</span> .= <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>nGoing?<span style="color: #000099; font-weight: bold;">\\</span>n<span style="color: #000099; font-weight: bold;">\\</span>n&quot;</span>;
    <span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$response</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span> yes <span style="color: #000066;">no</span> maybe <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
      <span style="color: #0000ff;">$desc</span> .= <span style="color: #000066;">uc</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$response</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #000066;">qq</span><span style="color: #66cc66;">&#40;</span>: http:<span style="color: #66cc66;">//</span>api.meetup.com<span style="color: #66cc66;">/</span>rsvp?event_id=<span style="color: #0000ff;">$id</span><span style="color: #66cc66;">&amp;</span>amp;key=<span style="color: #0000ff;">$key</span><span style="color: #66cc66;">&amp;</span>amp;rsvp=<span style="color: #0000ff;">$response</span>\\n<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$geo</span> = <span style="color: #0000ff;">$n_lat</span> <span style="color: #66cc66;">&amp;</span>amp;<span style="color: #66cc66;">&amp;</span>amp; <span style="color: #0000ff;">$n_lon</span> ? <span style="color: #ff0000;">&quot;GEO:&quot;</span> . <span style="color: #0000ff;">$n_lat</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> . <span style="color: #ff0000;">&quot;;&quot;</span> . <span style="color: #0000ff;">$n_lon</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> . <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> : <span style="color: #000066;">undef</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">#print sprintf( qq(BEGIN:VEVENT\nSUMMARY:%s\nDESCRIPTION:%s\nLAST-MODIFIED:%s\nUID:%s\nCLASS:%s\nCREATED:%s\nDTSTAMP:%s\nDTSTART:%s\nDTEND:%s\nLOCATION:%s\n\nURL:%s\nEND:VEVENT\n),</span>
    <span style="color: #000066;">print</span> <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span> <span style="color: #000066;">qq</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">BEGIN</span>:VEVENT\nSUMMARY:<span style="color: #0000ff;">%s</span>\nDESCRIPTION:<span style="color: #0000ff;">%s</span>\nLAST-MODIFIED:<span style="color: #0000ff;">%s</span>\nUID:<span style="color: #0000ff;">%s</span>\nCLASS:<span style="color: #0000ff;">%s</span>\nCREATED:<span style="color: #0000ff;">%s</span>\nDTSTAMP:<span style="color: #0000ff;">%s</span>\nDTSTART:<span style="color: #0000ff;">%s</span>\nDTEND:<span style="color: #0000ff;">%s</span>\n<span style="color: #0000ff;">%sLOCATION</span>:<span style="color: #0000ff;">%s</span>\nURL:<span style="color: #0000ff;">%s</span>\nEND:VEVENT\n<span style="color: #66cc66;">&#41;</span>,
      <span style="color: #0000ff;">$name</span>,
      <span style="color: #0000ff;">$desc</span>,
      <span style="color: #0000ff;">$start_time</span>,
      <span style="color: #ff0000;">&quot;event_$id<span style="color: #000099; font-weight: bold;">\@</span>meetup.com&quot;</span>,
      <span style="color: #ff0000;">&quot;PUBLIC&quot;</span>,
      <span style="color: #0000ff;">$dummy_time</span>,
      <span style="color: #0000ff;">$dummy_time</span>,
      <span style="color: #0000ff;">$start_time</span>,
      <span style="color: #0000ff;">$end_time</span>,
      <span style="color: #0000ff;">$geo</span>,
      <span style="color: #0000ff;">$addr</span>,
      <span style="color: #0000ff;">$n_link</span> ? <span style="color: #0000ff;">$n_link</span>-<span style="color: #66cc66;">&amp;</span>gt;toString<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">&quot;&quot;</span>,
    <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #000066;">qq</span><span style="color: #66cc66;">&#40;</span>END:VCALENDAR\n<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2010/01/15/how-to-fix-the-meetupcom-broken-exported-calendars/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>G1 cupcake upgrade</title>
		<link>http://www.spicylogic.com/allenday/blog/2009/05/17/g1-cupcake-upgrade/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2009/05/17/g1-cupcake-upgrade/#comments</comments>
		<pubDate>Sun, 17 May 2009 07:31:08 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Random musings]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2009/05/17/g1-cupcake-upgrade/</guid>
		<description><![CDATA[I&#8217;m using a T-mobile Android G1 on AT&#038;T network.  I don&#8217;t have a T-mobile SIM at all, and I wasn&#8217;t getting the Cupcake upgrade through the system menu, either when using AT&#038;T EDGE or using WiFi.
So I followed this guide: http://www.androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/
Worked great and easy/no-hassle to follow for an Android n00b like myself.  Best [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m using a T-mobile Android G1 on AT&#038;T network.  I don&#8217;t have a T-mobile SIM at all, and I wasn&#8217;t getting the Cupcake upgrade through the system menu, either when using AT&#038;T EDGE or using WiFi.</p>
<p>So I followed this guide: <a href="http://www.androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/">http://www.androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/</a></p>
<p>Worked great and easy/no-hassle to follow for an Android n00b like myself.  Best and most comprehensive one I could find.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2009/05/17/g1-cupcake-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standalone BitTorrent Checksum Verification Tool</title>
		<link>http://www.spicylogic.com/allenday/blog/2009/04/20/standalone-bittorrent-checksum-verification-tool/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2009/04/20/standalone-bittorrent-checksum-verification-tool/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 23:11:43 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Random musings]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2009/04/20/standalone-bittorrent-checksum-verification-tool/</guid>
		<description><![CDATA[I&#8217;m writing some scripts to let me automate the downloading and seeding of torrents.  The idea is to have torrents pulled in from RSS or a screenscrape (much as Azureus does this, but I want to script everything with Python/Mainline BitTorrent, bash, and Perl), then to sit on the torrents for a day or [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m writing some scripts to let me automate the downloading and seeding of torrents.  The idea is to have torrents pulled in from RSS or a screenscrape (much as Azureus does this, but I want to script everything with Python/Mainline BitTorrent, bash, and Perl), then to sit on the torrents for a day or so after their last mtime, then checksum them and if they&#8217;re good move them elsewhere for watching, etc.</p>
<p>Part of this requires checksumming the files, and Mainline doesn&#8217;t ship with a standalone utility to do this.  So I wrote one in Perl, see below.  This only handles single-file torrents for now (i.e. no directories of files).</p>

<div class="wp_syntax"><div class="code"><pre class="perl"><span style="color: #808080; font-style: italic;">#!/usr/bin/perl</span>
$<span style="color: #66cc66;">|</span>++;
<span style="color: #000000; font-weight: bold;">use</span> strict;
<span style="color: #000000; font-weight: bold;">use</span> Convert::<span style="color: #006600;">Bencode_XS</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>bdecode<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">use</span> Data::<span style="color: #006600;">Dumper</span>;
<span style="color: #000000; font-weight: bold;">use</span> Digest::<span style="color: #006600;">SHA1</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>sha1<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">use</span> URI::<span style="color: #006600;">Escape</span> <span style="color: #000066;">qw</span><span style="color: #66cc66;">&#40;</span>uri_escape<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$base</span> = <span style="color: #000066;">shift</span> <span style="color: #0000ff;">@ARGV</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$torrent</span> = <span style="color: #ff0000;">&quot;$base.torrent&quot;</span>;
&nbsp;
<span style="color: #000066;">open</span><span style="color: #66cc66;">&#40;</span> T, <span style="color: #0000ff;">$torrent</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> $<span style="color: #66cc66;">!</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$torrent_data</span> = <span style="color: #000066;">join</span> <span style="color: #ff0000;">''</span>, <span style="color: #009999;">&lt;T&gt;</span>;
<span style="color: #000066;">close</span><span style="color: #66cc66;">&#40;</span> T <span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$metainfo</span> = bdecode<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$torrent_data</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file_name</span> = <span style="color: #ff0000;">&quot;$base/&quot;</span> . <span style="color: #0000ff;">$metainfo</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'info'</span><span style="color: #66cc66;">&#125;</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'name'</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$file_length</span> = <span style="color: #0000ff;">$metainfo</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'info'</span><span style="color: #66cc66;">&#125;</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'length'</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$piece_length</span> = <span style="color: #0000ff;">$metainfo</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'info'</span><span style="color: #66cc66;">&#125;</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'piece length'</span><span style="color: #66cc66;">&#125;</span>;
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$pieces</span> = <span style="color: #0000ff;">$metainfo</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'info'</span><span style="color: #66cc66;">&#125;</span>-<span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#123;</span><span style="color: #ff0000;">'pieces'</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@pieces</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$offset</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$offset</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #000066;">length</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$pieces</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$p</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$pieces</span>, <span style="color: #0000ff;">$offset</span>, <span style="color: #cc66cc;">20</span> <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$offset</span> += <span style="color: #cc66cc;">20</span>;
  <span style="color: #000066;">push</span> <span style="color: #0000ff;">@pieces</span>, <span style="color: #0000ff;">$p</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000066;">open</span><span style="color: #66cc66;">&#40;</span> F, <span style="color: #0000ff;">$file_name</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$seek</span> = <span style="color: #cc66cc;">0</span>;
<span style="color: #b1b100;">foreach</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$p</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">@pieces</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$buf</span> = <span style="color: #ff0000;">''</span>;
  <span style="color: #000066;">seek</span><span style="color: #66cc66;">&#40;</span> F, <span style="color: #0000ff;">$seek</span>, <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #000066;">read</span><span style="color: #66cc66;">&#40;</span> F, <span style="color: #0000ff;">$buf</span>, <span style="color: #0000ff;">$piece_length</span> <span style="color: #66cc66;">&#41;</span>;
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$p</span> eq sha1<span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$buf</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">'.'</span>;
  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">'x'</span>;
  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #0000ff;">$seek</span> += <span style="color: #0000ff;">$piece_length</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066;">close</span><span style="color: #66cc66;">&#40;</span> F <span style="color: #66cc66;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2009/04/20/standalone-bittorrent-checksum-verification-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synthetic GFF Dataset for Genome Browser Benchmark</title>
		<link>http://www.spicylogic.com/allenday/blog/2009/04/07/synthetic-gff-dataset-for-genome-browser-benchmark/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2009/04/07/synthetic-gff-dataset-for-genome-browser-benchmark/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:01:52 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Genomics]]></category>
		<category><![CDATA[Informatics]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Science]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2009/04/07/synthetic-gff-dataset-for-genome-browser-benchmark/</guid>
		<description><![CDATA[I deployed a Gbrowse/Chado installation last week at Dow Agrosciences.  It got me thinking about how slow and basic the searches are with the Bio::DB::Das::Chado* adaptor, and wouldn&#8217;t it be nice to use SOLR here?
I made up a test dataset of gene/mRNA/exon 3-tiered feature groups by permuting some gene model data from the knownGene annotation [...]]]></description>
			<content:encoded><![CDATA[<p>I deployed a Gbrowse/Chado installation last week at <a href="http://www.dowagro.com/">Dow Agrosciences</a>.  It got me thinking about how slow and basic the searches are with the Bio::DB::Das::Chado* adaptor, and wouldn&#8217;t it be nice to use <a href="http://lucene.apache.org/solr/">SOLR</a> here?</p>
<p>I made up a test dataset of gene/mRNA/exon 3-tiered feature groups by permuting some gene model data from the <a href="http://hgdownload.cse.ucsc.edu/goldenPath/hg18/database/">knownGene annotation set</a> of the Hg18 build of the human genome.  You can grab the data set and script used to generate it <a href="http://www.spicylogic.com/allenday/images/knownGene/">here</a>.  There are several files mRNA.E<strong>N</strong>.txt.gz that contain gzipped gene models, where <strong>N</strong>=3..7 indicates there are 10^<strong>N</strong> models in the file, uniformly distributed across a 500-megabase reference sequence.</p>
<p>I&#8217;m planning to load these data into a couple of different systems and then compare performance on some of the typical Bio::DB::GFF API calls.  I can personally test on:</p>
<ul>
<li>Chado</li>
<li>The default Bio::DB::GFF schema (does it have a name?)</li>
<li>The SOLR backend I&#8217;m about to implement</li>
</ul>
<p>I know there are other feature DBs out there.  It would be good to include them as well in a later pass or to have someone else contribute the data once I get the benchmarking script written.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2009/04/07/synthetic-gff-dataset-for-genome-browser-benchmark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taste item-item recommender example</title>
		<link>http://www.spicylogic.com/allenday/blog/2009/02/11/taste-item-item-recommender-example/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2009/02/11/taste-item-item-recommender-example/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 22:10:00 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mahout]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2009/02/11/taste-item-item-recommender-example/</guid>
		<description><![CDATA[I threw together a Mahout/Taste based item-item based recommender last night.

	public static void itemItemRecommendations&#40;String path, String file&#41; &#123;
		File f = new File&#40;path, file&#41;;
	    try &#123;
			DataModel model = new FileDataModel&#40;f&#41;;
			model.refresh&#40;null&#41;;
		    ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity&#40;model&#41;;
		    ItemBasedRecommender itemRecommender = new GenericItemBasedRecommender&#40;model, itemSimilarity&#41;;
		    for &#40; Item [...]]]></description>
			<content:encoded><![CDATA[<p>I threw together a Mahout/Taste based item-item based recommender last night.</p>

<div class="wp_syntax"><div class="code"><pre class="java">	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #993333;">void</span> itemItemRecommendations<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> path, <span style="color: #aaaadd; font-weight: bold;">String</span> file<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #aaaadd; font-weight: bold;">File</span> f = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #aaaadd; font-weight: bold;">File</span><span style="color: #66cc66;">&#40;</span>path, file<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #66cc66;">&#123;</span>
			DataModel model = <span style="color: #000000; font-weight: bold;">new</span> FileDataModel<span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
			model.<span style="color: #006600;">refresh</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		    ItemSimilarity itemSimilarity = <span style="color: #000000; font-weight: bold;">new</span> LogLikelihoodSimilarity<span style="color: #66cc66;">&#40;</span>model<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		    ItemBasedRecommender itemRecommender = <span style="color: #000000; font-weight: bold;">new</span> GenericItemBasedRecommender<span style="color: #66cc66;">&#40;</span>model, itemSimilarity<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		    <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> Item i : model.<span style="color: #006600;">getItems</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
			    <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> RecommendedItem j : itemRecommender.<span style="color: #006600;">mostSimilarItems</span><span style="color: #66cc66;">&#40;</span>i.<span style="color: #006600;">getID</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>
			    	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> j.<span style="color: #006600;">getValue</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&gt;</span>= <span style="color: #cc66cc;">0.7</span> <span style="color: #66cc66;">&#41;</span>
			    		<span style="color: #aaaadd; font-weight: bold;">System</span>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span>i.<span style="color: #006600;">getID</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> + j.<span style="color: #006600;">getItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getID</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> + <span style="color: #aaaadd; font-weight: bold;">String</span>.<span style="color: #006600;">format</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%.3f&quot;</span>, j.<span style="color: #006600;">getValue</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">FileNotFoundException</span> e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// TODO Auto-generated catch block</span>
			e.<span style="color: #006600;">printStackTrace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #66cc66;">&#40;</span>TasteException e<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// TODO Auto-generated catch block</span>
			e.<span style="color: #006600;">printStackTrace</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>This outputs item1 &#8211;recommends&#8211;>item2 pairs with a weight.  I&#8217;m taking this and putting it into a solr document so I can display related item2s alongside item1 when it&#8217;s viewed.</p>
<p>Input data are comma-delimited <userID,itemID,score> tuples like so:</p>
<pre>
1fe7401b81eed49353d0cbeba5383848,5212,0.6
3c1832954a6e8781836fed670bb37b24,5212,1
70273e4c7c77700ee97acb8d0306c405,5213,0.8
1f057ccde135acbc881008bbf466e7e1,5213,1
51d44c7baca65ad39d11ba87bf2d438b,5213,1
adc924559b37114cd97d1f5cf7c71419,5213,1
78e254b4a11e61d76ff63cea02de4de8,5213,1
5c373ec7d9ad4a6f392c291d8ccba5ce,5213,0.2
fab8537564094fa8885f6214e6b682e1,5213,1
127f46aabcdbc2d2d04da8398a996c75,5213,1
</pre>
<p>Works great.  Thanks Sean.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2009/02/11/taste-item-item-recommender-example/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Android G1 APN Settings for AT&amp;T / Cingular, First Impressions</title>
		<link>http://www.spicylogic.com/allenday/blog/2008/12/31/google-android-g1-apn-settings-for-att-cingular-first-impressions/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2008/12/31/google-android-g1-apn-settings-for-att-cingular-first-impressions/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 20:55:35 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2008/12/31/google-android-g1-apn-settings-for-att-cingular-first-impressions/</guid>
		<description><![CDATA[I got an unlocked T-Mobile G1 today.  Woo.  There is a bunch of mis-information out there on blogs and forum about how to get the phone set up.  Here&#8217;s the real deal, I found these settings on Piaw&#8217;s Blog.

Name: whatever_you_want_the_name_to_be
APN: wap.cingular
Username: wap@cingulargprs.com
Password: cingular1
MMSC: http://mmsc.cingular.com
MMS Proxy: wireless.cingular.com
MMS port: 80
MCC: 310
MNC: 410

Now, on to [...]]]></description>
			<content:encoded><![CDATA[<p>I got an unlocked T-Mobile G1 today.  Woo.  There is a bunch of mis-information out there on blogs and forum about how to get the phone set up.  Here&#8217;s the real deal, I found these settings on <a href="http://piaw.blogspot.com/2008/12/cheapskate-guide-to-getting-g1-running.html">Piaw&#8217;s Blog</a>.</p>
<pre>
Name: whatever_you_want_the_name_to_be
APN: wap.cingular
Username: wap@cingulargprs.com
Password: cingular1
MMSC: http://mmsc.cingular.com
MMS Proxy: wireless.cingular.com
MMS port: 80
MCC: 310
MNC: 410
</pre>
<p>Now, on to my first impressions of the phone.</p>
<p>Works:</p>
<ul>
<li>Calling works.</li>
<li>Google contact import works.</li>
<li>Google Chat works.</li>
<li>EDGE data works.</li>
<li>WiFi data works.</li>
<li>Keyboard works.  It rocks</li>
</ul>
<p>Doesn&#8217;t work:</p>
<ul>
<li>AOL Chat does not work.  Complains it can&#8217;t read my mobile number from my SIM card.</li>
<li>3G data does not work.  I read that the phone doesn&#8217;t support the 3G band used by AT&#038;T.</li>
</ul>
<p>Works, but not well:</p>
<ul>
<li>The browser works, but it sucks compared to the iPhone.  Feels very slow.  I was expecting a lot more given that it&#8217;s using MobileSafari/WebKit.</li>
<li>Video download/playback works.  The player was branded with the YouTube logo, so I&#8217;m guessing it only supports YouTube out of the box.</li>
<li>The UI feels clunky at first.  Sort of feels like Nokia S60, too many menus and inconsistency in how different tasks are done</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2008/12/31/google-android-g1-apn-settings-for-att-cingular-first-impressions/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
