hello 404 Not Found
Al-HUWAITI Shell
Al-huwaiti


Server : Apache/2.4.52 (Ubuntu)
System : Linux HAN2 5.15.0-185-generic #195-Ubuntu SMP Fri Jun 19 17:11:50 UTC 2026 x86_64
User : servadmin ( 1000)
PHP Version : 8.1.2-1ubuntu2.25
Disable Function : NONE
Directory :  /www/docs/www.obusignal.com/www.obusignal.com/wp-content/cache/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /www/docs/www.obusignal.com/www.obusignal.com/wp-content/cache/ba4883fab1ac99640e7134048c82b087.spc
a:4:{s:5:"child";a:1:{s:0:"";a:1:{s:3:"rss";a:1:{i:0;a:6:{s:4:"data";s:3:"


";s:7:"attribs";a:1:{s:0:"";a:1:{s:7:"version";s:3:"2.0";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:1:{s:0:"";a:1:{s:7:"channel";a:1:{i:0;a:6:{s:4:"data";s:51:"
	
	
	
	
	
	
		
		
	
	
		
		
		
		
		
		
		
		
		
	";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:3:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:10:"VerySimple";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:21:"http://verysimple.com";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:15:"Custom Software";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:13:"lastBuildDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 06 Nov 2013 03:11:09 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"language";a:1:{i:0;a:5:{s:4:"data";s:5:"en-US";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:9:"generator";a:1:{i:0;a:5:{s:4:"data";s:29:"http://wordpress.org/?v=3.7.1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"item";a:10:{i:0;a:6:{s:4:"data";s:48:"
		
		
		
		
		
				
		
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:31:"Compile PHP Extensions for MAMP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:65:"http://verysimple.com/2013/11/05/compile-php-extensions-for-mamp/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:74:"http://verysimple.com/2013/11/05/compile-php-extensions-for-mamp/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Wed, 06 Nov 2013 03:01:08 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:3:{i:0;a:5:{s:4:"data";s:5:"MySQL";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:3:"OSX";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:2;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1407";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:344:"Compiling a PHP extension (shared object / module) from source for MAMP requires a bit of special configuration.  If you follow the standard instructions to phpize, configure and make the .so file then you&#8217;ll most likely end up with a module that&#8217;s incompatible with MAMP due to the fact that it is compiled for whichever [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:3704:"<p>Compiling a PHP extension (shared object / module) from source for <a href="http://www.mamp.info/" target="_blank">MAMP</a> requires a bit of special configuration.  If you follow the standard instructions to phpize, configure and make the .so file then you&#8217;ll most likely end up with a module that&#8217;s incompatible with MAMP due to the fact that it is compiled for whichever version of PHP is pre-installed with OSX.  For example OSX 10.9 Mavericks includes PHP 5.4, while the latest version of MAMP is running PHP 5.5.  Following the default compile instructions will result in a PHP 5.4 binary.</p>
<h3>1. Install System Requirements</h3>
<p>Before you start make sure that both XCode and <a href="http://brew.sh/" target="_blank">Homebrew</a> and autoconf are all installed. Once Homebrew is installed autoconf can be installed with the command:</p>
<p><code lang="bash">brew install autoconf</code></p>
<h3>2. Download and copy appropriate PHP source code</h3>
<p>MAMP doesn&#8217;t include any PHP source code which is needed when compiling PHP extensions.  You&#8217;ll need to download the source for the version of MAMP you are using (for example 5.5.3) from the <a href="http://www.php.net/releases/" target="_blank">PHP Releases</a> page.  Once you download the source and unzip it, you will need to rename the downloaded source folder to simply &#8220;php&#8221; and copy it to the appropriate MAMP folder.  For PHP 5.5.3 that would be:</p>
<p><code lang="bash">/Applications/MAMP/bin/php/php5.5.3/includes/php</code></p>
<p>Once the source code is in this folder, run the following configure command to generate all of the necessary header files.  Note that <em>&#8211;with-php-config</em> argument includes a path to the php-config binary for the specific version you are using with MAMP.  (MAMP does include these binaries by default)</p>
<p><code lang="bash">cd /Applications/MAMP/bin/php/php5.5.3/includes/php<br />
./configure --with-php-config=/Applications/MAMP/bin/php/php5.5.3/bin/php-config</code></p>
<p>You may see some warnings, however as long as all of the header files are generated you should still be able to compile extensions.</p>
<h3>3. Compile Your Custom PHP Extension</h3>
<p>Your machine should now be ready to compile PHP extensions.  At this point you should follow the normal compilation instructions, except you must explicitly specify the path to <em>phpize</em> and you will provide the <em>&#8211;with-php-config</em> argument to the configure command.  For PHP 5.5.3, it would look something like this:</p>
<p><code lang="bash">cd /path/to/your/module/source<br />
/Applications/MAMP/bin/php/php5.5.3/bin/phpize<br />
./configure --with-php-config=/Applications/MAMP/bin/php/php5.5.3/bin/php-config<br />
make</code></p>
<h3> 4. Install Extension for use with MAMP</h3>
<p>You should at this point have a <em>mymodulename.so</em> file that&#8217;s ready to install.  You can move this file to the appropriate subfolder of MAMP.  Using PHP 5.5.3 as an example again, this is located in:</p>
<p><code lang="bash">/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/</code></p>
<p>Once the .so file is there, you can add the appropriate line in php.ini to enable the extension.  For PHP 5.5.3 the .ini file is located at: <em>/Applications/MAMP/bin/php/php5.5.3/conf/php.ini </em></p>
<p><code lang="bash">extension=mymodulename.so</code></p>
<p>Save php.ini, restart MAMP and browse to phpinfo.php to verify your extension is installed.</p>
<h3>5. Troubleshooting</h3>
<p>If your extension doesn&#8217;t load, check <em>/Applications/MAMP/logs/php_error.log</em> for information</p>
<p>&nbsp;</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:70:"http://verysimple.com/2013/11/05/compile-php-extensions-for-mamp/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:1;a:6:{s:4:"data";s:45:"
		
		
		
		
		
				
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:43:"Not Knowing What Else To Do, I Baked A Cake";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:76:"http://verysimple.com/2013/06/21/not-knowing-what-else-to-do-i-baked-a-cake/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:85:"http://verysimple.com/2013/06/21/not-knowing-what-else-to-do-i-baked-a-cake/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 22 Jun 2013 00:33:42 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:9:"WordPress";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1378";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:352:"In the wake of the 9/11 tragedy the Onion posted an article entitled Not Knowing What Else To Do, Woman Bakes American Flag Cake.  With all of the recent press about the NSA&#8217;s programs to gather information on American citizens without warrants, I found myself thinking about that article.  I&#8217;m not a very particularly political [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1777:"<p>In the wake of the 9/11 tragedy the Onion posted an article entitled <a href="http://www.theonion.com/articles/not-knowing-what-else-to-do-woman-bakes-americanfl,221/?ref=auto">Not Knowing What Else To Do, Woman Bakes American Flag Cake</a>.  With all of the recent press about the NSA&#8217;s programs to gather information on American citizens without warrants, I found myself thinking about that article.  I&#8217;m not a very particularly political person and not really interested in making political statements but I found myself wishing there was something I could do.  So I baked a cake, so to speak.</p>
<p>The cake, in my particular case, is actually a WordPress contact form plugin that securely encrypts the messages using PGP/GPG public key encryption.</p>
<p>The plugin is called <a href="http://wordpress.org/plugins/simplesecure/">SimpleSecure</a>.  It&#8217;s a fairly basic form processor but what I&#8217;d consider to be special about it is that GPG is implemented entirely in pure PHP code.  This means that no binary versions of PGP/GPG are needed on the server.  Nearly any other form processor with GPG support does so by making shell calls to an executable installed on the server.  This tends to make installation difficult and even impossible on some hosting environments.  With this plugin you can send encrypted messages from any server that supports PHP.</p>
<p>Releasing this plugin feels like somewhat of an insignificant and meaningless gesture on my part.  But, it&#8217;s something that I&#8217;ve been thinking about for a long time and hopefully it will be useful to those who take their privacy seriously.</p>
<p><strong><a href="http://wordpress.org/plugins/simplesecure/">Download SimpleSecure for WordPress</a></strong></p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:81:"http://verysimple.com/2013/06/21/not-knowing-what-else-to-do-i-baked-a-cake/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:2;a:6:{s:4:"data";s:45:"
		
		
		
		
		
				
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:21:"SVN Command Reference";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:55:"http://verysimple.com/2013/04/15/svn-command-reference/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:64:"http://verysimple.com/2013/04/15/svn-command-reference/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 16 Apr 2013 00:41:52 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:20:"Software Development";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:3:"svn";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1364";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:333:"This is a random collection of SVN functions, in no particular order.  They&#8217;re here for my own selfish reference purposes: View all files not in version control: svn status &#124; grep "^\?" &#124; awk "{print \$2}" Manually add files to SVN Ignore List: export SVN_EDITOR=vim svn propedit svn:ignore /path/to/directory &#160;";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:375:"<p>This is a random collection of SVN functions, in no particular order.  They&#8217;re here for my own selfish reference purposes:</p>
<p>View all files not in version control:</p>
<pre>svn status | grep "^\?" | awk "{print \$2}"</pre>
<p>Manually add files to SVN Ignore List:</p>
<pre>export SVN_EDITOR=vim
svn propedit svn:ignore /path/to/directory</pre>
<p>&nbsp;</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:60:"http://verysimple.com/2013/04/15/svn-command-reference/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:3;a:6:{s:4:"data";s:45:"
		
		
		
		
		
				
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:39:"Install Ngnix on OSX 10.8 Mountain Lion";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:73:"http://verysimple.com/2012/12/06/install-ngnix-on-osx-10-8-mountain-lion/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:82:"http://verysimple.com/2012/12/06/install-ngnix-on-osx-10-8-mountain-lion/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 07 Dec 2012 03:18:29 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:3:"OSX";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1330";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:396:"Ngnix is (among other things) a web server that uses an asynchronous event-driven approach to handling requests, instead of the Apache HTTP Server model that defaults to a threaded or process-oriented approach. Nginx&#8217;s event-driven approach can provide more predictable performance under high loads. This how-to explains installing Ngnix on OSX Mountain Lion using Homebrew. Ngnix [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:4261:"<p><a href="http://nginx.org/" target="_blank"><a href="http://verysimple.com/wp-content/uploads/2012/12/nginx.png"><img class="alignright  wp-image-1367" alt="nginx" src="http://verysimple.com/wp-content/uploads/2012/12/nginx-300x300.png" width="210" height="210" /></a>Ngnix</a> is (among other things) a web server that uses an asynchronous event-driven approach to handling requests, instead of the Apache HTTP Server model that defaults to a threaded or process-oriented approach. Nginx&#8217;s event-driven approach can provide more predictable performance under high loads.</p>
<p>This how-to explains installing Ngnix on OSX Mountain Lion using <a href="http://mxcl.github.com/homebrew/" target="_blank">Homebrew</a>. Ngnix can be built from source, but the Homebrew installation is quick and easy.</p>
<h3>(Optional) Prerequisite Step: Configure PHP-FPM</h3>
<p>If you will be using Ngnix to server PHP pages, then you should <a href="http://verysimple.com/2012/12/06/install-php-fpm-on-osx-10-8-mountain-lion/">configure PHP-FPM for OSX</a> first before proceeding with the Ngnix installation.</p>
<h3>Step 1: Install Homebrew if isn&#8217;t already installed</h3>
<p><code>ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"</code></p>
<h3>Step 2: Create installation folders and set permissions</h3>
<p>Change USERNAME to your own username</p>
<p><code>sudo mkdir /usr/local/var<br />
sudo chown USERNAME:admin /usr/local<br />
sudo chown USERNAME:admin /usr/local/include<br />
sudo chown USERNAME:admin /user/local/lib<br />
sudo chown USERNAME:admin /user/local/var</code></p>
<h3>Step 3: Install Ngnix</h3>
<p><code>brew install nginx</code></p>
<p>Check the output to make sure no errors were encountered. If so, generally brew is pretty good at indicating where the error occurred and possible solutions. Once the installation is complete Nginx will be located at /usr/local/Cellar/nginx/1.2.3/ and the Ngnix config files will be located at /usr/local/etc/nginx/</p>
<h3>Step 4: Launch and verify Ngnix</h3>
<p>First launch Ngnix manually from the command line to verify everything is working properly. Once verified it can be installed as a launch agent</p>
<p><code>/usr/local/sbin/ngnix</code></p>
<p>You won&#8217;t see any output after entering the command, however unless you see errors the server should be running in the background. To verify, open your browser to the default location http://localhost:8080/</p>
<p>Once you have verified that the server is running you can stop the server, or just reload the configuration file with these commands:</p>
<p><code>/usr/local/sbin/ngnix -s stop</code></p>
<h3>Step 5: Customize the configuration file</h3>
<p>Open /usr/local/etc/nginx/nginx.conf with your preferred text editor. Some settings that you may want to change are:</p>
<p><code>listen 80;<br />
root /Users/YOURUSERNAME/Sites;<br />
index index.php index.html index.htm;</code></p>
<p>Optionally if you will be using PHP-FPM you can alter the php location like so:</p>
<p><code>location ~ \.php$ {<br />
include fastcgi.conf;<br />
fastcgi_intercept_errors on;<br />
fastcgi_pass 127.0.0.1:9000;<br />
fastcgi_index index.php;<br />
}</code></p>
<p>If Ngnix is still running you can tell it to reload the conf file with the following. You can also just stop/start the server. If there are any errors in the conf file you&#8217;ll see a message when you reload.</p>
<p><code>/usr/local/sbin/ngnix -s reload</code></p>
<p>You should be able to test and run PHP pages. If things are not working, you can monitor the error log:</p>
<p><code>tail -f /usr/local/Cellar/nginx/1.2.3/logs/error.log</code></p>
<h3>(Optional) Step 6: Install Ngnix as a Launch Agent</h3>
<p>If you want Ngnix to launch when your computer starts without having to launch it manually then you can install a launch agent.</p>
<p><code>mkdir -p ~/Library/LaunchAgents<br />
cp /usr/local/Cellar/nginx/1.2.3/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/</code></p>
<p>Ngnix will now launch when you restart the computer. You can manually start it the first time with:</p>
<p><code>launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist</code></p>
<p>Ngnix should now be running as a service and you can verify again in your browser.</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:78:"http://verysimple.com/2012/12/06/install-ngnix-on-osx-10-8-mountain-lion/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"0";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:4;a:6:{s:4:"data";s:45:"
		
		
		
		
		
				
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:41:"Install PHP-FPM on OSX 10.8 Mountain Lion";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:75:"http://verysimple.com/2012/12/06/install-php-fpm-on-osx-10-8-mountain-lion/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:84:"http://verysimple.com/2012/12/06/install-php-fpm-on-osx-10-8-mountain-lion/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Fri, 07 Dec 2012 00:55:57 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:3:"OSX";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1322";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:344:"OSX 10.8 comes pre-installed with PHP and PHP-FPM. PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites. PHP-FPM is not a web server, but rather is used in combination with a web server such as Apache and Ngnix to handle PHP [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:4481:"<p><a href="http://verysimple.com/wp-content/uploads/2012/12/php-logo.png"><img class="alignright size-thumbnail wp-image-1372" alt="php-logo" src="http://verysimple.com/wp-content/uploads/2012/12/php-logo-150x150.png" width="150" height="150" /></a>OSX 10.8 comes pre-installed with PHP and PHP-FPM. PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites. PHP-FPM is not a web server, but rather is used in combination with a web server such as Apache and Ngnix to handle PHP requests.</p>
<p>Since PHP-FPM is pre-installed on OSX 10.8, you only need to configuration it. This example will install PHP-FPM using the default setup so that the service is listening on port 9000.</p>
<h3>Step 1: Create the working directories</h3>
<p><code>mkdir -p /usr/share/php/var/run<br />
mkdir -p /usr/share/php/var/log<br />
mkdir -p /usr/share/php/var/session</code></p>
<h3>Step 2: Copy and edit the conf file</h3>
<p><code>cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf</code></p>
<p>Once copied, edit /private/etc/php-fpm.conf. PHP-FPM will initially be run manually from the command line. Once everything is confirmed to be running you can optionally configure it to run as a daemon at startup.</p>
<p><code>; process and log file paths<br />
pid = /usr/share/php/var/run/php-fpm.pid<br />
error_log = /usr/share/php/var/log/php-fpm.log</code></p>
<p><code> ; this example will require running php-fpm manually from the command line<br />
daemonize = no</code></p>
<p><code> ; optionally change listener from port to socket (will require tweaking nginx.conf as well)<br />
listen = 127.0.0.1:9000<br />
; listen = /tmp/php-fpm.sock</code></p>
<p><code> ; configure the path to save session files<br />
php_admin_value[session.save_path] = /usr/share/php/var/sessio<code>n</code></code></p>
<h3>Step 3: Confirm Installation</h3>
<p>At this point PHP-FPM is installed and should run.  Try to start the service with the following:</p>
<p><code>/usr/sbin/php-fpm</code></p>
<p>You should see the output &#8220;ready to handle connections.&#8221;  If there are any permission errors then you may need to change file permissions on the working folders created in step 1.  You can verify that the service is running with the following line:</p>
<p><code>ps -e | grep php-fpm</code></p>
<p>Running this line should display 3 running instances (ignore the grep command itself which will also appear in the list)</p>
<h3> (Optional) Step 4: Install as a Daemon</h3>
<p>If you want PHP-FPM to start automatically when the computer starts, you can create a launch file.  If you started PHP-FPM manually and it is still running, be sure to CTRL+c to stop the service first.</p>
<p>Change the daemonize setting in /private/etc/php-fpm.conf:</p>
<p><code>daemonize = yes</code></p>
<p>Create a new daemon plist file for launching php-fpm at startup (thanks to <a href="http://www.group7even.com/blog/2012/02/23/installing-nginx-php-fpm-on-os-x-mountain-lion-10-8/" target="_blank">group7even</a>):</p>
<p><code>sudo touch /Library/LaunchDaemons/net.php.php-fpm.plist</code></p>
<p>Using the text editor of your preference, paste the following into net.php.php-fpm.plist:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt;</span>
&nbsp;
    KeepAlive
&nbsp;
    Label
    net.php.php-fpm
    LaunchOnlyOnce
&nbsp;
    NetworkState
&nbsp;
    ProgramArguments
&nbsp;
        /usr/sbin/php-fpm
&nbsp;
    RunAtLoad
&nbsp;
    ServiceDescription
    PHP FastCGI Process Manager
    StandardErrorPath
    /var/log/system.log</pre></td></tr></table></div>

<p>Once the file has been saved, the service can be started with the command:</p>
<p><code>sudo launchctl load -F /Library/LaunchDaemons/net.php.php-fpm.plist</code></p>
<p>If all goes well you should see no output from the command.  You can confirm that the service is running using the grep command from step 3.</p>
<p><em>Troubleshooting Note: Once you configure your web server to use PHP-FPM you may see warnings in the browser about permission errors with the session path.  If this happens, you may need to adjust the permissions on all files and folders inside /usr/share/php/var so that the daemon can read/write to that path.</em></p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:80:"http://verysimple.com/2012/12/06/install-php-fpm-on-osx-10-8-mountain-lion/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"5";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:5;a:6:{s:4:"data";s:51:"
		
		
		
		
		
				
		
		
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:47:"Installing LAMP Stack on OSX 10.8 Mountain Lion";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:81:"http://verysimple.com/2012/08/21/installing-lamp-stack-on-osx-10-8-mountain-lion/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:90:"http://verysimple.com/2012/08/21/installing-lamp-stack-on-osx-10-8-mountain-lion/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Tue, 21 Aug 2012 18:18:50 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:4:{i:0;a:5:{s:4:"data";s:6:"Apache";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:5:"MySQL";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:2;a:5:{s:4:"data";s:3:"OSX";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:3;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1289";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:339:"This is a follow-up to my previous article on installing a LAMP Stack on 10.7 Lion and explains the steps that you need to get 10.8 Mountain Lion up and running for LAMP development.  (Linux, Apache, MySQL and PHP in case you don&#8217;t already know).  Mountain Lion comes pre-installed with Apache and PHP 5.3.6 so you only [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:6291:"<p>This is a follow-up to my previous article on <a href="http://verysimple.com/2011/08/18/installing-lamp-stack-on-osx-10-7-lion/" target="_blank">installing a LAMP Stack on 10.7 Lion</a> and explains the steps that you need to get 10.8 Mountain Lion up and running for LAMP development.  (Linux, Apache, MySQL and PHP in case you don&#8217;t already know).  Mountain Lion comes pre-installed with Apache and PHP 5.3.6 so you only need to enable those features.  MySQL is the only component that you have to install.</p>
<h3>1.Turn on Apache</h3>
<p>Unlike previous versions there is no longer a &#8220;Web Sharing&#8221; option in System Preferences.  Apache is still installed by default but there is no UI to control it.  You have two options:</p>
<p>a) Install a <a href="http://clickontyler.com/blog/2012/02/web-sharing-mountain-lion/" target="_blank">web sharing preferences pane plugin</a> so you can start/stop the server with a GUI.  Once installed you can start Apache by going to System Preferences.  There will be a new icon for Web Sharing that allows you to start/stop Apache.</p>
<p>b)  Open terminal and run the following if you want Apache to start automatically when your computer boots:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> launchctl load <span style="color: #660033;">-w</span> <span style="color: #000000; font-weight: bold;">/</span>System<span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>LaunchDaemons<span style="color: #000000; font-weight: bold;">/</span>org.apache.httpd.plist</pre></td></tr></table></div>

<p>Once running you now can use the following Terminal commands to start/stop/restart Apache when necessary:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apachectl start</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apachectl stop</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apachectl restart</span></pre></td></tr></table></div>

<h3>2. Edit /private/etc/apache2/httpd.conf</h3>
<p>To enable PHP uncomment (remove the number sign at the beginning of) the line:</p>
<p>#LoadModule php5_module libexec/apache2/libphp5.so</p>
<p>(optional) you can re-map the server root to your home website directory by editing DocumentRoot:</p>
<p>DocumentRoot “/Users/username/Sites”</p>
<p>If you wish to use .htaccess files then look a bit further down AllowOverride and set it to &#8220;All&#8221; like so:</p>
<p>Options FollowSymLinks<br />
AllowOverride All<br />
Order deny,allow<br />
Deny from all</p>
<h3>3. Create the file /private/etc/apache2/users/[your-username].conf</h3>
<p>If you re-mapped your server root to ~/Sites then you will need to create a user-specific configuration file to allow Apache access to your home directory.  The name of the file must match your home directory name with the following contents (replace [your-username] with your home directory name)</p>
<pre>&lt;Directory "/Users/[your-username]/Sites/"&gt;
 Options Indexes MultiViews FollowSymLinks
 AllowOverride All
 Order allow,deny
 Allow from all
&lt;/Directory&gt;</pre>
<h3>4. Copy /private/etc/php.ini.default to /private/etc/php.ini</h3>
<p>OSX includes a default php.ini file that you can use but you must rename or copy it first.  If you don&#8217;t do this then PHP will still run but it will just be using the default initialization settings with no way for you to override them.</p>
<p>Edit these settings in <strong>php.ini</strong> (some of these settings will not come into play until they are installed)</p>
<p>display_errors = On<br />
mysql.default_socket = /tmp/mysql.sock<br />
pdo_mysql.default_socket=/tmp/mysql.sock<br />
date.timezone = &#8216;America/Chicago&#8217;<br />
include_path = &#8220;.:/usr/lib/php/pear&#8221;</p>
<p>sendmail_path = /usr/sbin/sendmail -t -i</p>
<p><em>Note that all instances of &#8221;/var/mysql/mysql.sock&#8221; are replaced with &#8220;/tmp/mysql.sock&#8221;</em></p>
<h3>5. (Optional) Install PEAR</h3>
<p>If you use the PEAR libraries you can install them using the included phar file like so:</p>
<p>sudo php /usr/lib/php/install-pear-nozlib.phar<br />
sudo pear config-set php_ini /private/etc/php.ini<br />
sudo pecl config-set php_ini /private/etc/php.ini<br />
sudo pear upgrade-all</p>
<h3>6.  Install MySQL</h3>
<p>This doesn&#8217;t really require instructions, simply download the latest MySQL from <a href="http://mysql.com/">mysql.com</a>.  I installed the 64 bit version.</p>
<h3>7. (Optional) Install Apache Plugins</h3>
<p>If you use encryption you may need to install mcrypt.  <a href="http://remonpel.nl/2012/01/adding-mcrypt-to-your-osx-lion-php-install/" target="_blank">Instructions</a> have been provided by Remons TechNotes.  You most likely need to have Xcode installed with command line utilities enabled.  Also prior to running the mcrypt instructions on that page, I ran the following to install homebrew and autoconf:</p>
<pre>ruby &lt;(curl -fsSkL raw.github.com/mxcl/homebrew/go)
brew install autoconf</pre>
<h3>8. (Optional) Install Zend Debugger</h3>
<p>If you use the Zend debugger you can install that using <a href="http://verysimple.com/2011/08/16/installing-zend-php-debugger-in-eclipse-on-osx/" target="_blank">these instructions</a>.</p>
<h3>9. (Optional) Enable mail delivery</h3>
<p>Edit the file /etc/hostconfig and add the following line:</p>
<pre><code>MAILSERVER=-YES-</code></pre>
<p>Edit the file /etc/postfix/main.cf and update or add the following line (using your own domain name):</p>
<pre><code>myhostname = local.mydomainname.com</code></pre>
<p>Calls to sendmail can be monitored with the command:</p>
<pre><code>tail -f /var/log/mail.log</code></pre>
<h3>Custom Installs</h3>
<p>These are here for my selfish purposes, install if you so choose!</p>
<pre>sudo pear install --alldeps -f Spreadsheet_Excel_Writer</pre>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:86:"http://verysimple.com/2012/08/21/installing-lamp-stack-on-osx-10-8-mountain-lion/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:6;a:6:{s:4:"data";s:48:"
		
		
		
		
		
				
		
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:40:"Build a Backbone.js Application with PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:74:"http://verysimple.com/2012/05/25/build-a-backbone-js-application-with-php/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:83:"http://verysimple.com/2012/05/25/build-a-backbone-js-application-with-php/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Sat, 26 May 2012 01:57:06 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:3:{i:0;a:5:{s:4:"data";s:13:"Announcements";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:5:"MySQL";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:2;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1268";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:355:"Last year like a lot of other developers I started to get excited about client-side Javascript frameworks.  Particularly interesting to me are frameworks that implement the concept of binding, where changes to your model objects will cause the view to update automatically.  To me it&#8217;s basically a little bit of magic that makes your web [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:2751:"<p><a href="http://phreeze.com/"><img class="alignright size-full wp-image-1269" title="phreeze" src="http://verysimple.com/wp-content/uploads/2012/05/phreeze-e1337997583579.png" alt="" width="410" height="235" /></a>Last year like a lot of other developers I started to get excited about client-side Javascript frameworks.  Particularly interesting to me are frameworks that implement the concept of binding, where changes to your model objects will cause the view to update automatically.  To me it&#8217;s basically a little bit of magic that makes your web application seem alive as it responds to any changes made to the data.</p>
<p><a href="http://documentcloud.github.com/backbone/" target="_blank">Backbone.js</a> is one such Javascript framework.  There&#8217;s many others, but I like Backbone because it doesn&#8217;t impose too much and allows you to pick and choose the parts that you like.  On the flip-side it can be tricky to figure out how to organize your project because there&#8217;s various ways to do any one thing.  As far as PHP, the challenge is that it doesn&#8217;t seem to be the most popular back-end language for use with Backbone.  There&#8217;s not a ton of info explaining how to organize your back-end PHP code.</p>
<p>I spent about two weeks really getting to know Backbone and then another 2 months integrating it into the latest <a href="http://phreeze.com/">Phreeze</a> Builder.  You can use the builder utility to generate a PHP/Backbone app with just a few clicks (based on a MySQL database schema).  If you aren&#8217;t interested in the Phreeze framework, I happen to think that I&#8217;ve done a decent job of organizing a Backbone app into something that you can use as an example.  I&#8217;ve managed to implement things that I haven&#8217;t seen explained like pagination on collections.  For the UI I went with the ubiquitous <a href="http://twitter.github.com/bootstrap/" target="_blank">Bootstrap</a> from Twitter (using quite a lot of the user input controls), so the layout is fairly clean. I&#8217;m not 100% satisfied but I feel like it&#8217;s a good start.  The PHP part of the code is written using the Phreeze framework but essentially it&#8217;s just a standard REST API.  So again if you don&#8217;t really care for Phreeze, you can at least take a look to see how your own PHP code needs to be written to work with Backbone.</p>
<p>If you&#8217;re interested in using Backbone.js with PHP, I&#8217;d be interested in your feedback.  If you don&#8217;t want to install Phreeze you can just <a href="http://phreeze.com/">check out the video</a> or play around with the <a href="http://phreeze.com/cargo/">Live Demo</a> (the DB resets every hour so feel free to edit away).</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:79:"http://verysimple.com/2012/05/25/build-a-backbone-js-application-with-php/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:2:"34";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:7;a:6:{s:4:"data";s:45:"
		
		
		
		
		
				
		

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:35:"RE: ORM Haters:  In Defense of ORMs";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:66:"http://verysimple.com/2012/05/14/re-orm-haters-in-defense-of-orms/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:75:"http://verysimple.com/2012/05/14/re-orm-haters-in-defense-of-orms/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 14 May 2012 17:42:21 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:2:{i:0;a:5:{s:4:"data";s:3:"PHP";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}i:1;a:5:{s:4:"data";s:3:"SQL";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1252";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:356:"This article is in response to a discussion on hacker news regarding ORMs (or object-relational mapping) which is a programming technique where a database is abstracted into classes. Instead of writing SQL at the application level all database interaction is done through objects. There are many ORMs out there, to name just a few: Hibernate for [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:9032:"<p>This article is in response to a <a href="http://news.ycombinator.com/item?id=3970566" target="_blank">discussion on hacker news</a> regarding ORMs (or object-relational mapping) which is a programming technique where a database is abstracted into classes. Instead of writing SQL at the application level all database interaction is done through objects. There are many ORMs out there, to name just a few: Hibernate for Java, Linq for .NET, Doctrine for PHP, SQLAlchemy for Python, ActiveRecord for Ruby, etc.  As the author of an ORM myself (<a href="http://phreeze.com/">Phreeze</a> for PHP) I felt that I could contribute to the conversation.</p>
<p>I do agree with the author that using an ORM incorrectly can lead to horrible database performance.  The problem, as I see it, with ORMs is that it&#8217;s easy to get up and running with only a basic understanding.  But it only takes one simple, common requirement before you need a deeper understanding of the ORM to prevent disastrous performance.  I&#8217;m going to describe the problem as well as the common solutions using one such example:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> customer<span style="color: #66cc66;">.</span>first_name<span style="color: #66cc66;">,</span> customer<span style="color: #66cc66;">.</span>last_name<span style="color: #66cc66;">,</span> purchase<span style="color: #66cc66;">.</span>grand_total
<span style="color: #993333; font-weight: bold;">FROM</span> customer
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> purchase <span style="color: #993333; font-weight: bold;">ON</span> customer<span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">=</span> purchase<span style="color: #66cc66;">.</span>customer_id
<span style="color: #993333; font-weight: bold;">WHERE</span> customer<span style="color: #66cc66;">.</span>last_name <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%smith%'</span></pre></td></tr></table></div>

<p>This is a fairly basic SQL query by any standard.  We&#8217;re simply joining a purchase and customer table together and returning a small number of columns from each table.  It&#8217;s not the most simple query possible, but I would still consider this to be SQL 101 level code.  This is also the kind of query that you would see in the most basic web applications.  Yet returning this result from an ORM with efficient database performance can be surprisingly tricky.</p>
<p>My personal opinion is that some ORM authors and users mistakenly rely on an ORM to avoid ever writing any SQL code.  I&#8217;m of the opinion that the benefit is more simply to separate and abstract SQL from the application logic.  If you feel that the point of an ORM is to avoid writing any SQL at all, then the ORM has to be very, very smart (and often overly complicated).  If you feel that the point of an ORM is to abstract the SQL, then custom SQL code can stil be written in your app, but it simply stays separate from the business logic.  I find this an easier approach because otherwise the ORM becomes bloated trying to handle every possible edge case can be done with SQL statements.</p>
<p>Both have pros and cons.  If you don&#8217;t write any SQL then theoretically you are abstracted from the dialect of one database vendor.  So you could later migrate from, say MySQL to Oracle without worrying that your application has MySQL-specific code.  In my experience this almost never happens, and when it does there still winds up being problems anyway.  If you feel that the point is to separate the SQL from the application level then your application will wind up with SQL code and that may tie you somewhat to the database engine.  However you don&#8217;t have to go to such great lengths configuring the ORM and your SQL is fairly well organized and contained at one level of the application.  In case it isn&#8217;t obvious, I favor the later, simpler approach.</p>
<p>The problem with the example query at the basic level is that it doesn&#8217;t match 1-to-1 with a single database table and requires an ORM to do a SQL join in order to have efficient performance.  If the ORM relationships are not configured and it doesn&#8217;t understand how the two tables relate to each other then the ORM would be forced to do a query on one table first, then loop through the results and query the other table.  For example, there may be 1 query for the customers first and then &#8220;n&#8221; queries where &#8220;n&#8221; is the number of customers.  This is what is known as an <a href="http://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem" target="_blank">n+1 query</a> and if you work with ORMs they are a performance destroyer that should be avoided.</p>
<p>ORMs tend to take one of two approaches: a) be very smart with a lot of &#8220;magic&#8221; or b) be simplistic and require the user to configure everything.  To my knowledge there are 4 common techniques that an ORM uses to deal with the above query:</p>
<p>1. Configure the object mapping at compile time for the foreign key relationship<br />
2. Override the fetching strategy at run-time for the foreign key relationship<br />
2. Use a ORM-specific query language to customize the query at run-time<br />
3. Create a custom object mapping at compile time that abstracts the query</p>
<p><strong>Configure the Object Mapping</strong></p>
<p>With most ORMs there is a concept of a &#8220;mapping&#8221; where you assign database tables, columns and relationships to objects.  Each ORM is a little different in it&#8217;s implementation.  Some require configuration files in the form of XLM, some have compiler directives or meta-data that is added to class itself.  Basically this configuration file then indicates to the ORM how to create the SQL query that will ultimately be sent to the database server.</p>
<p><strong>Override the Fetching Strategy</strong></p>
<p>A &#8220;fetching strategy&#8221; is what tells the ORM how to join tables.  This is usually configured along with the object mapping, but usually can be overridden at run-time.  The two common strategies are &#8220;lazy&#8221; and &#8220;eager.&#8221;  This tells the ORM, for example, when querying the purchases table whether it should always do a join with the customer table (eager), or whether it should query the customer table only when necessary (lazy).  In <a href="http://phreeze.com/">Phreeze</a> the fetching strategy can be overridden globally for the application or just prior to retrieving some data.</p>
<p><strong>ORM-Specific Query Language</strong></p>
<p>Many ORMs provide a query language that controls the SQL which is ultimately created.  The point of this is that you are writing in a vendor-neutral langage so that you are not tied to one database.  In my opinion this strategy simply trades one language dialect for another and doesn&#8217;t separate the SQL logic from the business logic.  I have not personally experienced a business decide to change their database vendor and simple swap it out with zero issues thanks to an ORM.  It&#8217;s a beautiful idea but I&#8217;ve never seen it work and so I question the point.  Additionally you have to learn a psuedo-language and remote-control the SQL that is generated.  I am not personally in favor of this strategy.</p>
<p><strong>Custom Object Mapping</strong></p>
<p>In my opinion the simplest approach is often the best.  A custom object mapping is a technique where you simply create objects and the ORM allows you to provide the SQL that it will use to issue queries.  This allows you to write the most efficient SQL possible for retrieving the data that you want.  In <a href="http://phreeze.com/">Phreeze</a> these are called &#8220;Reporters&#8221;</p>
<p>The main negative to this approach is that you can wind up with overlap in your objects.  For example you may have a Customer object and a Purchase object.  Now additionally you may have a CustomerPurchase object as well which combines the two.  You may have multiple variations of the CustomerPurchase object.  Some people don&#8217;t like this duplication, but in my opinion the ORM &#8211; relational mismatch has to occur someplace.  I&#8217;d rather see some class redundancy than deal with DB performance issues or an overly complex ORM system.</p>
<p>Obviously I&#8217;m a fan of using ORMs and my reasoning is separation of SQL from application logic (rather than avoidance of writing SQL code).  Used properly I feel they are a valuable technique for keeping code organized.  I&#8217;m sure some ORM and non-ORM users would disagree with my opinions on the matter, but we most likely agree that it is an interesting technical problem.  If you have any thoughts feel free to post a comment.</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:71:"http://verysimple.com/2012/05/14/re-orm-haters-in-defense-of-orms/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"2";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:8;a:6:{s:4:"data";s:42:"
		
		
		
		
		
				

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:46:"Great Programmers Don’t Trust Their Own Code";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:77:"http://verysimple.com/2012/04/05/great-programmers-dont-trust-their-own-code/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:86:"http://verysimple.com/2012/04/05/great-programmers-dont-trust-their-own-code/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Thu, 05 Apr 2012 07:51:43 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:12:"Digital Life";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1224";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:364:"Great programmers don&#8217;t trust their own code and assume that they&#8217;ve made mistakes. What exactly do I mean by that?  Notice I didn&#8217;t say that great programmers actually make a lot of mistakes.  In fact great programmers probably make a lot less mistakes than their novice counterparts.  But they approach their code with the attitude [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:1705:"<p><img class="alignnone size-full wp-image-1229" title="code-wide" src="http://verysimple.com/wp-content/uploads/2012/04/code-wide.png" alt="" width="600" height="260" /></p>
<h4>Great programmers don&#8217;t trust their own code and assume that they&#8217;ve made mistakes.</h4>
<p>What exactly do I mean by that?  Notice I didn&#8217;t say that great programmers actually <em>make</em> a lot of mistakes.  In fact great programmers probably make a lot less mistakes than their novice counterparts.  But they approach their code with the attitude that there are bugs that need to be discovered.  If something isn&#8217;t working, they tend to assume first that their code is problematic until proven otherwise.  Novices are often quick to blame an API, framework or even the language when their code isn&#8217;t working.  I&#8217;ve literally gotten into yelling matches with frustrated programmers trying to convince me that a framework is broken.</p>
<p>I think there must be an exponential improvement as you grow.  The better you get, the more you scrutinize your code, the less mistakes you make, the more you scrutinize, etc.</p>
<p>There&#8217;s tools and techniques to help ensure code is solid, but the best programmers I&#8217;ve known will write solid code with or without them.  Their code is good because they approach programming with a defensive attitude.  It doesn&#8217;t matter how many unit tests you write if you are too trusting of your own code.  Buggy software tends to assume best-case-scenarios.  The solid programmer obsesses over his/her code, looking for edge cases.</p>
<p>Do you have a mental process for reviewing your own code?  Leave it in the comments!</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:82:"http://verysimple.com/2012/04/05/great-programmers-dont-trust-their-own-code/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"3";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}i:9;a:6:{s:4:"data";s:42:"
		
		
		
		
		
				

		
		
				
			
		
		";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";s:5:"child";a:5:{s:0:"";a:7:{s:5:"title";a:1:{i:0;a:5:{s:4:"data";s:42:"Apple Address Book not Syncing With iCloud";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:76:"http://verysimple.com/2012/04/01/apple-address-book-not-syncing-with-icloud/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:85:"http://verysimple.com/2012/04/01/apple-address-book-not-syncing-with-icloud/#comments";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:7:"pubDate";a:1:{i:0;a:5:{s:4:"data";s:31:"Mon, 02 Apr 2012 04:46:30 +0000";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:8:"category";a:1:{i:0;a:5:{s:4:"data";s:3:"OSX";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:4:"guid";a:1:{i:0;a:5:{s:4:"data";s:29:"http://verysimple.com/?p=1207";s:7:"attribs";a:1:{s:0:"";a:1:{s:11:"isPermaLink";s:5:"false";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:11:"description";a:1:{i:0;a:5:{s:4:"data";s:336:"I recently started using Apple&#8217;s iCloud service to sync the address book, contacts and calendar between my desktop and phone.  It&#8217;s a fantastic service that allows you to add or edit a contact in one place and have that contact appear on all of your other devices instantly without plugging in your phone to sync. [&#8230;]";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:32:"http://purl.org/dc/elements/1.1/";a:1:{s:7:"creator";a:1:{i:0;a:5:{s:4:"data";s:5:"Jason";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:40:"http://purl.org/rss/1.0/modules/content/";a:1:{s:7:"encoded";a:1:{i:0;a:5:{s:4:"data";s:2602:"<p><a href="http://verysimple.com/wp-content/uploads/2012/04/icloud2.png"><img class="alignright  wp-image-1209" title="icloud2" src="http://verysimple.com/wp-content/uploads/2012/04/icloud2-248x300.png" alt="" width="149" height="180" /></a>I recently started using Apple&#8217;s iCloud service to sync the address book, contacts and calendar between my desktop and phone.  It&#8217;s a fantastic service that allows you to add or edit a contact in one place and have that contact appear on all of your other devices instantly without plugging in your phone to sync.  I was having a strange problem, though.  The Address Book wasn&#8217;t syncing consistently.  Most contacts would sync right away but a few of them I added from the desktop would never seem to sync to my iPhone.</p>
<p>I discovered that there&#8217;s two Address Book &#8220;accounts&#8221; on the desktop.  There&#8217;s a local account called &#8220;On My Mac&#8221; and another &#8220;iCloud&#8221; account.  It&#8217;s possible that you might have even more accounts, for example Gmail.  Only contacts added to the iCloud account will sync.  It seems obvious except that there&#8217;s no visual indication of which contacts belong to which accounts.   As it turns out &#8220;On My Mac&#8221; was set as the default account so whenever I created a new contact on my desktop it wouldn&#8217;t sync.</p>
<p>My solution was to to first set iCloud as the default account.  From that point on all new contacts would be added to the iCloud account and sync instantly.</p>
<p><a href="http://verysimple.com/wp-content/uploads/2012/04/icloud1.png"><img class="alignright size-medium wp-image-1208" title="icloud1" src="http://verysimple.com/wp-content/uploads/2012/04/icloud1-300x159.png" alt="" width="300" height="159" /></a>That left me with the problem of moving the existing &#8220;On My Mac&#8221; contacts into iCloud.  So that I could see which accounts were part of the local account I unchecked the &#8220;enable&#8221; checkbok for the iCloud account.  All of my iCloud contacts became hidden and only the 10 or so local contacts remained visible.  I selected all of the local contacts and dragged them to the desktop, which exported them as vCards.  Next I deleted the local contacts so I wouldn&#8217;t have duplicates when I re-import them.  Finally I re-enabled iCloud and dragged the exported vCards back into Address Book.  At this point all of my contacts were in the iCloud account and everything synced as expected.</p>
<p>Once all of my contacts were moved to iCloud I disabled the local account.</p>
";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:36:"http://wellformedweb.org/CommentAPI/";a:1:{s:10:"commentRss";a:1:{i:0;a:5:{s:4:"data";s:81:"http://verysimple.com/2012/04/01/apple-address-book-not-syncing-with-icloud/feed/";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:38:"http://purl.org/rss/1.0/modules/slash/";a:1:{s:8:"comments";a:1:{i:0;a:5:{s:4:"data";s:1:"8";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}s:27:"http://www.w3.org/2005/Atom";a:1:{s:4:"link";a:1:{i:0;a:5:{s:4:"data";s:0:"";s:7:"attribs";a:1:{s:0:"";a:3:{s:4:"href";s:27:"http://verysimple.com/feed/";s:3:"rel";s:4:"self";s:4:"type";s:19:"application/rss+xml";}}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}s:44:"http://purl.org/rss/1.0/modules/syndication/";a:2:{s:12:"updatePeriod";a:1:{i:0;a:5:{s:4:"data";s:6:"hourly";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}s:15:"updateFrequency";a:1:{i:0;a:5:{s:4:"data";s:1:"1";s:7:"attribs";a:0:{}s:8:"xml_base";s:0:"";s:17:"xml_base_explicit";b:0;s:8:"xml_lang";s:0:"";}}}}}}}}}}}}s:4:"type";i:128;s:7:"headers";a:11:{s:4:"date";s:29:"Tue, 12 Nov 2013 03:44:22 GMT";s:6:"server";s:13:"Apache/2.2.25";s:4:"vary";s:22:"Cookie,Accept-Encoding";s:7:"expires";s:29:"Thu, 19 Nov 1981 08:52:00 GMT";s:10:"x-pingback";s:32:"http://verysimple.com/xmlrpc.php";s:4:"etag";s:34:""e687eb3400a008c9ec742b1a09e993ee"";s:13:"cache-control";s:62:"no-store, no-cache, must-revalidate, post-check=0, pre-check=0";s:6:"pragma";s:8:"no-cache";s:14:"wp-super-cache";s:24:"Served legacy cache file";s:16:"content-encoding";s:4:"gzip";s:12:"content-type";s:23:"text/xml; charset=UTF-8";}s:5:"build";s:14:"20121221190055";}

Al-HUWAITI Shell