<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9024009237222671517</id><updated>2026-02-11T03:16:20.002-05:00</updated><category term="php"/><category term="application-development"/><category term="system-administration"/><category term="business"/><category term="mysql"/><category term="general"/><category term="google"/><category term="microsoft"/><category term="zend"/><category term="code"/><category term="javascript"/><category term="jobs"/><category term="xml"/><category term="subversion"/><category term="facebook"/><category term="ideas"/><category term="python"/><category term="asp.net"/><category term="c#"/><category term="db2"/><category term="iphone"/><category term="java"/><category term="css"/><category term="database"/><category term="git"/><category term="linux"/><category term="razor"/><category term="visual-studio"/><title type='text'>Boring Guys Blog</title><subtitle type='html'>asp.net, c#, linux, php, mysql, git, and development info by Rich Zygler</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.boringguys.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/-/php'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/search/label/php'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/-/php/-/php?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-3801720636053924101</id><published>2012-09-18T08:00:00.000-04:00</published><updated>2012-09-18T08:00:00.175-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="asp.net"/><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>ASP.NET MVC Model binding in PHP?</title><content type='html'>I&#39;ve been working a lot this year with ASP.NET MVC 3 and C#. &amp;nbsp;One of the things I really like about these technologies is the model binding. &amp;nbsp;Let&#39;s say I have a data model called &quot;User&quot;, a plain old C# class like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/3739330.js?file=poco_user_model&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
I can set that as a model for my view to use in the &quot;Edit&quot; controller like so:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/3739344.js?file=aspnet_mvc_edit_controller&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
And then I have &quot;User&quot; as the data model in my view. &amp;nbsp;Here&#39;s what&#39;s awesome about it, let&#39;s say I need to accept edits of the user account, maybe they can fix their first or last name. &amp;nbsp;I can pass that same User model from the previous page via a form into an Edit method that accepts that data model. &amp;nbsp;I don&#39;t have to muck about with assigning the Request variables ( POST / GET ) to an object. &amp;nbsp;All that is handled for me.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/3739351.js?file=aspnet_mvc_httppost_edit_controller&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
The ASP.NET MVC model binding will attempt to bind your model in these scenarios:&lt;br /&gt;
&lt;br /&gt;
- If you have a form element on the page with an idenitical name to a property in the model&lt;br /&gt;
- If the url contains a key value pair from your routing that is identical to a property in the model&lt;br /&gt;
- If any REQUEST element has a name that is identical to a property in the model&lt;br /&gt;
- Otherwise, that property of the model will remain null&lt;br /&gt;
&lt;br /&gt;
Plus, the ASP.NET MVC model binding will let you turn on/off model binding for various properties of the model.&lt;br /&gt;
&lt;br /&gt;
PHP, or rightly, the many PHP frameworks really need to implement something like this. &amp;nbsp;A few perform some pieces of this concept but I&#39;m not aware of any that currently serve up the whole enchilada. &amp;nbsp;What do you think?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2012/09/aspnet-mvc-model-binding-in-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3801720636053924101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3801720636053924101'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2012/09/aspnet-mvc-model-binding-in-php.html' title='ASP.NET MVC Model binding in PHP?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-2609106153475977856</id><published>2011-08-07T08:10:00.000-04:00</published><updated>2011-08-07T08:10:01.418-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>How to find all the distinct PHP session variables that your applications uses.</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;The short answer is a one line *nix shell command:&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #333333; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hor &quot;\$_SESSION\[&#39;[A-Za-z0-9_]*&#39;\]&lt;wbr&gt;&lt;/wbr&gt;&quot; * | sort -u&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;This command:&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;looks through all the files in your application recursively for the PHP $_SESSION reference&lt;/li&gt;
&lt;li&gt;finds any variables named with capital letters, or lowercase letters, or underscores, or numbers&lt;/li&gt;
&lt;li&gt;sorts the list alphabetically&amp;nbsp;&lt;/li&gt;
&lt;li&gt;removes the duplicate items in the list&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;The long answer is that I found myself with an interesting dilemma recently.&amp;nbsp; How to find all the PHP session variables set in my application.&amp;nbsp; Some pieces of the application were new code, some were older legacy code.&amp;nbsp; I needed to get the full list of session variables because I needed to delete most, but not all of them for a certain usage case ( ie, the user is still logged in and has some properties, but the other session data could be safely destroyed ).&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #333333; font-size: 13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial, sans-serif;&quot;&gt;So I began with some command line greps on linux. &amp;nbsp;First I tried:&lt;/span&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -r \$_SESSION *&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;This was&amp;nbsp; a decent list, but about 1000 rows long.&amp;nbsp; Too unwieldy to deal with.&amp;nbsp; Let&#39;s get rid of the filenames, I don&#39;t really care where the session values are set for my case.&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hr \$_SESSION *&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;This is a little better, but I don&#39;t need the whole line, just the session variable itself.&amp;nbsp; Let&#39;s see if we can start to grab the session var using a regex pattern.&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hor &quot;\$_SESSION\[&quot; *&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;That&#39;s getting us closer.&amp;nbsp; Now, I know ( or assume ) that my variables will only include upper/lower case letters as well as numbers and underscore.&amp;nbsp; Let&#39;s add those to the pattern.&amp;nbsp; ( you DO speak regex don&#39;t you? )&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hor &quot;\$_SESSION\[&#39;[A-Za-z0-9_]*&#39;\]&lt;wbr&gt;&lt;/wbr&gt;&quot; *&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;Now we are cooking.&amp;nbsp; This is a nice list of the session variables ( albeit only one array level deep which is all I needed ).&amp;nbsp; Now how to remove the duplicates?&amp;nbsp; Maybe we should &quot;sort&quot; them first?&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hor &quot;\$_SESSION\[&#39;[A-Za-z0-9_]*&#39;\]&lt;wbr&gt;&lt;/wbr&gt;&quot; * | sort&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;That is really close.&amp;nbsp; Is there a way to remove duplicates with the &quot;sort&quot; command?&amp;nbsp; Yes, there is.&amp;nbsp; Hot dog.&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;grep -hor &quot;\$_SESSION\[&#39;[A-Za-z0-9_]*&#39;\]&lt;wbr&gt;&lt;/wbr&gt;&quot; * | sort -u&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;There it is.&amp;nbsp; That&#39;s the final command I used which located around 50 variables in the old legacy code and new modular code that were used in the sessions.&amp;nbsp; The only really drawback to this code is it will not find multiple nested array values on the session itself, but you could add that as a separate regex if you need.&lt;/div&gt;&lt;div style=&quot;font-family: arial, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2011/08/how-to-find-all-distinct-php-session.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2609106153475977856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2609106153475977856'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2011/08/how-to-find-all-distinct-php-session.html' title='How to find all the distinct PHP session variables that your applications uses.'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-2805612986278195188</id><published>2010-12-13T16:06:00.002-05:00</published><updated>2010-12-20T05:09:44.929-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Explode a string with no delimiter in PHP</title><content type='html'>I needed a way to split a string by the character and put the results in an array. &amp;nbsp;Sounds like the perfect job for the explode function right? &amp;nbsp;Well, according to the manual:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #f1c232; border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;If&amp;nbsp;&lt;i&gt;&lt;tt class=&quot;parameter&quot; style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace; font-style: italic;&quot;&gt;delimiter&lt;/tt&gt;&lt;/i&gt;&amp;nbsp;is an empty&amp;nbsp;&lt;span class=&quot;type&quot;&gt;&lt;a class=&quot;type string&quot; href=&quot;http://us2.php.net/manual/en/language.types.string.php&quot; style=&quot;border-bottom-color: rgb(0, 0, 153); border-bottom-style: solid; border-bottom-width: 1px; color: #000099; text-decoration: none;&quot;&gt;string&lt;/a&gt;&lt;/span&gt;&amp;nbsp;(&quot;&quot;),&amp;nbsp;&lt;span class=&quot;function&quot;&gt;&lt;b&gt;explode()&lt;/b&gt;&lt;/span&gt;&amp;nbsp;will return&amp;nbsp;&lt;b&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;FALSE&lt;/tt&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;b&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;
&lt;/tt&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;That&#39;s a bummer. &amp;nbsp;&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;
&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;UPDATE: I also tried&amp;nbsp;&lt;/tt&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #222222; line-height: 16px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;str_split(&#39;whatever&#39;)&lt;/b&gt; but that has some problems with foreign strings.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 12px; line-height: 16px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;But we can do something like this:&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;tt style=&quot;font-family: Consolas, &#39;Andale Mono WT&#39;, &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;
&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: monospace;&quot;&gt;&lt;b&gt;$str = &quot;Let&#39;s split this string!&quot;;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;tt&gt;&lt;b&gt;// get the string length so we aren&#39;t paying for this in the loop &lt;/b&gt;&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;$strLen = strlen( $str );&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;// basically an &quot;explode&quot; on the string without needing delimiters&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;for ( $i = 0; $i &amp;lt; $strLen; $i++ )&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$arr[] = $str{$i};&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;print_r( $arr );&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy! &amp;nbsp;Let me know what other ways you can come up with to do something similar.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2010/12/explode-string-with-no-delimiter-in-php.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2805612986278195188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2805612986278195188'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2010/12/explode-string-with-no-delimiter-in-php.html' title='Explode a string with no delimiter in PHP'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-6728511288356582955</id><published>2010-11-06T08:14:00.000-04:00</published><updated>2010-11-06T08:14:24.574-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>SQLSTATE[HY000]: General error: could not call class constructor</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;b&gt;SQLSTATE[HY000]: &lt;span class=&quot;il&quot;&gt;General&lt;/span&gt; &lt;span class=&quot;il&quot;&gt;error&lt;/span&gt;: &lt;span class=&quot;il&quot;&gt;could&lt;/span&gt; &lt;span class=&quot;il&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;il&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;il&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;il&quot;&gt;constructor&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This rather vague &lt;span class=&quot;il&quot;&gt;error&lt;/span&gt; message has been popping up in some of my unit tests lately. &amp;nbsp;It&#39;s a PHP error in PDO querying MySQL that happens when you&#39;re using the setFetchMode method of the PDOStatement. &amp;nbsp;If you use the fetchMode of &quot;FETCH_CLASS&quot; you can get this error in one of three ways:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The class you specified has not been included/required so when PDO gets results, it cannot create an object of the class you specified since it doesn&#39;t have that class definition.&lt;/li&gt;
&lt;li&gt;Properties on the class you specified have been marked as protected or private and there aren&#39;t any setters for them so PDO can&#39;t set the properties on the new object.&lt;/li&gt;
&lt;li&gt;You used the optional third argument &quot;ctorargs&quot; to give constructor arguments on your new object however your arguments are incorrect and don&#39;t match those on the class.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Hope this helps other poor souls out there trying to figure this error out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2010/11/sqlstatehy000-general-error-could-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6728511288356582955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6728511288356582955'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2010/11/sqlstatehy000-general-error-could-not.html' title='SQLSTATE[HY000]: General error: could not call class constructor'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-6662918679028866418</id><published>2010-02-27T11:10:00.000-05:00</published><updated>2010-02-27T11:10:02.248-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="zend"/><title type='text'>Export from Wordpress blog and Import to Blogger</title><content type='html'>This script exports your posts and categories from your locally hosted Wordpress blog and imports them into a new Blogger blog online.  The script is based on the Blogger examples for working with PHP and blog data.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://github.com/rzygler/misc/blob/master/xfer_to_blogger.php&quot;&gt;Code to export from hosted Wordpress blog and import to Blogger at github&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You need to have the Zend Framework up and running on your system as it contains all the GData libraries for working with Google data in PHP.  This script doesn&#39;t use any of the MVC, so you just need to have the files somewhere that you can require them.  &lt;a href=&quot;http://framework.zend.com/&quot;&gt;More on Zend Framework here.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You need to edit line 8 to point to the path of your Zend Framework.  You also need to update the database connection variables right below that to match your wordpress blog.&lt;br /&gt;
&lt;br /&gt;
Some caveats:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Blogger can only import 50 blog posts per day before tripping some anti-spam protection.  So the SQL &quot;limit&quot; clause around line 322 will need to be adjusted.  It is set to get the first 50 posts and publish them.&lt;/li&gt;
&lt;li&gt;Wordpress &quot;categories&quot; become Blogger &quot;labels&quot;&lt;/li&gt;
&lt;li&gt;Blogger forces any imported comments to the blog posts to originate from you, the author, of the blog. &amp;nbsp;So I have omitted these from my script, figuring it would look crazy to be talking to myself. &amp;nbsp;You could hack this script to add those back in. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
What&#39;s great about Blogger is that you can create a new test blog and run this script, which allows you to select which Blogger blog you wish to update and go from there.&lt;br /&gt;
&lt;br /&gt;
The usage is:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;php xfer_to_blogger.php --user=email@email.com --pass=password&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The email and password here are the ones you used in setting up your Blogger account.&lt;br /&gt;
&lt;br /&gt;
Let me know how you make out and if you have any suggestions for the code.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2010/02/export-from-wordpress-blog-and-import.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6662918679028866418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6662918679028866418'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2010/02/export-from-wordpress-blog-and-import.html' title='Export from Wordpress blog and Import to Blogger'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-5081526301039937570</id><published>2009-07-23T05:36:00.001-04:00</published><updated>2010-01-18T10:23:27.729-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Hiring PHP5 Programmers</title><content type='html'>My company has placed an ad looking for more PHP5 programmers to work mostly in the social networking area.&amp;nbsp; We have a coding test that we give to everyone whose resume passes muster.&amp;nbsp; It&#39;s a basic test, includes some CRUD database functions as well as creating a basic Facebook app.&amp;nbsp; We specify PHP5 all over the place. &lt;br /&gt;
&lt;br /&gt;
But no one who takes the test ever uses any of PHP5&#39;s attributes.&amp;nbsp; Not one test app has come back using classes of any kind other then the Facebook reference. &lt;br /&gt;
&lt;br /&gt;
Am I being too hard on people for this?&amp;nbsp; Maybe we need to specify that creating classes is recommended if not mandatory?&amp;nbsp; I don&#39;t&amp;nbsp; know what the answer is, but I know that upon receiving several recent test apps in &quot;PHP5&quot; that have include files that contain only functions, I&#39;m a little depressed.&amp;nbsp; And yes, I used the quotes around php5 on purpose. &lt;br /&gt;
&lt;br /&gt;
.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2009/07/hiring-php5-programmers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5081526301039937570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5081526301039937570'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2009/07/hiring-php5-programmers.html' title='Hiring PHP5 Programmers'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-3791922934765990001</id><published>2008-12-15T02:57:00.002-05:00</published><updated>2011-01-06T08:17:31.782-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="subversion"/><category scheme="http://www.blogger.com/atom/ns#" term="system-administration"/><title type='text'>Development Environment layout using Linux, Apache, PHP, and Subversion</title><content type='html'>Some of the age old questions I face lately are: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;What&#39;s for dinner?&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Should I accept that friend request on Facebook for the friend of a friend of a friend that I knew 15 years ago?&lt;/li&gt;
&lt;li&gt;What&#39;s the best development and test environment layouts for PHP using Apache as a web server with Subversion for version control for multiple developers?&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Some of you may be asking yourselves the same questions.&amp;nbsp; The choice of dinner is a personal one.&amp;nbsp; I won&#39;t go into that except to say that everyone loves a good burrito.&amp;nbsp; Spicy!&amp;nbsp; And you probably don&#39;t care about my take on Facebook etiquette since your friends list probably dwarfs mine. &lt;br /&gt;
&lt;br /&gt;
But I do have some definite thoughts on the layout of development environments.&amp;nbsp; And I find that there&#39;s a huge lack of information about this on the interweb, so here you go. &lt;br /&gt;
&lt;br /&gt;
We use Linux, Apache, PHP, and subversion in our development environment and so these instructions will be biased towards these topics but I think you can apply this method using various other technologies. &lt;br /&gt;
&lt;br /&gt;
I like to give each developer their own development web site and development database.&amp;nbsp; I find it&#39;s easier for everyone to have their own individual sandbox to play in.&amp;nbsp; We give them each their own domain using their initials, something like &lt;strong&gt;rzdev.domain.com&lt;/strong&gt; for me and &lt;strong&gt;vbdev.domain.com&lt;/strong&gt; for another developer, Vinny Bag-o-Donuts.&amp;nbsp; We set the Apache directories up on the Linux dev box in a similar fashion: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/var/www/rzdev.domain.com/ &lt;br /&gt;
/var/www/vbdev.domain.com/&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
This has a few benefits.&amp;nbsp; If I need to show Vinny something with my site development, I can just send him the link to &lt;strong&gt;http://rzdev.domain.com/broken-page&lt;/strong&gt;.&amp;nbsp; I can make changes to code, even major infrastructure code and not break anything for the other developers.&amp;nbsp; We do the same thing with the databases, prefacing them with our initials. &lt;br /&gt;
&lt;br /&gt;
Now, since our dev boxes use Linux, we set up Samba for sharing on these web directories.&amp;nbsp; This means that all the devs can edit files and use source code management on the Linux server itself or on their Windows machines (we use either Eclipse or Zend Studio and create projects on the shares, that&#39;s a whole different posting!). &lt;br /&gt;
&lt;br /&gt;
This dev site layout is closely linked to the way we use Subversion for version control.&amp;nbsp; When we start a new site or application, if we can split out the development evenly enough, we&#39;ll just have everyone work from the trunk version of the code, with each developer working on their own little section. Each developer puts the trunk in their Apache dir and we edit the Apache configs to reflect this: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/var/www/rzdev.domain.com/trunk/ &lt;br /&gt;
/var/www/vbdev.domain.com/trunk/&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
The root of the dev sites typically look like this: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/var/www/rzdev.domain.com/trunk/docs&lt;/strong&gt; ( your Apache document root ) &lt;br /&gt;
&lt;strong&gt;/var/www/rzdev.domain.com/trunk/lib &lt;/strong&gt; ( non-public PHP library code ) &lt;br /&gt;
&lt;br /&gt;
When we commit code changes in Subversion, we have a hook that updates our main development site here: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/var/www/dev.domain.com/trunk&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
Again, that site can be seen on the web at http://dev.domain.com/&amp;nbsp; This way, we can do integration testing on our code to make sure our new code doesn&#39;t break code from someone else within the dev site. &lt;br /&gt;
&lt;br /&gt;
Now, the important thing here is that the Quality Assurance (QA) and Testing people ( if you&#39;re lucky enough to have them ), don&#39;t use any of these previously mentioned sites for their testing.&amp;nbsp; Why not?&amp;nbsp; Well, because if they&#39;re doing a good job and are therefore sufficiently anal, they&#39;re going to complain when code is changing on the site they&#39;re looking at. &lt;br /&gt;
&lt;br /&gt;
So we give them their own test site and database that&#39;s viewed on the web at &lt;strong&gt;http://test.domain.com/&lt;/strong&gt; and setup in apache at: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/var/www/test.domain.com/trunk/docs&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;/var/www/test.domain.com/trunk/lib&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
The developers will meet and create the list of files and database changes that get moved over to the test site.&amp;nbsp; How the actual moving is done doesn&#39;t really matter.&amp;nbsp; If you have the time and energy to set up some Ant or Phing tasks, that works great.&amp;nbsp; But copying/rsyncing files and running some SQL on the test database works just as well.&amp;nbsp; The most important part is that the developers meet to decide which part can go to test.&amp;nbsp; Otherwise, you could have code going to test and eventually production that might not be fully vetted. &lt;br /&gt;
&lt;br /&gt;
When QA finds bugs in &lt;strong&gt;test.domain.com&lt;/strong&gt;, they can send them to the developers.&amp;nbsp; The developers can instantly start working on fixing the bugs in their own dev space at &lt;strong&gt;rzdev.domain.com&lt;/strong&gt; and not affect the other developers or the ongoing testing of the application.&amp;nbsp; Pretty nice right? &lt;br /&gt;
&lt;br /&gt;
Advantages of this approach &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Uses source code management&lt;/li&gt;
&lt;li&gt;Developers can unit test their own code&lt;/li&gt;
&lt;li&gt;Developers can do integration testing between each other&#39;s code&lt;/li&gt;
&lt;li&gt;Developer A typically doesn&#39;t destroy code or data that developer B is using&lt;/li&gt;
&lt;li&gt;Developers don&#39;t destroy code or data that QA/testing is looking at&lt;/li&gt;
&lt;li&gt;Developers can both edit files and use source code management in either Linux or Windows environment&lt;/li&gt;
&lt;li&gt;Very scalable.&amp;nbsp; Adding new developers into the mix is as simple as adding their respective sub domains and databases (of course, this can also be viewed as a disadvantage, see below)&lt;/li&gt;
&lt;li&gt;Less bugs make it to production&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Disadvantages &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Lots of sysadmin overhead initially and with each subsequent domain added.&amp;nbsp; You have to set up all those developer sites, rzdev, vbdev, etc.&amp;nbsp; Same overhead when using branching within subversion.&amp;nbsp; Plus, you have to setup all those databases and setup the config code to connect to the appropriate database for each developer domain.&lt;/li&gt;
&lt;li&gt;Lots of file space for all the sites and databases.&lt;/li&gt;
&lt;li&gt;Confusing for lone wolf and gunslinger developers who are used to overwriting production or each other&#39;s development code (too bad for them!)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
So what do you think?&amp;nbsp; How do you setup YOUR PHP development environment? &lt;br /&gt;
&lt;br /&gt;
..</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/12/development-environment-layout-using.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3791922934765990001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3791922934765990001'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/12/development-environment-layout-using.html' title='Development Environment layout using Linux, Apache, PHP, and Subversion'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-7745860330490644394</id><published>2008-11-05T02:27:00.001-05:00</published><updated>2010-01-18T10:22:47.269-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Mysql and PHP help Obama become President of the United States</title><content type='html'>We have our answer to my earlier question about &lt;a href=&quot;http://www.boringguys.com/2008/06/06/obama-and-mccain-website-technology/&quot;&gt;technology used by Obama and McCain&lt;/a&gt;.&amp;nbsp; One small step for LAMP, one giant leap for LAMP-kind.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/11/mysql-and-php-help-obama-become.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7745860330490644394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7745860330490644394'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/11/mysql-and-php-help-obama-become.html' title='Mysql and PHP help Obama become President of the United States'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-299109959787846886</id><published>2008-06-06T09:01:00.001-04:00</published><updated>2010-01-18T10:22:59.793-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Obama and McCain website technology</title><content type='html'>Hey all, I just realized that &lt;a href=&quot;http://www.johnmccain.com/&quot;&gt;johnmccain.com&lt;/a&gt; is running MS Windows and .NET while &lt;a href=&quot;http://www.barackobama.com/index.php&quot;&gt;barackobama.com&lt;/a&gt; is running LAMP with PHP.  May the best tech, errr, candidate win. &lt;br /&gt;
&lt;br /&gt;
Also, &lt;a href=&quot;http://my.barackobama.com/page/s/techinterest&quot;&gt;Obama needs a PHP contractor in Boston, Ma&lt;/a&gt;.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/06/obama-and-mccain-website-technology.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/299109959787846886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/299109959787846886'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/06/obama-and-mccain-website-technology.html' title='Obama and McCain website technology'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-720456588401899828</id><published>2008-05-20T01:46:00.001-04:00</published><updated>2010-01-15T15:51:16.240-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="business"/><category scheme="http://www.blogger.com/atom/ns#" term="jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Beware the Lone Wolf PHP Developer</title><content type='html'>With all the posts on &lt;a href=&quot;http://www.phpcult.com/blog/frankly-my-dear-i-dont-give-a-damn-interviewing-techniques-for-the-rest-of-us/&quot;&gt;interviewing PHP candidates&lt;/a&gt; popping up lately, I thought I&#39;d post this draft that I&#39;ve been sitting on for awhile that&#39;s related to new jobs and interviewing candidates. &lt;br /&gt;
&lt;br /&gt;
I&#39;ve run into the Lone Wolf PHP Developer at several places I have done work.  Sometimes, I&#39;ve had to work side-by-side with the Lone Wolf.  Other times, I&#39;ve replaced the Lone Wolf who had moved on to different hunting grounds.  Still other times I&#39;ve had to hire people and had to choose between a Lone Wolf and several other candidates. &lt;br /&gt;
&lt;br /&gt;
Just who is this Lone Wolf and why should we fear them so much?  Here are some telltale signs of the Lone Wolf PHP Developer: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The Lone Wolf doesn&#39;t understand how to work in a team of developers. They typically don&#39;t even understand what benefits that would create. They do all development on their own, listening to very little input from qualified sources.&lt;/li&gt;
&lt;li&gt;The Lone Wolf got to page 141 on Enter-A-Beginner-PHP-Book-Title-Here and no further.  Objects?  They&#39;ve never heard of them.  They must not need them.&lt;/li&gt;
&lt;li&gt;The Lone Wolf re-invents the wheel for every project and doesn&#39;t use standard tools and practices.&lt;/li&gt;
&lt;li&gt;The Lone Wolf eats their young.  OK, I made that one up.  Frankly, how could a Lone Wolf have young anyway?&lt;/li&gt;
&lt;li&gt;The Lone Wolf is perfectly satisfied with doing programming work on production servers and using FTP to deploy their code.  It never occurs to them that they should strive to create development and test environments.  It never occurs to them that deployment via FTP doesn&#39;t scale higher then one developer.&lt;/li&gt;
&lt;li&gt;The Lone Wolf doesn&#39;t know what the letters SCM, CVS, or SVN are, or how to use them in their daily work.&lt;/li&gt;
&lt;li&gt;The Lone Wolf never reads my blog or any other blogs on programming.  The Lone Wolf may not know what a blog is.&lt;/li&gt;
&lt;li&gt;The Lone Wolf says crazy things like &quot;MySQL can&#39;t do transactions&quot; and somehow gets management to believe them.&lt;/li&gt;
&lt;li&gt;The Lone Wolf was initially adored by management because they launched a lot of code live during their short stay.  Too bad all that code is buggy and completely un-maintainable moving forward.  Management doesn&#39;t like that.&lt;/li&gt;
&lt;li&gt;The Lone Wolf whips up incredibly stupid and unnecessarily complex solutions like template systems in which the templates are stored in a database instead of the file system/memory/cache.  They shun using tried and true templating methods like PHP files, XSLT, or at the very least, Smarty. (see also: reinventing the wheel)&lt;/li&gt;
&lt;li&gt;The Lone Wolf names variables after themselves that mean nothing to anyone else (ex, $lonewolfFlag )&lt;/li&gt;
&lt;li&gt;And worst of all… The Lone Wolf PHP Developer fails to realize that there are other developers out there in the business world, trying to earn a living just like they are.  By failing to conform to development standards that have been proven and tested, they make everyone&#39;s job more difficult.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Now, I personally have run into this Lone Wolf scenario with other programming languages as well.  But I think because it is so simple to work with PHP without much formal training that it lends itself to this problem much more readily then other languages.  The blessing and curse of PHP is that it is the new VB 6.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/05/beware-lone-wolf-php-developer.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/720456588401899828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/720456588401899828'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/05/beware-lone-wolf-php-developer.html' title='Beware the Lone Wolf PHP Developer'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-1433107194557994983</id><published>2008-05-13T01:50:00.001-04:00</published><updated>2010-01-15T15:51:51.967-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>PHP Developer Jobs are the Hottest EVER!!!</title><content type='html'>** I&#39;ll preface this by saying that I&#39;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.  ** &lt;br /&gt;
&lt;br /&gt;
If anecdotal evidence means anything, and sometimes it does... and at the risk of sounding like a teenage girl writing on a myspace page, the PHP job market is literally blasting off!  I&#39;ve never seen the market for PHP programmers as strong as it right now in the NYC/Philadelphia region. &lt;br /&gt;
&lt;br /&gt;
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&#39;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 &quot;Senior PHP Developer&quot; and &quot;PHP Tech Lead.&quot;  I can&#39;t remember seeing so many senior PHP positions.  The salaries I&#39;m seeing are also at an all time high.  Many ads have salary ranges that extend well into 6 figures. &lt;br /&gt;
&lt;br /&gt;
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.  ;-) &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
So what is everyone else seeing in their area with regards to PHP developer jobs? &lt;br /&gt;
&lt;br /&gt;
.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/05/php-developer-jobs-are-hottest-ever.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1433107194557994983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1433107194557994983'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/05/php-developer-jobs-are-hottest-ever.html' title='PHP Developer Jobs are the Hottest EVER!!!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-2351588021399574793</id><published>2008-04-15T10:06:00.000-04:00</published><updated>2010-01-08T11:53:35.715-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="mysql"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>First impressions on Google App Engine</title><content type='html'>&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/whatisgoogleappengine.html&quot;&gt;From the Google site&lt;/a&gt;:
&lt;p style=&quot;margin-left: 0.5in&quot;&gt;&lt;em&gt;Google App Engine lets you run your web applications on Google&#39;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&#39;s ready to serve your users.&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;margin-left: 0.5in&quot;&gt;&lt;em&gt;You can serve your app using a free domain name on the &lt;code&gt;&lt;span style=&quot;font-size: 10pt&quot;&gt;appspot.com&lt;/span&gt;&lt;/code&gt; domain, or use &lt;a href=&quot;http://www.google.com/a/&quot;&gt;Google Apps&lt;/a&gt; to serve it from your own domain. You can share your application with the world, or limit access to members of your organization.&lt;/em&gt;&lt;/p&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;Without actually firing up the SDK yet, here are my initial thoughts:&lt;/p&gt;

&lt;ol style=&quot;margin-top: 0in&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Do we      trust Google?&lt;span&gt;  &lt;/span&gt;With our data?&lt;span&gt;  &lt;/span&gt;With our users?&lt;span&gt;  &lt;/span&gt;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.&lt;span&gt;       &lt;/span&gt;This is kind of like Amazon’s EC2 on steroids.&lt;span&gt;  &lt;/span&gt;No sysadmin stuff like with EC2, just      coding.&lt;span&gt;  &lt;/span&gt;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.&lt;span&gt;  &lt;/span&gt;You have to trust them a little bit more      then I’m comfortable with.&lt;span&gt;  They&#39;ve already got your users  and your data and your code.  Don&#39;t they conceivably control your business at that point?  Maybe I&#39;m being paranoid here.&lt;/span&gt;Plus, there’s the lock-in factor.&lt;span&gt;       &lt;/span&gt;If I develop my app using MySQL as a backend, I know I could with      only some minor pain change that backend to Oracle.&lt;span&gt;  &lt;/span&gt;It’s all SQL at some point.&lt;span&gt;  &lt;/span&gt;How would you swap out of using the      Google DataStore API?&lt;span&gt;  &lt;/span&gt;It’s a      proprietary system with no published standards.
&lt;span&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;GAE is      currently only in Python.&lt;span&gt;  &lt;/span&gt;No PHP      love?&lt;span&gt;  &lt;/span&gt;I realize a lot of Google      runs on Python and C++ and that’s what it is in their wheelhouse.&lt;span&gt;  &lt;/span&gt;But I still consider Python to be a      fringe language.&lt;span&gt;  &lt;/span&gt;If GAE were opened      up to support PHP and C#, it would blast off in popularity.&lt;span&gt;  &lt;/span&gt;Then again, a Python only crowd is a      good beta test before the crush of PHP devs comes in.
&lt;!--[if !supportLineBreakNewLine]--&gt;
&lt;!--[endif]--&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;The      DataStore API (ie, BigTable) is difficult to wrap my head around.&lt;span&gt;  &lt;/span&gt;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. &lt;span&gt; &lt;/span&gt;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.&lt;span&gt;  &lt;/span&gt;It seems      like much more of your data fetching is done in code rather then in      SQL.&lt;span&gt;  &lt;/span&gt;The shift in thinking reminds      me of my own move to Object-Oriented Programming.&lt;span&gt;  &lt;/span&gt;I whined like a baby during that phase      of my programming development (well, at least I did on the inside).&lt;span&gt;  &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o&gt; &lt;/o&gt;Hopefully I’ll get some more time to play with this stuff soon and report back.&lt;/p&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/04/first-impressions-on-google-app-engine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2351588021399574793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2351588021399574793'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/04/first-impressions-on-google-app-engine.html' title='First impressions on Google App Engine'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-2673404594935327900</id><published>2008-04-09T13:22:00.001-04:00</published><updated>2010-01-15T15:53:31.506-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="subversion"/><title type='text'>wordpress 2.5 and subversion</title><content type='html'>For some reason, performing an &lt;strong&gt;svn update&lt;/strong&gt; on the external repository &lt;strong&gt;http://svn.automattic.com/wordpress/trunk/ &lt;/strong&gt;does absolutely nothing.&amp;nbsp; This is pretty baffling behavior.&amp;nbsp; Same &lt;a href=&quot;http://www.h4x3d.com/when-svn-up-does-not-work-wordpress-subversion/&quot;&gt;wordpress and subversion issue also mentioned here.&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
I&#39;ve also tried /tags/2.5&amp;nbsp; and /branches/2.5 and nothing.&amp;nbsp; No changes come across.&amp;nbsp; Very weird.&amp;nbsp; Anyone else getting this?</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/04/wordpress-25-and-subversion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2673404594935327900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2673404594935327900'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/04/wordpress-25-and-subversion.html' title='wordpress 2.5 and subversion'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-6588080479582217577</id><published>2008-03-19T05:46:00.001-04:00</published><updated>2010-01-15T15:54:33.520-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Symfony sfException Call to undefined method BaseModel::__toString</title><content type='html'>Working on some projects in Symfony recently.  I ran into a problem when I used the symfony admin generator to create a &quot;backend&quot; module for a table that has a foreign key relationship. &lt;br /&gt;
&lt;br /&gt;
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&#39;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: &lt;br /&gt;
[xml] &lt;br /&gt;
&lt;column autoincrement=&quot;true&quot; name=&quot;id&quot; primarykey=&quot;true&quot; required=&quot;true&quot; type=&quot;SMALLINT&quot;&gt;  &lt;/column&gt;&lt;column name=&quot;country_id&quot; required=&quot;true&quot; type=&quot;SMALLINT&quot;&gt;  &lt;foreign foreigntable=&quot;countries&quot;&gt;  &lt;reference foreign=&quot;id&quot; local=&quot;country_id&quot;&gt;  &lt;/reference&gt;  &lt;/foreign&gt;  &lt;/column&gt;&lt;column name=&quot;name&quot; size=&quot;40&quot; type=&quot;VARCHAR&quot;&gt;  &lt;/column&gt;&lt;column name=&quot;abbrev&quot; size=&quot;2&quot; type=&quot;VARCHAR&quot;&gt;  &lt;/column&gt;&lt;br /&gt;
&lt;table idmethod=&quot;native&quot; name=&quot;states&quot;&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
[/xml] &lt;br /&gt;
&lt;br /&gt;
When you do: &lt;br /&gt;
[code] &lt;br /&gt;
symfony propel-init-admin backend states States &lt;br /&gt;
[/code] &lt;br /&gt;
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&#39;s in your db model): &lt;br /&gt;
&lt;br /&gt;
[php] &lt;br /&gt;
&lt;br /&gt;
function __toString() &lt;br /&gt;
{ &lt;br /&gt;
return $this-&amp;gt;name; &lt;br /&gt;
} &lt;br /&gt;
[/php] &lt;br /&gt;
&lt;br /&gt;
That should solve the problem.  It&#39;s odd that this comes up.  And I couldn&#39;t find anything on it when googling.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/03/symfony-sfexception-call-to-undefined.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6588080479582217577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6588080479582217577'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/03/symfony-sfexception-call-to-undefined.html' title='Symfony sfException Call to undefined method BaseModel::__toString'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-6640575162001910991</id><published>2008-03-10T05:20:00.001-04:00</published><updated>2010-01-15T15:55:17.501-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Drupal 6 and new Apress Drupal book</title><content type='html'>I have been working on a couple of projects using &lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal&lt;/a&gt; lately that required creating some custom modules.  So again, I flipped thru my well-worn copy of &lt;a href=&quot;http://www.apress.com/book/view/1590597559&quot;&gt;Pro Drupal Development&lt;/a&gt;.  Here is my earlier &lt;a href=&quot;http://www.boringguys.com/2007/07/03/book-review-of-pro-drupal-development-by-john-k-vandyk-and-matt-westgate-published-by-apress/&quot;&gt;review of Pro Drupal Development&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Drupal has released version 6 now.  So I click to the Apress site and lo and behold, they&#39;re already working on &lt;a href=&quot;http://www.apress.com/book/view/1430209895&quot;&gt;Pro Drupal Development, 2nd edition&lt;/a&gt; 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.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/03/drupal-6-and-new-apress-drupal-book.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6640575162001910991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/6640575162001910991'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/03/drupal-6-and-new-apress-drupal-book.html' title='Drupal 6 and new Apress Drupal book'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-3841615999469205929</id><published>2008-02-18T14:33:00.001-05:00</published><updated>2010-01-15T15:56:45.014-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="subversion"/><category scheme="http://www.blogger.com/atom/ns#" term="system-administration"/><title type='text'>Using Subversion externals property for WordPress upgrades</title><content type='html'>&lt;o&gt;&lt;/o&gt;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. &lt;br /&gt;
&lt;br /&gt;
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&#39;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. &lt;br /&gt;
&lt;br /&gt;
These upgrade steps aren&#39;t terrible.  They&#39;re quite a bit better then most open source apps out there but they still suffer from a few problems: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;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&#39;ll have to keep combing thru &quot;svn status&quot; 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.&lt;/li&gt;
&lt;li&gt;WordPress is specifically written so that you don&#39;t ever have to muck with the guts of it.  You create themes and plugins for added functionality.  So, since you&#39;re not maintaining the code that powers WordPress, do you really need all those deltas in your Subversion repository?  I think not.&lt;/li&gt;
&lt;li&gt;What do you do with your own code in directories that sits alongside wp-includes/?  What if it’s in a Subversion repo?&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
The &lt;a href=&quot;http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion&quot;&gt;WordPress site also has instructions for using Subversion with your site&lt;/a&gt;.  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. &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
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 &quot;externals,&quot; I can say: &lt;br /&gt;
&lt;blockquote&gt;Pull the stable WordPress code from WordPress.org and put it into this directory named /docs/wp/&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Here&#39;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) &lt;br /&gt;
&lt;br /&gt;
First off, the previous Apache document root for domain1 was at &lt;strong&gt;/www/domain1/docs&lt;/strong&gt;, so the WordPress files wound up like this: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/www/domain1/docs/wp-content/&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;/www/domain1/docs/wp-includes/&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
But I also have a lot of dirs that sit alongside of wordpress like this: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;/www/domain1/docs/dir1&lt;/strong&gt; &lt;br /&gt;
&lt;strong&gt;/www/domain1/docs/dir2&lt;/strong&gt; &lt;br /&gt;
&lt;br /&gt;
We&#39;re going to wind up changing that. &lt;br /&gt;
&lt;br /&gt;
Create an subversion external property in /www/domain1/docs for WordPress &lt;br /&gt;
[code] &lt;br /&gt;
$$ cd /www/domain1/docs &lt;br /&gt;
$$ export SVN_EDITOR=vi     ( or your editor of choice ) &lt;br /&gt;
$$ svn propedit svn:externals &lt;strong&gt;.&lt;/strong&gt; &lt;br /&gt;
[/code] &lt;br /&gt;
vi starts up and you can add the following line: &lt;br /&gt;
&lt;br /&gt;
[code]wp http://svn.automattic.com/WordPress/tags/2.3.3[/code] &lt;br /&gt;
&lt;br /&gt;
Save and exit &lt;br /&gt;
[code]$$ svn commit &lt;br /&gt;
$$ svn update [/code] &lt;br /&gt;
&lt;br /&gt;
( This downloads the WordPress code from the above address into your wp/ directory.  Now we are cooking. ) &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Now, /www/domain1/docs/wp is where all your WordPress code lives.&lt;/li&gt;
&lt;li&gt;Copy wp-config.php to /www/domain1/docs/wp/&lt;/li&gt;
&lt;li&gt;Copy .htaccess to /www/domain1/docs/wp/&lt;/li&gt;
&lt;li&gt;Create a link from the stock wp-content/ dir to your personal wp-content dir like this&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
[code]$$ cd /www/domain1/docs/wp &lt;br /&gt;
$$ rm -Rf wp-content/    ( use -Rf with care please! ) &lt;br /&gt;
$$ ln -s /www/domain1/docs/wp-content wp-content &lt;br /&gt;
[/code] &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;In Apache config, set document root for this domain to /www/domain1/docs/wp&lt;/li&gt;
&lt;li&gt;Put wp-content/ dir and any other non-WordPress dirs/files into  /www/domain1/docs&lt;/li&gt;
&lt;li&gt;Create an alias for wp-content/ and any other non-WordPress dirs/files in Apache config&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
[code] &lt;br /&gt;
Alias /wp-content     /www/domain1/docs/wp-content &lt;br /&gt;
Alias /dir1           /www/domain1/docs/dir1 &lt;br /&gt;
Alias /dir2           /www/domain1/docs/dir2 &lt;br /&gt;
[/code] &lt;br /&gt;
This looks like a lot of work, but it&#39;s really only a lot the first time around.  Next time WordPress has an upgrade: &lt;br /&gt;
[code] &lt;br /&gt;
$$ cd /www/domain1/docs &lt;br /&gt;
$$ svn propedit svn:externals .      ( change the tag to new version of WordPress ) &lt;br /&gt;
$$ cd wp/ &lt;br /&gt;
$$ rm wp-content      (to remove the link) &lt;br /&gt;
$$ svn update         (to update to new version of WordPress) &lt;br /&gt;
$$ rm -Rf wp-content/ &lt;br /&gt;
$$ ln -s /www/domain1/docs/wp-content  wp-content &lt;br /&gt;
[/code] &lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
This technique will probably also work with Symfony although I haven’t tried it yet.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2008/02/using-subversion-externals-property-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3841615999469205929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3841615999469205929'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2008/02/using-subversion-externals-property-for.html' title='Using Subversion externals property for WordPress upgrades'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-1538017098053242440</id><published>2007-12-13T06:11:00.001-05:00</published><updated>2010-01-15T16:01:25.137-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>People work with WS-* web services in PHP?  Why?</title><content type='html'>I&#39;d love to give &lt;a href=&quot;http://www.ws02.com/&quot;&gt;ws02&lt;/a&gt; a fair shake because they have an open source business model.  They have a &lt;a href=&quot;http://wso2.com/products/wsf-php/&quot;&gt;web services framework for PHP&lt;/a&gt; which seems interesting from an academic standpoint.  But I think WS-* web services are WAY too complicated when compared to &lt;a href=&quot;http://en.wikipedia.org/wiki/Representational_State_Transfer&quot;&gt;REST&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Just look at this &lt;a href=&quot;http://biz.yahoo.com/bw/071211/20071211005351.html?.v=1&quot;&gt;new product description from ws02&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote&gt;&lt;em&gt;The &lt;strong&gt;WSO2 IS&lt;/strong&gt; 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.&lt;/em&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
I spent a lot of time in 2001-2002 working with Amazon&#39;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?) &lt;br /&gt;
&lt;br /&gt;
But I&#39;ve run screaming from WS-anything since then, only getting caught in its claws a few times.  It hasn&#39;t gotten any easier.  It&#39;s gotten more difficult.  And more pointless.  &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2007/11/21/WS-dammerung&quot;&gt;I&#39;m not alone in this thinking&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
So I guess the ws02 folks are trying to solve the issue of authentication for web services.  Hasn&#39;t &lt;a href=&quot;http://code.google.com/apis/accounts/Authentication.html&quot;&gt;web services authentication&lt;/a&gt; been solved already in a much easier way too?</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/12/people-work-with-ws-web-services-in-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1538017098053242440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1538017098053242440'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/12/people-work-with-ws-web-services-in-php.html' title='People work with WS-* web services in PHP?  Why?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-7933516862150077603</id><published>2007-10-31T04:09:00.001-04:00</published><updated>2010-01-15T16:03:56.262-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application-development"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Open source twitter clone anyone?</title><content type='html'>Does anyone know of an open source twitter clone?&amp;nbsp; Preferably in PHP or Python.&amp;nbsp; Not a client mind you, but the server guts of receiving IMs and doing something with them, enabling followers, public viewing, etc.&amp;nbsp; I want to implement this on an intranet inside a corp network and obviously not display our tweets for public consumption, but only internal consumption.&amp;nbsp; If this doesn&#39;t exist, what do you all think is the easiest way to create this?&amp;nbsp; An instance of jabber or something else?</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/10/open-source-twitter-clone-anyone.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7933516862150077603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7933516862150077603'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/10/open-source-twitter-clone-anyone.html' title='Open source twitter clone anyone?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-9178636369812721153</id><published>2007-10-25T05:04:00.001-04:00</published><updated>2010-01-15T16:04:12.045-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Is Microsoft buying Facebook a good thing for PHP?</title><content type='html'>Microsoft is &lt;a href=&quot;http://www.downloadsquad.com/2007/10/24/microsoft-buys-a-240-million-piece-of-facebook/&quot;&gt;buying a piece of Facebook&lt;/a&gt;.   What do we all think this means for PHP since Facebook is one of the &quot;web 2.0&quot; leaders built on PHP?  The way I see it, here are the options: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Facebook continues on its merry path, taking only funding from Microsoft&lt;/li&gt;
&lt;li&gt;Facebook continues on its merry path, taking funding from Microsoft in addition to some development &quot;resources.&quot;  Resources here could be people, equipment, and technology.  The free people, equipment, and technology probably won&#39;t fit very well in a LAMP environment.  Pressure to move infrastructure to MS-friendly environment mounts.&lt;/li&gt;
&lt;li&gt;Microsoft rewrites the whole thing in C#&lt;/li&gt;
&lt;li&gt;Microsoft learns how simple and scalable PHP is and freaks out, unleashing a FUD campaign the likes of which we&#39;ve never even dreamed of.&lt;/li&gt;
&lt;li&gt;Microsoft learns from the open source environment, partially embraces it, and creates PHP.net, a half functioning version of PHP for .net framework.&lt;/li&gt;
&lt;li&gt;Microsoft learns from the open source environment, fully embraces it, and abandons Windows by creating their own GUI for the next version of Linux.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
In reality, I can really only see #1 or #2 happening.  Your thoughts?</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/10/is-microsoft-buying-facebook-good-thing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/9178636369812721153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/9178636369812721153'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/10/is-microsoft-buying-facebook-good-thing.html' title='Is Microsoft buying Facebook a good thing for PHP?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-7583335025803796820</id><published>2007-10-10T07:31:00.001-04:00</published><updated>2010-01-15T16:04:45.943-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="zend"/><title type='text'>Zend Studio for Eclipse Beta</title><content type='html'>As my part time job (for no pay) is spent being a shill for Zend, I thought I&#39;d mention that the new &lt;a href=&quot;http://www.zend.com/products/zend_studio/eclipse?hpb=studio-eclipse-beta-p1-2&quot;&gt;Zend Studio for Eclipse Beta&lt;/a&gt; is out and ready to be test driven.  I&#39;ve got a few deadlines both professional and personal to take care of over the next few days but I&#39;m hoping to kick the tires next week.  Let me know of your experiences so far. &lt;br /&gt;
&lt;br /&gt;
UPDATE - since the beta period is over, the new url is now &lt;a href=&quot;http://www.zend.com/en/products/studio/downloads&quot;&gt;http://www.zend.com/en/products/studio/downloads&amp;nbsp;&lt;/a&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/10/zend-studio-for-eclipse-beta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7583335025803796820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/7583335025803796820'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/10/zend-studio-for-eclipse-beta.html' title='Zend Studio for Eclipse Beta'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-2836327582058310790</id><published>2007-08-22T04:52:00.002-04:00</published><updated>2010-01-15T16:10:12.238-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="system-administration"/><title type='text'>SECURITY ERROR: package in channel &amp;quot;pear.phpunit.de&amp;quot; retrieved another channel&amp;#39;s name for download!</title><content type='html'>Odd Pear error today.  Trying to install PHPUnit3 on a newish server.  Following the instructions at the &lt;a href=&quot;http://www.phpunit.de/pocket_guide/3.2/en/installation.html&quot;&gt;PHPUnit Pocketguide&lt;/a&gt;.  Here&#39;s the steps I did and the error I received.  I&#39;m not sure at this point if this is a bug in the Pear installer or if there&#39;s a problem with the way the PHPUnit channel is configured so I don&#39;t know where to file this. &lt;br /&gt;
&lt;br /&gt;
[code]php# pear channel-discover pear.phpunit.de &lt;br /&gt;
&lt;br /&gt;
Adding Channel &quot;pear.phpunit.de&quot; succeeded &lt;br /&gt;
Discovery of channel &quot;pear.phpunit.de&quot; succeeded &lt;br /&gt;
&lt;br /&gt;
php# pear install phpunit/PHPUnit &lt;br /&gt;
&lt;br /&gt;
SECURITY ERROR: package in channel &quot;pear.phpunit.de&quot; retrieved another channel&#39;s name for download! (&quot;pear.php.net&quot;) &lt;br /&gt;
Cannot initialize &#39;channel://pear.phpunit.de/PHPUnit&#39;, invalid or missing package file &lt;br /&gt;
Package &quot;channel://pear.phpunit.de/PHPUnit&quot; is not valid &lt;br /&gt;
install failed &lt;br /&gt;
&lt;br /&gt;
php# pear version &lt;br /&gt;
PEAR Version: 1.6.1 &lt;br /&gt;
PHP Version: 5.2.1 &lt;br /&gt;
Zend Engine Version: 2.2.0[/code] &lt;br /&gt;
&lt;br /&gt;
Installing the code manually (the second set of install instructions listed) works just fine however.  On to my unit testing!</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/08/security-error-package-in-channel.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2836327582058310790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/2836327582058310790'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/08/security-error-package-in-channel.html' title='SECURITY ERROR: package in channel &amp;quot;pear.phpunit.de&amp;quot; retrieved another channel&amp;#39;s name for download!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-3763841572923659073</id><published>2007-08-14T05:45:00.001-04:00</published><updated>2010-01-15T16:21:57.259-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>PRADO framework for PHP similar to ASP.NET</title><content type='html'>For Drew, the .NET fanboy who is just dying to release his app without having to shell out the big bucks for .NET hosting.&amp;nbsp; The &lt;a href=&quot;http://www.xisc.com/&quot;&gt;PRADO framework for PHP&lt;/a&gt; is almost like ASP.NET. &amp;nbsp; From the homepage: &lt;br /&gt;
&lt;blockquote&gt;PRADO is a component-based and event-driven framework.&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Look at that example on the homepage.&amp;nbsp; That&#39;s .NET with a PHP5 wrapper on it, not literally of course, but you get the point.&amp;nbsp; And yes, it has user authentication built in as recently described in this &lt;a href=&quot;http://www.phpit.net/article/ten-different-php-frameworks/&quot;&gt;PHP framework comparison chart&lt;/a&gt;.&amp;nbsp; Enjoy.&amp;nbsp; And I&#39;ll take the first 1,000 shares at a discount when you go public.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/08/prado-framework-for-php-similar-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3763841572923659073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/3763841572923659073'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/08/prado-framework-for-php-similar-to.html' title='PRADO framework for PHP similar to ASP.NET'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-5185964397600361623</id><published>2007-07-24T12:58:00.001-04:00</published><updated>2010-01-15T16:23:05.173-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="zend"/><title type='text'>Zend Framework, Google APIs, Google Reader issue</title><content type='html'>I&#39;ve been playing around with the &lt;a href=&quot;http://framework.zend.com/&quot;&gt;Zend Framework&lt;/a&gt; and the &lt;a href=&quot;http://code.google.com/apis/&quot;&gt;Google API&lt;/a&gt;.   I&#39;m pretty bummed out that there doesn&#39;t seem to be any API for Google Reader.  I was hoping to use Zend_GData_Query to suck in my starred and/or shared feeds.  You can do this using getFeed() but I wanted to include the tags I&#39;ve put on the entries.  But I don&#39;t see my tags anywhere in the data, only the original &quot;category terms&quot; if specified by the feed author. &lt;br /&gt;
&lt;br /&gt;
I even tried to do a login authorization with Google using  Zend_Gdata_ClientLogin, but the public and private Google Reader URIs threw a hissy fit on me.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/07/zend-framework-google-apis-google.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5185964397600361623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5185964397600361623'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/07/zend-framework-google-apis-google.html' title='Zend Framework, Google APIs, Google Reader issue'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-1365348620550407045</id><published>2007-07-20T12:00:00.001-04:00</published><updated>2010-01-15T16:24:31.950-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="system-administration"/><title type='text'>Unable to find the socket transport &amp;quot;ssl&amp;quot; - did you forget to enable it when you configured PHP?</title><content type='html'>Ran into this error recently... here&#39;s how to fix it, assuming you have OpenSSL already installed on your system.&amp;nbsp; For OpenSSL your PHP config values look like this: &lt;br /&gt;
&lt;br /&gt;
--with-openssl[=DIR]&amp;nbsp;&amp;nbsp;&amp;nbsp; Include OpenSSL support (requires OpenSSL &amp;gt;= 0.9.6) &lt;br /&gt;
&lt;br /&gt;
So, if you&#39;ve compiled from scratch, you can just recompile adding this flag to your configure command.</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/07/unable-to-find-socket-transport-did-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1365348620550407045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/1365348620550407045'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/07/unable-to-find-socket-transport-did-you.html' title='Unable to find the socket transport &amp;quot;ssl&amp;quot; - did you forget to enable it when you configured PHP?'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9024009237222671517.post-5950268803429389408</id><published>2007-07-20T11:50:00.005-04:00</published><updated>2010-01-19T12:50:12.060-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="code"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="zend"/><title type='text'>Alpha Wordpress Plugin for Delicious with Zend Framework&amp;#39;s Zend_Service_Delicious</title><content type='html'>I have &lt;a href=&quot;http://www.wordpress.org/&quot;&gt;Wordpress&lt;/a&gt; set up on PHP5.  While Wordpress is largely a PHP4 entity, I wanted to see if it could play nicely with the&lt;a href=&quot;http://framework.zend.com/&quot;&gt; Zend Framework&lt;/a&gt;, which is a PHP5-only entity.  With some careful fiddling, it works pretty well. &lt;br /&gt;
&lt;br /&gt;
With my Zend Framework code set up in my PHP include path, the first thing I needed to do to create a Wordpress Plugin was to enable my plugin to call the Zend Framework classes.  First I tried this towards the end of my wp-config.php file: &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: php&quot;&gt;require_once &#39;Zend/Loader.php&#39;; 
function __autoload($class) 
{ 
  Zend_Loader::loadClass($class); 
} 

&lt;/pre&gt;&lt;br /&gt;
This caused Wordpress to freak out like a chihuahua on speed. Not good.  I figured we&#39;d have to do something special because we don&#39;t want ALL the classes to autoload, just the Zend ones.  So I scrapped my previous __autoload and tried this instead: &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: php&quot;&gt;require_once &#39;Zend/Loader.php&#39;; 
function __autoload($class) 
{ 
  $pos = strpos($class, &#39;Zend&#39;); 
  if ($pos !== false) 
  { 
    Zend_Loader::loadClass($class); 
  } 
} 
&lt;/pre&gt;&lt;br /&gt;
Ahh, success.  Sweeter then a brownie sundae with extra chocolate sauce. &lt;br /&gt;
&lt;br /&gt;
From there, the rest is easy.  Here&#39;s some basic code for the rz_delicious plugin, a basic PHP file you can drop into your Wordpress Plugins dir.  It uses Zend_Cache and Zend_Service_Delicious to put your del.icio.us bookmarks onto your Wordpress blog.  It first checks to see if there&#39;s a cached version already, if not, it uses the &lt;a href=&quot;http://del.icio.us/help/api/&quot;&gt;del.icio.us API&lt;/a&gt; to fetch your latest bookmarks.  It does some list formatting there too because I didn&#39;t feel like handling that in my theme. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: php&quot;&gt;&amp;lt; ?php 
/* 
Plugin Name: RZ Delicious 
Plugin URI: http://www.boringuys.com/ 
Description: YADelicious Plugin 
Author: Rich Zygler 
Version: 1.0 
Author URI: http://www.boringguys.com/ 
*/ 

/* 
called from theme via: 
get_rz_delicious() 
*/ 

function get_rz_delicious() 
{ 
  $output = &#39;&#39;; 
  $username = &#39;username&#39;; 
  $password = &#39;password&#39;; 
  $tag      = &#39;tagname&#39;; 
  $numPosts      = 15; 
  $cacheTime     = 3600;      // seconds 
  $cacheDir      = &#39;/tmp/&#39;; 

$frontendOptions = array( 
  &#39;lifetime&#39; =&amp;gt; $cacheTime,                  // in seconds 
  &#39;automatic_serialization&#39; =&amp;gt; false  // this is default anyway 
); 

$backendOptions = array(&#39;cache_dir&#39; =&amp;gt; $cacheDir); 

$cache = Zend_Cache::factory(&#39;Output&#39;, &#39;File&#39;, $frontendOptions, $backendOptions); 

// we pass a unique identifier to the start() method 
if(!$cache-&amp;gt;start(&#39;rz_delicious&#39;)) 
{ 
  try 
  { 
    $delicious = new Zend_Service_Delicious($username, $password); 
    $posts = $delicious-&amp;gt;getRecentPosts($tag,$numPosts);  //$tag 

    if (count($posts) &amp;gt; 0) 
    { 
      $output .= &#39;&lt;ul id=&quot;delicious&quot;&gt;&#39;;  
    }  
    foreach ($posts as $post)  
    {  
      $output .= &#39;&lt;li&gt;&lt;a href=&quot;http://www.blogger.com/.%20$post-%3EgetUrl()%20.&quot; title=&quot;&#39; .  $post-&amp;gt;getNotes() . &#39;&quot;&gt;&#39;; &lt;br /&gt;
      $output .= $post-&amp;gt;getTitle() . &#39;&lt;/a&gt; &#39;; &lt;br /&gt;
&lt;br /&gt;
      $strTags = &#39; ( tags: &#39;; &lt;br /&gt;
      foreach ($post-&amp;gt;getTags() as $tag) &lt;br /&gt;
      { &lt;br /&gt;
        if ($tag != &#39;boringguys.com&#39;) &lt;br /&gt;
        { &lt;br /&gt;
          $strTags .= &#39;&lt;a href=&quot;http://del.icio.us/&#39;%20.%20$username%20.%20&#39;/&#39;%20.%20$tag%20.%20&#39;&quot; title=&quot;&#39; . $tag . &#39;&quot;&gt;&#39;; &lt;br /&gt;
$strTags .= $tag . &#39;&lt;/a&gt; | &#39;; &lt;br /&gt;
        } &lt;br /&gt;
      } &lt;br /&gt;
      $strTags = trim($strTags, &#39;| &#39;); &lt;br /&gt;
      $output .= $strTags . &#39; ) &#39;; &lt;br /&gt;
    } &lt;br /&gt;
    if (count($posts) &amp;gt; 0) &lt;br /&gt;
    { &lt;br /&gt;
      $output .= &#39;&lt;/li&gt;&lt;/ul&gt;&#39;; 
    } 
  } 
  catch (Zend_Service_Delicious_Exception $e) 
  { 
    // largely ignore the delicious service error 
    $output .= &#39;&lt;ul id=&quot;delicious&quot;&gt;&#39;;  
    $output .= &#39;&lt;li&gt;del.icio.us service unavailable&lt;/li&gt;&#39;;  
    $output .= &#39;&#39;;  
  }  
  echo $output;  
  $cache-&amp;gt;end(); // the output is saved and sent to the browser  
}   
}    &lt;/pre&gt;&lt;/ul&gt;</content><link rel='replies' type='text/html' href='http://blog.boringguys.com/2007/07/alpha-wordpress-plugin-for-delicious.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5950268803429389408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9024009237222671517/posts/default/5950268803429389408'/><link rel='alternate' type='text/html' href='http://blog.boringguys.com/2007/07/alpha-wordpress-plugin-for-delicious.html' title='Alpha Wordpress Plugin for Delicious with Zend Framework&amp;#39;s Zend_Service_Delicious'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>