<?xml version="1.0" encoding="utf-8"?>
<feed
    xmlns="http://www.w3.org/2005/Atom"
    xmlns:at="http://www.sixapart.com/ns/at"
    xmlns:icbm="http://postneo.com/icbm"
    xmlns:rvw="http://purl.org/NET/RVW/0.2/"
    xml:lang="en">
    <title>till&#39;s blog</title>
    <link rel="self" type="application/atom+xml" title="till&#39;s blog (Atom)" href="http://till.vox.com/library/posts/tags/php/page/1/atom.xml" />
    <link rel="alternate" type="text/html" title="till&#39;s blog" href="http://till.vox.com/library/posts/tags/php/page/1/"/>

    <link rel="service.post" type="application/atom+xml" title="till&#39;s blog" href="http://www.vox.com/services/atom/svc=post/collection_id=6a00c2251d8a1b549d00c2251e7add8e1d" />

    <link rel="service.subscribe" type="application/atom+xml" title="till&#39;s blog" href="http://till.vox.com/library/posts/tags/php/atom.xml" />

    
    
        
    <link rel="next" type="application/atom+xml" title="till&#39;s blog" href="http://till.vox.com/library/posts/tags/php/page/2/atom.xml" />
    
    <link rel="last" type="application/atom+xml" title="till&#39;s blog" href="http://till.vox.com/library/posts/tags/php/page/2/atom.xml" />


    <category term="php" scheme="http://till.vox.com/tags/php/?_c=feed-atom-full" label="php" />

    <generator uri="http://www.vox.com/">Vox</generator>
    <updated>2008-06-22T22:20:54Z</updated>

    <author>
        <name>till</name>
        <uri>http://till.vox.com/?_c=feed-atom-full</uri>
    </author>

    <id>tag:vox.com,2006:6p00c2251d8a1b549d/tags/php/</id>


    
    <entry>
        <title>NYPHP</title>
    
    
    
        <link rel="alternate" type="text/html" title="NYPHP" href="http://till.vox.com/library/post/nyphp.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="NYPHP" href="http://till.vox.com/library/post/nyphp.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="NYPHP" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00fa96816f590003" /> 
                <id>tag:vox.com,2008-06-22:asset-6a00c2251d8a1b549d00fa96816f590003</id>
        <published>2008-06-22T22:20:54Z</published>
        <updated>2008-06-22T22:20:54Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>I&#39;m gonna attend <a href="http://www.nyphp.org/">NYPHP</a> next Thuesday (Tuesday, June 24th at 6:30pm <em>sharp)</em> and look forward to meeting some folks from the NY PHP scene - is anyone else in the area and coming?</p><p>Their website tells me that Bruce Momjian (PostgreSQL core developer and EnterpriseDB Senior Database Architect ) will give a talk on PostgreSQL. Good enough to convince me to go, even though there will be the Facebook Developer Garage the very same day (good planning :P).</p><p>I might add that the meeting is at IBM&#39;s offices in Midtown, and that you need to RSVP at least by Monday 3:00 PM.<br /> </p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/nyphp.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00fa96816f590003?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="nyc" scheme="http://till.vox.com/tags/nyc/" label="nyc" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    </entry>

    
    <entry>
        <title>RoundCube 0.1-stable release</title>
    
    
    
        <link rel="alternate" type="text/html" title="RoundCube 0.1-stable release" href="http://till.vox.com/library/post/roundcube-01-stable-release.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="RoundCube 0.1-stable release" href="http://till.vox.com/library/post/roundcube-01-stable-release.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="RoundCube 0.1-stable release" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398e29ca00004" /> 
                <id>tag:vox.com,2008-03-04:asset-6a00c2251d8a1b549d00e398e29ca00004</id>
        <published>2008-03-04T13:13:37Z</published>
        <updated>2008-03-04T16:51:46Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <blockquote><p><em>
