<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>boringguys.com</title>
	<link>http://www.boringguys.com</link>
	<description>php, perl, mysql, xml, and other business and application development stuff that keeps boring guys like Rich Zygler occupied</description>
	<pubDate>Tue, 13 May 2008 09:51:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>PHP Developer Jobs are the Hottest EVER!!!</title>
		<link>http://www.boringguys.com/2008/05/13/php-developer-jobs-are-the-hottest-ever/</link>
		<comments>http://www.boringguys.com/2008/05/13/php-developer-jobs-are-the-hottest-ever/#comments</comments>
		<pubDate>Tue, 13 May 2008 09:50:36 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Eclipse]]></category>

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

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

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

		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[Zend IDE]]></category>

		<guid isPermaLink="false">http://www.boringguys.com/2008/05/13/php-developer-jobs-are-the-hottest-ever/</guid>
		<description><![CDATA[** I&#8217;ll preface this by saying that I&#8217;m not specifically looking for a new position but I think it is important to be aware of the market that you serve.  Even in happy times during my employment, I routinely scan job ads to see the health of the market and to gauge its direction. [...]]]></description>
			<content:encoded><![CDATA[<p>** I&#8217;ll preface this by saying that I&#8217;m not specifically looking for a new position but I think it is important to be aware of the market that you serve.  Even in happy times during my employment, I routinely scan job ads to see the health of the market and to gauge its direction.  **</p>
<p>If anecdotal evidence means anything, and sometimes it does&#8230; and at the risk of sounding like a teenage girl writing on a myspace page, the PHP job market is literally blasting off!  I&#8217;ve never seen the market for PHP programmers as strong as it right now in the NYC/Philadelphia region.</p>
<p>While there are lots of PHP jobs in the usual suspects like small start-ups, there also seem to be a number of jobs at established companies and developer shops.  I&#8217;m also seeing a definite split in PHP jobs where there are both entry level jobs as well as jobs for more experienced people with titles like &#8220;Senior PHP Developer&#8221; and &#8220;PHP Tech Lead.&#8221;  I can&#8217;t remember seeing so many senior PHP positions.  The salaries I&#8217;m seeing are also at an all time high.  Many ads have salary ranges that extend well into 6 figures.</p>
<p>As far as requirements I have seen, there definitely seems to be a shift towards frameworks like Symfony and Zend Framework as well as items specifically mentioning IDEs like Eclipse and Zend Studio.  However, I rarely see mention of source code management and unit testing.  Hopefully those items were cut from the job ads due to space requirements.  <img src='http://www.boringguys.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>If you are a PHP developer in the area and are highly experienced, get ready to reap the rewards for your hard work.  If you are a hiring manager in the area, prepare to shell out more for top talent.</p>
<p>So what is everyone else seeing in their area with regards to PHP developer jobs?</p>
<p>.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=110&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_110" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/05/13/php-developer-jobs-are-the-hottest-ever/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Setting up Google App Engine SDK</title>
		<link>http://www.boringguys.com/2008/04/16/setting-up-google-app-engine-sdk/</link>
		<comments>http://www.boringguys.com/2008/04/16/setting-up-google-app-engine-sdk/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 09:30:53 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Eclipse]]></category>

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/04/16/setting-up-google-app-engine-sdk/</guid>
		<description><![CDATA[I&#8217;ve started playing around with the Google App Engine SDK.  So far I&#8217;ve found this fellow&#8217;s posts on setting up Python, Eclipse, PyDev, and the Google App Engine very helpful.  He also has a great post on ER-modeling and relational models in Google App Engine.
Check them out.
.
Share this via del.icio.us, digg, email, etc.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started playing around with the Google App Engine SDK.  So far I&#8217;ve found this fellow&#8217;s posts on <a href="http://daily.profeth.de/2008/04/google-app-engine-eclipse-pydev.html">setting up Python, Eclipse, PyDev, and the Google App Engine</a> very helpful.  He also has a great post on <a href="http://daily.profeth.de/2008/04/er-modeling-with-google-app-engine.html">ER-modeling and relational models in Google App Engine</a>.</p>
<p>Check them out.</p>
<p>.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=108&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_108" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/04/16/setting-up-google-app-engine-sdk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>First impressions on Google App Engine</title>
		<link>http://www.boringguys.com/2008/04/15/first-impressions-on-google-app-engine/</link>
		<comments>http://www.boringguys.com/2008/04/15/first-impressions-on-google-app-engine/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 18:06:17 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Google]]></category>

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

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/04/15/first-impressions-on-google-app-engine/</guid>
		<description><![CDATA[From the Google site:
Google App Engine lets you run your web applications on Google&#8217;s infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it&#8217;s ready to [...]]]></description>
			<content:encoded><![CDATA[<p><span></span><a href="http://code.google.com/appengine/docs/whatisgoogleappengine.html">From the Google site</a>:</p>
<p style="margin-left: 0.5in"><em>Google App Engine lets you run your web applications on Google&#8217;s infrastructure. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it&#8217;s ready to serve your users.</em></p>
<p style="margin-left: 0.5in"><em>You can serve your app using a free domain name on the <code><span style="font-size: 10pt">appspot.com</span></code> domain, or use <a href="http://www.google.com/a/">Google Apps</a> to serve it from your own domain. You can share your application with the world, or limit access to members of your organization.</em></p>
<p class="MsoNormal">Without actually firing up the SDK yet, here are my initial thoughts:</p>
<ol style="margin-top: 0in" start="1" type="1">
<li class="MsoNormal">Do we      trust Google?<span>  </span>With our data?<span>  </span>With our users?<span>  </span>I love the idea of the Google App Engine (GAE), a scalable      web app system where you only have to worry about coding your business      logic and structuring your models.<span>       </span>This is kind of like Amazon’s EC2 on steroids.<span>  </span>No sysadmin stuff like with EC2, just      coding.<span>  </span>However I do not love that Google is already in the web app space themselves and is now      marketing a web app space hosting platform.<span>  </span>You have to trust them a little bit more      then I’m comfortable with.<span>  They&#8217;ve already got your users  and your data and your code.  Don&#8217;t they conceivably control your business at that point?  Maybe I&#8217;m being paranoid here.</span>
<p>Plus, there’s the lock-in factor.<span>       </span>If I develop my app using MySQL as a backend, I know I could with      only some minor pain change that backend to Oracle.<span>  </span>It’s all SQL at some point.<span>  </span>How would you swap out of using the      Google DataStore API?<span>  </span>It’s a      proprietary system with no published standards.<br />
<span> </span></li>
<li class="MsoNormal">GAE is      currently only in Python.<span>  </span>No PHP      love?<span>  </span>I realize a lot of Google      runs on Python and C++ and that’s what it is in their wheelhouse.<span>  </span>But I still consider Python to be a      fringe language.<span>  </span>If GAE were opened      up to support PHP and C#, it would blast off in popularity.<span>  </span>Then again, a Python only crowd is a      good beta test before the crush of PHP devs comes in.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></li>
<li class="MsoNormal">The      DataStore API (ie, BigTable) is difficult to wrap my head around.<span>  </span>After spending so many years carefully      crafting db tables and relationships to get the most bang for my buck, I      now have to throw out a lot of that hard-earned knowledge. <span> </span>I need to think in terms of objects (or      columns) instead of rows.There are still relationships and keys to keep track of but not in the      traditional ways of SQL.<span>  </span>It seems      like much more of your data fetching is done in code rather then in      SQL.<span>  </span>The shift in thinking reminds      me of my own move to Object-Oriented Programming.<span>  </span>I whined like a baby during that phase      of my programming development (well, at least I did on the inside).<span>  </span></li>
</ol>
<p class="MsoNormal"><o> </o>Hopefully I’ll get some more time to play with this stuff soon and report back.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=107&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_107" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/04/15/first-impressions-on-google-app-engine/feed/</wfw:commentRss>
		</item>
		<item>
		<title>wordpress 2.5 and subversion</title>
		<link>http://www.boringguys.com/2008/04/09/wordpress-25-and-subversion/</link>
		<comments>http://www.boringguys.com/2008/04/09/wordpress-25-and-subversion/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 21:22:25 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/04/09/wordpress-25-and-subversion/</guid>
		<description><![CDATA[For some reason, performing an svn update on the external repository http://svn.automattic.com/wordpress/trunk/ does absolutely nothing.  This is pretty baffling behavior.  Same wordpress and subversion issue also mentioned here.
I&#8217;ve also tried /tags/2.5  and /branches/2.5 and nothing.  No changes come across.  Very weird.  Anyone else getting this?
Share this via del.icio.us, digg, email, etc.
]]></description>
			<content:encoded><![CDATA[<p>For some reason, performing an <strong>svn update</strong> on the external repository <strong>http://svn.automattic.com/wordpress/trunk/ </strong>does absolutely nothing.  This is pretty baffling behavior.  Same <a href="http://www.h4x3d.com/when-svn-up-does-not-work-wordpress-subversion/">wordpress and subversion issue also mentioned here.</a></p>
<p>I&#8217;ve also tried /tags/2.5  and /branches/2.5 and nothing.  No changes come across.  Very weird.  Anyone else getting this?</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=106&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_106" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/04/09/wordpress-25-and-subversion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Symfony sfException Call to undefined method BaseModel::__toString</title>
		<link>http://www.boringguys.com/2008/03/19/symfony-sfexception-call-to-undefined-method-basemodel__tostring/</link>
		<comments>http://www.boringguys.com/2008/03/19/symfony-sfexception-call-to-undefined-method-basemodel__tostring/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 13:46:17 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[PHP]]></category>

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

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/03/19/symfony-sfexception-call-to-undefined-method-basemodel__tostring/</guid>
		<description><![CDATA[Working on some projects in Symfony recently.  I ran into a problem when I used the symfony admin generator to create a "backend" module for a table that has a foreign key relationship.
Symfony was looking for me to have a __toString() function in my model so it could create the drop down menu.  [...]]]></description>
			<content:encoded><![CDATA[<p>Working on some projects in Symfony recently.  I ran into a problem when I used the symfony admin generator to create a "backend" module for a table that has a foreign key relationship.</p>
<p>Symfony was looking for me to have a __toString() function in my model so it could create the drop down menu.  So for instance, let's say you have tables like countries and states in your schema.xml.  Country_id in the states table is a foreign key to the Countries table like so:</p>
<div class="igBar"><span id="lxml-4"><a href="#" onclick="javascript:showCodeTxt('xml-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-4">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;table</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"states"</span> <span style="color: #000066;">idmethod</span>=<span style="color: #ff0000;">"native"</span><span style="font-weight: bold; color: black;">&gt;</span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"id"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"SMALLINT"</span> <span style="color: #000066;">required</span>=<span style="color: #ff0000;">"true"</span> <span style="color: #000066;">autoincrement</span>=<span style="color: #ff0000;">"true"</span> <span style="color: #000066;">primarykey</span>=<span style="color: #ff0000;">"true"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/column<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"country_id"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"SMALLINT"</span> <span style="color: #000066;">required</span>=<span style="color: #ff0000;">"true"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;foreign</span> -key <span style="color: #000066;">foreigntable</span>=<span style="color: #ff0000;">"countries"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;reference</span> <span style="color: #000066;">local</span>=<span style="color: #ff0000;">"country_id"</span> <span style="color: #000066;">foreign</span>=<span style="color: #ff0000;">"id"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/reference<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/foreign<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/column<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"name"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"VARCHAR"</span> <span style="color: #000066;">size</span>=<span style="color: #ff0000;">"40"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/column<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;column</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"abbrev"</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">"VARCHAR"</span> <span style="color: #000066;">size</span>=<span style="color: #ff0000;">"2"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/column<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/table<span style="font-weight: bold; color: black;">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>When you do:</p>
<div class="igBar"><span id="lcode-5"><a href="#" onclick="javascript:showCodeTxt('code-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-5">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">symfony propel-init-admin backend states States </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Symfony is going to create the edit and create actions of the States screens with a drop-down menu of countries that the state is a part of.  The value of the country drop down is the country_id.  the value needs to be set in a __toString() function in your Country propel model.  The easiest thing is to just return a simple string name (if that's in your db model):</p>
<div class="igBar"><span id="lphp-6"><a href="#" onclick="javascript:showCodeTxt('php-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-6">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> __toString<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">return</span> <span style="color:#0000FF;">$this</span>-&gt;<span style="color:#006600;">name</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>That should solve the problem.  It's odd that this comes up.  And I couldn't find anything on it when googling.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=104&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_104" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/03/19/symfony-sfexception-call-to-undefined-method-basemodel__tostring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Drupal 6 and new Apress Drupal book</title>
		<link>http://www.boringguys.com/2008/03/10/drupal-6-and-new-apress-drupal-book/</link>
		<comments>http://www.boringguys.com/2008/03/10/drupal-6-and-new-apress-drupal-book/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 13:20:41 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Books]]></category>

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/03/10/drupal-6-and-new-apress-drupal-book/</guid>
		<description><![CDATA[I have been working on a couple of projects using Drupal lately that required creating some custom modules.  So again, I flipped thru my well-worn copy of Pro Drupal Development.  Here is my earlier review of Pro Drupal Development.
Drupal has released version 6 now.  So I click to the Apress site and [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on a couple of projects using <a href="http://drupal.org/">Drupal</a> lately that required creating some custom modules.  So again, I flipped thru my well-worn copy of <a href="http://www.apress.com/book/view/1590597559">Pro Drupal Development</a>.  Here is my earlier <a href="http://www.boringguys.com/2007/07/03/book-review-of-pro-drupal-development-by-john-k-vandyk-and-matt-westgate-published-by-apress/">review of Pro Drupal Development</a>.</p>
<p>Drupal has released version 6 now.  So I click to the Apress site and lo and behold, they're already working on <a href="http://www.apress.com/book/view/1430209895">Pro Drupal Development, 2nd edition</a> which will feature updates for Drupal 6.  If it is as good as the first book, it will be a must have for any Drupal developer.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=103&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_103" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/03/10/drupal-6-and-new-apress-drupal-book/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using Subversion externals property for WordPress upgrades</title>
		<link>http://www.boringguys.com/2008/02/18/using-subversion-externals-property-for-wordpress-upgrades/</link>
		<comments>http://www.boringguys.com/2008/02/18/using-subversion-externals-property-for-wordpress-upgrades/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 22:33:30 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

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

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

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

		<category><![CDATA[System Administration]]></category>

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/02/18/using-subversion-externals-property-for-wordpress-upgrades/</guid>
		<description><![CDATA[I find that upgrading apps like WordPress, Drupal, Symfony and open source PHP apps is simple for less complicated environments, but once you start adding in things like new directories, custom themes/modules, source code control as well as separate development, test, and production systems, the upgrades start to get pretty hairy.
Take WordPress for example.  [...]]]></description>
			<content:encoded><![CDATA[<p><o></o>I find that upgrading apps like WordPress, Drupal, Symfony and open source PHP apps is simple for less complicated environments, but once you start adding in things like new directories, custom themes/modules, source code control as well as separate development, test, and production systems, the upgrades start to get pretty hairy.</p>
<p>Take WordPress for example.  A typical upgrade of WordPress involves copying the new WordPress files over your existing files.  Then you have to copy back safe versions of things like wp-config.php, .htaccess (if you're using it), as well as any custom themes/modules from the wp-content/ directory.  Not to mention any of your own directories that should exist alongside your wp-includes/ and wp-content/ directories.  After that you can run the upgrade.php file.</p>
<p>These upgrade steps aren't terrible.  They're quite a bit better then most open source apps out there but they still suffer from a few problems:</p>
<ol>
<li>If you have your code, including your WordPress install, in Subversion or another source code control system, you have to commit all the files that change with each WordPress version.  There may be files added, deleted, etc.  You'll have to keep combing thru "svn status" messages to figure out everything you need to do to get all the WordPress files into your repository.  This can be painful.  And take a long time.</li>
<li>WordPress is specifically written so that you don't ever have to muck with the guts of it.  You create themes and plugins for added functionality.  So, since you're not maintaining the code that powers WordPress, do you really need all those deltas in your Subversion repository?  I think not.</li>
<li>What do you do with your own code in directories that sits alongside wp-includes/?  What if it’s in a Subversion repo?</li>
</ol>
<p>The <a href="http://codex.WordPress.org/Installing/Updating_WordPress_with_Subversion">WordPress site also has instructions for using Subversion with your site</a>.  Here, they advocate the use of “svn switch” to update your site.  This is much more manageable and solves a few of the above problems.  Most svn users can probably can get away with this method.  But unfortunately not me.</p>
<p>I have additional directories on some of my sites that I need to add into my WordPress install.  So I  have to copy/move them into the WordPress dirs which gets tough.  And then my “svn status” will get all wonky because my WordPress dir is under one repo and my code is under another.  This was endlessly confusing for me.</p>
<p>So I found myself looking for a way to completely wall off my WordPress install from the rest of my files.  I was reminded recently of the use of the Subversion externals property and my mind started buzzing with possibilities.  With "externals," I can say:</p>
<blockquote><p>Pull the stable WordPress code from WordPress.org and put it into this directory named /docs/wp/</p></blockquote>
<p>Then my other directories, which are under my own local subversion repo can exist at /docs/dir1, /docs/dir2, etc.  Of course, some Apache Alias magic is needed to make all this work.</p>
<p>Here's the way I set it up for my some of my projects.  So far so good.  This is a bit hairy to set up but subsequent upgrades are a breeze.  I use this across development, testing, and production systems (how to get those environments to work with WordPress  will be another entry)</p>
<p>First off, the previous Apache document root for domain1 was at <strong>/www/domain1/docs</strong>, so the WordPress files wound up like this:</p>
<p><strong>/www/domain1/docs/wp-content/</strong><br />
<strong>/www/domain1/docs/wp-includes/</strong></p>
<p>But I also have a lot of dirs that sit alongside of wordpress like this:</p>
<p><strong>/www/domain1/docs/dir1</strong><br />
<strong>/www/domain1/docs/dir2</strong></p>
<p>We're going to wind up changing that.</p>
<p>Create an subversion external property in /www/domain1/docs for WordPress</p>
<div class="igBar"><span id="lcode-13"><a href="#" onclick="javascript:showCodeTxt('code-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-13">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ cd /www/domain1/docs</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ export SVN_EDITOR=vi&nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#40;</span> or your editor of choice <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ svn propedit svn:externals &lt;strong&gt;.&lt;/strong&gt; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
vi starts up and you can add the following line:</p>
<div class="igBar"><span id="lcode-14"><a href="#" onclick="javascript:showCodeTxt('code-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-14">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">wp http:<span style="color:#FF9933; font-style:italic;">//svn.automattic.com/WordPress/tags/2.3.3 </span></div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Save and exit</p>
<div class="igBar"><span id="lcode-15"><a href="#" onclick="javascript:showCodeTxt('code-15'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-15">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ svn commit</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ svn update </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>( This downloads the WordPress code from the above address into your wp/ directory.  Now we are cooking. )</p>
<ul>
<li>Now, /www/domain1/docs/wp is where all your WordPress code lives.</li>
<li>Copy wp-config.php to /www/domain1/docs/wp/</li>
<li>Copy .htaccess to /www/domain1/docs/wp/</li>
<li>Create a link from the stock wp-content/ dir to your personal wp-content dir like this</li>
</ul>
<div class="igBar"><span id="lcode-16"><a href="#" onclick="javascript:showCodeTxt('code-16'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-16">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ cd /www/domain1/docs/wp</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ rm -Rf wp-content/&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span> use -Rf with care please! <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ ln -s /www/domain1/docs/wp-content wp-content </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<ul>
<li>In Apache config, set document root for this domain to /www/domain1/docs/wp</li>
<li>Put wp-content/ dir and any other non-WordPress dirs/files into  /www/domain1/docs</li>
<li>Create an alias for wp-content/ and any other non-WordPress dirs/files in Apache config</li>
</ul>
<div class="igBar"><span id="lcode-17"><a href="#" onclick="javascript:showCodeTxt('code-17'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-17">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Alias /wp-content&nbsp; &nbsp; &nbsp;/www/domain1/docs/wp-content</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Alias /dir1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/www/domain1/docs/dir1</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">Alias /dir2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/www/domain1/docs/dir2 </div>
</li>
</ol>
</div>
</div>
</div>
<p>
This looks like a lot of work, but it's really only a lot the first time around.  Next time WordPress has an upgrade:</p>
<div class="igBar"><span id="lcode-18"><a href="#" onclick="javascript:showCodeTxt('code-18'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-18">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ cd /www/domain1/docs</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ svn propedit svn:externals .&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span> change the tag to new version of WordPress <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ cd wp/</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ rm wp-content&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#40;</span>to remove the link<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ svn update&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#006600; font-weight:bold;">&#40;</span>to update to new version of WordPress<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ rm -Rf wp-content/</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">$$ ln -s /www/domain1/docs/wp-content&nbsp; wp-content </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Everything after the propedit in this group can and should be scripted which will basically give you a 2 step process for upgrading  WordPress, while keeping you wp-content/ dir under local source code control, as well as leaving room for any other directories or files your site might require.</p>
<p>This technique will probably also work with Symfony although I haven’t tried it yet.</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=102&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_102" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/02/18/using-subversion-externals-property-for-wordpress-upgrades/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;SSL Error: certificate verify failed&#8221; for Amazon S3 using s3sync</title>
		<link>http://www.boringguys.com/2008/02/17/ssl-error-certificate-verify-failed-for-amazon-s3-using-s3sync/</link>
		<comments>http://www.boringguys.com/2008/02/17/ssl-error-certificate-verify-failed-for-amazon-s3-using-s3sync/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 12:42:01 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Amazon S3]]></category>

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/02/17/ssl-error-certificate-verify-failed-for-amazon-s3-using-s3sync/</guid>
		<description><![CDATA[Amazon has changed their certificates for SSL access to the S3 service.  If you are receiving this error and you are using s3sync, you can look here for new certs for SSL access to S3.
Long term though, this is a problem with my (and possibly your) backup solution.  Look here for more info.  Specifically this [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon has changed their certificates for SSL access to the S3 service.  If you are receiving this error and you are using s3sync, you can <a href="http://s3sync.net/forum/index.php?topic=164.msg674#msg674">look here for new certs for SSL access to S3</a>.</p>
<p>Long term though, this is a problem with my (and possibly your) backup solution.  <a href="http://developer.amazonwebservices.com/connect/thread.jspa?messageID=77207&amp;#77207">Look here for more info.</a>  Specifically this bit:</p>
<blockquote><p><em>The certificate chain supporting Amazon S3 SSL is an implementation detail of the system that may change from time to time. A robust application should not depend on the Amazon S3 SSL certificate being signed by a particular certification authority. However, you can depend on the fact that we will only use reputable CAs that are widely supported by existing user-agents. The easiest way to select root CAs to bundle with your application is to simply import the set from a modern web browser with a large market share.<br />
</em></p></blockquote>
<p class="akst_link"><a href="http://www.boringguys.com/?p=101&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_101" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/02/17/ssl-error-certificate-verify-failed-for-amazon-s3-using-s3sync/feed/</wfw:commentRss>
		</item>
		<item>
		<title>You know you’ve made it when the spammers start using your name.</title>
		<link>http://www.boringguys.com/2008/01/17/you-know-you%e2%80%99ve-made-it-when-the-spammers-start-using-your-name/</link>
		<comments>http://www.boringguys.com/2008/01/17/you-know-you%e2%80%99ve-made-it-when-the-spammers-start-using-your-name/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 13:20:13 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[System Administration]]></category>

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

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

		<guid isPermaLink="false">http://www.boringguys.com/2008/01/17/you-know-you%e2%80%99ve-made-it-when-the-spammers-start-using-your-name/</guid>
		<description><![CDATA[All of a sudden, I have a bunch of returned email in one of my inboxes.  Looking thru it, it appears that some spammer has been sending email thru various open relays around the world and using random names at this domain as the email address of the sender.  
At first I freaked [...]]]></description>
			<content:encoded><![CDATA[<p><o></o>All of a sudden, I have a bunch of returned email in one of my inboxes.<span>  </span>Looking thru it, it appears that some spammer has been sending email thru various open relays around the world and using random names at this domain as the email address of the sender.<span>  </span></p>
<p class="MsoNormal"><o></o>At first I freaked out thinking they were coming from my server.<span>   </span>I looked around the box and didn’t see any evidence of abuse.<span>  </span>And I’m not in any server blacklists either. On a whim, I tried connecting to some of the sending servers specified in the emails and sure enough, I could send email out from a couple, so I don’t believe there’s anything fishy going on with my server.<span>  </span>I’ve notified the appropriate people regarding the open relays.</p>
<p class="MsoNormal"><o></o>Most normal people will never have heard of my site.<span>  </span>It’s not famous or popular.<span>  </span>So when they get an email from an address at this site, they should immediately know that it’s spam.<span>  </span>It’s not like sending an email out from a site that a lot of people use like the dozen “service at paypal” emails I receive each week.<span>  </span>I’m just a rinky-dink site about programming that earns a few dollars a month in advertising, not even enough to cover my costs.<span>  </span></p>
<p class="MsoNormal"><o></o>But I can see the spike in traffic this is creating as people either open the spam email or look at the sender and want to know more.<span>  </span>(question – exactly who are these people that have time to research every single spam item they receive? I think I want their job ).<span>  </span>With traffic going up, bandwidth usage goes up, and eventually costs go up.<span>  </span>Traffic going up because more people are reading my site is great.<span>  </span>Traffic going up because people are ticked off at me is not so great.</p>
<p class="MsoNormal"><o></o>I’m still perplexed as to how to get this spammer to stop using my domain name as the sender’s address.<span>   </span></p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=100&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_100" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2008/01/17/you-know-you%e2%80%99ve-made-it-when-the-spammers-start-using-your-name/feed/</wfw:commentRss>
		</item>
		<item>
		<title>People work with WS-* web services in PHP?  Why?</title>
		<link>http://www.boringguys.com/2007/12/13/people-work-with-ws-web-services-in-php-why/</link>
		<comments>http://www.boringguys.com/2007/12/13/people-work-with-ws-web-services-in-php-why/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 14:11:37 +0000</pubDate>
		<dc:creator>Rich Zygler</dc:creator>
		
		<category><![CDATA[Application Design]]></category>

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

		<category><![CDATA[Google API]]></category>

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

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

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

		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.boringguys.com/2007/12/13/people-work-with-ws-web-services-in-php-why/</guid>
		<description><![CDATA[I'd love to give ws02 a fair shake because they have an open source business model.  They have a web services framework for PHP which seems interesting from an academic standpoint.  But I think WS-* web services are WAY too complicated when compared to REST.
Just look at this new product description from ws02:
The [...]]]></description>
			<content:encoded><![CDATA[<p>I'd love to give <a href="http://www.ws02.com">ws02</a> a fair shake because they have an open source business model.  They have a <a href="http://wso2.com/products/wsf-php/">web services framework for PHP</a> which seems interesting from an academic standpoint.  But I think WS-* web services are WAY too complicated when compared to <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST</a>.</p>
<p>Just look at this <a href="http://biz.yahoo.com/bw/071211/20071211005351.html?.v=1">new product description from ws02</a>:</p>
<blockquote><p><em>The <strong>WSO2 IS</strong> enables LAMP and Java websites to provide strong authentication based on the new interoperable Microsoft CardSpace technology, which is built on the open standards Security Assertion Mark-up Language (SAML) and WS-Trust.</em></p></blockquote>
<p>Your life is now 1 minute shorter after trying to read and fully understand that paragraph.  Nevermind how much time would be spent trying to actually get this stuff to work.</p>
<p>I spent a lot of time in 2001-2002 working with Amazon's merchant program and the SOAP feeds required for putting client product on the Amazon site.  I generally think that Amazon has a pretty good clue about how to do things technically and they seemed to make it as easy as possible while using SOAP.  But it was still way too complicated for what we were trying to achieve (ie, send a list of available product to Amazon to sell ).  And at the time, it was a nightmare in PHP.  Now of course, we have the official PHP SOAP extension and some items in PEAR to work with too (does nusoap still exist?)</p>
<p>But I've run screaming from WS-anything since then, only getting caught in its claws a few times.  It hasn't gotten any easier.  It's gotten more difficult.  And more pointless.  <a href="http://www.tbray.org/ongoing/When/200x/2007/11/21/WS-dammerung">I'm not alone in this thinking</a>.</p>
<p>So I guess the ws02 folks are trying to solve the issue of authentication for web services.  Hasn't <a href="http://code.google.com/apis/accounts/Authentication.html">web services authentication</a> been solved already in a much easier way too?</p>
<p class="akst_link"><a href="http://www.boringguys.com/?p=99&amp;akst_action=share-this"  title="E-mail this, post to del.icio.us, etc." id="akst_link_99" class="akst_share_link" rel="nofollow"><b>Share this</b> via del.icio.us, digg, email, etc.</a>
</p>]]></content:encoded>
			<wfw:commentRss>http://www.boringguys.com/2007/12/13/people-work-with-ws-web-services-in-php-why/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
