<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/blog/templates/default/atom.css" type="text/css" ?>

<feed 
   xmlns="http://www.w3.org/2005/Atom"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://koch.ro/blog/index.php?/feeds/atom10.xml" rel="self" title="Thomas Koch" type="application/atom+xml" />
    <link href="http://koch.ro/blog/"                        rel="alternate"    title="Thomas Koch" type="text/html" />
    <link href="http://koch.ro/blog/rss.php?version=2.0"     rel="alternate"    title="Thomas Koch" type="application/rss+xml" />
    <title type="html">Thomas Koch</title>
    <subtitle type="html">Dubio Sapientiae Initium.</subtitle>
    <icon>http://koch.ro/blog/templates/default/img/s9y_banner_small.png</icon>
    <id>http://koch.ro/blog/</id>
    <updated>2010-08-14T13:08:50Z</updated>
    <generator uri="http://www.s9y.org/" version="1.4.1-1">Serendipity 1.4.1-1 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>

    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/146-Free-Software-in-companies.html" rel="alternate" title="Free Software in companies" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-08-06T08:46:25Z</published>
        <updated>2010-08-14T13:08:50Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=146</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=146</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/20-Debian" label="Debian" term="Debian" />
            <category scheme="http://koch.ro/blog/index.php?/categories/18-free-software" label="free software" term="free software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
    
        <id>http://koch.ro/blog/index.php?/archives/146-guid.html</id>
        <title type="html">Free Software in companies</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <div>
At work we currently have a discussion: I'd like to develop some components as Free
Software. My bosses like the idea, but the client goes nuts only thinking about it.
<br/>
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.
<br/>
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.
<h4>big companies</h4>
<ul>
  <li><a href="http://sourceforge.net/adobe/">Adobe</a>
  </li>
  <li><a href="http://developers.facebook.com/opensource/">Facebook</a>: Cassandra, Thrift, Scribe, HipHop for PHP, ...
  </li>
  <li><a href="http://developer.yahoo.com/">Yahoo</a>: YUI, Design Pattern Library, YSlow, Hadoop, ZooKeeper
  </li>
  <li><a href="http://twitter.com/about/opensource">Twitter</a>
  </li>
  <li><a href="http://code.google.com/opensource/">Google</a>: 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, ...
  </li>
  <li><a href="">IBM</a>: <a href="http://www.ibm.com/developerworks/opensource/">Developerworks (Tutorials)</a>, Eclipse, International Components for Unicode (ICU)
  </li>
  </li>
</ul>
<h4>middle sized companies</h4>
<ul>
  <li><a href="http://about.digg.com/opensource">Digg</a>
  </li>
</ul>
<h4>small companies</h4>
<ul>
  <li><a href="http://101tec.com">101tec</a> (now <a href="">Datameer</a>): 
      <a href="http://katta.sourceforge.net/">Katta (distributed lucene on Hadoop)</a>,
      <a href="http://github.com/sgroschupf/zkclient">zkClient</a>
  </li>
</ul>
</div><br />
Update: Need to add <a href="http://www.danga.com/">Danga</a> (Gearman), <a href="https://fosswiki.liip.ch/">Liip.ch</a> with <a href="http://okapi.liip.ch/">Okapi</a>, Flux CMS, <a href="https://fosswiki.liip.ch/display/jackalope/Home">Jackalope</a>, <a href="http://github.com/rackspace">rackspace</a>  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/145-Wohngemeinschaft-in-Konstanz-Kreuzlingen-am-Bodensee.html" rel="alternate" title="Wohngemeinschaft in Konstanz / Kreuzlingen am Bodensee" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-08-05T06:32:22Z</published>
        <updated>2010-08-14T18:43:35Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=145</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=145</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/19-freie-software" label="freie software" term="freie software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/6-software-culture" label="software culture" term="software culture" />
            <category scheme="http://koch.ro/blog/index.php?/categories/15-Webtreff" label="Webtreff" term="Webtreff" />
    
        <id>http://koch.ro/blog/index.php?/archives/145-guid.html</id>
        <title type="html">Wohngemeinschaft in Konstanz / Kreuzlingen am Bodensee</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Vor einigen Wochen habe ich meine Freunde <a href="http://zellmi.de/">Zellmi</a> und <a href="http://www.natali-haug.de">Natalie</a> in ihrer neuen Heimat, der <a href="http://www.kommune-kowa.de/pmwiki/pmwiki.php">Kommune Waltershausen</a> (KoWa) besucht. Es hat mir sehr gut gefallen und ich wäre am liebsten gleich eingezogen. Aber meine Frau und ich sind gerade erst an den Bodensee gezogen und auch beide beruflich gebunden. Also warum nicht so etwas ähnliches am Bodensee beginnen? Es muss ja nicht gleich eine Kommune sein; eine Wohngemeinschaft wäre ein Anfang. Die Miete ist der größte Haufen Geld, den wir jeden Monat erwirtschaften müssen. Und dann arbeiten wir so lange, dass wir den Wohnraum meist nur zum schlafen nutzen. Was für eine Verschwendung. Und dann halten wir diese Wohnung im Winter auch noch warm, obwohl keiner zu hause ist.<br />
Wenn wir mal die Zeit haben, uns selber Essen zuzubereiten, dann tun wir das für zwei Personen. Was für eine Verschwendung von Zeit und Energie! In der (KoWa) wird immer für die ganze Gemeinschaft von über 10 Personen gekocht. Jeder kommt etwa alle 2 Wochen einmal dran.<br />
Die Mitglieder der Kommune berichten, dass sie durch die gemeinsame Nutzung von Aufenthalts- und Sanitärräumen, Sammeleinkauf und gemeinschaftliches Essen deutlich kostengünstiger lebten. Dann sollte diese Wohnform doch gerade in einer so teuren Wohnregion wie am Bodensee die richtige Wahl sein!<br />
Gerade lese ich, dass in Konstanz und Kreuzlingen ein riesiges Überangebot an Büroflächen existiert: <a href="http://www.tmw-kn.com/blog/2010/07/29/so-viel-buro-platz-wie-auf-funf-fussballfeldern/">Teil 1</a>, <a href="http://www.tmw-kn.com/blog/2010/07/30/ein-nagelneuer-palazzo-mit-22000-quadratmetern/">Teil 2</a>. Es ist also vielleicht gar nicht so utopisch mit mehreren Leuten eine geeignete Immobilie günstig zu erwerben.<br />
Wer hat also Interesse? Einfach einen Kommentar schreiben oder Mail an thomas (at) koch punkt ro.<br />
Vielleicht können wir ja mit <a href="http://identi.ca/miradlo">Ute Hauth</a> kooperieren. Sie und andere möchten einen Co-working space in Konstanz aufbauen. Kann man in einer geeigneten Immobilie sowohl Arbeitsbereiche als auch Wohnbereiche haben?<br />
<br />
<b>Update:</b> Ein schönes Vorbild, das <a href="http://t3n.de/news/rainbow-mansion-276249/">Rainbow Mansion</a><br />
<br />
<b>Update2:</b> Links zum Thema: <a href="http://www.fgw-ev.de/">Forum Gemeinschaftliches Wohnen e.V.</a>, <a href="http://www.i3-enzkloesterle.de/">i3 gemeinschaftlich leben &amp; wohnen</a>, <a href="http://www.wohnprojekte-portal.de">Wohnprojekte Portal</a>. Auf meine Anfrage in einem Couchsurfing.org Forum hat nach wenigen Stunden bereits eine Interessentin geantwortet, die auch aktiv auf ein Projekt hinarbeitet. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/144-searching-a-colleague-to-hack-on-big-data,-crawling-and-search.html" rel="alternate" title="searching a colleague to hack on big data, crawling and search" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-06-22T09:32:01Z</published>
        <updated>2010-06-28T22:09:49Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=144</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=144</wfw:commentRss>
    
    
        <id>http://koch.ro/blog/index.php?/archives/144-guid.html</id>
        <title type="html">searching a colleague to hack on big data, crawling and search</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                At <a href="http://www.ymc.ch">YMC AG</a> I'm working on a project to crawl and index a large amount of online content. The crawled data is feed into an index and queried for different specialized topics.<br />
