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

<channel>
	<title>NickAWilliams.com</title>
	<atom:link href="http://www.nickawilliams.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nickawilliams.com</link>
	<description>For everything Nick!</description>
	<pubDate>Mon, 22 Dec 2008 03:40:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Stack Overflow: Liftoff!</title>
		<link>http://www.nickawilliams.com/2008/09/15/stack-overflow-liftoff/</link>
		<comments>http://www.nickawilliams.com/2008/09/15/stack-overflow-liftoff/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 01:52:12 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Deep Thoughts]]></category>

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

		<category><![CDATA[Software Development]]></category>

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

		<guid isPermaLink="false">http://www.nickawilliams.com/?p=52</guid>
		<description><![CDATA[Today marks the first day Stack Overflow opens its doors to the public. In case you're not in the know, Stack Overflow is essentially a Q&#038;A site geared towards developers of all kinds. It takes a language/technology agnostic approach and simply provides a framework within which the community can ask and answer techincal questions. Think of it as ExpertsExchange.com except free and much more community driven.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/wp-content/uploads/2008/09/stackoverflow.png" align="right" alt="" width="250" height="70" />Today marks the first day <a href="http://www.stackoverflow.com/" target="_blank">Stack Overflow</a> opens its doors to the public. In case you&#8217;re not in the know, Stack Overflow is essentially a Q&amp;A site geared towards developers of all kinds. It takes a language/technology agnostic approach and simply provides a framework within which the community can ask and answer techincal questions. Think of it as ExpertsExchange.com except free and much more community driven.</p>
<p><strong>What I Like</strong></p>
<p>One thing in particular that really impressed me was the way in which the system is designed to build trust with its users. When you first open an account, your level of access is somewhat limited. You start out only being able to ask questions, rate answers, etc. As your involvement in the community grows and users rate your contributions (questions, answers, comments, etc.), your user score will increase. As your score rises, you begin to build trust and the restrictions on what you can do are lifted. After some time you can even edit submitted questions wiki-style, re-tag questions, and essentially moderate user interactions.</p>
<p>Another handy addition adds an element of &#8220;fun&#8221; to using the site. Known as badges, users can earn them by meeting certain requirements (think Xbox achievements). These badges are visible to other users and help a user to build credibility in combination with their score. This type of formula has been proven to be addictive (think MMORPGs), as users basically &#8220;level up&#8221; the more they participate in the community. This creates the motivation to contribute to the site and ensure it continues to grow (rather than ExpertExchange&#8217;s paid model, where users are motivated by free membership to what would otherwise be a mothly charge).</p>
<p><strong>What Could Improve</strong></p>
<p>Overall the only areas for improvement that come to mind are the smaller details in how the system works. Some things are not quite intuitive yet, such as finding unanswered questions related to a specific topic (which is possible, but not immediately apparrent).</p>
<p>It would also be nice if the site would somehow encourage the growth of sub-communities. For example, one could borrow from the MMORPG concept of a guild and create user groups. Each group could be associated with a particular technology or language and could make tools available that would help facilitate communication between like-minded developers.</p>
<p><strong>Conclusion</strong></p>
<p>Joel and Jeff are definitely off to a great start with the site and judging from what they have produced so far, I&#8217;m optimistic about its future. Having been involved with the private beta, the team maintaining the site has bee fairly responsive and Jeff seems to be very receptive to user input. It will be interesting to see how the site evolves in the coming months.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/09/15/stack-overflow-liftoff/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The New .phar PHP Package</title>
		<link>http://www.nickawilliams.com/2008/09/04/the-new-phar-php-package/</link>
		<comments>http://www.nickawilliams.com/2008/09/04/the-new-phar-php-package/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 23:25:54 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Coding Techniques]]></category>

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

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

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/?p=29</guid>
		<description><![CDATA[Today I discovered a very powerful addition to the PHP world. Phar is an archive extension for PHP that allows an entire PHP application to be packaged into a single file. It's basically PHP's answer to Java's .jar archive format. Don't get excited yet, it gets better . . .]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post008_001.jpg" alt="" width="100" height="64" align="right" />Today I discovered a very powerful addition to the PHP world. <a href="http://us2.php.net/manual/en/book.phar.php" target="_blank">Phar</a> is an archive extension for PHP that allows an entire PHP application to be packaged into a single file. It&#8217;s basically PHP&#8217;s answer to Java&#8217;s .jar archive format. Don&#8217;t get excited yet, it gets better . . .</p>
<p>There are a few things that make this particularly handy. For one, it is being integrated into the next major PHP release (5.3) wich means that any standard PHP installation running the latest version will support .phar files right out of the box.</p>
<p>The other advantage is of course in deployment. Using a .phar file you can deploy an entire PHP application by working with just one file, rather than a buch of files and directories. This is where .phar really shines. Imagine deploying a popular web app like WordPress by simply copying a single .phar file to your web server&#8217;s root, rather than figuring out how to zip it up, upload it, and somehow unzip it remotely. Piece of cake!</p>
<p>The devlopment side is equally as simple, being able to access files within the .phar file as easily as if it were another directory in the filesystem. The .phar file itself can be included in a script using any of PHP&#8217;s standard import constructs (include, include_once, require, require_once). This also means external libraries can be more easily integrated, having just a single file to include in order to utilize a given library. A .phar archive can also be accessed as a stream using the same functions used to read/write other types of streams.</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Referencing a .phar archive or its contents:</span>
<span style="color: #b1b100;">include</span> <span style="">'userlibrary.phar'</span>;
<span style="color: #b1b100;">include</span> <span style="">'phar://userlibrary.phar/internal/file.php'</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Utilizing the Phar Stream Wrapper:</span>
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="">'Content-type: image/jpeg'</span><span style="color: #009900;">&#41;</span>;
<span style="color: #990000;">echo</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="">'phar://userlibrary.phar/img/image.jpg'</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>Certainly there are disadvantages as well, and this is not a one-size-fits-all solution. Using .phar files does result in a performance hit, meaning traffic-intensive sites and heavyweight applications are probably not the best place to use this tool. It also may not be ideal for a web app that is fairly modular, or other situations where source files might be added or removed on a regular basis. It does have its uses though, and for me it will be a welcome addition to the PHP core.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/09/04/the-new-phar-php-package/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iPhoney: A Handy Pair of iPhone Goggles</title>
		<link>http://www.nickawilliams.com/2008/08/25/iphoney-a-handy-pair-of-iphone-goggles/</link>
		<comments>http://www.nickawilliams.com/2008/08/25/iphoney-a-handy-pair-of-iphone-goggles/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 21:06:57 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/?p=20</guid>
		<description><![CDATA[
As mobile access to the web increases, it is becoming more and more important to ensure sites are usable on mobile devices. iPhoney attempts to address the iPhone camp with a desktop application that renders web pages within a virtual iPhone.
After playing around with the app, it is certainly not without its flaws. For one, [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right" src="http://www.nickawilliams.com/wp-content/uploads/2008/08/iphoney-164x300.jpg" alt="iPhoney" title="iPhoney" width="164" height="300" class="size-medium wp-image-23" />
<p>As mobile access to the web increases, it is becoming more and more important to ensure sites are usable on mobile devices. <a href="http://www.marketcircle.com/iphoney/" target="_blank">iPhoney</a> attempts to address the iPhone camp with a desktop application that renders web pages within a virtual iPhone.</p>
<p>After playing around with the app, it is certainly not without its flaws. For one, it is not simulating a true iPhone client environment. This means there is still room for the possibility that pages will display differently on an actual device. The UI is also fairly limited, with the iPhone graphic surrounding the browser window being purely aesthetic with no functional purpose or clickable areas. It would also have been nice to be able to simulate different network speeds to see how pages loaded using typical 3G/HSDPA, EDGE, and GSM connnections.</p>
<p>The program does recreate an accurate pixel-for-pixel recreation of the browser window (320&#215;240). It even lets you rotate the virtual phone sideways to view the page in &#8220;landscape&#8221; mode. It also does an excellent job of recreating the iPhone&#8217;s browser UI, which can be extremely useful for developers building sites that complement the iPhone&#8217;s UI appearence. Overall it makes aesthetic testing of a site extremely simple and straightforward, though is lacking in other areas like performance and browser testing. In the end it won&#8217;t replace the need for a real iPhone to properly test a site, but it is certainly a step in the right direction.</p>
<p><span style="font-weight: bold;">Link:</span> <a href="http://www.marketcircle.com/iphoney/" target="_blank">iPhoney Product Page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/08/25/iphoney-a-handy-pair-of-iphone-goggles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Coding Fonts</title>
		<link>http://www.nickawilliams.com/2008/07/10/coding-fonts/</link>
		<comments>http://www.nickawilliams.com/2008/07/10/coding-fonts/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 22:35:49 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/07/10/coding-fonts/</guid>
		<description><![CDATA[Having recently discovered the plethora of coding fonts available online, it occurred to me that quite a bit of thought has been put into something I have always seen as rather trivial. The more I read about it, the more I have come to realize that using a font specifically designed for software development can be extremely beneficial.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post016_001.jpg" align="right" height="125" width="225" />Having recently discovered the plethora of coding fonts available online, it occurred to me that quite a bit of thought has been put into something I have always seen as rather trivial. The more I read about it, the more I have come to realize that using a font specifically designed for software development can be extremely beneficial.</p>
<p>My first thought was, &#8220;what on earth could require so much thought?&#8221; As I continued my browsing, the all the pieces started to fall into place. Some of the things coding fonts specifically try to emphasize/improve upon include:</p>
<ul>
<li>Appropriately styled for typically used sizes (~8pt - 10pt)</li>
<li>Smaller line-height (means seeing more lines of code at once)</li>
<li>More readable symbols (esp. brackets, parenthesis, etc.)</li>
<li>Designed to be monospaced from the ground up (full-width/centered characters, etc.)</li>
<li>Reasonable tab sizing.</li>
</ul>
<p>I&#8217;m sure there are plenty of others, but these are some of the things I found valuable right off the bat.</p>
<p>If you&#8217;re interested in giving some programming fonts a whirl, I highly recommend you start your exploration with <a href="http://www.proggyfonts.com/index.php?menu=download" target="_blank">Proggy Programming Fonts</a>. I particularly like (and currently use) the one called CodingFontTobi which really makes reading through large blocks of code a breeze. I discovered it wasn&#8217;t fully compatible with OS X (tabs would appear as funky symbols), so if you&#8217;ve got a Mac I recommend downloading <a href="http://www.nickawilliams.com/files/CodingFontTobi.dfont">my modified version</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/07/10/coding-fonts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Write .NET Applications in PHP</title>
		<link>http://www.nickawilliams.com/2008/06/16/write-net-applications-in-php/</link>
		<comments>http://www.nickawilliams.com/2008/06/16/write-net-applications-in-php/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 16:24:15 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[.NET]]></category>

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

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/06/16/write-net-applications-in-php/</guid>
		<description><![CDATA[That&#8217;s right, you heard me! It&#8217;s all thanks to a fantastic project called Phalanger, which adds a super-fast execution environment for a very large portion of the PHP scripting language. Certainly this was only a matter of time, combining one of the most popular open-source languages of the web with one of the most powerful [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post015_001.gif" title="PHP in VS 2008" alt="PHP in VS 2008" align="right" height="289" width="225" />That&#8217;s right, you heard me! It&#8217;s all thanks to a fantastic project called <a href="http://www.codeplex.com/Phalanger" target="_blank">Phalanger</a>, which adds a super-fast execution environment for a very large portion of the PHP scripting language. Certainly this was only a matter of time, combining one of the most popular open-source languages of the web with one of the most powerful enterprise-grade frameworks.</p>
<p>One of the coolest things about Phalanger is the way it allows you to decide how to implement PHP syntax. There is almost no barrier to entry, as it is designed to implement PHP the same way it is handled natively, but also allows you to use PHP syntax in an ASP.NET application just as though PHP was simply another option among VB.NET and C#.</p>
<p>I&#8217;ll admit I have yet to take a crack at it, but having worked with both <a href="http://en.wikipedia.org/wiki/.NET_Framework" target="_blank">.NET</a> and <a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29" target="_blank">LAMP</a> technologies I can&#8217;t help but imagine the possiblities. SiteCrafting in particular could benefit from this tremendously, allowing our PHP devs to easily port PHP-based solutions into some of our existing .NET projects. It also means essentially all of our developers could make contributions to a .NET project if the need arose.</p>
<p>I should warn Phalanger is still in it&#8217;s beta phase, and has not yet fully implemented the entire PHP language and common libraries. Though it may not be enterprise-ready yet, I see good things ahead.</p>
<p><span style="font-weight: bold">Link:</span> <a href="http://www.codeplex.com/Phalanger" target="_blank">Phalanger</a><br />
<span style="font-weight: bold">Link:</span> <a href="http://www.php-compiler.net/doku.php?id=tutorials" target="_blank">Tutorials</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/06/16/write-net-applications-in-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;M&#8221; is for Model, &#8220;V&#8221; is for View . . .</title>
		<link>http://www.nickawilliams.com/2008/06/05/m-is-for-model-v-is-for-view/</link>
		<comments>http://www.nickawilliams.com/2008/06/05/m-is-for-model-v-is-for-view/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 16:54:51 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Application Design]]></category>

		<category><![CDATA[Coding Techniques]]></category>

		<category><![CDATA[Design Patterns]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/06/05/m-is-for-model-v-is-for-view/</guid>
		<description><![CDATA[During my morning blog-scan I came across four videos that really set my day off on the right foot. And that song! Oh that song! As much as I can&#8217;t stand it, I&#8217;ll be humming it all afternoon today. If you&#8217;re familiar with the MVC model, then these videos were made for you.
So without further [...]]]></description>
			<content:encoded><![CDATA[<p>During my morning blog-scan I came across four videos that really set my day off on the right foot. And that song! Oh that song! As much as I can&#8217;t stand it, I&#8217;ll be humming it all afternoon today. If you&#8217;re familiar with the MVC model, then these videos were made for you.</p>
<p>So without further adue, enjoy:</p>
<p><strong>PSA #1:</strong><br /><object height="225" width="400">&nbsp;&nbsp;&nbsp;<param name="allowfullscreen" value="true">&nbsp;&nbsp;&nbsp;<param name="allowscriptaccess" value="always">&nbsp;&nbsp;&nbsp;<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1050762&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1">&nbsp;&nbsp;&nbsp; <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1050762&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="225" width="400"></object></p>
<p><strong>PSA #2:</strong><br /><object height="225" width="400">&nbsp;&nbsp;&nbsp;<param name="allowfullscreen" value="true">&nbsp;&nbsp;&nbsp;<param name="allowscriptaccess" value="always">&nbsp;&nbsp;&nbsp;<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1050790&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1">&nbsp;&nbsp;&nbsp; <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1050790&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="225" width="400"></object></p>
<p><strong>PSA #3:</strong><br /><object height="225" width="400">&nbsp;&nbsp;&nbsp;<param name="allowfullscreen" value="true">&nbsp;&nbsp;&nbsp;<param name="allowscriptaccess" value="always">&nbsp;&nbsp;&nbsp;<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1050804&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1">&nbsp;&nbsp;&nbsp; <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1050804&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="225" width="400"></object></p>
<p><strong>PSA #4:</strong><br /><object height="225" width="400">&nbsp;&nbsp;&nbsp;<param name="allowfullscreen" value="true">&nbsp;&nbsp;&nbsp;<param name="allowscriptaccess" value="always">&nbsp;&nbsp;&nbsp;<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1050821&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1">&nbsp;&nbsp;&nbsp; <embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1050821&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="225" width="400"></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/06/05/m-is-for-model-v-is-for-view/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google&#8217;s Search Appliance</title>
		<link>http://www.nickawilliams.com/2008/06/04/googles-search-appliance/</link>
		<comments>http://www.nickawilliams.com/2008/06/04/googles-search-appliance/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 18:47:33 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/06/04/googles-search-appliance/</guid>
		<description><![CDATA[I recently had the opportunity to work with one of Google&#8217;s latest search applances, the Mini. Having no previous experience with any of Google&#8217;s search hardware, this seems an excellent opportunity to offer a newcomer&#8217;s first impressions.
I. Setup &#38; Configuration
Setting things up turned out to be more painless than I had expected. Upon opening the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post005_001.jpg" title="Google Mini" alt="Google Mini" align="right" width="300" />I recently had the opportunity to work with one of Google&#8217;s latest search applances, the Mini. Having no previous experience with any of Google&#8217;s search hardware, this seems an excellent opportunity to offer a newcomer&#8217;s first impressions.</p>
<p><strong>I. Setup &amp; Configuration</strong></p>
<p>Setting things up turned out to be more painless than I had expected. Upon opening the box, I found the contents to be only what was necessary. It consisted of 5 things: the Mini itself, a yellow Cat5 cable, an orange Cat5 crossover cable, a power cable, and the manual/quick-start guide (and a snazzy tshirt!). That&#8217;s it, nothing else! No product catalogs, no coupons, no massive collection of multilingual warranty booklets, and most importantly no unnecessary clutter.</p>
<p><strong>II. User Interface</strong></p>
<p>The UI of the administration panel is clean and to the point - very much what one would expect from Google, and consistent with Google&#8217;s overall style across the rest of their product line. All the administrative functions are organized categorically and only one menu-level deep, making virtually any administrative action no more than 2 clicks away.</p>
<p><strong>III. API/Programmatic Usability</strong></p>
<p>Accessing the mini&#8217;s search capabilities programmatically works very much as one might expect - executing search queries via GET or POST and returning the results in an easily parsable XML format. Additional options are also available, though I found the XML format to be the most flexible for the circumstances. It is so easy to use I actually had to debate whether or not writing a PHP wrapper class was actually necessary. In the end I decided it would make sense, though even then writing the class itself was a breeze.</p>
<p><strong>IV. Thoughts</strong></p>
<p>Overall I am very impressed with this little beast. It clearly isn&#8217;t over-engineered and for its intended scale of use it is not underpowered. I would have liked to see more flexibility in managing the crawling process and in how results were returned, but these things would have been icing on a cake that is already fantastic on its own.</p>
<p>For anyone considering the acquisition of one of these, I highly recommend it. For small to medium applications you can&#8217;t beat the price, especially when compared to the mini&#8217;s bigger brother. And its usability both through the UI and programatically are very intuitive and easy to dive into. Well done Google, well done!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/06/04/googles-search-appliance/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An API reference does a method&#8217;s body good&#8230;</title>
		<link>http://www.nickawilliams.com/2008/03/31/an-api-reference-does-a-methods-body-good/</link>
		<comments>http://www.nickawilliams.com/2008/03/31/an-api-reference-does-a-methods-body-good/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 19:40:13 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/03/31/an-api-reference-does-a-methods-body-good/</guid>
		<description><![CDATA[gotAPI.com is one of the most useful online resources I&#8217;ve come across, primarily because it places resources spread all over the internet into one simple site. I&#8217;ve been using this for quite some time, and have for the most part I have taken its usefulness for granted. Then it occurred to me that I might [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post006_001.png" title="Got API?" alt="Got API?" align="right" border="1" height="63" width="187" /><a href="http://www.gotapi.com/">gotAPI.com</a> is one of the most useful online resources I&#8217;ve come across, primarily because it places resources spread all over the internet into one simple site. I&#8217;ve been using this for quite some time, and have for the most part I have taken its usefulness for granted. Then it occurred to me that I might not be the only one that could find this tool useful (I know, it was a big &#8216;DUH!&#8217; moment). So now I will share this gem with others&#8230;</p>
<p>gotAPI acts as a portal to almost any API/language reference available on the internet. Wondering what that PHP string function is that splits a string into an array? Pour yourself a nice tall glass of gotAPI and find it in seconds. Or if JavaScript is more your thing, browse the DOM to find the function or property you need. The advantage is that it can all be accessed from here, no need to remember countless URLs or stumble through a poorly designed site to find the documentation page. Simply hit up the site and you&#8217;re set.</p>
<p>Customization is another advantage, with the tabbed interface allowing you to pull up multiple reference pages (all searchable with an expandable tree view to your left). Load up all the API&#8217;s related to your current project finding an obscure function is now seconds away. Fantastic!</p>
<p>The fact that I am still excited about this site after months of using it should tell you just how nifty it is. So stop wasting time reading blogs and go check it out!</p>
<p>Link: <a href="http://www.gotapi.com/">gotAPI</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/03/31/an-api-reference-does-a-methods-body-good/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make PHP Growl</title>
		<link>http://www.nickawilliams.com/2008/03/26/make-php-growl/</link>
		<comments>http://www.nickawilliams.com/2008/03/26/make-php-growl/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 20:41:47 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/06/04/make-php-growl/</guid>
		<description><![CDATA[I stumbled upon a fantastic PHP class today and felt compelled to comment on it. Originally written by Tyler Hall, this class allows you to send notifications to any system running Growl from a PHP script. For those of you that don&#8217;t know, Growl is an application written for Mac OS X that is intended [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post007_001.jpg" title="Growl" alt="Growl" align="right" />I stumbled upon a fantastic PHP class today and felt compelled to comment on it. Originally written by <a href="http://clickontyler.com/php-growl/" target="_blank">Tyler Hall</a>, this class allows you to send notifications to any system running Growl from a PHP script. For those of you that don&#8217;t know, <a href="http://www.growl.info/" target="_blank">Growl</a> is an application written for Mac OS X that is intended to act as a universal notification tool (much like the taskbar notification bubbles we&#8217;ve all come to know and love in Windows XP/Vista).</p>
<p>The class itself is incredibly simple and straightforward, and allows you to send notifications using only 5 lines of code. Consider this simple example:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Setup</span>
<span style="color: #000088;">$growl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Growl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$growl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAddress</span><span style="color: #009900;">&#40;</span><span style="">'127.0.0.1'</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$growl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addNotification</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Test&quot;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$growl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">register</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Send Notification</span>
<span style="color: #000088;">$growl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">notify</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Test&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;Test Alert&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;The body of the test alert!&quot;</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>&nbsp;<br />
Pretty nifty isn&#8217;t it? One could very easily integrate this into a logger to notify you immediately of any critical errors with your scripts, or even tell you every time a given page is viewed. So if you want to check out my modified version (a bit more standards-compliant with PHP 5) you can see it <a href="https://secure.sitecrafting.com/file_viewer.php?id=260" target="_blank">here</a>, or view the original author&#8217;s site to see the original.</p>
<p>Download: <a href="https://secure.sitecrafting.com/file_viewer.php?id=260" target="_blank" title="Growl PHP Class">Growl PHP Class</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/03/26/make-php-growl/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP 5.3 - A Heavy Hitter in Training</title>
		<link>http://www.nickawilliams.com/2008/03/12/php-53-a-heavy-hitter-in-training/</link>
		<comments>http://www.nickawilliams.com/2008/03/12/php-53-a-heavy-hitter-in-training/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 12:34:45 +0000</pubDate>
		<dc:creator>nick</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.nickawilliams.com/2008/03/12/php-53-a-heavy-hitter-in-training/</guid>
		<description><![CDATA[The evolution of PHP into an object-oriented programming language has been a very exciting process to watch. I&#8217;ll admit its advancement seems to move at a glacial pace at times, but looking back we certainly have come a long way. With the release of 5.0 we saw PHP leave its childhood and enter its awkward [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.nickawilliams.com/images/blog/post008_001.jpg" align="right" height="64" width="100" />The evolution of PHP into an object-oriented programming language has been a very exciting process to watch. I&#8217;ll admit its advancement seems to move at a glacial pace at times, but looking back we certainly have come a long way. With the release of 5.0 we saw PHP leave its childhood and enter its awkward adolescent stage. At this point there is evidence of a mature and complex object-oriented language while stilll exhibiting many of its younger habits.</p>
<p>This release may be the most significant update PHP has seen since PHP 5. This is because many of the features planned for the first release of PHP 6 are being backported to 5.3. Anyone that has been folowing the development of PHP is likely aware that 6.0 will represent its entrance into what I like to call its adulthood. This milestone will mark the end of support for deprecated non compliant code, and will fully embrace an OO coding style. It&#8217;s not going to be the end-all be-all version of PHP, but it will no longer attempt to cling to its procedural roots.</p>
<p>Let&#8217;s take a look at some of the goodies in store for us in PHP 5.3:</p>
<p><strong>I. Native MySQL Support</strong></p>
<p>As of right now PHP has made use of the external library libmysql to access MySQL databases, which is fine - it works and it works well, so no complaints here. However, the relationship that has developed between PHP and MySQL is quite widespread, and I must admit it seems odd that MySQL has never truly been natively supported. All that will change in 5.3, when PHP will natively support MySQL resulting in a significant performance boost.</p>
<p><strong>II. Variable Static Calls</strong></p>
<p>You are probably already familiar with variable variables and variable function calls. Variable static calls are the next logical addition to this feature set. This concept is best illustrated with an example, so consider the following:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000088;">$className</span> <span style="color: #339933;">=</span> <span style="">'StringUtils'</span>;
<span style="color: #000088;">$functionName</span> <span style="color: #339933;">=</span> <span style="">'FormatPhoneNumber'</span>;
&nbsp;
<span style="color: #000088;">$phoneNumber</span> <span style="color: #339933;">=</span> <span style="">'2535552552'</span>;
<span style="color: #000088;">$newPhoneNumber</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$className</span><span style="color: #339933;">::</span><span style="color: #000088;">$functionName</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$phoneNumber</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #990000;">echo</span> <span style="color: #000088;">$newPhoneNumber</span>;</pre></div></div>

<p>&nbsp;<br />
If we assume that the function StringUtils::FormatPhoneNumber() formats the phone number into a friendly layout, we could expect the above script to output &#8220;(253) 555-2552&#8243; or something similar. This adds a tremendous degree of flexibility to your code, as I&#8217;m sure you can already imagine.</p>
<p><strong>III. Error Reporting</strong></p>
<p>Error reporting has been expanded and has split E_STRICT into two separate reporting levels. E_STRICT now only reports on bad coding style and leaves deprecated code (code that will not be supported much longer) to the E_DEPRECATED level.</p>
<p>Additionally, E_ALL will actually include E_STRICT errors as well (which is what most of us expected to happen when it was first introduced).</p>
<p><strong>IIV. Namespaces</strong></p>
<p>I saved the best for last. Namespace support is hands-down the feature I am most excited about. This is some thing many developers with experience in other languages have been clamoring for since PHP first started supporting classes. Namespaces allow you to group related classes together and help to avoid naming conflicts in more complex applications.</p>
<p>Currently the only way to accomplish this is to simulate namespace funcionality by using very long class names. Consider the Zend Framework as an example, in which you end up with class names like &#8220;Zend_Auth_Adapter_Http_Resolver_File&#8221; or &#8220;Zend_Controller_Router_Route_Module&#8221; - just mildly inconvenient, isn&#8217;t it?</p>
<p>As of PHP 5.3 one could place these classes in namespaces, making them much more manageable:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">namespace Zend<span style="color: #339933;">::</span><span style="color: #004000;">Auth</span><span style="color: #339933;">::</span><span style="color: #004000;">Adapter</span><span style="color: #339933;">::</span><span style="color: #004000;">Http</span><span style="color: #339933;">::</span><span style="color: #004000;">Resolver</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #990000;">File</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Do something here...</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setFile<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Do something else here...</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
We could then instantiate the class like this:</p>

<div class="wp_syntax"><div class="code"><pre class="php php" style="font-family:monospace;">use Zend<span style="color: #339933;">::</span><span style="color: #004000;">Auth</span><span style="color: #339933;">::</span><span style="color: #004000;">Adapter</span><span style="color: #339933;">::</span><span style="color: #004000;">Http</span><span style="color: #339933;">::</span><span style="color: #004000;">Resolver</span> <span style="color: #b1b100;">as</span> HttpResolver;
&nbsp;
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HttpResolver<span style="color: #339933;">::</span><span style="color: #990000;">File</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFile</span><span style="color: #009900;">&#40;</span><span style="">'/home/testuser/file.tmp'</span><span style="color: #009900;">&#41;</span>;</pre></div></div>

<p>&nbsp;<br />
In the above case, we can now instantiate all classes within this namespace using a similar declaration. As you can see, the addition of namespaces allows you to declare the namespace in which a script will execute, greatly shortening the required class declaration. This also introduces the possiblity of namespace aliases, allowing you to reference a namespace with a shorter &#8216;nickname.&#8217;</p>
<p>We could have called the class directly from the namespace (like &#8220;new Zend::Auth::Adapter::Http::Resolver::File()&#8221;) and left out the use construct, but then we would be back to a long class declaration. Even then, this time around PHP will actually be aware of the namespace (and potentially future IDEs, leading to more powerful code-hinting).</p>
<p><strong>Conclusion</strong></p>
<p>That was just a sample of what you can expect when 5.3 is released. With so many additions that were originally planned for PHP 6, this release is going to feel like an early birthday present. This also means we can see these features added to our production environments more quickly considering an upgrade to 5.3 will go much more quickly than a migration to an entirely new verison.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nickawilliams.com/2008/03/12/php-53-a-heavy-hitter-in-training/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
