<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Thomas Koch - PHP</title>
    <link>http://koch.ro/blog/</link>
    <description>Dubio Sapientiae Initium.</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1-1 - http://www.s9y.org/</generator>
    <pubDate>Sat, 14 Aug 2010 13:08:50 GMT</pubDate>

    <image>
        <url>http://koch.ro/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Thomas Koch - PHP - Dubio Sapientiae Initium.</title>
        <link>http://koch.ro/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Free Software in companies</title>
    <link>http://koch.ro/blog/index.php?/archives/146-Free-Software-in-companies.html</link>
            <category>Debian</category>
            <category>free software</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/146-Free-Software-in-companies.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=146</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=146</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    &lt;div&gt;
At work we currently have a discussion: I&#039;d like to develop some components as Free
Software. My bosses like the idea, but the client goes nuts only thinking about it.
&lt;br/&gt;
So as part of the discussion I thought to collect those companies who actively advertise their
Free Software. I know about the big ones, but it would be even more interesting
to get a list of succesful small companies that share at least part of their
inhouse projects. On the other hand it would not be too interesting to list full
Free Software companies like Red Hat.
&lt;br/&gt;
It would also be fine to share this list in some wiki (FSFE?) when it grows
larger. For some companies I also list very popular projects from my point of
view.
&lt;h4&gt;big companies&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://sourceforge.net/adobe/&quot;&gt;Adobe&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://developers.facebook.com/opensource/&quot;&gt;Facebook&lt;/a&gt;: Cassandra, Thrift, Scribe, HipHop for PHP, ...
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://developer.yahoo.com/&quot;&gt;Yahoo&lt;/a&gt;: YUI, Design Pattern Library, YSlow, Hadoop, ZooKeeper
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/about/opensource&quot;&gt;Twitter&lt;/a&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://code.google.com/opensource/&quot;&gt;Google&lt;/a&gt;: Chromium Browser, Google Summer of Code, Android, Google Web Toolkit (GWT), Protocol Buffers - data interchange format, Java Collections Library, unladen-swallow - faster implementation of Python, ...
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;&quot;&gt;IBM&lt;/a&gt;: &lt;a href=&quot;http://www.ibm.com/developerworks/opensource/&quot;&gt;Developerworks (Tutorials)&lt;/a&gt;, Eclipse, International Components for Unicode (ICU)
  &lt;/li&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;middle sized companies&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://about.digg.com/opensource&quot;&gt;Digg&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;small companies&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://101tec.com&quot;&gt;101tec&lt;/a&gt; (now &lt;a href=&quot;&quot;&gt;Datameer&lt;/a&gt;): 
      &lt;a href=&quot;http://katta.sourceforge.net/&quot;&gt;Katta (distributed lucene on Hadoop)&lt;/a&gt;,
      &lt;a href=&quot;http://github.com/sgroschupf/zkclient&quot;&gt;zkClient&lt;/a&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;br /&gt;
Update: Need to add &lt;a href=&quot;http://www.danga.com/&quot;&gt;Danga&lt;/a&gt; (Gearman), &lt;a href=&quot;https://fosswiki.liip.ch/&quot;&gt;Liip.ch&lt;/a&gt; with &lt;a href=&quot;http://okapi.liip.ch/&quot;&gt;Okapi&lt;/a&gt;, Flux CMS, &lt;a href=&quot;https://fosswiki.liip.ch/display/jackalope/Home&quot;&gt;Jackalope&lt;/a&gt;, &lt;a href=&quot;http://github.com/rackspace&quot;&gt;rackspace&lt;/a&gt;  
    </content:encoded>

    <pubDate>Fri, 06 Aug 2010 10:46:25 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/146-guid.html</guid>
    
</item>
<item>
    <title>NoSQL summer at lake constance</title>
    <link>http://koch.ro/blog/index.php?/archives/143-NoSQL-summer-at-lake-constance.html</link>
            <category>Debian</category>
            <category>eZ Publish</category>
            <category>free software</category>
            <category>freie software</category>
            <category>PHP</category>
            <category>Webtreff</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/143-NoSQL-summer-at-lake-constance.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=143</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=143</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Have you already started to try out these new storage/database things commonly referred to as NoSQL? (For you google-bot, I&#039;m talking about CouchDB, Cassandra, HBase, Hadoop, Hypertable, MongoDB, Tokyo Cabinet, etc). Well, it&#039;s one thing to install and use them but another to understand all the computer science background about them.&lt;br /&gt;
Therefor many developers around the world thought to make this summer a &lt;a href=&quot;http://nosqlsummer.org/&quot;&gt;NoSQL summer&lt;/a&gt;. Local meetings are held in many cities: London, Los Angeles, New York, Paris, &lt;a href=&quot;http://nosqlsummer.org/city/lake-constance&quot;&gt;lake constance&lt;/a&gt; ... &lt;img src=&quot;http://koch.ro/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
If you like to meet for a beer and learn and discuss about some of the hottest stuff in computing, then come around! Please &lt;a href=&quot;http://www.youtick.net/v493/(hash)/eb3ed31aae7e8897db12450b8a444064&quot;&gt;select the dates when you can join&lt;/a&gt; and the &lt;a href=&quot;http://www.youtick.net/v495/(hash)/763bc7afdbce0fd31e25c4f7fc6a4870&quot;&gt;papers you&#039;d like to discuss&lt;/a&gt;. You can subscribe to email announcements or ical and rss feeds at the &lt;a href=&quot;http://nosqlsummer.org/city/lake-constance&quot;&gt;lake constance nosql summer page&lt;/a&gt;.  
    </content:encoded>

    <pubDate>Thu, 17 Jun 2010 09:31:00 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/143-guid.html</guid>
    
</item>
<item>
    <title>Zookeeper for web developers</title>
    <link>http://koch.ro/blog/index.php?/archives/137-Zookeeper-for-web-developers.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
            <category>Webtreff</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/137-Zookeeper-for-web-developers.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=137</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=137</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Have you ever developed any kind of distributed system? When doing so for the first time, you&#039;re very likely to fall in the trap of &lt;a href=&quot;http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing&quot;&gt;the Fallacies of Distributed Computing&lt;/a&gt;. I&#039;ve done so, you&#039;ll do so too.&lt;br /&gt;
Now &lt;a href=&quot;http://hadoop.apache.org/zookeeper/&quot;&gt;zookeeper&lt;/a&gt; is an application, that helps you implement many &lt;a href=&quot;http://hadoop.apache.org/zookeeper/docs/current/recipes.html&quot;&gt;distributed protocols&lt;/a&gt; on top of it. The hard work of implementing fault tolerance, assuring consistency and that kind of stuff is done by zookeeper in the background. A zookeeper cluster consists of at least three servers running zookeeper (zk). A client can connect to each zk server and issue read and write requests. Zookeeper guaranties that a write either fails or is consistent and that a read will get you the most recent state.&lt;br /&gt;
Zookeeper exposes a filesystem like hierarchy of so called znodes. Every znode can have children but also stores data. The data stored in a znode is assumed to be small (less then 1MB). Clients can subscribe to different events on a znode and will be notified of changes in the znode itself of it&#039;s children.&lt;br /&gt;
Some usage examples come to my mind, which could be especially interesting for PHP developers:&lt;br /&gt;
&lt;ul&gt; &lt;li&gt;save the PHP session in zk and have it therefor available to all web servers&lt;/li&gt; &lt;li&gt;save a shopping card&lt;/li&gt; &lt;li&gt;save the online status of a user (for a chat system)&lt;/li&gt; &lt;li&gt;synchronize configuration files&lt;/li&gt; &lt;li&gt;master election: many monitoring servers, but only one is active at any given time&lt;/li&gt; &lt;li&gt;logging system: bookkeeper is a zk contribution, that receives your logs and assures they&#039;ll be kept save&lt;/li&gt;&lt;li&gt;create a lock on a document in a CMS&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;
&lt;a href=&quot;http://wiki.apache.org/hadoop/ZooKeeper/PoweredBy&quot;&gt;Companies that use zk&lt;/a&gt; include Facebook, Yahoo, Rackspace and as rumors tell also twitter.&lt;br /&gt;
Now this is all kind and sweet, the only sad thing is, there&#039;s no PHP binding yet. There are bindings for Java, C, Python and Perl. So if you&#039;re desperately searching what PHP extension you should write next, just take the zk C binding and expose it to PHP!&lt;br /&gt;
Maybe you&#039;re a student and would like to participate in the Google Summer of Code? It should be possible to find a mentor for this project either in the PHP or zk project.&lt;br /&gt;
For GSOC the project could include a PHP session implementation in the extension code and the possibility of persistent zk sessions across PHP calls.&lt;br /&gt;
If you&#039;re in the region of eastern Switzerland: There&#039;ll be a presentation about zookeeper at the &lt;a href=&quot;http://lists.koch.ro/listinfo/webtreff&quot;&gt;Webtreff Kreuzlingen&lt;/a&gt; on one of the next mondays. 
    </content:encoded>

    <pubDate>Fri, 19 Feb 2010 10:42:48 +0100</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/137-guid.html</guid>
    
</item>
<item>
    <title>Going to FOSDEM 2010</title>
    <link>http://koch.ro/blog/index.php?/archives/136-Going-to-FOSDEM-2010.html</link>
            <category>eZ Publish</category>
            <category>free software</category>
            <category>freie software</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/136-Going-to-FOSDEM-2010.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=136</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=136</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    I&#039;m going to fosdem 2010.  &lt;p&gt; &lt;a href=&quot;http://www.fosdem.org/2010&quot;&gt;&lt;img height=&quot;89px&quot; width=&quot;150px&quot; alt=&quot;I&#039;m going to Fosdem 2010&quot; src=&quot;http://www.fosdem.org/promo/going-to&quot; title=&quot;I&#039;m going to Fosdem 2010&quot;&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;
These are things I&#039;d like to attend:&lt;br /&gt;
 &lt;TABLE&gt;&lt;thead&gt; &lt;TR&gt; &lt;TH&gt;time&lt;/TH&gt; &lt;TH&gt;room&lt;/TH&gt; &lt;TH&gt;topic&lt;/TH&gt; &lt;TH&gt;speaker&lt;/TH&gt; &lt;/TR&gt; &lt;/thead&gt; &lt;TBODY&gt; &lt;TR&gt; &lt;TD &gt;10:45-11:30&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;Promoting Open Source Methods at a Large Company&lt;/TD&gt; &lt;TD &gt;Brooks Davis&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;13:15-13:45&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;AY&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;Packaging Java Software for Debian&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;Thomas Koch&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;13:40-13:55&lt;/TD&gt; &lt;TD &gt;Ferrer&lt;/TD&gt; &lt;TD &gt;CiviCRM: Common goals of FOSS and Not For Profit Organisations&lt;/TD&gt; &lt;TD &gt;Xavier DUTOIT&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;14:00-14:45&lt;/TD&gt; &lt;TD &gt;H.1308&lt;/TD&gt; &lt;TD &gt;The Maemo Community Council: a case-study in governance&lt;/TD&gt; &lt;TD &gt;Dave Neary&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;14:00-15:30&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Guillissen&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;LPI exam session 1&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Klaus Behrla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;14:00-14:45&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;What is my system doing - Full System Observability with SystemTap&lt;/TD&gt; &lt;TD &gt;Mark Wielaard&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;14:30-15:00&lt;/TD&gt; &lt;TD &gt;H.2213&lt;/TD&gt; &lt;TD &gt;Building Federated Social Networks on XMPP&lt;/TD&gt; &lt;TD &gt;Tuomas Koski, Simon Tennant&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;15:00-15:45&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;Ganglia: 10 years of monitoring clusters and grids&lt;/TD&gt; &lt;TD &gt;Bernard Li&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;15:00-15:30&lt;/TD&gt; &lt;TD &gt;H.2213&lt;/TD&gt; &lt;TD &gt;XMPP and the Social Web&lt;/TD&gt; &lt;TD &gt;Alard Weisscher, Laurent Eschenauer&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;15:30-16:00&lt;/TD&gt; &lt;TD &gt;H.2213&lt;/TD&gt; &lt;TD &gt;PubSub Gone Wild: Info Sharing at Mediamatic&lt;/TD&gt; &lt;TD &gt;Ralph Meijer&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;16:00-17:30&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Guillissen&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;LPI exam session 2&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Klaus Behrla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;16:00-16:15&lt;/TD&gt; &lt;TD &gt;Ferrer&lt;/TD&gt; &lt;TD &gt;SIP Communicator: Skype-like conf calls with SIP Communicator&lt;/TD&gt; &lt;TD &gt;Emil Ivov&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;16:20-16:35&lt;/TD&gt; &lt;TD &gt;Ferrer&lt;/TD&gt; &lt;TD &gt;Kamailio (OpenSER) 3.0.0: redefinition of SIP server&lt;/TD&gt; &lt;TD &gt;Daniel-Constantin Mierla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;16:40-16:55&lt;/TD&gt; &lt;TD &gt;Ferrer&lt;/TD&gt; &lt;TD &gt;asterisk: An introduction to Asterisk Development&lt;/TD&gt; &lt;TD &gt;Mark Michelson&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;17:00-17:15&lt;/TD&gt; &lt;TD &gt;Ferrer&lt;/TD&gt; &lt;TD &gt;csync: Roaming Home Directories&lt;/TD&gt; &lt;TD &gt;Andreas Schneider&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;17:30-18:00&lt;/TD&gt; &lt;TD &gt;H.2213&lt;/TD&gt; &lt;TD &gt;Jingle Nodes: An Open Alternative to Skype&lt;/TD&gt; &lt;TD &gt;Tiago Camargo&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;18:00-18:30&lt;/TD&gt; &lt;TD &gt;H.2213&lt;/TD&gt; &lt;TD &gt;Multi-User Jingle: Voice and Video Conferencing with XMPP&lt;/TD&gt; &lt;TD &gt;Dafydd Harries, Sjoerd Simons&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;18:15-19:00&lt;/TD&gt; &lt;TD &gt;H.1302&lt;/TD&gt; &lt;TD &gt;Spacewalk: Linux Systems Lifecycle Management&lt;/TD&gt; &lt;TD &gt;Marcus Moeller, Sandro Mathys&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;TD &gt;&lt;BR /&gt;&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;09:15-10:00&lt;/TD&gt; &lt;TD &gt;H.1302&lt;/TD&gt; &lt;TD &gt;Linux distribution for the cloud&lt;/TD&gt; &lt;TD &gt;Peter Eisentraut&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;10:00-10:45&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;RepRap - Manufacturing for the Masses&lt;/TD&gt; &lt;TD &gt;Adrian Bowyer&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;10:30-12:00&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Guillissen&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;LPI exam session 3&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Klaus Behrla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;11:00-11:45&lt;/TD&gt; &lt;TD &gt;AW1.120&lt;/TD&gt; &lt;TD &gt;My life with HBase&lt;/TD&gt; &lt;TD &gt;Lars George&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;11:00-11:45&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;Tor: Building, Growing, and Extending Online Anonymity&lt;/TD&gt; &lt;TD &gt;Andrew Lewman&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;12:15-13:00&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;H.1302&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;Cross distro packaging with (top)git&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#CCCCCC&quot;&gt;Thomas Koch&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;12:15-13:00&lt;/TD&gt; &lt;TD &gt;H.1308&lt;/TD&gt; &lt;TD &gt;Shared libraries in Debian&lt;/TD&gt; &lt;TD &gt;Sune Vuorela&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;13:00-14:30&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Guillissen&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;LPI exam session 4&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Klaus Behrla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;13:15-14:00&lt;/TD&gt; &lt;TD &gt;AW1.120&lt;/TD&gt; &lt;TD &gt;CouchDB, a database designed for the web and more&lt;/TD&gt; &lt;TD &gt;Benoit Chesneau&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;14:00-14:45&lt;/TD&gt; &lt;TD &gt;Janson&lt;/TD&gt; &lt;TD &gt;Large scale data analysis made easy - Apache Hadoop&lt;/TD&gt; &lt;TD &gt;Isabel Drost&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;15:00-16:30&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Guillissen&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;LPI exam session 5&lt;/TD&gt; &lt;TD BGCOLOR=&quot;#E6E6E6&quot;&gt;Klaus Behrla&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;15:30-16:15&lt;/TD&gt; &lt;TD &gt;H.1308&lt;/TD&gt; &lt;TD &gt;Continuous Packaging with Project-Builder.org&lt;/TD&gt; &lt;TD &gt;Bruno Cornec&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;15:30-16:15&lt;/TD&gt; &lt;TD &gt;AW1.120&lt;/TD&gt; &lt;TD &gt;Comparing the MapReduce way in CouchDB with the SQL way in a RDBMS&lt;/TD&gt; &lt;TD &gt;Stéphane Combaudon&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;16:15-16:45&lt;/TD&gt; &lt;TD &gt;AW1.120&lt;/TD&gt; &lt;TD &gt;Designing a scalable content management system on NoSQL technologies&lt;/TD&gt; &lt;TD &gt;Evert Arckens&lt;/TD&gt; &lt;/TR&gt; &lt;TR&gt; &lt;TD &gt;16:15-17:00&lt;/TD&gt; &lt;TD &gt;H.1308&lt;/TD&gt; &lt;TD &gt;Debian Secrets: power tools for power users&lt;/TD&gt; &lt;TD &gt;Wouter Verhelst&lt;/TD&gt; &lt;/TR&gt; &lt;/TBODY&gt; &lt;/TABLE&gt; 
    </content:encoded>

    <pubDate>Sat, 30 Jan 2010 20:52:08 +0100</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/136-guid.html</guid>
    
</item>
<item>
    <title>Exploring Eclipse, PDT and Eclim</title>
    <link>http://koch.ro/blog/index.php?/archives/134-Exploring-Eclipse,-PDT-and-Eclim.html</link>
            <category>PHP</category>
            <category>VIM</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/134-Exploring-Eclipse,-PDT-and-Eclim.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=134</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=134</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Back in 2006 I learned, that KWrite (a simple text editor) was not enough to write PHP code with. I tried eclipse, but it seemed too complex and was way too slow on my old laptop.&lt;br /&gt;
&lt;br /&gt;
So inspired by the &lt;a href=&quot;http://schlitt.info/opensource/blog/0488_comfortable_php_editing_with_vim_5.html&quot;&gt;Comfortable PHP editing with VIM&lt;/a&gt; series of Tobias Schlitt I learned VIM. &lt;br /&gt;
&lt;br /&gt;
My blogpost about &lt;a href=&quot;http://koch.ro/blog/index.php?/archives/63-VIM-an-a-PHP-IDE.html&quot;&gt;Vim as an IDE for PHP&lt;/a&gt; is a popular page and I often get requests about details of my setup. Please don&#039;t ask me anymore, since I intend to move away from this setup!&lt;br /&gt;
&lt;br /&gt;
Some weeks ago I&#039;ve been at a conference (&lt;a href=&quot;http://gearconf.com/&quot;&gt;GearConf&lt;/a&gt;) about team collaboration. Some of the tools presented there (like &lt;a href=&quot;http://www.eclipse.org/mylyn/&quot;&gt;Mylyn&lt;/a&gt;) made me jealous of the java people.&lt;br /&gt;
&lt;br /&gt;
So it was time to reconsider Eclipse. However editing text with what&#039;s called an &quot;editor&quot; in eclipse is a pain to say the least. But life&#039;s good and somebody already created &lt;a href=&quot;http://eclim.sourceforge.net/&quot;&gt;eclim&lt;/a&gt;. Eclim allows you to keep using gvim for text editing but integrates with Eclipse to give you code completion, manual lookup, code projects and more.&lt;br /&gt;
This alone may not convince you, since I already have this integrated in vim. But there are at least three major advantages of vim+eclipse:&lt;br /&gt;
&lt;ul&gt;  &lt;li&gt;There&#039;s not only the integration for PHP but also Java, Javascript, Python, Ruby, C/C++, CSS, HTML and XML&lt;/li&gt;  &lt;li&gt;Eclipse comes with a bunch of other cool plugins (like Mylin)&lt;/li&gt;  &lt;li&gt;The code completion from eclipse is much more powerful then anything you can do with VIM. For example it also proposes you the correct classmembers after foo:: or $bar-&amp;gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;a href=&quot;http://ou.jiayong.name/&quot;&gt;My collegue Jiayong&lt;/a&gt; just installed the bundled version of PDT with eclipse, ran the eclim installer and was ready.&lt;br /&gt;
&lt;br /&gt;
However I&#039;m much more addicted to pain, so I took the &lt;a href=&quot;https://launchpad.net/ubuntu/+source/eclipse&quot;&gt;Ubuntu packages of eclipse 3.5.1&lt;/a&gt;, &lt;a href=&quot;http://www.venukb.com/2006/08/20/install-eclipse-plugins-the-easy-way/&quot;&gt;linked&lt;/a&gt; the pdt runtime download and all dependencies in a separate directory, checked out the GIT repository of eclim, configured the classpath in the ant buildfile and build eclim from source. The deployment of eclim can be looked up from the ant buildfile.&lt;br /&gt;
There are some more tweaks to do, which I can point out later, if you should dare to follow this road. You shouldn&#039;t have a need for this until you&#039;d be interested to become famous and beloved and &lt;a href=&quot;http://wiki.debian.org/Java/RequestedPackages&quot;&gt;package PDT or eclim&lt;/a&gt; for Debian.&lt;br /&gt;
&lt;br /&gt;
Do you already have experiences with eclim+pdt? Are there tutorials I&#039;ve not found? Are you interested to come with me to explore this setup?  
    </content:encoded>

    <pubDate>Sat, 24 Oct 2009 16:48:24 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/134-guid.html</guid>
    
</item>
<item>
    <title>eZ Components Template is not slow...</title>
    <link>http://koch.ro/blog/index.php?/archives/133-eZ-Components-Template-is-not-slow....html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/133-eZ-Components-Template-is-not-slow....html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=133</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=133</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    ... you may just not have used it appropriately. Fabien Potencier has &lt;a href=&quot;http://fabien.potencier.org/article/34/templating-engines-in-php&quot;&gt;blogged about templating engines&lt;/a&gt;, compared their speed and finally concluded that his own templating engine is the fastest. Not only that, but my beloved &lt;a href=&quot;http://ezcomponents.org/docs/tutorials/Template&quot;&gt;eZ Components Template&lt;/a&gt; engine, which we use with great pleasure at &lt;a href=&quot;http://www.ymc.ch&quot;&gt;YMC&lt;/a&gt;, came out as the slowest in his benchmark. (Althought he complimented it as &quot;probably the one which have the most features&quot;.)&lt;br /&gt;
&lt;br /&gt;
Dear Fabien, I think it&#039;s not fair to blog a benchmark without publishing the code you used to do the benchmark! But even without the code and without doing my own benchmark, I can offer some explanations, why eZ Components may have been the slowest in your benchmark and why you&#039;ve compared apples with oranges. I take the compiled template code from the &lt;a href=&quot;http://www.twig-project.org/book/05-Hacking-Twig&quot;&gt;Twig site&lt;/a&gt;: &lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;/&amp;#42;&amp;#160;Hello&amp;#160;{{&amp;#160;name&amp;#160;}}&amp;#160;&amp;#42;/
class&amp;#160;__TwigTemplate_1121b6f109fe93ebe8c6e22e3712bceb&amp;#160;extends&amp;#160;Twig_Template
{
&amp;#160;&amp;#160;public&amp;#160;function&amp;#160;display&amp;#40;$context&amp;#41;
&amp;#160;&amp;#160;{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;$this-&amp;#62;env-&amp;#62;initRuntime&amp;#40;&amp;#41;;
&amp;#160;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;//&amp;#160;line&amp;#160;1
&amp;#160;&amp;#160;&amp;#160;&amp;#160;echo&amp;#160;&quot;Hello&amp;#160;&quot;;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;echo&amp;#160;&amp;#40;isset&amp;#40;$context&amp;#91;&#039;name&#039;&amp;#93;&amp;#41;&amp;#160;?&amp;#160;$context&amp;#91;&#039;name&#039;&amp;#93;&amp;#160;&amp;#58;&amp;#160;null&amp;#41;;
&amp;#160;&amp;#160;}
}&lt;/div&gt;&lt;br /&gt;
Thinks to keep in mind from the Twig compiled template: &lt;ul&gt;
&lt;li&gt;There&#039;s direct output via echo (which is captured by Twig and not directly sent out)&lt;/li&gt;
&lt;li&gt;The template variables are sent in the array $context&lt;/li&gt;
&lt;li&gt;There&#039;s no error check, whether the required template variable &#039;name&#039; is actually sent to the template&lt;/li&gt;
&lt;li&gt;The content of the variables is not escaped&lt;/li&gt;
&lt;/ul&gt;Now let&#039;s compare this with the compiled code produced by eZ Components Template. First the template:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;{use&amp;#160;$name}
{use&amp;#160;$items}
&amp;#160;
Hello&amp;#160;{$name}
&amp;#160;
{foreach&amp;#160;$items&amp;#160;as&amp;#160;$item}
&amp;#160;&amp;#42;&amp;#160;{$item}
{/foreach}
&amp;#160;&lt;/div&gt;&lt;br /&gt;
And the resulting code:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#60;?php
//&amp;#160;Generated&amp;#160;PHP&amp;#160;file&amp;#160;from&amp;#160;template&amp;#160;code.
//&amp;#160;If&amp;#160;you&amp;#160;modify&amp;#160;this&amp;#160;file&amp;#160;your&amp;#160;changes&amp;#160;will&amp;#160;be&amp;#160;lost&amp;#160;when&amp;#160;it&amp;#160;is&amp;#160;regenerated.
$this-&amp;#62;checkRequirements&amp;#40;1,array&amp;#40;&quot;disableCache&quot;&amp;#160;=&amp;#62;&amp;#160;false&amp;#41;&amp;#41;;
$i_output&amp;#160;=&amp;#160;&quot;&quot;;
if&amp;#160;&amp;#40;&amp;#160;!isset&amp;#40;$this-&amp;#62;send-&amp;#62;name&amp;#41;&amp;#41;
{

&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw&amp;#160;new&amp;#160;ezcTemplateRuntimeException&amp;#40;&amp;#160;sprintf&amp;#40;&quot;The&amp;#160;external&amp;#160;&amp;#40;use&amp;#41;&amp;#160;variable&amp;#160;&#039;%s&#039;&amp;#160;is&amp;#160;not&amp;#160;set&amp;#160;in&amp;#160;template&amp;#58;&amp;#160;%s&amp;#160;and&amp;#160;called&amp;#160;from&amp;#160;%s&quot;,&amp;#160;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&#039;name&#039;,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$this-&amp;#62;template-&amp;#62;stream,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#40;&amp;#160;sizeof&amp;#40;$this-&amp;#62;template-&amp;#62;streamStack&amp;#41;&amp;#160;&amp;#62;=&amp;#160;2&amp;#160;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;?&amp;#160;$this-&amp;#62;template-&amp;#62;streamStack&amp;#91;sizeof&amp;#40;$this-&amp;#62;template-&amp;#62;streamStack&amp;#41;&amp;#160;-&amp;#160;2&amp;#93;&amp;#160;&amp;#58;&amp;#160;&#039;the&amp;#160;application&amp;#160;code&#039;&amp;#41;&amp;#160;&amp;#41;&amp;#160;&amp;#41;;
}
if&amp;#160;&amp;#40;&amp;#160;!isset&amp;#40;$this-&amp;#62;send-&amp;#62;items&amp;#41;&amp;#41;
{

&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw&amp;#160;new&amp;#160;ezcTemplateRuntimeException&amp;#40;&amp;#160;sprintf&amp;#40;&quot;The&amp;#160;external&amp;#160;&amp;#40;use&amp;#41;&amp;#160;variable&amp;#160;&#039;%s&#039;&amp;#160;is&amp;#160;not&amp;#160;set&amp;#160;in&amp;#160;template&amp;#58;&amp;#160;%s&amp;#160;and&amp;#160;called&amp;#160;from&amp;#160;%s&quot;,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&#039;items&#039;,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;$this-&amp;#62;template-&amp;#62;stream,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#40;&amp;#160;sizeof&amp;#40;$this-&amp;#62;template-&amp;#62;streamStack&amp;#41;&amp;#160;&amp;#62;=&amp;#160;2&amp;#160;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;?&amp;#160;$this-&amp;#62;template-&amp;#62;streamStack&amp;#91;sizeof&amp;#40;$this-&amp;#62;template-&amp;#62;streamStack&amp;#41;&amp;#160;-&amp;#160;2&amp;#93;&amp;#160;&amp;#58;&amp;#160;&#039;the&amp;#160;application&amp;#160;code&#039;&amp;#41;&amp;#160;&amp;#41;&amp;#160;&amp;#41;;
}
$i_output&amp;#160;.=&amp;#160;&quot;&amp;#160;\nHello&amp;#160;&quot;;
$i_output&amp;#160;.=&amp;#160;htmlspecialchars&amp;#40;$this-&amp;#62;send-&amp;#62;name&amp;#41;;
$i_output&amp;#160;.=&amp;#160;&quot;\n&amp;#160;\n&quot;;
foreach&amp;#160;&amp;#40;$this-&amp;#62;send-&amp;#62;items&amp;#160;as&amp;#160;$t_item&amp;#41;
{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;$i_output&amp;#160;.=&amp;#160;&quot;&amp;#42;&amp;#160;&quot;;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;$i_output&amp;#160;.=&amp;#160;htmlspecialchars&amp;#40;$t_item&amp;#41;;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;$i_output&amp;#160;.=&amp;#160;&quot;\n&quot;;
}
return&amp;#160;$i_output;
?&amp;#62;&lt;/div&gt;&lt;br /&gt;
The differences are:&lt;ul&gt;
&lt;li&gt;The output is collected in a variable, not with PHP&#039;s output buffering. I don&#039;t know whether this has a performance impact, but in any case it allows for much greater flexibility in the implementation of the template engine. Thus it&#039;s possible for example to&lt;bail out with an exception without worring about the output buffer&lt;/li&gt;
&lt;li&gt;The template variables do not come in a simple array but as an object of type ezcTemplateVariableCollection. This is surely slower as an array, but also allows to do great things.&lt;/li&gt;
&lt;li&gt;My favorite eZC Template feature: Every variable needs to be declared at the top of the template! I wish PHP would be that strict.&lt;/li&gt;
&lt;li&gt;And now the point which may be responsible for the observed performance impact: eZC Template by default escapes all variables with htmlspecialchars. This is of course configurable and so I could compare template execution time with escaping turned on and of: For an array of thousand elements it more then doubles the time.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
So in conclusion: Please post the benchmark code, so that we can debug it and please compare the template engines with the same features turned on or off! 
    </content:encoded>

    <pubDate>Fri, 09 Oct 2009 13:40:42 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/133-guid.html</guid>
    
</item>
<item>
    <title>Timeline of PHP quality assurance tools</title>
    <link>http://koch.ro/blog/index.php?/archives/132-Timeline-of-PHP-quality-assurance-tools.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
            <category>PHPUnit</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/132-Timeline-of-PHP-quality-assurance-tools.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=132</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=132</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    I&#039;ll be giving a talk on PHP quality assurance tools next week at the &lt;a href=&quot;http://gearconf.com/&quot;&gt;gearconf&lt;/a&gt; in Düsseldorf. The event is focused on team collaboration and most of the audience will come from other languages then PHP. Since I&#039;m not a contributor to any QA tool I&#039;ll center around the user perspective and the process of establishing these tools in a small to middle web company like &lt;a href=&quot;http://www.ymc.ch&quot;&gt;YMC&lt;/a&gt;.&lt;br /&gt;
As an outline for the first part I thought to give an historical view on QA in PHP and therefor made a timeline of PHP QA milestones: &lt;img width=&quot;80%&quot; height=&quot;80%&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://koch.ro/blog/uploads/free_software/phpqa_timeline.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
The dates as text:&lt;ul&gt;
  &lt;li&gt;~1997 JUnit&lt;/li&gt;
  &lt;li&gt;6.4.2002 PHPUnit 0.1&lt;/li&gt;
  &lt;li&gt;28.8.2003 PHPUnit 1.0.0-alpha1 Release&lt;/li&gt;
  &lt;li&gt;13.7.2004 PHP5.0.0&lt;/li&gt;
  &lt;li&gt;14.7.2004 release PHPUnit2&lt;/li&gt;
  &lt;li&gt;30.1.2006 eZ Components 1.0&lt;/li&gt;
  &lt;li&gt;~sept 2006 ZF uses PHPUnit (issue #374)&lt;/li&gt;
  &lt;li&gt;4.10.2006 first integration of Selenium in PHPUnit&lt;/li&gt;
  &lt;li&gt;1.7.2007 Zend Framework 1.0&lt;/li&gt;
  &lt;li&gt;18.11.2007 first release of PHPUnderControl&lt;/li&gt;
  &lt;li&gt;19.11.2007 Project Mess Detection in PHPUnit&lt;/li&gt;
  &lt;li&gt;6.2.2008 first release PHP_Depend&lt;/li&gt;
  &lt;li&gt;march 2009 qualityassuranceinphpprojects.com, thePHP.cc&lt;/li&gt;
&lt;/ul&gt;main sources:&lt;br /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/sebastian_bergmann/von-entwurfsmustern-und-unit-tests&quot;&gt;Von Entwurfsmustern und Unit Tests&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sebastian-bergmann.de/&quot;&gt;Blog of Sebastian Bergmann&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://manuel-pichler.de/&quot;&gt;Blog of Manuel Pichler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Did I get all this right? Are there things I should have added? 
    </content:encoded>

    <pubDate>Sat, 26 Sep 2009 16:58:46 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/132-guid.html</guid>
    
</item>
<item>
    <title>PHP SAPI to run gearman workers</title>
    <link>http://koch.ro/blog/index.php?/archives/126-PHP-SAPI-to-run-gearman-workers.html</link>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/126-PHP-SAPI-to-run-gearman-workers.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=126</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=126</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    &lt;a href=&quot;http://gearman.org/&quot;&gt;Gearman&lt;/a&gt; is a system to run jobs on multiple servers. We at &lt;a href=&quot;http://www.ymc.ch&quot;&gt;YMC&lt;/a&gt; are working know to integrate gearman in our cluster solution. Since we&#039;re a PHP shop, the jobs should be written in PHP.&lt;br /&gt;
There already is a solution with the &lt;a href=&quot;http://gearman.org/index.php?id=download#gearman_php_extension&quot;&gt;gearman PHP extension&lt;/a&gt; by &lt;a href=&quot;http://jluedke.com/?cat=4&quot;&gt;James M. Luedke&lt;/a&gt;. But I wanted to run multiple workers on one machine and having them use an opcode cache. The solution is a dedicated PHP binary (SAPI), which runs many worker threads in one process. The &lt;a href=&quot;http://github.com/thkoch2001/php-src/tree/gearman_worker_sapi&quot;&gt;code (see /sapi/gearman_worker) in branch gearman_worker&lt;/a&gt; is already usable and I&#039;d be happy to receive comments on it. After all I&#039;m not (yet) a C expert.&lt;br /&gt;
&lt;br /&gt;
TODOS:&lt;ul&gt;&lt;li&gt;graceful stop on SIGTERM&lt;/li&gt;&lt;li&gt;include the possibility to run cron-like scripts in a loop&lt;/li&gt;&lt;li&gt;pause, if available memory is too low&lt;/li&gt;&lt;li&gt;documentation&lt;/li&gt;&lt;li&gt;get it into upstream&lt;/li&gt;&lt;/ul&gt; 
    </content:encoded>

    <pubDate>Mon, 20 Jul 2009 09:17:44 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/126-guid.html</guid>
    
</item>
<item>
    <title>eZ Components: The Good The Bad and the Ugly</title>
    <link>http://koch.ro/blog/index.php?/archives/125-eZ-Components-The-Good-The-Bad-and-the-Ugly.html</link>
            <category>english</category>
            <category>eZ Publish</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/125-eZ-Components-The-Good-The-Bad-and-the-Ugly.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=125</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=125</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    I&#039;ve been nominated &lt;a href=&quot;http://ez.no/company/news/nominees_for_ez_awards_2007&quot;&gt;again&lt;/a&gt; for the &lt;a href=&quot;http://ez.no/company/ez_conference_awards/ez_awards&quot;&gt;eZ Components Award&lt;/a&gt;. Thanks to &lt;a href=&quot;http://ez.no&quot;&gt;eZ Systems&lt;/a&gt; for honour and to me employer &lt;a href=&quot;http://www.ymc.ch&quot;&gt;YMC&lt;/a&gt; for the food!&lt;br /&gt;
So this is a good occasion to assemble a list I&#039;ve had in mind for a longer time. In a big project like &lt;a href=&quot;http://ezcomponents.org&quot;&gt;eZ Components&lt;/a&gt;, which has been programmed by many contributors over a long time it is natural, that there are some better and some worse parts. So which components are the good, the bad and the ugly? Maybe this kind of overview could also be done by other users of other libraries too. Then we could assemble a big comparison table of framework or library components and one could pick the best parts of each.&lt;br /&gt;
You&#039;ll notice that even if I consider myself a power user of eZ Components, I won&#039;t give a rating for every component, because there are still a few, I&#039;ve not intensively used by now. So let&#039;s complete this table in a wiki somewhere together!&lt;br /&gt;
&lt;br /&gt;
So IMHO: &lt;table style=&quot;border:1px solid gray;&quot; rules=&quot;all&quot;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Component&lt;/th&gt;&lt;th&gt;rating&lt;/th&gt;&lt;th&gt;justification&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Authentication&lt;/td&gt;   &lt;td&gt;works       &lt;/td&gt;&lt;td&gt;the component should better not handle $_SESSION itself      &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Cache&lt;/td&gt;            &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Configuration&lt;/td&gt;    &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;ConsoleTools&lt;/td&gt;     &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Database&lt;/td&gt;         &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;DatabaseSchema&lt;/td&gt;   &lt;td&gt;bad         &lt;/td&gt;&lt;td&gt;You want to have more control over your database schema.&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Document&lt;/td&gt;         &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;first ReST parser in PHP? Also many other formats!&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;EventLog&lt;/td&gt;         &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Feed&lt;/td&gt;             &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Graph&lt;/td&gt;            &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;ImageAnalysis&lt;/td&gt;    &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;ImageConversion&lt;/td&gt;  &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Mail&lt;/td&gt;             &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;MvcTools&lt;/td&gt;         &lt;td&gt;works       &lt;/td&gt;&lt;td&gt;too few documentation of best practices&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;PersistentObject&lt;/td&gt; &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Search&lt;/td&gt;           &lt;td&gt;ugly        &lt;/td&gt;&lt;td&gt;sorry, but it&#039;s not flexible enough for more then the most basic needs&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;SignalSlot&lt;/td&gt;       &lt;td&gt;bad         &lt;/td&gt;&lt;td&gt;haven&#039;t seen any use case that convinces me&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;SystemInformation&lt;/td&gt;&lt;td&gt;bad         &lt;/td&gt;&lt;td&gt;doesn&#039;t comply to ezc coding guidelines&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Template&lt;/td&gt;         &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;stable, fast, easily extensible&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Translation&lt;/td&gt;      &lt;td&gt;works       &lt;/td&gt;&lt;td&gt;Misses the important XLIFF format, but can be extended&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Tree&lt;/td&gt;             &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Url&lt;/td&gt;              &lt;td&gt;bad         &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;UserInput&lt;/td&gt;        &lt;td&gt;ugly        &lt;/td&gt;&lt;td&gt;see my attempt for a new &lt;a href=&quot;http://github.com/thkoch2001/ymc-htmlform/tree/master&quot;&gt;form component&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Webdav&lt;/td&gt;           &lt;td&gt;not used yet&lt;/td&gt;&lt;td&gt;but looks very promissing!&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Workflow&lt;/td&gt;         &lt;td&gt;great       &lt;/td&gt;&lt;td&gt;           &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; The numbers: &lt;ul&gt; &lt;li&gt;not used yet: 6/25&lt;/li&gt; &lt;li&gt;works: 3/25&lt;/li&gt; &lt;li&gt;great: 10/25&lt;/li&gt; &lt;li&gt;bad: 4/25&lt;/li&gt; &lt;li&gt;ugly: 2/25&lt;/li&gt; &lt;/ul&gt; 
    </content:encoded>

    <pubDate>Wed, 17 Jun 2009 11:07:21 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/125-guid.html</guid>
    
</item>
<item>
    <title>Community GIT repository for eZ Publish</title>
    <link>http://koch.ro/blog/index.php?/archives/109-Community-GIT-repository-for-eZ-Publish.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/109-Community-GIT-repository-for-eZ-Publish.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=109</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=109</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    The eZ Publish Community came together in january to the &lt;a href=&quot;http://ez.no/developer/news/ez_community_newsletter_2_6th_february_2009&quot;&gt;International Winter Conference in Barcelona&lt;/a&gt;. One issue which has been discussed often at this meeting was how the development of &lt;a href=&quot;http://ez.no/developer/forum/general/ez_project_v_five&quot;&gt;eZ Publish could become more open&lt;/a&gt;.  &lt;br /&gt;
As part of a possible solution, I presented the &lt;a href=&quot;http://ez.no/developer/forum/suggestions/switch_to_git&quot;&gt;distributed version control system GIT&lt;/a&gt;. A &lt;a href=&quot;http://koch.ro/blog/index.php?/archives/104-GIT-for-the-eZ-Ecosystem-Survey-results.html&quot;&gt;poll&lt;/a&gt; made in preparation of the conference, has pointed out that half of the respondents already uses a modified version and therefor a kind of fork of eZ Publish. This number has also been confirmed by the conference participants. &lt;br /&gt;
As a result &lt;a href=&quot;http://blog.coomanskristof.be/2009/03/11/welcome-the-open-ez-publish-community-repository/&quot;&gt;Kristof Coomans&lt;/a&gt;, &lt;/a&gt;Kaarel Jõgi&lt;/a&gt;, and me think, that it is about time, to provide a community GIT repository of eZ Publish and thus allow everybody to work on things like: &lt;ul&gt; &lt;li&gt; make the default install of eZ Publish usable in more community related aspects: forums, blogs. This includes mostly templates and permission setup (no kernel modifications) and help people to get started with eZ Publish.  &lt;/li&gt; &lt;li&gt; improve the update mechanism of eZ Publish &lt;/li&gt; &lt;li&gt; replace ezwebin templating setup with something more sensible and more easily themeable, maybe look into blueprint css or some similiar &lt;/li&gt; &lt;li&gt; &lt;a href=&quot;http://ez.no/developer/forum/suggestions/2_years_ago&quot;&gt;AJAXify the admin area&lt;/a&gt; &lt;/li&gt; &lt;li&gt; include functionality from eZ Components: &lt;ul&gt; &lt;li&gt; ezcTemplate engine in parallel to old &lt;a href=&quot;http://ez.no/developer/forum/general/is_there_a_new_templating_system_in_ez_4_1&quot;&gt;eZ Publish templating&lt;/a&gt; &lt;/li&gt; &lt;li&gt; ezcConfiguration for ini file handling &lt;/li&gt; &lt;li&gt; ezcDatabase for query abstraction &lt;/li&gt; &lt;li&gt; ezcAuthentication to allow &lt;a href=&quot;http://ez.no/developer/forum/suggestions/ez_please_add_captcha_openid_to_ez_no&quot;&gt;more authentication mechanisms (OpenID!)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;
To make it possible, that feature branches can be included in an eZ Publish release, it would be suggested to respect the &lt;a href=&quot;http://ez.no/ezpublish/contributing&quot;&gt;development guidelines of eZ Systems&lt;/a&gt;. These affect not only the &lt;a href=&quot;http://ezcomponents.org/contributing/coding_standards&quot;&gt;implementation&lt;/a&gt; itself, but also the &lt;a href=&quot;http://ez.no/ezpublish/contributing&quot;&gt;development process&lt;/a&gt;. The most important characteristic of this process is the split up into these steps:  &lt;br /&gt;
&lt;ol&gt; &lt;li&gt; Requirements Discussion &lt;/li&gt; &lt;li&gt; Design Discussion &lt;/li&gt; &lt;li&gt; Test Driven Implementation &lt;/li&gt; &lt;li&gt; Review &lt;/li&gt; &lt;/ol&gt;&lt;br /&gt;
All of this steps need to be done openly on the &lt;a href=&quot;http://lists.ez.no/mailman/listinfo/sdk-public&quot;&gt;development mailing list&lt;/a&gt;.&lt;br /&gt;
My employer, &lt;a href=&quot;http://www.ymc.ch&quot;&gt;YMC&lt;/a&gt; was so kind to provide my working time and server ressources and let me setup a &lt;a href=&quot;http://git.forge.ymc.ch/&quot;&gt;git-svn clone of eZ Publish&lt;/a&gt; and an &lt;a href=&quot;http://forge.ymc.ch/issues&quot;&gt;issuetracker&lt;/a&gt;.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 11 Mar 2009 19:51:42 +0100</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/109-guid.html</guid>
    
</item>
<item>
    <title>Why Zend Framework sucks. Part 1/infinite - Exceptions Missuse</title>
    <link>http://koch.ro/blog/index.php?/archives/108-Why-Zend-Framework-sucks.-Part-1infinite-Exceptions-Missuse.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/108-Why-Zend-Framework-sucks.-Part-1infinite-Exceptions-Missuse.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=108</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=108</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    This is the first entry in a series of posts explaining, why you should never ever consider using Zend Framework. I write these entries, because I see many people considering Zend Framework, without knowing how bad it is and without knowing, that there are better alternatives. I&#039;m very fluent in &lt;a href=&quot;http://ezcomponents.org&quot;&gt;eZ Components&lt;/a&gt; so this is the alternative I propose and use as comparission. Please feel free to add your beloved PHP Framework or Library in the comments, but only when you point out, how it is better then ZF. &lt;a href=&quot;http://schlitt.info/&quot;&gt;Tobias Schlitt&lt;/a&gt; once found this (or similiar) code:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;try&amp;#160;{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;$username&amp;#160;=&amp;#160;$this-&amp;#62;_getAccountDn&amp;#40;$username&amp;#41;;
}&amp;#160;catch&amp;#160;&amp;#40;Zend_Ldap_Exception&amp;#160;$zle&amp;#41;&amp;#160;{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;/&amp;#42;&amp;#42;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#42;&amp;#160;@todo&amp;#160;Temporary&amp;#160;measure&amp;#160;to&amp;#160;deal&amp;#160;with&amp;#160;exception&amp;#160;thrown&amp;#160;for&amp;#160;ldap&amp;#160;extension&amp;#160;not&amp;#160;loaded
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#42;/
&amp;#160;&amp;#160;&amp;#160;&amp;#160;if&amp;#160;&amp;#40;strpos&amp;#40;$zle-&amp;#62;getMessage&amp;#40;&amp;#41;,&amp;#160;&#039;LDAP&amp;#160;extension&amp;#160;not&amp;#160;loaded&#039;&amp;#41;&amp;#160;!==&amp;#160;false&amp;#41;&amp;#160;{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw&amp;#160;$zle;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&amp;#160;&amp;#160;&amp;#160;&amp;#160;//&amp;#160;end&amp;#160;temporary&amp;#160;measure
&amp;#160;&amp;#160;&amp;#160;&amp;#160;switch&amp;#160;&amp;#40;$zle-&amp;#62;getCode&amp;#40;&amp;#41;&amp;#41;&amp;#160;{
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;case&amp;#160;Zend_Ldap_Exception&amp;#58;&amp;#58;LDAP_NO_SUCH_OBJECT&amp;#58;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;case&amp;#160;Zend_Ldap_Exception&amp;#58;&amp;#58;LDAP_X_DOMAIN_MISMATCH&amp;#58;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw&amp;#160;$zle;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw&amp;#160;new&amp;#160;Zend_Ldap_Exception&amp;#40;null,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&#039;Failed&amp;#160;to&amp;#160;retrieve&amp;#160;DN&amp;#160;for&amp;#160;account&amp;#58;&amp;#160;&#039;&amp;#160;.&amp;#160;$zle-&amp;#62;getMessage&amp;#40;&amp;#41;,
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Zend_Ldap_Exception&amp;#58;&amp;#58;LDAP_OPERATIONS_ERROR&amp;#41;;
}&lt;/div&gt;&lt;br /&gt;
From: trunk/library/Zend/Ldap.php, Line 689&lt;br /&gt;
&lt;br /&gt;
Things to note:&lt;br /&gt;
&lt;br /&gt;
The message of an exception is checked to control program flow. This breaks encapsulation, since the message belongs to the exception class. It would have been better to make a subclass of the exception class and then use different catch clauses for different exception classes.&lt;br /&gt;
&lt;br /&gt;
The comment says, that this has been a temporary measure. But the programmer should have known, that there isn&#039;t something like a temporary measure in programming. Once you&#039;ve introduced a bad thing, you have to live with it for a very long time. Subversion also states, that this temporary measure has been introduced before January 2008.&lt;br /&gt;
&lt;br /&gt;
Update: Found the appropriate statement in the ZF &lt;a href=&quot;http://framework.zend.com/wiki/display/ZFDEV/PHP+Coding+Standard+(draft)#PHPCodingStandard(draft)-Exceptionbestpractices&quot;&gt;Coding Standard&lt;/a&gt; forbidding the above code:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Don&#039;t put important diagnostic information only in the text of the exception method. Create methods and members in derived exception classes as needed, to provide information to the catch block. Create an exception constructor method that takes appropriate arguments, and populate the members of the class with those arguments.&lt;/blockquote&gt; 
    </content:encoded>

    <pubDate>Thu, 26 Feb 2009 16:27:20 +0100</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/108-guid.html</guid>
    
</item>
<item>
    <title>Webtreff: Content Storage</title>
    <link>http://koch.ro/blog/index.php?/archives/93-Webtreff-Content-Storage.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
            <category>Webtreff</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/93-Webtreff-Content-Storage.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=93</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=93</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Monday we had the topic of &lt;a href=&quot;http://koch.ro/blog/uploads/presentations/content_storage.pdf&quot; title=&quot;content_storage.pdf&quot; target=&quot;_blank&quot;&gt;content storage (pdf)&lt;/a&gt; technologies at our webtreff meeting. We talked about the &lt;a href=&quot;http://ez.no/developer/articles/the_ez_content_model&quot;&gt;content model of eZ Publish&lt;/a&gt;, about ideas how it could be improved together with some general database design topics.&lt;br /&gt;
We already looked at two other approaches: The &lt;a href=&quot;http://en.wikipedia.org/wiki/JSR-170&quot;&gt;Java Content Repository&lt;/a&gt; and &lt;a href=&quot;http://www.google.com/search?as_q=couchdb&amp;as_filetype=pdf&quot;&gt;CouchDB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Especially CouchDB appealed much to the folks and Benjamin offered to prepare a talk about it for dec/01. The next meeting will be on nov/17, 18:30 about Typo3. For more informations you can join our &lt;a href=&quot;http://lists.koch.ro/listinfo/webtreff&quot;&gt;mailing list&lt;/a&gt;.  
    </content:encoded>

    <pubDate>Wed, 05 Nov 2008 15:42:56 +0100</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/93-guid.html</guid>
    
</item>
<item>
    <title>YMC GIT Wiki</title>
    <link>http://koch.ro/blog/index.php?/archives/92-YMC-GIT-Wiki.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/92-YMC-GIT-Wiki.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=92</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=92</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    At &lt;a href=&quot;http://ymc.ch&quot;&gt;YMC&lt;/a&gt; we frequently use wikis for client projects. The wiki then serves as whiteboard for specification and documentation. Normally we use &lt;a href=&quot;http://en.wikipedia.org/wiki/MediaWiki&quot;&gt;MediaWiki&lt;/a&gt;, the engine that powers Wikipedia, for this.&lt;br /&gt;
But I personally don&#039;t like MediaWiki that much, because it&#039;s too feature rich for our purpose, it needs a Database and I&#039;d rather use another Markup Language then the default Wikipedia language. So I searched for an alternative and found &lt;a href=&quot;http://el-tramo.be/blog/wigit-intro&quot;&gt;WiGit&lt;/a&gt;, a very basic PHP wiki which uses my beloved &lt;a href=&quot;http://git.or.cz/&quot;&gt;GIT&lt;/a&gt; as storage backend. Unfortunately WiGit is still written in a rather ugly PHP4 style so I forked it and am now moving it step by step to use &lt;a href=&quot;http://ezcomponents.org&quot;&gt;eZ Components&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
So far it uses:&lt;ul&gt;&lt;li&gt;ezcTemplate&lt;/li&gt;&lt;li&gt;ezcConfiguration&lt;/li&gt;&lt;li&gt;ezcUrl&lt;/li&gt;&lt;/ul&gt;The next steps are to integrate ezcAuthenticate to use different means of login, most importantly OpenId, ezcDocument to provide different wiki markups or restructured text and the recently released &lt;a href=&quot;http://ezcomponents.org/resources/news/news-2008-10-06&quot;&gt;ezcMvcTools&lt;/a&gt; to clean up the index.php.&lt;br /&gt;
&lt;br /&gt;
I&#039;m doing this project for fun together with my collegue &lt;a href=&quot;http://comunix.info/&quot;&gt;Emanuel&lt;/a&gt;. If you like to join us, you can find the GIT repository at &lt;a href=&quot;http://git.koch.ro/?p=ymcgitwiki;a=summary&quot;&gt;http://git.koch.ro/?p=ymcgitwiki;a=summary&lt;/a&gt; and clone via&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;git&amp;#160;clone&amp;#160;git&amp;#58;//git.koch.ro/git/ymcgitwiki&lt;/div&gt;&lt;br /&gt;
There is also an &lt;a href=&quot;http://www.ohloh.net/projects/ymcgitwiki&quot;&gt;Ohloh&lt;/a&gt; page for our litte toy project. 
    </content:encoded>

    <pubDate>Tue, 07 Oct 2008 09:23:59 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/92-guid.html</guid>
    
</item>
<item>
    <title>Lightning Talk at Google about VIM</title>
    <link>http://koch.ro/blog/index.php?/archives/91-Lightning-Talk-at-Google-about-VIM.html</link>
            <category>PHP</category>
            <category>VIM</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/91-Lightning-Talk-at-Google-about-VIM.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=91</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=91</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    I&#039;m sitting at Google&#039;s office in Zürich, participating at their Open-Source-Jam. I had the pleasure to meet Bram Moolenaar, the creator of VIM and to give a short lightning talk about &lt;a href=&quot;http://www.koch.ro/blog/index.php?/archives/89-Presentation-Draft-VIM-as-your-PHP-IDE.html&quot;&gt;VIM as your (PHP) IDE&lt;/a&gt;. For those looking for the scripts, I can direct you for now to the &lt;a href=&quot;http://git.koch.ro/?p=vim-debugger-dbgp;a=summary&quot;&gt;GIT repository of the VIM-debugger&lt;/a&gt; (that works with xdebug) and the &lt;a href=&quot;http://mentors.debian.net/cgi-bin/sponsor-pkglist?action=details;package=vim-debugger-dbgp&quot;&gt;debian mentors site for the packaged script&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The rest of my scripts will be packaged soon. You can quicken my effort by writing a comment to this blogpost and saying that you&#039;re waiting. &lt;img src=&quot;http://koch.ro/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Thu, 02 Oct 2008 20:32:48 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/91-guid.html</guid>
    
</item>
<item>
    <title>Presentation Draft: VIM as your PHP IDE</title>
    <link>http://koch.ro/blog/index.php?/archives/89-Presentation-Draft-VIM-as-your-PHP-IDE.html</link>
            <category>eZ Publish</category>
            <category>PHP</category>
            <category>VIM</category>
    
    <comments>http://koch.ro/blog/index.php?/archives/89-Presentation-Draft-VIM-as-your-PHP-IDE.html#comments</comments>
    <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=89</wfw:comment>

    <wfw:commentRss>http://koch.ro/blog/rss.php?version=2.0&amp;type=comments&amp;cid=89</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Koch)</author>
    <content:encoded>
    Hans Melis &lt;a href=&quot;http://blog.hansmelis.be/2008/09/01/the-quest-for-a-php-editor/&quot;&gt;asks for a good PHP IDE&lt;/a&gt; and Tobias Schlitt &lt;a href=&quot;http://phpug.papaya-server.com/pipermail/koeln-bonn/2008-September/001647.html&quot;&gt;will present PHP development with VIM&lt;/a&gt; at the &lt;a href=&quot;http://www.phpug.de/koelnbonn.11.html&quot;&gt;Köln-Bonn PHP User-Group&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Since I also plan to make a presentation about VIM, I thought I could publish the &lt;a href=&quot;http://www.koch.ro/blog/uploads/free_software/vim/vim_intro.pdf&quot;&gt;draft of my presentation&lt;/a&gt; so far and kindly ask you to share your ideas about other cool things that VIM does for you.&lt;br /&gt;
&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Tue, 02 Sep 2008 08:01:33 +0200</pubDate>
    <guid isPermaLink="false">http://koch.ro/blog/index.php?/archives/89-guid.html</guid>
    
</item>

</channel>
</rss>