<?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>unseen &#187; php</title>
	<atom:link href="http://unseen.ws/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://unseen.ws</link>
	<description>my inner geek's domain</description>
	<lastBuildDate>Fri, 18 Mar 2011 16:30:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Speed Tests of Zend_Config Approaches</title>
		<link>http://unseen.ws/2009/05/speed-tests-of-zend_config-approaches/</link>
		<comments>http://unseen.ws/2009/05/speed-tests-of-zend_config-approaches/#comments</comments>
		<pubDate>Tue, 05 May 2009 17:24:15 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=71</guid>
		<description><![CDATA[On a project I&#8217;m working on we are using bits and pieces from the Zend Framework.  We want to utilize the Zend_Config functionality to be able to standardize and make it easier to setup as well as access config information.  We also wanted a way to be able to have the config automatically reflect the [...]]]></description>
			<content:encoded><![CDATA[<p>On a project I&#8217;m working on we are using bits and pieces from the<a href="http://framework.zend.com/" target="_blank"> Zend Framework</a>.  We want to utilize the <a href="http://framework.zend.com/manual/en/zend.config.html" target="_blank">Zend_Config</a> functionality to be able to standardize and make it easier to setup as well as access config information.  We also wanted a way to be able to have the config automatically reflect the environment we are running in (production vs testing vs dev).</p>
<p>Our first stab at it was utilizing ini format configs and the <a href="http://framework.zend.com/manual/en/zend.config.adapters.ini.html"> Zend_Config_Ini</a> importer.  The configs were nice and clean, and had support built in for being environment aware.  This also is the approach the documentation seems to be pushing, almost anything that utilizes a config example in the documentation utilizes ini style configs.</p>
<p>A couple thoughts kept creeping into my mind though.  Whats the performance of converting ini file into the final config object going to be like?  How does it compare to other possible approaches to loading the config object?</p>
<p>Only one way to find out.  Time to fire up the PHP Raceway (my little homegrown testing framework for testing out these sort of things).  What I did was take the example config from the <a href="http://framework.zend.com/docs/quickstart" target="_blank">quick start</a> documentation and added a config section for an array of data, then set up that config for trying out the three different approaches.  First is the standard ini way, second is building an array in php then building the config object from that, and third is creating a blank config object and loading it by hand.  Here are the racers.</p>
<p><span id="more-71"></span></p>
<h3>The Racers</h3>
<h4><strong>The INI approach</strong></h4>
<p><em>Instantiation Code:</em></p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Config_Ini<span style="color: #009900;">&#40;</span>CONFIG_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/config.ini'</span><span style="color: #339933;">,</span> APPLICATION_ENVIRONMENT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p><em> Config File:</em></p>
<div class="codecolorer-container ini twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ini codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>production<span style="">&#93;</span></span><br />
phpSettings.display_startup_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0</span><br />
phpSettings.display_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 0</span><br />
bootstrap.path <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/Bootstrap.php&quot;</span><br />
bootstrap.class <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;Bootstrap&quot;</span><br />
resources.frontController.controllerDirectory <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/controllers&quot;</span><br />
resources.layout.layoutPath <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/layouts/scripts&quot;</span><br />
resources.view<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span><br />
resources.db.adapter <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;PDO_SQLITE&quot;</span><br />
resources.db.params.dbname <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/../data/db/guestbook.db&quot;</span><br />
testarray<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;test1&quot;</span><br />
testarray<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;test2&quot;</span><br />
testarray<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;test3&quot;</span><br />
testarray<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;test4&quot;</span><br />
testarray<span style="">&#91;</span><span style="">&#93;</span> <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;test5&quot;</span><br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>staging : production<span style="">&#93;</span></span><br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>testing : production<span style="">&#93;</span></span><br />
phpSettings.display_startup_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span><br />
phpSettings.display_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span><br />
resources.db.params.dbname <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/../data/db/guestbook-testing.db&quot;</span><br />
<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>development : production<span style="">&#93;</span></span><br />
phpSettings.display_startup_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span><br />
phpSettings.display_errors <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> 1</span><br />
resources.db.params.dbname <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> APPLICATION_PATH </span><span style="color: #933;">&quot;/../data/db/guestbook-dev.db&quot;</span></div></div>
<h4><strong>The PHP Array approach</strong></h4>
<p><em>Instantiation Code:</em></p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Config<span style="color: #009900;">&#40;</span><span style="color: #b1b100;">require</span> CONFIG_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/config.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p><em> Config File:</em></p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'phpSettings'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'display_startup_errors'</span> &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'phpSettings.display_errors'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'boostrap'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'path'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/Bootstrap.php&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'class'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;Bootstrap&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'resources'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'frontController'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'controllerDirectory'</span> &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/controllers&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'layout'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'layoutPath'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/layouts/scripts&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'view'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'db'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'adapter'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;PDO_SQLITE&quot;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'params'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'dbname'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook.db&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'testarray'</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test4'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test5'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'staging'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'teseting'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'phpSettings'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'display_startup_errors'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'phpSettings'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'display_errors'</span><span style="color: #009900;">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'resources'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'params'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbname'</span><span style="color: #009900;">&#93;</span> &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook-testing.db&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$config</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'development'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'phpSettings'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'display_startup_errors'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'phpSettings'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'display_errors'</span><span style="color: #009900;">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'resources'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'db'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'params'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbname'</span><span style="color: #009900;">&#93;</span> &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook-testing.db&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$config</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$config</span><span style="color: #339933;">;</span></div></div>
<h4><strong>The PHP Config Fill approach</strong></h4>
<p><em>Instantiation Code:</em></p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Config<span style="color: #009900;">&#40;</span><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">require</span> CONFIG_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/config_fill.php'</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setReadOnly</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p><em> Config File:</em></p>
<div class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_startup_errors</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_errors</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">boostrap</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">boostrap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">path</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/Bootstrap.php&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">boostrap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">class</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Bootstrap'</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">frontController</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">frontController</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">controllerDirectory</span> <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/controllers&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layoutPath</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/layouts/scripts&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">adapter</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;PDO_SQLITE&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbname</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook.db&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">testarray</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test4'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test5'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'staging'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'teseting'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_startup_errors</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_errors</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbname</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook-testing.db&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span>APPLICATION_ENVIRONMENT <span style="color: #339933;">==</span> <span style="color: #0000ff;">'development'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_startup_errors</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">phpSettings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display_errors</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">resources</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dbname</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> APPLICATION_PATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/../data/db/guestbook-testing.db&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<h3><strong>The results</strong></h3>
<p style="padding-left: 30px;">*times are in seconds*<br />
laps   = 10000</p>
<p>PHP Array Config Format is the WINNER!<br />
total time = 2.70539808273<br />
average time = 0.00027054</p>
<p>Ini Config Format results:<br />
total time = 4.37592101097 which is 1.67052292824 slower than the winner<br />
average time = 0.00043759 which is 0.00016705 per lap slower than the winner<br />
this racer took 62% longer than the winner</p>
<p>PHP Config Fill results:<br />
total time = 3.37267208099 which is 0.66727399826 slower than the winner<br />
average time = 0.00033727 which is 6.673E-5 per lap slower than the winner<br />
this racer took 25% longer than the winner</p>
<h3>Conclusion</h3>
<p>If speed is absolute biggest concern, I&#8217;d have to say go with the building of an array and passing it into the constructer.  The array aproach made our eyes burn, so we ended up going with the hand filling of the config object because the little bit of performance hit was worth the trade off of and easier to work with and read config file.</p>
<p>One huge thing of note.  I run <a href="http://xcache.lighttpd.net/" target="_blank">xcache</a> on my systems, and to be honest could not image running a production system without some sort of opcode cacher.  If you happen to not have access to an opcode cacher these results will change drastically.  Check out what happens when I turn xcache off:</p>
<p style="padding-left: 30px;">*times are in seconds*<br />
laps   = 10000</p>
<p>PHP Array Config Format is the WINNER!<br />
total time = 3.0291249752<br />
average time = 0.00030291</p>
<p>Ini Config Format results:<br />
total time = 4.26868700981 which is 1.23956203461 slower than the winner<br />
average time = 0.00042687 which is 0.00012396 per lap slower than the winner<br />
this racer took 41% longer than the winner</p>
<p>PHP Config Fill results:<br />
total time = 4.76278781891 which is 1.7336628437 slower than the winner<br />
average time = 0.00047628 which is 0.00017337 per lap slower than the winner<br />
this racer took 58% longer than the winner</p>
<p>If you you&#8217;re not running an opcode cacher looks like you had better steer clear of the hand filling approach and go with the array for speed or ini for maintainability.<br />
In the end this sort of micro-optimization may not gain you much in terms of noticeable real world performance, especially when you compare this to the cost of database or api queries.  But if you&#8217;re a speed freak, or are trying to cut down on the work your server is having to do during the day, this is some good food for thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2009/05/speed-tests-of-zend_config-approaches/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>PHP multibyte character dumbness</title>
		<link>http://unseen.ws/2009/04/php-multibyte-character-dumbness/</link>
		<comments>http://unseen.ws/2009/04/php-multibyte-character-dumbness/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 17:29:52 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=68</guid>
		<description><![CDATA[I got bit this week by something that I have somehow managed to avoid via complete dumb luck up till now.  It&#8217;s the fact that PHP is retarded when it comes to handling UTF-8 strings.
I couldn&#8217;t figure out why a string kept coming out with gibberish on the end.  The app was truncating the string [...]]]></description>
			<content:encoded><![CDATA[<p>I got bit this week by something that I have somehow managed to avoid via complete dumb luck up till now.  It&#8217;s the fact that PHP is retarded when it comes to handling UTF-8 strings.</p>
<p>I couldn&#8217;t figure out why a string kept coming out with gibberish on the end.  The app was truncating the string because it was too long, and the spot it was getting truncated at was at a single quote mark.  My initial thinking led me down a road where I thought perhaps it was one of those goofy quote marks and maybe it had gotten incorrectly encoded along the way and was not proper UTF-8.  After determining it was not an encoding problem one of the guys at work reminded me that UTF-8 characters can be mutibyte, and perhaps it had something to do with that.  After a little research, sure enough, the substr function I was using is one of dumb functions and was chopping that multibyte character in half, leaving only the gibberish.</p>
<p>In PHP &lt; version 6 the core string functionality generally disregards the fact that charters could be multibyte, and just assumes 1 byte = 1 character.  In my research I ran across a great page that has a rundown of the different problematic string functions and their level of risk when it comes to dealing with UTF-8:   <a href="http://www.phpwact.org/php/i18n/utf-8">Handling UTF-8 with PHP [Web Application Component Toolkit]</a>.</p>
<p>My particluar situation was resolved by not chopping in the middle of words and instead finding and chopping at the preceding whitespace, but if you don&#8217;t have the luxury of tweaking your logic, I highly recommend taking a look at the <a href="http://us.php.net/mbstring">Multibyte String Library</a>, or procrastinate until PHP6 is out :)</p>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2009/04/php-multibyte-character-dumbness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Dev Communities</title>
		<link>http://unseen.ws/2009/04/web-dev-communities/</link>
		<comments>http://unseen.ws/2009/04/web-dev-communities/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 22:46:50 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=65</guid>
		<description><![CDATA[Ran across this article from Marco Tabini and along with being pretty insightful it cracked me up, and I thought was worth sharing:
The Accidental Businessman: Communities.
Now I&#8217;ve not actually been part of the Ruby community, but I can tell you that when I cross paths with someone who is from it, I generally come away [...]]]></description>
			<content:encoded><![CDATA[<p>Ran across this article from Marco Tabini and along with being pretty insightful it cracked me up, and I thought was worth sharing:</p>
<p><a href="http://mtabini.blogspot.com/2009/04/communities.html">The Accidental Businessman: Communities</a>.</p>
<p>Now I&#8217;ve not actually been part of the Ruby community, but I can tell you that when I cross paths with someone who is from it, I generally come away feeling the same way that Marco does.</p>
<p>The contrast of the PHP and Python communities was pretty good.  Having <a href="http://unseen.ws/2009/03/smoron-goes-live/">recently dipped my toe</a> into the Python community I would have to agree with the keg party vs study group metaphor.  Though I did tend to find the python folks overly harsh and often misinformed when it came to criticism of PHPers.  Maybe our party music is disturbing their studies :)</p>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2009/04/web-dev-communities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbeans for PHP FTW</title>
		<link>http://unseen.ws/2009/03/netbeans-for-php-ftw/</link>
		<comments>http://unseen.ws/2009/03/netbeans-for-php-ftw/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 17:27:47 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=42</guid>
		<description><![CDATA[I ran across a post a while back talking about how Netbeans now has PHP support.  My first thought since I had never used it, and the name makes no bones about it&#8217;s target language, was that this must just be some gimmick aimed at Java devs to make it comfortable for them to slide [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-51" style="margin: 10px 5px;" title="nb-logo21" src="http://unseen.ws/wp-content/uploads/2009/03/nb-logo21.gif" alt="nb-logo21" width="159" height="60" />I ran across a post a while back talking about how Netbeans now has PHP support.  My first thought since I had never used it, and the name makes no bones about it&#8217;s target language, was that this must just be some gimmick aimed at Java devs to make it comfortable for them to slide over to other languages.  The world already had one bloated, slow, Javaesque IDE that could do PHP&#8230;. Eclipse&#8230;. So why make another?</p>
<p>Curiosity got the better of me after hearing about some of the great stuff they were baking into the latest version.  So I <a href="http://bits.netbeans.org/download/6.7/m2/" target="_blank">downloaded the 6.7 M2</a> PHP version and have been using it exclusively for the last week.  Boy were my initial reactions dead wrong.  This thing absolutely rocks for PHP development.  It actually feels like and IDE built for PHP and not at all  like PHP stuffed into a Java IDE (like Eclipse does).  Its fast and <a href="http://www.netbeans.org/kb/docs/php/editorguide.html">packed with features</a>.  Some of the best features are not even the PHP ones.  The HTML, CSS, JS, and SVN support all seem top notch as well (something sometimes lacking in PHP focused IDEs).  The only sucky thing about it so far has been it&#8217;s name.  If any one is listening, please change the name to something that will not scare off non java-heads from trying this awesome IDE.</p>
<p><span id="more-42"></span></p>
<p><img class="size-full wp-image-44 alignnone" title="nb-cube-php-logo" src="http://unseen.ws/wp-content/uploads/2009/03/nb-cube-php-logo.png" alt="nb-cube-php-logo" width="82" height="82" /> There is even a <a href="http://blogs.sun.com/netbeansphp/">blog</a> for the Netbeans for PHP.</p>
<p>I&#8217;ve used quite a large number of IDEs and editors over the years for my PHP hacking.  I&#8217;m not talking fired it up and made a bogus sample page, I&#8217;m talking using for months at a time to write real world projects.  Here is a quick rundown of some of my past PHP hacking tools of choice to give a perspective of where I&#8217;m coming from on this topic (these are in chronological):</p>
<ul>
<li><strong>Textpad</strong>
<ul>
<li>I was n00b at one point :)</li>
</ul>
</li>
<li><strong>Vim</strong>
<ul>
<li>Just too lacking in features for my taste, but still use for server side hacking and locally for quickly popping open a file.  Though I usually use <a href="http://code.google.com/p/macvim/">MacVim</a> these days.</li>
</ul>
</li>
<li><strong>Dreamweaver</strong>
<ul>
<li>When I was still a bit wet behind the ears and not as hard core on the server side this helped to make me more productive with client side coding and was sufficient for my server side needs (especially since I was also doing ColdFusion work at that time).</li>
</ul>
</li>
<li><strong>PHPEdit</strong>
<ul>
<li>Back when this was free and I needed something more robust than Dreamweaver for PHP coding this fit the bill quite nice.</li>
</ul>
</li>
<li><strong>Eclipse</strong>
<ul>
<li>Yes, I have actually used this quite a bit.  At one point I was juggling lots of projects in lots of different languages at the same (PHP, ColdFusion, Python, bash, MySQL, XML, &#8230;) and wanted a way to streamline my workflow.  Eclipse got the job done.  It felt totally half baked and was full of bizarre Java language and concepts, but I was able find pluggins for everything I wanted it to do and it worked pretty well.</li>
</ul>
</li>
<li><strong>Zend Studio &lt;= 5</strong> (before it sucked ass)
<ul>
<li>Once I was able to focus on strictly a LAMP environment I started looking for something more suitable.  I ran across Zend Studio and the wonders of server side debugging in PHP and I was hooked.  I used this IDE for almost 3 years and loved it (it&#8217;s non PHP support was a bit weak but&#8230;)</li>
</ul>
</li>
<li><strong>Zend Studio 6</strong> (when it sucked ass)
<ul>
<li>With version 6 of Zend Studio that decided to turn it into Zend Studio for Eclipse.  I&#8217;ve never seen such a colossal step backwards for a piece of software (with the possible exception of Windows Vista).  It didn&#8217;t support half the features it had in previous versions.  The old studios was fairly lean, but the new one came with all the Eclipse bloat and could barely get off the ground with the main project I was working on at the time.  Even though I could sluggishly code&#8230; I could not use the debugger without the thing crashing.  The love affair with Zend Studio was over and was time to move on.</li>
</ul>
</li>
<li><strong>Komodo</strong>
<ul>
<li>I really like Komodo.  It was my ZendStudio rebound, and is more or less still my IDE of choice until I burn NetBeans in a little more.  I appreciate its support for multiple languages (use it for Python/Django on the <a href="http://smoron.com">Smoron</a> project) and the javascript debugger.  Not exactly sure how I put this&#8230; its good and functional but doesn&#8217;t exactly have a huge WOW factor.</li>
</ul>
</li>
<li><strong>NetBeans</strong>
<ul>
<li>Not sure if it is because its the &#8220;new&#8221; thing for me, or if it is because it is really that good.  But I&#8217;m currently WOWed :)</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2009/03/netbeans-for-php-ftw/feed/</wfw:commentRss>
		<slash:comments>110</slash:comments>
		</item>
		<item>
		<title>Unseen.ws</title>
		<link>http://unseen.ws/2007/06/unseen/</link>
		<comments>http://unseen.ws/2007/06/unseen/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 22:10:42 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=23</guid>
		<description><![CDATA[The website and customer interface for the original Unseen Web Services.]]></description>
			<content:encoded><![CDATA[<p>This site has been many things over the years, but at this stage of it’s  life it is the home on the internet for my inner geek.  A place for me  to showcase my work and a place to spew my thoughts onto the internet.</p>
<p>For a blast from my past check out this screen shot from the orginal &#8220;Unseen Web Services&#8221;</p>
<p><a href="http://unseen.ws/wp-content/uploads/2008/07/unseen.jpg"><img class="alignnone size-thumbnail wp-image-22" title="unseen web services  screen shot" src="http://unseen.ws/wp-content/uploads/2008/07/unseen-150x150.jpg" alt="" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2007/06/unseen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JonathanNicholson.com</title>
		<link>http://unseen.ws/2006/08/jonathannicholsoncom/</link>
		<comments>http://unseen.ws/2006/08/jonathannicholsoncom/#comments</comments>
		<pubDate>Wed, 09 Aug 2006 20:27:05 +0000</pubDate>
		<dc:creator>hrrkii</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://unseen.ws/?p=10</guid>
		<description><![CDATA[This is a site for a musician friend of mine to be able to share news, event info, and music.]]></description>
			<content:encoded><![CDATA[<p>This is a little site I whipped up for a musician friend of mine to be able to share news, event info, and music.</p>
<p><a href="http://unseen.ws/wp-content/uploads/2006/08/headershort.jpg"><img src="http://unseen.ws/wp-content/uploads/2006/08/headershort-300x70.jpg" alt="" title="headershort" width="300" height="70" class="aligncenter size-medium wp-image-154" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://unseen.ws/2006/08/jonathannicholsoncom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

