<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Paul Kuliniewicz &#187; Coding</title>
	<atom:link href="http://www.kuliniewicz.org/blog/archives/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kuliniewicz.org/blog</link>
	<description>After all, it could only cost you your life, and you got that for free.</description>
	<lastBuildDate>Wed, 18 Jan 2012 04:01:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/3.0/us/</creativeCommons:license>		<item>
		<title>Neutronium update &#8211; Dec 12, 2011</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/12/12/neutronium-update-dec-12-2011/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/12/12/neutronium-update-dec-12-2011/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 01:13:52 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Neutronium]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2379</guid>
		<description><![CDATA[I&#8217;ve continued working on Neutronium daily, but for the past week or so I&#8217;ve been focusing on refactoring some of the code I wrote earlier to facilitate actual new features. The biggest change has been putting most of the room-related logic in the STM monad, instead of having parts of it in STM and other [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve continued working on Neutronium daily, but for the past week or so I&#8217;ve been focusing on refactoring some of the code I wrote earlier to facilitate actual new features.  The biggest change has been putting most of the room-related logic in the <a href="https://en.wikipedia.org/wiki/Software_transactional_memory">STM</a> monad, instead of having parts of it in STM and other parts using IO-based synchronization, particularly MVars.  By putting all if it in STM, I avoid having the room directory MVar acting like a global mutual exclusion lock, and let room-related operations behave atomically, which could save some headaches down the time.  I&#8217;ve also cleaned up various other bits of the code to simplify things and make things more easily testable, but nothing that warrants much discussion here.</p>
<p>Now I&#8217;m working on fixing how joining and leaving rooms work.  Before, a member of a room was identified by the session identifier of the user&#8217;s session, but that&#8217;s very problematic.  First, it means that opening the same room up in multiple tabs would result in confusing behavior, since the server wouldn&#8217;t have any way of distinguishing each tab.  Second, it makes distinguishing one member from another difficult on the client side, since session IDs are sensitive information and can&#8217;t be shared, lest <a href="https://en.wikipedia.org/wiki/Session_hijacking">session hijacking</a> result.</p>
<p>My solution is to assign yet another unique identifier to represent each member joining a room.  Since member IDs aren&#8217;t sensitive, they can be freely communicated to everyone else in the room.  Since it&#8217;s decoupled from the session cookie, each tab can be given its own member ID, should someone open the same room up multiple times for some reason.  On the server side, each member ID is still bound to a particular session ID, preventing one member from trying to impersonate someone else; if the member ID sent in the request doesn&#8217;t match the session ID the request is made under, the request is ignored.</p>
<p>At least, that&#8217;s how it will work when I&#8217;m finished making those changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/12/12/neutronium-update-dec-12-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reading is dangerous (if you&#8217;re writing Haskell)</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/12/07/reading-is-dangerous-if-youre-writing-haskell/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/12/07/reading-is-dangerous-if-youre-writing-haskell/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 04:05:53 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2370</guid>
		<description><![CDATA[In Haskell, the read function is the usual, simple way to parse a String into a value of some other type: ghci&#62; :t read read :: Read a =&#62; String -> a read can parse anything that implements the aptly-named Read class. All the standard numeric types implement Read: ghci&#62; read &#34;42&#34; :: Int 42 [...]]]></description>
			<content:encoded><![CDATA[<p>In Haskell, the <code>read</code> function is the usual, simple way to parse a <code>String</code> into a value of some other type:</p>
<blockquote><pre>ghci&gt; :t read
read :: Read a =&gt; String -> a</pre>
</blockquote>
<p><code>read</code> can parse anything that implements the aptly-named <code>Read</code> class.  All the standard numeric types implement <code>Read</code>:</p>
<blockquote><pre>ghci&gt; read &#34;42&#34; :: Int
42</pre>
</blockquote>
<p>Actually, it turns out the <code>Read</code> instance for integral types like <code>Int</code> is a bit too clever for its own good.  Did you know (in GHC, at least) it can handle floating-point-style scientific notation, as long as the <strike><a href="https://en.wikipedia.org/wiki/Significand#Use_of_.22mantissa.22">mantissa</a></strike> <a href="https://en.wikipedia.org/wiki/Significand">significand</a> is an integer and the exponent is nonnegative?</p>
<blockquote><pre>ghci&gt; read &#34;42e2&#34; :: Int
4200</pre>
</blockquote>
<p>This is nifty, but if the exponent is large, you can easily eat up all of GHC&#8217;s memory and crash the program:</p>
<blockquote><pre>ghci&gt; read &#34;1e1000000000&#34; :: Int
&lt;interactive&gt;: out of memory (requested 45088768 bytes)
$</pre>
</blockquote>
<p>This is bad if the argument to <code>read</code> comes from an untrusted source.  This was the subject of a recent <a href="https://groups.google.com/group/happs/browse_thread/thread/9a88ee9a46f8cbbe">security fix</a> to <a href="http://hackage.haskell.org/package/happstack-server">happstack-server</a>, where the entire server application could be brought down by sending it a request that used something like 1e1000000000 as a request parameter that would be parsed as an integral type.  Of course, the vulnerability isn&#8217;t specific to happstack-server, but anything that tries to <code>read</code> an integer from untrusted input.</p>
<p>I don&#8217;t <em>think</em> Neutronium is currently vulnerable to this (other than being built against a vulnerable version of happstack-server at the moment), but that&#8217;s mostly because there isn&#8217;t yet anything that&#8217;s using <code>read</code> in this manner.  One of the next changes I was planning to make was in how room membership is tracked, and part of that would be assigning each member of the room an integral identifier that is sent as a parameter to each room-related Ajax request.  (This will support identifying who is who in the room, and solve the problem of having the same room open in multiple tabs without getting things all confused.)  So, even if Neutronium isn&#8217;t vulnerable to this <a href="https://en.wikipedia.org/wiki/Denial-of-service_attack">denial of service attack</a> yet, it would be soon, and without having seen that posting, I don&#8217;t know if I would have even thought to worry about a seemingly simple built-in function like <code>read</code> for <code>Int</code> causing problems like that.</p>
<p>I can&#8217;t help but wonder if there are static source code analysis tools out there for Haskell that could find security-relevant flaws like this, like there are for more mainstream languages like C, C++, or Java.  My gut tells me it&#8217;d be easier to write an analyzer for Haskell than for a language like C, but I don&#8217;t know if anyone has ever actually sat down to do it yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/12/07/reading-is-dangerous-if-youre-writing-haskell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Neutronium Demo Video</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/12/02/neutronium-demo-video/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/12/02/neutronium-demo-video/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 04:41:45 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Neutronium]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2365</guid>
		<description><![CDATA[With Renee&#8217;s help, I recorded a six-minute-or-so demo of Neutronium, the game I&#8217;ve been working on since the beginning of November. You&#8217;ll probably want to play it at 720p (HD) and full-screen in order to be able to read the text. Neutronium is a web-based game inspired by a game inspired by the light-cycle game [...]]]></description>
			<content:encoded><![CDATA[<p>With Renee&#8217;s help, I recorded <a href="http://www.youtube.com/watch?v=PDMDs69RueI&#038;hd=1">a six-minute-or-so demo of Neutronium</a>, the game I&#8217;ve been working on since the beginning of November.  You&#8217;ll probably want to play it at 720p (HD) and full-screen in order to be able to read the text.</p>
<div style="text-align: center"><iframe width="640" height="480" src="https://www.youtube-nocookie.com/embed/PDMDs69RueI?rel=0&amp;hd=1" frameborder="0" allowfullscreen></iframe></div>
<p>Neutronium is a web-based game inspired by a game inspired by the light-cycle game from the movie Tron.  Currently, only the fundamental gameplay and a rudimentary chat function are implemented.  Each player controls a constantly-growing line.  They can&#8217;t speed up; they can&#8217;t slow down.  All they can do (currently) is change direction.  Once a player&#8217;s line collides with something, it stops and the player loses.  The last player left alive wins.</p>
<p>(Note that the game doesn&#8217;t actually detect &#8220;winning&#8221; yet, so a game lasts until everyone has run into something.)</p>
<p>The video above was recorded from my machine.  I am the blue line, and Renee is the red line.  The chat window doesn&#8217;t yet have a way to identify who says what, but in this case you can tell my messages apart from Renee&#8217;s because you can watch me type them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/12/02/neutronium-demo-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Working on a video</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/12/01/working-on-a-video/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/12/01/working-on-a-video/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 03:55:43 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2363</guid>
		<description><![CDATA[By popular request, I&#8217;m working out a way to record a quick video of my game in action. Before I do that, though, I want add an option to select the size of the game area. Right now it&#8217;s a hardcoded size, and it&#8217;s large enough to be awkward for an embeddable video. Something smaller [...]]]></description>
			<content:encoded><![CDATA[<p>By popular request, I&#8217;m working out a way to record a quick video of my game in action.  Before I do that, though, I want add an option to select the size of the game area.  Right now it&#8217;s a hardcoded size, and it&#8217;s large enough to be awkward for an embeddable video.  Something smaller would probably look better.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/12/01/working-on-a-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LoCo Day 30</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/30/loco-day-30/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/30/loco-day-30/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 03:44:01 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2361</guid>
		<description><![CDATA[Today I added support for command-line options when starting the web server. Specifically, it&#8217;s now possible to specify which port the server will listen on, and the hostname that will be used when showing type-safe URLs. Previously, both of these were hard-coded in such a way that made it difficult to use the server on [...]]]></description>
			<content:encoded><![CDATA[<p>Today I added support for command-line options when starting the web server.  Specifically, it&#8217;s now possible to specify which port the server will listen on, and the hostname that will be used when showing type-safe URLs.  Previously, both of these were hard-coded in such a way that made it difficult to use the server on anything but localhost.  I also increased the server-side timeout, so that I can go increase the long-poll duration.</p>
<p>Now that November&#8217;s over, I haven&#8217;t decided whether I&#8217;ll keep posting daily updates about progress on the game.  I would like to keep working on it and get it to the point where I can actually put it on the Internet &#8212; though I did succeed in my goal of having a playable game by the end of the month, there&#8217;s a lot of polishing that needs to be done, to say nothing of the important-but-nonessential functionality I skipped over to focus on the core gameplay.  I have no idea how long it&#8217;ll take me to get all that done, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/30/loco-day-30/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LoCo Day 29</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/29/loco-day-29/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/29/loco-day-29/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 03:50:30 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2359</guid>
		<description><![CDATA[Two small but welcome changes today: First, I reduced a lot of the lag during game play by excising a bit of debugging code on the server. The server had been printing out to the console the session context for each request before processing it further. Since I had gotten sessions working quite some time [...]]]></description>
			<content:encoded><![CDATA[<p>Two small but welcome changes today:</p>
<p>First, I reduced a lot of the lag during game play by excising a bit of debugging code on the server.  The server had been printing out to the console the session context for each request before processing it further.  Since I had gotten sessions working quite some time ago, all this did in practice was add a slight delay in processing each request, which wasn&#8217;t noticeable until you start trying to play a real-time game where each move sends a new request to the server.  There&#8217;s still a bit of noticeable lag during the game, but it feels much smaller now.</p>
<p>Second, colors are now used to distinguish you from other players: you are blue, and everyone else is red.  This way, you can tell right from the beginning who you are in the game.  This is currently implemented by having the server reply to the &#8220;I&#8217;m ready to play&#8221; request by sending the client the ID used to identify that player during the game.  There&#8217;s still no indication of who is who in the chat window, or is information about who dies when presented to the player (other than saying &#8220;someone died&#8221;), but the information is there for whenever I get around to implementing it.</p>
<p>Also!  I discovered that part of the Conf structure passed into Happstack to start the web server is indeed a timeout for how long to let a request sit idle before killing it.  The timeout defaults to 30 seconds, which explains why my initial attempt to use a 60-second interval for long polling kept resulting in server-generated errors.  One of the next things on my to-do list is to make the host and port the web server listens on configurable instead of hard-coded, so while I&#8217;m at it I might as well lengthen the timeout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/29/loco-day-29/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LoCo Day 28</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-day-28/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-day-28/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 03:49:11 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2357</guid>
		<description><![CDATA[Today I tried to solve the problem of the &#8220;ready to play&#8221; button swallowing keyboard input when the game starts, even though the button was disabled. Apparently jQuery doesn&#8217;t let you put the input focus on the document itself, which is where the keyboard input handler is attached. I ultimately settled on hiding the button [...]]]></description>
			<content:encoded><![CDATA[<p>Today I tried to solve the problem of the &#8220;ready to play&#8221; button swallowing keyboard input when the game starts, even though the button was disabled.  Apparently jQuery doesn&#8217;t let you put the input focus on the document itself, which is where the keyboard input handler is attached.  I ultimately settled on hiding the button entirely instead of disabling it after it&#8217;s been pressed, which has the result I wanted: putting the input focus on nothing in particular, so that the document sees the key presses.</p>
<p>This probably won&#8217;t work well if you start using the chat window again before the game starts, since the focus would still be in the text entry box, and arrow keys there will move the text cursor instead of moving your player avatar in the game, leading to much unhappiness as you get killed off before realizing what&#8217;s going on.  So, this is more of a quick hack instead of an actual fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-day-28/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>LoCo Discontinuity</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-discontinuity/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-discontinuity/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 23:18:31 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2355</guid>
		<description><![CDATA[Apparently my posts for Friday and Saturday never made it out of draft form, and so didn&#8217;t appear on the blog until now. Just in case you were wondering what I was up to after Thanksgiving.]]></description>
			<content:encoded><![CDATA[<p>Apparently my posts for <a href="http://www.kuliniewicz.org/blog/archives/2011/11/25/loco-day-25/">Friday</a> and <a href="http://www.kuliniewicz.org/blog/archives/2011/11/26/loco-day-26/">Saturday</a> never made it out of draft form, and so didn&#8217;t appear on the blog until now.  Just in case you were wondering what I was up to after Thanksgiving.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/28/loco-discontinuity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LoCo Day 27</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/27/loco-day-27/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/27/loco-day-27/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 04:18:09 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2350</guid>
		<description><![CDATA[Success? The basic gameplay in the browser is working now, so for the first time ever it&#8217;s actually possible to play the game. My loving girlfriend Renee helped me test that it does indeed work with multiple players, and she even beat me in the first real match we played against each other. For posterity&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Success?  The basic gameplay in the browser is working now, so for the first time ever it&#8217;s actually possible to play the game.  My loving girlfriend Renee helped me test that it does indeed work with multiple players, and she even beat me in the first real match we played against each other.  For posterity&#8217;s sake, I will note that the name of the room she created for that first fateful match was named &#8220;Stupid time for uncool animals&#8221;.  (Although I did win against her in some of the subsequent matches, she is quick to point out that there is some lag between changing your player&#8217;s direction and when it takes effect on screen.  I&#8217;m not sure what the precise cause of that is yet, since lag over a LAN should be minimal.)</p>
<p>Although the game is playable in the most basic sense, there is a huge amount of work to be done to make this something that could be exposed to the public.  Heck, right now the game doesn&#8217;t even provide a way to distinguish your player from the others on screen, so the beginning of each match usually involves each player frantically trying to figure out which one they control before they run into something and die.  That needs to be fixed, obviously.  There&#8217;s still no concept of user accounts, or even user identities, so all status messages refer to everyone as &#8220;someone&#8221;.</p>
<p>Also, Renee wants more explosions when collisions occur.  The baseline number of explosions is zero, currently.</p>
<p>Sometime soon I&#8217;ll try to post a screenshot or two of what this game actually looks like, now that it&#8217;s in a state where stuff actually shows up on screen instead of living hidden in the server&#8217;s memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/27/loco-day-27/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>LoCo Day 26</title>
		<link>http://www.kuliniewicz.org/blog/archives/2011/11/26/loco-day-26/</link>
		<comments>http://www.kuliniewicz.org/blog/archives/2011/11/26/loco-day-26/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 04:00:46 +0000</pubDate>
		<dc:creator>Paul Kuliniewicz</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[loco]]></category>
		<category><![CDATA[neutronium]]></category>

		<guid isPermaLink="false">http://www.kuliniewicz.org/blog/?p=2348</guid>
		<description><![CDATA[Continued work on client-side support for the game. I realize the JSON format I had defined for sending game state to the browser wasn&#8217;t very useful for what the client-side JavaScript needs to do to display the state of the game on the page. Instead of doing additional processing on the browser, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>Continued work on client-side support for the game.  I realize the JSON format I had defined for sending game state to the browser wasn&#8217;t very useful for what the client-side JavaScript needs to do to display the state of the game on the page.  Instead of doing additional processing on the browser, I decided to do the conversion on the server side, instead of generating JSON that just wraps how game data is modeled on the server.  Unfortunately, it&#8217;s taking me longer than I anticipated to get my test cases working again following the changes, which suggests there&#8217;s some corner cases my existing code isn&#8217;t handling properly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kuliniewicz.org/blog/archives/2011/11/26/loco-day-26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

