Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an [redaktion@linux-magazin.de]. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht .
Lisp statt Perl
12/07, S. 113: Ich mag Programmierwettbewerbe, aber in diesem Fall haben mich weder die Aufgabe noch die Preise gereizt. Aber es kann ja nicht sein, dass Ihr keine Lisp-Lösung bekommt! Nachher heißt es, es wäre eine schwierige Sprache. Die langweilige Variante ist natürlich in jeder Sprache ähnlich einfach und kommt zusammen mit dem umstrittenen »loop«-Makro recht elegant daher:
#! /usr/bin/clisp
(loop repeat 1000
for r = (random 6)
count (< r 3) into a
count (< r 2) into b
finally (format t "~,2,2f %" (/ b a)) )
Die Lösungen gefallen mir aber alle nicht, man erkennt das Problem kaum wieder. Ich habe noch eine lispigere Variante mit einer genaueren Simulation des Problems: [ftp://ftp.linux-magazin.de/pub/magazin/2008/01/Leserbriefe]. Macht unbedingt mehr Programmierwettbewerbe, mit interessanteren Aufgaben und weniger Spracheinschränkungen!
Christian Sievers, per E-Mail
Alles an Bord
11/07, S. 124: mit Interesse habe ich Michael Schillis Beitrag im Linux-Magazin 11/07 gelesen. Hierzu eine kleine Anmerkung: Ich vermute, dass mancher Vi-Nutzer sich einfach mit »:%!nl -ba -nrz -w2« beholfen hätte, nachdem er zum Beispiel mit einem Sprung ans Dateiende die Ausgabebreite 2 ermittelt hat.
Wenn es automatisch gehen soll, dann reichen die Bordmittel bereits aus, etwa folgendermaßen:
map <F12> <Esc>:exe ':%!nl -ba -nrz -w'.strlen(line("$"))<CR>
vmap <F12> <Esc>:exe ":'<,'>!nl -ba -nrz -w".strlen(line("'>")-line("'<")+1)<CR>
Happy Vimming!
Fritz Mehner, per E-Mail
Bash kann mehr
11/07, S. 53: Das Thema GUI versus Konsole fand ich in Peter Kreussels Rubrik-Einführung sehr gut behandelt, besonders die Aspekte bei der Serienbrieferstellung. Das als Screenshot abgedruckte Shellskript (Abbildung 1) ist aber kein gutes Beispiel, da stellen sich mir gleich alle Haare auf: »`ls */*.EPS`« ist im günstigsten Fall ein weißer Schimmel, im ungünstigen Fall (Leerzeichen im Dateinamen) führt es sogar zu Fehlern. Ein einfaches »for i in */*.EPS; …« wäre besser.

Abbildung 1: Dieser Screenshot sollte die Fähigkeiten der Bash symbolisieren – aufmerksame Linuxer fanden ihn haarsträubend.
Ebenso gehört »$i« in Anführungszeichen – wegen möglicher Leerzeichen im Dateinamen. Zudem: »`basename $i`« forkt pro Schleifendurchgang und ruft ein externes Programm auf. Besser, weil Bash-intern, ist »”${i##*/}”« (entfernt von »$i« alles bis zum letzten »/«).
Fazit: Mit diesen Änderungen läuft das Skript völlig innerhalb der Bash, die Bildunterschrift “Die Bash übertrifft den Funktionsumfang jedes grafischen Dateimanagers” ist dann noch richtiger!
Für künftige Artikel(-Serien) wünsche ich mir, dass die Aspekte “Wie mache ich das mit einer schönen grafischen Oberfläche?” und “Wie automatisiere ich das per Skript?” so gut berücksichtigt werden wie in der letzten Ausgabe.
Bernhard Bablok, per Mail
|
Korrektur zum |
|---|
|
12/07, S. 118: Das Linux-Magazin 10/07 rief auf Seite 101 zum Perl-Wettbewerb auf. Aus der Masse an Einsendungen wählte die Jury in drei Kategorien insgesamt zehn Gewinner und das Linux-Magazin veröffentlichte sie in Ausgabe 12. Etliche Zuschriften führten zu regem E-Mail-Verkehr innerhalb der Jury, in dessen Verlauf leider ein Nachtrag unterging. Uwe Kerstan lieferte noch vor Ende des Einsendeschlusses ein Golf-Skript, das es locker auf Platz 2 geschafft hätte (siehe Listing 1, Zeile 1). Uwe legte nach Erscheinen des Hefts sogar noch nach und schrieb ein Skript, das die Ideen aus dem Siegerskript mit seinem eigenen Ansatz kombiniert und damit auf rekordverdächtige 53 Golf-Punkte kommt (Listing 1, Zeile 2). Mit dem etwas schmutzigen Trick, »die« statt »print« zu verwenden, wären sogar 51 Zeichen möglich. Wir gratulieren Uwe zum zweiten Platz und senden ihm ebenfalls ein Perl-Buch. Die Zahl der Preisträger erhöht sich damit auf elf. |
|
Listing 1: Golf-Platz |
|---|
01 for(0..999){$c=rand 6;$a++if$c<3;$b++if$c<2}die $b/$a*100," %"
02 for(0..999){$t+=($r=rand 6)<3;$b+=$r<2}print$b/$t*100
|