After more than two years of development we&#39;re proud to announce the</em><br /><em>
first stable version of RoundCube Webmail. It&#39;s not as feature rich as</em><br /><em>
we&#39;d like it to be but the released version is considered to run</em><br /><em>
stable for a productive environment. Thanks to our users we fixed many</em><br /><em>
bugs and added some nice new features since the first 0.1-alpha</em><br /><em>
version was published in 2005. So go ahead and upgrade your</em><br /><em>
installations now! Download the latest release from</em><br /><em><a href="http://roundcube.net/downloads" target="_blank">http://roundcube.net/downloads</a></em></p><p><em>
A more or less complete list of changes is available at</em><br /><em><a href="http://trac.roundcube.net/wiki/Changelog" target="_blank">http://trac.roundcube.net/wiki/Changelog</a></em><br /><em>(...)</em><em></em></p></blockquote><p>


 Quoted from Thomas Brüderli&#39;s email this morning.</p><p>Rejoice. Celebrate. But also let&#39;s move on and keep up the great work. :-)<br />Thanks again to everyone involved!</p><p><strong>Edit:</strong> We are on <a href="http://digg.com/software/RoundCube_Webmail_0_1_stable_released">digg</a>. (Please digg!)<br /></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/roundcube-01-stable-release.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398e29ca00004?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="roundcube" scheme="http://till.vox.com/tags/roundcube/" label="roundcube" />
    
    <category term="php4" scheme="http://till.vox.com/tags/php4/" label="php4" />
    
    </entry>

    
    <entry>
        <title>PHP Fatal error:  Non-static method FOO::FOO() in (...)</title>
    
    
    
        <link rel="alternate" type="text/html" title="PHP Fatal error:  Non-static method FOO::FOO() in (...)" href="http://till.vox.com/library/post/php-fatal-error-non-static-method-foofoo-in.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="PHP Fatal error:  Non-static method FOO::FOO() in (...)" href="http://till.vox.com/library/post/php-fatal-error-non-static-method-foofoo-in.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="PHP Fatal error:  Non-static method FOO::FOO() in (...)" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00f48ce069930003" /> 
                <id>tag:vox.com,2008-03-02:asset-6a00c2251d8a1b549d00f48ce069930003</id>
        <published>2008-03-03T00:25:00Z</published>
        <updated>2008-03-03T00:36:41Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>After bumping up the PHP 5.2.x on one of our servers Friday night, I got reports from some of our clients that certain websites would not work anymore. After investigating this problem, I found that <del>most</del> all of <del>the</del> <em>my</em> problems were in Joomla, Mambo and Drupal plugins/extensions which those people used.</p><p>Of course no offense to those three systems (and their developers and people using them ;-)), but I googled the error and found that many people reported similar issues on support forums of those three. At least the top results suggest that. On the list of offenders are also shops such as the very popular OSCommerce. Anyway - just let me stress this again - no offense meant (but you need to fix your code :-P).</p><p>On to the fix.</p><p>The offending code, could look like (this example is from Mambo&#39;s AKO_Book extension):<br /><blockquote><p><em>MENU_Default::MENU_Default();</em><br /></p></blockquote>
Digging into this, you will probably find a class that would look similar to this:<br /><blockquote><p><em>&lt;?php<br />class MENU_Default {<br />&#160; function MENU_Default() {<br />&#160;&#160;&#160; // do something<br />&#160; }<br />}<br />?&gt;</em><br /></p></blockquote>At first I (paniced and) thought that effectively all static calls without a &quot;static&quot; keyword are broken in PHP5.2.5. But after investigating and raising a bit of havoc on IRC and internals@ (Sorry!), <a href="http://bjori.blogspot.com/">Bjori</a> shed some light into/onto my confusion and figured out that this is just a static call to the constructor of a class.</p><p>And calling the constructor of a class directly is just wrong. And static calls to the constructor have not been allowed since 5.0.0. (I am not sure why no one reported issues before but I guess since I wrote our customers that the update was smooth, they just had to dig up something. :-))</p><p>The fix is simple and should have been there to begin with:<br />
<blockquote><p>// currently:<br /><em>MENU_Default::MENU_Default();</p><p>// replace with:<br /></em>new <em>MENU_Default();</em><br /></p></blockquote> <div>(By the way - it really helps if you set log_errors = On in your php.ini or via php_value in your &lt;VirtualHost&gt; because you are then able to track all errors without reproducing them a dozen times, which is sometimes hard because they might be hidden in a wizard-like process and customers are generally not very good at describing what they did to get the error - they will just say, &quot;It doesn&#39;t work!&quot;.)<br /><br />Issues like that are to be traced back to PHP4&#39;s more &#39;lax <em>interpretation</em> of OO. Even on PHP4 coders should have written the latter, but no one forced them to. And because I know the pain of upgrading a system like Joomla/Mambo, Drupal and others - especially once you put a lot of customization in it, I hope this helps someone out there fix their issues.<br /><br />Debatable is still if any version of PHP5 should really consider this to be a fatal error. Or if this call should be subject to <a href="http://docs.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-strict">E_STRICT</a> which was introduced in PHP5 to ensure forward compatibility of code, which sounds like the best fit for this. I believe in the E_STRICT way.<br /><br />I know and understand that there are probably about a dozen technical reasons to E_FATAL instead, but in my (very) humble opinion to make people aware with E_STRICT and to add a note that E_STRICT will eventually turn into E_FATAL in PHP6 would have been the right path to persue here.<br />Less breakage and more awareness - they make the &quot;we told you so&quot;-argument more valid. Everything but that just adds to the user&#39;s general fear to adopt PHP5 and to finally get rid off PHP4.<br /><br />On a side note - I feel that I need to add that we only allow those old versions to run because we patched them for our clients and because we use an application firewall called <a href="http://www.modsecurity.org/">mod_security</a>. mod_security is customizable through rule sets and we constantly update them to combat known attacks (e.g. XSS, comment spam, ...).<br /><br />If you don&#39;t have those resources available to yourself, you need to consider an update of the PHP application more sooner than later.<br /></div></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/php-fatal-error-non-static-method-foofoo-in.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00f48ce069930003?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="update" scheme="http://till.vox.com/tags/update/" label="update" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="joomla" scheme="http://till.vox.com/tags/joomla/" label="joomla" />
    
    <category term="upgrade" scheme="http://till.vox.com/tags/upgrade/" label="upgrade" />
    
    <category term="drupal" scheme="http://till.vox.com/tags/drupal/" label="drupal" />
    
    <category term="oo" scheme="http://till.vox.com/tags/oo/" label="oo" />
    
    <category term="php5" scheme="http://till.vox.com/tags/php5/" label="php5" />
    
    <category term="php4" scheme="http://till.vox.com/tags/php4/" label="php4" />
    
    <category term="mamboserver" scheme="http://till.vox.com/tags/mamboserver/" label="mamboserver" />
    
    <category term="e_strict" scheme="http://till.vox.com/tags/e_strict/" label="e_strict" />
    
    <category term="e_fatal" scheme="http://till.vox.com/tags/e_fatal/" label="e_fatal" />
    
    </entry>

    
    <entry>
        <title>Stallman lecture</title>
    
    
    
        <link rel="alternate" type="text/html" title="Stallman lecture" href="http://till.vox.com/library/post/stallman-lecture.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Stallman lecture" href="http://till.vox.com/library/post/stallman-lecture.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Stallman lecture" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398df16920004" /> 
                <id>tag:vox.com,2008-02-22:asset-6a00c2251d8a1b549d00e398df16920004</id>
        <published>2008-02-22T07:02:25Z</published>
        <updated>2008-02-22T07:02:25Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Most of us use a lot of free software everyday, the GPL looks familiar, but how is software classified as <em>free</em> (versus non-free) and where did it come from?</p><blockquote><p><em>So I had the maybe weird <em>pleasure</em> to see this lecture two days
ago. I went primarily not because I wanted to know so much about free
software, but rather for reasons such as I think Richard M. Stallman (RMS) is someone you have to at least <em>witness</em> once. Especially when you are involved in this <em>open source</em> (he objects to this term) thing.</em><br /></p></blockquote><p>Continue at <a href="http://berlin.metblogs.com/archives/2008/02/aftermath_from.phtml">Metroblogging Berlin</a>.<br /><blockquote></blockquote> </p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/stallman-lecture.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398df16920004?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="license" scheme="http://till.vox.com/tags/license/" label="license" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="opensource" scheme="http://till.vox.com/tags/opensource/" label="opensource" />
    
    <category term="gpl" scheme="http://till.vox.com/tags/gpl/" label="gpl" />
    
    </entry>

    
    <entry>
        <title>HTTP_Session2-0.7.0 released</title>
    
    
    
        <link rel="alternate" type="text/html" title="HTTP_Session2-0.7.0 released" href="http://till.vox.com/library/post/http_session2-070-released.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="HTTP_Session2-0.7.0 released" href="http://till.vox.com/library/post/http_session2-070-released.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="HTTP_Session2-0.7.0 released" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398d9de030002" /> 
                <id>tag:vox.com,2008-02-06:asset-6a00c2251d8a1b549d00e398d9de030002</id>
        <published>2008-02-06T14:56:02Z</published>
        <updated>2008-02-07T10:52:25Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Wee - rapidly approaching the 1.0, I kicked out a the 0.7.0 release of <a href="http://pear.php.net/package/HTTP_Session2">HTTP_Session2</a> (<a href="http://till.vox.com/library/posts/tags/http_session2/">tag</a>) today.</p><p><strong>What&#39;s new you ask?</strong><br /><ul><li><a href="http://www.danga.com/memcached/">Memcache</a> support</li><li>Many fixes in the containers</li><li>Documentation fixes<br /></li></ul>Thanks to <a href="http://pear.php.net/user/troehr">Thorsten</a> who contributed the Container fixes and the Memcache-support (was ported from HTTP_Session, original author is Chad Wagner) itself, and thanks to the people who gave feedback via bugtracker and/or email. Thanks, thanks, thanks!</p><p><strong>To upgrade:</strong><br /><blockquote><p>pear upgrade HTTP_Session2<br /></p></blockquote><strong>To install:</strong><br /><blockquote><p>pear install HTTP_Session2<br /></p></blockquote>Make sure your PEAR is semi up to date. :-)<br /></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/http_session2-070-released.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398d9de030002?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="pear" scheme="http://till.vox.com/tags/pear/" label="pear" />
    
    <category term="memcache" scheme="http://till.vox.com/tags/memcache/" label="memcache" />
    
    <category term="http_session2" scheme="http://till.vox.com/tags/http_session2/" label="http_session2" />
    
    </entry>

    
    <entry>
        <title>Who needs it?</title>
    
    
    
        <link rel="alternate" type="text/html" title="Who needs it?" href="http://till.vox.com/library/post/who-needs-it.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="Who needs it?" href="http://till.vox.com/library/post/who-needs-it.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="Who needs it?" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398d9554e0003" /> 
                <id>tag:vox.com,2008-02-04:asset-6a00c2251d8a1b549d00e398d9554e0003</id>
        <published>2008-02-04T14:57:12Z</published>
        <updated>2008-02-04T15:55:04Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Following the discussion around <a href="http://news.php.net/php.pdo">PDO2 and CLAs</a> in the PHP world, I read <a href="http://news.php.net/php.pdo/120">this email</a> (from Derick) today:</p><blockquote><p><em>Why not just do the &quot;right thing&quot; (tm):</em></p><p><em>- Have PDO2 in core, including all the drivers that don&#39;t require a CLA </em><br /><em>&#160; (MySQL, and assume also pgsql, sqlite, firebird...).</em><br /><em>- All things that require a CLA somewhere else.</em><br /></p></blockquote><p>Well, I&#39;ve read most of the CLA-related email thread over the past weeks and I was so curious to finally find out who exactly pressed for this CLA to be used. Is it <em>just</em> Zend (which has one on all related to Zend Framework), or is it a specific database vendor like IBM, Microsoft or Oracle? I couldn&#39;t figure it out. Apparently [assumption] it&#39;s not MySQL, FirebirdSQL, PostgreSQL and SQLite.</p><p>Then I came across <a href="http://www.tonybibbs.com/article.php/MicrosoftAndPHP">Tony Bibb&#39;s blog post</a> (via <a href="http://www.planet-php.org">planet-php</a>), and most notably an email from Microsoft which he shared. From this email, I quote:</p><blockquote><p><em>Ideally we&#39;re hoping that with our assistance, we can help<br />PHP projects support SQL Server as a database option, running<br />on top of Windows.</em><br /></p></blockquote><p>See how this is relevant to PDO2? ;-)</p><blockquote><p><em>We&#39;re hoping to get the permission to contribute code to do that<br />ourselves, but in the meantime, we can help out in other ways.<br /></em></p></blockquote><p>Sounds very humble. Not at all like - &quot;Please sign this [big stack of paper], and then we contribute!&quot;.</p><blockquote><p><em>If the undertaking to add SQL Server support is too large, we have<br />considered funding a developer to write and contribute the code<br />to the project.<br /></em></p></blockquote><p>Those are just excerpts of course (and those are not well quoted  at all), but what I am getting at here is that apparently the vendor(s) pushing for a CLA are not the SQLServer guys, at least it makes little sense to me to have two different strategies for a single project (&quot;PHP&quot;) when the objective is to have developers use your product (&quot;Microsoft SQLServer&quot;).</p><p>Just an observation, so I thought I&#39;d share.<br /></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/who-needs-it.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398d9554e0003?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="microsoft" scheme="http://till.vox.com/tags/microsoft/" label="microsoft" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="database" scheme="http://till.vox.com/tags/database/" label="database" />
    
    <category term="zend" scheme="http://till.vox.com/tags/zend/" label="zend" />
    
    <category term="cla" scheme="http://till.vox.com/tags/cla/" label="cla" />
    
    <category term="pdo" scheme="http://till.vox.com/tags/pdo/" label="pdo" />
    
    <category term="pdo2" scheme="http://till.vox.com/tags/pdo2/" label="pdo2" />
    
    </entry>

    
    <entry>
        <title>PHP &amp; PEAR things</title>
    
    
    
        <link rel="alternate" type="text/html" title="PHP &amp; PEAR things" href="http://till.vox.com/library/post/php-pear-things.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="PHP &amp; PEAR things" href="http://till.vox.com/library/post/php-pear-things.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="PHP &amp; PEAR things" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398d606680003" /> 
                <id>tag:vox.com,2008-01-25:asset-6a00c2251d8a1b549d00e398d606680003</id>
        <published>2008-01-26T19:00:00Z</published>
        <updated>2008-01-26T22:10:17Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>
Here are some updates from my personal PHP-world from January of 2008.</p><p><strong><span style="font-size: 1.25em;">Writing tests</span></strong></p><p>Tests are hip, tests are cool. Lately everyone does it. So I looked at phpUnit and phpt. So far phpt wins for simplicity, though I am sure <a href="http://www.phpunit.de/">phpUnit</a> has its use cases as well (and there is this awesome tool called <a href="http://www.phpundercontrol.org/about.html">phpUndercontrol</a> puts all your tests, docs and CruiseControl into shiny graphs). But for now I am sticking to phpt to cover some packages with tests. For a dead-simple entry to the phpt-world, check this: <a href="http://qa.php.net/write-test.php">http://qa.php.net/write-test.php</a></p><p>For starters I will write a test with phpt for <a href="http://pear.php.net/package/Net_CheckIP2">Net_CheckIP2</a>; and see how that works out.</p><p><strong><span style="font-size: 1.25em;">I can haz article</span></strong>

</p><p><a href="http://www.phparch.com/c/magazine/author/206">I got published</a> in this month&#39;s php|architect. Woohoo! I wrote an article about RoundCube (which by theway is the coolest webmail on the planet). Thanks again to Steph Fox from php|architect for the opportunity and her über-patience, ... and for correcting my name <a href="http://twitter.com/klimpong/statuses/633411442">online</a>.</p><p>(Surprisingly someone managed to put an Umlaut (ä) into my name but still screwed up on Till vs. Tim.)</p><p><strong><span style="font-size: 1.25em;">RoundCube<br /></span></strong><br />In other <a href="http://www.roundcube.net/">RoundCube</a>-related news - no, RoundCube is not dead. Development struggled a bit last year since the project&#39;s future seemed not so bright for a while but we made it past that and current
ly work on merging my <a href="http://trac.roundcube.net/browser/branches/devel-vnext">devel-vnext</a> back branch into trunk. The steps are to apply patchsets from trunk; rc1 to rc2 and then rc2 to current trunk. What a load of work. Argh. :O I hope I can write up another post (as a status report) on Monday.</p><p><strong><span style="font-size: 1.25em;">Writing documentation<br /></span></strong><br />Documentation is just as sexy as tests are. At least that&#39;s another trend. And that&#39;s good because some of PHP seems to move away from a PHP-script-kiddy-image to more thoroughly well-tested and well-documented applications (or packages for that matter). I also managed to write some <a href="http://pear.php.net/manual/en/package.http.http-session2.php">docs for HTTP_Session2</a>. Woohoo! Thanks to everyone who helped out.</p><p>Which reminds me that I need to roll a new release of HTTP_Session2 as well and include <a href="http://pear.php.net/user/troehr">Thorsten Roehr&#39;s</a> awesome additions. (Sorry for not getting to it earlier!) Also speaking of HTTP_Session2. I am currently using it to handle sessions on a small cluster (three servers) and we handle 4Mbit/s on average. It&#39;s working pretty well!</p><p>Along with HTTP_Session2 the Contact_Vcard_* packages are due for a new alpha.</p><p><strong><span style="font-size: 1.25em;">Services_Plazes<br /></span></strong><br />During <a href="http://www.flickr.com/photos/till/sets/72157603717033218/">plazecamp</a> (early January, 2008), I wrote an API wrapper for the plazes.com-REST-api. It&#39;s called <a href="http://code.google.com/p/servicesplazes/">Services_Plazes</a> and a PEAR-style package and soon to be proposed (once I get those sexy docs and tests done). And <a href="http://tijs.org/">someone&#39;s</a> using it already.</p><p><br />That&#39;s all, kidz.<br /><div><br /></div></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/php-pear-things.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398d606680003?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="tests" scheme="http://till.vox.com/tags/tests/" label="tests" />
    
    <category term="qa" scheme="http://till.vox.com/tags/qa/" label="qa" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="pear" scheme="http://till.vox.com/tags/pear/" label="pear" />
    
    <category term="plazes" scheme="http://till.vox.com/tags/plazes/" label="plazes" />
    
    <category term="docs" scheme="http://till.vox.com/tags/docs/" label="docs" />
    
    <category term="roundcube" scheme="http://till.vox.com/tags/roundcube/" label="roundcube" />
    
    <category term="phparchitect" scheme="http://till.vox.com/tags/phparchitect/" label="phparchitect" />
    
    <category term="phpunit" scheme="http://till.vox.com/tags/phpunit/" label="phpunit" />
    
    <category term="phpt" scheme="http://till.vox.com/tags/phpt/" label="phpt" />
    
    </entry>

    
    <entry>
        <title>phpChecklist</title>
    
    
    
        <link rel="alternate" type="text/html" title="phpChecklist" href="http://till.vox.com/library/post/phpchecklist.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="phpChecklist" href="http://till.vox.com/library/post/phpchecklist.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="phpChecklist" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398c4f7f30004" /> 
                <id>tag:vox.com,2007-12-06:asset-6a00c2251d8a1b549d00e398c4f7f30004</id>
        <published>2007-12-06T14:01:05Z</published>
        <updated>2007-12-07T07:07:51Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p><strong>UPDATE, 2007/12/07 8:00 AM:</strong> Make sure to check the <a href="http://till.vox.com/library/post/phpchecklist.html#comments">comments</a>, James and Adam offer valuable advice!</p><p>For a couple weeks now we kept on saying that we need a checklist of what we need on a server in order to make the site run - now since we setup the neato bonito cluster last week the checklist all of the sudden had a higher priority and I took an hour or so to create that last night.</p><p>In the process I used a nifty code snippet by <a href="http://xn--9bi.net/2007/10/13/pear-list/">Adam Harvey</a>, to do my PEAR package checking and basically added a loop through <a href="http://docs.php.net/manual/en/function.get-loaded-extensions.php">get_loaded_extensions()</a> and a shell_exec(&#39;cd /foo &amp;&amp; svn info&#39;) to make it complete. Now season the script with with some CSS, and you have your very own phpChecklist and got yourself some piece of mind.</p>


    
    
    


    
    
    


    
    
    


    
    
    

<div at:enclosure="asset" at:xid="6a00c2251d8a1b549d00e398c500990005" at:format="auto" at:align="center"
    class="enclosure enclosure-center enclosure-auto embed-enclosure" 
     style="text-align: center;">
<div class="enclosure-inner"
    
        style="width: 500px;"
    >
    <div class="enclosure-list">
        <div class="enclosure-item embed-asset last">
    
            <div class="enclosure-embed">
        
                <iframe class="enclosure-iframe" frameborder="0" scrolling="no" src="http://a1.vox-data.com/6a00c2251d8a1b549d00e398c500990005-html" style="width: 500px; height: 500px;"></iframe>
        
            </div>
            <div class="enclosure-meta">
                <div class="enclosure-asset-name">Code Snippet</div>
            </div>
    
        </div>
    </div>
</div>
</div><!-- end enclosure -->



<p><em>All this code snippeting and code snippet formatting in VOX is not as trivial as I would like - so anyway, I am sure you get an impression of what I mean.</em><br /></p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/phpchecklist.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398c4f7f30004?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="pear" scheme="http://till.vox.com/tags/pear/" label="pear" />
    
    <category term="checklist" scheme="http://till.vox.com/tags/checklist/" label="checklist" />
    
    </entry>

    
    <entry>
        <title>File_S3</title>
    
    
    
        <link rel="alternate" type="text/html" title="File_S3" href="http://till.vox.com/library/post/file_s3.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="File_S3" href="http://till.vox.com/library/post/file_s3.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="File_S3" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398c48e0f0002" /> 
                <id>tag:vox.com,2007-12-05:asset-6a00c2251d8a1b549d00e398c48e0f0002</id>
        <published>2007-12-05T13:36:55Z</published>
        <updated>2007-12-07T15:34:58Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>Just added my File_S3 proposal to PEPR.</p><p>Check it out, give it a wirllllll - gimme feedback:<br /><a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=519">http://pear.php.net/pepr/pepr-proposal-show.php?id=519</a></p><p>So basically what this package allows you to do is, you can open/write/delete files and directories (aka buckets) directly into Amazon S3 referencing it by paths like <em>s3://my_fancy_bucket/file</em>.</p><p><span style="font-size: 0.8em;">And thanks to Darshan from <a href="http://www.easybib.com">easybib</a> who pretty much sponsors my time on anything pear-related right now.</span><br /> </p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/file_s3.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398c48e0f0002?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="amazon" scheme="http://till.vox.com/tags/amazon/" label="amazon" />
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="pear" scheme="http://till.vox.com/tags/pear/" label="pear" />
    
    <category term="s3" scheme="http://till.vox.com/tags/s3/" label="s3" />
    
    <category term="file_s3" scheme="http://till.vox.com/tags/file_s3/" label="file_s3" />
    
    </entry>

    
    <entry>
        <title>HTTP_Session2 0.6.0</title>
    
    
    
        <link rel="alternate" type="text/html" title="HTTP_Session2 0.6.0" href="http://till.vox.com/library/post/http_session2-060.html?_c=feed-atom-full" />
    
        
        <link rel="service.post" type="application/atom+xml" title="HTTP_Session2 0.6.0" href="http://till.vox.com/library/post/http_session2-060.html?_c=feed-atom-full#comments" />
    
        <link rel="service.edit" type="application/atom+xml" title="HTTP_Session2 0.6.0" href="http://www.vox.com/atom/svc=post/asset_id=6a00c2251d8a1b549d00e398c376e70003" /> 
                <id>tag:vox.com,2007-12-02:asset-6a00c2251d8a1b549d00e398c376e70003</id>
        <published>2007-12-02T11:07:27Z</published>
        <updated>2007-12-02T11:22:13Z</updated>
    
        <author>
            <name>till</name>
            <uri>http://till.vox.com/?_c=feed-atom-full</uri>
        </author>
    
        
        <content type="html" xml:base="http://till.vox.com/?_c=feed-atom-full">
            <![CDATA[
                <div xmlns="http://www.w3.org/1999/xhtml" xmlns:at="http://www.sixapart.com/ns/at">
    
    
        
            
            <p>This morning I rolled another release of <a href="http://pear.php.net/package/HTTP_Session2/">HTTP_Session2</a> and uploaded it to PEAR. So what can you use HTTP_Session2 for and what&#39;s new in this release?</p><p>The usage question was pretty simple for me, at my current one and only <a href="http://www.easybib.com">gig</a> we run four web servers behind a loadbalancer and since I&#39;m not a fan of NFS shared storage and writing to it I decided that we could utilize our database powerhouses to store our session data. The other option is what commonly in the cluster-loadbalancing-context is referred to as stickyness, which means that a user is kept on one server during the session, but this adds more load on the loadbalancer itself and it defeats the scalability and hot-failover thing for me.</p><p>So this is where HTTP_Session2 comes in and saves the day - I must add, that it&#39;s a pretty easy drop-in replacement for regular session calls and works like a charm.</p><p>HTTP_Session2 currently supports PostgreSQL and MySQL(i). Except for the garbage collection, which is (oddly) very database specific, others backends should work as well, but we had no time to test that yet.<br /><strong><span style="font-size: 1.25em;"><br />What&#39;s new in 0.6.0?</span></strong><br /><ul><li>We decided to remove the MDB and Creole containers<br />We felt no one was using either one since MDB is very old and almost everyone is using either DB or its successor MDB2. And for Creole - no idea. I toyed with it briefly at my last job but didn&#39;t really fall i love with it. So if you are a Creole user and happen to be using HTTP_Session2, I&#39;ll revert and you can maintain it. ;-)<br /></li><li>Added the new MDB2 container</li><li>Fixed smaller bugs and lots of CS</li><li>Change stability to beta.<br /></li></ul>&#160;<strong><span style="font-size: 1.25em;">Future development</span></strong><br /><ul><li>Develop a PDO or Doctrine container to move to PHP5 completely.</li><li>A File container/driver to for example store sessions on NFS without getting rid of HTTP_Session2 calls. ;-)</li></ul><br />If you deployed HTTP_Session2 as well, I&#39;d like to hear from you. Contact me at till-at-php-dot-net, or comment. I am pretty sure that in terms of stability it&#39;s more than beta code since I use it myself and we sometimes push 4+ mbit of traffic on the site, but all feedback is welcome.<br /> </p>
        
    
                <p style="clear:both;"> 
    <a href="http://till.vox.com/library/post/http_session2-060.html?_c=feed-atom-full#comments">Read and post comments</a>   |   
    <a href="http://www.vox.com/share/6a00c2251d8a1b549d00e398c376e70003?_c=feed-atom-full">Send to a friend</a> 
</p>

                </div>
            ]]>
        </content>
    
    <category term="php" scheme="http://till.vox.com/tags/php/" label="php" />
    
    <category term="pear" scheme="http://till.vox.com/tags/pear/" label="pear" />
    
    <category term="easybib" scheme="http://till.vox.com/tags/easybib/" label="easybib" />
    
    <category term="http_session2" scheme="http://till.vox.com/tags/http_session2/" label="http_session2" />
    
    </entry>

</feed>


