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

<channel>
	<title>Paul Skinner</title>
	<atom:link href="http://paulskinner.ca/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://paulskinner.ca</link>
	<description>Official Blog</description>
	<pubDate>Wed, 17 Jun 2009 12:21:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>instanceof and is_a</title>
		<link>http://paulskinner.ca/index.php/2009/06/17/instanceof-and-is_a/</link>
		<comments>http://paulskinner.ca/index.php/2009/06/17/instanceof-and-is_a/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 12:20:34 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://paulskinner.ca/?p=46</guid>
		<description><![CDATA[This sort of thing drives me bonkers:
PHP:  instanceof operator
The instanceof operator was introduced in PHP 5. Before this time is_a() was used but is_a() has since been deprecated in favor of instanceof. Note that as of PHP 5.3.0, is_a() is no longer deprecated.
See also get_class() and is_a().
To deprecate or not to deprecate?  Why depricate a [...]]]></description>
			<content:encoded><![CDATA[<p>This sort of thing drives me bonkers:</p>
<blockquote><p>PHP:  instanceof operator</p>
<p>The instanceof operator was introduced in PHP 5. Before this time is_a() was used but is_a() has since been deprecated in favor of instanceof. Note that as of PHP 5.3.0, is_a() is no longer deprecated.</p>
<p>See also get_class() and is_a().</p></blockquote>
<p>To deprecate or not to deprecate?  Why depricate a function that is very useful is the question I suppose.</p>
<p>I assume this is back in full effect in PHP 5.3.  Thank god.</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2009/06/17/instanceof-and-is_a/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft acknowledges PHP?</title>
		<link>http://paulskinner.ca/index.php/2008/05/21/microsoft-acknowledges-php/</link>
		<comments>http://paulskinner.ca/index.php/2008/05/21/microsoft-acknowledges-php/#comments</comments>
		<pubDate>Wed, 21 May 2008 15:37:48 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=45</guid>
		<description><![CDATA[Rock Out with PHP on Windows! (Track 3)
Today&#8217;s application developers have an incredible variety of technologies that allow them to create rocking web solutions. While that variety provides choice which is a very powerful tool in of itself, the complexities that arise from choice make it difficult to pick the right technology to implement a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><span class="b_header"><strong>Rock Out with PHP on Windows!</strong><strong> </strong>(Track 3)</span><br />
Today&#8217;s application developers have an incredible variety of technologies that allow them to create rocking web solutions. While that variety provides choice which is a very powerful tool in of itself, the complexities that arise from choice make it difficult to pick the right technology to implement a web solution. PHP is one of the most popular technologies to implement web applications. Up until recently, Windows was not a good platform choice for hosting PHP web applications for a variety of reasons. With the advent of the FastCGI component for IIS7 and PHP development tools by Microsoft, Windows has become a veritable stage for PHP developers to build applications that &#8220;go to eleven&#8221;.</p>
<p>Join us in the PHP on Windows track for a rocking series of sessions that will provide you with an overview of the benefits the Windows Server 2008 platform for PHP solutions, how to build PHP web applications on Windows and how to build user interfaces for PHP applications that pop using Microsoft developer and designer tools.</p></blockquote>
<p>I am standing here beside myself.</p>
<p>Microsoft has actually acknowledged PHP?!?  See Technical Tracks <a href="http://technet.microsoft.com/en-ca/events/bb410823.aspx" target="_blank">here</a> for more info.</p>
<p>- P</p>
<p>P.S. This whole thing smacks as though Ballmer himself &#8220;rocked&#8221; his P.R. prowess all over it.</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/05/21/microsoft-acknowledges-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>XAMPP: The easy way to PHP on Windows.</title>
		<link>http://paulskinner.ca/index.php/2008/04/10/xampp-the-easy-way-to-php-on-windows/</link>
		<comments>http://paulskinner.ca/index.php/2008/04/10/xampp-the-easy-way-to-php-on-windows/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 00:14:52 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[Apache]]></category>

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

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=44</guid>
		<description><![CDATA[Looking over the referrer stats, it seems that many people reach this blog through Google searches more or less aligned with &#8220;How do I install PHP on IIS?&#8221;.  I think XAMPP might be a better, and easier answer for many about to embark on a frustrating journey.
I can appreciate the need to install PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Looking over the referrer stats, it seems that many people reach this blog through Google searches more or less aligned with &#8220;How do I install PHP on IIS?&#8221;.  I think XAMPP might be a better, and easier answer for many about to embark on a frustrating journey.</p>
<p>I can appreciate the need to install PHP under IIS for some purposes.  For instance you need your application to co-exist in an environment where you are subject to the existing infrastructure, ranging to the more rudimentary &#8220;It&#8217;s what the client wants&#8221; concerns.</p>
<p>For the most part, I think we can all agree that few, if any visitors to this page would actually be building a web server to be deploy in a data-centre for production/mission critical purposes.  I&#8217;d hazard that the vast majority of these visits are more interested in learning about PHP, dealing with configuration mysteries or just want a sane development environment in which to code, debug and test.</p>
<p><span id="more-44"></span></p>
<p>While the more modern Windows versions of PHP (5.2+) are easier to install and configure, PHP still feels handicapped, slow and clunky.  ISAPI vs CGI, subjectively, ISAPI seems a bit more responsive but more prone to &#8220;space-outs&#8221;.  The &#8220;space-outs&#8221; can be induced by developer error, say a loop was saved with no exit condition&#8230; or a long IO operation, just about all the stupid stuff developers do sometimes while approaching a problem.  It&#8217;s not always the developer tho&#8230; but that&#8217;s a whole other rant that&#8217;s just plain ugly. Recovering these space-outs is a nuisance.  The sure fire method is to kill it via the NET STOP W3SVC (or IISADMIN) and restart it in the same NET START W3SVC.  Sometimes this works, other times, IIS needs to be killed via the Task-Manager.  &#8220;Space-outs&#8221; in CGI mode are easily dealt with by killing the php-cgi.exe process with the Task-Manager, and life goes on.</p>
<p>In some cases, I&#8217;ve even come in after Microsoft &#8220;Patch Tuesday&#8221; and found the ISAPI install of PHP to be rightly violated and left in a completely unusable form.  This is not a good way to spend a morning, mucking about in the damned IIS Administrator to try and figure out what got &#8216;wanged&#8217;.</p>
<p>The point of this is simple, yes, IIS ships with Windows XP and yes, it has a graphical administrator, but unless you have an explicit reason for needing IIS, I recommend that you don&#8217;t.</p>
<p>If you want to learn about PHP, or are a developer looking for a quick and easy way of getting productive in PHP, without the need for IIS:  XAMPP is for YOU.</p>
<p>Though the name sounds and looks like some sort of a Winamp plug-in, don&#8217;t been fooled.  XAMPP is a product by &#8220;Apache Friends&#8221; which is a non-profit project to promote the Apache web server.  XAMPP is an easy to install Apache distribution containing MySQL, PHP and Perl. XAMPP is really very easy to install and to use - just download, extract and start.  The download can be obtained <a href="http://www.apachefriends.org/en/index.html">here</a>.</p>
<p>This has everything you need to get a development environment up, and is vastly easier than configuring each package independently.  Prior to installation, it&#8217;s recommended that you stop and disable IIS otherwise a port conflict will occur when Apache tries to start.</p>
<p>Beware, XAMPP is NOT for PRODUCTION PURPOSES out of the box.  The security is deliberately loose, as not to create development roadblocks.  I&#8217;m sure with some basic security hardening and tuning XAMPP would be a great workhorse.</p>
<p>Windows Cheat Sheet:</p>
<p>URL: http://localhost or http://127.0.0.1 or http://[whateveryourmachinenameis]</p>
<p>Default path: C:\XAMPP</p>
<p>&#8220;wwwroot&#8221;: C:\xampp\htdocs</p>
<p>PHP.INI:  2 Spots</p>
<ol>
<li>C:\xampp\php for command-line based PHP - AND -</li>
<li>C:\xampp\apache\bin for Apache</li>
</ol>
<p>MySQL: The defaults are a tad on the conservative side and probably fine for most purposes. Like all MySQL installations, it employs MyISAM tables by default.  I require InnoDB tables for our application so I modify the my.cnf file found in C:\xampp\mysql\bin.  It&#8217;s really a matter of just uncommenting the innodb section and adding a default_table_type = INNODB under the [mysqld] section.</p>
<p>Apache:  Out of the box, you probably won&#8217;t need to do anything to it.  It just works!  Predictably, httpd.conf  is found in C:\xampp\apache\conf</p>
<p>I&#8217;ve been running it both at home and at the office and frankly, it&#8217;s nice because I don&#8217;t have to do ANYTHING to it.  I simply installed it, configured it, setup both MySQL &amp; Apache as Services from the XAMPP Control Panel and got to work coding.</p>
<p>Really.</p>
<p>That was it and I haven&#8217;t looked back. It never crashes, the configuration never mysteriously changes, and PHP ALWAYS works. Using XAMPP under Windows <strong>will </strong>save you time and frustration.</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/04/10/xampp-the-easy-way-to-php-on-windows/feed/</wfw:commentRss>
		</item>
		<item>
		<title>You know that feeling&#8230; when you&#8217;re not sure where you left your phone?!</title>
		<link>http://paulskinner.ca/index.php/2008/04/07/you-know-that-feeling-when-youre-not-sure-where-you-left-your-phone/</link>
		<comments>http://paulskinner.ca/index.php/2008/04/07/you-know-that-feeling-when-youre-not-sure-where-you-left-your-phone/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 00:07:39 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://paulskinner.ca/?p=43</guid>
		<description><![CDATA[
I&#8217;d just had it.   That wretching financial pain that comes with the prospect of having to buy another &#8220;on-contract full-price&#8221; phone to replace an HTC Touch that replaced a Motorola Razr that my dear wife lovingly laundered no more than 2 months ago.  Then again, I&#8217;ve not had much luck with phones [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://paulskinner.ca/wp-content/uploads/2008/04/htc_touch_front-right2.jpg"><img class="alignright size-medium wp-image-41" style="float: right;" title="htc_touch_front-right2" src="http://paulskinner.ca/wp-content/uploads/2008/04/htc_touch_front-right2-230x300.jpg" alt="" width="230" height="300" /></a></p>
<p style="text-align: left;">I&#8217;d just had it.   That wretching financial pain that comes with the prospect of having to buy another &#8220;on-contract full-price&#8221; phone to replace an HTC Touch that replaced a Motorola Razr that my dear wife lovingly laundered no more than 2 months ago.  Then again, I&#8217;ve not had much luck with phones since about 2004;  averaging one every year or two, so this really sucks&#8230; again.</p>
<p>The human mind is a wonderful thing.  It&#8217;s also the most rambling, dynamic, worry-wart of an affair that conjures up all sorts of scenarios and what-if situations.</p>
<p>So I start wondering&#8230;</p>
<p>Wondering whether or not some jerk is out racking up a massive long distance toll to &#8220;Burkina Faso, Disputed Zone&#8221;.</p>
<p>Wondering if I should drive back to the office just to find it staring at me, mocking me for  the worry, wasted time and fuel.</p>
<p><span id="more-43"></span></p>
<p>Will this be the night that the production server explodes, and I wouldn&#8217;t know about it until dear Carol-Ann (our super front-line support, master of many jobs, ever pleasant and never has a bad day, wonder Grandma!) woke me up to break the news?</p>
<p>Did I leave the WPA keys in an Outlook note?  Did I lock the handheld?  Was I reading News while ruling my kingdom from &#8220;The Throne&#8221;?  (yes okay, I do read news and email, but I never take or place a call from the can!)</p>
<p>I gotta know.   It&#8217;s most likely just sitting there&#8230;  but I gotta know.</p>
<p>The device has got to be in &#8220;stand-by&#8221; mode.  WiFi Off, but configured for the office wireless network.</p>
<p>I need to wake it up. Once awake, how could I know?   Do I have any apps that listen on this device?</p>
<p>If I could only ping the device. (Moment of realization&#8230;.)</p>
<p>Well, this is where a VPN connection and  &#8220;root&#8221; access to the DHCP server kicks ass&#8230;  A quick look through the log and I quickly found the last IP the HTC device was provisioned with.  In this case 192.168.199.34.</p>
<p>I&#8217;ve got a ping going to 192.168.199.34&#8230; that&#8217;s currently returning &#8220;Destination Host Unreachable&#8221;.</p>
<p>I wake the device up with an SMS message and the following sequence of events takes place:</p>
<ul>
<li>The device wakes up and accepts the SMS message.</li>
<li>As part of the wake-up procedure, the device tries to re-establish the last WiFi connection it had; in this case the office WAP&#8217;s.</li>
<li>The WiFi is authenticated, and provisioned the HTC is assigned (usually) the same IP it had out on a lease last time.</li>
<li>My Pings are being replied!</li>
</ul>
<p>The HTC is within WiFi range (but so is the washroom)!! Regardless, I feel better already.  It&#8217;s not a loss yet.</p>
<p>I drafted a quick email to the parties generally responsible for calling me explaining that the phone was most likely on my desk and that any issues should be redirected to my home phone number instead.  Mere moments later, Bill our Chairman of the Board offers to deliver my HTC to me on his way home.  I graciously accepted.</p>
<p>So much worry for such insignificance in the end.</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/04/07/you-know-that-feeling-when-youre-not-sure-where-you-left-your-phone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fedora Core 8: Asterisk 1.4 available!</title>
		<link>http://paulskinner.ca/index.php/2008/04/06/fedora-core-8-asterisk-14-available/</link>
		<comments>http://paulskinner.ca/index.php/2008/04/06/fedora-core-8-asterisk-14-available/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 22:22:56 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[Asterisk]]></category>

		<category><![CDATA[Fedora Core]]></category>

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=37</guid>
		<description><![CDATA[Someone get a mop!

Digging through the FC8 available package list, what do I see but a long list of Asterisk components and features!  This is fantastic news for both Asterisk and the Fedora Project.   This will vastly simplify things for anyone interested in giving Asterisk a try as it&#8217;s no more than [...]]]></description>
			<content:encoded><![CDATA[<p>Someone get a mop!</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/asterisk.jpg"><img title="Asterisk Packages" src="http://paulskinner.ca/wp-content/uploads/2008/04/asterisk-300x168.jpg" alt="" width="268" height="168" /></a></p>
<p>Digging through the FC8 available package list, what do I see but a long list of Asterisk components and features!  This is fantastic news for both Asterisk and the Fedora Project.   This will vastly simplify things for anyone interested in giving Asterisk a try as it&#8217;s no more than a few clicks away requiring no compiling and related complexities.</p>
<p>Was all this in FC7 and I didn&#8217;t notice??!</p>
<p>I couldn&#8217;t wait.  I jumped ahead and installed some of the basic Asterisk packages:</p>
<ul>
<li>Asterisk</li>
<li>Asterisk-voicemail</li>
<li>Asterisk-conference</li>
<li>Asterisk-voicemail-plain</li>
<li>Asterisk-curl</li>
</ul>
<p>This is my first taste of Asterisk 1.4 so I&#8217;m going to keep this really simple.   I&#8217;m going to setup this Asterisk install as a SIP peer to my existing 1.2 installation. For the most part, default installation files will be used on the FC8 side of things.</p>
<p><span id="more-37"></span></p>
<p>For starters, here&#8217;s the proposed setup:</p>
<p>In my current Asterisk 1.2 configuration, I will add a SIP entry as well as an extension entry for 300.  This will be FC8&#8217;s extension on my current Asterisk install.  All calls to extension 300, will be &#8220;routed&#8221; to the FC8 installation of Asterisk.  Think of it this way, I am pretending to be my own SIP provider for this example, the FC8 Asterisk install would be my client.</p>
<p>Add in sip.conf on the &#8220;Provider&#8221; (existing 1.2):</p>
<ul> [300]<br />
type=friend<br />
host=dynamic<br />
context=test<br />
secret=abc123<br />
callerid=300<br />
dtmfmode=rfc2833<br />
nat=yes<br />
disallow=all<br />
allow=ulaw</ul>
<p>In sip.conf on our Asterisk 1.4, the &#8220;Customer&#8221; side on FC8.  (this by no means is a working &#8220;production&#8221; setup, it&#8217;s simply a test of the very basics!)</p>
<p>Right under the [general] section</p>
<blockquote><p>[general]</p>
<p>register=&gt;300:abc123@10.10.50.123:5060</p></blockquote>
<p>and at the very end of the file</p>
<ul> [300]<br />
type=friend<br />
host=dynamic<br />
context=test<br />
secret=abc123<br />
callerid=300<br />
dtmfmode=rfc2833<br />
disallow=all<br />
allow=ulaw</ul>
<p>Again, and the ease of simplicity, the Firewall was disabled on the FC8 VM install.</p>
<p>Before we restart Asterisk, we need to do 2 more things:</p>
<ol>
<li>Find and install some default English sounds.</li>
<li>Configure Extension 300 to do something on both the new Asterisk 1.4. and my existing 1.2 host.</li>
</ol>
<p>After a cursory search of the FC8 Package Manager  nothing really stood out as being &#8220;asterisk-sounds-en&#8221; so I turned to Google for a better answer.  As usual, Google delivers: http://downloads.digium.com/pub/telephony/sounds/ .</p>
<p>The English ULAW pack can be obtained <a title="English Asterisk - Sounds" href="http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-en-ulaw-current.tar.gz" target="_blank">here</a>.</p>
<p>I will probably save some of you a lot of searching with this next bit&#8230;  Asterisk, or whoever packaged FC8 packages wants/has specified that the sounds be installed in <strong>/usr/share/asterisk/sounds/</strong> .  I&#8217;ve not played much with Asterisk 1.4, so this could very well be the default location for sounds.</p>
<p>Finally, the tweak to extensions.conf to handle a call to extension 300 on the FC8, &#8220;Customer&#8221; system.</p>
<p>Right under the [demo] section enter:</p>
<p>exten =&gt; 300,1,Goto(s,restart)</p>
<p>and on the &#8220;Provider&#8221;</p>
<p>exten =&gt; 300,1,Dial(SIP/300@10.10.50.124,30,r)</p>
<p>Dialling 300 from any of the handsets in the house will now cause my existing Asterisk configuration to bridge the call between it and the FC8 Asterisk 1.4 install.  The call to 300 on the FC8 side will be answered and entered into the as-shipped Digium demo.</p>
<p>Don&#8217;t forget to restart or reload the Asterisk configuration on both machines!</p>
<p>That done, I picked up my handset and dialled 300 while keeping an eye on both Asterisk consoles.</p>
<p>The call was answered by my 1.2 install, and another SIP channel created to the FC8 installation.  Once negotiated, the call was bridged and I was greeted by the Digium demo lady informing me that Asterisk had been successfully installed.  (Ironically I had downloaded the &#8220;es&#8221; Spanish version of the sounds and was mildly befuddled as to what had occurred.  I had a moment of realization shortly after and corrected the problem.) .  This configuration is far from complete, but satisfied my curiosity regarding the viability of the FC8 Asterisk packages, and to that&#8230; Thumbs Up!</p>
<p>So yeah, out of the box, Asterisk ships with Fedora Core 8.  You need to get appropriate sound files but other than that it&#8217;s a fully working installation!  I&#8217;m going to need a bit more spare time to fully sink my teeth into Asterisk 1.4; looking in from the outside and from a configuration perspective it doesn&#8217;t seem all that different&#8230; so far.</p>
<p>The next obvious post in this area should discuss upgrading a 1.2 to a 1.4 install&#8230;  Stay tuned, from the sounds of it I should have upgraded long ago!</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/04/06/fedora-core-8-asterisk-14-available/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fedora Core 8 Review</title>
		<link>http://paulskinner.ca/index.php/2008/04/05/fedora-core-8-review/</link>
		<comments>http://paulskinner.ca/index.php/2008/04/05/fedora-core-8-review/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 17:30:47 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Fedora Core]]></category>

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

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

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

		<category><![CDATA[Add new tag]]></category>

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=27</guid>
		<description><![CDATA[I&#8217;m going to cheap out and review FC8 in a VM as I don&#8217;t have a partition to dedicate to a full-on hardware installation (I&#8217;ll pay for this choice a bit later) at the moment.
FC8 was downloaded directly from the fedoraproject.org site in ISO DVD format.
The first part of this post discusses some pains in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to cheap out and review FC8 in a VM as I don&#8217;t have a partition to dedicate to a full-on hardware installation (I&#8217;ll pay for this choice a bit later) at the moment.</p>
<p>FC8 was downloaded directly from the fedoraproject.org site in ISO DVD format.</p>
<blockquote><p>The first part of this post discusses some pains in getting Virtual PC to play nice with FC8&#8230; scroll ahead if you don&#8217;t care about installing under Virtual PC&#8230;</p></blockquote>
<p>A previously installed copy of Microsoft Virtual 2007 will be used to host the FC8 install.  The VM will be allocated 512MB of RAM and a 32GB virtual drive.  The host OS is Windows XP on an Intel E6600 with 3GB of RAM.</p>
<p>Right off the bat, the graphical installation seems to be out of the question.  Once beyond the bootloader, the generic framebuffer doesn&#8217;t seem to be handled well by Virtual PC 2007 but I&#8217;m sure this is fine on real hardware (in hindsight, this probably isn&#8217;t true, if you specify the <a href="http://www.paulskinner.ca/images/fc8/fc8kernelopts.JPG" target="_blank">kernel parameters</a> described below during the installer&#8217;s kernel boot, the graphical install should work just fine).</p>
<p>The text installer software is the ever familiar Anaconda installer, where the 32GB virtual disk was partitioned and formatted using defaults most of the way along. The &#8220;Office and Productivity&#8221;, &#8220;Software Development&#8221; and &#8220;Web Server&#8221;  collections were selected for installation.</p>
<p>The installer chugged through and completed in fairly short order.</p>
<p>The VM was rebooted and then things got interesting.</p>
<p><span id="more-27"></span></p>
<p>It seems that FC8 installed and is up and running. It&#8217;s in the same unreadable/skewed colours that I experienced when trying the graphical installer.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/gdmgreeter24bit.jpg"><img title="gdmgreeter24bit" src="http://paulskinner.ca/wp-content/uploads/2008/04/gdmgreeter24bit-300x112.jpg" alt="gdmgreeter24bit" width="300" height="112" /></a></p>
<p>Again, this reeks of a framebuffer problem that is exasperated by Virtual PC. A quick bit of google-research yields an important kernel parameter:</p>
<p>fbcon=map:9</p>
<p>Digging into the kernel docs, I find the description for this option: (while I enjoy finding the solution, I always question what exactly a given parameter does!)</p>
<blockquote><p>3. fbcon=map:&lt;0123&gt; This is an interesting option. It tells which driver gets mapped to which console. The value &#8216;0123&#8242; is a sequence that gets repeated until the total length is 64 which is the number of consoles available. In the above example, it is expanded to 012301230123&#8230; and the mapping will be:</p>
<p>tty | 1 2 3 4 5 6 7 8 9 &#8230;<br />
fb  | 0 1 2 3 0 1 2 3 0 &#8230;</p>
<p>(&#8217;cat /proc/fb&#8217; should tell you what the fb numbers are)</p>
<p>One side effect that may be useful is using a map value that exceeds the number of loaded fb drivers. For example, if only one driver is available, fb0, adding fbcon=map:1 tells fbcon not to take over the<br />
console.</p>
<p>Later on, when you want to map the console the to the framebuffer device, you can use the con2fbmap utility.</p></blockquote>
<p>How exactly we got to map:9 is either a well informed choice or the result of trial and error, none-the-less, we can see FC8 from within Virtual PC&#8230; well a text console anyways.</p>
<p>So, wanting to experience FC8 from a graphical perspective, I turned the guns onto X. Starting &#8220;gdm&#8221; does the same nasty colour screwiness experienced earlier. X will require a little tweak.  Thankfully the research that uncovered &#8220;fbcon&#8221; also hinted that a reduction in X colour depth would also be needed. A quick 4 byte change to /etc/X11/xorg.conf is needed</p>
<blockquote><p>Section &#8220;Screen&#8221;<br />
Identifier &#8220;Screen0&#8243;<br />
Device &#8220;Videocard0&#8243;<br />
DefaultDepth <strong>16</strong><br />
SubSection &#8220;Display&#8221;<br />
Viewport 0 0<br />
Depth <strong>16</strong><br />
EndSubSection<br />
EndSection</p></blockquote>
<p>Swap out the Depth/DefaultDepth of 24 for 16&#8217;s as shown above.</p>
<p>Another common problem with this seems to be the lack of mouse support within X when under Virtual PC. This again is mitigated with another kernel option &#8220;i8042.noloop&#8221;. Edit your /boot/grub/menu.lst file and edit the following line:</p>
<pre>kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet</pre>
<p>with</p>
<pre>kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet fbcon=map:9 i8042.noloop</pre>
<p>Reboot the VM.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Alright, a review of Fedora Core 8 can now proceed!</p>
<p>Looking at the <a title="FC8 Release Notes" href="http://docs.fedoraproject.org/release-notes/f8/iso/en_US/" target="_blank">release notes</a>, we can expect</p>
<ul>
<li>Gnome 2.20 that offers mail notification in the Evolution client.</li>
<li>New PDF form completion functionality from the Evince viewer</li>
<li>Revamped Appearance control panel, and help.</li>
<li>Online Desktop</li>
<li>KDE 3.5.8</li>
<li>CodecBuddy:  This sounds interesting as codec installation is usually a nuisance&#8230;</li>
<li>OpenOffice.org 2.3</li>
<li>Improved Bluetooth devices</li>
<li>Improved suspend/resume and multimedia keyboard support.</li>
<li>Improved power management</li>
<li>Infinity, the newest look and feel from the Fedora Art team</li>
<li>New graphical firewall configuration tool, system-config-firewall that replaces system-config-securitylevel.</li>
</ul>
<p>What&#8217;s missing from the release notes is that Asterisk from Digium is available as part of the Package Manager!  I&#8217;ve dedicated a <a title="Fedora Core 8: Asterisk 1.4 available!" href="http://paulskinner.ca/index.php/2008/04/06/fedora-core-8-asterisk-14-available/" target="_blank">post</a> to this that validates and begins to explore this important FC8 package</p>
<p>So, first order of business is to satisfy the Package Manager, and let it apply the 238 updates.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/238-packages.jpg"><img class="alignleft size-medium wp-image-29" style="float: left;" title="FC8 238-packages" src="http://paulskinner.ca/wp-content/uploads/2008/04/238-packages-300x168.jpg" alt="FC8 238-packages" width="300" height="168" /></a></p>
<p>While the updates were applying I played around with the user interface, and nothing remarkable jumps up, it&#8217;s the very familiar Gnome interface with  neat-o gradient-purple-arc desktop art.</p>
<p>The age old question of how quickly I could become productive with a given distro is always a great test.</p>
<p>Here&#8217;s the goal:</p>
<ol>
<li>a LAMP installation</li>
<li>Eclipse with the PDT (PHP Development Tools)</li>
<li>MySQL Query Browser and Administrator</li>
</ol>
<p>Eclipse</p>
<p>For some reason, I decided to pick-up and install Eclipse first.  The Europa core is easy enough, simply installed it via the FC8 Package Manager.  As usual, installing the PDT is an exercise in finding the right package repositories from Eclipse.  This is really a matter for another post, but you&#8217;d think that the Update Manager in Eclipse would have some way of retrieving the package source path for the plug-ins you want to install.  I mean, really, it&#8217;s asking you satisfy the dependency for &#8220;org.eclipse.gef.something&#8221; and there isn&#8217;t a central directory that maps to the namespace?  Anyhow, for the sake or anyone interested, to install PDT, you need to add some Remote Sites to the Eclipse Update Manager Find and Install feature.</p>
<p>These sites are:</p>
<ul>
<li>EMF: http://download.eclipse.org/modeling/emf/updates</li>
<li>PDT: http://download.eclipse.org/tools/pdt/updates</li>
<li>GEF: http://download.eclipse.org/tools/gef/update-site/releases/site.xml AND</li>
<li>WST: http://download.eclipse.org/webtools/updates/</li>
</ul>
<p>(I stand corrected, all you really need to add is the PDT and in most cases Eclipse ships with the appropriate webtools packages.  Pay close attention and select only the packages PDT and WST from the chooser and you should only have 2 things selected)</p>
<p>While Eclipse is chugging away at downloading and installing PDT and it&#8217;s baggage, let see what state FC8 leaves Apache in after the install.</p>
<p>A quick &#8220;service httpd start&#8221; fires up Apache and I pointed Firefox to http://localhost.</p>
<p>Up comes the Fedora Test Page.</p>
<p>PHP</p>
<p>I&#8217;m presuming there will be no PHP installed at this point, but I&#8217;ll create a PHP test page that will let us know we&#8217;ve got it done.   Create a file in /var/www/html called test.php and add &lt;?phpinfo();?&gt; to the first line and save.  Set the file permissions to be globally readable &#8220;chmod o+r test.php&#8221;.  Navigate to http://localhost/test.php</p>
<p>To my astonishment, PHP 5.2.4 seems to be installed configured and ready to go!</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/php524.jpg"><img class="alignleft size-medium wp-image-32" title="PHP 5.2.4" src="http://paulskinner.ca/wp-content/uploads/2008/04/php524-300x168.jpg" alt="PHP out of the box" width="300" height="168" /></a></p>
<p>MySQL</p>
<p>This is too easy, back to the Package Manager, and choose MySQL Database from the &#8220;Servers&#8221; package group.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/mysql.jpg"><img class="alignnone size-medium wp-image-33" title="MySQL from the FC8 Package Manager" src="http://paulskinner.ca/wp-content/uploads/2008/04/mysql-300x168.jpg" alt="" width="300" height="168" /></a></p>
<p>After letting it install, I jumped back to the shell where a &#8220;service mysqld start&#8221; was issued.  MySQL snapped to life and initialized it&#8217;s defaults. No annoying &#8220;mysql.sock&#8221; errors whining about mis-configured symlinks to the sockets or anything!!  I always follow up with a &#8220;<img src="file:///C:/DOCUME%7E1/skin/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" />mysql_secure_installation&#8221; which really tightens up the security of the MySQL server.</p>
<p>There you have it, MySQL extensions were installed and enabled by default by FC8 given my package selections during the initial install.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/mysqlphp.jpg"><img class="alignnone size-medium wp-image-34" title="mysqlphp" src="http://paulskinner.ca/wp-content/uploads/2008/04/mysqlphp-300x168.jpg" alt="" width="300" height="168" /></a></p>
<p>I must say, I wasn&#8217;t looking forward to this, but wow&#8230; in the end it was painless.   I have a viable PHP development environment ready to go in only a few minutes with Eclipse being the (and only mild at that) nuisance.</p>
<p>Firewall</p>
<p>Given all this is running in a VM onto of XP, I pointed Firefox from my XP desktop to the VM&#8217;s IP via http://10.10.50.167/test.php to see if the Apache installation was listening or firewalled by default.  The page timed out.</p>
<p>Assuming again that the FC8 Firewall does not allow port 80, I flipped back to FC8 and opened up the Firewall Configuration and made port 80 &#8220;Trusted&#8221;.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/port80.jpg"><img class="alignnone size-medium wp-image-35" title="Enabling Apache port 80" src="http://paulskinner.ca/wp-content/uploads/2008/04/port80-300x168.jpg" alt="From the FC8 Firewall configuration" width="300" height="168" /></a></p>
<p>Upon refreshing Firefox on the XP side, the phpinfo() test page came right up.  I don&#8217;t have a copy of FC7 installed to compare against, but this brand-new Firewall Configuration feels much better. It&#8217;s much more intuitive to use and the feedback seems vastly improved.  Again, if memory serves me, this new version allows you to address all sorts of other devices (eth, ippp,isdn,ppp,tun) that simply weren&#8217;t available as selectable options in the previous version.    The default rules seem to be fairly tight mostly allowing services that employ encrypted protocols while denying most everything else.</p>
<p>Finally, to satisfy the goals of this review, the mysql-gui-tools package needs to be installed as it provides MySQL Query Browser and the MySQL Administrator.  Again, using the FC8 package manager, these are installed in mere moments.</p>
<p><a href="http://paulskinner.ca/wp-content/uploads/2008/04/mysqladministrator.jpg"><img class="alignnone size-medium wp-image-36" title="mysqladministrator" src="http://paulskinner.ca/wp-content/uploads/2008/04/mysqladministrator-300x168.jpg" alt="" width="300" height="168" /></a></p>
<p>This is a good spot to wrap up this post.  FC8 continues to deliver a robust installation that is well thought out.  The real gold of this distribution is the Package Manager that like many other distros provides a wealth of software.</p>
<p>More importantly:  The software installed from the Package Manager is configured in a manner that just works;  this hasn&#8217;t always been the case.  Previous versions have not been so gentle, especially in the realm of getting a LAMP server working in minutes rather than hours of trying to dis-assemble an RPM dependency hell!</p>
<p>I&#8217;ll keep this VM around and document any other observations as I come across them.</p>
<p>I&#8217;d really like to allocate a partition on my desktop to see how the 3d desktop features run on my hardware (twin 8800GT).</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/04/05/fedora-core-8-review/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet Neighbourhood Map:  Emerging Art?</title>
		<link>http://paulskinner.ca/index.php/2008/03/23/internet-neighbourhood-map-emerging-art/</link>
		<comments>http://paulskinner.ca/index.php/2008/03/23/internet-neighbourhood-map-emerging-art/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 01:31:43 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

		<category><![CDATA[internet mapping relationships sites]]></category>

		<guid isPermaLink="false">http://paulskinner.ca/?p=24</guid>
		<description><![CDATA[I purport no expertise in web-marketing particularly because I find the concept abstract and  a voodoo/pseudo-science of sorts.  From my perspective, it&#8217;s in the same realm as astrology. Both make for interesting stories.  What works here may not work there&#8230; for reasons that usually escape me completely.  It&#8217;s all very emotional [...]]]></description>
			<content:encoded><![CDATA[<p>I purport no expertise in web-marketing particularly because I find the concept abstract and  a voodoo/pseudo-science of sorts.  From my perspective, it&#8217;s in the same realm as astrology. Both make for interesting stories.  What works here may not work there&#8230; for reasons that usually escape me completely.  It&#8217;s all very emotional which by nature makes it unpredictable and subject to interpretation.</p>
<p>Some of my experience has been applying web marketing concepts that others have developed.     I&#8217;ll avoid the delving into the various requirements and solutions as they&#8217;ve varied over the years, and aren&#8217;t really the point of this but rather all centre around spending money in some form or another to get the right traffic to your site to eventually sell something to someone.</p>
<p><span id="more-24"></span></p>
<p>While it strikes me that figuring out &#8220;The Right Thing To Do&#8221; has consumed a ton of money and produced a lot of sweat,  less attention is paid to the &#8220;Wrong Thing To Do&#8221;.  Perhaps one of the big obvious no-nos is in the linking strategy of your web presence, in that you don&#8217;t want to spend your advertising dollars getting a prospect to your site only to have them land into your competition&#8217;s via a third party linked from your site.   I&#8217;ve even  attended marketing scrums that entertained the notion of outlawing all off-site links in order to avoid this potential problem.   This sort of a ban is a surefire means of mitigating the problem, but depending on the nature of the web business would probably be short lived.   In some cases, partner programs would require mutual link reciprocation that could open the door to the &#8220;Wrong Thing&#8221;.</p>
<p>So, how with a minimal amount of effort scan your site, and the sites you link, at given depth of recursion to determine if you are indirectly linking your competition?</p>
<p>This exercise isn&#8217;t going to be for everyone,  some strategies will be centred around strong inter-partner links programs while companies in a smaller niche market will want to have a look at this.   Interested companies will need to know their competition and be able to identify their web aliases, and know how they present on the web.</p>
<p>For this case study we&#8217;ll examine a specific website.  The selected site is www.f-prot.com, the home of a virus scanning and cleanup tools.   This site was chosen due to the nature of it&#8217;s market.   F-Prot competes with all other virus scanners, such as Norton, McAfee, Trend and countless others.   It stands to reason that F-Prot would want to maximize sales with the traffic it receives by keeping prospect on-site with the easiest path to the money-taking-part.</p>
<p>The Concept:</p>
<p>A bot will be seeded with F-Prot&#8217;s main URL.  The bot will pull the content of the page and extract all the links found on the page.  The links extracted from this process will be fed back into a work queue, where they will be processed in sequence using the same tactic until the bot has traversed the site and is well on it&#8217;s way to traversing the first 2 or 3 recursive tiers of the linked sites.</p>
<p>The data collected from this crawl will contain the required information to re-create the hierarchy to illustrate the inter-site relationships.   This hierarchy will then be expressed using a organization tree graphic which will provide an at-a-glance means of visualizing the inter-site relationships to determine if an organization is providing a path potentially referring traffic to their competition.</p>
<p>The environment:</p>
<p>I code PHP on a daily basis and would like to re-use my script libraries, so these will be command line invoked scripts for the most part. I also want an excuse to polish up on my application of XMLRPC.</p>
<p>The Data model:  A MySQL database with 5 tables</p>
<ol>
<li>Hosts (represents a given hostname)
<ol>
<li>id integer</li>
<li>hostname varchar(255)</li>
<li>protocol integer (could be an enum, but basically 1 = HTTP, 2 = HTTPS for now)</li>
<li>nocrawl integer</li>
</ol>
</li>
<li>Documents
<ol>
<li>id integer</li>
<li>host_id integer</li>
<li>ref mediumtext</li>
<li>timestamp integer</li>
<li>dispatched integer</li>
<li>title medium text</li>
</ol>
</li>
<li>Links
<ol>
<li>id integer</li>
<li>from_doc_id integer</li>
<li>to_doc_id integer</li>
</ol>
</li>
<li>Words
<ol>
<li>id integer</li>
<li>lnguge_id integer (1 = English for now)</li>
<li>word varchar(128)</li>
<li>last_tidy integer</li>
</ol>
</li>
<li>Document_Words
<ol>
<li>id integer</li>
<li>document_id integer</li>
<li>word_id integer</li>
</ol>
</li>
</ol>
<p>The pieces:</p>
<p>An XMLRPC server that exposes a number of functions to the worker (client).</p>
<ul>
<li> get_link():  Get a link for processing.   The link returned will be any random link from any host with a &#8216;nocrawl&#8217; field equal to 0 and the document has a &#8216;dispatched&#8217; field equal or less than 0.</li>
<li>process($doc_id, $title,$links,$words): Handle the work preformed by the worker. Here, any new links (via $links) and hosts are added to the respective tables (if they don&#8217;t already exist) and are scheduled for processing.  As a side effect, the process method requires that title and an words array be passed as well.</li>
</ul>
<p>A XMLRPC Client that implements proxy methods to the server defined above.  Using this approach, the &#8220;Workers&#8221; can operate in a distributed fashion without the need for database connectivity.</p>
<p>A worker script that uses the XMLRPC client.</p>
<p>The worker script will call get_link, fetch the content of the page and parse the content creating 3 pieces of data.  An array of all the words found on the document, an array of all the links found on the page, expanded to absolute URL, and finally the contents of the &lt;title&gt; tag of the content.</p>
<p>When the worker completes parsing, it calls the process() method on the client.  The server services the request and stores the specified data within the previously referenced table structure, adding or updating as needed.</p>
<p>Executing the worker on single seed page that contains one or more links recursively seeds the documents table with additional work, and as work completes, new work is almost always added and the system has more than enough to keep it going.  What we end up with is a database that contains a hierarchy of everything that was linked from the seed site, and anything underneath in a recursive fashion.</p>
<p>Output Products:</p>
<ul>
<li> The complete seed-site outgoing link hierarchy.</li>
<li>An Internet biased word dictionary.</li>
<li>A relationship between Words, Documents and Hosts</li>
<li>A quasi-search engine feature.</li>
</ul>
<p>By themselves, the output products are useful in addressing the initial need of generating a list of linked sites to a given depth of recursion by simply using SQL and some PHP to generate some reports.</p>
<p>More interesting,  is expressing the site hierarchy using high performance charting tool.  The brains at AT&amp;T  sorted this out moons ago with something called Graphviz. It&#8217;s a portable graphing tool comprised of various rendering programs  that use a scripting language to define the on-graph relationships.    The script is fed into the desired executable and output of your choosing can be specified.</p>
<p>After a few hours of letting the bot crawl, I decided to play with Graphviz and all the existing data collected from the f-prot crawl, just to get a feel of how things were progressing.  The following is one of the first images generated (caution, it&#8217;s huge). <a title="F-Prot.com seeded Link Map" href="http://paulskinner.ca/wp-content/uploads/2008/03/fprot.png">F-Prot.com seeded Link Map.</a></p>
<p>The bots are well on their way but are getting side tracked and sucked into walking through a lot of off-seed content.  I&#8217;ve let the bots run pretty much unmoderated and would see what emerges &#8220;organically&#8221;.</p>
<p>To that end, created a script that generated a Gviz script for all the sites the bot has crawled.  Here it is at 10% of the original size.</p>
<p><a title="Sites seen by the phpcrawl bot" href="http://paulskinner.ca/wp-content/uploads/2008/03/everything10percent.jpg"><img src="http://paulskinner.ca/wp-content/uploads/2008/03/everything10percent.thumbnail.jpg" alt="Sites seen by the phpcrawl bot" /></a></p>
<p>The output is pretty neat to look at in a resized manner.  It&#8217;s almost a form of emerging Internet art, which obviously was not my original intent.     For what it&#8217;s worth, the rendered Jpeg is 29MB in size 11860 x 12380 taking a good 30 minutes to render on a borrowed Sun X2200 Quad CPU with 4Gb of memory.</p>
<p>That&#8217;s about it for now, the bots must go on.    I&#8217;m going to have to start shopping for partners to provide bandwidth and processing power as my lowly cable connection is truly being violated.    So far the bots have fetched and parsed 611545 documents from 15343 hosts while operating on a part-time (with my idle  CPU and network hours).</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/03/23/internet-neighbourhood-map-emerging-art/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Combining Things</title>
		<link>http://paulskinner.ca/index.php/2008/03/19/combining-things/</link>
		<comments>http://paulskinner.ca/index.php/2008/03/19/combining-things/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 04:55:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://paulskinner.ca/?p=22</guid>
		<description><![CDATA[Things have been quiet for me on the blog front, namely my &#8220;phplinuxandthelike&#8221; hosted with WordPress.com has been idle since October and desperately needs some attention.  Though the idea of &#8220;phplinuxandthelike&#8221; is great,  it&#8217;s also very niche and doesn&#8217;t lend itself well to other topics I find interesting.
So, with that in mind, I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>Things have been quiet for me on the blog front, namely my &#8220;phplinuxandthelike&#8221; hosted with WordPress.com has been idle since October and desperately needs some attention.  Though the idea of &#8220;phplinuxandthelike&#8221; is great,  it&#8217;s also very niche and doesn&#8217;t lend itself well to other topics I find interesting.</p>
<p>So, with that in mind, I&#8217;m moving all my content to this, the Official Paul Skinner blog.  This will allow me to post about anything without being constrained by a &#8220;themed&#8221; blog&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2008/03/19/combining-things/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MS Exchange functionality on Linux? Zimbra ties it all together.</title>
		<link>http://paulskinner.ca/index.php/2007/10/16/ms-exchange-functionality-on-linux-zimbra-ties-it-all-together/</link>
		<comments>http://paulskinner.ca/index.php/2007/10/16/ms-exchange-functionality-on-linux-zimbra-ties-it-all-together/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 01:29:31 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[Linux]]></category>

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

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

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=13</guid>
		<description><![CDATA[The never-ending quest to put a bullet in the Microsoft Exchange server has just chambered another live-round in the form something called Zimbra.  To be fair, the Exchange server I manage is very stable, and runs great.  I just loath the price of licenses and dread the obscure solutions to seemingly easy tasks.
I [...]]]></description>
			<content:encoded><![CDATA[<p>The never-ending quest to put a bullet in the Microsoft Exchange server has just chambered another live-round in the form something called <a title="Zimbra Home" href="http://zimbra.com/" target="_blank">Zimbra</a>.  To be fair, the Exchange server I manage is very stable, and runs great.  I just loath the price of licenses and dread the obscure solutions to seemingly easy tasks.</p>
<p>I don&#8217;t know where this product has been hiding, but it caught my eye last week as a result of a Stumble! click.   It seems Yahoo! has spent some coin and <a href="http://www.readwriteweb.com/archives/zimbra_interview.php" target="_blank">bought out Zimbra</a> but is continuing to offer the code and binaries under a variety of licensing models.   This is all good news for IT departments and service providers everywhere!</p>
<p>There are a number of How-To documents on the Internet that describe implementing various services to support an Exchange&#8217;esque environment.  I&#8217;ve tried it, it works, but it&#8217;s ugly and a devil to maintain.  Zimbra provides all the necessary technologies in one suite and centralizes the configuration in a uniform interface.   The clever folks at Zimbra did it RIGHT.  Both the authentication and directory Services are user configurable and 3rd party supported.  This means that Zimbra can leverage your existing directory systems such as Active Directory or any other LDAP server for that matter.</p>
<p><span id="more-13"></span></p>
<p>I needed to see this in action and judge for myself.</p>
<p>This was a perfect opportunity to use VMWare to stage an image and play around with the basics.  I created a 10GB virtual disk and installed Fedora Core 7 x86  while I was downloading the Zimbra 4.5.8GA Binaries for Fedora Core 5 x86 (yes, for FC5).    FC7 was installed with minimal options as the Zimbra docs state that services such as httpd, mysqld, slapd, and a few others be either un-installed or disabled.  I wasn&#8217;t in the mood to fight, so I complied.</p>
<p>Once done, I copied the Zimbra tarball over to the fresh VM, untarred and ran the ./install.sh script. This script does a great job of telling you what you&#8217;re missing;  in my case I had to add some symlinks for version compatibility in /usr/local for libcurl and libidn.   Fetchmail, curl and libstdc++ needed to be installed as well.</p>
<p>I also configured a A and MX record for the DHCP provisioned VM that resolved to private LAN address; all for testing purposes of course.   I managed to get Zimbra installed without too much mucking about and went with the default values for the most part.  It completed the install and launched the Zimbra services.</p>
<p>Web Client</p>
<p>The web-client is pretty slick, it&#8217;s by far the best looking one I&#8217;ve yet to see!</p>
<p><a title="Zimbra Inbox" href="http://phplinuxandthelike.files.wordpress.com/2007/10/zimbra1.jpg"><img src="http://phplinuxandthelike.files.wordpress.com/2007/10/zimbra1.thumbnail.jpg" alt="Zimbra Inbox" /></a></p>
<p>It has everything you&#8217;d expect in a webclient including a handy search-launch across the top for both internal/Google searches, and built in shared Wiki style document manager.   Users can manage multiple identities, POP accounts, Address books&#8230; there are lots of variables and settings!</p>
<p>Comparing functionality with that of the Exchange Web client, I don&#8217;t notice anything missing, in fact, there&#8217;s way more in Zimbra.   Even with all the playing around and trying all sorts of options it never hung or crashed my browser;  it just plowed through it all.</p>
<p>Web Admin</p>
<p>Like the webclient, the web administration is  top-shelf.   It offers a ton of configurable items that are often annoying or impossible to do under MS Exchange.   For example, under Exchange getting a Resource to auto accept an available booking for something like a meeting room or projector is nuisance;  last I checked a Micro$oft DLL was required to hook certain Exchange message and action the resource via script.    This functionality is build right into Zimbra.</p>
<p>Spam and AV control; yep.  Built right in too.</p>
<p>Separately it would be like managing OpenLDAP, Postfix, Spamassassin, Anomy, ClamAV,  stats package, webserver, database, spell-check, CA, and an IMAP server (and more I&#8217;m sure)!<br />
<a title="Zimbra Admin" href="http://phplinuxandthelike.files.wordpress.com/2007/10/zimbra2.jpg"><img src="http://phplinuxandthelike.files.wordpress.com/2007/10/zimbra2.thumbnail.jpg" alt="Zimbra Admin" /></a></p>
<p>Migrating from Exchange seems to be straight-forward.   I didn&#8217;t get the chance to try, but there are included tools that facilitate the process, mapping MAPI  accounts to Zimbra accounts.  The tools claim to migrate everything, and based on what I&#8217;ve seen so far, there is no reason to doubt this product either.</p>
<p>Given the opportunity (hardware) , I&#8217;d love to dedicate an environment to test Zimbra at the office to get an idea of what the day to day operation and maintenance is like and report back on the overall stability and workload.</p>
<p>The system requirements:</p>
<p>Evaluation and Testing<br />
• Intel/AMD 32-bit or 64-bit CPU 1.5 GHz<br />
• 1 GB RAM<br />
• 5 GB free disk space for software and logs<br />
• Temp file space for installs and upgrades*<br />
• Additional disk space for mail storage</p>
<p>Production environments<br />
• Intel/AMD CPU 32-bit 2.0 GHZ+. or large deployments (more than 2000 users), 64-bit OS is recommended.<br />
• Minimum - 2 GB RAM Recommend - 4 GB<br />
• Temp file space for installs and upgrades*<br />
• 10 GB free disk space for software and logs (SATA or SCSI for performance, and RAID / Mirroring for redundancy)<br />
• Additional disk space for mail storage</p>
<p>This is a great product, truly well done, congratulations to all involved!</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2007/10/16/ms-exchange-functionality-on-linux-zimbra-ties-it-all-together/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP 5 under IIS:  It&#8217;s ready.</title>
		<link>http://paulskinner.ca/index.php/2007/10/12/php-5-under-iis-its-ready/</link>
		<comments>http://paulskinner.ca/index.php/2007/10/12/php-5-under-iis-its-ready/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 04:31:06 +0000</pubDate>
		<dc:creator>Paul Skinner</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

		<guid isPermaLink="false">http://paulskinner.ca/?p=18</guid>
		<description><![CDATA[One of my first blog posts, PHP Installation: A myriad of options asserted that Windows and PHP 4 in ISAPI mode was a frustrating affair.  I hereby offer a partial retraction in this regard as PHP 5  is MUCH different.
The folks at PHP recently announced the retirement of the 4.x version slated for [...]]]></description>
			<content:encoded><![CDATA[<p>One of my first blog posts, <a rel="bookmark" href="http://phplinuxandthelike.wordpress.com/2007/07/29/php-installation-a-myriad-of-options/">PHP Installation: A myriad of options</a> asserted that Windows and PHP 4 in ISAPI mode was a frustrating affair.  I hereby offer a partial retraction in this regard as PHP 5  is MUCH different.</p>
<p>The folks at PHP recently announced the retirement of the 4.x version slated for December 2007.  After which PHP 4 will continue to receive critical updates until August 2008.     If you still run PHP 4, now is the time to starting thinking about getting everything up to version 5.</p>
<p>With that in mind, we&#8217;ve decided to upgrade all our development environments to PHP 5.   Our standard development machines aren&#8217;t really all that fancy; 2 year old Dell P4 H/T based desktops running XP.  Being a small group of developers, we&#8217;re liberal with the choice of IDE;  some use PHPEdit, while I&#8217;m drawn between Zend IDE and Eclipse.</p>
<p>Our previous run-ins with PHP4 in ISAPI mode were not good.  While PHP would usually run to some extent, we were often faced with segfault error message at the top of the output and often IIS would space out.  Yes, we&#8217;d followed the lengthy install read-me on the site and still could not get PHP and IIS to play nicely.   We pretty much gave up on PHP in ISAPI under IIS and settled with PHP in CGI mode for development purposes.</p>
<p><span id="more-18"></span></p>
<p>With the introduction of PHP 5.2 and the impending retirement date;   we took the plunge and downloaded the latest PHP 5.2.3 Windows Binary Installer package from <a title="PHP Home" href="http://php.net" target="_blank">PHP.net</a>.</p>
<p>To begin, we un-installed the PHP 4.4.x series CGI installation and removed all traces of PHP from IIS. The PHP.ini file was also backed-up and removed.   Once complete, IIS was restarted and we moved on to the installation.</p>
<p>This was straight-forward;  it&#8217;s a familiar MSI package loaded with all the extensions and required libraries.    We stepped through the installation selecting ISAPI mode and the extensions we need for our application such as  LDAP, MB_string and MSSQL.   For the sake of path simplicity, we also overrode the default &#8220;C:\Program Files\PHP&#8230;&#8221; path with a more friendly &#8220;C:\PHP5&#8243; folder.   The installer recommended that we &#8220;Reboot&#8221; because well&#8230; it IS Windows after all, and it&#8217;s your duty to rebootie&#8230;</p>
<p>Once back up, a simple &#8220;test.php&#8221; was called up containing nothing more than a simple &lt;?phpinfo();?&gt; . Unfortunately this didn&#8217;t work.  The content was dumped literally, unparsed in the browser;  the ISAPI filter obviously didn&#8217;t render.  A quick look in IIS revealed that in fact the ISAPI filter was NOT configured under the Application Configuration property pages.  A few clicks and key strokes linked .PHP files with &#8220;C:\PHP5\PHP5ISAPI.DLL&#8221;;  restarted IIS.</p>
<p>Tried the test page again with success!  The phpinfo() method called confirmed we were now in ISAPI Server API;</p>
<p><a title="PHP 5.2.3 Win32 phpinfo() part" href="http://phplinuxandthelike.files.wordpress.com/2007/10/php-523.jpg"><img src="http://phplinuxandthelike.files.wordpress.com/2007/10/php-523.jpg" alt="PHP 5.2.3 Win32 phpinfo() part" /></a></p>
<p>We now have a working PHP 5 ISAPI installation under Windows XP!</p>
<p>In terms of our application&#8217;s compatibility with PHP5;  there are many occurrences of about 4 different issues.</p>
<ul>
<li>mktime - called without setting a timezone</li>
<li>strtotime - called without setting a timezone</li>
<li>&#8220;Call-time pass-by-reference&#8221;</li>
<li>Assigning the return value of new by reference is deprecated.</li>
</ul>
<p>The main architecture of our application works as designed and most of the issues were fixed with a blanket search/replace within the application.   The timezone stuff is a bit of a nuisance as we&#8217;d designed a great set of wrappers in PHP 4 to handle timezone adjustments.  PHP5 handling of this sort of thing is vastly improved, but the list of available timezones is quite large and needs to be integrated into our app.</p>
<p>I look forward to exploring the new reflection classes and tightening up the OO model of our application to take advantage of the new PHP 5 class features.    Check out <a href="http://www.php.net/manual/en/migration5.php#migration5.changes" target="_blank">PHP&#8217;s migration notes</a> for more detailed information on the differences and changes between PHP 4 and 5.</p>
<p>- Paul</p>
]]></content:encoded>
			<wfw:commentRss>http://paulskinner.ca/index.php/2007/10/12/php-5-under-iis-its-ready/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
