<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Squirrels Hate Robots</title>
	<atom:link href="http://squirrelshaterobots.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://squirrelshaterobots.com</link>
	<description>It is true, I read it once.</description>
	<lastBuildDate>Sat, 05 Nov 2011 02:06:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>GeoIP in PHP with the new php-geoipo extension</title>
		<link>http://squirrelshaterobots.com/programming/php/geoip-in-php-with-the-new-php-geoipo-extension/</link>
		<comments>http://squirrelshaterobots.com/programming/php/geoip-in-php-with-the-new-php-geoipo-extension/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 16:23:08 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[geoip]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=561</guid>
		<description><![CDATA[During the past few weeks I have been working on a brand new PHP extension to provide an easy object oriented interface for the GeoIP library from MaxMind. The original module (that I did not write) had two main issues. First the directory to find the databases could not be changed except in PHP.INI before [...]]]></description>
			<content:encoded><![CDATA[<p>During the past few weeks I have been working on a brand new PHP extension to provide an easy object oriented interface for the GeoIP library from MaxMind. The original module (that I did not write) had two main issues. First the directory to find the databases could not be changed except in PHP.INI before PHP loads (so not even ini_set would work). Second was that it was old school and not object oriented. Another issue (so that really makes three) is that it will throw E_WARNINGS for dumb things like records not being found. If there is no record found when you ask for it I would much rather just be handed a FALSE.</p>
<p style="text-align: center;"><strong>[update 2011/10/26]</strong> Official GeoIPo manual/documentation is <a href="http://squirrelshaterobots.com/projects/php-geoipo/">here</a>.</p>
<p>This new one is nearly complete, but I am still waiting to be accepted into PECL. However it works and I have the source available for use <a href="https://github.com/bobmajdakjr/php-geoipo">on GitHub</a>. Here is a little how-to on how to set up the GeoIP database and use this module.</p>
<h2>Why use GeoIP?</h2>
<ul>
<li>Perhaps your project has support for English, German, and Polish languages. With GeoIP you can try to guess what country your visitor is from and if they are from a country with a language you support you can set that language default for the user. Things like that go very far towards user experience.</li>
<li>If you have a website, I doubt many people can honestly tell me they are not curious what country their visitors are from. GeoIP is an important part of determining your reader demographics. You know all those maps that show dots about where visitors are from? You need GeoIP info to do that.</li>
<li>And the bane of all internet users &#8211; lets say you are the owner of YouTube/Spotify/iTunes and you need to prevent a certain country from viewing/watching/listening to specific content because of license restrictions. You are going to piss people off, but I guess for legal reasons it just needs to be done.</li>
</ul>
<p>These are only three of the many valid reasons you might need GeoIP information. <a href="http://zenthis.org/tests/geoip.php">Over here</a> I have a page demoing the readout of the server and visitor&#8217;s GeoIP info, with a link to the visible source at the bottom.</p><p><a href="http://squirrelshaterobots.com/programming/php/geoip-in-php-with-the-new-php-geoipo-extension/">Continue reading: GeoIP in PHP with the new php-geoipo extension</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/programming/php/geoip-in-php-with-the-new-php-geoipo-extension/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Framework Design Challenges: Dealing with Evolution</title>
		<link>http://squirrelshaterobots.com/dev-station/framework-design-challenges-dealing-with-evolution/</link>
		<comments>http://squirrelshaterobots.com/dev-station/framework-design-challenges-dealing-with-evolution/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 18:34:48 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Dev Station]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[evolution]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=531</guid>
		<description><![CDATA[from C&#38;H explosm.net For the past  year one of my side-not-so-side projects has been the zen\this Framework. Technically the project is even older than that. It was started because many years ago I wrote a Database library for MySQL that I really liked. It wrapped mysql/mysqli into what I consider a much more common and [...]]]></description>
			<content:encoded><![CDATA[<div style="float: left; margin: 10px; text-align: center; font-size: 0.8em; font-style: italic;"><a href="http://squirrelshaterobots.com/files/2011/10/cyan2.jpeg" class="lightview" rel="gallery[531]"><img class="size-full wp-image-544" src="http://squirrelshaterobots.com/files/2011/10/cyan2.jpeg" alt="From explosm.net" width="240" height="179" /></a><br />
from C&amp;H explosm.net</div>
<p>For the past  year one of my side-not-so-side projects has been the <a href="http://zenthis.org">zen\this</a> Framework. Technically the project is even older than that. It was started because many years ago I wrote a Database library for MySQL that I really liked. It wrapped mysql/mysqli into what I consider a much more common and better interface. At the time it was designed to be portable to any codebase and handle things like injection protection without me or the other developers (who were at the time, interns) spacing about it. When I decided to write additional libraries the design challenge was to mimic the original design pattern of that database library.</p>
<p>The interface was quite simple. The main database class was a series of static functions, and there was a query object class too. This was before we had namespaces in PHP so the main database class was really just being used as a namespace. Configuration options were placed in a static array, database::$config, and most of the functions referenced that when deciding which database to query as it handled multiple connections.  This worked great as a completely stand alone library but after it evolved into the current edition in zen\this there have been some design issues.</p><p><a href="http://squirrelshaterobots.com/dev-station/framework-design-challenges-dealing-with-evolution/">Continue reading: Framework Design Challenges: Dealing with Evolution</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/dev-station/framework-design-challenges-dealing-with-evolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSX Lion Fullscreen &#8211; Well played Google Chrome 14, Jolly Good</title>
		<link>http://squirrelshaterobots.com/dev-station/osx-lion-fullscreen-well-played-google-chrome-14-jolly-good/</link>
		<comments>http://squirrelshaterobots.com/dev-station/osx-lion-fullscreen-well-played-google-chrome-14-jolly-good/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 22:23:45 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Dev Station]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[fullscreen]]></category>
		<category><![CDATA[osx lion]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=524</guid>
		<description><![CDATA[When OSX Lion came out, most apps had the ability to fullscreen by clicking on the fullscreen icon on the top right of the window titlebar. Chrome had this, and then a day later it was updated to remove it. There was speculation that it did not &#8220;work right&#8221; even though when I used it, [...]]]></description>
			<content:encoded><![CDATA[<p>When OSX Lion came out, most apps had the ability to fullscreen by clicking on the fullscreen icon on the top right of the window titlebar. Chrome had this, and then a day later it was updated to remove it. There was speculation that it did not &#8220;work right&#8221; even though when I used it, it worked just fine.</p>
<p>I then engaged in some IRC flame wars about what &#8220;full screen&#8221; really means. Most people seem to think Fullscreen means while the entire screen is used by the application, they should still see the address and tab bar of the browser. To me this is NOT fullscreen, this is just really big. Full screen to me means that all UI is hidden except for the main work area. In this case, the work area is the HTML viewport, so I believe the tabs and address bar should be hidden while in fullscreen, yet easily accessible somehow like touching the top of the screen with the mouse cursor.</p>
<p>Google Chrome 14 has finally updated with full support for OSX Lion, and I am quite impressed with their solution. Considering how bad things like the bookmark manager is in Chrome I assumed they would pick one method of fullscreen and that would be it.</p><p><a href="http://squirrelshaterobots.com/dev-station/osx-lion-fullscreen-well-played-google-chrome-14-jolly-good/">Continue reading: OSX Lion Fullscreen &#8211; Well played Google Chrome 14, Jolly Good</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/dev-station/osx-lion-fullscreen-well-played-google-chrome-14-jolly-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Catching when scheduled posts finally publish in a WordPress Plugin</title>
		<link>http://squirrelshaterobots.com/hacking/wordpress/catching-when-scheduled-posts-finally-publish-in-a-wordpress-plugin/</link>
		<comments>http://squirrelshaterobots.com/hacking/wordpress/catching-when-scheduled-posts-finally-publish-in-a-wordpress-plugin/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 16:40:11 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[publish_future_post]]></category>
		<category><![CDATA[publish_post]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=508</guid>
		<description><![CDATA[This problem has been bothering me for a while now, and I only just came across the solution this week. The issue was that when you schedule a post for the future, when it does finally post it was seemingly not running the publish_post hook that I had set. Multiple solutions suggested using future_to_publish as [...]]]></description>
			<content:encoded><![CDATA[<p>This problem has been bothering me for a while now, and I only just came across the solution this week. The issue was that when you schedule a post for the future, when it does finally post it was seemingly not running the <tt>publish_post</tt> hook that I had set. Multiple solutions suggested using <tt>future_to_publish</tt> as a hook, and that did not work either. The actual solution was to hook to <tt>publish_future_post</tt>, but in addition the function I was executing had to be modified a bit.</p>
<p>The original function was something along these lines: When a post is published for the first time, post a link to it on Twitter. <tt>publish_post</tt> also fires when you update a post, so to make sure it was only posted on the original posting the accepted solution was to make sure post_date and post_modified dates were equal. Here is an simple example.</p>
<blockquote class="bml-box bml-php">
<div class="bml-box-title">PHP Code:</div>
<div class="bml-box-content"><code><code><span style="color: #ffffff">
<span style="color: #5555ff">&lt;?php<br /><br /></span><span style="color: #888888">//&nbsp;accepted&nbsp;solution,&nbsp;but&nbsp;this&nbsp;will&nbsp;not&nbsp;work&nbsp;as&nbsp;expected<br />//&nbsp;on&nbsp;scheduled&nbsp;posts.<br /><br /></span><span style="color: #5555ff">add_action</span><span style="color: #55aa55">(</span><span style="color: #cc5555">'publish_post'</span><span style="color: #55aa55">,</span><span style="color: #cc5555">'bob_on_publish_post'</span><span style="color: #55aa55">);<br /></span><span style="color: #5555ff">add_action</span><span style="color: #55aa55">(</span><span style="color: #cc5555">'publish_future_post'</span><span style="color: #55aa55">,</span><span style="color: #cc5555">'bob_on_publish_post'</span><span style="color: #55aa55">);<br /><br />function&nbsp;</span><span style="color: #5555ff">bob_on_publish_post</span><span style="color: #55aa55">(</span><span style="color: #5555ff">$id</span><span style="color: #55aa55">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #5555ff">$post&nbsp;</span><span style="color: #55aa55">=&nbsp;</span><span style="color: #5555ff">get_post</span><span style="color: #55aa55">(</span><span style="color: #5555ff">$id</span><span style="color: #55aa55">);<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #5555ff">$post</span><span style="color: #55aa55">-&gt;</span><span style="color: #5555ff">post_modified&nbsp;</span><span style="color: #55aa55">!=&nbsp;</span><span style="color: #5555ff">$post</span><span style="color: #55aa55">-&gt;</span><span style="color: #5555ff">post_date</span><span style="color: #55aa55">)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #888888">//&nbsp;la&nbsp;de&nbsp;da,&nbsp;doing&nbsp;stuff.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #55aa55">return;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /></span><span style="color: #5555ff">?&gt;</span>
</span>
</code></code></div>
</blockquote>
<p>The reason this fails is that it turns out when a post is scheduled for future posting, post_date and post_modified are not equal after all. This issue caught me by surprise because it does not exist when working with Drafts. If the post is marked as draft, saved, and then manually published later, this test will still allow the hook to run. This is probably due to how WordPress handles filling up your database with redundant revisions, but it even works if you have a Plugin disabling revisions (like me).</p><p><a href="http://squirrelshaterobots.com/hacking/wordpress/catching-when-scheduled-posts-finally-publish-in-a-wordpress-plugin/">Continue reading: Catching when scheduled posts finally publish in a WordPress Plugin</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/hacking/wordpress/catching-when-scheduled-posts-finally-publish-in-a-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You might want to update your browsers&#8230; men&#8230;</title>
		<link>http://squirrelshaterobots.com/off-topic/you-might-want-to-update-your-browsers-men/</link>
		<comments>http://squirrelshaterobots.com/off-topic/you-might-want-to-update-your-browsers-men/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 15:44:03 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Off Topic]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[user agent]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=503</guid>
		<description><![CDATA[Interesting how the Tech Mac guys are still using old browser but the Dirty Mac guys are the only ones of the dirty people using an up to date browser (comparing Safari). [note] no not a random chart from the internet, generated it myself for the past two weeks of logs from various sites I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://squirrelshaterobots.com/files/2011/08/uareport.png" class="lightview" rel="gallery[503]" title="uareport"><img class="aligncenter size-full wp-image-504" title="uareport" src="http://squirrelshaterobots.com/files/2011/08/uareport.png" alt="" width="494" height="500" /></a></p>
<p>Interesting how the Tech Mac guys are still using old browser but the Dirty Mac guys are the only ones of the dirty people using an up to date browser (comparing Safari).</p>
<p><em>[note] no not a random chart from the internet, generated it myself for the past two weeks of logs from various sites I /friends have access to. it is generated by piwik.</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/off-topic/you-might-want-to-update-your-browsers-men/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looking at the 3-Clause Revised BSD License&#8230;</title>
		<link>http://squirrelshaterobots.com/dev-station/looking-at-the-3-clause-revised-bsd-license/</link>
		<comments>http://squirrelshaterobots.com/dev-station/looking-at-the-3-clause-revised-bsd-license/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 05:51:10 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Dev Station]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=492</guid>
		<description><![CDATA[For a while now I have used the Revised 3-Clause BSD License because it was not GNU. I am looking for opinions on the last clause in it, please comment! If you are not familiar with it, here are the clauses: Redistributions of source code must retain the above copyright notice, this list of conditions [...]]]></description>
			<content:encoded><![CDATA[<p>For a while now I have used the Revised 3-Clause BSD License because it was not GNU. I am looking for opinions on the last clause in it, please comment! If you are not familiar with it, here are the clauses:</p>
<ul>
<li><em>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</em></li>
<li><em>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</em></li>
<li><em>Neither the name of the &lt;PROJECT&gt; nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.</em></li>
</ul>
<p>Originally I agreed with all of these points. First off I want my code to retain the copyright. Second, I want binaries to have my documented copyright.</p>
<p>And the third point, I originally read the third clause as &#8220;You cannot fork this project and say Bob thinks your fork is awesome unless he allows you to.&#8221; However, my latest personal project is a framework, and I am unsure if the license is clear on &#8220;works derived from&#8221; and &#8220;works derived with&#8221;.</p>
<p>For example, if the project in question is a PHP library (lets say it is called FalconPunch), would that clause prevent you from saying &#8220;Powered by FalconPunch&#8221; in the page footer? Is that using the name of the project in vain according to clause three? Using the library would mean your script is a &#8220;work derived with&#8221; or &#8220;work derived by using&#8221; it and not a &#8220;work derived from&#8221;. A &#8220;work derived from&#8221; would mean you modified the library and redistributed it under its own name.</p>
<p>Because of this I think the wording of the third clause is ambiguous and could be twisted to mean both. Is this why there is also a Simplified BSD License that is only the first two clauses? What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/dev-station/looking-at-the-3-clause-revised-bsd-license/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Problems I have personally hit in Mac OS X Lion</title>
		<link>http://squirrelshaterobots.com/dev-station/problems-i-have-personally-hit-in-mac-os-x-lion/</link>
		<comments>http://squirrelshaterobots.com/dev-station/problems-i-have-personally-hit-in-mac-os-x-lion/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 16:14:45 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[Dev Station]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[osx lion]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=482</guid>
		<description><![CDATA[Here is a list of all the bugs and problems I have personally encountered in Mac OS X Lion. As I hit more, I will update this post. At the very end after being harsh I will list praises I have for Lion. [update] August 1, 2011 Bugs [new] Roughtly 50% of the time dragging from the [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a list of all the bugs and problems I have personally encountered in Mac OS X Lion. As I hit more, I will update this post. At the very end after being harsh I will list praises I have for Lion.</p>
<p>[update] August 1, 2011</p>
<h2>Bugs</h2>
<ul>
<li>[new] Roughtly 50% of the time dragging from the sidebar of Preview does nothing. Generally I drag images from the side bar to a folder on my desktop to create a copy in that folder. Also, see the Usability section.</li>
<li>Losing Launchpad icons <a href="http://www.opsat.net/temp/lpad2.png" class="lightview" rel="gallery[482]">in the void between Launchpad and Reality</a>. Once there (they bug out when trying to rearrange them sometimes) they are unresponsive and require a full logout.</li>
<li>Image Capture utility the checkbox &#8220;Delete after import&#8221; no longer deletes after import. I use this on my iPhone all the time.</li>
<li>Desktop Hot Corners, overly sensitive when I am working so I constantly shut off my monitor which I have set to the lower right corner. However by the time I want to go to bed the corners quit working completely until I go into the settings and turn them off and back on.</li>
<li>When Resume is disabled, the checkbox on the shut down / logout screen is still checked by default. It should not be.</li>
</ul>
<h2>Usability Problems</h2>
<ul>
<li>[new] Preview forces the sidebar on the left. Mac Desktop sorts Icons from the right side of the screen. This means dragging icons from the Preview sidebar to an Icon on the Desktop means I have to drag across more than 60% of the desktop width. My Macbook is widescreen. Sidebar side needs to be an option. Part of me thinks it used to be one&#8230;</li>
<li>Natural scrolling needs to allow setting each axis separately. I want <em>natural</em> scrolling when I swipe left and right, but I want <em>normal</em> scrolling for up and down. Inverted up and down scrolling only makes sense to me when I am physically touching the actual screen such as on my phone. On my macbook touch pad, magic pad, or magic mouse, the distance disconnection ruins it.</li>
<li>Preview is directly integrated with Versions. Versions is dumb. Preview was the best quick tool ever in 10.6. How it was then is exactly how I want it back, same menu options (Save As&#8230; Save All&#8230; etc). When I am editing dirty photos I do not want multiple versions floating around in the OS X nether, am I making sense?</li>
<li>I cannot delete things from Launchpad unless the item is from the App Store</li>
<li>The Apps in the App store need to quit installing installers and install the real app. Seriously.</li>
<li>When Dashboard is shown as a space I have been unable to change the background from the ugly grey bubbles to something like an actual wallpaper.</li>
<li>Didn&#8217;t the bundled PHP used to include PECL? So I could do things like install modules easy?</li>
</ul>
<h2>Bold statements I wish to make</h2>
<p>Versions sounds like a personal privacy nightmare as far as digital forensics&#8230; <a href="http://www.opsat.net/temp/iphone-locationd-log.png" class="lightview" rel="gallery[482]">remember when our iPhones were logging our locations for eternity</a> how big of a deal that was to people who have a phobia of being arrested?</p>
<p>Back on the topic of Preview. As now there is no save option or even a confirm dialog, preview just saves when you exit &#8211; what if I did not want to bother saving one of the 10 I opened? Oh just revert back to a previous version! OK like I said I do not want to keep a history of previous version of pictures that may be embarrassing. Also&#8230; where do all the versions go? I am already running low on disk space. Oh, just lock all the files! OK and you do not see how that can get annoying having to lock stuff all the time? Oh, just set the lock time to 1 day! OK and you think I want to wait 1 day just so I do not have to manually lock them?</p>
<p>Basically, Versions just needs a 100% kill switch option, perhaps it even does and it just has not been discovered. Spotlight had one, it could be killed and prevented completely through a few console commands.</p>
<h2>Good things about Lion</h2>
<ul>
<li><span class="Apple-style-span" style="font-size: 13px; font-weight: normal;">Best new feature: when I have multiple files selected and I right click, now I have &#8220;make new folder and put these things in it&#8221;.</span></li>
<li><span class="Apple-style-span" style="font-size: 13px; font-weight: normal;">I like how my terminal tabs have spinners on them now while things are processing.</span></li>
<li><span class="Apple-style-span" style="font-size: 13px; font-weight: normal;">The new login screen is pretty nice.</span></li>
<li>My World of Warcraft is running a little smoother in Lion, as in slightly higher frame rate and less random drops in frame rate and stutters.</li>
<li>Spotlight seems snappier too.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/dev-station/problems-i-have-personally-hit-in-mac-os-x-lion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building a Queue Server in PHP &#8211; Part 4 &#8211; Run as a background daemon a.k.a. forking</title>
		<link>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-4-run-as-a-background-daemon-a-k-a-forking/</link>
		<comments>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-4-run-as-a-background-daemon-a-k-a-forking/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 05:02:58 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[queue]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=448</guid>
		<description><![CDATA[The next logical step in the development of our queue service is to allow the application to push itself into the background of a system and run detached from a terminal. What is forking? Forking is when you take one process, and clone it to create another with the same state as the original. When [...]]]></description>
			<content:encoded><![CDATA[<p>The next logical step in the development of our queue service is to allow the application to push itself into the background of a system and run detached from a terminal.</p>
<h2>What is forking?</h2>
<p>Forking is when you take one process, and clone it to create another with the same state as the original. When our application executes we will clone it, let the new copy take ownership of itself, and terminate the original. This leaves a background process or daemon running in the background still ready to process our queue.</p>
<p>PHP by default does not have the functions we need enabled. In order to enable them PHP will need to be compiled with the option &#8211;enable-pcntl. This will make the pcntl_* function set available to us.</p>
<h2>Wanna fork?</h2>
<p>Forking is a fairly simple process. The best time to fork is early on in the program, because when we do it literally everything about the application state gets copied over. This means file handles, database pointers, everything&#8230; and this usually causes problems. Fork before you open your files and databases, and you will find your life running much smoother.</p><p><a href="http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-4-run-as-a-background-daemon-a-k-a-forking/">Continue reading: Building a Queue Server in PHP &#8211; Part 4 &#8211; Run as a background daemon a.k.a. forking</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-4-run-as-a-background-daemon-a-k-a-forking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building a Queue Server in PHP &#8211; Part 3 &#8211; Accepting input from Named Pipes</title>
		<link>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-3-accepting-input-from-named-pipes/</link>
		<comments>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-3-accepting-input-from-named-pipes/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 19:16:52 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[named pipe]]></category>
		<category><![CDATA[queue]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=386</guid>
		<description><![CDATA[In this part of the series we will add the ability to accept input from named pipes to the queue server, an important feature so that the queue can actually be given things to do. Again, I would like to point out that it is assumed we are running on a Unixesque operating system such [...]]]></description>
			<content:encoded><![CDATA[<p>In this part of the series we will add the ability to accept input from named pipes to the queue server, an important feature so that the queue can actually be given things to do. Again, I would like to point out that it is assumed we are running on a Unixesque operating system such as Linux, BSD, or Solaris.</p>
<h2>What are Named Pipes?</h2>
<p>Named Pipes are special files that the kernel can create allowing for buffered byte streams. They operate on the principle of FIFO, where the first thing put into it is the first thing it spits out. This is perfect for our queue system as we want to process the first thing put into it first. To store data into a named pipe, it is as easy as <tt>`echo lol &gt; /path/to/pipe`</tt> and reading the data back out is as easy as <tt>`cat /path/to/pipe`</tt>. An interesting note about named pipes is that by default they block until there is both a reader and a writer. This means the echo command will hang until another terminal is opened and the cat command is executed.</p>
<p>Here is a quick video demonstrating how the queue system will work by the end of this post. We will be able to launch the server, and send input to it from another terminal via the named pipe.</p>
<p style="text-align: center;"><iframe width="480" height="390" src="http://www.youtube.com/embed/qOaF5lhv24g?rel=0&fmt=18&hd=2" frameborder="0" allowfullscreen></iframe></p><p><a href="http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-3-accepting-input-from-named-pipes/">Continue reading: Building a Queue Server in PHP &#8211; Part 3 &#8211; Accepting input from Named Pipes</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-3-accepting-input-from-named-pipes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building a Queue Server in PHP &#8211; Part 2 &#8211; Building the queue structure</title>
		<link>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-2-building-the-queue-structure/</link>
		<comments>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-2-building-the-queue-structure/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 16:50:26 +0000</pubDate>
		<dc:creator>bob</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[iteration]]></category>
		<category><![CDATA[queue]]></category>

		<guid isPermaLink="false">http://squirrelshaterobots.com/?p=361</guid>
		<description><![CDATA[To get this project rolling, we are going to start by building a really basic queue system structure. It will start of simple and not very cool, and over the next few blogs we will evolve it into awesomesauce. What is a Queue? A queue is just a list of things that need to get [...]]]></description>
			<content:encoded><![CDATA[<p>To get this project rolling, we are going to start by building a really basic queue system structure. It will start of simple and not very cool, and over the next few blogs we will evolve it into awesomesauce.</p>
<h2>What is a Queue?</h2>
<p>A queue is just a list of things that need to get done, just like when you stand in line at the cafe and the counter girl can only take one order at a time. Imagine the line of people as an Array, and the counter girl some processor function, and the entire store itself as a giant loop that always exists. The only difference is instead of selling us coffee the counter girl is going to look up website IP addresses for us.</p>
<p>Here is what the initial queue system is going to look like before we evolve it in later posts.</p>
<p>&nbsp;</p>
<p><a href="http://squirrelshaterobots.com/files/2011/07/qs2.png" class="lightview" rel="gallery[361]" title="qs2"><img class="aligncenter size-medium wp-image-364" title="qs2" src="http://squirrelshaterobots.com/files/2011/07/qs2-500x374.png" alt="" width="500" height="374" /></a></p><p><a href="http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-2-building-the-queue-structure/">Continue reading: Building a Queue Server in PHP &#8211; Part 2 &#8211; Building the queue structure</a></p>]]></content:encoded>
			<wfw:commentRss>http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-2-building-the-queue-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