<br />
Now this project is already running since some months, the prospect is great and we're looking forward to <a href="http://www.ymc.ch/unternehmen/jobs">enlarge our team</a> and become even better. That's where you come into play. There are many areas, where you could take over some work: We're using Hadoop, HBase and Zookeeper. Maybe we could make use of some parts of Bixo or Nutch. The Lucene Index needs to be scaled, either with Katta, elasticsearch or some <a href="http://github.com/thkoch2001/hbasene">homegrown solution on top of HBase</a>. We'll also need to scale the number of servers, so you could help with some background in system administration and configuration management.<br />
<br />
What's cool about the job?<br />
<ul>
<li>First, you'll work with me. <img src="http://koch.ro/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /></li>
<li>You will work with interesting technology: Big Data, Crawling, Search</li>
<li>YMC is a nice place, where I can combine intern projects with <a href="http://qa.debian.org/developer.php?login=thomas.koch@ymc.ch">contributions to debian</a></li>
<li><a href="http://www.bodensee.eu/publish/Impressionen_neu.aspx?ActiveID=1108">Lake constance</a> is one of the nicest touristic places in Europe</li>
<li>Allthough it's a touristic region, you don't have to miss Free Software events: It's one hour to Zurich, two and a half to Stuttgart and we run a local web-dev group with around 20 members. Night trains from Zurich take you to Cologne, Berlin or Vienna.</li>
</ul>If all this sounds good for you, then have a look at <a href="http://www.ymc.ch/unternehmen/jobs">www.ymc.ch/unternehmen/jobs</a>! 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/143-NoSQL-summer-at-lake-constance.html" rel="alternate" title="NoSQL summer at lake constance" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-06-17T07:31:00Z</published>
        <updated>2010-06-23T04:26:20Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=143</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=143</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/20-Debian" label="Debian" term="Debian" />
            <category scheme="http://koch.ro/blog/index.php?/categories/16-eZ-Publish" label="eZ Publish" term="eZ Publish" />
            <category scheme="http://koch.ro/blog/index.php?/categories/18-free-software" label="free software" term="free software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/19-freie-software" label="freie software" term="freie software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
            <category scheme="http://koch.ro/blog/index.php?/categories/15-Webtreff" label="Webtreff" term="Webtreff" />
    
        <id>http://koch.ro/blog/index.php?/archives/143-guid.html</id>
        <title type="html">NoSQL summer at lake constance</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Have you already started to try out these new storage/database things commonly referred to as NoSQL? (For you google-bot, I'm talking about CouchDB, Cassandra, HBase, Hadoop, Hypertable, MongoDB, Tokyo Cabinet, etc). Well, it's one thing to install and use them but another to understand all the computer science background about them.<br />
Therefor many developers around the world thought to make this summer a <a href="http://nosqlsummer.org/">NoSQL summer</a>. Local meetings are held in many cities: London, Los Angeles, New York, Paris, <a href="http://nosqlsummer.org/city/lake-constance">lake constance</a> ... <img src="http://koch.ro/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /><br />
If you like to meet for a beer and learn and discuss about some of the hottest stuff in computing, then come around! Please <a href="http://www.youtick.net/v493/(hash)/eb3ed31aae7e8897db12450b8a444064">select the dates when you can join</a> and the <a href="http://www.youtick.net/v495/(hash)/763bc7afdbce0fd31e25c4f7fc6a4870">papers you'd like to discuss</a>. You can subscribe to email announcements or ical and rss feeds at the <a href="http://nosqlsummer.org/city/lake-constance">lake constance nosql summer page</a>.  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/140-udev-ate-my-laptop-today.html" rel="alternate" title="udev ate my laptop today?" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-06-12T09:10:57Z</published>
        <updated>2010-06-16T20:41:39Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=140</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=140</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/20-Debian" label="Debian" term="Debian" />
    
        <id>http://koch.ro/blog/index.php?/archives/140-guid.html</id>
        <title type="html">udev ate my laptop today?</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I finally got punished today for using unstable without knowing enough about my system. <img src="http://koch.ro/blog/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> Since I can't access my emails I'm hoping for help from planet-debian. Please excuse...<br />
<br />
So the last words of my machine:<br />
<br />
<pre>
Loading, please wait...
  One or more specified logical volume(s) not found.
Unable to find LVM volume mylvm/root_crypt
  One or more specified logical volume(s) not found.
Unable to find LVM volume mylvm/swap_crypt
File descriptor 3 (/conf/conf.d/cryptroot) leaked on lvm invocation. Parent PID 
352: /bin/sh
udevd-work[77]: kernel-provided name 'dm-0' and NAME= 'mapper/mylvm-swap' 
disagree, please use SYMLINK+= or change the kernel to provide the proper name
</pre><blink>_</blink><br />
<br />
Please, if you can help me, write a comment to this blogpost!<br />
(Thank you, <a href="http://hboeck.de/">Hanno</a> for borrowing me your laptop!)<br />
<br />
<strong>update:</strong> It wasn't udev (this time). Sorry. The problem was, that I updated libdevmapper without also updating dmsetup. I could boot into an older kernel and solve this. A Bug against the LVM Debian package is already filled.  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/139-tnt-is-not-topgit.html" rel="alternate" title="tnt is not topgit" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-05-16T14:43:49Z</published>
        <updated>2010-06-23T13:34:48Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=139</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=139</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/20-Debian" label="Debian" term="Debian" />
            <category scheme="http://koch.ro/blog/index.php?/categories/18-free-software" label="free software" term="free software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/21-vcs-pkg" label="vcs-pkg" term="vcs-pkg" />
    
        <id>http://koch.ro/blog/index.php?/archives/139-guid.html</id>
        <title type="html">tnt is not topgit</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <div>As I've already written, I'm working on an <a href="http://www.koch.ro/blog/index.php?/archives/138-Design-document-for-a-patch-management-system-on-a-DVCS.html">alternative to topgit</a>. I made a
first attempt in perl some weeks ago, but gave up after some frustrating hours.
Yesterday I started again in python and had a very nice time putting together
the groundwork and the first two commands.
<br/>
It may be noted, that I've no previous programming experience in neither perl
nor python!

<br/>
By now, I can create a patchset branch and add a patch branch to it. There's
still a lot to do. For my talk at the <a
href="http://wiki.debconf.org/wiki/Miniconf-LT-Berlin/2010">Debian Mini
Conference</a> in Berlin next month I'd like to be able to update patch
branches, export patchsets and give a status summary.

<br/>
Maybe I can already find somebody who's interested in joining me with this
project? The code is in my <a href="http://github.com/thkoch2001">github
account</a>, however the name will most probably change.

<br/>
One reason that I've been much faster in python is the fantastic <a
href="http://pypi.python.org/pypi/GitPython/0.2.0-beta1">python-git</a>
library. I can only recommend it!

<br/>
In other news: I'm searching a <a
href="http://www.couchsurfing.org/people/thkoch2001/">couch to surf</a> in
Berlin from june 7.-12. I prefer couchsurfing over hotels mostly to get to know
nice people around the world. Please contact me, if you'd like to host me for a
night or two. (thomas at koch punkt ro)
</div><br />
<br />
<b>Update:</b> <a href="http://wiki.debconf.org/upload/8/89/Patch_management_dvcs.pdf">Slides of my talk at the debconf are available</a>.   
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/138-Design-document-for-a-patch-management-system-on-a-DVCS.html" rel="alternate" title="Design document for a patch management system on a DVCS" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-04-02T10:48:33Z</published>
        <updated>2010-04-12T12:51:28Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=138</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=138</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/20-Debian" label="Debian" term="Debian" />
            <category scheme="http://koch.ro/blog/index.php?/categories/21-vcs-pkg" label="vcs-pkg" term="vcs-pkg" />
    
        <id>http://koch.ro/blog/index.php?/archives/138-guid.html</id>
        <title type="html">Design document for a patch management system on a DVCS</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Dear friends of Debian,<br />
<br />
this is <a href="http://wiki.debian.org/ThomasKoch">my</a> first post to Planet Debian. - The planet with the most geeky <a href="http://wiki.debian.org/PlanetDebian">registration procedure</a> in the known universe!<br />
<br />
I proposed an <a href="http://lists.alioth.debian.org/pipermail/vcs-pkg-discuss/2010-March/000702.html">alternative to topgit</a> some days ago on the <a href="http://vcs-pkg.org/">vcs-pkg.org</a> list. Martin asked (and encouraged) me to give a better explanation of the idea, which I'll hereby try. Sorry for not giving any drawings, but I'm totally incapable of anything graphical.<br />
<br />
Hopefully, I'll manage to come to the <a href="http://wiki.debconf.org/wiki/Miniconf-LT-Berlin/2010">Debian Miniconf in Berlin</a>. Then we could discuss the idea further and maybe even start implementing it. (Somebody would need to help me with my first steps in Perl then...)<br />
<br />
The following text is <a href="http://github.com/thkoch2001/topgit-alternative">available on github</a>. Please help me expand it!<br />
<br />
<h1 class="title">Design document for a patch management system on a DVCS</h1><br />
<div class="section" id="requirements">
<h1>Requirements</h1>
<p>The system to implement manages patchsets. A patchset is a set of patches with
a tree-ish dependency graph between the patches. There's one distinct root of
this dependency graph.</p>
<p>Patches are managed as branches with each branch representing a patch.
Modification of a patch is done by a commit to the respective branch. A branch
representing a patch as part of a patchset is called patchbranch.</p>
<p>The patch of a patchbranch is created as the diff between the root of the
patchbranch and the head.</p>
<p>The most important management methods are:</p>
<ul class="simple">
<li>Export a patchset in different formats<ul>
<li>quilt</li>
<li>a merged commit of all patches</li>
<li>a line of commits with each commit representing one patch</li>
</ul>
</li>
<li>Update a patchset against an updated root.</li>
<li>Copy a patchset</li>
<li>Delete a patchset from direct visibility while preserving all history about
it</li>
<li>Hide and unhide a patchset from direct visibility</li>
</ul>
<p>Additional requirements:</p>
<ul class="simple">
<li>The system should be implementable on top of GIT, Mercurial and eventually
Bazaar.</li>
<li>The system must easily cope with multiple different and independent patchsets.</li>
<li>All information about a patchset must be encoded in one distinct branch.
Publishing this one branch must be sufficient to allow somebody else to
recreate the patchset with all of its patchbranches.</li>
<li>The system should not rely on the presence of hooks.</li>
<li>The system should not require the addition of management files in patch
branches (like .topmsg and .topdeps in topgit)</li>
<li>The system must be easy to understand for a regular user of the underlying
DVCS.</li>
<li>The implementation may allow a patchset to depend on another patchset(s).</li>
</ul>
</div><br />
<div class="section" id="implementation">
<h1>implementation</h1>
<div class="section" id="patchset-meta-branch">
<h2>patchset meta branch</h2>
<p>A patchset meta branch holds all informations about one patchset. First, it
holds references to the top commits of all patch branches in the form of parent
references of commits. Thus pushing the patchset meta branch automatically also
pushes all commits of all patch branches.</p>
<p>Secondly, the patchset meta branch contains meta informations about the
patchset. These meta informations are:</p>
<ul class="simple">
<li>The names of all patch branches together with the most recent commit
identifier of a particular patch branch. Let's save this information in a
file called branches.</li>
<li>A message for each patch branch that explains the patch. These messages can
be saved in the file tree as msg/${PATCH-BRANCH-NAME}</li>
<li>References to the dependencies of the patch (other patches of the same
patchset or the root of the patchset). This is also encoded in the file
branches.</li>
</ul>
<p>Since the patchset meta branch holds all this informations, it is possible, to
delete all patch branches and recreate them from this informations.</p>
<p>Although the commits of the patchset meta branches hold references to the patch
branches, its file tree does not need to contain any files from the referenced
patches. This may confuse the underlying DVCS, but the patch meta branch is not
ment to be directly inspected.</p>
</div><br />
<div class="section" id="the-branches-file">
<h2>The branches file</h2>
<p>A branches file for a fictive patchset could look like:</p>
<pre class="literal-block">
# patch branches without an explicit dependency depend on the root of the
# patchset tree
# A Root can be given as either a fix commit (seen here), a branch or a tag.
# A fixed commit or tag is useful to maintain a patchset against an older
# upstream version
ROOT: 6a8589de32d490806ab86432a3181370e65953ca
# A tag as a dependency
#ROOT: upstream/0.1.2
# A branch as a dependency
#ROOT: upstream

# A regular patch with it's name and last commit
BRANCH: debian/use-debian-jars-in-build-xml 4bab542c261ff1a1ae87151c3536f19ef02d7937

# two other regular patches
BRANCH: upstream-jira/HDFS-1234 a8e4af13106582ca1bfbbcaeb0537f73faf46d87
BRANCH: upstream-jira/MAP-REDUCE-007 e3426bcbcb2537478f851edcf6eb04b34f6c7106

# This patch depends on the above two patches
# The sha1 below the dependency patches references a merge commit of the two
# dependencies
BRANCH: upstream-jira/HDFS-008 517851aa829d77e09bc5e59985fed1b0aa339cc6
DEPENDENCIES:
  upstream-jira/HDFS-1234
  upstream-jira/MAP-REDUCE-007
    cc294f2e4773c4ff71efb83648a0e16835fca841

# A patch branch that belongs to the patch branch, but won't get exported (yet)
BRANCH: upstream-jira/HDFS-9999 74257905azgsa4689bc5e59985fed1b0aa339cc6
BRANCH-FLAGS: noexport
</pre>
</div><br />
</div><br />
</div><br />
  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/137-Zookeeper-for-web-developers.html" rel="alternate" title="Zookeeper for web developers" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-02-19T09:42:48Z</published>
        <updated>2010-02-24T05:46:03Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=137</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=137</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/16-eZ-Publish" label="eZ Publish" term="eZ Publish" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
            <category scheme="http://koch.ro/blog/index.php?/categories/15-Webtreff" label="Webtreff" term="Webtreff" />
    
        <id>http://koch.ro/blog/index.php?/archives/137-guid.html</id>
        <title type="html">Zookeeper for web developers</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Have you ever developed any kind of distributed system? When doing so for the first time, you're very likely to fall in the trap of <a href="http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing">the Fallacies of Distributed Computing</a>. I've done so, you'll do so too.<br />
Now <a href="http://hadoop.apache.org/zookeeper/">zookeeper</a> is an application, that helps you implement many <a href="http://hadoop.apache.org/zookeeper/docs/current/recipes.html">distributed protocols</a> 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.<br />
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's children.<br />
Some usage examples come to my mind, which could be especially interesting for PHP developers:<br />
<ul> <li>save the PHP session in zk and have it therefor available to all web servers</li> <li>save a shopping card</li> <li>save the online status of a user (for a chat system)</li> <li>synchronize configuration files</li> <li>master election: many monitoring servers, but only one is active at any given time</li> <li>logging system: bookkeeper is a zk contribution, that receives your logs and assures they'll be kept save</li><li>create a lock on a document in a CMS</li> </ul><br />
<a href="http://wiki.apache.org/hadoop/ZooKeeper/PoweredBy">Companies that use zk</a> include Facebook, Yahoo, Rackspace and as rumors tell also twitter.<br />
Now this is all kind and sweet, the only sad thing is, there's no PHP binding yet. There are bindings for Java, C, Python and Perl. So if you're desperately searching what PHP extension you should write next, just take the zk C binding and expose it to PHP!<br />
Maybe you'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.<br />
For GSOC the project could include a PHP session implementation in the extension code and the possibility of persistent zk sessions across PHP calls.<br />
If you're in the region of eastern Switzerland: There'll be a presentation about zookeeper at the <a href="http://lists.koch.ro/listinfo/webtreff">Webtreff Kreuzlingen</a> on one of the next mondays. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/136-Going-to-FOSDEM-2010.html" rel="alternate" title="Going to FOSDEM 2010" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2010-01-30T19:52:08Z</published>
        <updated>2010-02-06T00:39:01Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=136</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=136</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/16-eZ-Publish" label="eZ Publish" term="eZ Publish" />
            <category scheme="http://koch.ro/blog/index.php?/categories/18-free-software" label="free software" term="free software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/19-freie-software" label="freie software" term="freie software" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
    
        <id>http://koch.ro/blog/index.php?/archives/136-guid.html</id>
        <title type="html">Going to FOSDEM 2010</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I'm going to fosdem 2010.  <p> <a href="http://www.fosdem.org/2010"><img height="89px" width="150px" alt="I'm going to Fosdem 2010" src="http://www.fosdem.org/promo/going-to" title="I'm going to Fosdem 2010"></a> </p><br />
These are things I'd like to attend:<br />
 <TABLE><thead> <TR> <TH>time</TH> <TH>room</TH> <TH>topic</TH> <TH>speaker</TH> </TR> </thead> <TBODY> <TR> <TD >10:45-11:30</TD> <TD >Janson</TD> <TD >Promoting Open Source Methods at a Large Company</TD> <TD >Brooks Davis</TD> </TR> <TR> <TD BGCOLOR="#CCCCCC">13:15-13:45</TD> <TD BGCOLOR="#CCCCCC">AY</TD> <TD BGCOLOR="#CCCCCC">Packaging Java Software for Debian</TD> <TD BGCOLOR="#CCCCCC">Thomas Koch</TD> </TR> <TR> <TD >13:40-13:55</TD> <TD >Ferrer</TD> <TD >CiviCRM: Common goals of FOSS and Not For Profit Organisations</TD> <TD >Xavier DUTOIT</TD> </TR> <TR> <TD >14:00-14:45</TD> <TD >H.1308</TD> <TD >The Maemo Community Council: a case-study in governance</TD> <TD >Dave Neary</TD> </TR> <TR> <TD BGCOLOR="#E6E6E6">14:00-15:30</TD> <TD BGCOLOR="#E6E6E6">Guillissen</TD> <TD BGCOLOR="#E6E6E6">LPI exam session 1</TD> <TD BGCOLOR="#E6E6E6">Klaus Behrla</TD> </TR> <TR> <TD >14:00-14:45</TD> <TD >Janson</TD> <TD >What is my system doing - Full System Observability with SystemTap</TD> <TD >Mark Wielaard</TD> </TR> <TR> <TD >14:30-15:00</TD> <TD >H.2213</TD> <TD >Building Federated Social Networks on XMPP</TD> <TD >Tuomas Koski, Simon Tennant</TD> </TR> <TR> <TD >15:00-15:45</TD> <TD >Janson</TD> <TD >Ganglia: 10 years of monitoring clusters and grids</TD> <TD >Bernard Li</TD> </TR> <TR> <TD >15:00-15:30</TD> <TD >H.2213</TD> <TD >XMPP and the Social Web</TD> <TD >Alard Weisscher, Laurent Eschenauer</TD> </TR> <TR> <TD >15:30-16:00</TD> <TD >H.2213</TD> <TD >PubSub Gone Wild: Info Sharing at Mediamatic</TD> <TD >Ralph Meijer</TD> </TR> <TR> <TD BGCOLOR="#E6E6E6">16:00-17:30</TD> <TD BGCOLOR="#E6E6E6">Guillissen</TD> <TD BGCOLOR="#E6E6E6">LPI exam session 2</TD> <TD BGCOLOR="#E6E6E6">Klaus Behrla</TD> </TR> <TR> <TD >16:00-16:15</TD> <TD >Ferrer</TD> <TD >SIP Communicator: Skype-like conf calls with SIP Communicator</TD> <TD >Emil Ivov</TD> </TR> <TR> <TD >16:20-16:35</TD> <TD >Ferrer</TD> <TD >Kamailio (OpenSER) 3.0.0: redefinition of SIP server</TD> <TD >Daniel-Constantin Mierla</TD> </TR> <TR> <TD >16:40-16:55</TD> <TD >Ferrer</TD> <TD >asterisk: An introduction to Asterisk Development</TD> <TD >Mark Michelson</TD> </TR> <TR> <TD >17:00-17:15</TD> <TD >Ferrer</TD> <TD >csync: Roaming Home Directories</TD> <TD >Andreas Schneider</TD> </TR> <TR> <TD >17:30-18:00</TD> <TD >H.2213</TD> <TD >Jingle Nodes: An Open Alternative to Skype</TD> <TD >Tiago Camargo</TD> </TR> <TR> <TD >18:00-18:30</TD> <TD >H.2213</TD> <TD >Multi-User Jingle: Voice and Video Conferencing with XMPP</TD> <TD >Dafydd Harries, Sjoerd Simons</TD> </TR> <TR> <TD >18:15-19:00</TD> <TD >H.1302</TD> <TD >Spacewalk: Linux Systems Lifecycle Management</TD> <TD >Marcus Moeller, Sandro Mathys</TD> </TR> <TR> <TD ><BR /></TD> <TD ><BR /></TD> <TD ><BR /></TD> <TD ><BR /></TD> </TR> <TR> <TD ><BR /></TD> <TD ><BR /></TD> <TD ><BR /></TD> <TD ><BR /></TD> </TR> <TR> <TD >09:15-10:00</TD> <TD >H.1302</TD> <TD >Linux distribution for the cloud</TD> <TD >Peter Eisentraut</TD> </TR> <TR> <TD >10:00-10:45</TD> <TD >Janson</TD> <TD >RepRap - Manufacturing for the Masses</TD> <TD >Adrian Bowyer</TD> </TR> <TR> <TD BGCOLOR="#E6E6E6">10:30-12:00</TD> <TD BGCOLOR="#E6E6E6">Guillissen</TD> <TD BGCOLOR="#E6E6E6">LPI exam session 3</TD> <TD BGCOLOR="#E6E6E6">Klaus Behrla</TD> </TR> <TR> <TD >11:00-11:45</TD> <TD >AW1.120</TD> <TD >My life with HBase</TD> <TD >Lars George</TD> </TR> <TR> <TD >11:00-11:45</TD> <TD >Janson</TD> <TD >Tor: Building, Growing, and Extending Online Anonymity</TD> <TD >Andrew Lewman</TD> </TR> <TR> <TD BGCOLOR="#CCCCCC">12:15-13:00</TD> <TD BGCOLOR="#CCCCCC">H.1302</TD> <TD BGCOLOR="#CCCCCC">Cross distro packaging with (top)git</TD> <TD BGCOLOR="#CCCCCC">Thomas Koch</TD> </TR> <TR> <TD >12:15-13:00</TD> <TD >H.1308</TD> <TD >Shared libraries in Debian</TD> <TD >Sune Vuorela</TD> </TR> <TR> <TD BGCOLOR="#E6E6E6">13:00-14:30</TD> <TD BGCOLOR="#E6E6E6">Guillissen</TD> <TD BGCOLOR="#E6E6E6">LPI exam session 4</TD> <TD BGCOLOR="#E6E6E6">Klaus Behrla</TD> </TR> <TR> <TD >13:15-14:00</TD> <TD >AW1.120</TD> <TD >CouchDB, a database designed for the web and more</TD> <TD >Benoit Chesneau</TD> </TR> <TR> <TD >14:00-14:45</TD> <TD >Janson</TD> <TD >Large scale data analysis made easy - Apache Hadoop</TD> <TD >Isabel Drost</TD> </TR> <TR> <TD BGCOLOR="#E6E6E6">15:00-16:30</TD> <TD BGCOLOR="#E6E6E6">Guillissen</TD> <TD BGCOLOR="#E6E6E6">LPI exam session 5</TD> <TD BGCOLOR="#E6E6E6">Klaus Behrla</TD> </TR> <TR> <TD >15:30-16:15</TD> <TD >H.1308</TD> <TD >Continuous Packaging with Project-Builder.org</TD> <TD >Bruno Cornec</TD> </TR> <TR> <TD >15:30-16:15</TD> <TD >AW1.120</TD> <TD >Comparing the MapReduce way in CouchDB with the SQL way in a RDBMS</TD> <TD >Stéphane Combaudon</TD> </TR> <TR> <TD >16:15-16:45</TD> <TD >AW1.120</TD> <TD >Designing a scalable content management system on NoSQL technologies</TD> <TD >Evert Arckens</TD> </TR> <TR> <TD >16:15-17:00</TD> <TD >H.1308</TD> <TD >Debian Secrets: power tools for power users</TD> <TD >Wouter Verhelst</TD> </TR> </TBODY> </TABLE> 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/135-Gezielte-Medienkampagne-gegen-Klimagipfel-in-Kopenhagen.html" rel="alternate" title="Gezielte Medienkampagne gegen Klimagipfel in Kopenhagen?" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-11-21T19:04:20Z</published>
        <updated>2009-11-25T14:44:22Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=135</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=135</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/4-world-views" label="world views" term="world views" />
    
        <id>http://koch.ro/blog/index.php?/archives/135-guid.html</id>
        <title type="html">Gezielte Medienkampagne gegen Klimagipfel in Kopenhagen?</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Die Presse schreibt gerade [<a href="http://news.smh.com.au/breaking-news-technology/hackers-leak-emails-stoke-climate-debate-20091122-isc8.html">1</a>, <a href="http://derstandard.at/1256745356762/Hacker-knackten-PC-von-Klima-Institut-Erderwaerumg-uebertrieben">2</a>] , dass "Hacker" (es heißt Cracker!) zugriff auf Emails eines Klimaforschungsinstitut erlangt hätten. Diese Emails sollen angeblich belegen, dass Klimaprognosen absichtlich pessimistisch dargestellt würden.<br />
<br />
Es macht mich schon misstrauisch, dass ausgerechnet einen Monat vor dem Klimagipfel in Kopenhagen diese Emails ans Licht geraten und es ärgert mich, wie unkritisch Zeitungen so gefährliche Gerüchte weiterverbreiten. Kurze Recherche (das sollten doch eigentlich die Holzmedien für mich leisten?) liefert:<br />
<br />
Das Gerücht wird vor allem von <a href="http://en.wikipedia.org/wiki/Stephen_McIntyre">Stephen McIntyre</a> verbreitet. Er ist bekannter <a href="http://www.sourcewatch.org/index.php?title=Stephen_McIntyre">Lobbyist der Ölindustrie</a>. Die Kritiker kaprizieren sich vor allem darüber, dass in einer Email das Wort "Trick" verwendet wird. Ein "Trick" solle verwendet werden, um die Daten aufzubereiten. - Aus meinem Physikstudium bin ich gewohnt, dass man von einem "Trick" spricht, mit dem man schwierige Analyseprobleme löst. Aber dann ist nicht von Datenfälschung sondern von besonders cleveren Rechenmethoden die Rede.  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/134-Exploring-Eclipse,-PDT-and-Eclim.html" rel="alternate" title="Exploring Eclipse, PDT and Eclim" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-10-24T14:48:24Z</published>
        <updated>2010-04-24T09:29:16Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=134</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=134</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
            <category scheme="http://koch.ro/blog/index.php?/categories/14-VIM" label="VIM" term="VIM" />
    
        <id>http://koch.ro/blog/index.php?/archives/134-guid.html</id>
        <title type="html">Exploring Eclipse, PDT and Eclim</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                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.<br />
<br />
So inspired by the <a href="http://schlitt.info/opensource/blog/0488_comfortable_php_editing_with_vim_5.html">Comfortable PHP editing with VIM</a> series of Tobias Schlitt I learned VIM. <br />
<br />
My blogpost about <a href="http://koch.ro/blog/index.php?/archives/63-VIM-an-a-PHP-IDE.html">Vim as an IDE for PHP</a> is a popular page and I often get requests about details of my setup. Please don't ask me anymore, since I intend to move away from this setup!<br />
<br />
Some weeks ago I've been at a conference (<a href="http://gearconf.com/">GearConf</a>) about team collaboration. Some of the tools presented there (like <a href="http://www.eclipse.org/mylyn/">Mylyn</a>) made me jealous of the java people.<br />
<br />
So it was time to reconsider Eclipse. However editing text with what's called an "editor" in eclipse is a pain to say the least. But life's good and somebody already created <a href="http://eclim.sourceforge.net/">eclim</a>. 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.<br />
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:<br />
<ul>  <li>There's not only the integration for PHP but also Java, Javascript, Python, Ruby, C/C++, CSS, HTML and XML</li>  <li>Eclipse comes with a bunch of other cool plugins (like Mylin)</li>  <li>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-&gt;</li></ul><br />
<a href="http://ou.jiayong.name/">My collegue Jiayong</a> just installed the bundled version of PDT with eclipse, ran the eclim installer and was ready.<br />
<br />
However I'm much more addicted to pain, so I took the <a href="https://launchpad.net/ubuntu/+source/eclipse">Ubuntu packages of eclipse 3.5.1</a>, <a href="http://www.venukb.com/2006/08/20/install-eclipse-plugins-the-easy-way/">linked</a> 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.<br />
There are some more tweaks to do, which I can point out later, if you should dare to follow this road. You shouldn't have a need for this until you'd be interested to become famous and beloved and <a href="http://wiki.debian.org/Java/RequestedPackages">package PDT or eclim</a> for Debian.<br />
<br />
Do you already have experiences with eclim+pdt? Are there tutorials I've not found? Are you interested to come with me to explore this setup?  
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/133-eZ-Components-Template-is-not-slow....html" rel="alternate" title="eZ Components Template is not slow..." />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-10-09T11:40:42Z</published>
        <updated>2009-10-16T07:44:44Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=133</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=133</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/16-eZ-Publish" label="eZ Publish" term="eZ Publish" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
    
        <id>http://koch.ro/blog/index.php?/archives/133-guid.html</id>
        <title type="html">eZ Components Template is not slow...</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                ... you may just not have used it appropriately. Fabien Potencier has <a href="http://fabien.potencier.org/article/34/templating-engines-in-php">blogged about templating engines</a>, compared their speed and finally concluded that his own templating engine is the fastest. Not only that, but my beloved <a href="http://ezcomponents.org/docs/tutorials/Template">eZ Components Template</a> engine, which we use with great pleasure at <a href="http://www.ymc.ch">YMC</a>, came out as the slowest in his benchmark. (Althought he complimented it as "probably the one which have the most features".)<br />
<br />
Dear Fabien, I think it'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've compared apples with oranges. I take the compiled template code from the <a href="http://www.twig-project.org/book/05-Hacking-Twig">Twig site</a>: <div class="bb-code-title">CODE:</div><div class="bb-code">/&#42;&#160;Hello&#160;{{&#160;name&#160;}}&#160;&#42;/
class&#160;__TwigTemplate_1121b6f109fe93ebe8c6e22e3712bceb&#160;extends&#160;Twig_Template
{
&#160;&#160;public&#160;function&#160;display&#40;$context&#41;
&#160;&#160;{
&#160;&#160;&#160;&#160;$this-&#62;env-&#62;initRuntime&#40;&#41;;
&#160;
&#160;&#160;&#160;&#160;//&#160;line&#160;1
&#160;&#160;&#160;&#160;echo&#160;"Hello&#160;";
&#160;&#160;&#160;&#160;echo&#160;&#40;isset&#40;$context&#91;'name'&#93;&#41;&#160;?&#160;$context&#91;'name'&#93;&#160;&#58;&#160;null&#41;;
&#160;&#160;}
}</div><br />
Thinks to keep in mind from the Twig compiled template: <ul>
<li>There's direct output via echo (which is captured by Twig and not directly sent out)</li>
<li>The template variables are sent in the array $context</li>
<li>There's no error check, whether the required template variable 'name' is actually sent to the template</li>
<li>The content of the variables is not escaped</li>
</ul>Now let's compare this with the compiled code produced by eZ Components Template. First the template:<br />
<div class="bb-code-title">CODE:</div><div class="bb-code">{use&#160;$name}
{use&#160;$items}
&#160;
Hello&#160;{$name}
&#160;
{foreach&#160;$items&#160;as&#160;$item}
&#160;&#42;&#160;{$item}
{/foreach}
&#160;</div><br />
And the resulting code:<br />
<div class="bb-code-title">CODE:</div><div class="bb-code">&#60;?php
//&#160;Generated&#160;PHP&#160;file&#160;from&#160;template&#160;code.
//&#160;If&#160;you&#160;modify&#160;this&#160;file&#160;your&#160;changes&#160;will&#160;be&#160;lost&#160;when&#160;it&#160;is&#160;regenerated.
$this-&#62;checkRequirements&#40;1,array&#40;"disableCache"&#160;=&#62;&#160;false&#41;&#41;;
$i_output&#160;=&#160;"";
if&#160;&#40;&#160;!isset&#40;$this-&#62;send-&#62;name&#41;&#41;
{

&#160;&#160;&#160;&#160;throw&#160;new&#160;ezcTemplateRuntimeException&#40;&#160;sprintf&#40;"The&#160;external&#160;&#40;use&#41;&#160;variable&#160;'%s'&#160;is&#160;not&#160;set&#160;in&#160;template&#58;&#160;%s&#160;and&#160;called&#160;from&#160;%s",&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'name',
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;template-&#62;stream,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#40;&#160;sizeof&#40;$this-&#62;template-&#62;streamStack&#41;&#160;&#62;=&#160;2&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;?&#160;$this-&#62;template-&#62;streamStack&#91;sizeof&#40;$this-&#62;template-&#62;streamStack&#41;&#160;-&#160;2&#93;&#160;&#58;&#160;'the&#160;application&#160;code'&#41;&#160;&#41;&#160;&#41;;
}
if&#160;&#40;&#160;!isset&#40;$this-&#62;send-&#62;items&#41;&#41;
{

&#160;&#160;&#160;&#160;throw&#160;new&#160;ezcTemplateRuntimeException&#40;&#160;sprintf&#40;"The&#160;external&#160;&#40;use&#41;&#160;variable&#160;'%s'&#160;is&#160;not&#160;set&#160;in&#160;template&#58;&#160;%s&#160;and&#160;called&#160;from&#160;%s",
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;'items',
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$this-&#62;template-&#62;stream,
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#40;&#160;sizeof&#40;$this-&#62;template-&#62;streamStack&#41;&#160;&#62;=&#160;2&#160;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;?&#160;$this-&#62;template-&#62;streamStack&#91;sizeof&#40;$this-&#62;template-&#62;streamStack&#41;&#160;-&#160;2&#93;&#160;&#58;&#160;'the&#160;application&#160;code'&#41;&#160;&#41;&#160;&#41;;
}
$i_output&#160;.=&#160;"&#160;\nHello&#160;";
$i_output&#160;.=&#160;htmlspecialchars&#40;$this-&#62;send-&#62;name&#41;;
$i_output&#160;.=&#160;"\n&#160;\n";
foreach&#160;&#40;$this-&#62;send-&#62;items&#160;as&#160;$t_item&#41;
{
&#160;&#160;&#160;&#160;$i_output&#160;.=&#160;"&#42;&#160;";
&#160;&#160;&#160;&#160;$i_output&#160;.=&#160;htmlspecialchars&#40;$t_item&#41;;
&#160;&#160;&#160;&#160;$i_output&#160;.=&#160;"\n";
}
return&#160;$i_output;
?&#62;</div><br />
The differences are:<ul>
<li>The output is collected in a variable, not with PHP's output buffering. I don'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's possible for example to<bail out with an exception without worring about the output buffer</li>
<li>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.</li>
<li>My favorite eZC Template feature: Every variable needs to be declared at the top of the template! I wish PHP would be that strict.</li>
<li>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.</li>
</ul><br />
<br />
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! 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/132-Timeline-of-PHP-quality-assurance-tools.html" rel="alternate" title="Timeline of PHP quality assurance tools" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-09-26T14:58:46Z</published>
        <updated>2009-10-01T12:26:26Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=132</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=132</wfw:commentRss>
    
            <category scheme="http://koch.ro/blog/index.php?/categories/16-eZ-Publish" label="eZ Publish" term="eZ Publish" />
            <category scheme="http://koch.ro/blog/index.php?/categories/7-PHP" label="PHP" term="PHP" />
            <category scheme="http://koch.ro/blog/index.php?/categories/12-PHPUnit" label="PHPUnit" term="PHPUnit" />
    
        <id>http://koch.ro/blog/index.php?/archives/132-guid.html</id>
        <title type="html">Timeline of PHP quality assurance tools</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I'll be giving a talk on PHP quality assurance tools next week at the <a href="http://gearconf.com/">gearconf</a> in Düsseldorf. The event is focused on team collaboration and most of the audience will come from other languages then PHP. Since I'm not a contributor to any QA tool I'll center around the user perspective and the process of establishing these tools in a small to middle web company like <a href="http://www.ymc.ch">YMC</a>.<br />
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: <img width="80%" height="80%" style="border: 0px; padding-left: 5px; padding-right: 5px;" src="http://koch.ro/blog/uploads/free_software/phpqa_timeline.png" alt="" /><br />
The dates as text:<ul>
  <li>~1997 JUnit</li>
  <li>6.4.2002 PHPUnit 0.1</li>
  <li>28.8.2003 PHPUnit 1.0.0-alpha1 Release</li>
  <li>13.7.2004 PHP5.0.0</li>
  <li>14.7.2004 release PHPUnit2</li>
  <li>30.1.2006 eZ Components 1.0</li>
  <li>~sept 2006 ZF uses PHPUnit (issue #374)</li>
  <li>4.10.2006 first integration of Selenium in PHPUnit</li>
  <li>1.7.2007 Zend Framework 1.0</li>
  <li>18.11.2007 first release of PHPUnderControl</li>
  <li>19.11.2007 Project Mess Detection in PHPUnit</li>
  <li>6.2.2008 first release PHP_Depend</li>
  <li>march 2009 qualityassuranceinphpprojects.com, thePHP.cc</li>
</ul>main sources:<br />
<ul>
  <li><a href="http://www.slideshare.net/sebastian_bergmann/von-entwurfsmustern-und-unit-tests">Von Entwurfsmustern und Unit Tests</a></li>
  <li><a href="http://sebastian-bergmann.de/">Blog of Sebastian Bergmann</a></li>
  <li><a href="http://manuel-pichler.de/">Blog of Manuel Pichler</a></li>
</ul><br />
Did I get all this right? Are there things I should have added? 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/131-Ein-Themen-Partei.-Na-und.html" rel="alternate" title="Ein-Themen-Partei. Na und?" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-09-07T19:55:58Z</published>
        <updated>2009-09-13T07:23:02Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=131</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=131</wfw:commentRss>
    
    
        <id>http://koch.ro/blog/index.php?/archives/131-guid.html</id>
        <title type="html">Ein-Themen-Partei. Na und?</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Tobias Schlitt hat über die <a href="http://schlitt.info/private/blog/0713_die_ein_themen_partei.html">Positionen der Piratenpartei</a> jenseits der Kernthemen gebloggt. Bei manchen Aussagen habe ich geschluckt und eine Sekunde lang bereut, die Piraten bereits per Briefwahl gewählt zu haben. (Pro Tempolimit! Oder seid ihr schon vor die Wand gefahren?) <strong>aber:</strong> Die Anforderung, dass die Piratenpartei alle Themen abdecken solle, ist doch ein Anspruch von vorgestern (That's so 1990...)<br />
 <h4>1. Keiner deckt alles ab</h4>Alle Fraktionen im Bundestag haben Spezialisten für bestimmte Bereiche. Kein Bundestagsabgeordneter befasst sich mit allen Themen von Gesundheit über Arbeit zu Ausland, Jugendschutz, Integration, Umwelt, Bildung, ...<br />
<br />
Stattdessen verlassen sich die Abgeordneten darauf, dass der Kollege für den Bereich Finanzen eine ordentliche Position ausarbeitet und dann stimmt man so ab wie er.<br />
<br />
Wenn es jetzt die Piratenpartei hoffentlich schafft, einen Abgeordneten in den Bundestag zu schicken, dann kann man doch nicht erwarten, dass dieser eine Abgeordnete alle Politikfelder besetzt? Vielmehr wird dieser Abgeordnete dann wahrscheinlich der erste seiner Art sein, der weiss, was ein Browser ist. Das ist mein Ziel, wenn ich die Piraten wähle: Wenigstens einer von den ~600 Parlamentarien soll sich mit dem Internet auskennen!<br />
<h4>2. Volksparteien sind vorbei</h4>Früher, da gab es mal Volksparteien. Diese Volksparteien hatten eine Ideologie oder Grundsätze bzw. Grundauffassungen. Diese Grundideen waren das verbindende Element zu Mitgliedern und Wählern. Aus diesen Grundideen leiteten sich dann die Antworten zu allen Fragen <a href="http://de.wikipedia.org/wiki/42_(Antwort)">nach dem Leben, dem Universum und allem</a> ab. Die einen hatten als Grundlage eher die Bibel, die anderen das Kapital.<br />
<br />
Heute gibt es solche verbindenden Philosophien nicht mehr - Thema für sich. Deswegen sterben auch die Volksparteien aus und Menschen engagieren sich konkret für eine akute Frage. Die konsequente Fortsetzung dieses Gedankens ist, dass Parteien ganz abgeschafft werden können und stattdessen die direkte Demokratie tritt. Die Piratenpartei könnte sich jetzt schon überlegen, dass sie sich nach vollbrachter Mission wieder auflösen kann.<br />
<h4>3. Ein Geisterfahrer? Tausende!</h4>Herr Westerwelle, was sagen sie zur Arbeitslosigkeit? Steuern senken! Zum Umweltschutz? Steuern senken! Zu Afghanistan? Steuern senken!<br />
<br />
Hallo CDU. Was ist Dein Programm? Merkel. Ach so. Konkreter? Angela Merkel!<br />
<br />
Hallo Herr Steinmeier, für oder gegen HartzIV? .....<br />
<br />
Hallo Frau Roth, haben Sie Grundsätze? Regieren! Koste es, was es wolle.<br />
<br />
Bei den Linken weiss ich nicht, wo ich dran bin. Die Vertreter der Linken, die ich auf lokaler Ebene waren bisher immer hervorragend informiert, haben schlüssig informiert und nicht gelogen.<br />
<br />
Aber es soll doch keiner der Piratenpartei vorwerfen, sie würde nur ein Themengebiet abdecken ohne sich gleichzeitig mindestens CDU, FDP und SPD zur Brust zu nehmen. 
            </div>
        </content>
        
    </entry>
    <entry>
        <link href="http://koch.ro/blog/index.php?/archives/130-Grundeinkommen,-Mehrwertsteuer-und-die-reale-Ungerechtigkeit.html" rel="alternate" title="Grundeinkommen, Mehrwertsteuer und die reale Ungerechtigkeit" />
        <author>
            <name>Thomas Koch</name>
                    </author>
    
        <published>2009-09-07T18:20:46Z</published>
        <updated>1970-01-01T00:00:00Z</updated>
        <wfw:comment>http://koch.ro/blog/wfwcomment.php?cid=130</wfw:comment>
    
        <wfw:commentRss>http://koch.ro/blog/rss.php?version=atom1.0&amp;type=comments&amp;cid=130</wfw:commentRss>
    
    
        <id>http://koch.ro/blog/index.php?/archives/130-guid.html</id>
        <title type="html">Grundeinkommen, Mehrwertsteuer und die reale Ungerechtigkeit</title>
        <content type="xhtml" xml:base="http://koch.ro/blog/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Gerade sendete der Deutschlandfunk (<a href="http://ondemand-mp3.dradio.de/file/dradio/2009/09/07/dlf_20090907_1915_7d1f1147.mp3">mp3</a>) eine Rezension des Buches "Schön reich - Steuern zahlen die anderen" von Sascha Adamek und Kim Otto. Untertitel: "Wie eine ungerechte Politik den Vermögenden das Leben versüßt". Ein paar Aussagen aus dem Buch lauten:<br />
<ul>
  <li>Der größte Teil des Steueraufkommens wird von Arbeitnehmern getragen.</li>
  <li>Auf 72 Milliarden Euro schätzen sie die jährlichen Steuerausfälle durch Mängel in der Finanzverwaltung.</li>
  <li>Die Bundesländer unterbieten sich darin, Unternehmen möglichst wenig zu kontrollieren um so Standortvorteile zu erlangen.</li>
</ul> Jetzt nehme man zu diesen Erkenntnissen noch hinzu, dass die Reichen in<br />
Deutschland sich nicht oder nur zum Teil an der gesetzlichen Kranken- und<br />
Rentenversicherung beteiligen müssen.<br />
<br />
Dann frage ich mich, warum regen sich die Linken eigentlich darüber auf, wenn<br />
Götz Werner für die Finanzierung des Bedingungslosen Grundeinkommens eine<br />
Erhöhung der Mehrwertsteuer (bei gleichzeitiger Senkung der Lohnsteuer)<br />
vorschlägt?<br />
<br />
Die Mehrwertsteuer ist die sinnvollste Steuer von allen, weil sie genau das<br />
besteuert, was unsere Umwelt zerstört: Den Konsum. Und es ist eben nicht so,<br />
dass das die Ärmsten am härtesten treffen würde. Egal wie reich ich bin, das<br />
Geld wird doch erst dann sinnvoll für mich, wenn ich mir davon etwas kaufe. Und<br />
in dem Moment muss die Mehrwertsteuer bezahlt werden.<br />
Die Lohnsteuer dagegen bestraft mich dafür, dass ich arbeite, indem ich von<br />
meiner Arbeitsleistung abführen muss. Wenn mein Betrieb aber innovativ ist und<br />
meine Arbeitsleistung von Maschinen erledigen lässt, so muss er für die<br />
Maschinenarbeit keine Lohnsteuer abführen von Maschinen erledigen lässt, so<br />
muss er für die Maschinenarbeit keine Lohnsteuer abführen. Der Betrieb wird<br />
steuerlich belohnt dafür, dass er mich wegrationalisiert!<br />
<br />
Voraussetzung für eine gerechte Mehrwertsteuererhöhung ist natürlich, dass das<br />
Bedingungslose Grundeinkommen auch bei erhöhter Mehrwertsteuer noch<br />
existenzsichernd und teilnahme ermöglichend ist.<br />
<br />
Liebe Linke: Die Mehrwertsteuer ist nicht böse! 
            </div>
        </content>
        
    </entry>

</feed>