<?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/"
	>

<channel>
	<title>PHP++</title>
	<atom:link href="http://www.rhapsody.intheblackbox.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.rhapsody.intheblackbox.com/blog</link>
	<description>when you occasionally dream of tetris</description>
	<pubDate>Mon, 07 Dec 2009 16:52:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bubblemark Test for HTML5 Canvas</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=89</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=89#comments</comments>
		<pubDate>Mon, 07 Dec 2009 16:52:50 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=89</guid>
		<description><![CDATA[

This is a Bubblemark test clone which I&#8217;m developing to test canvas capabilities.
You can see a live example here (requires a canvas compatible browser - excanvas won&#8217;t support&#160;this).


JavaScript libraries used:
jQuery
Doodle.js
It also uses part of one of the Doodle.js example code for basic bounce&#160;physics.




// Initialize when everything on the page is loaded


$&#40;document&#41;.ready&#40;function&#40;&#41; &#123;


&#160;var canvas = document.getElementById&#40;&#34;mycanvas&#34;&#41;;


&#160;//check [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2009/12/bubble.png" rel="lightbox[89]"><img class="aligncenter size-medium wp-image-91" title="bubble" src="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2009/12/bubble-300x200.png" alt="bubble" width="487" height="324" /></a></p>
<p>
This is a <a href="http://bubblemark.com/">Bubblemark</a> test clone which I&#8217;m developing to test canvas capabilities.<br />
<a href="http://lostkingdom.net/feng/?p=bubblemark">You can see a live example here</a> (requires a canvas compatible browser - excanvas won&#8217;t support&nbsp;this).
</p>
<p>
JavaScript libraries used:<br />
<a href="http://jquery.com/">jQuery</a><br />
<a href="http://www.lamberta.org/blog/doodle/">Doodle.js</a><br />
It also uses part of one of the Doodle.js example code for basic bounce&nbsp;physics.
</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Initialize when everything on the page is loaded</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> canvas = document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;mycanvas&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">//check for support here:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>canvas.<span class="me1">getContext</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; init<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//javascript fallback</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">alert</span><span class="br0">&#40;</span> <span class="st0">&quot;Sorry, your browser does not support the canvas element.&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Start the application</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>oo<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; oo.<span class="me1">canvas</span><span class="br0">&#40;</span><span class="st0">&#39;#mycanvas&#39;</span><span class="br0">&#41;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//settings</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> numballs;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> radius = <span class="nu0">26</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> balls = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">function</span> resetBalls<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">//reset balls array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;balls.<span class="me1">length</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">//get new number of balls from user input</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;numballs = $<span class="br0">&#40;</span> <span class="st0">&#39;#numballs&#39;</span> <span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i <span class="sy0">&amp;</span>lt; numballs; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* - Create each new ball as an image shape keeping</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* the circle properties for collision detection.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* - Set coordinates and radius.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* - Randomize starting velocity</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;* - IMPORTANT: For image shapes always define visibility</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> ball = oo.<span class="me1">image</span><span class="br0">&#40;</span><span class="br0">&#123;</span>src:<span class="st0">&#39;./resources/ball.png&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x: i <span class="sy0">*</span> <span class="nu0">100</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y: i <span class="sy0">*</span> <span class="nu0">50</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; radius:radius,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vx: Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">10</span> - <span class="nu0">5</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vy: Math.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">10</span> - <span class="nu0">5</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mass:radius,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; coord:<span class="st0">&#39;local&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; visible:<span class="kw2">true</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//push each ball into the balls array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; balls.<span class="me1">push</span><span class="br0">&#40;</span>ball<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; resetBalls<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//setting the invisible box boundaries (in this case the canvas)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Bouncy.<span class="me1">boundries</span> = <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;left: <span class="nu0">0</span> - radius, <span class="co1">// HACK: boundaries correction for image shapes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;right: oo.<span class="me1">canvas</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">width</span> - radius,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;top: <span class="nu0">0</span> - radius,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;bottom: oo.<span class="me1">canvas</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">height</span> - radius,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Change the number of balls on button click event</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; $<span class="br0">&#40;</span> <span class="st0">&#39;#numBtn&#39;</span> <span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;resetBalls<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//Animate is an endless loop</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; oo.<span class="me1">animate</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// check for wall collision</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i = <span class="nu0">0</span>; i <span class="sy0">&amp;</span>lt; numballs; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> ball = balls<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ball.<span class="me1">modify</span><span class="br0">&#40;</span><span class="br0">&#123;</span>x: ball.<span class="me1">x</span> + ball.<span class="me1">vx</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; y: ball.<span class="me1">y</span> + ball.<span class="me1">vy</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Bouncy.<span class="me1">check_walls</span><span class="br0">&#40;</span>ball<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">//for each ball&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span>i = <span class="nu0">0</span>; i <span class="sy0">&amp;</span>lt; numballs; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> ball_a = balls<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//check for collisions with the current ball</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> j = i + <span class="nu0">1</span>; j <span class="sy0">&amp;</span>lt; numballs; j++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw2">var</span> ball_b = balls<span class="br0">&#91;</span>j<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;Bouncy.<span class="me1">check_collision</span><span class="br0">&#40;</span>ball_a, ball_b<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//redraw the balls</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; balls<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">draw</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">//set &quot;frames&quot; and make sure to clear canvas</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>, <span class="st0">&#39;40fps&#39;</span>, <span class="kw2">true</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>$doodle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=89</wfw:commentRss>
		</item>
		<item>
		<title>Juggling routines</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=66</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=66#comments</comments>
		<pubDate>Wed, 28 Jan 2009 14:07:36 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=66</guid>
		<description><![CDATA[ 
While I was searching for juggling videos on youtube, I stepped into this amazing 75-year-old show of W.C. Fields. It&#8217;s not a pure juggling routine, but most would agree that juggling and comedy are surely a great combination. Old tricks? - still pretty exciting and a source of inspiration. It&#8217;s a great exhibition of [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=-8964173954734376347&#038;hl=en&#038;fs=true" style="width:400px;height:326px" allowFullScreen="true" allowScriptAccess="always" type="application/x-shockwave-flash"> </embed></p>
<p class="first"><span class="drop-cap">W</span>hile I was searching for juggling videos on youtube, I stepped into this amazing 75-year-old show of W.C. Fields. It&#8217;s not a pure juggling routine, but most would agree that juggling and comedy are surely a great combination. Old tricks? - still pretty exciting and a source of inspiration. It&#8217;s a great exhibition of how one should perform on stage and always maintain the audience&#8217;s attention. Even though routines and audiences change, the general ideas behind successful performing still stay more or less the same. Quick, natural changes between tricks, small pauses, program variety.<br />
Enjoy <img src='http://www.rhapsody.intheblackbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: center;"><!-- Smart Youtube --><span class="youtube"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/5MZWq14uD-A&amp;rel=1&amp;color1=2b405b&amp;color2=6b8ab6&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showsearch=0"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/5MZWq14uD-A&amp;rel=1&amp;color1=2b405b&amp;color2=6b8ab6&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showsearch=0" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="355" ></embed><param name="wmode" value="transparent" /></object></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=66</wfw:commentRss>
		</item>
		<item>
		<title>PHP Flood Fill</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=43</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=43#comments</comments>
		<pubDate>Wed, 28 Jan 2009 02:28:19 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[OOP]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[open projects]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=43</guid>
		<description><![CDATA[Flood Filler is a small program in PHP demonstrating the Flood Fill algorithm in a simple&#160;way.
Here&#8217;s the&#160;code:



/* 


&#160;* @title: &#160;Flood Fill Class


&#160;* See below class for example input.


&#160;*/


class FloodFiller &#123;


&#160;


&#160; &#160; private $x, $y, $fill, $searchNext, $map; 


&#160;


&#160; &#160; public function Scan&#40; $map, $point &#41; &#123;


&#160; &#160; &#160; &#160; // We create the list of [...]]]></description>
			<content:encoded><![CDATA[<p class="first"><span class="drop-cap">F</span>lood Filler is a small program in PHP demonstrating the <a title="Flood Fill on Wikipedia" href="http://en.wikipedia.org/wiki/Flood_fill">Flood Fill algorithm</a> in a simple&nbsp;way.</p>
<p><div id="attachment_52" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-52" title="Filler2" src="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2009/01/fillerlittle-300x231.jpg" alt="My implementation of the same algorithm for a game map generator in C# and ASP.NET" width="300" height="231" /><p class="wp-caption-text">My implementation of the same algorithm for a game map generator in C# and&nbsp;ASP.NET</p></div></p>
<p>Here&#8217;s the&nbsp;code:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @title: &nbsp;Flood Fill Class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* See below class for example input.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> FloodFiller <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="re1">$x</span><span class="sy0">,</span> <span class="re1">$y</span><span class="sy0">,</span> <span class="re1">$fill</span><span class="sy0">,</span> <span class="re1">$searchNext</span><span class="sy0">,</span> <span class="re1">$map</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> Scan<span class="br0">&#40;</span> <span class="re1">$map</span><span class="sy0">,</span> <span class="re1">$point</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// We create the list of traversable squares(fill) </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// and a to-search queue(searchNext[])</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// where we insert our starting point.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">map</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re1">$map</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">fill</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">searchNext</span> &nbsp; <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">searchNext</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;x&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$point</span><span class="br0">&#91;</span> <span class="st0">&#39;x&#39;</span> <span class="br0">&#93;</span><span class="sy0">,</span> <span class="st0">&#39;y&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$point</span><span class="br0">&#91;</span> <span class="st0">&#39;y&#39;</span> <span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// As long as there are items in the queue</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// keep filling!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span> <span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">searchNext</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Get the next square item and erase it from the list &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$next</span> <span class="sy0">=</span> <span class="kw3">array_pop</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">searchNext</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span> <span class="sy0">=</span> <span class="re1">$next</span><span class="br0">&#91;</span> <span class="st0">&#39;x&#39;</span> <span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="sy0">=</span> <span class="re1">$next</span><span class="br0">&#91;</span> <span class="st0">&#39;y&#39;</span> <span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Check square. If it&#39;s traversable we add </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// the square to our fill list and we turn the</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// square untraversable to prevent future checking.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">map</span><span class="br0">&#91;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span> <span class="br0">&#93;</span><span class="br0">&#91;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="br0">&#93;</span> <span class="sy0">==</span> <span class="nu0">1</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">map</span><span class="br0">&#91;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span> <span class="br0">&#93;</span><span class="br0">&#91;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="br0">&#93;</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">fill</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st0">&#39;x&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span><span class="sy0">,</span> <span class="st0">&#39;y&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">CheckDirections</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">fill</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> CheckSquare<span class="br0">&#40;</span> <span class="re1">$checkX</span><span class="sy0">,</span> <span class="re1">$checkY</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if we can fill this square we add it to our queue</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">map</span><span class="br0">&#91;</span> <span class="re1">$checkX</span> <span class="br0">&#93;</span><span class="br0">&#91;</span> <span class="re1">$checkY</span> <span class="br0">&#93;</span> <span class="sy0">==</span> <span class="nu0">1</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">searchNext</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st0">&#39;x&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$checkX</span><span class="sy0">,</span> <span class="st0">&#39;y&#39;</span> <span class="sy0">=&gt;</span> <span class="re1">$checkY</span> <span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> CheckDirections<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Perform a check of all adjacent squares</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">CheckSquare</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="sy0">-</span> <span class="nu0">1</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">CheckSquare</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="sy0">+</span> <span class="nu0">1</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">CheckSquare</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">CheckSquare</span><span class="br0">&#40;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">x</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">y</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Example Input:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// 6&#215;6 map</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// 1: valley</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// 0: mountain/sea</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Starting Point: 3.3</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$map</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//0 &nbsp;1 &nbsp;2 &nbsp;3 &nbsp;4 &nbsp;5</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*0*/</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*1*/</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*2*/</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*3*/</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span> <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*4*/</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">array</span><span class="br0">&#40;</span> <span class="coMULTI">/*5*/</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Starting Point: 3.3</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$point</span> <span class="sy0">=</span> <span class="kw3">array</span> <span class="br0">&#40;</span> <span class="st0">&#39;x&#39;</span> <span class="sy0">=&gt;</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="st0">&#39;y&#39;</span> <span class="sy0">=&gt;</span> <span class="nu0">3</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// new class instance</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$floodFiller</span> <span class="sy0">=</span> <span class="kw2">New</span> FloodFiller<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Print the final list of filled coordinates</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">print_r</span><span class="br0">&#40;</span> <span class="re1">$floodFiller</span><span class="sy0">-&gt;</span><span class="me1">Scan</span><span class="br0">&#40;</span> <span class="re1">$map</span><span class="sy0">,</span> <span class="re1">$point</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=43</wfw:commentRss>
		</item>
		<item>
		<title>FOSDEM 2009</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=37</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=37#comments</comments>
		<pubDate>Sun, 30 Nov 2008 15:29:10 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=37</guid>
		<description><![CDATA[
Last year I didn&#8217;t manage to visit FOSDEM, though I&#8217;ve been told it was amazing. So, this year during the weekend of 7th and 8th February I get to have a second chance  
You can see some photos from the last year&#8217;s event here (from the ones that did go, featuring the Kamibu team&#160;:P).
Accommodation [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fosdem.org"><img class="alignleft" title="Fosdem 2009" src="http://www.fosdem.org/2009/promo/fosdem/square/static" alt="Fosdem 2009" width="200" height="149" /></a><br />
Last year I didn&#8217;t manage to visit FOSDEM, though I&#8217;ve been told it was amazing. So, this year during the weekend of 7th and 8th February I get to have a second chance <img src='http://www.rhapsody.intheblackbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p class="first"><span class="drop-cap">Y</span>ou can see some photos from the last year&#8217;s event <a href="http://www.zino.gr/?p=album&amp;id=9703" target="_blank">here</a> (from the ones that did go, featuring the <a href="http://www.kamibu.com/" target="_blank">Kamibu</a> team&nbsp;:P).</p>
<p>Accommodation in Brussels is pretty cheap if you manage to make a reservation early. You can even find cheap rooms that also provide a connection to the internet. But I don&#8217;t think anyone would wish to stay in their room for long, there are many conferences to attend to, many interesting things to hear and learn, events to participate in, and of course a beautiful city to&nbsp;visit.</p>
<p>I really can&#8217;t&nbsp;wait!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=37</wfw:commentRss>
		</item>
		<item>
		<title>Dynamically Generated Greasemonkey Scripts</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=28</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=28#comments</comments>
		<pubDate>Fri, 15 Aug 2008 01:18:35 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[greasemonkey]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=28</guid>
		<description><![CDATA[I recently made a Greasemonkey Script which I intended to use in some project of mine. It took me quite a while to write and debug ( damn css developers who use &#8220;!important&#8221; anywhere they do not know how to make things work correctly &#160; ).
My script contained a couple of configuration variables, that needed to [...]]]></description>
			<content:encoded><![CDATA[<p class="first"><span class="drop-cap">I</span> recently made a <a title="Greasemonkey" href="https://addons.mozilla.org/en-US/firefox/addon/748" target="_blank">Greasemonkey</a> Script which I intended to use in some project of mine. It took me quite a while to write and debug ( damn css developers who use &#8220;!important&#8221; anywhere they do not know how to make things work correctly &nbsp;<img src='http://www.rhapsody.intheblackbox.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>My script contained a couple of configuration variables, that needed to be reconfigured depending on the machine the script would be used on. Considering the specific network&#8217;s users as potential idiots, I decided that it would be better if each machine&#8217;s administrator could just log-in, submit a simple form and receive the script ready for use. It would also be much more simple in case there was need for an update (no re-configuration needed separately on each&nbsp;machine).</p>
<p>I though that instead of creating a different file each time a user requested the script it would be better to try sending the output of the <a title="PHP" href="http://www.php.net/" target="_blank">PHP</a> script directly, by adding the correct headers. No&nbsp;luck.</p>
<p>What I leant after asking the kind user&#8217;s of <a title="#greasemonkey" href="irc://irc.freenode.org/#greasemonkey" target="_blank">#greasemonkey</a>&nbsp;:</p>
<p>Greasemonkey doesn&#8217;t read a file&#8217;s headers or contents in order to identify a script. So even if you change the output headers to a different content-type or content-disposition, greasemonkey won&#8217;t open the file for&nbsp;you.</p>
<p>All it reads is the file&#8217;s extension&nbsp;&#8220;.user.js&#8221;</p>
<p>Conclusion:</p>
<p>add</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span> <span class="st0">&#39;Content-Type: text/javascript&#39;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span> <span class="st0">&#39;Content-Disposition: inline; filename=&quot;filename.user.js&quot;&#39;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//change &quot;filename.user.js&quot; to the desired filename</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="re1">$file_contents</span><span class="sy0">;</span> <span class="co1">//your output here&lt;/strong&gt;</span></div>
</li>
</ol>
</div>
<p>to your php&nbsp;script</p>
<p>and make sure that the link to the script is something similar&nbsp;to</p>
<p><strong>gm_script.php?.user.js</strong></p>
<p>alternatively you can use mod_rewrite to rewrite .user.js to .php (a much cleaner solution if you have the time to do&nbsp;that).</p>
<div style="text-align: center"><img style="vertical-align: middle;" src="http://rhapsody.intheblackbox.com/downloads/pictures/flach-tim-monkey-face-2410296.jpg" alt="the monkey" width="205" height="275" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=28</wfw:commentRss>
		</item>
		<item>
		<title>SVN repository on root directory - &#8220;out of date&#8221;</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=27</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=27#comments</comments>
		<pubDate>Thu, 05 Jun 2008 22:23:51 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[svn]]></category>

		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=27</guid>
		<description><![CDATA[As nice as it sounds, you cannot have a repository on the root folder. There seems to be a problem with Apache and its virtual folders. If you insist to do so, you will most likely receive error messages  when&#160;commiting:
svn: The version resource does not correspond to the resource within the transaction. Either the requested [...]]]></description>
			<content:encoded><![CDATA[<p class="first"><span class="drop-cap">A</span>s nice as it sounds, you cannot have a repository on the root folder. There seems to be a problem with Apache and its virtual folders. If you insist to do so, you will most likely receive error messages  when&nbsp;commiting:</p>
<p><code>svn: The version resource does not correspond to the resource within the transaction. Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the&nbsp;commit).</code></p>
<p>Do not fall into the trap of deleting and re-adding the files, as it will only temporarily solve the&nbsp;problem.</p>
<p>In fact this problem occurs only on files found at the root directory, the second time you commit a modification on the same&nbsp;file.</p>
<p>If that&#8217;s the case then the solution is to move your repository to another directory, for ex. to&nbsp;http://youraddress.com/svn/rep</p>
<p>I hope this helps&nbsp;someone.</p>
<p>Happy Coding <img src='http://www.rhapsody.intheblackbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=27</wfw:commentRss>
		</item>
		<item>
		<title>Happy 2008</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=19</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=19#comments</comments>
		<pubDate>Thu, 03 Jan 2008 15:23:37 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[fish confessions]]></category>

		<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=19</guid>
		<description><![CDATA[
Nom d&#8217;un chien! Dehors! Vite!  (what&#8217;s that, mud on your nose again?&#160;)
It beats the kind doggies in &#8220;I&#8217;m legend&#8221; for&#160;sure.
Wikiquote:  Among all the other things, studying also brings paranoia.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://mechapixel.com/graffiti/200/286/_o286juMO.jpg" alt="Such an elegant dog..." height="376" width="500" /></p>
<p class="first"><span class="drop-cap">N</span>om d&#8217;un chien! Dehors! Vite!  (what&#8217;s that, mud on your nose again?&nbsp;)</p>
<p>It beats the kind doggies in &#8220;I&#8217;m legend&#8221; for&nbsp;sure.</p>
<pre>Wikiquote:  Among all the other things, studying also brings paranoia.</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=19</wfw:commentRss>
		</item>
		<item>
		<title>Decadence</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=24</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=24#comments</comments>
		<pubDate>Thu, 27 Dec 2007 10:29:22 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[communities]]></category>

		<category><![CDATA[fish confessions]]></category>

		<category><![CDATA[internet cult]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=24</guid>
		<description><![CDATA[Irony is just a kind of iron melting&#160;technique.
]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_76" class="wp-caption aligncenter" style="width: 516px"><a href="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/12/bury-me.jpg" rel="lightbox[24]"><img class="size-full wp-image-76" title="bury-me" src="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/12/bury-me.jpg" alt="Bury me..." width="506" height="310" /></a><p class="wp-caption-text">Bury&nbsp;me...</p></div></p>
<p class="first"><span class="drop-cap">I</span>rony is just a kind of iron melting&nbsp;technique.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=24</wfw:commentRss>
		</item>
		<item>
		<title>Non Compatible</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=22</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=22#comments</comments>
		<pubDate>Sun, 02 Dec 2007 13:31:48 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[fish confessions]]></category>

		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=22</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_72" class="wp-caption aligncenter" style="width: 561px"><a href="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/12/non-compatible.jpg" rel="lightbox[22]"><img class="size-full wp-image-72" title="non-compatible" src="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/12/non-compatible.jpg" alt="I just couldn't resist..." width="551" height="410" /></a><p class="wp-caption-text">I just couldn&#39;t&nbsp;resist...</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=22</wfw:commentRss>
		</item>
		<item>
		<title>Why I supported New Zealand</title>
		<link>http://www.rhapsody.intheblackbox.com/blog/?p=20</link>
		<comments>http://www.rhapsody.intheblackbox.com/blog/?p=20#comments</comments>
		<pubDate>Sat, 06 Oct 2007 21:02:03 +0000</pubDate>
		<dc:creator>Geekfish</dc:creator>
		
		<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://www.rhapsody.intheblackbox.com/blog/?p=20</guid>
		<description><![CDATA[Today the All-Blacks have been defeated by the french rugby national team,&#160;18-20.
But they will always win in&#160;style.

]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_79" class="wp-caption aligncenter" style="width: 367px"><a href="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/10/haka.jpg" rel="lightbox[20]"><img class="size-full wp-image-79" title="haka" src="http://www.rhapsody.intheblackbox.com/blog/wp-content/uploads/2007/10/haka.jpg" alt="Hakaaaaaaa!!!" width="357" height="448" /></a><p class="wp-caption-text">Hakaaaaaaa!!!</p></div></p>
<p class="first"><span class="drop-cap">T</span>oday the All-Blacks have been defeated by the french rugby national team,&nbsp;18-20.</p>
<p>But they will always win in&nbsp;style.</p>
<p style="text-align: center;"><!-- Smart Youtube --><span class="youtube"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/9Zvs4T4RU30&amp;rel=1&amp;color1=2b405b&amp;color2=6b8ab6&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showsearch=0&amp;rel=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/9Zvs4T4RU30&amp;rel=1&amp;color1=2b405b&amp;color2=6b8ab6&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showsearch=0&amp;rel=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="355" ></embed><param name="wmode" value="transparent" /></object></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rhapsody.intheblackbox.com/blog/?feed=rss2&amp;p=20</wfw:commentRss>
		</item>
	</channel>
</rss>
