<?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 &#187; Computing</title>
	<atom:link href="http://www.spicylogic.com/allenday/blog/category/computing/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>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>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>
		<item>
		<title>EveryDNS &#8211; free DNS service</title>
		<link>http://www.spicylogic.com/allenday/blog/2008/12/10/everydns-free-dns-service/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2008/12/10/everydns-free-dns-service/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 20:47:54 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2008/12/10/everydns-free-dns-service/</guid>
		<description><![CDATA[http://www.everydns.com
Found this today, and it works as advertised.  Need to look more closely, but with this I think I can stop paying dyndns.com $30/year/domain for custom DNS.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.everydns.com">http://www.everydns.com</a></p>
<p>Found this today, and it works as advertised.  Need to look more closely, but with this I think I can stop paying <a href="http://dyndns.com">dyndns.com</a> $30/year/domain for custom DNS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2008/12/10/everydns-free-dns-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upcoming AI / Machine Learning Conferences</title>
		<link>http://www.spicylogic.com/allenday/blog/2008/12/05/upcoming-ai-machine-learning-conferences/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2008/12/05/upcoming-ai-machine-learning-conferences/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 19:49:13 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Informatics]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Statistics]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2008/12/05/upcoming-ai-machine-learning-conferences/</guid>
		<description><![CDATA[A (partial) list I found today.  Doesn&#8217;t include NIPS, so I&#8217;m not sure how exhaustive it is, but it has a bunch I haven&#8217;t seen before.
http://www.kmining.com/info_conferences.html
]]></description>
			<content:encoded><![CDATA[<p>A (partial) list I found today.  Doesn&#8217;t include NIPS, so I&#8217;m not sure how exhaustive it is, but it has a bunch I haven&#8217;t seen before.</p>
<p><a href="http://www.kmining.com/info_conferences.html">http://www.kmining.com/info_conferences.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2008/12/05/upcoming-ai-machine-learning-conferences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Is Amazon CloudFront right for me?</title>
		<link>http://www.spicylogic.com/allenday/blog/2008/11/18/is-amazon-cloudfront-right-for-me/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2008/11/18/is-amazon-cloudfront-right-for-me/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 20:21:17 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2008/11/18/is-amazon-cloudfront-right-for-me/</guid>
		<description><![CDATA[Here&#8217;s what the pricing looks like.  Learn more about Amazon CloudFront at http://aws.amazon.com/cloudfront. 

United States Edge Locations
Data Transfer
$0.170 per GB &#8211; first 10 TB / month data transfer out
$0.120 per GB &#8211; next 40 TB / month data transfer out
$0.100 per GB &#8211; next 100 TB / month data transfer out
$0.090 per GB &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s what the pricing looks like.  Learn more about Amazon CloudFront at <a href="http://aws.amazon.com/cloudfront">http://aws.amazon.com/cloudfront</a>. </p>
<blockquote>
<h3>United States Edge Locations</h3>
<p><b>Data Transfer</b></p>
<p>$0.170 per GB &#8211; first 10 TB / month data transfer out<br />
$0.120 per GB &#8211; next 40 TB / month data transfer out<br />
$0.100 per GB &#8211; next 100 TB / month data transfer out<br />
$0.090 per GB &#8211; data transfer out / month over 150 TB</p>
<p><b>Requests</b><br />
$0.010 per 10,000 GET requests
</p></blockquote>
<p>I evaluated AWS for hosting a while back and concluded that the bandwidth and storage costs were just too expensive if you have even a modest amount of storage traffic needs.  Here&#8217;s the breakdown:</p>
<p>A dedicated 100Mbit line can xfer 30TB/month.  Costs $1000/mo, or $10/Mbit/mo.  Source: <a href="http://calpop.com">CalPOP</a>.  (I host here).</p>
<p>From AWS @ $0.120/GB that&#8217;s $3600/mo.  If you&#8217;re pushing sizable volumes of bits, it seems like it will only make sense to do this under 2 scenarios:</p>
<ol>
<li>you can benefit from having a >100Mbit/s cap b/c you have *very* spiky traffic.  you xfer well over 400Mbit/s for a few hours/day (and 0Mbit/s the rest), and</li>
<li>you need lower latency than a 1-2 datacenter network can give you</li>
</ol>
<p>I suspect most for most of their target clients it&#8217;s [2], or clients that are really in it for the whole S3/EC2/SQS/EBS bundle.  Being able to rent cores at $0.10/hour can be really attractive for some types of services.</p>
<p>So no, it&#8217;s not right for me.  YMMV.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2008/11/18/is-amazon-cloudfront-right-for-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallel DNS reverse lookups</title>
		<link>http://www.spicylogic.com/allenday/blog/2008/11/10/parallel-dns-reverse-lookups/</link>
		<comments>http://www.spicylogic.com/allenday/blog/2008/11/10/parallel-dns-reverse-lookups/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 20:43:53 +0000</pubDate>
		<dc:creator>allenday</dc:creator>
				<category><![CDATA[Distributed Systems]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.spicylogic.com/allenday/blog/2008/11/10/parallel-dns-reverse-lookups/</guid>
		<description><![CDATA[Need to do lots of reverse DNS lookups for some reason?  Maybe b/c you&#8217;re trying to get a seed list for a web crawl or hack attempt on a bunch of ISPs.  Who cares.  Here&#8217;s a quick way to generate names from a big list of IPs like:

1.1.1.1
1.1.1.2
[...]
254.254.254.253
254.254.254.254

We can use hadoop streaming [...]]]></description>
			<content:encoded><![CDATA[<p>Need to do lots of reverse DNS lookups for some reason?  Maybe b/c you&#8217;re trying to get a seed list for a web crawl or hack attempt on a bunch of ISPs.  Who cares.  Here&#8217;s a quick way to generate names from a big list of IPs like:</p>
<pre>
1.1.1.1
1.1.1.2
[...]
254.254.254.253
254.254.254.254
</pre>
<p>We can use hadoop streaming to chunk the list so we can do the DNS lookups in parallel.  Easy and requires little to know thought:</p>

<div class="wp_syntax"><div class="code"><pre class="bash">.<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>hadoop jar contrib<span style="color: #000000; font-weight: bold;">/</span>streaming<span style="color: #000000; font-weight: bold;">/*</span>-streaming.jar -input <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>aday<span style="color: #000000; font-weight: bold;">/</span>classC.dat -output <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>aday<span style="color: #000000; font-weight: bold;">/</span>classC_dns.dat -mapper <span style="color: #ff0000;">'perl -ne '</span>\<span style="color: #ff0000;">''</span>print `host <span style="color: #007800;">$_</span>`<span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\'</span>'</span><span style="color: #ff0000;">' -numReduceTasks 0</span></pre></div></div>

<p>We wrap the <code>host</code> call in backticks so we can trap non-zero exit codes and get an error message on stdout courtesy of perl.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.spicylogic.com/allenday/blog/2008/11/10/parallel-dns-reverse-lookups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
