Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2008  »  12  »  Vom Thron gestürzt  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Elegant: Vincent, Bernhard, Rörd-2

Diesmal konnte sich auch Ruby beweisen - für diese Sprache fand sich im ersten Artikel kein Experte. Die zwei Einsendungen "Vincent" (Nr. 24) und "Bernhard" (Nr. 9) gleichen sich in Codelänge und Laufzeit. Beide errangen zwar keine Spitzenplätze, hielten aber gut mit. Insofern bestätigte Ruby seinen Ruf als hoffnungsvoller Newcomer, der sich noch nicht eindeutig gegen die etablierten Platzhirsche durchsetzt. Besonders eindrucksvoll ist die Kompaktheit des Codes, ohne in kryptische Abkürzungen à la Perl abzugleiten. Von allen Kommentaren befreit, wäre "Vincent" gar nur 14 Zeilen lang (siehe Listing 6).

Vom Autor des schnellsten Programms stammt auch die funktionale Einsendung "Rörd-2". Sie ist in Haskell verfasst. Der Code zeigt, dass sich fast alle Probleme in jeder Sprache lösen lassen, aber dass das nicht immer die allerbeste Wahl sein muss. Das Lambda-Kalkül ist für die vorgegebene Sysadmin-Aufgabe wohl unnötig und die 128 Zeilen Code lassen den Code-Reviewer erst einmal suchen. Der kompilierte Code läuft zwar schnell, erreicht aber nicht die Spitzengruppe.

Listing 6: Ruby: Vincent (Nr.
24)

01 #!/usr/bin/ruby -W0
02 # Autor: Vincent Landgraf
03 index, footnodes = {}, {}
04 body, trailer = open(ARGV[0], 'r')    { |f| f.read }.split('@footnote:')
05 body.scan(/[d+]/).uniq.each    { |r| index[r] = index.size + 1 }
06 trailer.scan(/^([d+])s+(.*)$/) do
07   raise "Error: Node #{$1} not defined"     if index[$1].nil?
08   footnodes[index[$1]] = $2
09 end
10 puts body.gsub!(/([d+])/)  { '[' + index[$1].to_s + ']' }
11 puts '@footnote:'
12 footnodes.keys.sort.each  { |k| puts '[' + k.to_s + '] ' 
      + footnodes[k] }

Skriptsprachen: Mike, Julian, Heiner, Daniel

Etliche Leser trieb es um, dass Python in den Prominenten-Lösungen scheiterte. So auch Einsender "Julian" (Nr. 1), dessen Lösung Python bei der Laufzeit zu einem Platz in der ersten Hälfte des Testfelds verhilft. Die Einsendung von "Mike" (Nr. 46, Listing 7) läuft nur zehn Prozent länger, schafft das aber mit weniger als der Hälfte der Codezeilen. Beide Lösungen beweisen, dass die Sprache Python mit der 55 MByte langen Testdatei gut zurechtkommt.

Listing 7: Python: Mike (Nr.
46)

01 #! /usr/bin/env python
02 # Autor: Mike Mueller
03 
04 import re
05 import sys
06 
07 RE_NUMBER = re.compile(r"[(d+)]")
08 
09 def process(file_name):
10     "Process all data."
11     data = open(file_name).read()
12     split_text = data.split("@footnote:")
13     footnote_numbers = RE_NUMBER  findall(split_text[1])
14     pairs = zip(footnote_numbers,         range(1, len(footnote_numbers) + 1))
15     number_dict = dict((number, counter)                for number, counter in pairs)
16     def callback(match):
17         "Replace all old with new numbers."
18         return '[%s]' % number_dict.get(match.group(1), 'Footnote %s           not found' % match.group(1))
19     print RE_NUMBER.sub(callback, data),
20 
21 if __name__ == '__main__':
22     process(sys.argv[1])

Die Aufgabe der Fußnotensortierung war eigentlich dem Unix-Urgestein Awk wie auf den Leib geschrieben. Einige Leser, darunter "Heiner" (Nr. 28), haben sie dann auch mit diesem klassischen Allzwecktool gelöst. Listing 8 zeigt den Awk-Aufruf, den Heiner im Original in ein kurzes Shellskript eingebettet hat. Bei der Performance kann die Lösung allerdings nicht mit den modernen Skriptsprachen mithalten und landet abgeschlagen auf dem letzten Platz. Die Awk-Lösung gleicht dies auch nicht durch besonders kurzen Code aus.

Listing 8: Awk: Heiner (Nr.
28)

01 awk '
02  function renumrefs(line, createmap, result) {
03         result = ""
04         while (match(line, /[[0-9][0-9]*]/) > 0) {
05          oldnum = substr(line, RSTART+1, RLENGTH-2) + 0
06          if (!(oldnum in map) && createmap) {
07                 map[oldnum + 0] = ++lastnum
08          }
09          newnum = map[oldnum]
10 
11          result = result substr(line, 1, RSTART) newnum "]"
12          line = substr(line, RSTART + RLENGTH)
13         }
14         result = result line
15         return result
16  }
17  $0 == "@footnote:" { mode = "list"; next }
18  $0 !~ /[[0-9][0-9]*]/ { print; next }
19  {
20         if (mode != "list") {
21          print renumrefs($0, 1)
22         } else {
23          notetext[newnum + 0] = renumrefs($0, 0)
24         }
25  }
26  END {
27         for (i = 1; i <= lastnum; i++) { print notetext[i] }
28  }
29 ' "$@"

Perl, in mancher Hinsicht Erbe von Awk, wirkt im Vergleich wesentlich frischer: Die Einsendung von "Daniel" (Nr. 61) verpasste mit dem vierten Platz bei der Laufzeit nur knapp das Siegertreppchen und ist in der Kategorie Skriptsprachen sogar ungeschlagen. Mit 30 Zeilen ist der Code allerdings fast doppelt so lang wie die kürzesten Perl-Lösungen.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Ready, Set, Go! Google erfindet neue Programmiersprache
Wissenstransfer Aussichtsreiche Würfelkandidaten unter der Lupe
Eurovision Bot Contest Über 120 Teilnehmer stürmen beim Programmierwettbewerb die Würfelbecher
Babylon zu fünft Populäre Programmiersprachen treten gegeneinander an
Babylon zu fünft Populäre Programmiersprachen treten gegeneinander an
Parallelarbeit Bash-Skripte, die Multicore-Prozessoren auslasten
Whitepaper
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Kommentare (2)
von
hypnos,
20.11.2008 18:32
bild link
der bild link geht nicht wenn scripts verboten sind (noscript)
von
hypnos,
20.11.2008 18:31
bild link futsch
siehe titel