<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Brian Nickel's Online Journal</title>
	<atom:link href="http://kerrick.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kerrick.wordpress.com</link>
	<description>If you don't C# you'll B♭</description>
	<lastBuildDate>Fri, 07 Oct 2011 20:46:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kerrick.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Brian Nickel's Online Journal</title>
		<link>http://kerrick.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kerrick.wordpress.com/osd.xml" title="Brian Nickel&#039;s Online Journal" />
	<atom:link rel='hub' href='http://kerrick.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Reversi Revisited (HTML5 canvas on Chome, FireFox, IE9, iOS Safari)</title>
		<link>http://kerrick.wordpress.com/2011/06/01/reversi-revisited/</link>
		<comments>http://kerrick.wordpress.com/2011/06/01/reversi-revisited/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 01:00:37 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[canvas tag]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[cross-browser]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ie9]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/?p=70</guid>
		<description><![CDATA[Back in September I posted a HTML5 Reversi game taking advantage of the element.  At the time, I only targeted Chrome so I thought I would follow back up and add Firefox 4 and Internet Explorer 9 support.  In just a couple of hours work, I have a fully functioning Firefox version of the game and a mostly complete version [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=70&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Back in September I posted a HTML5 Reversi game taking advantage of the element.  At the time, I only targeted Chrome so I thought I would follow back up and add Firefox 4 and Internet Explorer 9 support.  In just a couple of hours work, I have a fully functioning Firefox version of the game and a mostly complete version for IE9.  <a href="http://softwaresupportedknitting.com/html5-reversi/" target="_blank">Click here to play the game</a> or <a href="http://softwaresupportedknitting.com/html5-reversi/reversi.png" target="_blank">here to view a screenshot of the three browsers in action</a>.  Below is a description of the problems I encountered and how they were resolved.</p>
<h3><strong>Firefox Support</strong></h3>
<p style="padding-left:30px;"><strong>Problem:</strong> The Firefox mouse event object does not support the clientX or clientY properties.  ClientX and clientY are fantastic because they give you the position relative to the element.<br />
<strong>Solution:</strong> Most sites recommend using (event.pageX &#8211; elem.offsetLeft) but this gives inaccurate values when the HTML element has auto-margins.  The solution to this problem was to relatively position the canvas element.  Relative positioning doesn&#8217;t affect the rendering of the element at all, preserving its position in the document and its flow, but it does reset the coordinate system for event.layerX and event.layerY.  Simply adding this simple CSS allows the code to work for both Firefox and Chrome.</p>
<p style="padding-left:30px;"><strong>Problem:</strong> Firefox failed to render the game pieces.  The gameboard itself was rendered correctly.<br />
<strong>Solution:</strong> After a bit of debugging, I found that FireFox was rendering correctly until it received a command equivalent to ctx.scale(1,0) when the pieces flip.  This command, while not raising a JavaScript error, effectively crashed the canvas, causing it to not accept any future commands.  Simply wrapping that block of code with an -if- statement got things rendering. The issue was filed with a testcase as <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=661452">bug 661452</a>.</p>
<p style="padding-left:30px;"><strong>Problem: </strong> Rendered text wasn&#8217;t updating.<br />
<strong>Solution:</strong> FireFox doesn&#8217;t support innerText, switched to innerHTML as no markup was included.</p>
<p style="padding-left:30px;"><strong>Problem:</strong> Some gradient backgrounds weren&#8217;t rendered.<br />
<strong>Solution:</strong> Added Mozilla gradient CSS.</p>
<h3><strong>IE9 Support</strong></h3>
<p style="padding-left:30px;"><strong>Problem:</strong> Values for event.layerX and event.layerY were way off.<br />
<strong>Solution:</strong> Since Chrome and IE support event.clientX and event.clientY, I ended up using the following code for all three browsers:</p>
<pre style="padding-left:30px;"> var x = event.offsetX == undefined ? event.layerX : event.offsetX;
 var y = event.offsetY == undefined ? event.layerY : event.offsetY;</pre>
<p style="padding-left:30px;"><strong>Problem:</strong> Internet Explorer does not support gradient backgrounds.<br />
<strong>Solution:</strong> While Internet Explorer doesn&#8217;t support gradients, it does support SVG backgrounds.  Creating a SVG file with a gradient and a width and height set to 100% has it fill the box.  Best of all, this solution works with Chrome, IE9 and FF4, meaning we don&#8217;t need to use browser specific CSS.</p>
<p style="padding-left:30px;"><strong>Unsolved Problem:</strong> IE9 does not yet support text shadows.  While there are some hacks out there for basic shadows, the iOS style elements use inlaid shadows and there&#8217;s no obvious solution.  Fortunately this is a small cosmetic issue.</p>
<p style="padding-left:30px;"><strong>Unsolved Problem: </strong> IE9 does not yet support web workers.  I <em>could</em> move the AI logic into the main thread for IE, but this would make the browser unresponsive.  In the mean time, a JavaScript exception will raise (not user visible) when you select an AI level but clicking back 0n Human will let you resume single player mode.</p>
<h3><strong>iOS Safari Support</strong></h3>
<p>Interested in how it would do, I opened the original version in the my wife&#8217;s iPad.  The game worked flawlessly, even with the AI.  Of course, the iPad has the same browser engine as Chrome.  There are a couple things I noticed that could stand some improvement:</p>
<ul>
<li>Since your fingers don&#8217;t really simulate a mousemove event, there is no move previewing.  For this kind of device a two click approach would simulate nicely, with the first click simulating the mouse entering a square and the second confirming the move.</li>
<li>Clicking on the canvas highlights it briefly.  I haven&#8217;t really looked into why but it would be nice to eliminate that graphical problem.</li>
<li>Testing on a friend&#8217;s phone, I noticed that the AI didn&#8217;t work, which suggests that the iPhone 4 doesn&#8217;t support web workers.  It&#8217;s interesting to see two different iDevices released so close together have different feature support.  One correction would be to check for the Worker object before showing the AI selector.</li>
<li>Testing on the iPhone, I also saw that the game existed in a one inch square on account of the retina display.  The game would benefit from mobile device and resolution detection.</li>
</ul>
<h3><strong>Conclusion</strong></h3>
<p>If you didn&#8217;t notice, not a single change above was related to the canvas&#8217;s rendering.  There was just one related to the context crashing.  The canvas did phenomenally in all three browsers, behaving identically and rendering the exact same results.  Admittedly this isn&#8217;t the most complex example, but it does include mouse event driven animation that can respond pretty rapidly.  <strong>Given how well the canvas is supported across the different browsers, I would consider using it for more complex applications.</strong></p>
<p>As far as the other aspects of HTML5 go, I was a little sad to see text shadows and web workers not supported in IE9 but was delighted to see the SVG background in action.  Since SVG backgrounds have cross-browser support, I would recommend using them in place of browser specific background gradient CSS.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=70&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2011/06/01/reversi-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>HTML5 Experiment &#8211; Reversi</title>
		<link>http://kerrick.wordpress.com/2010/09/16/html5-reversi/</link>
		<comments>http://kerrick.wordpress.com/2010/09/16/html5-reversi/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 07:14:54 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[canvas tag]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[web worker]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/?p=58</guid>
		<description><![CDATA[Having read about HTML5 for so long, I decided to finally take the plunge and do a little experimenting.  The result, a canvas-based Reversi game. Features Canvas based Reversi board with animated moves. Worker based AI that can be interrupted to change the difficulty or disable. (Warning: Anything above easy was incredibly time and CPU [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=58&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Having read about HTML5 for so long, I decided to finally take the plunge and do a little experimenting.  The result, <a href="http://briannickel.brinkster.net/html5-reversi/index.html" target="_blank">a canvas-based Reversi game</a>.</p>
<p><strong>Features</strong></p>
<ul>
<li>Canvas based Reversi board with animated moves.</li>
<li>Worker based AI that can be interrupted to change the difficulty or disable. <strong>(Warning: Anything above easy was incredibly time and CPU intensive on my 4 year old computer.  It may be better with new computers.)</strong></li>
<li>Goofy iPhone style interface, since the next step would be to turn this into an iPhone app.</li>
<li><strong>Warning: Only tested with Chrome.  No clue how it will react to other HTML5 compatible browsers.</strong></li>
</ul>
<p><strong>Thoughts</strong></p>
<p>The canvas interface is pretty easy to work with and reminded me a lot of working with the Cairo graphics library.  It took less than a day to get the actual game up and running, a couple days to get the worker AI running, a few more days rewriting the JavaScript using proper class structures and inheritance, and a few days just messing around with the CSS.  The development tools available in Chrome were invaluable, making it a cinch to debug code, track down performance problems, and quickly identify what CSS was being used by other sites.</p>
<p><strong>Recognition</strong></p>
<ul>
<li><a href="http://www.codeproject.com/KB/game/reversi.aspx">http://www.codeproject.com/KB/game/reversi.aspx</a> &#8211; I lifted all of the AI code off of this site.  It&#8217;s a pretty cool algorithm which simulates all possible moves and uses a weighting system to determine the best one.</li>
<li><a href="http://leaverou.me/2010/02/iphone-keyboard-with-css3-no-images/">http://leaverou.me/2010/02/iphone-keyboard-with-css3-no-images/</a> &#8211; I lifted some CSS from this CSS3 iPhone keyboard to make my buttons.</li>
<li><a href="http://jeffbatterton.com/blog/5">http://jeffbatterton.com/blog/5</a> &#8211; I lifted some CSS from this CSS3 iPhone to make the top part of the screen.</li>
<li>My darling wife for putting up with my obsession this past couple weeks.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=58&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2010/09/16/html5-reversi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>Current State of TagLib#</title>
		<link>http://kerrick.wordpress.com/2010/03/05/current-state-of-taglib/</link>
		<comments>http://kerrick.wordpress.com/2010/03/05/current-state-of-taglib/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 23:54:29 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[TagLib#]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/?p=54</guid>
		<description><![CDATA[As many of you have observed,  TagLib-Sharp.com no longer exists and the TagLib# NovellForge site hasn&#8217;t been updated in over a year.  The fact of the matter is, I haven&#8217;t been involved with TagLib# in about two years and the blog and forum are lost to the ages. That said, TagLib# is still alive and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=54&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As many of you have observed,  TagLib-Sharp.com no longer exists and the TagLib# NovellForge site hasn&#8217;t been updated in over a year.  The fact of the matter is, I haven&#8217;t been involved with TagLib# in about two years and the blog and forum are lost to the ages.</p>
<p>That said, TagLib# is still alive and kicking under the umbrella of the Banshee Project.  It&#8217;s just not well publicised.  If you would like to use TagLib# in your next closed or open source project, below are some links that can help.</p>
<ul>
<li>Downloads (even Windows still!): <a href="http://download.banshee-project.org/taglib-sharp/">http://download.banshee-project.org/taglib-sharp/</a></li>
<li>Bug Reporting: <a href="https://bugzilla.gnome.org/browse.cgi?product=taglib-sharp">https://bugzilla.gnome.org/browse.cgi?product=taglib-sharp</a></li>
<li>Source Code Repository: <a href="http://anonsvn.mono-project.com/viewvc/trunk/taglib-sharp/">http://anonsvn.mono-project.com/viewvc/trunk/taglib-sharp/</a></li>
</ul>
<p>Many thanks to <a href="http://gburt.blogspot.com/">Gabriel Burt</a> for his continued maintenance of the library.</p>
<p>Best regards,<br />
Brian Nickel</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=54&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2010/03/05/current-state-of-taglib/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>Israel and Monologue</title>
		<link>http://kerrick.wordpress.com/2007/10/02/israel-and-monologue/</link>
		<comments>http://kerrick.wordpress.com/2007/10/02/israel-and-monologue/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 04:31:38 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/10/02/israel-and-monologue/</guid>
		<description><![CDATA[For a group that suffers a lot of unfounded and hateful criticism, there&#8217;s a lot anti-Israel propaganda linked to on Monologue. Like with Mono, I wish people would do their own research rather than relying on the words of pundits and bloggers.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=52&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For a group that suffers a lot of unfounded and hateful criticism, there&#8217;s a lot anti-Israel propaganda linked to on Monologue. Like with Mono, I wish people would do their own research rather than relying on the words of pundits and bloggers.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/52/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/52/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/52/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=52&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/10/02/israel-and-monologue/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>FastCGI ASP.NET Server Status Report 12</title>
		<link>http://kerrick.wordpress.com/2007/08/23/fastcgi-aspnet-server-status-report-12/</link>
		<comments>http://kerrick.wordpress.com/2007/08/23/fastcgi-aspnet-server-status-report-12/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 03:52:16 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/23/fastcgi-aspnet-server-status-report-12/</guid>
		<description><![CDATA[This is the final status report for the FastCGI ASP.NET Server. Due to a combination of a cold and schlepping around campus in 105F weather (40.6C where applicable), I&#8217;ve been a bit delirious. But not that my head is clearing, here&#8217;s the info you&#8217;ve been waiting for. THIS WEEK&#8217;S ACCOMPLISHMENTS The last week was a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=50&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is the final status report for the FastCGI ASP.NET Server. Due to a combination of a cold and schlepping around campus in 105F weather (40.6C where applicable), I&#8217;ve been a bit delirious. But not that my head is clearing, here&#8217;s the info you&#8217;ve been waiting for.</p>
<h2>THIS WEEK&#8217;S ACCOMPLISHMENTS</h2>
<p>The last week was a bit sparse on accomplishments. I had a lot of preparation to do to prep for the first week of school, and most problems have been resolved, but the following changes were made:</p>
<ul>
<li>Application checking was reworked to verify that Web.Config also exists. As it stands, the application manager checks for both Web.Config and Bin when adding an application. Web.Config doesn&#8217;t necessarily mean something is an application, but the lack of it means that it isn&#8217;t. (I&#8217;ve been told this is a IIS rule.)</li>
<li>Requests that are directories but don&#8217;t end in a slash are redirected to the one with a slash.</li>
<li>Case insensitive checking is used for &#8220;Web.Config&#8221;, &#8220;Bin&#8221;, and index pages to improve compatibility.</li>
<li>Log levels can be set in the command line.</li>
<li>Log messages can be sent to the standard output.</li>
<li>ConfigurationManager.xml has been reorganized to group commands more logically.</li>
</ul>
<h2>WHERE IT STANDS NOW</h2>
<p>At this point, the FastCGI Mono Server works completely with Lighttpd and Abyss, and when used with Apache and mod_fcgid, behaves like the default config supplied with mod_mono.</p>
<p>Cherokee has some problems when multiple requests are sent at the same time, but this may be a problem on either end. (In most cases, the mistake has been on my end.)</p>
<h2>PLANS FOR THE FUTURE&#8230;</h2>
<p>src/Mono.WebServer: Much of my work on Mono.WebServer is to be refactored and worked into Mono.WebServer (XSP package). This may mean automatic mapping support in mod_mono as well in the future.</p>
<p>src/Mono.WebServer.FastCgi: Most of the Mono.WebServer.FastCgi stuff will be restructured to and made more generic (think Mono.WebServer.CgiRequestWorker and Mono.WebServer.CgiApplicationHost) which will be reusable for things like SCGI support. This means fastcgi-mono-server may appear in XSP as well.</p>
<p>src/Mono.FastCgi: Support still needs to be finished for the Authorizer and Filter roles, and some renaming/FxCop/Gendarme needs to be applied. In the near future, I recommend bundling it with your application if you&#8217;re using it, but in the distant future, I expect it to be API stable/GAC-able.</p>
<p>Unfortunately, I will be taking 19 credit hours this semester, to accelerate my transition from Chemical to Computer Systems Engineering. This means I&#8217;ll have much less time to contribute, but I will continue to work on this (and my other) project.</p>
<h2>SPECIAL THANKS</h2>
<p>Special thanks to <a href="http://code.google.com/soc/2007/">Google</a>, the <a href="http://code.google.com/soc/2007/mono/about.html">Mono SoC administrators</a>, <a href="http://grendello.blogspot.com/">Marek</a>, <a href="http://www.ohloh.net/accounts/4130">Daniel</a>, Dick, <a href="http://tirania.org/blog/index.html">Miguel</a>, and everyone who commented or contributed in some way to my project! I appreciate all the support and the opportunity not to totally waste my summer.</p>
<p>Sincerely,<br />
Brian Nickel</p>
<p>PS. Trac seems to have my IP address confused with a spammer, so I can&#8217;t report bugs on sites that don&#8217;t provide public registration. Does anyone know how I can fix this?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/50/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/50/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/50/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/50/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/50/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=50&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/23/fastcgi-aspnet-server-status-report-12/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>FastCGI ASP.NET Server Status Report 11</title>
		<link>http://kerrick.wordpress.com/2007/08/13/fastcgi-aspnet-server-status-report-11/</link>
		<comments>http://kerrick.wordpress.com/2007/08/13/fastcgi-aspnet-server-status-report-11/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 18:54:25 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/13/fastcgi-aspnet-server-status-report-11/</guid>
		<description><![CDATA[This status report is for the week of August 6 &#8211; August 10. This week has continued to see a lot of fine tuning bug fixes. THIS WEEK&#8217;S ACCOMPLISHMENTS The Changelog grew by 116 lines this week. Key features are as outlined. &#8220;Blocking&#8221; property was removed from Mono.FastCgi.Socket. It was only used to disable blocking [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=49&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This status report is for the week of August 6 &#8211; August 10. This week has continued to see a lot of fine tuning bug fixes.</p>
<h2>THIS WEEK&#8217;S ACCOMPLISHMENTS</h2>
<p>The Changelog grew by 116 lines this week. Key features are as outlined.</p>
<ul>
<li>&#8220;Blocking&#8221; property was removed from Mono.FastCgi.Socket. It was only used to disable blocking on a socket that already communicated with asynchronous calls and was causing a problem with Abyss and unmanaged sockets.</li>
<li>All headers are now sent in a single batch rather than one at a time. This should reduce the amount of network traffic and prevents Nginx from occasionally losing a request.</li>
<li>Added documentation for Abyss X1 and Nginx.</li>
<li>Fixed .in files not to hardcode mono location.</li>
<li>Provide a friendly response 500 error page if no application could be found for a request.</li>
<li>Added directory root detection with code borrowed from XspWorkerRequest.</li>
<li>Found bug in Mono.WebServer where MonoWorkerRequest.SendFile was double closing a handle.</li>
<li>Removed check for file existence when creating applications. This way proper applications can still be created when the user mistypes the path.</li>
<li>Added documentation index page with important information on using paths vs. extensions, what are ASP.NET applications, how applications are handled, and running fastcgi-mono-server on a different machine than the web server. Plus brief information on how a request is actually processed, from Firefox to ASP.Default_aspx:Render(). See <a href="http://mono-soc-2007.googlecode.com/svn/trunk/brian/FastCgi/doc/index.html">http://mono-soc-2007.googlecode.com/svn/trunk/brian/FastCgi/doc/index.html</a></li>
<li>Added svn:eol-style=native to .html and .cs files.</li>
<li>Added svn:mime-type to HTML and PNG files so they will show up in a web browser.</li>
<li>Fixed the status line. It was being sent in the HTTP: &#8220;HTTP/1.1 200 OK&#8221; format instead of the CGI &#8220;Status: 200 OK&#8221; format. This was causing some breakage where status 200 was always being sent from web servers and Apache wasn&#8217;t working at all.</li>
<li>Better output for &#8220;/help&#8221;</li>
<li>Added some docs for using paths instead of directory mapping.</li>
<li>Cleaned up UnmanagedSocket with proper SocketExceptions and a wait handle for EndAccept.</li>
</ul>
<p align="center"><em>and</em></p>
<p>After discussion with Daniel Nauck changed the recommended method of handling ASP.NET to sending all requests to fastcgi-mono-server. The benefits are outlined at <a href="http://mono-soc-2007.googlecode.com/svn/trunk/brian/FastCgi/doc/index.html#info1">http://mono-soc-2007.googlecode.com/svn/trunk/brian/FastCgi/doc/index.html#info1</a> but in short they are improved security and enhanced features with application specific configuration.</p>
<h2>PLANS FOR THE COMING WEEK</h2>
<ol>
<li>Continue documenting.</li>
<li>Alpha release.</li>
<li>Clean up API.</li>
<li>Adding open source tools: mailing list, bugzilla, wiki page???</li>
</ol>
<h2>CHALLENGES I&#8217;M FACING</h2>
<p>Mostly just a million different web server nuances.</p>
<h2>RESOURCES USED THIS WEEK</h2>
<ul>
<li>MSDN: WaitHandle, System.Web.UI.Page, IAsyncResult</li>
<li>Netcraft: Server statistics.</li>
<li>Apache API reference: Trying to understand cmd_parms.</li>
<li>FastCGI.com: Performance statistics.</li>
<li>CGI specification: Review.</li>
<li><a href="http://svnbook.red-bean.com">http://svnbook.red-bean.com</a>: Information on properties.</li>
</ul>
<p>Sincerely,<br />
Brian Nickel</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/49/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/49/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=49&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/13/fastcgi-aspnet-server-status-report-11/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>Apache &amp; fastcgi-mono-server, for the most part</title>
		<link>http://kerrick.wordpress.com/2007/08/09/apache-fastcgi-mono-server-for-the-most-part/</link>
		<comments>http://kerrick.wordpress.com/2007/08/09/apache-fastcgi-mono-server-for-the-most-part/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 05:08:23 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/09/apache-fastcgi-mono-server-for-the-most-part/</guid>
		<description><![CDATA[When trying to figure out why all my requests were turning into &#8220;200 OK&#8221; from the Lighttpd and Cherokee, I discovered I&#8217;ve been sending them incorrectly, as HTTP style lines rather than CGI header style lines. Oops. With this change implemented, mod_fcgid is no longer failing on me and I&#8217;ve got what is the start [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=48&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When trying to figure out why all my requests were turning into &#8220;200 OK&#8221; from the Lighttpd and Cherokee, I discovered I&#8217;ve been sending them incorrectly, as HTTP style lines rather than CGI header style lines. Oops. With this change implemented, mod_fcgid is no longer failing on me and I&#8217;ve got what is the start of a configuration for Apache. <strong>PLEASE NOTE THIS IS NOT THE FINAL OR RECOMMENDED CONFIGURATION</strong>, <em>but it is worth checking out</em>.</p>
<pre>&lt;IfModule fcgid_module&gt;
 &lt;FilesMatch ".(aspx|asmx|ashx|asax|ascx|soap|rem|axd|cs|config|Config|dll)$&gt;
    SetHandler fcgid-script
    FCGIWrapper /usr/bin/fastcgi-mono-server .aspx
    FCGIWrapper /usr/bin/fastcgi-mono-server .asmx
    FCGIWrapper /usr/bin/fastcgi-mono-server .ashx
    FCGIWrapper /usr/bin/fastcgi-mono-server .asax
    FCGIWrapper /usr/bin/fastcgi-mono-server .ascx
    FCGIWrapper /usr/bin/fastcgi-mono-server .soap
    FCGIWrapper /usr/bin/fastcgi-mono-server .rem
    FCGIWrapper /usr/bin/fastcgi-mono-server .axd
    FCGIWrapper /usr/bin/fastcgi-mono-server .cs
    FCGIWrapper /usr/bin/fastcgi-mono-server .config
    FCGIWrapper /usr/bin/fastcgi-mono-server .Config
    FCGIWrapper /usr/bin/fastcgi-mono-server .dll
    Options +ExecCGI
 &lt;/FilesMatch&gt;

 DirectoryIndex index.aspx
 DirectoryIndex Default.aspx
 DirectoryIndex default.aspx
&lt;/IfModule&gt;</pre>
<p>There are two important shortcomings:</p>
<ol>
<li>Just wrapping extensions is not a recommended way of working with ASP.NET, as it lacks certain security and management features. It is better to just send the whole directory to the Mono server. (More on this, Friday.) As far as I understand it, this will require a change in mod_fcgid.</li>
<li>WebResource.axd shows up as a 404 error rather than the expected resource, this can be overcome hackishly by creating an empty WebResource.axd where the other one is expected. <strong>Does anyone who knows Apache know how to overcome this?</strong></li>
</ol>
<p>Sincerely,<br />
Brian Nickel</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/48/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/48/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/48/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/48/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/48/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=48&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/09/apache-fastcgi-mono-server-for-the-most-part/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>Abyss and Nginx now documented and working</title>
		<link>http://kerrick.wordpress.com/2007/08/07/abyss-and-nginx-now-documented-and-working/</link>
		<comments>http://kerrick.wordpress.com/2007/08/07/abyss-and-nginx-now-documented-and-working/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 20:24:30 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/07/abyss-and-nginx-now-documented-and-working/</guid>
		<description><![CDATA[Abyss and Nginx have been both been successfully tested (but not without some minor bug fixes in fastcgi-mono-server). I&#8217;m not sure how big of news this is, as I never heard of these servers until I found them in a table on Wikipedia, but apparently Nginx is big in Russia.Docs are at the usual place, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=47&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Abyss and Nginx have been both been successfully tested (but not without some minor bug fixes in fastcgi-mono-server). I&#8217;m not sure how big of news this is, as I never heard of these servers until I found them in <a href="http://en.wikipedia.org/wiki/Comparison_of_web_servers#Features">a table on Wikipedia</a>, but apparently Nginx is big in Russia.Docs are at the <a href="http://www.public.asu.edu/~bnickel/fastcgi-mono-server/linux/">usual place</a>, and I&#8217;ve added an extra notice about the potential security risks of using ASP.NET by extensions alone. (Thanks to Daniel Nauck for pointing it out.)</p>
<p>Important changes that make this possible:</p>
<ul>
<li>Status 200 is sent again. Abyss was sending its own status (I presume 404) if the file didn&#8217;t exist and fastcgi-mono-server wasn&#8217;t sending in information.</li>
<li>Blocking is no longer set for sockets. It didn&#8217;t appear to provide any essential features, as the server uses asynchronous calls anyway, but it was causing the unmanaged socket to stop listening on Abyss.</li>
<li>Response headers are now stored in a string builder and sent only once the server has finished outputting them. The fast onslaught of tiny requests was causing occasional failure in Nginx.</li>
</ul>
<p>If you use either of these server, please test them out and let me know of any issues you might encounter.</p>
<p>Sincerely,<br />
Brian Nickel</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/47/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/47/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=47&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/07/abyss-and-nginx-now-documented-and-working/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
		<item>
		<title>FastCGI ASP.NET Server Status Report 10</title>
		<link>http://kerrick.wordpress.com/2007/08/04/fastcgi-aspnet-server-status-report-10/</link>
		<comments>http://kerrick.wordpress.com/2007/08/04/fastcgi-aspnet-server-status-report-10/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 22:32:24 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/04/fastcgi-aspnet-server-status-report-10/</guid>
		<description><![CDATA[This status report is for the week of July 30 &#8211; August 3. This week has seen a lot of work fine tuning and cleaning up the server so it will be more usable and useful. THIS WEEK&#8217;S ACCOMPLISHMENTS This week saw an explosion of development activity. Daily commits yielded a Changelog 234 lines (or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=46&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This status report is for the week of July 30 &#8211; August 3. This week has seen a lot of work fine tuning and cleaning up the server so it will be more usable and useful.</p>
<h2>THIS WEEK&#8217;S ACCOMPLISHMENTS</h2>
<p>This week saw an explosion of development activity. Daily commits yielded a Changelog 234 lines (or 64%) larger than the week before. Key features are as outlined.</p>
<ul>
<li>Support was added for serving on a new Unix socket, as opposed to a piped socket or TCP socket. This can be used in several web servers in place of TCP sockets.</li>
<li>Started work on documenting how to configure servers. Lighttpd and Cherokee are completely documented, Abyss is documented except for a bug appearing in ASP.NET 2.0, and the current problems with Apache2 are documented.</li>
<li>Support was added for setting all command line options via environment variables, due to limitations in some servers. (MONO_FCGI_SOCKET=tcp is the same as setting /socket=tcp)</li>
<li>Directories containing a &#8220;bin&#8221; directory are automatically treated as new applications. This is not a perfect way of checking for applications, as it can yield false positives, and not all applications use DLL&#8217;s, but it is pretty good for now.</li>
<li>Support was added for writing to a log file.</li>
<li>UnmanagedSocket now appropriately flags a closed connection.</li>
<li>Sending and receiving records was redone, partially because I didn&#8217;t fully understand how reading and writing sockets worked and the request would die if Receive didn&#8217;t yield the exact number of bytes requested.</li>
<li>When targetting .NET 2.0, Mono.FastCgi uses strictly generic collections. This reduces the size of the heap and should speed things up slightly.</li>
<li>Records are now sent at no more than half the maximum size to avoid problems with some web servers. This behavior is similar to that of Cherokee.</li>
<li>My patch to System.Net.Sockets.Socket was accepted. This patch is important because it removes the limitation of only supporting Unix and TCP sockets. (And may save some resources by not loading Mono.Unix if it isn&#8217;t needed.)</li>
<li>Tons of bug fixes.</li>
</ul>
<p align="center"><em><strong>and</strong></em></p>
<p>FastCGI Mono Server can handle full blown applications, like <a href="http://www.mojoportal.com/">mojoPortal</a>:</p>
<p><a href="http://www.flickr.com/photos/kerrick/1002036442/" title="Photo Sharing"><img src="http://farm2.static.flickr.com/1257/1002036442_463e55812d_o.png" alt="MojoPortal via FastCGI" height="383" width="836" /></a>This is not hosted on a virtual path, but automatically recognized because the application contains a &#8220;bin&#8221; directory.</p>
<h2>PLANS FOR THE COMING WEEK</h2>
<ol>
<li>I&#8217;m going to continue my work documenting servers. Each server presents different problems and test cases I may have overlooked and extends the reach of Mono.FastCgi.</li>
<li>Work with my mentor on what to do next.</li>
</ol>
<h2>CHALLENGES I&#8217;M FACING</h2>
<p>I&#8217;m not sure how I want to proceed with the socket issue. It turns out all the problems I was having stemmed from bad implementation on my part and problems in mod_fcgid. Now that they&#8217;re overcome, the unmanaged socket is working fine. Not adding a mono specific feature to System.Net.Sockets.Socket would allow me to keep the version dependency down, make things easier if building it against MS .NET in the future, and give me an abstraction for using Named Pipes on Windows.</p>
<p>Another challenge is how to proceed with Apache. Admittedly, there are two existing open source implementations, both with their flaws, but both lacking things like Bugzilla, and both with highly cryptic source code. It may be best to develop a new FastCGI module under the Mono Project umbrella, to protect the project&#8217;s interests. It could be based off code from mod_mono and design attributes from my FastCGI library.</p>
<h2>RESOURCES USED THIS WEEK</h2>
<ul>
<li>MojoPortal forums.</li>
<li>Abyss documentation.</li>
<li>Wrapper scripts for other applications.</li>
</ul>
<p>Sincerely,<br />
Brian Nickel</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/46/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/46/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=46&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/04/fastcgi-aspnet-server-status-report-10/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>

		<media:content url="http://farm2.static.flickr.com/1257/1002036442_463e55812d_o.png" medium="image">
			<media:title type="html">MojoPortal via FastCGI</media:title>
		</media:content>
	</item>
		<item>
		<title>Want to test fastcgi-mono-server? Here&#8217;s the scoop.</title>
		<link>http://kerrick.wordpress.com/2007/08/01/want-to-test-fastcgi-mono-server-heres-the-scoop/</link>
		<comments>http://kerrick.wordpress.com/2007/08/01/want-to-test-fastcgi-mono-server-heres-the-scoop/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 02:10:19 +0000</pubDate>
		<dc:creator>Brian</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Summer of Code 2007]]></category>

		<guid isPermaLink="false">http://kerrick.wordpress.com/2007/08/01/want-to-test-fastcgi-mono-server-heres-the-scoop/</guid>
		<description><![CDATA[Subtitle: What you need to know about Cherokee, Lighttpd, and Apache2. Last Friday, I made it possible to compile and install your own copy of &#8220;fastcgi-mono-server&#8221; using standard methods. Now I have some in depth information on how to configure your server and what to look out for. lighttpd Lighty works fantastic. With about 5 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=45&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><em>Subtitle: What you need to know about Cherokee, Lighttpd, and Apache2.</em></strong></p>
<p><a href="http://kerrick.wordpress.com/2007/07/27/fastcgi-aspnet-server-status-report-9/">Last Friday</a>, I made it possible to compile and install your own copy of &#8220;fastcgi-mono-server&#8221; using <a href="http://www.gnu.org/software/autoconf/">standard methods</a>.  Now I have some in depth information on how to configure your server and what to look out for.</p>
<h2>lighttpd</h2>
<p>Lighty works fantastic. With about 5 minutes of configuration, you can get ASP.NET and all its glory running. Simply follow the instructions located <a href="http://www.public.asu.edu/~bnickel/fastcgi-mono-server/linux/lighttpd.html">here</a> or in the &#8220;doc/linux/&#8221; directory of the source package.</p>
<h2>cherokee</h2>
<p>Cherokee, up to and including Cherokee 0.5.6, has a bug where it fails to send an empty Stdin record if no input data is present. I could write a hack to get around this problem, but I&#8217;m holding out for now. The Cherokee 0.6 series, on the other hand, works very well with fastcgi-mono-server. If you&#8217;re ready to move to the 0.6 series, follow the instructions located <a href="http://www.public.asu.edu/~bnickel/fastcgi-mono-server/linux/cherokee.html">here</a> or in the &#8220;doc/linux/&#8221; directory of the source package.</p>
<h2>apache2</h2>
<p>Apache&#8217;s FastCGI situation is problematic. There are currently 2 implementations of FastCGI that I&#8217;m aware of: <a href="http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html">mod_fastcgi</a> and <a href="http://fastcgi.coremail.cn/">mod_fcgid</a>, and neither one of them is working just right. Mod_fastcgi was designed by the authors of FastCGI to be a replacement for CGI (hence the name), and is strongly tied to the paradigm of each file being its own application. It does have some tricks which would let a single server be used, but it sends some <em>very</em> unusual and sometimes junk parameters back to the server. It would require some major hacks to transform its parameters back into values that the server could understand.</p>
<p>Mod_fcgid, on the other hand, has the advantage of being younger, hipper, and more in tune with the concept of script servers. It is almost perfect except for the fact it sends the entire contents of the response to the server rather than stripping off the status line and sending it as r-&gt;status_line. This causes Apache to reject the response and display an error message. fastcgi-mono-server doesn&#8217;t send a status line of the status is 200 (Ok), so it&#8217;ll only work for pages that don&#8217;t do anything fancy or crash.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/kerrick.wordpress.com/45/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/kerrick.wordpress.com/45/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kerrick.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kerrick.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kerrick.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kerrick.wordpress.com&amp;blog=822506&amp;post=45&amp;subd=kerrick&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kerrick.wordpress.com/2007/08/01/want-to-test-fastcgi-mono-server-heres-the-scoop/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/98aca67bf8a2e2470bc1beb84ce40beb?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Kerrick</media:title>
		</media:content>
	</item>
	</channel>
</rss>
