Open Source im professionellen Einsatz

Software entwickeln unter Linux

Schwer ist leicht was

Auch redaktionsintern schlug der vom Linux-Magazin ausgeschriebene Programmierwettbewerb Wellen. Eine Lösung in der Template-Sprache des Contentmanagement-Systems Ezpublish schießt den Vogel ab.

Inhalt

114 | Perl-Snapshot

Mike Schilli verrät die besten Datumstricks mit Perl.

118 | Perl-Wettbewerb

Die besten Einsendungen des Programmierwettbewerbs aus
Linux-Magazin 10/2007.

Als das Linux-Magazin die Leser zu einem Perl-Programmierwettbewerb aufrief [1], ging es schon nach kurzer Zeit in den Mailboxen der Redakteure rund - die ersten Einsendungen trudelten ein. Auch des Programmierens mächtige Kollegen fühlten sich herausgefordert und erstellten in ihren Lieblingssprachen alternative Lösungen, natürlich außer Konkurrenz.

Während ein sportlich geführter Kleinkrieg zwischen Perl und Python tobte, kündigte ein Kollege seine Lisp-Variante an, die allerdings bis heute auf sich warten lässt. Der Autor dieses Artikels versuchte dagegen, die Simulation in der Template-Sprache des Contentmanagement-Systems Ezpublish [2] zu implementieren, auf dem der Online-Auftritt des Linux-Magazins basiert [3].

Im Wesentlichen übernimmt Ezpublish das Mapping eigener Objekttypen auf Tabellen einer relationalen Datenbank. Hinzu kommen weitere Funktionen wie Zugriffskontrolle über Benutzer und Rollen, Workflows und so weiter.

Templates in Ezpublish implementieren oft auch eine beachtliche Menge Logik. Ein typisches Template holt mit der Fetch-Funktion nach bestimmten Kriterien eine ganze Reihe von Content-Objekten aus der Datenbank, beispielsweise so:

def $node = fetch('content', 'node', hash('node_id', $node_id))

In diesem Beispiel enthält die Variable »$node« nach dem »fetch()« nur ein einziges Objekt. Meistens ist das Resultat aber ein ganzes Array, über das das Template iteriert und die Daten in HTML aufbereitet.

Funktionen und Operatoren

Template-Code steht bei Ezpublish zwischen geschweiften Klammern. Es gibt grundsätzlich zwei Typen von Anweisungen: gewohnte Funktionen, deren Argumente in Klammern stehen, und so genannte Template-Operatoren, die sich ähnlich verhalten wie Unix-Kommandos. Zum Beispiel lassen sie sich auch über das Pipe-Symbol verketten. Ungewöhnlich ist die Präfix-Schreibweise eines Vergleichs als »eq(Arg1, Arg2)«.

Die Lösung des Programmierwettbewerbs erschöpft sich somit in der Umsetzung des einfachsten Algorithmus in Ezpublish-spezifische Syntax (siehe Listing 1). Zum Beispiel arbeitet der Inkrement-Operator »inc« rein funktional, sein Ergebnis muss also noch der inkrementierten Variablen zugewiesen werden (Zeile 11). Die Blöcke sind durch das entsprechende Schlüsselwort geschlossen, wie beim If-Block zwischen den Zeilen 10 und 12.

Listing 1:
Template-Code

01 {def $a = 0
02      $b = 0
03      $c = 0
04      $i = 0
05 }
06 
07 {while lt($i, 999)}
08 {set $c = rand(0, 5)}
09 
10 {if lt($c, 3)}
11 {set $a = inc($a)}
12 {/if}
13 
14 {if lt($c, 2) }
15 {set $b = inc($b)}
16 {set $i = inc($i)}
17 {/if}
18 {/while}
19 
20 {$b|div($a)|mul(100)} %

Die letzte Zeile kombiniert die Operatoren- und Funktionsschreibweise: "a geteilt durch b" sieht in Ezpublish-Templates so aus: »$b|div($a)«. Auffallend ist, dass eine Anweisung zur Ausgabe fehlt. Andererseits ist aller Code speziell ausgezeichnet. Man könnte sagen, dass in dieser Umkehrung der Logik das Wesen der Template-Sprache liegt.

Um es zum Laufen zu bringen, ist das Template in das Contentmanagement-System einzubinden. Außerdem muss man die »max_execution_time« in der »php.ini« auf zum Beispiel 120 Sekunden erhöhen, weil es sonst zu einem Timeout kommt.

Abbildung 1: Die Linux-Magazin-Website simuliert das Problem des Programmierwettbewerbs.

Abbildung 1: Die Linux-Magazin-Website simuliert das Problem des Programmierwettbewerbs.

Infos

[1] Perl-Wettbewerb: Linux-Magazin 10/07, S. 100

[2] Ezpublish: [http://ez.no]

[3] Linux-Magazin online: [http://www.linux-magazin.de]

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook