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

<channel>
	<title>Dataplex Technology Solutions Blog &#187; PHP</title>
	<atom:link href="http://dataplex.org/blog/category/programming/php-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://dataplex.org/blog</link>
	<description>Web Development, Network Administration, Informaton Security</description>
	<lastBuildDate>Wed, 24 Aug 2011 15:36:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Working with Joomla</title>
		<link>http://dataplex.org/blog/2009/03/working-with-joomla/</link>
		<comments>http://dataplex.org/blog/2009/03/working-with-joomla/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 19:36:18 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=169</guid>
		<description><![CDATA[I have several clients I work with in my consulting business that need a Content Management System (CMS) to help them manage their website content. I&#8217;m not in the business of shanghai&#8217;ing my clients into using me to maintain their content. I prefer to concentrate on SEO and design rather than mundane content updates. They [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/03/working-with-joomla/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/03/working-with-joomla/"></fb:send></div><p>I have several clients I work with in my consulting business that need a Content Management System (CMS) to help them manage their website content. I&#8217;m not in the business of shanghai&#8217;ing my clients into using me to maintain their content. I prefer to concentrate on SEO and design rather than mundane content updates. They will come to me with major projects (like a new website or a redesign) and I will leave the content to them (assuming they want this, and they can understand how their content affects their search ratings).</p>
<p>I&#8217;ve been playing with several CMS systems lately that are popular in the community, and each one has benefits and drawbacks. The two I&#8217;m most interested in have been <a href="http://www.wordpress.org">WordPress </a>and <a href="http://www.joomla.org">Joomla</a>. Since I know PHP I can get into the guts of the system quite easily and figure out what&#8217;s going on. I&#8217;ve been happy working with wordpress, but I&#8217;ve been daunted by Joomla more than once.</p>
<p>Today I really dug into Joomla and I&#8217;m liking what I see. The <a href="http://docs.joomla.org/Joomla!_1.5_Template_Tutorial">templating system</a> it uses is pretty advanced and the <a href="http://developer.joomla.org/">module development process</a> is well documented. I was able to use Ant to generate my templates so I can easily deploy them to customer sites when necessary. The same goes for the module development process.</p>
<p>One of the things that made me a little reserved about using Joomla is the sheer number of exploits I see coming out for Joomla modules. I&#8217;m a little worried that my clients will end up unknowingly put a vulnerable module on their site and have their database compromised or worse. The key to this is managing the system&#8217;s permissions. I can enable my clients to do just about everything they want with their content without giving them the ability to compromise their own systems by uploading vulnerabilities into it.</p>
<p>All in all, I&#8217;m rather happy with the choice of Joomla for cheap (free) CMS for my customers. There&#8217;s a good chance I will be writing some modules for it in the near future and I&#8217;ll let you know how that goes.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/03/working-with-joomla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuring viPlugin Eclipse Plugin for Soft Tabs</title>
		<link>http://dataplex.org/blog/2009/03/configuring-viplugin-eclipse-plugin-for-soft-tabs/</link>
		<comments>http://dataplex.org/blog/2009/03/configuring-viplugin-eclipse-plugin-for-soft-tabs/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 03:22:36 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[soft tabs]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[viplugin]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=163</guid>
		<description><![CDATA[I&#8217;m not sure I blogged about this or not, but at Christmas my friend Chris Weldon got me a license for viPlugin for Eclipse. It&#8217;s a plugin that, like the name implies, makes Eclipse behave like vi. It&#8217;s an awesome plugin and it has really increased my efficiency (and use) of Eclipse. I&#8217;ve pretty much [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/03/configuring-viplugin-eclipse-plugin-for-soft-tabs/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/03/configuring-viplugin-eclipse-plugin-for-soft-tabs/"></fb:send></div><p>I&#8217;m not sure I blogged about this or not, but at Christmas my friend <a href="http://www.chrisweldon.net">Chris Weldon</a> got me a license for <a href="http://www.viplugin.com">viPlugin for Eclipse</a>. It&#8217;s a plugin that, like the name implies, makes Eclipse behave like vi. It&#8217;s an awesome plugin and it has really increased my efficiency (and use) of Eclipse. I&#8217;ve pretty much kicked everything else &#8211; except straight vim &#8211; to the curb in terms of IDEs for everything other than .NET.</p>
<p>I was getting frustrated though because all my code standards tools look for <a href="http://vim.wikia.com/wiki/Converting_tabs_to_spaces">tabs to be converted to spaces</a>. Eclipse &#8220;says&#8221; it does this, but it hasn&#8217;t really worked, so I went off in Google land to find out if viPlugin could override it. I found exactly what I was looking for in the User Manual that is put in the &lt;eclipse_dir&gt;\plugins\com.mbartl.viplugin.eclipse.layer_&lt;version&gt;\doc\UserManual.html . It gives a great example of how to set up a viPlugin_rc.xml file in the root of your eclipse directory. An example from the documentation is below:</p>
<blockquote>
<pre>&lt;?xml version="1.0"?&gt;
&lt;xml&gt;
    &lt;shiftwidth&gt;4&lt;/shiftwidth&gt;
    &lt;vimcursor&gt;true&lt;/vimcursor&gt;
    &lt;ignorecase&gt;true&lt;/ignorecase&gt;
    &lt;expandtab&gt;true&lt;/expandtab&gt;
    &lt;hlsearch&gt;true&lt;/hlsearch&gt;
    &lt;incsearch&gt;true&lt;/incsearch&gt;
    &lt;undolevels&gt;1000&lt;/undolevels&gt;
    &lt;wordseparators&gt;.,(,), ,TAB,ENTER,:,;,?,+,=,ANGLE_BRACKET_RIGHT,ANGLE_BRACKET_LEFT,*,{,},",|,COMMA,-,\,/,@,[,],},~,!,#,$,%,^,',`,´,AND&lt;/wordseparators&gt;
&lt;/xml&gt;</pre>
</blockquote>
<p>And that&#8217;s it. Soft tabs, shift width of 4, etc.</p>
<p>And since I know Chris will likely read this, his gift is in the mail. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/03/configuring-viplugin-eclipse-plugin-for-soft-tabs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reusing Tools From Subversion Controlled Directories</title>
		<link>http://dataplex.org/blog/2009/02/reusing-tools-from-subversion-controlled-directories/</link>
		<comments>http://dataplex.org/blog/2009/02/reusing-tools-from-subversion-controlled-directories/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 19:12:28 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AgileBCS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[reuse]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=156</guid>
		<description><![CDATA[Sometimes I want to take a tool from one project that is under subversion and use it in another. The problem is with the existing .svn directories. Because the files are already in one repository, copying directly from there to another project will cause conflicts in the other repository. There are quick and easy ways [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/02/reusing-tools-from-subversion-controlled-directories/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/02/reusing-tools-from-subversion-controlled-directories/"></fb:send></div><p>Sometimes I want to take a tool from one project that is under subversion and use it in another. The problem is with the existing .svn directories. Because the files are already in one repository, copying directly from there to another project will cause conflicts in the other repository.</p>
<p>There are quick and easy ways to solve this in both Windows and Linux. To get around this in Windows copy the directory to a temporary folder and use Windows find to search the directory for &#8220;.svn&#8221; and delete all the directories it finds. From there just move the folder to the new project and add it to source control.</p>
<p>On Linux it is even easier. Copy the folder to a temporar location and run &#8220;find . -type d -name .svn -exec rm -rf {}\;&#8221; . This will delete all .svn directories. Then move the tool directory to your new project and add it to source control.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/02/reusing-tools-from-subversion-controlled-directories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Basic Agile Development &#8211; The Technical</title>
		<link>http://dataplex.org/blog/2009/02/getting-started-with-basic-agile-development-the-technical/</link>
		<comments>http://dataplex.org/blog/2009/02/getting-started-with-basic-agile-development-the-technical/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 04:11:00 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AgileBCS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[NAnt]]></category>
		<category><![CDATA[nunit]]></category>
		<category><![CDATA[phpundercontrol]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[test driven development]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=154</guid>
		<description><![CDATA[I recently helped a friend out with the technical side of going &#8220;agile&#8221;. This meant setting up some project source control and automation for build and test. I have a pretty advanced automation setup on most of my projects right now. It&#8217;s far from perfect (I don&#8217;t have nightly releases being tagged, etc), but it [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/02/getting-started-with-basic-agile-development-the-technical/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/02/getting-started-with-basic-agile-development-the-technical/"></fb:send></div><p>I recently helped a friend out with the technical side of going &#8220;agile&#8221;. This meant setting up some project source control and automation for build and test. I have a pretty advanced automation setup on most of my projects right now.  It&#8217;s far from perfect (I don&#8217;t have nightly releases being tagged, etc), but it gets the job done. But I sometimes forget how long it&#8217;s taken me to learn the lessons and get things set up correctly (AFAIK &#8211; I&#8217;m no expert). I may be missing a lot but I always try to improve what I&#8217;m doing and review it often for lessons learned.</p>
<p>As I said previously I had about 2 hours with my friend to set up an automated build, and teach him the virtues of Test Driven Development and Continuous Integration. We set up a project with a simple NAnt build file that had the basic targets &#8211; init, clean, compile, test, and build &#8211; and then got into some code with a 3 tier project (presentation, BLL, DAL) and a test project. This all went well and he caught on quickly which was nice. I sometimes have a hard time teaching things because the ideas are so ingrained into me that they are difficult to explain to others.</p>
<p>I raised a red flag with him because he was trying to introduce a lot of new technology at once. I asked him to really think about which technologies he wanted to implement and get started with. The obvious ones to start with are automated build (Ant/NAnt), unit testing (PHPUnit/NUnit), and Continuous Integration (phpUnderControl/CruiseControl.NET). Beyond this I asked him to wait until he was comfortable with these before adding things like an ORM he was unfamiliar with.</p>
<p>One of the worst things to do is jump into a new project with 100% new technologies that first have to be learned. We always want to play with the latest and greatest and there&#8217;s a good reason for many of them to exist. But taking on too much at once and not coming away with a good understanding of any of the technologies can also be harmful. Pick your new technologies for the value they will bring, not for the coolness factor.</p>
<p>The other side of this coin is that with a good automated build, testing, and continuous integration, later down the line it is much easier to introduce these new technologies that may have real benefits. Your code will be much more flexible, and your team will be much more comfortable switching out older technologies for new ones because the tests will tell the truth. And with a good source control setup, you can always branch new technology development and merge it later if the team deems it worthy enough to add into the mainline development.</p>
<p>I would like to write up a series of posts covering the very basics of the technical side of agile, with this post being the first. Agile development encompasses everything from technical issues  to management to customer interaction. It can be difficult to jump into without knowing the how or the why of each part. There are also several different ways to implement agile development. But it is often easy to start with simple and sound technical practices. A grass roots technical movement can have a great effect on changing a teams culture. And, it&#8217;s usually easier to ask for forgiveness than permission, and definitely easier to ask for it when your project is wildly successful because of some small steps taken in the right direction.</p>
<p>Another good way to get involved with agile development is to find a local user group or a development shop that may be willing to have regular meetings with you to show you the ropes and review what you&#8217;re doing. My office has been good about allowing me to do this through community training and user group interaction. Part of the reason for this is that my projects are on sound foundations and they value the fact that I don&#8217;t waste time developing terrible code&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/02/getting-started-with-basic-agile-development-the-technical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DBDeploy with MySQL</title>
		<link>http://dataplex.org/blog/2009/02/dbdeploy-with-mysql/</link>
		<comments>http://dataplex.org/blog/2009/02/dbdeploy-with-mysql/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 21:28:26 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[dbdeploy]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[stored routine]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=152</guid>
		<description><![CDATA[I started playing with dbdeploy on one of my php projects today because I&#8217;ve seen it used with success on another project I&#8217;m working on. The biggest differences in the projects are that one uses Postgres and the other uses MySQL. Converting all my sql scripts for table creation went just fine and they ran [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/02/dbdeploy-with-mysql/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/02/dbdeploy-with-mysql/"></fb:send></div><p>I started playing with <a href="http://dbdeploy.com/">dbdeploy</a> on one of my php projects today because I&#8217;ve seen it used with success on another project I&#8217;m working on. The biggest differences in the projects are that one uses <a href="http://www.postgresql.org/">Postgres</a> and the other uses <a href="http://www.mysql.com/">MySQL</a>. Converting all my sql scripts for table creation went just fine and they ran perfectly.</p>
<p>I was pretty excited and started converting my stored procedures over, and that&#8217;s when I ran into problems. I don&#8217;t know if they are to be attributed to dbdeploy or to mysql, but I have a feeling they are both to blame a little. In most RDBMS systems, the DB engine can detect when you&#8217;re creating a stored procedure by picking up the BEGIN keyword and waiting until it finds a matching END keyword to actually compile and store the procedure.</p>
<p>In mysql, the engine isn&#8217;t smart enough to detect the begin/end tags, so you have to change your delimiter. FOr example, you can execute &#8220;DELIMITER //&#8221; and then create a procedure like &#8220;CREATE PROCEDURE `myproc`() BEGIN statement1; statement2; END//&#8221; . This effectively makes mysql ignore the inner &#8220;;&#8221; so that you can store the procedure. Then you can set your delimiter back with &#8220;DELIMITER ;&#8221;.</p>
<p>The problem with this is that most database drivers (JDBC) are written for the norm &#8211; a database engine that can determine the difference between defining a procedure and executing the procedure. In ant, you can define a delimiter for the &lt;sql /&gt; task, such as // to get around this. Then in your sql scripts you use // where you would normally use ; to end a table creation or procedure statement.</p>
<p>Enter dbdeploy. DBDeploy only uses &#8220;;&#8221; as a delimiter and will not detect Ant&#8217;s override. It also doesn&#8217;t like having &#8220;//&#8221; as a delimiter in the scripts. As in, it fails miserably the first time it hits //. Also, if you use delimiter=&#8221;//&#8221; in Ant, the normal code doesn&#8217;t work either. The deltas are generated using ; instead of //.</p>
<p>Now, all of that together can&#8217;t be avoided. You wouldn&#8217;t want dbdeploy to be dependent on Ant (so as to detect the use of delimiter=&#8221;//&#8221;) and you wouldn&#8217;t want to modify the default behavoir of the &lt;sql /&gt; task. The problem here is mysql! If MySQL would go ahead and finish implementing real support for stored procedures and the logic to create them using the same syntax as all other statements, we would be just fine.</p>
<p>As a stop gap I&#8217;m hoping that there is a delimiter switch for dbdeploy that could change it&#8217;s scripts so that it would flow through the ant &lt;sql /&gt; task without a problem. In the end though I will most likely take the time to convert all of my SQL backend code to Postgres. Postgres is fast, enterprise ready, open source, and feature rich. I can&#8217;t same the same for MySQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/02/dbdeploy-with-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenSUSE 11.1 and Xfce Desktop Manager</title>
		<link>http://dataplex.org/blog/2009/01/opensuse-111-and-xfce-desktop-manager/</link>
		<comments>http://dataplex.org/blog/2009/01/opensuse-111-and-xfce-desktop-manager/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 17:00:11 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[Linux Administration]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[desktop manager]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[opensuse]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[xfce]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=133</guid>
		<description><![CDATA[A while back I wrote a series of blog posts about trying new Linux distributions. I finally settled on one that I actually picked up at OSCON 2008. The OpenSUSE guys were handing out CDs and since I had just formatted my laptop for the trip, I decided to fire it up in a VMWare [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/01/opensuse-111-and-xfce-desktop-manager/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/01/opensuse-111-and-xfce-desktop-manager/"></fb:send></div><p>A while back I wrote a series of blog posts about trying new Linux distributions. I finally settled on one that I actually picked up at <a href="http://en.oreilly.com/oscon2008/">OSCON 2008</a>. The <a href="http://www.opensuse.org/">OpenSUSE</a> guys were handing out CDs and since I had just formatted my laptop for the trip, I decided to fire it up in a <a href="http://www.vmware.com">VMWare Virtual Machine</a>. The installation is a breeze, and it comes with a minimal amount of packages (which is something I like). It also gives you the choice of desktop managers, and before today I had been choosing <a href="http://www.kde.org/">KDE</a> (because honestly I liked the Windows look/feel).</p>
<p>Last night however I was trying to do some development work in a VM running OpenSUSE 11.0 and KDE that I had dedicated 1 GB of RAM to and it was visibly lagging and impeding my work. So last night I started a fresh install of OpenSUSE 11.1 and decided to give <a href="http://www.xfce.org/">Xfce</a> a try. My friend <a href="http://www.chrisweldon.net/">Chris Weldon</a> spoke highly of it, so I thought why not.</p>
<p>Well, I&#8217;m happy to report today that my choice was a good one. Xfce runs noticeably faster that KDE 3.5 or 4.0 and the transition from another desktop manager is easy. <a href="http://www.eclipse.org/">Eclipse</a> (always the hog) runs faster because the desktop manager is not taking up as much memory as it was previously. And almost everything else I&#8217;ve been doing (from terminal windows to configuration settings) has been running quicker as well. Now they shocker &#8211; I only gave this VM 768 MB of ram instead of the full gig given to the last VM.</p>
<p>If you&#8217;re not comfortable with your current desktop manager and you think Xfce might be for you, I suggest giving it a try.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/01/opensuse-111-and-xfce-desktop-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse Install on Gentoo Failures</title>
		<link>http://dataplex.org/blog/2009/01/eclipse-install-on-gentoo-failures/</link>
		<comments>http://dataplex.org/blog/2009/01/eclipse-install-on-gentoo-failures/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 19:11:27 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[Linux Administration]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[emerge]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[PDT]]></category>
		<category><![CDATA[Subclipse]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=131</guid>
		<description><![CDATA[I recently started working on a PHP project using Eclipse as the IDE. I typically use OpenSUSE on my linux machiens but I was given a development machine with Gentoo on it and started setting up the window manager to work on the project. Emerging eclipse worked fine and installed eclipse. However, once I started [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2009/01/eclipse-install-on-gentoo-failures/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2009/01/eclipse-install-on-gentoo-failures/"></fb:send></div><p>I recently started working on a PHP project using <a href="http://www.eclipse.org/">Eclipse</a> as the IDE. I typically use <a href="http://www.opensuse.org/">OpenSUSE</a> on my linux machiens but I was given a development machine with <a href="http://www.gentoo.org/">Gentoo</a> on it and started setting up the window manager to work on the project. Emerging eclipse worked fine and installed eclipse. However, once I started trying to add <a href="http://www.eclipse.org/pdt/">PDT</a> and <a href="http://subclipse.tigris.org/">Subclipse</a> plugins I started running into problems.</p>
<p>Eclipse fired up just fine but then the find and install plugins menu option was broken &#8211; it simply would not open. A simple fix got around this, but then it failed to resolve plugin dependencies automatically. With no search feature, finding these necessary packages became quite the chore. Once I finally got all the dependencies resolved and my plugins installed, I ran into an even bigger problem. None of the plugin perspectives or views were available! Also, none of the plugin preferences showed up in the preferences menu.</p>
<p>After several remove/install cycles I just pulled down the tar/gzip copy and installed it into my home directory instead of using the version packaged into Gentoo. Once I did this everything went well and I was able to pull in the necessary plugins, resolve the dependencies automatically, and have them immediately available on a restart of eclipse. I don&#8217;t know what the Gentoo folks did to mess up Eclipse so badly but they really need to take a look at how they set it up and correct the mistakes.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2009/01/eclipse-install-on-gentoo-failures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Pains From .NET to PHP</title>
		<link>http://dataplex.org/blog/2008/12/moving-pains-from-net-to-php/</link>
		<comments>http://dataplex.org/blog/2008/12/moving-pains-from-net-to-php/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 19:31:46 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=60</guid>
		<description><![CDATA[I know I haven&#8217;t blogged in a while, but my friend Chris Weldon has spurred me into action with a post of his titled Flexible and Pragmatic Automated PHP Development. As I read this I found myself identifying with a lot of his problems. Chris started out as a PHP developer and recently trained and [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2008/12/moving-pains-from-net-to-php/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2008/12/moving-pains-from-net-to-php/"></fb:send></div><p>I know I haven&#8217;t blogged in a while, but my friend <a title="Visit Chris Weldon's Blog" href="http://www.chrisweldon.com" target="_blank">Chris Weldon</a> has spurred me into action with a post of his titled <a title="Read Chris' article on PHP Development Pains" href="http://www.chrisweldon.net/2008/12/23/flexible-and-pragmatic-automated-php-development" target="_blank">Flexible and Pragmatic Automated PHP Development</a>. As I read this I found myself identifying with a lot of his problems. Chris started out as a PHP developer and recently trained and developed in a .NET environment. We worked together in a development shop that was mostly Microsoft .NET developers. I&#8217;d like to add some personal experiences to his and discuss how I either got around them or why there are still lacking features in PHP.</p>
<p><strong>Development Environment Isolation</strong></p>
<p>The first argument in his article about moving PHP from workstation to workstation really hits home. Where I work now, our production servers are set up in a custom way due to some legacy PHP stuff. This made it incredibly difficult to develop in an environment I had set up to my liking (my desktop).</p>
<p>I would develop working and tested code on my system using <a title="Zend Studio for Eclipse Product Information" href="http://www.zend.com/en/products/studio/" target="_blank">Zend Studio for Eclipse</a>, only to push it to the server and have it fail miserably because PHP was dependent on the way the environment was configured. The problem was a byproduct of the setup Eclipse used for PHP (linking the files together as necessary). It would install PHP on Windows and Linux differently. And neither of them followed the install on <a title="Novells' SuSE Enterprise Homepage" href="http://www.novell.com/linux/" target="_blank">SuSE Enterprise</a> (our production OS).</p>
<p>The <a title="See PEAR Packages and Documentation" href="http://pear.php.net/">PHP Extension and Application Repository</a> (PEAR) was a big part of the problem, as Chris points out. In .NET, you have Dynamic Linked Libraries (DLLs) you can either push around unsigned with your project (thereby keeping the project working no matter the environment), or you can have them signed and installed in the <a title="GAC in .NET 2.0 Documentation" href="http://msdn.microsoft.com/en-us/library/yf1d93sz(VS.80).aspx" target="_blank">Global Assembly Cache</a> (GAC), which is standard across all .NET Framework installations. This makes it incredibly easy to move the entire project from one computer to another. Just pull it out of svn and run the build using NAnt.</p>
<p><strong>Project Automation</strong></p>
<p>I use <a title="Download NAnt and read documentation" href="http://nant.sourceforge.net/" target="_blank">NAnt</a> to automate my .NET projects and it works wonderfully. Pull it down, add it to the subversion repository, and run. If you have to add functionality to it (such as <a title="Extra goodness for NAnt" href="http://nantcontrib.sourceforge.net/" target="_blank">NAnt Contrib</a>), it was easy to do and the documentation was fairly good. NAnt does a great job of not having any real path dependencies (except for the .NET framework itself). With .NET 3.0 and 3.5 there have been some problems, but I think that is due to the fact that they are relatively new and they added support for them in NAnt before they were full releases.</p>
<p>With PHP I use <a title="Apache maintains the Ant project" href="http://ant.apache.org/" target="_blank">Ant</a>, which comes from the days of Java development on UNIX platforms. It depends on Java, which again bloats the environment in which it operates. It does make it better because Java should be standard across any platform (Windows or Linux). Ant is okay, but it has a very <a title="Ant task documentation" href="http://ant.apache.org/manual/anttaskslist.html" target="_blank">limited set of tasks available</a>, and I have yet to get the Ant Contrib package to work with it unless it is fully installed on a server. Again, this makes it different across development and production environments, as well as adding package bloat to our production servers. The other projects that are out there (phing, etc) are also not production ready and depend on being installed through PEAR.</p>
<p><strong>Unit Testing</strong></p>
<p>Refer to my previous complaints. In .NET you have reflection, interfaces, and seperation of class through the use of DLLs. <a title="PHP Documentation on Interfaces" href="http://www.php.net/interfaces" target="_blank">PHP Interfaces</a> were only recently added and most people (especially PEAR packages) don&#8217;t use them. This makes it very difficult to test interfaces and objects. The documentation for <a title="PHPUnit Homepage" href="http://phpunit.de" target="_blank">PHPUnit</a> is also somewhat lacking, whereas the <a title="Read about NUnit" href="http://www.nunit.org/index.php?p=documentation" target="_blank">NUnit documentation</a> is pretty good.</p>
<p><strong>Frameworks</strong></p>
<p>I have very limited experience with the <a title="Zend Framework Homepage" href="http://framework.zend.com/" target="_blank">Zend Framework</a>, but my experiences have been a nightmare. Their documentation is difficult to navigate and sometimes missing completely. With .NET you have <a title="All online documentation for Microsoft" href="http://msdn.microsoft.com/" target="_blank">MSDN online</a> with full documentation of everythign included in the framework, as well as the full documentation that is installed as part of Visual Studio.</p>
<p>I think there is a big difference here only because of the way the two projects started. PHP was designed to be fast and small to make small web project development easy, and it has morphed into a goliath scripting language with poorly planned releases and functionality. With .NET, it was a planned project lasting several years and building on the lessons learned from both the Java world as well as the problems developers faced with classic ASP.</p>
<p>However, having said that, you would think the PHP core developers would have learned and would know when to say enough is enough. For example, they only recently added namespaces, and they are less than appealing. For a long time they kept things the way they were for backward compatibility with PHP4 because so many apps were developed with it. They should have notified those projects and the successful ones would (and have) moved forward, and the ones that weren&#8217;t worth saving would have died off to let new and better projects take their place.</p>
<p><strong>Conclusion</strong></p>
<p>I have always appreciated what Microsoft does for their development community. There are major <a title="Microsoft sponsored open source projects" href="http://www.codeplex.com/" target="_blank">Microsoft sponsored projects</a> to enhance development and give ample ability for developers to provide feedback. It seems like PHP is only recently taking this approach and it&#8217;s been a long time in coming. I respect that they were trying to keep with the original intent of PHP (fast, easy web development), but when it changed into something bigger &#8211; being used for enterprise level applications &#8211; they should have seen the better path and taken it.</p>
<p>As Chris blogs more about the PHP recommendations he has, I feel it my duty to compliment them with critiques of the .NET world. So look for more posts here about that, as well as all things technical.</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2008/12/moving-pains-from-net-to-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHPUnit and Project Automation Files</title>
		<link>http://dataplex.org/blog/2008/09/phpunit-and-project-automation-files/</link>
		<comments>http://dataplex.org/blog/2008/09/phpunit-and-project-automation-files/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 01:01:47 +0000</pubDate>
		<dc:creator>dpx</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[presentations]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://dataplex.org/blog/?p=44</guid>
		<description><![CDATA[Well, for everyone who showed up, thank you very much. I enjoyed presenting, and I&#8217;m sorry I went a little long. I&#8217;ll work on that. Anywhere, here are the files you need to recreate this. Remember that to run this you must have XDebug installed, and the filter PECL module. Powerpoint file &#8211; Not very [...]]]></description>
			<content:encoded><![CDATA[<div class="al2fb_like_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:like href="http://dataplex.org/blog/2008/09/phpunit-and-project-automation-files/" layout="button_count" show_faces="true" width="450" action="like" font="arial" colorscheme="light" ref="AL2FB"></fb:like></div><div class="al2fb_send_button"><div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=170888536311777&amp;xfbml=1" type="text/javascript"></script>
<fb:send ref="AL2FB" font="arial" colorscheme="light" href="http://dataplex.org/blog/2008/09/phpunit-and-project-automation-files/"></fb:send></div><p>Well, for everyone who showed up, thank you very much. I enjoyed presenting, and I&#8217;m sorry I went a little long. I&#8217;ll work on that. Anywhere, here are the files you need to recreate this. Remember that to run this you must have XDebug installed, and the filter PECL module.</p>
<ul>
<li><a title="Powerpoint" href="http://www.dataplex.org/blog/wp-content/uploads/PHP Unit Testing.pptx " target="_blank">Powerpoint file</a> &#8211; Not very useful! Wikipedia FTW</li>
<li><a title="Subversion dump" href="http://www.dataplex.org/blog/wp-content/uploads/announcement_svn.tgz" target="_blank">Subversion dump</a></li>
</ul>
<p>To use the subversion dump, first create a repository:</p>
<p>$ svnadmin create repo</p>
<p>Then uncompress the dump and import it:</p>
<p>$ tar -zxf announcement_svn.tgz<br />
$ svnadmin load path_to_repo &lt; announcement_svn.dump</p>
<p>That&#8217;s it. Please leave comments or questions for me. And read through the SVN log as it explains what each step (revision) in the repository is for.</p>
<p>$ svn log | less</p>
]]></content:encoded>
			<wfw:commentRss>http://dataplex.org/blog/2008/09/phpunit-and-project-automation-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

