26.02.2014 Aufrufe

LinuxUser Programmieren (Vorschau)

Verwandeln Sie Ihre PDFs in ePaper und steigern Sie Ihre Umsätze!

Nutzen Sie SEO-optimierte ePaper, starke Backlinks und multimediale Inhalte, um Ihre Produkte professionell zu präsentieren und Ihre Reichweite signifikant zu maximieren.

SOFTWARE<br />

ENTWICKELN<br />

Rpmorphan: Hausputz für RPM-Distributionen S. 64<br />

Know-how: Übergroße Dateien transportieren S. 78<br />

Unknown Horizons: Siedeln, bauen und handeln S. 59<br />

EUR 5,50<br />

Deutschland<br />

Österreich EUR 6,30<br />

Schweiz sfr 11,00<br />

Benelux EUR 6,50<br />

Spanien EUR 7,45<br />

Italien EUR 7,45<br />

11.2012<br />

11.2012<br />

GBRAINY • GEACMED • Conky • SYSRQ • POTLATCH2 • PROGRAMMIEREN<br />

Das Magazin für die Praxis<br />

SOFTWARE SELBST ENTWERFEN, ENTWICKELN UND ENTWANZEN<br />

PROGRAMMIEREN<br />

Code komfortabler schreiben S. 14, 20<br />

Drei Basic-Entwicklungsumgebungen im Vergleich,<br />

Delphi-kompatible Free-Pascal-IDE Lazarus<br />

Mehr Dynamik für Webseiten S. 25<br />

So bringen Sie mit Javascript und der<br />

Bibliothek JQuery Bewegung in starre Sites<br />

Optimale Werkzeuge für Entwickler S. 32, 38, 42<br />

Professionelle Versionsverwaltung Git, mit Quellcode-Analyzern<br />

versteckte Fehler aufspüren, pfiffiger Editor-Newcomer Enki<br />

Basteln mit dem Raspberry Pi S. 72<br />

Drei Einsatzszenarien für das SoC – vom simplen<br />

Temperatursensor bis zur vollwertigen WLAN-Bridge<br />

Gecamed S. 54<br />

Freie Software<br />

für Privatpraxen<br />

Gbrainy S. 48<br />

Training für die<br />

grauen Zellen<br />

4 195111 005504 11<br />

Systemdaten<br />

im Überblick S. 50<br />

Mehr Funktionen und<br />

schicke Optik für Conky<br />

OpenStreetMaps<br />

selbst ergänzen S. 81<br />

Mit Potlatch2 Karten bequem<br />

überarbeiten und auffrischen<br />

Magic System Request statt Reset<br />

So reanimieren Sie mit den SysRq-Tastenkombinationen<br />

abgestürzte Linux-Rechner und retten wichtige Daten S. 68<br />

www.linux-user.de


PreisRAMbazamba<br />

128 GB SSD<br />

2 x 1 TB SAS<br />

32 GB RAM<br />

Hexa Core CPU<br />

keine Mindestvertragslaufzeit<br />

keine Einrichtungsgebühr<br />

Root ot Server r Linux Level el<br />

6<br />

HÖCHSTLEISTUNG ZUM KLEINEN PREIS<br />

CPU<br />

Leistung<br />

RAM<br />

HDD<br />

Traffic<br />

,00<br />

€/Mon.*<br />

Intel Xeon E5-1650 (Hexa Core)<br />

6 x 3,2 GHz<br />

32 GB<br />

1 x 128 GB SSD und 2 x 1 TB SAS<br />

Unlimited<br />

Der neue<br />

e Root ot Server e Level 6<br />

punktet mit einem<br />

perfekten ek<br />

en<br />

Zusammenspiel me<br />

s<br />

eld<br />

der Hardware. r In jeder<br />

er<br />

Situation tio<br />

steht Höchstleistung tun zur Verfügung.<br />

Dank<br />

SSD-Drive SD-D<br />

Dr<br />

starten Anwendungen nd ng<br />

n und<br />

Prozesse blitzschnell.<br />

ll.<br />

Ladezeiten eit<br />

waren gestern! Große Datenmengen finden auf den<br />

SAS-Festplatten S-Fes<br />

en (RAID 1) Platz. Für satte Beschleunigung eunigung<br />

sorgt<br />

der Intel Hexa-Core-Prozessor, e-P<br />

ozesso or, dem ein großes und schnelles s RAM<br />

zur Seite e steht. Minimal ist hier nur eines –<br />

der kleine Preis!<br />

* Aktion bis 31.10.2012. Traffic-Unlimited: Keine zusätzlichen Kosten durch Traffic (bei Traffic-Verbrauch über<br />

1.000 GB/ Monat und danach je weitere 300 GB erfolgt eine Umstellung der Anbindung auf max. 10 MBit/s.<br />

Erneute Freischaltung der vollen Bandbreit jeweils kostenlos über den Kundenservicebereich). Preis inkl. MwSt.<br />

Info: 030 – 300 146 111 | strato-pro.de


EDITORIAL<br />

We have root<br />

Sehr geehrte Leserinnen und Leser,<br />

in der zweiten Beta 2 von Ubuntu<br />

12.10 tauchte im September ein<br />

neues Feature auf: Jede Suche in<br />

der sogenannten Home-Lens des<br />

Unity-Desktops – sie diente bisher<br />

ausschließlich zur lokalen Suche<br />

– blendet jetzt auch zur Anfrage<br />

passende Shop-Ergebnisse<br />

von Amazon.com ein [1]. Der<br />

Zweck ist klar: Die Funktion soll<br />

Canonical über Affiliate-Einnahmen<br />

Geld in die Kassen spülen.<br />

Dass man bei der Suche auf dem<br />

lokalen Desktop plötzlich ungefragt<br />

Werbung von Online-Anbietern<br />

erhielt, das Übermitteln der<br />

Anfragen obendrein unverschlüsselt<br />

erfolgte und Canonical kein<br />

Wort dazu verlor, welche Daten<br />

dabei wohin wandern, das trieb<br />

vielen Anwendern Sorgenfalten<br />

auf die Stirn. Dies schlug sich<br />

nicht nur in zahlreichen Bugreports<br />

nieder, sondern auch in einer<br />

erbitterten Diskussion.<br />

Schnell versprach Canonical, zumindest<br />

den sicherheitstechnischen<br />

Schnitzer auszuräumen<br />

und die Suchanfragen künftig via<br />

HTTPS zu versenden. Im Release<br />

soll sich die Amazon-Funktion<br />

dann ganz deaktivieren lassen. So<br />

weit, so gut: Dass ein Distributor<br />

über Werbung Geld verdienen<br />

möchte, muss einen nicht freuen,<br />

ist aber zweifellos völlig legitim.<br />

Damit hätte die Sache erledigt<br />

sein können.<br />

Die Art allerdings, mit der Mark<br />

Shuttleworth anschließend in seinem<br />

Blog mit dem Thema umging<br />

[2], lässt sich nur mit dem<br />

Wort „haarsträubend“ bezeichnen.<br />

Schon in der Einleitung qualifiziert<br />

er die Sorgen der Anwender<br />

als „FUD“ ab, als Panikmache und<br />

Fehlinformation also – und dann<br />

folgt eine Serie von Halbwahrheiten<br />

und Falschinformationen<br />

durch Shuttleworth selbst.<br />

„Wir zeigen keine Werbeanzeigen<br />

in Ubuntu“, heißt es da weiter.<br />

Wie soll man es dann wohl bezeichnen,<br />

wenn Produkte aus dem<br />

Shop genau eines Anbieters samt<br />

Preisangaben bei einer Desktopsuche<br />

unverlangt auftauchen?<br />

Überhaupt verbessere das Feature<br />

nur den Nutzen der Suchfunktion,<br />

behauptet Shuttleworth.<br />

Dem widersprechen viele Anwender<br />

vehement: Ihnen nützt die<br />

Amazon-Werbung gar nichts, weil<br />

es die feilgebotenen Produkte in<br />

ihren Ländern schlicht nicht gibt.<br />

Zudem schlägt die Suche beispielsweise<br />

kommerzielle Windows-Software<br />

vor – selbst, wenn<br />

es das fragliche Produkt auch für<br />

Linux gäbe [3].<br />

„Wir teilen Amazon nicht mit,<br />

wonach du suchst“, wiegelt<br />

Shuttle worth hinsichtlich der Privacy<br />

ab – doch das ist nur die<br />

halbe Wahrheit: Wie man inzwischen<br />

weiß, wandern sehr wohl<br />

Daten an Amazon [4]. Dazu<br />

schreibt der bekannte Entwickler<br />

Etienne Perot: „Amazon [erhält]<br />

die IP des Anwenders sowie das<br />

Datum und die Zeit der Anfrage<br />

und kann durch Abgleich mit<br />

kürzlichen Suchen oder das Nachschlagen<br />

der gefundenen Produkte<br />

die gesuchten Begriffe ableiten.“<br />

[5]<br />

Dem Fass den Boden aus schlagen<br />

aber einige Anmerkungen<br />

Shuttleworths, die unverblümt<br />

enthüllen, was er wirklich von<br />

Ubuntu-Anwendern hält. „Du<br />

traust uns nicht? Hm, wir sind<br />

[auf deinem Rechner ohnehin]<br />

Root“, heißt es da barsch. Wem<br />

das neue Feature nicht gefalle,<br />

der könne ja auf die nächste LTS-<br />

Version Ubuntu 14.04 warten, da<br />

wäre das dann schon repariert,<br />

„rät“ Shuttleworth. Und im Übrigen<br />

solle man doch da nicht groß<br />

herumdiskutieren, „don’t feed the<br />

trolls“.<br />

Anwender, die sich ob eines<br />

überflüssigen und obendrein<br />

stümperhaft implementierten<br />

Werbefeatures berechtigt um den<br />

Schutz ihrer Privatsphäre sorgen,<br />

mit irreführenden Behauptungen<br />

abzuspeisen, das ist schon dreist.<br />

Sie obendrein auch noch als<br />

dümmliche Quengler hinzustellen<br />

und ihnen den Mund verbieten zu<br />

wollen, ist eine bodenlose Frechheit.<br />

Welche Konsequenz Sie daraus<br />

ziehen, überlasse ich Ihrem<br />

Urteil. Auf meinen Rechnern jedenfalls<br />

entziehe ich Canonical<br />

das Root-Recht, ein für allemal.<br />

Herzliche Grüße,<br />

Jörg Luther<br />

Chefredakteur<br />

INFO<br />

[1] „Online Shopping Feature in Ubuntu 12.10“: http:// www. omgubuntu. co. uk/<br />

2012/ 09/ online-shopping-features-arrive-in-ubuntu-12-10<br />

[2] „We have root“: http:// www. markshuttleworth. com/ archives/ 1182<br />

[3] „Searching suggests software that can not be used“: https:// bugs. launchpad.<br />

net/ ubuntu/ +source/ unity-lens-shopping/ +bug/ 1053678<br />

[4] Datenübergabe an Amazon: http:// benjaminkerensa. com/ 2012/ 09/ 25/ techni<br />

cal-diagram-of-how-unity-shopping-lens-likely-works und https:// perot. me/ ubuntu<br />

-privacy-blunder-over-amazon-ads-continues<br />

[5] „Direct data leaking to Amazon“: https:// bugs. launchpad. net/ ubuntu/ +source/<br />

unity-lens-shopping/ +bug/ 1055952<br />

www.linux-user.de 11 | 12<br />

3


11 | 12<br />

78<br />

Ab einer Größe von vier<br />

GByte geraten manche<br />

Speicher an die Grenze.<br />

Wir zeigen, wie der Datei transfer der<br />

großen Brocken trotzdem gelingt.<br />

68<br />

Die CPU läuft am Anschlag, die<br />

Bytes tröpfeln ins Terminal, wenn<br />

überhaupt – aber die wichtigen Ergebnisse<br />

liegen noch im Arbeitsspeicher. Wer<br />

jetzt den Stecker zieht, verliert alles. Mit dem<br />

Magic System Request haben Sie die Möglichkeit,<br />

zu retten, was noch zu retten ist.<br />

54<br />

Software für Arztpraxen ist ein<br />

heiß umkämpfter Markt. Mit<br />

dem freien Programm Gecamed<br />

weht zumindest in Privatpraxen den etablierten<br />

Herstellern frischer Wind um die Nase –<br />

und die Software hat eine Menge Potenzial.<br />

HEFT-DVD<br />

SCHWERPUNKT<br />

PRAXIS<br />

OpenSuse 12.2 ........... 6<br />

Mit OpenSuse 12.2 schließt die<br />

Nürnberger Distribution wieder<br />

ein gutes Stück zur Konkurrenz<br />

auf. Zwar bietet das Release<br />

nichts, was die Konkurrenz nicht<br />

auch bieten könnte, doch zumindest<br />

beseitigten die Entwickler<br />

einige Show-Stopper.<br />

AKTUELLES<br />

Angetestet ............. 10<br />

Getmail 4.34.0 holt regelmäßig<br />

Post ab, Httping 1.5.4 klopft bei<br />

Webservern an, Liferea 1.8.8 liest<br />

News-Feeds, Siren 3.01 benennt<br />

am Fließband Dateien um.<br />

Neues rund um Linux .... 12<br />

Boxed-Version von OpenSuse<br />

12.2 mit Handbuch, Gnome 3.6<br />

mit verbesserten Benachrichtigungen,<br />

Python 3.3.0 erschienen,<br />

Steam-Beta für Ubuntu noch<br />

im Oktober, Cinnamon 1.6 hat<br />

eigenen Dateimanager, Slackware<br />

14.0 steigt auf 3.x-Kernel um.<br />

Lazarus 1.0 ............ 14<br />

Die Entwickler der Free-Pascal-<br />

IDE Lazarus haben die stabile<br />

Version 1.0 der weitgehend Delphi-kompatiblen<br />

Entwicklungsumgebung<br />

veröffentlicht.<br />

Basic-IDEs ............. 20<br />

Mit einem Basic-Dialekt kommen<br />

Sie schnell zu einem ordentlichen<br />

Ergebnis bei den ersten Projekten.<br />

Grundkurs Javascript .... 25<br />

Wer die Javascript-Grundlagen<br />

beherrscht, hat das Web 2.0 im<br />

Handumdrehen gemeistert.<br />

Grundkurs Git .......... 32<br />

Die verteilte Versionsverwaltung<br />

Git erleichtert durch raffinierte<br />

Funktionen die Zusammenarbeit<br />

mehrerer Entwickler.<br />

Quellcode-Analyse ...... 38<br />

Ungenauigkeiten oder veraltete<br />

Funktionen im Code können sich<br />

schnell zu Problemen auswachsen.<br />

Wir helfen bei der Analyse.<br />

Enki ................... 42<br />

Der Editor Enki schickt sich als<br />

Newcomer an, seinen Platz an der<br />

Seite von Klassikern wie Emacs<br />

und Vim zu erstreiten.<br />

Gbrainy ................ 48<br />

Kämpfen Sie gegen die digitale<br />

Demenz und trainieren Sie Ihr<br />

Gehirn mit Logikrätseln, assoziativem<br />

Denken und komplexen<br />

Aufgaben – bei Bedarf auch auf<br />

dem Papier zum Mitnehmen.<br />

Conky ................. 50<br />

Was tut sich im System? Der<br />

kleine Helfer Conky fasst die<br />

Vitaldaten eines Computers übersichtlich<br />

zusammen.<br />

Praxissoftware Gecamed.. 54<br />

Wegen seiner freien Bestandteile<br />

eignet sich das Programm Gecamed<br />

ideal zum Einsatz in einer<br />

Privatpraxis. Damit stößt es in<br />

den hart umkämpften Bereich der<br />

Branchensoftware für Ärzte vor.<br />

Unknown Horizons ...... 59<br />

Neuland besiedeln, Rohstoffe<br />

verarbeiten und regen Handel<br />

betreiben – das sind die Zutaten<br />

für beliebte Strategiespiele. Unter<br />

Linux bedient das freie Projekt<br />

Unknown Horizons dieses Genre.<br />

4<br />

11 | 12


Heft-DVDs<br />

Auf den Heft-DVDs dieser Ausgabe befindet<br />

sich ausschließlich Anwendungssoftware.<br />

Die Datenträger enthalten keine jugendgefährdenden<br />

Inhalte.<br />

sich mit dem<br />

Thema <strong>Programmieren</strong><br />

beschäftigt, dringt in den Kernbereich von Linux vor.<br />

14Wer<br />

Der Werkzeugkasten ist reich bestückt mit dem Editor Enki, einer Auswahl<br />

an IDEs für Basic und Pascal, dem Versionskontrollsystem Git, einer<br />

umfangreichen Javascript-Anleitung sowie wichtigen Analysetools.<br />

Auf der Heft-DVD:<br />

Flexibilität lautet das<br />

Mantra von Bhodi Linux.<br />

Dank Enlightenment als<br />

Desktop läuft das schlanke<br />

System selbst auf alter<br />

Hardware superschnell.<br />

NETZ&SYSTEM<br />

System aufräumen ...... 64<br />

Auf Systemebene sammelt sich<br />

bei regelmäßigem Einsatz und<br />

häufigen Modifikationen schnell<br />

Ballast an. RPM-basierte Distributionen<br />

entschlacken Sie dank<br />

Rpmorphan und Rpmrestore<br />

schnell und gefahrlos.<br />

SysRq ................. 68<br />

Über einen Magic System Request<br />

lassen sich scheinbar abgestürzte<br />

Linux-Rechner oft relativ unkompliziert<br />

wiederbeleben – oder<br />

zumindest ohne Datenverluste<br />

herunterfahren.<br />

HARDWARE<br />

Raspberry Pi ........... 72<br />

Der Einplatinencomputer Raspberry<br />

Pi erweist sich als wahrer<br />

Allrounder, der sich gleichermaßen<br />

zum Regeln und Steuern wie<br />

als kleiner Server oder HD-fähige<br />

Multimedia-Box eignet.<br />

KNOW-HOW<br />

Dateitransfer ........... 78<br />

Einige Dateisysteme bekommen<br />

bei größeren Brocken schnell<br />

Schluckauf. Kleine Umwege versprechen<br />

hier Abhilfe.<br />

Potlatch2 .............. 81<br />

Für kleine Modifikationen an<br />

OSM-Karten bietet sich Potlatch2<br />

als einfacher, schnell anzuwendender<br />

Editor an.<br />

SERVICE<br />

Editorial ................ 3<br />

IT-Profimarkt .......... 86<br />

Events/Inserenten ...... 94<br />

Impressum ............. 95<br />

<strong>Vorschau</strong> 12/2012 ....... 96<br />

Heft-DVD-Inhalt ........ 97<br />

Mit beruhigender Regelmäßigkeit<br />

rühren die Entwickler<br />

von Sabayon ein Linux-System<br />

an, dass nicht nur das<br />

Auge erfreut, sondern das<br />

auch in Sachen Benutzbarkeit<br />

keinen bitteren Nachgeschmack<br />

hinterlässt.<br />

Runderneuert, aufpo-<br />

liert und fehlerbereinigt<br />

– die aktuelle<br />

OpenSuse 12.2<br />

schafft es locker<br />

auf einen der Spitzenplätze<br />

unter den<br />

populären Distribu-<br />

tionen. Lesen Sie<br />

mehr ab Seite 6.<br />

Das wichtige Bugfix-Update<br />

Knoppix 7.0.4 erlaubt<br />

es nun, aus dem<br />

Live-System heraus mittels<br />

Synaptic Software<br />

nachzuinstallieren.<br />

72Der Raspberry Pi<br />

beflügelt die Bastler.<br />

Mit seinem winzigen,<br />

aber leistungsfähigen<br />

Board eröffnet der Kleinst-PC unendlich<br />

viele Möglichkeiten. Wir<br />

helfen bei den ersten Schritten.<br />

<strong>LinuxUser</strong> DVD-Edition<br />

Hinweis: Haben Sie die DVD-Edition dieser Ausgabe erworben,<br />

finden Sie ab Seite 97 wei tere Informationen zu<br />

den Programmen auf den beiden Datenträgern. Haben Sie<br />

dagegen die güns tigere No-Media-Ausgabe erstanden,<br />

enthält dieses Heft keine Datenträger.<br />

www.linux-user.de<br />

12 | 10 5


HEFT-DVD<br />

OpenSuse 12.2<br />

OpenSuse 12.2 im Überblick<br />

Mit Verspätung<br />

Mit dem rasanten Aufstieg von Distro-Newcomern wie Ubuntu hat OpenSuse<br />

in den letzten Jahren an Bedeutung verloren, verfügt aber immer noch über<br />

viele treue Fans. Die mussten jetzt allerdings zwei Monate länger als geplant<br />

auf das jüngste Release warten. Hat sich die Geduld gelohnt? Thomas Drilling<br />

einzubinden, sodass es sich von<br />

mehreren Systemen gleichzeitig<br />

nutzen lässt.<br />

Die OpenSuse-Entwickler haben<br />

allerdings laut eigenen Angaben<br />

gerade erst damit begonnen, die<br />

System-Verzeichnisse /bin, /sbin<br />

und /lib in gleichnamige Unterverzeichnisse<br />

unterhalb von /usr<br />

zu verlagern. Der Merge-Prozess<br />

soll mit OpenSuse 12.3 fortgesetzt<br />

werden, vorrangig um mit<br />

dem künftigen Standard kompatibel<br />

zu bleiben. Allerdings ist<br />

/ usr-Merge nicht FHS-konform.<br />

Im Test ließen sich die Installationsmedien<br />

von OpenSuse trotz<br />

Grub 2 nicht im EFI-Modus starten.<br />

Eine Installation auf EFI-<br />

Boards funktioniert also nur<br />

dann, wenn dessen EFI kompatibel<br />

zu einem herkömmlichen<br />

BIOS ist. Ubuntu 12.04 und Fedora<br />

17 unterstützen EFI bereits<br />

jetzt deutlich besser. Eine echte<br />

Verbesserung für den Umgang<br />

mit (U)EFI bei OpenSuse steht<br />

erst mit Version 12.3 an, die dann<br />

auch UEFI Secure Boot unterstützen<br />

soll. Die dazu vom Suse-Entwickler<br />

Vojtech Pavlik [4] vorgeschlagene<br />

Vorgehensweise, das<br />

für Windows 8 vorgesehene, mittels<br />

signierter Schlüssel abgesicherte<br />

Bootverfahren zwecks Parallelinstallation<br />

von Linux und<br />

Windows zu implementieren,<br />

liegt funktional zwischen den Verfahren<br />

von Fedora und Ubuntu.<br />

README<br />

Mit OpenSuse 12.2<br />

schließt die Nürnberger<br />

Distribution wieder ein<br />

gutes Stück zur Konkurrenz<br />

auf. Zwar kann das<br />

Release nichts vorweisen,<br />

was die Konkurrenz<br />

nicht auch zu bieten<br />

hätte, doch zumindest<br />

beseitigten die Entwickler<br />

einige Show-Stopper.<br />

Mit rund zwei Monaten Verspätung<br />

hat das OpenSuse-Projekt [1]<br />

nun endlich die schon sehnlichst<br />

erwartete die Version 12.2 der beliebten<br />

Distribution vorgelegt. Zumindest<br />

was die Qualitätssicherung<br />

angeht, hat die Wartezeit der<br />

Distribution gut getan. Dass die<br />

OpenSuse-Macher darüber nachdenken,<br />

künftig auf ein Rolling-<br />

Release-Modell zu wechseln (siehe<br />

Kasten Tumbleweed), zeigt, wie<br />

sehr der durch vorab festgesetzte<br />

Release-Zyklen selbst auferlegte<br />

Druck die Entwicklung belastet –<br />

Nutzer von OpenSuse 12.1 wissen<br />

davon ein Lied zu singen.<br />

Echte technische Neuerungen<br />

bringt OpenSuse 12.2 nur wenige<br />

[2], darunter beispielsweise<br />

den Wechsel des Grub-Bootloaders<br />

auf die finale Version 2.0,<br />

das Ersetzen des angestaubten<br />

SysV-Init durch das moderne<br />

Init-System Systemd und das Verschieben<br />

sämtlicher Binaries gemäß<br />

Fedora-Vorbild nach /usr.<br />

Die von den Red-Hat-Entwicklern<br />

für Fedora ersonnene, salopp als<br />

Usr-Merge [3] bezeichnete Umstrukturierung<br />

macht es einfacher,<br />

/usr komplett in ein eigenes<br />

Dateisystem auszulagern oder<br />

schreibgeschützt über das Netz<br />

Fundamentales<br />

OpenSuse verwendet als Standard-Kernel<br />

Linux 3.4 vom Mai<br />

dieses Jahres. Als Standard-C-<br />

Shared-Library verwendet Open-<br />

Suse 12.2 die Glibc 2.15. Die<br />

GCC-Version 4.7.1 vervollständigt<br />

die Toolchain als Standard-<br />

Compiler, während als Java-Laufzeitumgebung<br />

OpenJDK 7 zum<br />

Einsatz kommt.<br />

OpenSuse nutzt nun den von<br />

anderen Distributionen schon<br />

verwendete Plymouth-Bootscreen<br />

[5], der technische Details<br />

des Startprozesses hinter einer<br />

Boot-Animation versteckt. Als<br />

6 11 | 12<br />

www.linux-user.de


OpenSuse 12.2<br />

HEFT-DVD<br />

Standard-Dateisystem<br />

fungiert nach wie vor<br />

Ext4. Btrfs gilt bei<br />

OpenSuse weiterhin als<br />

experimentell, lässt sich<br />

jedoch bei Bedarf bereits<br />

bei der Installation<br />

(Abbildung A) einfach<br />

per Mausklick aktivieren.<br />

Obendrein legen die<br />

OpenSuse-Entwickler<br />

Werkzeuge zum Prüfen<br />

und Reparieren von<br />

Btrfs-Partitionen bei.<br />

OpenSuse schlägt bei<br />

der Installation vor, eine<br />

separate Home-Partition<br />

zu verwenden. Als<br />

Alternative offeriert es<br />

eine LVM-basierte Partitionierung.<br />

Auch ein zuvor<br />

gesicherter beziehungsweise<br />

exportierter Partitionsaufbau<br />

lässt sich während der Installation<br />

importieren. In der Vorgabe-<br />

Einstellung meldet das System<br />

den bei der Installation angelegten<br />

Standard-Benutzer, der auch<br />

als Administrator fungiert, automatisch<br />

an – diese Optionen sollten<br />

Sie deaktivieren.<br />

Sysinit und X-Server<br />

Das Initialisieren der elementaren<br />

Systemdienste erledigt jetzt<br />

anstelle von SysV-Init der neue<br />

Systemd. Dass OpenSuse 12.2<br />

schneller bootet als die Vorgänger<br />

liegt unter anderem an dessen<br />

Readahead-Funktion.<br />

Als Fundament für die Benutzeroberfläche<br />

dient der X.org-<br />

Server in der Version 1.12. Für<br />

flotte Grafik sorgen Mesa 3D 8.0<br />

und der Llvmpipe-Treiber [6], der<br />

die zur Darstellung von GL-Effekten<br />

erforderlichen 3D-Berechnungen<br />

auf der CPU ausführt,<br />

wenn der verwendete Linux-Grafik-Treiber<br />

keine 3D-Beschleunigung<br />

mit GPU-Unterstützung ermöglicht.<br />

Dadurch funktionieren<br />

KDE SC 4 mit Composite-Effekten<br />

und die Gnome-3-Oberfläche<br />

auch auf älteren beziehungsweise<br />

exotischen Grafikkarten oder in<br />

virtuellen Maschinen.<br />

Aktualisierungen<br />

Der größte Teil der Neuerungen<br />

gegenüber der Vorgängerversion<br />

besteht in Aktualisierungen der<br />

wichtigsten Software-Pakete. Als<br />

Desktop-Umgebungen stehen<br />

KDE 4.8.4 (als Standard) sowie<br />

und Gnome 3.4.2 zur Verfügung.<br />

Weitere Desktops wie XFCE oder<br />

LXDE rüsten Sie bei Bedarf über<br />

externe Paketquellen nach. Darüber<br />

hinaus wollen die OpenSuse-<br />

Macher laut Projektleiter Jos<br />

Poortvliet [7] zumindest KDE in<br />

der aktuellen Version 4.9.1 schon<br />

in Kürze in einer speziell für<br />

OpenSuse 12.2 angepassten<br />

Paketquelle im Open Build Service<br />

[8] zur Verfügung stellen.<br />

Dass die OpenSuse-Qualitätssicherung<br />

aktuelle Software ausbremst,<br />

zieht sich wie ein roter<br />

Faden durch das Software-Angebot:<br />

So liegt LibreOffice nur in der<br />

Version 3.5.4 bei (aktuell: 3.6 vom<br />

August), Calligra lediglich in der<br />

Version 2.4 vom April (aktuell:<br />

2.5, siehe Test in LU 10/ 2012 [9]).<br />

Immerhin ist Gimp in der aktuellen<br />

Version 2.8 mit an Bord, samt<br />

dem von Fans lang erwarteten<br />

Ein-Fenster-Modus und einem<br />

verbesserten Textwerkzeug.<br />

Multimediales<br />

Als Community-Distribution enthält<br />

OpenSuse ausschließlich freie<br />

Software, was es für Einsteiger<br />

mitunter etwas mühselig macht,<br />

das System durch Hinzufügen unfreier<br />

und proprietärer Software<br />

multimediatauglich zu machen.<br />

Abhilfe schafft hier das Software-<br />

Depot Packman [10], das schon<br />

TUMBLEWEED<br />

Die OpenSuse-Entwickler diskutieren bereits seit einiger Zeit<br />

darüber, OpenSuse zu einer Rolling-Release-Distribution umzubauen,<br />

sodass sich das System quasi stets automatisch<br />

aktualisiert, sobald neue Programmversionen vorliegen.<br />

Möchten Sie dieses Verhalten jetzt schon ausprobieren, aktivieren<br />

Sie die Paketquelle Tumbleweed [14]. Da die Strategie<br />

der Tumbleweed-Betreuer darin liegt, neue Versionen zu aktivieren,<br />

sobald diese „einigermaßen“ stabil laufen, offeriert<br />

das Tumbleweed-Repo zwar nicht ganz so aktuelle Software<br />

wie OpenSuses Entwicklerversion Factory, dafür aber stabilere.<br />

Trotzdem ist der Einsatz von Tumbleweed mit Vorsicht<br />

zu genießen. So raten die Tumbleweed-Macher vom Einsatz<br />

ab, falls Sie proprietäre Treiber (etwa für AMD- oder Nvidia-<br />

Grafikkarten) verwenden oder OpenSuse 12.2 virtualisieren.<br />

A Der Installer kombiniert<br />

vorbildlich Komfort<br />

(möglichst wenige<br />

Benutzerinteraktion,<br />

gut gewählte Vorgaben)<br />

und Funktionalität<br />

(Detail-Infos, Individualisierung).<br />

OpenSuse 12.2<br />

Install-DVD (64 Bit)<br />

bootfähig auf Eco-Disk<br />

KDE-Live-CD (32 Bit)<br />

bootfähig auf Heft-DVD<br />

Seite A<br />

GLOSSAR<br />

FHS: Der von der Linux<br />

Foundation gepflegte<br />

Filesystem Hierarchy<br />

Standard beschreibt die<br />

Verzeichnisstruktur unixoider<br />

Betriebssysteme.<br />

EFI: Extensible Firmware<br />

Interface. Der<br />

BIOS-Nachfolger dient<br />

als zentrale Schnittstelle<br />

zwischen der<br />

Firmware, den Hardware-Komponenten<br />

und<br />

dem Betriebssystem.<br />

UEFI: Vom Unified EFI<br />

Forum definierte Standard-EFI-Implementation.<br />

Diese umfasst das sogenannte<br />

Secure Boot,<br />

welches das Booten auf<br />

vorher signierte Bootloader<br />

beschränkt und so<br />

Schadsoftware wie Rootkits<br />

aushebeln soll.<br />

www.linux-user.de<br />

11 | 12 7


HEFT-DVD<br />

OpenSuse 12.2<br />

C Typisch OpenSuse: Apper und YaST kommen sich gerne einmal ins Gehege.<br />

B Die Flash-Unterstützung<br />

aktiviert<br />

OpenSuse 12.2 erst im<br />

Rahmen des ersten<br />

Online-Updates.<br />

Pakete für OpenSuse 12.2 anbietet.<br />

Damit Sie auch ohne Packman<br />

so wenig wie möglich nacharbeiten<br />

müssen, lädt OpenSuse beispielsweise<br />

das Flash-Plugin von<br />

Adobe auf Wunsch automatisch<br />

beim ersten Online-Update herunter<br />

(Abbildung B). Auch Suses<br />

Online-Appliance-Builder Suse<br />

Studio [11] unterstützt bereits<br />

OpenSuse 12.2.<br />

Ferner sorgt bei der KDE-Version<br />

von OpenSuse YaST bei der<br />

ersten Installation eines zusätzlichen<br />

Paketes automatisch für<br />

INFO<br />

[1] OpenSuse-Projekt: http:// de. opensuse. org<br />

[2] Neuerungen der Version 12.2: http:// de. opensuse. org/ Ankündigung<br />

[3] Usr_merge: http:// en. opensuse. org/ openSUSE%3AUsr_merge<br />

[4] UEFI-Secure-Boot in OpenSuse 12.3:<br />

https:// www. suse. com/ blogs/ uefi-secure-boot-details<br />

[5] Plymouth Bootscreen: http:// www. freedesktop. org/ wiki/ Software/ Plymouth<br />

[6] Llvmpipe : http:// www. mesa3d. org/ llvmpipe. html<br />

[7] Pläne für KDE 4.9.1:<br />

http:// news. opensuse. org/ 2012/ 09/ 04/ sneak-peek-opensuse-12-2-and-kde<br />

[8] Externe Repositories für KDE: http:// download. opensuse. org/ repositories/<br />

KDE%3A/ Release%3A/ 49/ openSUSE_12. 2/<br />

[9] Calligra 2.5 im Test: Thomas Drilling, „Kleinere Baustelle“, LU 10/ 2012, S. 20,<br />

http:// www. linux-community. de/ 26399<br />

[10] Packman Repository: http:// packman. links2linux. org<br />

[11] Suse Studio: http:// susestudio. com<br />

[12] Tomahawk Media Player: http:// www. tomahawk-player. org<br />

[13] Funktionsübersicht OpenSuse (englisch): http:// en. opensuse. org/ Features<br />

[14] Tumbleweed: http:// en. opensuse. org/ Portal:Tumbleweed<br />

[15] OpenSuse Download 1: http:// software. opensuse. org/ 122/ de<br />

[16] Versionshinweise OpenSuse 12.2:<br />

http:// www. suse. de/ relnotes/ i386/ openSUSE/ 12. 2/ RELEASE-NOTES. de. html<br />

das Herunterladen der Fluendo-<br />

MP3-Bibliothek. Nutzer des Gnome-Desktops<br />

bekommen automatisch<br />

die jeweils passenden<br />

Gstreamer-Pakete (gstreamer-<br />

0_10-fluendo-mp3) angeboten.<br />

Als Musik-Player kommt bei<br />

OpenSuse 12.2 per Default Amarok<br />

zum Einsatz. Die Distribution<br />

bringt darüber hinaus aber auch<br />

den Multi-Plattform-Player<br />

Tomahawk [12] mit.<br />

DOWNLOAD<br />

OpenSuse 12.2 steht in Form von<br />

ISO-DVD-Images für 32- und 64-Bit-<br />

Systeme zum Herunterladen bereit<br />

[15]. Optional gibt hier auch<br />

eine zusätzliche Language-Pack-CD<br />

sowie eine Non-OSS-CD und ISOs<br />

der Live-CD-Varianten für KDE und<br />

Gnome. Weitere Informationen finden<br />

Sie in den Release-Notes [16].<br />

Apropos YaST<br />

Suses Konfigurationswerkzeug<br />

YaST („Yet another Setup Tool“)<br />

galt lange als innovatives Alleinstellungsmerkmal<br />

und punktete<br />

vor allem bei Einsteigern durch<br />

seine hohe Usability. Anno 2012<br />

stellt YaST allerdings keinen ernst<br />

zu nehmenden Grund mehr dar,<br />

OpenSuse zu bevorzugen. Angesichts<br />

der inzwischen in allen<br />

gängigen Distributionen vorhandenen<br />

grafischen Konfigurationswerkzeuge<br />

schmilzt der Mehrwert<br />

von YaST zunehmend dahin.<br />

Schlimmer noch: Da YaST seit<br />

vielen Jahren entwickelt wird,<br />

enthält es Module, die heute kein<br />

Mensch mehr braucht und welche<br />

die Entwickler augenscheinlich<br />

kaum mehr pflegen. So laufen<br />

insbesondere Einsteiger Gefahr,<br />

den Überblick zu verlieren. Außerdem<br />

weist YaST die unangenehme<br />

Eigenschaft auf, Konfigurationsdateien<br />

automatisch zu<br />

ändern und sogar aus dem Tritt<br />

zu geraten, wenn der Anwender<br />

diese manuell bearbeitet.<br />

In dieselbe Kerbe schlägt ein<br />

bekanntes Problem, das im Test<br />

auch bei der aktuellen Version<br />

auftrat: Der KDE-Paketverwalter<br />

Apper und YaST blockieren sich<br />

unter gewissen Umständen gegenseitig<br />

(Abbildung C), ein Beenden<br />

von Apper lässt sich durch<br />

YaST nicht immer erzwingen.<br />

Fazit<br />

OpenSuse 12.2 ist ein für eingefleischte<br />

Suse-Anwender längst<br />

überfälliges und unter dem Strich<br />

gelungenes Update. Wer Open-<br />

Suse nutzt, kann und sollte es so<br />

schnell wie möglich aktualisieren,<br />

da das neue Release zahlreiche<br />

Defizite des Vorgängers ausräumt.<br />

Für Linux-Neueinsteiger stellt<br />

OpenSuse 12.2 dagegen nicht<br />

zwangsläufig die erste Wahl dar:<br />

Ubuntu bietet in und um die Distributionen<br />

herum neben der größeren<br />

Paketauswahl und flexibleren<br />

Paketverwaltung vor allem interessante<br />

Mehrwerte wie Canonicals<br />

Cloud-Dienste Ubuntu One<br />

und Ubuntu Music Store.<br />

Insgesamt bietet OpenSuse 12.2<br />

nichts [13], was Ubuntu 12.04<br />

und Fedora 17 nicht schon längst<br />

können – und bei beiden steht in<br />

Kürze das nächste Release an.<br />

Daher bleibt festzuhalten, dass<br />

OpenSuse 12.2 nur zu den direkten<br />

Konkurrenten aufschließt,<br />

mehr nicht. Es enthält zwar keine<br />

Show-Stopper mehr, aber eben<br />

auch keine Highlights. (jlu) n<br />

8 11 | 12<br />

www.linux-user.de


PreisRAMbazamba<br />

Vergleichen lohnt sich richtig!<br />

Anbieter<br />

Hetzner<br />

1&1<br />

Angebotener Preis<br />

99 ,00 € / Mon.<br />

79 ,00 € / Mon. 99 ,99 € / Mon.<br />

Server<br />

Root Server Linux Level 6<br />

Root Server EX 6S<br />

Server XL<br />

12i<br />

CPU<br />

Intel® Xeon® E5-1650<br />

Intel® Xeon® E3-1245 Intel® Xeon® E5-2640<br />

CPU-Benchmark*<br />

CPU-Kerne Hexa-Core<br />

Quad-Core Hexa-Core<br />

CPU-Leistung 6 x 3,2 GHz<br />

4 x 3,3 GHz 6 x 2,5 GHz<br />

RAM 32 GB<br />

32 GB 32 GB<br />

Festplatte 1 2 x 1.000 GB SAS<br />

2 x 3.000 GB SATA 2 x 2.000 GB SATA<br />

Festplatte 2 1 x 128 GB SSD<br />

1 x 120 GB SSD (15 €/ Mon.) nicht verfügbar<br />

Netzunabhängiger<br />

(Serielle Konsole)<br />

19 € / Mon. (KVM)<br />

(Serielle Konsole)<br />

RemoteZugriff<br />

15 € (FlexiPack)<br />

FTP-BackupSpace 1.000 GB<br />

100 GB 250 GB<br />

Parallels Plesk Panel<br />

(10 Domains)<br />

7,90 € / Mon. (30 Domains)<br />

Mindestvertragslaufzeit keine<br />

keine 12 Monate<br />

Einrichtungsgebühr keine<br />

149,00 € keine<br />

Einmalige Kosten keine<br />

149,00 € (Setup KVM) keine<br />

99 ,00<br />

TOP<br />

13,185 8,278<br />

10,832<br />

Monatliche Kosten<br />

inkl. Features 135 ,90 199 ,99<br />

€ /Mon.<br />

€ /Mon. € /Mon.<br />

Im ersten Jahr<br />

1.188,00 €<br />

1.928,80 € 2.099,88 €<br />

ab dem<br />

4. Monat<br />

* PassMark - CPU Mark, http://www.cpubenchmark.net, Stand: 03.09.12. Angaben zu anderen Produkten<br />

wurden der jeweiligen Unternehmenswebsite entnommen (Stand 03.09.2012). Alle Preise inkl. MwSt.<br />

Info: 030 – 300 146 111 | strato-pro.de


AKTUELLES<br />

Angetestet<br />

JJJII<br />

Mit den Tools aus der<br />

Getmail-Suite holen Sie<br />

manuell oder per Skript<br />

Ihre Mails beim Provider<br />

ab und verteilen sie<br />

dann im eigenen LAN.<br />

Mails einfach herunterladen mit Getmail<br />

Wer einen privaten Mail-Dienst<br />

im heimischen Netz aufbauen<br />

möchte, der braucht ein Tool wie<br />

Getmail, das die elektronische<br />

Post beim Provider abholt. Die<br />

Getmail-Suite – sie besteht aus<br />

den vier Tools getmail, getmail_<br />

fetch, getmail_maildir und getmail_<br />

mbox – braucht sich in Sachen<br />

Funktionsumfang nicht hinter<br />

Fetchmail zu verstecken. Die vier<br />

Python-Programme ermöglichen<br />

einen flexiblen<br />

Einsatz vom<br />

einfachen, manuellen<br />

Download<br />

bis zur<br />

Integration im<br />

eigenen Skript.<br />

Die Mail-Zustellung<br />

im<br />

lokalen Netz<br />

zählt hingegen<br />

nicht zu Getmails<br />

Aufgaben. Es leitet die empfangenen<br />

Nachrichten an einen<br />

lokalen Mail Delivery Agent wie<br />

Postfix oder Sendmail weiter. Wer<br />

keinen MDA betreibt, kann die<br />

abgeholten Nachrichten auch direkt<br />

in einem MailDir-Verzeichnis<br />

oder einer Mbox-Datei ablegen.<br />

Das manuelle Abholen von<br />

Mails besorgt getmail_fetch, das<br />

sie komplett über Kommandozeilenparameter<br />

steuern. Neben Server-IP<br />

und Port geben Sie beim<br />

Aufruf auch die Zugangsdaten für<br />

das jeweilige Mail-Konto an. Weitere<br />

Parameter ermöglichen die<br />

Authentifizierung via APOP oder<br />

das Verschlüsseln der Kommunikation<br />

mit SSL. Als Ziel für die<br />

eingehenden Mails dient eine<br />

Mbox-Datei oder ein MailDir-<br />

Verzeichnis, alternativ reichen Sie<br />

die Mails auch über eine Pipe an<br />

ein externes Programm durch.<br />

Das regelmäßige automatisierte<br />

Abholen von Nachrichten übernimmt<br />

getmail, das dazu die gängigen<br />

Protokolle POP3 und<br />

IMAP4 unterstützt. Seine umfangreiche<br />

Konfigurationsdatei<br />

kann beliebig viele sogenannte<br />

Retriever-Einträge umfassen, die<br />

Zugangsdaten für je ein Benutzerkonto<br />

enthalten. Über Filtereinträge<br />

binden Sie bei Bedarf externe<br />

Programme wie Virenscanner<br />

oder Spamschutz ein. Der<br />

Destination-Eintrag legt schließlich<br />

fest, wohin Getmail die Nachrichten<br />

liefert. Weiterführende<br />

Informationen finden Sie in den<br />

Manpages und im Verzeichnis<br />

doc/ des Quellarchivs.<br />

GETMAIL 4.34.0<br />

Lizenz: GPLv2<br />

Quelle:<br />

http:// pyropus. ca/ software/ getmail/<br />

JJJJI<br />

Siren macht das Umbenennen<br />

großer Dateimengen<br />

zum reinsten<br />

Kinderspiel.<br />

Siren verschiebt und kopiert Dateien mit regulären Ausdrücken<br />

Das Umbenennen oder Verschieben<br />

einzelner Dateien ist schnell<br />

erledigt. Müssen jedoch dutzende<br />

Dateien einen neuen Namen erhalten,<br />

benötigt man die Hilfe<br />

von einem Tool wie Siren. Das<br />

Programm ähnelt einem Dateimanager<br />

mit einem Navigationsbaum<br />

und einer Dateiübersicht,<br />

welche die Dateien des aktuellen<br />

Verzeichnisses mit einigen ihrer<br />

Attribute anzeigt. Sie haben nun<br />

die Möglichkeit, ausgewählte Dateien<br />

mithilfe regulärer Ausdrücke<br />

umzubenennen. Der Ausdruck für<br />

den neuen Namen kann dabei Elemente<br />

des alten enthalten, kann<br />

aber auch die Dateierweiterung,<br />

die Größe, das Datum oder die<br />

Dateiattribute integrieren. Bei<br />

Dateiformaten wie MP3, MP4,<br />

JPG oder PDF lassen sich auch die<br />

enthaltenen Meta-Informationen<br />

im neuen Dateinamen verbauen.<br />

Die Palette der unterstützten Formate<br />

umfasst zahlreiche Dokumenten-,<br />

Multimedia- und sogar<br />

Paketformate. Hinter dem Zauberstabsymbol<br />

hält Siren ein Formularfenster<br />

bereit, mit dem Sie<br />

sich einen Ersetzungsausdruck<br />

per Maus zusammenklicken. Dabei<br />

zeigt Siren in der Spalte New<br />

Name in der Dateiübersicht eine<br />

<strong>Vorschau</strong> auf das Aussehen der<br />

neuen Dateinamen. Hat sich ein<br />

Ersetzungsausdruck bewährt und<br />

soll regelmäßig zum Einsatz kommen,<br />

nehmen Sie ihn in die Liste<br />

der Favoriten auf, aus der heraus<br />

er beim nächsten Mal per Knopfdruck<br />

zur Verfügung steht. In<br />

dieser Favoritenliste finden sich<br />

schon einige Beispielausdrücke,<br />

um Dateien durchzunummerieren<br />

oder den Dateinamen in Großbuchstaben<br />

zu setzen. Auf welche<br />

Dateien Siren den Ersetzungsausdruck<br />

anwendet, können Sie von<br />

Hand festlegen. Bequemer geht es<br />

jedoch über das Select-Menü, in<br />

dem Sie über den Punkt Find alle<br />

Dateien mit einem bestimmten<br />

Muster automatisch finden und<br />

markieren lassen. Über das<br />

Action- Menü lassen sich nun alle<br />

Dateien in einem Durchgang umbenennen<br />

oder eine Kopie mit<br />

neuem Namen anlegen. Eine<br />

Undo-Funktion erlaubt es außerdem,<br />

vorschnelle Aktionen wieder<br />

rückgängig zu machen.<br />

SIREN 3.01<br />

Lizenz: GPLv3<br />

Quelle: http:// www.<br />

scarabee-software. net/ en/ siren. html<br />

10 11 | 12<br />

www.linux-user.de


Angetestet<br />

AKTUELLES<br />

Liferea, der schnelle RSS-Reader für GTK+<br />

Der GTK-basierte, schlanke RSS-<br />

Feed-Reader Liferea besticht<br />

durch einfache Bedienbarkeit und<br />

eine übersichtliche Oberfläche.<br />

Ein Navigationsbaum am linken<br />

Rand enthält die Liste aller Feeds,<br />

die sich durch Ordner logisch<br />

strukturieren lässt. Die Schlagzeilenübersicht<br />

und die Nachrichtenvorschau<br />

teilen sich den Rest des<br />

Programmfensters. Während die<br />

Übersicht alle Einträge eines<br />

Feeds auflistet, zeigt die <strong>Vorschau</strong><br />

eine Zusammenfassung des Inhalts<br />

des aktuellen Feeds an. Handelt<br />

es sich bei dem Feed um einen<br />

Podcast, erscheint unter dem<br />

<strong>Vorschau</strong>bereich ein Schalter,<br />

LIFEREA 1.8.8<br />

Lizenz: GPLv2<br />

Quelle:<br />

http:// liferea. sourceforge. net/<br />

über den sich die Mediendateien<br />

direkt herunterladen lassen.<br />

Möchten Sie den Text zu einem<br />

Eintrag komplett lesen, laden Sie<br />

ihn durch Anklicken der Schlagzeile<br />

in den Browser oder öffnen<br />

ihn über das Kontextmenü als<br />

weiteren Reiter. Über das Kontextmenü<br />

lässt sich außerdem die<br />

Schlagzeile als gelesen markieren,<br />

löschen oder in einen Sammelordner<br />

kopieren. Das Quellarchiv von<br />

Liferea enthält bereits eine Liste<br />

interessanter RSS-Feeds, die Sie<br />

beliebig erweitern. Als Quelle geben<br />

Sie dazu eine URL, ein externes<br />

Programm oder eine lokale<br />

Datei an. Darüber hinaus besteht<br />

die Möglichkeit, einen Filter zu<br />

definieren oder die Nutzung eines<br />

Proxy-Servers zu deaktivieren.<br />

Alle Einstellungen lassen sich<br />

auch nachträglich über die Eigenschaften<br />

des Feeds anpassen. Hier<br />

hinterlegen Sie auch Authentifizierungsdaten,<br />

deaktivieren Popups<br />

und passen das Caching sowie<br />

die Aktualisierungsintervalle individuell<br />

an. Standardmäßig hält<br />

Liferea die letzten 100 Nachrichten<br />

vor und aktualisiert die<br />

Schlag zeilen stündlich.<br />

JJJJJ<br />

Liferea ist ein leistungsfähiger<br />

RSS-Reader im<br />

klassischen Design.<br />

Httping: Es muss nicht immer ICMP sein<br />

Mit Httping prüfen Sie auf einfache<br />

Weise die Reaktions- und Sie außerdem den Parameter -l<br />

Bei verschlüsselten Seiten setzen<br />

Antwortzeiten eines Webservers. für SSL-Unterstützung. Läuft der<br />

Das Tool sendet einen HTTP-Request<br />

an eine IP-Adresse oder übergeben Sie die Portnummer<br />

Webserver nicht auf Port 80,<br />

URL und ermittelt die Antwortzeit.<br />

Da es das HTTP-Protokoll Proxy-Server, hängen Sie dessen<br />

mittels -p. Nutzen Sie einen<br />

verwendet, durchdringt es auch Verbindungsdaten mit -x an den<br />

Firewalls. Um einen einfachen Aufruf an. Falls Sie nicht mit -c<br />

Ping auf eine Webseite abzusetzen,<br />

rufen Sie Httping mit dem der Requests festlegen, klopft<br />

eine Obergrenze für die Anzahl<br />

Parameter -g gefolgt von der URL Httping ohne Unterbrechung bei<br />

auf. Kennen Sie diese nicht, geben der Gegenstelle an. Senden Sie<br />

Sie hinter -h die IP-Adresse an. statt eines HEAD- einen GET-<br />

Request als Ping-Paket, lässt sich<br />

HTTPING 1.5.4<br />

mit dem Parameter -b die Durchsatzrate<br />

berechnen. Um die Ge-<br />

Lizenz: GPLv3<br />

Quelle: http:// www. vanheusden. com/ genseite unter Last zu setzen, leiten<br />

19:00 Sie via Uhr -f ein Seite Flood-Ping 1 000_LU1106_F-Weber_neu1.qxd httping/<br />

18.09.2006 ein.<br />

Die Ausgabe von Httping ähnelt<br />

jener von Ping und ist gut lesbar.<br />

Auf Wunsch erzeugt das Tool auch<br />

eine maschinenlesbare Ausgabe,<br />

die sich in eigenen Skripten einfach<br />

weiter verarbeiten lässt sowie<br />

Nagios-konforme Nachrichten<br />

und Return-Codes. (jlu) n<br />

JJJJI<br />

Mit dem handlichen Tool<br />

Httping behalten Sie die<br />

Verfügbarkeit und Geschwindigkeit<br />

von Webservern<br />

im Auge.<br />

X23


AKTUELLES<br />

Neues rund um Linux<br />

Zu den Verbesserungen in<br />

Gnome 3.6 zählt die Anzeige der<br />

zuletzt benutzten Dateien im<br />

Datei manager. (Bild: Gnome.org)<br />

Gnome 3.6 mit verbesserten Benachrichtigungen und Boxes<br />

Das Gnome-Projekt hat die<br />

Version 3.6 seiner freien Desktopumgebung<br />

veröffentlicht,<br />

die Verbesserungen in vielen<br />

Details<br />

mitbringt.<br />

Dazu gehören<br />

unter<br />

anderem<br />

der überarbeitete<br />

Message-<br />

Tray, kleinere<br />

Benachrichtigungsfenster<br />

mit<br />

Button zum Schließen sowie<br />

eine Bildschirmsperre mit<br />

Komfortfunktionen. Die Integration<br />

mehrerer Eingabemethoden<br />

hilft unter anderem<br />

beim Schreiben von Chinesisch<br />

und Japanisch. Auch bei den<br />

Technologien für die Barrierefreiheit<br />

gibt es Fortschritte:<br />

Bei der Bildschirmlupe lassen<br />

sich inverse Darstellung, Graustufen<br />

sowie Helligkeit und<br />

Kontrast einstellen, der<br />

Screenreader Orca hat seine<br />

Braille-Ausgabe verbessert.<br />

Erstmals mit dabei ist Gnome<br />

Boxes, ein grafisches Frontend<br />

zum Verwalten virtueller Maschinen.<br />

Es bietet verbesserte<br />

Suche, Auswahl und Umbenennen<br />

und kann zudem hängengebliebene<br />

Instanzen zum<br />

Shutdown zwingen. Weitere<br />

Einzelheiten beschreiben die<br />

bebilderten Release Notes unter<br />

http:// library. gnome. org/<br />

misc/ release-notes/ 3. 6/.<br />

KURZ NOTIERT<br />

Die Linux New Media AG, Herausgeber<br />

von <strong>LinuxUser</strong>, ändert ihren<br />

Namen zu Medialinx AG und<br />

expandiert in neue Geschäftsbereiche<br />

(http:// www. medialinxgruppe.<br />

de). Die Sparte der Zeitschriften<br />

und Online-Medien rund<br />

um Linux bleibt als Geschäftsbereich<br />

Linux New Media innerhalb<br />

der neuen AG erhalten.<br />

Die IETF hat einen neuen Audio-<br />

Codec namens Opus verabschiedet,<br />

der sich lizenzfrei implementieren<br />

lässt (http:// opuscodec.<br />

org). Er soll sich gleichermaßen<br />

für Sprache und Musik<br />

sowie das Archivieren und Streamen<br />

eignen. WebRTC, ein Standard<br />

für Echtzeitkommunikation<br />

per Web, schreibt Opus als einen<br />

der Pflicht-Codecs vor.<br />

Das KDE-Projekt hat die KDE<br />

User Working Group ins Leben<br />

gerufen, um die Kommunikation<br />

zwischen Anwendern und Entwicklern<br />

zu verbessern (http://<br />

uwg. kde. org). Dazu halten die<br />

Organisatoren öffentlich Meetings<br />

per Internet ab. Außerdem<br />

plant die User Working Group,<br />

eine Anwendervertretung namens<br />

User Panel einzuführen.<br />

Mit Debian 6.0.6 bringt das Projekt<br />

die „Squeeze“-Installationsmedien<br />

auf den neuesten Stand<br />

(http:// tinyurl. com/ lu1112-<br />

debian). Das Update enthält Bugfixes<br />

unter anderem für Dpkg,<br />

Eglibc und Apache2. Daneben<br />

schließt es zahlreiche Sicherheitslücken,<br />

so in Iceape, Iceweasel,<br />

OpenOffice, OpenSSL,<br />

Strongswan, PHP 5 und BIND 9.<br />

Python 3.3.0 bringt viele Verbesserungen mit<br />

Das neu erschienene Python<br />

3.3.0 setzt ein rundes Dutzend<br />

Python Enhancement Proposals<br />

(PEP) um. Dazu gehören<br />

unter anderem Virtual Environments,<br />

Namespace Packages sowie<br />

die flexible Repräsentation<br />

von Unicode-Zeichenketten.<br />

Die Python-Syntax erhält den<br />

neuen Ausdruck yield from zur<br />

Generator-Delegation. Daneben<br />

ist für String-Objekte die U-Notation<br />

für Unicode wieder erlaubt.<br />

Neue Bibliotheksmodule<br />

ermöglichen Xz/ LZMA-Komprimierung<br />

(lzma), liefern High-<br />

Steam-Beta für Ubuntu kommt noch im Oktober<br />

Die Valve-Entwickler haben bekannt<br />

gegeben, noch im Oktober<br />

eine erste halb-öffentliche<br />

Beta-Version (1000 User) der<br />

der Spiele-Engine Steam für<br />

Ubuntu 12.04 zu veröffentlichen<br />

(http:// blogs. valvesoft<br />

ware. com/ linux/). Man wolle<br />

die Beta, die ein Spiel umfasst,<br />

zunächst auf so vielen verschiedenen<br />

Hardwarekonfigurationen<br />

testen wie möglich, daher<br />

Cinnamon 1.6 führt eigenen Dateimanager ein<br />

Die vom Linux-Mint-Projektleiter<br />

Clement Lefebvre entwickelte,<br />

alternative Desktop-Umgebung<br />

Cinnamon<br />

(http:// cinnamon.<br />

linuxmint. com) auf<br />

Gnome-3-Basis liegt jetzt<br />

in der Version 1.6 vor.<br />

Das neue Release enthält<br />

erstmals den eigenständigen<br />

Dateimanager<br />

Nemo, der Gnomes Nautilus<br />

ersetzt, optisch aber<br />

kaum vom Vorbild zu unterscheiden<br />

ist. Außerdem<br />

lassen sich nun Namen<br />

für die selbst definierten<br />

Workspaces vergeben.<br />

Ein neues Applet namens<br />

Das Cinnamon-Applet „Window Quick-<br />

List“ zeigt eine Übersicht der Fenster<br />

aller Workspaces. (Bild: C. Lefebvre)<br />

Level-Objekte für IP-Adressen<br />

und Netzmasken (ipadress) oder<br />

Mock-Objekte für Unit-Tests<br />

(unittest.mock). Ausführliche Informationen<br />

gibt es im „What’s<br />

New“-Dokument für Python<br />

3.3.0 unter http:// docs. python.<br />

org/ py3k/ whatsnew/ 3. 3. html.<br />

gebe es für die Teilnahme auch<br />

keine Beschränkung auf etwa<br />

einzelne Grafikkarten oder<br />

Ähnliches. Blogger vermuten,<br />

bei dem Spiel handele es sich<br />

wohl um Left 4 Dead 2.<br />

„Window Quick-List“ zeigt<br />

sämtliche Fenster aller Workspaces<br />

in einer Übersicht. Der<br />

Fensterumschalter, den Sie<br />

über [Alt]+[Tab] aufrufen,<br />

lässt sich jetzt weitgehend<br />

konfigurieren: Auf Wunsch<br />

zeigt er Icons, Thumbnails,<br />

<strong>Vorschau</strong>en oder eine Kombination<br />

davon an. Weitere Details<br />

finden sich in einem<br />

Blogeintrag von Clement Lefebvre<br />

unter http:// cinnamon.<br />

linuxmint. com/ ? p=207. Dort<br />

gibt er auch Tipps für Extension-Entwickler<br />

und die Designer<br />

von Themes.<br />

12<br />

11 | 12<br />

Das Neueste rund um Linux, aktuelle Kurztests und Artikel aus<br />

<strong>LinuxUser</strong> finden Sie täglich auf www.linux-community.de


Neues rund um Linux<br />

AKTUELLES<br />

Boxed-Version von Open Suse 12.2 mit Handbuch<br />

Der Verlag Open Source Press<br />

bietet die neue OpenSuse-Version<br />

12.2 als Box mit einigen<br />

Zugaben an. Die Packung enthält<br />

eine Double-Layer-DVD<br />

mit den Versionen von Open-<br />

Suse für 32- und 64-Bit-Systeme,<br />

eine weitere DVD enthält<br />

die Live-Versionen zum<br />

Ausprobieren sowie verschiedene<br />

Addons. Zu diesen zählen<br />

der Flash Player und der Reader<br />

von Adobe, die funktional<br />

eingeschränkte OpenSuse-Edition<br />

des Finanzverwaltungsprogramms<br />

Moneyplex sowie<br />

eine PDF-Ausgabe des Buches<br />

„Bash – Arbeiten und programmieren<br />

mit der Shell“. Ebenfalls<br />

enthalten ist eine gedruckte,<br />

rund 350 Seiten<br />

starke Version der OpenSuse-<br />

Start-Up-Dokumentation in<br />

deutscher Sprache. Sie beschreibt<br />

die Installation und<br />

Konfiguration des Systems sowie<br />

den grundlegenden Umgang<br />

mit der Shell. Schließlich<br />

liegen dem Paket Rabatt-Gutscheine<br />

für LPI-Trainings, die<br />

Moneyplex-Vollversion und<br />

das kommerzielle Bildbearbeitungsprogramm<br />

PaintSupreme<br />

bei. Sie erhalten die Box zum<br />

Preis von 59,95 Euro unter https://<br />

www. opensourcepress.<br />

de/ openSUSE, Installationssupport<br />

leistet der Anbieter<br />

nicht. Open Source Press gibt<br />

an, von jeder verkauften Box<br />

eine Spende an das OpenSuse-<br />

Projekt weiterzuleiten.<br />

Open Source Press stattet seine<br />

Box-Version von OpenSuse 12.2<br />

mit einem gedruckten Handbuch<br />

sowie etlichen Extras aus.<br />

Slackware 14.0 mit XFCE 4.10 und LLVM/ Clang<br />

Mit dem Release von Slackware<br />

14.0 steigt die traditionsreiche<br />

Distribution (http:// www. slack<br />

ware. com) auf den Kernel<br />

3.2.29 um, für den die Kernelentwickler<br />

mindestens zwei<br />

weitere Jahre Support leisten.<br />

Für die neueren Kernel 3.4.11,<br />

3.5.4, and 3.6-rc4 liefert Slackware<br />

dagegen lediglich Konfigurationsdateien<br />

mit. Daneben<br />

gehören GCC 4.7.1, Glibc 2.15<br />

und X11R7.7 zum System.<br />

Erstmals ist auch LLVM/ Clang<br />

als alternativer Compiler mit<br />

von der Partie. Als Desktopumgebungen<br />

dienen KDE 4.8.5<br />

und Xfce 4.10.0, unter den Anwendungen<br />

finden sich Firefox<br />

15.0.1, Thunder bird 15.0.1<br />

und Gimp 2.8.2. (jlu) n<br />

Kann eine<br />

Schulungseinrichtung<br />

für mehr als EINEN<br />

Themenbereich<br />

berühmt werden?<br />

Das Linuxhotel ist bekannt für erstklassige Open-Source-Schulungen. In den letzten Jahren kamen Java<br />

und andere Programmiersprachen hinzu - wie immer in Kooperation mit führenden Spezialisten, und in<br />

abgeschiedener, konzentrierter, aber auch ziemlich verspielter Umgebung. Es ist so naheliegend, auch<br />

Entwicklerthemen bei den OpenSource‘lern zu lernen, weil man dort schon immer sehr „unter die<br />

Haube“ guckte und mit viel Freude intensivst arbeitet. Das weiss ein Großteil der deutschen Admins, nur<br />

unter Entwicklern hat's sich noch nicht so ganz herumgesprochen.<br />

Mehr siehe www.linuxhotel.de


SCHWERPUNKT<br />

Lazarus 1.0<br />

© Georgios Alexandris, 123RF<br />

Lazarus 1.0: Entwicklungsumgebung für Free Pascal<br />

Zwölf Jahre hat es<br />

gedauert: Jetzt haben<br />

die Entwickler<br />

Beeindruckende<br />

Umgebung<br />

die Version 1.0 der<br />

Free-Pascal-IDE<br />

Lazarus veröffentlicht<br />

– und bleiben<br />

weitgehend kompatibel<br />

zu Delphi.<br />

Thomas Drilling<br />

README<br />

Die aktuellen Neuerungen<br />

in der Free-Pascal-<br />

IDE Lazarus 1.0 demonstrieren<br />

eindrucksvoll,<br />

dass Pascal keine<br />

Sprache von gestern<br />

ist. Erfahrene Entwickler<br />

entwerfen so schnell<br />

und einfach wie selten<br />

leistungsfähige GUI-Applikationen<br />

für Qt, GTK,<br />

Windows, Mac OS X<br />

und sogar Android.<br />

Bereits 1972 entwarf Niklaus<br />

Wirth an der ETH Zürich Pascal,<br />

das eigentlich als Lehrsprache<br />

zum Erlernen strukturierter Programmierung<br />

gedacht war. Seitdem<br />

haben Generationen von<br />

Programmierern und Ingenieuren<br />

ihre ersten Schritte ins Entwicklerleben<br />

mit Pascal gemeistert.<br />

Nennenswerten kommerziellen<br />

Erfolg erlangte es mit den von<br />

Borland erstmals für Turbo Pascal<br />

5.5 eingeführten Erweiterungen<br />

zur objektorientierten Programmierung<br />

(Object Pascal), die<br />

den ursprünglichen Sprachstandard<br />

stark veränderten.<br />

Nichtsdestotrotz brachten es<br />

Borlands Produkte Turbo Pascal<br />

sowie die Nachfolger Borland Pascal<br />

und Delphi unter Windows zu<br />

einer großen Popularität. Noch<br />

heute entwickeln vor allem kleinere<br />

Firmen Software zum Eigenbedarf<br />

der Einfachheit und<br />

Schnelligkeit halber in Delphi<br />

(das heute Embarcadero gehört).<br />

Object Pascal dient mittlerweile<br />

quasi als Standard-Dialekt und<br />

kommt auch in Free Pascal [1]<br />

zum Einsatz, das als Grundlage<br />

von Lazarus dient. Zwar hat Pascal<br />

heute an wirtschaftlicher Bedeutung<br />

eingebüßt – Stellenangebote<br />

für Pascal-Programmierer<br />

werden Sie vergeblich suchen.<br />

Dennoch lohnt es sich nach wie<br />

vor, das <strong>Programmieren</strong> anhand<br />

von Pascal zu lernen. Auch für<br />

Delphi an sich sowie dessen Visual<br />

Component Library (VCL) im<br />

Besonderen lassen sich aber<br />

durchaus ernst zu nehmende Argumente<br />

finden. Die gelten auch<br />

für die Lazarus-IDE [2] samt ihrer<br />

VCL-kompatiblen Lazarus Component<br />

Library (LCL).<br />

Wiedererweckt<br />

Bei Lazarus handelt es sich wie<br />

beim Sprachstandard Free Pascal<br />

um Open Source. Sie können mit<br />

Lazarus aber trotzdem kommerzielle<br />

Programme entwickeln und<br />

diese dann vertreiben, denn während<br />

die IDE selbst der GPL unterliegt,<br />

kommt für die LCL-Klassenbibliothek<br />

die LGPL zum Einsatz,<br />

sodass man die resultierende<br />

Software auch als Closed Source<br />

vertreiben kann. Lazarus linkt<br />

dazu die LCL statisch an die von<br />

Ihnen entwickelte Object-Pascal-<br />

Anwendung.<br />

Die Kompatibilität von Lazarus<br />

und der LCL zu Delphi und der<br />

VCL ermöglicht ein ähnlich komfortables<br />

visuelles Zusammenkli-<br />

A Aktuelle DEB-Pakete von Lazarus<br />

1.0 spielen Sie wie hier unter Kubuntu<br />

über das Paketmanagent ein.<br />

14 11 | 12<br />

www.linux-user.de


Lazarus 1.0<br />

SCHWERPUNKT<br />

cken von grafischen<br />

Oberflächen<br />

wie<br />

unter Delphi<br />

– insbesondere<br />

wenn für<br />

Sie die Sprache<br />

für die eigentliche<br />

Programmlogik<br />

nur eine untergeordnete<br />

Rolle spielt.<br />

Ebenfalls für<br />

Lazarus<br />

spricht, dass<br />

sich in der<br />

Umgebung<br />

mit wenig<br />

Aufwand<br />

plattformübergreifende<br />

Programme schreiben<br />

oder vorhandene Delphi-Programme<br />

portieren lassen. Die in<br />

Lazarus integrierte Unterstützung<br />

der jeweiligen Widget-Bibliotheken<br />

bewegt sich auf einem<br />

sehr hohen Abstraktionsgrad, außerdem<br />

unterstützt die IDE die<br />

Datenbanksysteme MySQL, PostgreSQL,<br />

dBase/ FoxPro, Inter base/<br />

Firebird und MS SQL Server.<br />

Der Haupteinsatzzweck von Lazarus<br />

dürfte aber neben dem Portieren<br />

von Delphi-Projekten darin<br />

liegen, vorhandenen Object-Pascal-Programmen<br />

im Handumdrehen<br />

eine schicke Oberfläche überzustülpen.<br />

Lazarus unterstützt<br />

dazu die Toolkits Qt, GTK+,<br />

GTK2, Cocoa/ Carbon (Mac OS X),<br />

WinAPI und Windows CE. Außerdem<br />

spielt es mit zahlreichen Prozessorarchitekturen<br />

zusammen,<br />

wozu neben x86 und x86_64 auch<br />

PowerPC und ARM zählen. Lazarus<br />

läuft nicht nur unter Linux,<br />

sondern auch unter FreeBSD, Mac<br />

OS X und Windows.<br />

Lazarus blickt seit der Version<br />

0.0.5 aus dem Jahr 2001 auf nunmehr<br />

zwölf Jahre Entwicklungsgeschichte<br />

zurück. Die von uns<br />

zuletzt getestete Version 0.9.28<br />

vom März 2011 [3] enthielt noch<br />

Free Pascal 2.4.2. Die aktuelle auf<br />

Free Pascal 2.6.0 beruhende, symbolträchtige<br />

Version 1.0 wurde<br />

offiziell am 1. September 2012<br />

auf der „Dutch Pascal Conference<br />

2012“ in Utrecht vorgestellt. Übrigens<br />

veröffentlicht das Lazarus-<br />

Team auch regelmäßig Snapshots<br />

der Entwickler-Version [4], aktuell<br />

in der Version 1.1.<br />

Download und Installation<br />

Lazarus findet sich zwar im Paketfundus<br />

aller gängigen Distributionen,<br />

zu Redaktionsschluss<br />

jedoch maximal in der Version<br />

0.9.30.4 vom April 2012. Ubuntu<br />

12.04 bringt zum Beispiel die<br />

Version 0.9.30.2 mit. Möchten<br />

Sie die offizielle Stable-Version<br />

1.0 nutzen, kommen Sie derzeit<br />

nicht um das manuelle Herunterladen<br />

herum. Die Download-<br />

Links der Projektseite [5] verweisen<br />

auf die zugehörigen Sourceforge-Server.<br />

Das Sourceforge-<br />

Verzeichnis enthält separate<br />

DEB-Binaries für Free Pascal<br />

2.6.0 und die Lazarus IDE 1.0-0<br />

sowie den Quelltext, den Sie beim<br />

Hinzulinken von Packages benötigen<br />

(alle Dateien finden Sie<br />

auch auf Heft-DVD).<br />

Auch für unser 64-Bit-Testsystem<br />

unter Kubuntu finden sich<br />

passende Binärpakete [6]. Das<br />

Installieren der Free-Pascal- und<br />

Lazarus-Pakete funktioniert unter<br />

Kubuntu 12.04 problemlos via<br />

Kontextmenü mit Apper, Synaptic<br />

oder dem Ubuntu Software<br />

Center (Abbildung A). Es gilt allerdings<br />

die korrekte Reihenfolge<br />

zu beachten: Sie müssen zuerst<br />

das Paket fp-src_2.6.0-120824_<br />

amd64.deb einrichten, danach erst<br />

lazarus_1.0-0_amd64.deb.<br />

Eine detaillierte Beschreibung<br />

der Installation, die außerdem<br />

viele Spezial- und Sonderfälle berücksichtigt,<br />

finden Sie im Free-<br />

Pascal-Wiki [7]. Ergänzend zu<br />

diesen Informationen bietet das<br />

Lazarus-Wiki eine vollständige<br />

Dokumentation [8] sowie eine<br />

sehr umfangreiche FAQ [9].<br />

B Lazarus kennt<br />

ebenfalls Packages,<br />

genau wie Delphi.<br />

Lazarus 1.0,<br />

Free Pascal 2.6.0<br />

LU/lazarus/<br />

C Lazarus 1.0 bringt<br />

neben neuen Klassenbibliotheken<br />

für Android<br />

vor allem neue<br />

Compiler- und Debugger-Funktionen<br />

mit.<br />

www.linux-user.de<br />

11 | 12 15


SCHWERPUNKT<br />

Lazarus 1.0<br />

D Lazarus kennt eine<br />

Vielzahl an Tools, die<br />

jeweils in eigenen<br />

Fenstern residieren.<br />

E Die Lazarus-<br />

Konsole stellt die<br />

Steuerzentrale der<br />

Applikation dar.<br />

Wie Delphi kennt auch Lazarus<br />

ein Package-System, das vorrangig<br />

zum Teilen von Code zwischen<br />

Projekten gedacht und geeignet<br />

ist. Im Unterschied zu<br />

Delphi beschränken sich Lazarus-<br />

Packages nicht auf Bibliotheken.<br />

Bei Delphi handelt es sich bei<br />

Packages stets um spezielle Bibliotheken,<br />

welche die IDE selbst<br />

oder die zu erstellende Anwendung<br />

benötigt. Delphi-Packages<br />

benötigen „In-Compiler“-Unterstützung,<br />

was Free Pascal gegenwärtig<br />

nicht beherrscht.<br />

Lazarus-Packages<br />

Ein Lazarus-Package dagegen besteht<br />

aus einer Sammlung von<br />

Units und anderen Komponenten,<br />

nebst den zugehörigen Informationen<br />

darüber, wie es diese zu kompilieren<br />

gilt und wie sie sich entweder<br />

von anderen Projekten, der<br />

IDE selbst oder von anderen<br />

Packages nutzen lassen. Da Lazarus<br />

nur statische Packages unterstützt,<br />

müssen Sie die IDE beim<br />

Verwenden von Packages jedes Mal<br />

neu übersetzen. Sämtliche Funktionen<br />

zum Umgang mit Packages<br />

inklusive des Tools Package-Graph<br />

finden Sie im gleichnamigen Eintrag<br />

des Hauptmenüs (Abbildung<br />

B, vorige Seite).<br />

Neues in Lazarus 1.0<br />

Die Lazarus Component Library<br />

LCL agiert weitgehend kompatibel<br />

mit der VCL für Delphi 6 und<br />

unterstützt neben den Toolkits<br />

für Microsoft Windows auch<br />

GTK/ GTK+, Qt 4.5 (Linux) sowie<br />

Cocoa oder Carbon für Mac OS X.<br />

Lazarus 1.0 ist die erste Version<br />

der IDE, mit der Sie auch Anwendungen<br />

für Android entwickeln<br />

können: Die neuen Units customdrawncontrols.pas,<br />

customdrawndrawers.pas,<br />

customdrawn_common.pas,<br />

customdrawn_android.pas und customdrawn_winxp.pas<br />

für „Lazarus<br />

Custom Draw Controls“ helfen<br />

jetzt auch beim Erstellen von<br />

Android-Benutzeroberflächen.<br />

Andere neue Units wie etwa<br />

azdeviceapis.pas erlauben es beispielsweise,<br />

mit Lazarus 1.0 die<br />

Android-APIs für das GPS oder<br />

für Beschleunigungssensoren zu<br />

nutzen. Mit der ebenfalls hinzugekommenen<br />

Unit lazdialogs.pas<br />

erstellen und verwenden Sie Basisdialoge<br />

wie Öffnen oder Speichern<br />

ganz ohne native<br />

Grafikbibliotheken unabhängig<br />

vom Betriebssystem.<br />

Die Lazarus-Entwickler<br />

haben auch die IDE<br />

selbst überarbeitet: Sie<br />

besitzt jetzt unter anderem<br />

Optionen zum Bereinigen<br />

von Build- und<br />

Runtime-Dateien (Abbildung<br />

C, vorige Seite).<br />

Darüber wurde auch der<br />

Debugger erweitert, der<br />

jetzt CPU-Register in einem<br />

neuen Format anzeigt.<br />

Der Disassemblierer<br />

enthält nun neue<br />

Haltepunkte, die selbst<br />

weitere Haltepunkte aktivieren<br />

oder deaktivieren können.<br />

Eine detaillierte Liste sämtlicher<br />

Neuerungen [10] finden Sie<br />

im Lazarus-Wiki.<br />

Erste Schritte<br />

Wer die alte Borland-IDE kennt,<br />

fühlt sich in Lazarus sofort heimisch,<br />

denn dort sieht alles genauso<br />

aus. Beim ersten Start flutet<br />

Lazarus den Bildschirm mit<br />

zahlreichen Fenstern: Neben dem<br />

Hauptfenster der IDE bekommen<br />

Sie es auf jeden Fall mit dem Objektinspektor,<br />

dem Quelltexteditor,<br />

einem visuellen Editor (Formular)<br />

sowie einem Nachrichtenfenster<br />

zu tun (Abbildung D).<br />

Verlieren Sie im Fenster-Wust<br />

die Übersicht, listet der Hauptmenü-Eintrag<br />

Fenster sämtliche<br />

geöffnete Fenster auf und bietet<br />

eine schnelle Möglichkeit, zum<br />

gewünschten zu wechseln. Das<br />

Hauptfenster der IDE, die Lazarus-Konsole<br />

(Abbildung E), enthält<br />

neben der Hautpmenüleiste<br />

mit allen verfügbaren Funktionen<br />

auch mehrere verschiebbare Symbolleisten<br />

zum schnelleren Erreichen<br />

der wichtigsten Funktionen,<br />

wie Öffnen, Speichern, Neue Formulare<br />

erstellen oder Übersetzen<br />

(grünes Dreieck).<br />

Der Quelltexteditor lässt sich<br />

wie jede andere Lazarus-Komponente<br />

im Menü Werkzeuge | Ein-<br />

16 11 | 12<br />

www.linux-user.de


Lazarus 1.0<br />

SCHWERPUNKT<br />

stellungen im Bereich Editor weitgehend<br />

den eigenen Bedürfnissen<br />

anpassen. Das betrifft nicht nur<br />

Farben und Schriften für die syntaxgesteuerte<br />

Einfärbung des<br />

Codes, sondern vor allem auch<br />

die sogenannte Code-Faltung.<br />

Hier passen Sie das entsprechende<br />

Verhalten des Editors nicht<br />

nur für Object Pascal ganz spezifisch<br />

Ihren Vorstellungen an, sondern<br />

auch für HTML oder XML<br />

(Abbildung F).<br />

Möchten Sie den Übersetzungsvorgang<br />

weiter beeinflussen, finden<br />

Sie alle dazu notwendigen<br />

Compiler- und Debugger-Funktionen<br />

im Menü Start. Hier geben<br />

Sie dem Compiler über die gleichnamigen<br />

Menüpunkte beispielsweise<br />

Startparameter mit, setzen<br />

Haltepunkte für Quelltext, Adressen<br />

oder Daten, nutzen den Debugger<br />

oder kompilieren schrittweise.<br />

Fehlermeldungen zeigt Lazarus<br />

im Nachrichtenfenster, ein<br />

Mausklick auf die Fehlermeldung<br />

fördert dank des integrierten<br />

Debuggers das problematische<br />

Codefragment direkt im Quelltexteditor<br />

zutage (Abbildung G).<br />

Schlussendlich enthält die Lazarus-Konsole<br />

die eigentliche Komponentenpalette,<br />

die sich in mehrere<br />

Reiter mit sämtlichen in der<br />

LCL verfügbaren Komponenten<br />

unterteilt (Abbildung H, nächste<br />

Seite). Darüber hinaus dürfen Sie<br />

eigene Komponenten oder solche<br />

von Drittanbietern installieren.<br />

Lazarus stellt die Komponentenpalette<br />

über den gleichnamigen<br />

Menüpunkt unter Ansicht wahlweise<br />

als Fenster bereit.<br />

zen. Klicken Sie beispielsweise<br />

doppelt auf das GUI-Element<br />

Haupt-Menü im Reiter Standard<br />

der Komponentenbibliothek, so<br />

erscheint das Objekt sofort im<br />

Formular, wo Sie es mit den Anfassern<br />

beliebig positionieren.<br />

Die zugehörigen Objekteigenschaften<br />

bearbeiten Sie im<br />

Objekt inspektor, wobei Lazarus<br />

automatisch das zugehörige<br />

Codefragment im Quelltexteditor<br />

gelb markiert.<br />

Die allgemeine Vorgehensweise<br />

bei der Arbeit mit der Lazarus-<br />

IDE sieht so aus: Sie wählen aus<br />

der Komponentenpalette jeweils<br />

die gewünschte Komponente per<br />

Doppelklick aus und platzieren<br />

sie damit im Formular. Jedes Formular<br />

ist stets mit einer Cope-<br />

Einheit (Unit) verknüpft. Anders<br />

herum gilt das selbstverständlich<br />

nicht, denn nicht bei jeder Unit<br />

handelt es sich um eine visuelle<br />

Komponente. Selbstverständlich<br />

bewältigt die Projektverwaltung<br />

in Lazarus komplexe Projekte,<br />

wozu der Projektinspektor (Abbildung<br />

J, nächste Seite) im Menü<br />

Projekt wertvolle Dienste liefert.<br />

Wählen Sie eine beliebige Komponente<br />

aus, zeigt Lazarus deren<br />

Eigenschaften sofort im Objektinspektor<br />

an, wo Sie die gewünschte<br />

Eigenschaft Ihren Vorstellungen<br />

anpassen. Der Objektinspektor<br />

umfasst die zwei Reiter<br />

Eigenschaften und Ereignisse, wobei<br />

ersterer zwei Spalten besitzt:<br />

Die linke zeigt den Namen der gewählten<br />

Eigenschaft, die rechte<br />

den zugehörigen Wert. Handelt<br />

es sich dabei um einfache Werte<br />

wie Zahlen oder Texte, können<br />

Sie diese direkt verändern. Bei<br />

komplizierteren Eigenschaften<br />

bietet der Objektinspektor ein<br />

aufklappbares Untermenü oder<br />

den Eigenschaftseditor an. Letzteren<br />

rufen Sie mithilfe des Knopfes<br />

rechts neben dem Inhalt der<br />

jeweiligen Eigenschaft auf. Gibt<br />

es keinen solchen Knopf, so exis-<br />

F Das Verhalten des<br />

Lazarus-Editors lässt<br />

sich weitgehend den<br />

eigenen Vorstellungen<br />

anpassen.<br />

Visuell entwickeln<br />

Wie Delphi fungiert Lazarus in<br />

erster Linie als visuelle Entwicklungsumgebung<br />

(Abbildung I,<br />

nächste Seite). Sie gestalten darin<br />

die grafische Oberfläche des Free-<br />

Pascal-Programms interaktiv, wobei<br />

Lazarus im Hintergrund automatisch<br />

den zugehörigen Quellcode<br />

im Editor generiert, den Sie<br />

am Ende nur noch durch die eigentliche<br />

Programmlogik ergän-<br />

G Der Debugger zeigt<br />

bei einem Klick auf die<br />

Fehlermeldung das<br />

betreffende Codefragment<br />

im Quelltexteditor.<br />

www.linux-user.de<br />

11 | 12 17


SCHWERPUNKT<br />

Lazarus 1.0<br />

H Die Komponentenpalette<br />

stellt das Herzstück<br />

der LCL-Klassenbibliothek<br />

dar.<br />

I Die Arbeit mit<br />

Objektinspektor, Formular<br />

und Quelltexteditor<br />

gestaltet sich<br />

komfortabel.<br />

tiert auch kein Eigenschaftseditor<br />

für die gewählte Eigenschaft.<br />

Browser und Explorer<br />

Lazarus bietet darüber hinaus<br />

zahlreiche Möglichkeiten zum<br />

Navigieren im Code. Neben einer<br />

Volltextsuche und der Möglichkeit,<br />

den Quelltext im Editor anhand<br />

regulärer Ausdrücke zu<br />

durchsuchen, bietet Lazarus im<br />

Menü Ansicht einen leistungsfähigen<br />

Codebrowser, der beispielsweise<br />

die Namen von Units und<br />

Packages beziehungsweise Bezeichnern<br />

nach dem Begriff<br />

durchsucht (Abbildung K).<br />

Ein Doppelklick auf die Fundstelle<br />

im Codebrowser bringt Sie<br />

direkt zum betreffenden Codefragment<br />

im Quelltexteditor. Das<br />

funktioniert nicht nur für die gerade<br />

erstellte Unit, sondern in der<br />

kompletten IDE, also in der LCL<br />

und sämtlichen externen Units<br />

und Packages. Den zu untersuchenden<br />

Bereich grenzen Sie im<br />

Listenauswahlfeld vorab ein.<br />

Der Code-Explorer aus dem<br />

Menü Ansicht zeigt jede Pascal-<br />

Datei in Form von zwei Bäumen<br />

auf den Reitern Code und Anweisungen<br />

an. Im Reiter Code sehen<br />

Sie die Typen, Variablen, Konstanten,<br />

Klassen etc., während der<br />

Reiter Anweisungen die Struktur<br />

der Compiler-Direktiven aufführt.<br />

Mit einem Doppelklick auf<br />

den gewünschten Knoten springen<br />

Sie dann zur entsprechenden<br />

Position im Quelltext. Darüber<br />

hinaus finden Sie im Hauptmenüeintrag<br />

Suchen viele leistungsfähige<br />

Suchfunktionen.<br />

Die LCL<br />

Das A und O der Programmentwicklung<br />

mit Lazarus ist neben<br />

dem Free-Pascal-Compiler selbst<br />

die Lazarus Component Library<br />

J Der Projektinspektor bewältigt<br />

mühelos auch große Projekte.<br />

LCL. Platzieren Sie in der Lazarus-IDE<br />

eine beliebige Komponente<br />

aus der Komponentenpalette<br />

im Formular, so entstammt<br />

die von der IDE erstellte, zum Objekt<br />

gehörige Klasse der LCL.<br />

Bei der LCL handelt es sich in<br />

erster Linie um eine ganz gewöhnliche<br />

Object-Pascal-Klassenbibliothek,<br />

daher lässt sie sich<br />

auch außerhalb von Lazarus nutzen.<br />

Die LCL zeichnet die jeweiligen<br />

Elemente nicht selbst auf<br />

dem Bildschirm, sondern greift<br />

dabei auf Systembibliotheken zurück,<br />

wie GTK/ GTK+, Qt, Car-<br />

INFO<br />

[1] Free Pascal: http:// freepascal. org<br />

[2] Lazarus: http:// www. lazarus. freepascal. org<br />

[3] Test Lazarus 0.9.28: Tim Schürmann,<br />

„Oberflächlich“, LU 08/ 2011, S. 38,<br />

http:// www. linux-community. de/ 22930<br />

[4] Lazarus-Entwicklerversion: http://<br />

michael-ep3. physik. uni-halle. de/ Lazarus<br />

[5] Lazarus herunterladen: http:// sourceforge.<br />

net/ projects/ lazarus/ files/<br />

[6] Lazarus-DEB-Pakete (64 Bit):<br />

http:// sourceforge. net/ projects/ lazarus/<br />

files/ Lazarus%20Linux%20amd64%20DEB/<br />

Lazarus%201. 0/<br />

[7] Installationsanleitung: http:// wiki.<br />

freepascal. org/ Installing_Lazarus/ de<br />

[8] Lazarus-Dokumentation: http:// wiki. lazarus.<br />

freepascal. org/ Lazarus_Documentation<br />

[9] Lazarus-FAQ: http:// wiki. lazarus. freepascal.<br />

org/ Lazarus_Faq<br />

[10] Neues in Lazarus 1.0: http:// wiki. lazarus.<br />

freepascal. org/ Lazarus_1. 0_release_notes<br />

[11] Mit Lazarus realisierte Projekte:<br />

http:// wiki. lazarus. freepascal. org/ Projects_<br />

using_Lazarus/ de<br />

[12] Code-Beispiele:<br />

http:// wiki. freepascal. org/ Code_Examples#<br />

RTL. 2C_FLC_and_LCL_Usage_examples<br />

18 11 | 12<br />

www.linux-user.de


Lazarus 1.0<br />

SCHWERPUNKT<br />

bon/ Cocoa, WinCE oder Win32,<br />

was der Projektinspektor bei einem<br />

Klick auf die LCL anschaulich<br />

im Klassenbrowser zeigt.<br />

Da die LCL auch mit den Systembibliotheken<br />

von Windows<br />

oder Mac OS X zusammenspielt,<br />

können Sie mit Lazarus auf einfache<br />

Weise plattformübergreifende<br />

Programme schreiben. Sie<br />

müssen den Quellcode lediglich<br />

auf dem Zielsystem neu übersetzen,<br />

was gut funktioniert, denn<br />

die Lazarus IDE wurde komplett<br />

in Free Pascal geschrieben und<br />

mithilfe der LCL kompiliert.<br />

Beispiele von interessanten Projekten,<br />

die unter Lazarus beziehungsweise<br />

mithilfe der LCL entwickelt<br />

wurden, finden Sie im Lazarus-Wiki<br />

[11], nützliche Codebeispiele<br />

hält das Free-Pascal-<br />

Wiki [12] bereit. Darüber hinaus<br />

bringt auch Lazarus selbst im Verzeichnis<br />

/usr/share/lazarus/1.0/<br />

examples eine Reihe von Codebeispielen<br />

mit, die sich auch über<br />

das Menü Werkzeuge | Beispielprojekte<br />

erreichen lassen.<br />

Da die in Lazarus 1.0 enthaltene<br />

LCL wie bereits erwähnt weitgehend<br />

mit der VCL für Windows in<br />

Delphi 6 kompatibel ist, bietet<br />

das Menü Werkzeuge unter anderem<br />

Funktionen zum Umwandeln<br />

von Delphi-Projekten, Units oder<br />

Packages in solche für Lazarus.<br />

Fazit<br />

Dass Lazarus kein Projekt von gestern<br />

ist, zeigt sich an der seit über<br />

zwölf Jahren voranschreitenden<br />

Weiterentwicklung und insbesondere<br />

den aktuellen Neuerungen in<br />

La za rus 1.0. Mit keiner anderen<br />

IDE entwerfen erfahrene Entwickler<br />

so schnell und einfach leistungsfähige<br />

GUI-Applikationen<br />

für Qt, GTK, Windows, Mac OS X<br />

und sogar Android. Aufgrund der<br />

hohen Kompatibilität zu Borland<br />

Delphi bietet sich der Einsatz von<br />

Lazarus vorrangig für erfahrene<br />

Delphi-Entwickler an. Die finden<br />

sich trotz der etwas überladenen<br />

Oberfläche nach kurzer Eingewöhnung<br />

in der IDE schnell zurecht.<br />

Aber auch Programmier-Anfänger<br />

finden in Lazarus einen guten<br />

Einstieg: Keine Sprache eignet<br />

sich so gut zum Erlernen strukturierter<br />

Programmierung wie Pascal,<br />

und wer es erst einmal beherrscht,<br />

dem fällt das Erweitern<br />

seines Horizonts auf andere Sprachen<br />

relativ leicht. (jlu) n<br />

K Mit dem Codebrowser<br />

durchsuchen<br />

Sie Ihr Projekt nach<br />

Units, Packages oder<br />

Bezeichnern.<br />

DIGITALES ABO<br />

<strong>LinuxUser</strong>: Das Monatsmagazin für die Praxis<br />

DIGISUB *<br />

nur 56,10 €<br />

im Jahr (12 PDFs)<br />

* Digitales Abo, jederzeit kündbar<br />

www.linux-user.de<br />

JETZT BESTELLEN UNTER:<br />

www.linux-user.de/digisub<br />

Telefon: 07131 /2707 274<br />

11 | 12 Fax: 07131 / 2707 78 601<br />

19<br />

E-Mail: abo@linux-user.de


SCHWERPUNKT<br />

Basic-Entwicklungsumgebungen<br />

GUI-Programmierung leicht gemacht mit Basic<br />

Einfacher<br />

Zugang<br />

© Paolo De Santis, 123RF<br />

Um ansprechende Software zu entwickeln, braucht es keinen<br />

Vollprofi, der Programmiersprachen mit der Muttermilch aufgesogen<br />

hat: Mit einem Basic-Dialekt kommt im Prinzip jeder<br />

schnell zu einem ordentlichen Ergebnis. Marko Dragicevic<br />

Gambas 3.3.1<br />

LU/gambas/<br />

README<br />

Oft gerät in Vergessenheit,<br />

dass es unter<br />

Linux mehrere Implementationen<br />

der Programmiersprache<br />

Basic<br />

gibt. Diese richtet sich<br />

vor allem an Einsteiger<br />

und erlaubt in kurzer<br />

Zeit gute Ergebnisse.<br />

GLOSSAR<br />

Basic: Kürzel für „Beginner’s<br />

All-purpose<br />

Symbolic Instruction<br />

Code“, zu Deutsch etwa<br />

„Allgemeine symbolische<br />

Programmiersprache für<br />

Anfänger“. Basic entstand<br />

1964 an einem<br />

US-College als leicht zu<br />

erlernende Programmiersprache<br />

für Studenten.<br />

In der Ära der Home-Computer<br />

entwickelten viele Anwender im<br />

Privatbereich kleine Applikationen<br />

und gaben diese weiter. Der<br />

Grund dafür lag schlicht darin,<br />

dass jedes ausgelieferte Gerät als<br />

Programmiersprache einen (meist<br />

fest im ROM verdrahteten) Basic-<br />

Dialekt mitbrachte. Der zeichnete<br />

sich dadurch aus, dass er mehr<br />

oder weniger einfach und schnell<br />

zu erlernen war.<br />

Mittlerweile hat sich der Irrglaube<br />

verbreitet, dass GUI-Anwendungen<br />

unter Linux heutzutage<br />

nur in C++ oder mit komplexen<br />

Skriptsprachen umzusetzen<br />

seien – vorzugsweise von Profis,<br />

die Kenntnisse über den Zugriff<br />

auf diverse Bibliotheken besitzen.<br />

Das stimmt so aber nicht: Es gibt<br />

für diesen Zweck eine Vielzahl<br />

passender Sprachen, darunter<br />

mehrere Abkömmlinge von Basic.<br />

Gambas<br />

In den 90er-Jahren war der französische<br />

Programmierer Benoît<br />

Minisini von der Microsoft-Programmiersprache<br />

Visual Basic<br />

fasziniert und abgestoßen zugleich.<br />

Ihn begeisterte der Gedanke<br />

einer einfach zu erlernenden<br />

Sprache, mit der Anwender die<br />

Programme nicht ausschließlich<br />

durch Schreiben von Codezeilen<br />

entwickeln, sondern stattdessen<br />

die Oberfläche mit dem Mauszeiger<br />

zeichnen und nur noch die<br />

Logik, mit der die GUI-Elemente<br />

auf Aktionen reagieren, auf konventionellem<br />

Wege schreiben.<br />

Bei näherem Hinsehen kam<br />

Minisini jedoch zu dem Schluss,<br />

dass Visual Basic unlogische<br />

Sprachkonzepte enthielt und fehlerhaft<br />

war. So entwickelte er ein<br />

eigenes Basic mit visuellem GUI-<br />

Designer und veröffentlichte es<br />

1999 als freie Software – Gambas<br />

[1] war geboren.<br />

In den langen Jahren der Entwicklung<br />

hat sich rund um Gambas<br />

eine Community gebildet, die<br />

das Projekt mit Patches, Dokumentationen<br />

und Ports unterstützt.<br />

Die Linux-Version gilt als<br />

sehr ausgereift und läuft auf verschiedenen<br />

Prozessorarchitekturen,<br />

darunter x86 und x86_64,<br />

aber auch auf dem ARM-Prozessor<br />

des Raspberry Pi. Der Windows-Port<br />

– er benötigt eine Cygwin-Installation<br />

– befindet sich<br />

ebenso wie die Version für Mac<br />

OS X noch in einem frühen Stadium<br />

der Entwicklung.<br />

Die Installation<br />

Unter den meisten Distributionen<br />

richten Sie Gambas direkt<br />

über den Paketmanager ein.<br />

Nicht alle liefern jedoch in ihren<br />

Repositories die neueste Version.<br />

Den Vogel schießt dabei Ubuntu<br />

ab, das selbst für „Precise Pangolin“<br />

in seinen Paketquellen statt<br />

des aktuellen Gambas 3 lediglich<br />

das veraltete Gambas 2 führt (Abbildung<br />

A).<br />

Um Gambas 3 zu erhalten, fügen<br />

Sie den Paketquellen daher<br />

das Gambas-3-PPA hinzu. Dazu<br />

geben Sie in einem Terminal Zeile<br />

1 aus Listing 1 ein. Nach der<br />

Eingabe des Passwortes aktualisieren<br />

Sie die Paketlisten (Zeile<br />

2). Nun stehen die Pakete für<br />

Gambas 3 bereit (Zeile 3).<br />

LISTING 1<br />

01 $ sudo add-apt-repository<br />

ppa:nemh/gambas3<br />

02 $ sudo apt-get update<br />

03 $ sudo apt-get install<br />

gambas3<br />

20 11 | 12<br />

www.linux-user.de


Basic-Entwicklungsumgebungen<br />

SCHWERPUNKT<br />

Nach dem Start von Gambas<br />

empfängt Sie ein übersichtlicher,<br />

deutschsprachiger Assistent. Die<br />

über [F1] abrufbare Hilfe dagegen<br />

ist überwiegend in Englisch gehalten<br />

und fällt knapp aus. Die<br />

IDE schlägt zunächst vor, eines<br />

der Beispielprogramme zu betrachten.<br />

Einsteigern hilft das<br />

beim Erlernen der Sprache. Alternativ<br />

wählen Sie einen Projekttyp<br />

aus (Abbildung B), etwa ein GTK-<br />

Programm oder ein Spiel, das für<br />

Grafik und Sound auf Simple<br />

Direct Layer (SDL) setzt.<br />

Bei einer GUI-Applikation klicken<br />

Sie die Programmfenster unkompliziert<br />

mit der Maus zusammen<br />

(Abbildung C, folgende Seite).<br />

Das klappt ähnlich intuitiv<br />

wie in einem Malprogramm.<br />

Rechts unten finden Sie die benötigten<br />

Elemente, die Sie im mittleren<br />

Bereich des Programmfensters<br />

platzieren. Rechts oben definieren<br />

Sie die Eigenschaften der<br />

Komponente, bei einem Button<br />

etwa den Text und den dazu zu<br />

verwendenden Font.<br />

Um die hinter der Oberfläche<br />

stehende Logik des Programms<br />

zu schreiben, gilt es, die Programmiersprache<br />

zu erlernen. Hierfür<br />

steht zum einen die englische Anleitung<br />

in Form eines Wikis [2]<br />

bereit. Für Anfänger empfiehlt es<br />

sich, das deutschsprachige, gut<br />

verständliche Wikibook zu Gambas<br />

[3] zur Hand zu nehmen.<br />

Dieses legt zwar eine alte Version<br />

zugrunde, hilft aber trotzdem<br />

ein Grundverständnis für die Programmiersprache<br />

zu schaffen.<br />

Danach genügt es oft, zum Nachschlagen<br />

die aktuelleren Infos der<br />

englischen Seite zu verwenden.<br />

Der Ansatz, ein deutsches Buch<br />

zur aktuellen Version zu erstellen<br />

[4], steckt noch in den Anfängen.<br />

Manchen mag diese Art des<br />

Lernens liegen; andere Benutzer<br />

schreckt es unter Umständen ab,<br />

sich die Informationen im Netz<br />

zusammensuchen müssen.<br />

Ein gedrucktes Buch zu Gambas<br />

existiert auf dem hiesigen Markt<br />

nicht. Sie haben jedoch die Möglichkeit,<br />

Fragen auf der Mailingliste<br />

Gambas-Users [5] oder im<br />

deutschen Gambas-Forum [6] zu<br />

stellen. Fortgeschrittene finden<br />

insbesondere auf der Mailingliste<br />

schnell Informationen, für Einsteiger<br />

dürfte der Austausch von<br />

Nachrichten allerdings unübersichtlich<br />

wirken oder gar unverständlich<br />

bleiben.<br />

Die Sprache selbst ist objektorientiert<br />

angelegt, dabei fällt der<br />

Sprachumfang moderat aus. Es<br />

existieren jedoch einige sogenannte<br />

„Komponenten“, also Erweiterungen<br />

für bestimmte Anwendungszwecke<br />

– zum Beispiel,<br />

um mit minimalem Aufwand auf<br />

Datenbanken zuzugreifen oder<br />

Videos abzuspielen.<br />

BlitzMax<br />

Die Sprache BlitzMax blickt wie<br />

Gambas auf eine lange Entwicklungsgeschichte<br />

zurück. Das Vorgängerprodukt<br />

Blitz Basic erschien<br />

vor rund 20 Jahren. Damals<br />

lag der Einsatzzweck vorwiegend<br />

im einfachen Entwickeln<br />

von Computerspielen.<br />

Nach mehreren Entwicklungszyklen<br />

der Sprache, die unter diversen<br />

Namen auf den Markt kamen,<br />

wie zum Beispiel Blitz Plus<br />

erschien 2004 die erste Version<br />

von BlitzMax. Diese bietet modernere<br />

Elemente sowie die Möglichkeiten<br />

zum Entwickeln von<br />

grafischen Anwendungen über<br />

Plattformgrenzen hinweg.<br />

Es existieren Versionen für Linux,<br />

Windows und Mac OS X. Erstere<br />

beiden laufen auf x86 und<br />

x86_64, Letztere berücksichtigt<br />

zusätzlich die ältere PowerPC-Generation.<br />

Andere Prozessorfamilien<br />

wie etwa die inzwischen recht<br />

verbreitete ARM-Architektur unterstützt<br />

die Sprache nicht.<br />

Erste Schritte<br />

Wer BlitzMax ausprobieren<br />

möchte, sieht sich mit einer gewöhnungsbedürftigen<br />

Produktpolitik<br />

konfrontiert: Für jede<br />

Plattform außer Linux existieren<br />

Demoversionen zum Ausprobieren<br />

der Sprache. Benutzer des<br />

freien Betriebssystems hingegen<br />

müssen ohne Testmöglichkeit direkt<br />

die Vollversion für 80 Euro<br />

erwerben, wenn sie mit der Sprache<br />

entwickeln möchten.<br />

A Ubuntu-Benutzer<br />

sollten die Paketquellen<br />

um einen PPA-Eintrag<br />

erweitern, ansonsten<br />

installiert der<br />

Paketmanager eine<br />

völlig veraltete Gambas-Version.<br />

B Gambas bietet<br />

gleich nach dem Start<br />

die Möglichkeit, ein<br />

Projekt mit allen spezifischen<br />

Parametern<br />

anzulegen.<br />

www.linux-user.de<br />

11 | 12 21


SCHWERPUNKT<br />

Basic-Entwicklungsumgebungen<br />

C Mit dem GUI-Designer<br />

von Gambas gelingt<br />

es im Nu, einen<br />

Dialog zu gestalten.<br />

D Bei BlitzMax<br />

empfiehlt es sich, die<br />

Font-Größe der IDE<br />

anzupassen.<br />

Zwar enthält die Homepage den<br />

Hinweis, die Linux-Demo sei<br />

„momentan nicht verfügbar“,<br />

doch dieser steht schon seit der<br />

Veröffentlichung der ersten Version<br />

im Jahre 2004 dort. Wer den<br />

Kaufpreis investiert, erhält immerhin<br />

ohne Zusatzkosten die<br />

Lizenzen der Programmversionen<br />

für alle anderen Betriebssysteme<br />

hinzu – für die Crossplattform-<br />

Entwicklung von Anwendungen<br />

auf derselben Codebasis ist das<br />

durchaus interessant.<br />

Die Installation gestaltet sich<br />

unkompliziert: Nach dem Bezahlen<br />

der Kaufversion laden Sie ein<br />

Archiv von der Hersteller-Homepage<br />

[7] herunter und entpacken<br />

es in ein beliebiges Verzeichnis.<br />

Gegebenenfalls müssen Sie aus<br />

dem Standard-Repository der<br />

Distribution noch weitere Pakete<br />

installieren, eine beiliegende<br />

Textdatei nennt die entsprechenden<br />

Abhängigkeiten.<br />

Nun haben Sie die Möglichkeit,<br />

die Entwicklungsumgebung über<br />

den Konsolen-Befehl MaxIDE zu<br />

starten. Anschließend empfiehlt<br />

es sich, die Font-Größe über File |<br />

IDE Options an die Bildschirmauflösung<br />

anzupassen (Abbildung<br />

D). IDE und Online-Hilfe<br />

sind komplett in Englisch verfasst.<br />

Zwar besteht theoretisch<br />

im Optionen-Dialog die Möglichkeit<br />

zur Auswahl einer anderen<br />

Sprachdatei, das Archiv enthält<br />

aber nur eine für Englisch.<br />

Konzept & Community<br />

BlitzMax verfügt über eine rege<br />

Community. Im Forum des Herstellers<br />

[8] finden sich zahlreiche<br />

Einträge, allein die Sektion zum<br />

<strong>Programmieren</strong> von grafischen<br />

Oberflächen enthält mehr als<br />

6000 Threads. Ferner finden sich<br />

dort einige Tutorials für diverse<br />

Einsatzfälle des Basic-Dialekts.<br />

Daneben stellen emsige Nutzer<br />

eigene Module bereit, also Bibliotheken<br />

mit neuen Funktionen<br />

wie für SQL-Zugriffe.<br />

Daneben existiert ein herstellerunabhängiges,<br />

deutschsprachiges<br />

Portal zu BlitzMax [9]. Dieses<br />

fällt zwar nicht so umfangreich<br />

aus wie jenes des Herstellers,<br />

doch hier reagieren die Mitglieder<br />

ebenso schnell auf Fragen.<br />

Die Original-Entwicklungsumgebung<br />

enthält keinen GUI-Desig<br />

ner wie Gambas. Sie haben<br />

also keine Möglichkeit, die Oberfläche<br />

einer neuen Applikation<br />

mit dem Mauszeiger zusammenzuklicken.<br />

Dazu müssen Sie zu<br />

den Produkten von Drittanbieter<br />

greifen, die nach der Designphase<br />

den passenden Code generieren.<br />

Solche Tools gibt es jedoch in der<br />

Regel nur für Windows oder Macintosh,<br />

unter Wine lassen sie sich<br />

nur begrenzt zum Laufen bringen.<br />

Daher gilt es also unter<br />

Linux die Oberfläche komplett<br />

von Hand zu programmieren.<br />

Das fällt jedoch leichter als gedacht:<br />

So bewirkt die kurze Programmzeile<br />

aus Listing 2, dass<br />

das Fenster, das Sie mit Mein-<br />

Fenster referenzieren, einen Button<br />

mit dem Label MeinButton<br />

enthält. Darüber hinaus enthält<br />

die Zeile Angaben zur Position sowie<br />

der Breite und Höhe. Es existiert<br />

ein Zusatz, um dies objektorientiert<br />

zu realisieren. Dabei legen<br />

Sie Objekte an, die auf Ereignisse<br />

(„Events“) reagieren – im<br />

Fall eines GUI-Objektes also beispielsweise<br />

auf einen Mausklick.<br />

Objektorientiertes <strong>Programmieren</strong>,<br />

das in Gambas zum Mittel<br />

der Wahl gehört, empfiehlt sich<br />

vor allem, um bei größeren Projekten<br />

den Überblick behalten<br />

und diese besser warten zu können.<br />

Jedoch legt das für Programmiereinsteiger<br />

unter Umständen<br />

die Hürde etwas höher.<br />

22 11 | 12<br />

www.linux-user.de


Basic-Entwicklungsumgebungen<br />

SCHWERPUNKT<br />

Das Denken in Objekten fällt<br />

beim Gestalten einer Oberfläche<br />

noch relativ einfach. Bei abstrakteren<br />

Problemen wird es für den<br />

Einsteiger allerdings unter Umständen<br />

schwierig, das Handeln<br />

des Programms in Objekte zu fassen,<br />

anstatt einfach nur mittels<br />

der Programmzeilen nacheinander<br />

dem Computer zu vermitteln,<br />

was er als Nächstes tun sollte.<br />

Der letztgenannte und eigentlich<br />

für Basic typische Ansatz, das imperative<br />

<strong>Programmieren</strong>, steht in<br />

BlitzMax zwar je nach verwendeter<br />

Bibliothek durchaus bereit –<br />

konsequent kommt er jedoch nur<br />

in Purebasic zum Einsatz.<br />

Purebasic<br />

Vor zwölf Jahren erschien die erste<br />

Version von Purebasic. Seitdem<br />

erhält das Produkt kontinuierlich<br />

Updates für die drei Plattformen<br />

Linux, Windows und Mac OS X.<br />

Für jedes dieser Systeme steht<br />

auch eine Demoversion bereit<br />

[10], deren einzige Beschränkung<br />

darin besteht, dass der erstellte<br />

Quellcode maximal 800<br />

Zeilen lang werden darf.<br />

Nachdem Sie das korrekte Archiv<br />

für die Linux-Version (je<br />

nach vorliegendem Rechner 32<br />

oder 64 Bit) heruntergeladen und<br />

entpackt haben, rufen Sie in einem<br />

Terminal das enthaltene<br />

Skript checkinstall.sh auf. Es untersucht,<br />

ob alle benötigten Pakete<br />

bereits installiert sind. Fehlt<br />

noch etwas, schlägt es einen passenden<br />

Aufruf von Apt-get vor,<br />

der die fehlenden Komponenten<br />

nachinstalliert.<br />

Anschließend tragen Sie die Zeilen<br />

aus Listing 3 in die Startdatei<br />

der verwendeten Shell ein, bei der<br />

Bash also in die ~/.bashrc. Um die<br />

Änderungen zu aktivieren, geben<br />

Sie dann den folgenden Befehl im<br />

Terminal ein:<br />

$ source .bashrc<br />

Die Installationsanleitung des<br />

Herstellers weist allerdings eine<br />

Lücke auf, was Ubuntu betrifft:<br />

Für diese Distribution müssen Sie<br />

noch einen Symlink setzen. Listing<br />

4 zeigt den entsprechenden<br />

Befehl für die 32-Bit- (Zeile 1)<br />

und 64-Bit-Varianten (Zeile 2).<br />

Sie starten nun die IDE über<br />

den Aufruf purebasic in einem<br />

Terminal. Es empfiehlt sich, die<br />

Sprache der Entwicklungsumgebung<br />

und der Online-Hilfe via<br />

File | Preferences | General | Language<br />

| Deutsch auf Deutsch umzustellen<br />

(Abbildung E). Sollte an<br />

dieser Stelle die deutsche Sprache<br />

nicht auftauchen, haben Sie eventuell<br />

das Verzeichnis in der Variablen<br />

PUREBASIC_HOME falsch gesetzt.<br />

Gut dokumentiert<br />

Die Dokumentation gehört zu<br />

den Stärken von Purebasic. Die<br />

Applikation bietet zu jedem Befehl<br />

Erläuterungen, die Sie über<br />

[F1] abrufen (Abbildung F, folgende<br />

Seite). Ferner steht das<br />

offizielle Referenzhandbuch als<br />

PDF zum Download bereit [11].<br />

Außerdem existiert ein gedrucktes<br />

Buch mit einer anschaulichen<br />

Einführung in Purebasic, das allerdings<br />

schon etwas in die Jahre<br />

gekommen ist. Inzwischen steht<br />

es aber kostenlos unter einer<br />

Creative-Commons-Lizenz bereit.<br />

Freiwillige bringen es regelmäßig<br />

auf den neuesten Stand [12]. All<br />

die Quellen liegen wohlgemerkt<br />

auf Deutsch vor.<br />

Vor wenigen Jahren hat ein hiesiger<br />

Distributor (die Software<br />

stammt eigentlich aus Frankreich)<br />

Purebasic auf CD-ROM im<br />

Einzelhandel vertrieben, weswegen<br />

es hierzulande recht verbreitet<br />

ist und eine Vielzahl an Tutorials<br />

und Foreneinträgen [13]<br />

existieren.<br />

Wie bereits weiter oben angedeutet,<br />

verzichtet Purebasic auf<br />

Objektorientierung. Dies ermöglicht<br />

Anfängern zunächst einen<br />

schnellen Einstieg in die Sprache.<br />

Jedoch gerät das rein imperative<br />

<strong>Programmieren</strong> bei größeren Projekten<br />

potenziell unübersichtlich.<br />

Dafür lassen sich kleinere Programme<br />

schnell verstehen und<br />

fallen sehr kompakt aus. Die folgende<br />

Zeile sorgt beispielsweise<br />

dafür, dass sich ein Fenster mit<br />

dem Anzeigetext Hallo Welt! und<br />

der Titelzeile Begrüßung öffnet:<br />

MessageRequester("Begrüßung","HaU<br />

llo Welt!");<br />

Wer seine GUI-Fenster ähnlich<br />

wie bei Gambas mit der Maus er-<br />

LISTING 2<br />

Local MeinButton:TGadget = CreateButton("Klick Mich!",140<br />

,60,80,40,MeinFenster)<br />

export PUREBASIC_HOME=Installationsverzeichnis<br />

export PATH=$PUREBASIC_HOME/compilers:$PATH<br />

E In den Spracheinstellungen<br />

stellen Sie<br />

die Purebasic-IDE auf<br />

Deutsch um.<br />

01 $ sudo ln -s /usr/lib/i386-linux-gnu/libstdc++.<br />

so.6.0.16 /usr/lib/libstdc++.so.6<br />

02 $ sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.<br />

so.6.0.16 /usr/lib/libstdc++.so.6<br />

LISTING 3<br />

LISTING 4<br />

www.linux-user.de<br />

11 | 12 23


SCHWERPUNKT<br />

Basic-Entwicklungsumgebungen<br />

F Die Online-Hilfe von<br />

Purebasic liefert zu allen<br />

Befehlen eine<br />

kurze Erläuterung.<br />

stellen möchte, benötigt das Tool<br />

Visual Designer. Es liegt zwar der<br />

Windows-Version bei, dem Linux-<br />

Archiv jedoch unverständlicherweise<br />

nicht. Alle anderen Elemente<br />

der IDE sind für alle Betriebssysteme<br />

identisch.<br />

Als Workaround kann man die<br />

Windows-Demoversion von Purebasic<br />

herunterladen und die Datei<br />

VisualDesigner.exe unter Linux<br />

mittels Wine ausführen. Die vom<br />

Programm generierten Quellcodes<br />

laufen unter Linux ohne<br />

Einschränkungen.<br />

Das Entwickeln von Crossplattform-Anwendungen<br />

mit exakt<br />

identischem Quellcode funktioniert<br />

überraschend gut: Sofern<br />

Sie einen Font verwenden, den es<br />

auf allen Ziel-Betriebssystemen<br />

gibt, sieht eine Anwendung mit<br />

derselben Codebasis unter Linux<br />

und Windows sehr ähnlich aus<br />

und verhält sich in der Regel auf<br />

gleiche Weise.<br />

Fazit<br />

Für Einsteiger in Sachen Programmierung<br />

eignet sich Purebasic am<br />

ehesten: Hier existieren eine ausführliche<br />

und leicht verständliche<br />

Dokumentation sowie zahlreiche<br />

Einführungen. Ferner lässt sich<br />

das Konzept des imperativen <strong>Programmieren</strong>s<br />

schnell erlernen.<br />

Zudem funktioniert das Entwickeln<br />

mit derselben Code-Basis<br />

über Plattformgrenzen hinweg<br />

mit Purebasic verhältnismäßig<br />

gut. Zwar fällt unangenehm auf,<br />

dass der Visual Designer ausschließlich<br />

als Windows-Software<br />

existiert, jedoch läuft er fehlerfrei<br />

unter Wine. Für größere Projekte<br />

erscheint es ratsam, eine objektorientierte<br />

Sprache zu verwenden.<br />

Gambas fügt sich am besten in<br />

den Linux-Gedanken ein: Als freie<br />

Software liegt es den gängigen<br />

Distributionen gleich bei. In der<br />

neuesten Version macht die Software<br />

selbst mit ihren Assistenten<br />

BASIC-ENTWICKLUNGSUMGEBUNGEN IM VERGLEICH<br />

Name Gambas BlitzMax Purebasic<br />

Preis kostenlos 80 Euro 79 Euro<br />

Aktuelle Version 3.3.1 (September 2012) 1.48 (April 2012) 4.61 (Mai 2012)<br />

Lizenz GPLv2+ proprietär proprietär<br />

Demoversion – nein ja<br />

Plattform (voll unterstützt)<br />

Linux, FreeBSD<br />

Linux, Windows, Mac OS X<br />

(Intel+PPC)<br />

Linux, Windows, Mac OS<br />

(Intel+PPC)<br />

Plattform eingeschränkt<br />

unterstützt)<br />

OpenBSD, NetBSD, Mac<br />

OS X, Solaris, Windows<br />

– Amiga OS<br />

Paradigma objektorientiert objektorientiert mit imperativ<br />

imperativen Anteilen<br />

GUI-Builder ja nein ja (Wine)<br />

einen durchdachten Eindruck, bei<br />

der Dokumentation hakt es aber.<br />

Der versierte Anwender, der möglicherweise<br />

bereits in anderen<br />

Programmiersprachen entwickelt<br />

hat, steht nicht vor allzu großen<br />

Problemen, wenn er sich durch<br />

Mailinglisten wühlt, um eine Information<br />

zu erhalten. Einsteiger<br />

dürften dabei das Nachsehen haben:<br />

Sie benötigen eher eine vorstrukturierte<br />

und didaktisch motivierende<br />

Dokumentation.<br />

Eine weitere objektorientierte<br />

Alternative findet sich mit Blitz-<br />

Max. Ärgerlich nur, dass der Hersteller<br />

für Linux keine Demoversion<br />

bereitstellt. So muss man für<br />

stolze 80 Euro die Katze im Sack<br />

kaufen, einen GUI-Builder vom<br />

Hersteller gibt es auch nicht. Positiv<br />

fällt auf, dass sich auch um<br />

diesen Dialekt im Laufe der Zeit<br />

eine Community gebildet hat, die<br />

an Tutorials und Tools arbeitet.<br />

Ein Blick in die Foren und die<br />

Quellcodes der Beispiele hilft bei<br />

der Entscheidung. (agr) n<br />

INFO<br />

[1] Gambas: http:// gambas. sourceforge. net/<br />

de/ main. html<br />

[2] Offizielles Gambas-Wiki:<br />

http:// www. gambasdoc. org/ help? v3<br />

[3] Älteres Gambas-Buch:<br />

http:// de. wikibooks. org/ wiki/ Gambas<br />

[4] Neues Gambas-Buch (im Aufbau):<br />

http:// www. gambas-buch. de<br />

[5] Mailingliste Gambas-Users: https:// lists.<br />

sourceforge. net/ lists/ listinfo/ gambas-user<br />

[6] Deutsches Gambas-Forum:<br />

http:// www. gambas-club. de<br />

[7] Bezugsquelle Blitzmax: http:// www.<br />

blitzbasic. com/ Products/ _index_. php<br />

[8] Offizielles Blitzmax-Forum: http:// www.<br />

blitzbasic. com/ Community/ forums. php<br />

[9] Deutsches Blitzmax-Forum:<br />

http:// www. blitzforum. de/ forum/ index. php<br />

[10] Purebasic-Demoversionen:<br />

http:// purebasic. com/ download. php<br />

[11] Referenz-Handbuch Purebasic:<br />

http:// www. purebasic. com/ german/<br />

documentation/ PureBasic. pdf<br />

[12] Purebasic-Buch für Anfänger:<br />

http:// www. purearea. net/ pb/ download/<br />

PureBasicBuch. pdf<br />

[13] Deutsches Purebasic-Forum:<br />

http:// forums. purebasic. com/ german/<br />

24 11 | 12<br />

www.linux-user.de


Javascript<br />

SCHWERPUNKT<br />

Javascript, JQuery und das<br />

DOM-Modell im Zusammenspiel<br />

Blick<br />

aufs<br />

Objekt<br />

© Bernadg, sxc.hu<br />

Javascript hat sich zu einer der wichtigsten Programmiersprachen<br />

entwickelt. Wer die Grundlagen beherrscht, hat im Handumdrehen<br />

das Web 2.0 gemeistert. Peter Kreußel<br />

Bei den meisten Webanwendungen<br />

und dynamischen Webseiten<br />

sitzt die Programmlogik auf dem<br />

Server: Ein in PHP, Java, Python,<br />

oder Perl geschriebenes Skript erzeugt<br />

auf Benutzeranfragen zugeschnittene<br />

HTML-Seiten [1]. Doch<br />

die Browser enthalten mit ihren<br />

Javascript-Interpretern eine vollständige<br />

und dazu sehr leistungsfähige<br />

Laufzeitumgebung.<br />

Javascript-Programme reagieren<br />

auf Eingaben des Benutzers<br />

und greifen über eine DOM genannte<br />

API auf die geöffnete<br />

HTML-Seite zu. Diese Schnittstelle<br />

von Javascript zu HTML erlaubt<br />

es, Attribute für jedes Tag<br />

auf der Seite (Farbe, Größe oder<br />

Sichtbarkeit) zu ändern. Darüber<br />

hinaus bietet sie die Möglichkeit,<br />

Bereiche der Seite zu entfernen<br />

oder beliebige HTML-Elemente<br />

an jeder Stelle der Seite einzufügen<br />

(Abbildung A).<br />

A Die Javascript-Laufzeitumgebung, die über die DOM-Schnittstelle in beide<br />

Richtungen mit der HTML-Seite kommuniziert, reagiert auf Eingaben des Benutzers<br />

und verändert Inhalt und Eigenschaften von HTML-Tags.<br />

Alte Bekannte<br />

Abgesehen von der Objektorientierung<br />

ähnelt Javascript der Programmiersprache<br />

C. Viele andere<br />

Sprachen, von Java bis Perl, teilen<br />

diese Grundstrukturen (Schleifen,<br />

Bedingungen, Operatoren)<br />

ebenfalls. Darum fällt der Umstieg<br />

leicht, solange Sie nur die<br />

prozeduralen Elemente der Sprache<br />

einsetzt, was das Gliedern des<br />

Quellcodes in Routinen für bestimmte<br />

Aufgabe umfasst.<br />

Für kleinere Anwendungen<br />

funktioniert dies gut. Die für größere<br />

Programme unverzichtbare<br />

Objektorientierung setzt Javascript<br />

allerdings sehr eigenwillig<br />

um. Die zweite Hälfte des Artikels<br />

widmet sich deshalb dieser speziellen<br />

Variante des Kapselns von<br />

Daten und Vererbung.<br />

Die Wahl des Namens Javascript<br />

folgte eher Marketingüberlegungen<br />

als sachlichen Gründen: Außer<br />

einem Grundinventar, das<br />

Java ohnehin mit C und weiteren<br />

Sprachen teilt, übernimmt Javascript<br />

nur die Dot-Notation Objekt.Attribut.<br />

Anders als bei Java<br />

handelt es sich bei Javascript jedoch<br />

um keine streng objektorientierte<br />

Sprache.<br />

Außerdem integriert Javascript<br />

Elemente des funktionalen <strong>Programmieren</strong>s,<br />

die Java bis heute<br />

fehlen. Funktionale Programmier-<br />

Jquery 1.8.2,<br />

Beispieldateien<br />

LU/javascript/<br />

README<br />

Dieser Artikel führt in<br />

den Umgang mit der im<br />

Browser eingebauten<br />

Sprache Javascript ein.<br />

Er erläutert die Grundzüge<br />

der Sprache und<br />

gibt Beispiele für den<br />

Zugriff auf die geöffnete<br />

HTML-Seite über die<br />

DOM-Schnittstelle.<br />

GLOSSAR<br />

Objektorientierung: Objektorientierte<br />

Programmiersprachen<br />

bündeln<br />

in den namensgebenden<br />

Objekten Datenattribute<br />

und zugehörige<br />

Methoden zu einer logischen<br />

Einheit.<br />

www.linux-user.de<br />

11 | 12 25


SCHWERPUNKT<br />

Javascript<br />

LISTING 1<br />

sprachen basieren im Kern auf namenlosen,<br />

an Variablen gebundene<br />

Funktionen (anonyme Funktionen<br />

oder Lambda-Funktionen<br />

genannt), die Sie auch als Parameter<br />

für Funktionen verwenden<br />

dürfen. Einen vollständigen Überblick<br />

über sämtliche Sprachelemente<br />

von Javascript mit Ausnahme<br />

der Objektorientierung<br />

finden Sie im Web [2].<br />

Nachhilfe gefragt<br />

Kaum ein Programmierer spricht<br />

die DOM-API heute noch direkt<br />

an: Zu sehr unterscheidet sich die<br />

Implementation von Browser zu<br />

Browser, obwohl die Zahl der Unterschiede<br />

in den letzten Jahren<br />

abgenommen hat. Von solchen<br />

Problemen abgesehen, ist das<br />

DOM an sich gesehen unhandlich<br />

und sperrig. Deswegen nutzen die<br />

meisten Programmierer die Bibliothek<br />

JQuery [3] als Zwischenschicht.<br />

Dieser einführende Artikel<br />

konzentriert sich ausschließlich<br />

auf diesen Ansatz.<br />

01 <br />

02 <br />

03 $(function(){ //ausführen, wenn Anzeige fertig<br />

04 var colors = ["red", "green", "blue", "yellow"];<br />

05 var names =["rot", "grün", "blau", "gelb"];<br />

06 var sayings = {<br />

07 "rot":"Rot steht für die Liebe.",<br />

08 "grün":"Grün sind die Bäume im Mai.",<br />

09 "blau":"Auch roter Wein macht blau.",<br />

10 "gelb":"Das Angesicht des Neids ist gelb."<br />

11 };<br />

12<br />

13 for (var i in colors){<br />

14 var div = $("");<br />

15 div.css({"height":"50px", "width":"150px",<br />

"background-color":colors[i]});<br />

16 div.addClass("colorbox");<br />

17 div.html(names[i]);<br />

18 $("body").append(div);<br />

19 }<br />

20<br />

21 $(".colorbox").on("click", function(){<br />

22 var clicked = $(this);<br />

23 var farbe = clicked.text();<br />

24 alert(sayings[farbe]);<br />

25 });<br />

26 });<br />

27 <br />

Das erste kleine Übungsprogramm<br />

fügt mithilfe einer Schleife vier<br />

farbige Boxen in eine leere Seite<br />

ein. Als Beispiel für Interaktivität<br />

öffnet ein Klick auf eine der Boxen<br />

einen Dialog mit einem abhängig<br />

von der Farbe wechselnden Text.<br />

Die Zeilen aus Listing 1 zeigen viele<br />

Grundzüge der Javascript-Programmierung.<br />

In Abbildung B sehen<br />

Sie das Ergebnis.<br />

Zeile 1 bindet die JQuery-Bibliothek<br />

ein, die beim Manipulieren<br />

des HTML-Codes zum Einsatz<br />

kommt. Enthält das Tag<br />

ein Attribut src, verweist<br />

es auf eine externe Javascript-<br />

Datei. In unserem Fall deutet die<br />

URL auf die von Google gehostete<br />

Version von JQuery, was den<br />

Download der Bibliothek erspart.<br />

Der zweite Script-Tag enthält<br />

kein entsprechendes Attribut.<br />

Dafür umschließt er direkt eingebetteten<br />

Programmcode. Der Typ<br />

text/javascript verweist in beiden<br />

Fällen auf die Sprache der eingebetteten<br />

Skripte.<br />

Im Zeichen des Dollars<br />

Gleich als erstes Zeichen des<br />

Java script-Codes springt das Dollarzeichen<br />

ins Auge. Über dieses<br />

sprechen Sie alle Funktionen von<br />

JQuery an. Die erste Zeile erweist<br />

sich für Neulinge oft als große<br />

Hürde in Bezug auf das Verständnis:<br />

Sie öffnet den JQuery-Aufruf<br />

$(), der erst vor dem schließenden<br />

Script-Tag endet.<br />

Damit hat es folgende Bewandtnis:<br />

Der Browser führt Javascript-<br />

Code, auf den er beim Parsen der<br />

HTML-Seite stößt, immer sofort<br />

aus. Dabei passiert es jedoch mitunter,<br />

dass der Browser mit der<br />

Anzeige der Seite noch nicht fertig<br />

ist. Wenn ein Skript dann versucht,<br />

auf Elemente der Seite zuzugreifen,<br />

scheitert es.<br />

Um dieses Problem zu vermeiden,<br />

kapselt die Funktion $() denjenigen<br />

Teil des Codes, den JQuery<br />

erst dann ausführt, wenn der<br />

Browser mit der Anzeige des<br />

HTML-Codes fertig ist. In unserem<br />

Beispiel umfasst $() den gesamten<br />

Code. Genau genommen<br />

umschließt es den Code nicht<br />

selbst, es erhält vielmehr als Parameter<br />

eine Funktion ohne Namen<br />

(anonyme Funktion, Lambda-<br />

Funktion), die den eigentlichen<br />

Programmcode enthält.<br />

Abgesehen von der Tatsache,<br />

dass der von der anonymen Funktion<br />

umschlossene Code garantiert<br />

erst dann abläuft, wenn der<br />

Browser die Seite komplett aufgebaut<br />

hat, ändert sich nichts an<br />

dessen Funktionalität.<br />

Anonym und doch präsent<br />

Anonyme Funktionen gehören zu<br />

den unverzichtbaren Bestandteilen<br />

von Javascript. Event-Handler,<br />

die auf die Eingabe von Benutzern<br />

reagieren, funktionieren<br />

ohne sie nicht (siehe Listing 1,<br />

Zeile 22). „Funktion ohne Namen“<br />

ist hier ganz wörtlich zu<br />

verstehen: Nach dem Schlüsselwort<br />

function folgen gleich die Parameter<br />

in runden Klammern (im<br />

Beispiel leer, weil es keine Parameter<br />

gibt). Lambda-Funktion<br />

verhalten sich genau wie einfache<br />

Werte (Zahlen oder Strings): Sie<br />

dürfen sie einer Variablen zuweisen<br />

oder einer Funktion als Parameter<br />

übergeben.<br />

Die ersten zwei Zeilen der anonymen<br />

Funktion definieren Arrays,<br />

die mehrere Strings aufnehmen.<br />

Array[Index] greift auf den<br />

Inhalt zu. Als Schlüssel eines Arrays<br />

sind nur null sowie positive<br />

Ganzzahlen erlaubt. Container<br />

mit Strings als Schlüssel, auch als<br />

assoziative Arrays oder in Perl als<br />

Hashes bekannt, heißen in Javascript<br />

Objekt. Zum Definieren<br />

solcher Objekte kommt die<br />

JSON-Schreibweise zum Einsatz<br />

(„Javascript Object Notation“),<br />

die inzwischen auch viele andere<br />

Sprachen nutzen.<br />

In JSON umschließen geschweifte<br />

Klammern eine mit<br />

Komma separierte Liste von<br />

Schlüssel-Werte-Paaren (Listing<br />

1, Zeile 7). Der Zugriff erfolgt<br />

in der von Java bekannten<br />

Dot-Notation: Objekt.Attributname.<br />

26 11 | 12<br />

www.linux-user.de


Javascript<br />

SCHWERPUNKT<br />

Immer dann, wenn der Attributname<br />

in einer Variablen steckt,<br />

funktioniert die ebenfalls erlaubte<br />

Array-Schreibweise:<br />

Attribut hinzu. Als Parameter erwartet<br />

css() ein Javascript-Objekt<br />

mit Paaren aus Attributname und<br />

Wert. So entsteht im Beispiel das<br />

folgende Attribut:<br />

var Name = "Attribut";<br />

var Wert = Objekt[Name]<br />

style="height:50px; width:150px;U<br />

background-color: red"<br />

Variablen gilt es in Javascript übrigens<br />

immer mit dem Schlüsselwort<br />

var zu deklarieren – nur<br />

dann weist der Interpreter sie einem<br />

Gültigkeitsbereich zu. Auf<br />

diese Weise bleiben innerhalb von<br />

Funktionen deklarierte Variablen<br />

außerhalb der umschließenden<br />

Funktion unsichtbar.<br />

Der Beispielcode speichert in<br />

den zwei Arrays die Farbcodes der<br />

Boxen in für den Browser lesbarer<br />

englischer Form und, unter dem<br />

gleichen Array-Schlüssel, auf<br />

Deutsch. Das in der nächsten Zeile<br />

definierte Objekt enthält unter<br />

dem Schlüssel des deutschen<br />

Namens einen Satz, den das Programm<br />

bei einem Mausklick auf<br />

einen Kasten anzeigt.<br />

Aus dem Nichts<br />

Zunächst gilt es, die Kästen in die<br />

leere Seite einzufügen. Das geschieht<br />

in der Schleife (Listing 1,<br />

Zeile 14). Eine For-Schleife iteriert<br />

über die Elemente eines<br />

Containers. Die Schleifenvariable<br />

enthält in Javascript jedoch nicht<br />

die Werte, sondern die Schlüssel<br />

des Containers. Den Wert lesen<br />

Sie über Container[Variable] aus<br />

(Listing 1, Zeile 16 und Zeile 18).<br />

In der ersten Zeile der Schleife<br />

findet sich die zu JQuery gehörige<br />

Methode mit dem Dollarzeichen<br />

in ihrer einfachsten Form:<br />

Übergeben Sie $() HTML-Code,<br />

so erzeugt JQuery ein gültiges,<br />

aber noch nicht angezeigtes<br />

HTML-Fragment. Dabei ergänzt<br />

der Browser automatisch den fehlenden<br />

schließenden Div-Tag.<br />

JQuery kapselt das HTML-Fragment<br />

allerdings vor der Rückgabe<br />

noch in ein JQuery-Objekt.<br />

Zu diesen Methoden gehört<br />

css() in Zeile 16: Sie fügt dem<br />

eben erzeugten div ein Style-<br />

Die nächste Zeile bettet den deutschen<br />

Farbnamen aus dem aktuellen<br />

Schleifendurchlauf als Text<br />

in das Div-Element ein, die übernächste<br />

fügt noch eine Klasse<br />

zum Element hinzu:<br />

class="colorbox"<br />

Bei $(Selektor).append(Element)<br />

handelt es sich um die wohl am<br />

häufigsten genutzte Methode in<br />

JQuery. Besonders die Selektoren<br />

aus dem ersten Teil des Aufrufes<br />

erleichtern Entwicklern das Leben<br />

ungemein. Hier finden größtenteils<br />

die gleichen Ausdrücke<br />

Verwendung, mit denen auch<br />

CSS [4] Style-Definitionen an<br />

HTML-Elemente bindet: Ein Tag-<br />

Name greift alle Elemente mit<br />

dem Tag eines bestimmten Typs<br />

heraus, ein .Klassenname alle Elemente<br />

mit class="Klassenname", #Id<br />

das Element mit id="Id".<br />

Direkt an den $(Selektor) dürfen<br />

Sie beliebig viele Filter-Methoden<br />

wie first(), last() oder parent()<br />

anhängen. Die ganze Bandbreite<br />

zeigt die übersichtliche JQuery-<br />

Dokumentation ([5],[6]). Mit diesen<br />

Selektoren picken Sie selbst<br />

aus komplexen HTML-Seiten jedes<br />

Element mit einer einzigen<br />

Codezeile heraus, die auf allen<br />

gängigen Browsern zuverlässig<br />

funktioniert – das macht JQuery<br />

so beliebt.<br />

Im Beispiel-Skript genügt ein<br />

einfacher Selektor $("body"), der<br />

auf den einzigen Body-Tag der<br />

Seite passt. Die Methode<br />

append(div) fügt den inzwischen<br />

mit einem Style, Text und dem<br />

Klassenattribut colorbox versehenen<br />

Div-Tag am Ende des Seitenkörpers<br />

ein. In vier Schleifendurchläufen<br />

über das Array colors<br />

entstehen also die vier unterschiedlich<br />

gefärbten Boxen.<br />

Ereignisreich<br />

Nun fehlt nur noch der Event-<br />

Handler, der beim Klick auf eine<br />

Box einen Dialog mit dem zur<br />

Farbe passenden Eintrag aus dem<br />

Objekt sayings öffnet: $(".colorbox")<br />

wählt alle Tags der Klasse<br />

colorbox aus, also alle eben eingefügten<br />

Divs.<br />

Zum Setzen von Event-Handlern<br />

bringt die JQuery die Methode<br />

on() mit, die – wie schon die<br />

Selektoren – Eigenheiten der<br />

Browser ausbügelt. Sie erwartet<br />

als ersten Parameter den Namen<br />

des Events, hier click, und als<br />

zweiten eine Lambda-Funktion,<br />

die bei Eintreten des Events abläuft.<br />

Der Lambda-Funktion gibt<br />

JQuery ein Objekt mit, das viele<br />

Informationen über das aktuelle<br />

Event enthält [7].<br />

Für das Beispiel spielt das allerdings<br />

keine Rolle. Es genügt zu<br />

wissen, dass Javascript-Event-<br />

LISTING 2<br />

01 var Greeter = function(who){<br />

02 var toGreet = who;<br />

03<br />

04 this.sayHello = function()<br />

{<br />

05 alert("Hello, "+ toGreet<br />

+ "!");<br />

06 }<br />

07 };<br />

08<br />

09 var greeter1 = new<br />

Greeter("World");<br />

10 var greeter2 = new<br />

Greeter("John");<br />

11 greeter1.sayHello(); //-><br />

Hello World!<br />

12 greeter2.sayHello(); //-><br />

Hello John!<br />

B Was wie ein simpler,<br />

statischer Inhalt aussieht,<br />

hat der Browser<br />

per Javascript dynamisch<br />

in eine leere<br />

Seite geschrieben. Auf<br />

einen Mausklick reagieren<br />

die farbigen<br />

Felder außerdem mit<br />

einem zur Farbe passenden<br />

Text-Popup.<br />

www.linux-user.de<br />

11 | 12 27


SCHWERPUNKT<br />

Javascript<br />

C Obwohl Firefox<br />

ab Version 4 von sich<br />

aus eine Javascript-<br />

Konsole (oben) zum<br />

Testen kurzer Codeblöcke<br />

mitbringt, leistet<br />

das Addon Firebug<br />

(unten) wesentlich<br />

mehr, zum Beispiel<br />

über einen Debugger,<br />

der das Programm auf<br />

Wunsch anhält.<br />

LISTING 3<br />

01 var Greeter = function(who){<br />

02 this.toGreet = who;<br />

03 this.sayHello = function(){<br />

04 alert("Hello, "+ this.toGreet + "!");<br />

05 }<br />

06 };<br />

07<br />

08 var extendedGreeter = function() {<br />

09 this.bavarianHello = function(){<br />

10 alert("Pfiat' Di," + this.toGreet + "!");<br />

11 }<br />

12 };<br />

13 extendedGreeter.prototype = new Greeter("Vroni");<br />

14 greeter3 = new extendedGreeter('Vroni');<br />

15 greeter3.sayHello(); //-> Hello, Vroni!<br />

16 greeter3.bavarianHello(); //-> Pfiat' Di, Vroni!<br />

Handler im Kontext jenes DOM-<br />

Elements ablaufen, welches das<br />

Event auslöst. Hinter this verbirgt<br />

sich ein Zeiger auf das aktuelle<br />

Objekt. Er deutet hier also<br />

auf die angeklickte farbige Box.<br />

Um das Element in this zu bearbeiten,<br />

rufen Sie die Grundfunktion<br />

$() mit this als Parameter auf<br />

und binden das Resultat an die<br />

Variable clicked. Nun haben Sie<br />

die Möglichkeit, mit clicked.Methode()<br />

jede Funktion von JQuery<br />

auf die angeklickte Box anzuwenden.<br />

Im vorliegenden Fall kommt<br />

text() zum Einsatz, das Sie bereits<br />

beim Setzen des Textes kennen<br />

gelernt haben.<br />

Parameterlos aufgerufen gibt es<br />

den im Tag enthaltenen Text zurück,<br />

im Beispiel also den deutschen<br />

Farbnamen. Unter diesem<br />

Schlüssel hält das Objekt sayings<br />

für jede Farbe einen Satz bereit.<br />

Mittels sayings[farbe] übergeben<br />

Sie diesen an die Methode alert()<br />

des Browsers, der ein Dialogfeld<br />

mit dem zur Farbe passenden<br />

Satz öffnet.<br />

Die höheren Weihen<br />

Private und öffentliche Attribute,<br />

Objekte einer Klasse in beliebig<br />

vielen Instanzen sowie Vererbung:<br />

All das lässt sich in Javascript<br />

umsetzen. Allerdings funktioniert<br />

das völlig anders als in<br />

klassischen objektorientierten<br />

Sprachen. Diese erzeugen Klassen<br />

mit dem class-Schlüsselwort; new<br />

sorgt für Objektinstanzen, die<br />

alle die gleichen Methoden und<br />

Datenattribute aus der Klassendefinition<br />

enthalten. Javascript<br />

kennt ein new-Schlüsselwort, doch<br />

für class springt das für eine ganz<br />

andere Rolle bekannte Schlüsselwort<br />

function ein.<br />

In den letzten beiden Zeilen von<br />

Listing 2 kommt die Methode<br />

sayHello() zweier unterschiedlicher<br />

Instanzen von Greeter zum<br />

Einsatz. Beide Instanzen kapseln<br />

verschiedene, von außen jeweils<br />

nicht zugängliche Werte für die<br />

Begrüßung – eine klassische Objektorientierung,<br />

fast wie aus<br />

dem Lehrbuch.<br />

Um das kurze Codebeispiel auszuführen,<br />

müssen Sie es übrigens<br />

nicht in eine Datei schreiben und<br />

diese im Browser öffnen: Alle modernen<br />

Browser bringen eine<br />

Konsole mit, die direkt eingegebenen<br />

Code zum Testen ausführt<br />

(Abbildung C). Bei Firefox ab Version<br />

4 öffnen Sie diese über<br />

[Umschalt]+[Strg]+[K].<br />

Besser als die in Firefox eingebaute<br />

Konsole ist allerdings nach<br />

wie vor das Addon Firebug [8], das<br />

einen für größere Projekte hilfreichen<br />

Debugger integriert. Er hält<br />

das Programm an markierten Stellen<br />

an und zeigt den Wert aller Variablen.<br />

Mittels console.log(Wert)<br />

geben Sie einen Wert für die Fehlersuche<br />

auf der Konsole aus. Bei<br />

Objekten zeigt das Addon Attribute<br />

in JSON-Notation an.<br />

Funktionell<br />

Funktionen sind in Javascript immer<br />

zugleich Objekte. Genau wie<br />

bei in JSON-Schreibweise definierten<br />

Objekten haben Sie die<br />

Möglichkeit, ihnen mit Objektname.Attributname<br />

neue Attribute zuzuweisen.<br />

Zum Auslesen kommt<br />

die gleiche Notation zum Einsatz.<br />

Dass diese Attribute sowohl einfache<br />

Werte als auch Funktionen<br />

aufnehmen (im Beispiel sayHello()),<br />

ergibt sich ganz natürlich<br />

aus der Tatsache, dass Javascript<br />

beide Typen grundsätzlich gleich<br />

behandelt. Attribute vom Typ<br />

„Funktion“ verhalten sich genau<br />

wie Methoden in anderen objektorientierten<br />

Sprachen:<br />

Objekt.Name(Parameter)<br />

Das Schlüsselwort this deutet auf<br />

das Objekt, in dem es steht. this.<br />

sayHello setzt also einen Wert für<br />

das Attribut sayHello der Funktion.<br />

sayHello() verhält sich dann in<br />

mit new Greeter gebildeten Objektinstanzen<br />

wie eine öffentliche<br />

Methode in Java-Objekten.<br />

Etwas mehr Kopfzerbrechen bereitet<br />

die Zeile var toGreet = who;.<br />

Vorab: In Javascript dürfen innerhalb<br />

einer anderen Funktion defi-<br />

28 11 | 12<br />

www.linux-user.de


Javascript<br />

SCHWERPUNKT<br />

nierte Funktionen (innere Funktionen)<br />

stets auf Variablen der sie<br />

umgebenden Funktion zugreifen,<br />

die äußere Funktion aber natürlich<br />

nicht auf die der inneren: Das<br />

würde zu einem einzigen durchgängigen<br />

Variablen-Gültigkeitsbereich<br />

führen.<br />

Die beiden Aufrufe von greeter1.<br />

sayHello() und greeter2.sayHello()<br />

zeigen, dass der Wert aus dem Parameter<br />

who in toGreet gespeichert<br />

bleibt, obwohl die Funktion Greeter<br />

schon gelaufen ist.<br />

Das liegt daran, dass an Variablen<br />

gebundene Funktion in Javascript<br />

sozusagen ihre Laufzeitumgebung<br />

mit einpacken. Konkret<br />

heißt das: Alle Variablen aus der<br />

Umgebung von sayHello, auf die<br />

die Funktion zugreift, verweilen<br />

im Speicher, solange die Funktion<br />

selbst an eine Variable gebunden<br />

bleibt. Hierfür zeichnen greeter1<br />

und greeter2 verantwortlich, die<br />

sayHello() als Attribut enthalten.<br />

Diese Technik nennt sich Closure<br />

(Einschluss).<br />

Das Prinzip des Closure ist an<br />

sich einfach: Der Javascript-Interpreter<br />

geht den Code vor dem<br />

Ausführen einmal durch und notiert<br />

sich, welche Stellen des Programms<br />

auf welche Variablen zugreifen.<br />

Bei der Frage, wie lange<br />

Variablen im Speicher bleiben,<br />

gilt die Regel: Alles, was noch gebraucht<br />

wird, bleibt im Speicher.<br />

Eltern und Kind<br />

Nun bleibt nur noch das Schlüsselwort<br />

new zu erläutern, das aus<br />

der Funktionsdefinition Greeter<br />

die zwei Objektinstanzen greeter1<br />

und greeter2 macht, die verschiedene<br />

Werte für toGreet beherbergen.<br />

new Funktion() bewirkt zweierlei:<br />

Es erzeugt ein Objekt und<br />

es führt function() aus.<br />

Dabei sind function() und das<br />

Objekt identisch. Die Funktion<br />

verändert sich also bei der Attributzuweisung<br />

this.Attributname<br />

selbst. Nach dem Ausführen der<br />

Funktion bindet der Aufruf new<br />

das Funktionsobjekt (das mit der<br />

Funktion identische Objekt) an<br />

die Variable greeter1 oder greeter2,<br />

gerade so, als würde die Funktion<br />

mit return this enden.<br />

Objektinstanzen aus einer gemeinsamen<br />

Definition entstehen<br />

also in Javascript durch den Aufruf<br />

new Funktion(Parameter). Innerhalb<br />

der in Funktionsvariable gespeicherten<br />

Funktion verhalten<br />

sich Variablen wie private Datenfelder<br />

oder – wenn ihr Inhalt eine<br />

Funktion ist – wie private Methoden.<br />

Dagegen erzeugt this.Attributname<br />

öffentlich zugängliche<br />

Attribute oder Methoden.<br />

Schwieriges Erbe<br />

Stellen Sie sich vor, Sie haben<br />

eine Klasse mit fünf Methoden<br />

definiert und möchten nun eine<br />

neue Klasse bilden, die vier davon<br />

übernimmt, die fünfte aber verändert:<br />

Ein klarer Fall für Vererbung.<br />

Wie das in Javascript geht,<br />

demonstriert Listing 3. Darin erhält<br />

die von Greeter() abgeleitete<br />

Klasse den bairischen Gruß.<br />

Der Code definiert die zwei<br />

Funktionen Greeter und extended-<br />

Greeter. In Greeter haben wir im<br />

Vergleich zur früheren Version<br />

toGreet in ein öffentliches Attribut<br />

verwandelt. extendedGreeter()<br />

definiert eine Methode bavarian-<br />

Hello(). Sie greift dabei auf das in<br />

Greeter definierte Attribut toGreet<br />

zu. Das funktioniert, weil die erste<br />

Zeile nach den Funktionsdefinitionen<br />

Greeter und extendedGreeter<br />

kombiniert. Diese Zeile bindet<br />

eine Instanz von Greeter an das<br />

prototype-Attribut der Definition<br />

von extendedGreeter.<br />

Alle Javascript-Objekte enthalten<br />

ohne explizite Definition ein<br />

prototype-Attribut mit fester Aufgabe:<br />

Alle mit new extendedGreeter()<br />

erzeugten Instanzen erben<br />

die Attribute des an prototype gebundenen<br />

Objekts.<br />

Allerdings gilt dies nur für die<br />

öffentlichen, mit this.Attributname<br />

definierten Attribute. Darum gilt<br />

es die Klasse Greeter zu verändern,<br />

um diese zu erweitern. Abbildung<br />

D zeigt einen Object-<br />

Dump der Firebug-Konsole mit<br />

der geerbten Methode sayHello()<br />

sowie dem neu hinzugefügten<br />

bava rianHello().<br />

Kollateralschaden<br />

Ein Vererben privater Attribute<br />

funktioniert in Javascript nur<br />

über Umwege – mit unterschiedlichen<br />

Auswirkungen auf die Performance<br />

([9],[10]). Dass keine<br />

Kombination der beiden mächtigsten<br />

Features – dem Erzeugen<br />

von Objektinstanzen mit new und<br />

einer Closure sowie dem Vererben<br />

auf Basis des Prototype-Attributs<br />

– möglich ist, hat der Sprache viel<br />

Kritik eingebracht. Die Objektorientierung<br />

in Javascript wirkt unausgegoren.<br />

Sie ist, wie viele Webstandards,<br />

vom Browser-Krieg<br />

zwischen Netscape und Microsoft<br />

gezeichnet. (agr) n<br />

D Ein Dump des<br />

Objekts greeter3 in<br />

der Firebug-Konsole<br />

(zweite, grüne Zeile<br />

links) zeigt, dass das<br />

Vererben aus dem Beispiel<br />

funktioniert: Das<br />

Objekt enthält das<br />

Attribut toGreet sowie<br />

die beiden Methoden<br />

bavarianHello() und<br />

sayHello().<br />

INFO<br />

[1] Programmiersprachen-Shootout: http:// shootout. alioth. debian. org/ u32/ which-p<br />

rogramming-languages-are-fastest. php<br />

[2] Javascript-Überblick: http:// www. w3schools. com/ js/ default. asp<br />

[3] JQuery: http:// jquery. com<br />

[4] Cascading Style Sheets (CSS):<br />

http:// de. wikipedia. org/ wiki/ Cascading_Style_Sheets<br />

[5] Selektoren: http:// api. jquery. com/ category/ selectors/<br />

[6] Traversing: http:// api. jquery. com/ category/ traversing/<br />

[7] Event Object: http:// api. jquery. com/ category/ events/ event-object/<br />

[8] Firebug: https:// addons. mozilla. org/ de/ firefox/ addon/ firebug/<br />

[9] Power Constructor: http:// www. crockford. com/ javascript/ inheritance. html<br />

[10] Closure-basierte Vererbung: http:// www. ruzee. com/ blog/ 2008/ 12/ javascript-in<br />

heritance-via-prototypes-and-closures<br />

www.linux-user.de<br />

11 | 12 29


SCHWERPUNKT<br />

Grundkurs Git<br />

Nicht nur für Quellcode:<br />

Versionsverwaltung mit Git<br />

Verteilt<br />

verwalten<br />

© spectral, 123RF<br />

Arbeiten mehrere Personen zusammen an Quelltexten oder Dokumenten,<br />

so artet das schnell in Gewurstel aus. Hier schafft Git schnell und zuverlässig Abhilfe: Die verteilte<br />

Versionsverwaltung sorgt mit minimalem Aufwand für die Integrität und Konsistenz der Daten. Falko Benthin<br />

README<br />

Die verteilte Versionsverwaltung<br />

Git erleichtert<br />

die Zusammenarbeit<br />

mehrerer<br />

Entwickler an einem<br />

Projekt durch raffinierte<br />

Funktionen und die<br />

Möglichkeit zum zentralen<br />

Abgleich lokaler Repositories.<br />

Dieser Artikel<br />

führt Sie in die<br />

grundlegenden Konzepte<br />

von Git ein.<br />

Dokumente oder Quelltexte, wie<br />

etwa Entwürfe für Broschüren<br />

oder Arbeitspläne, werden oft<br />

von mehreren Benutzern genutzt<br />

und bearbeitet. Oft liegen sie<br />

dazu auf einem Fileserver, und<br />

die Nutzer arbeiten mit lokalen<br />

Kopien. Unterschiede zwischen<br />

einzelnen Dokumenten gilt es<br />

manuell zu suchen, und oft bleibt<br />

unklar, ob es bereits neuere Versionen<br />

gibt oder wer welche Änderungen<br />

vorgenommen hat. Eine<br />

Versionsverwaltung, wie man sie<br />

in vielen Software-Projekten antrifft,<br />

hilft dem Gewurstel ab. Ein<br />

besonders leistungsfähiger Vertreter<br />

dieser Gattung ist Git [1].<br />

A Git interessiert beim Initialisieren nicht, ob ein Verzeichnis<br />

leer ist oder bereits Dateien enthält.<br />

Git wurde 2005 von Linus Torvalds<br />

entwickelt, um damit den<br />

Quellcode des Kernels zu verwalten.<br />

Dazu musste es einer ganzen<br />

Reihe von Anforderungen genügen:<br />

Es sollte schnell sein, mehrere<br />

parallele Entwicklungszweige<br />

unterstützen und Daten zwischen<br />

verschiedenen Repositories austauschen.<br />

Die Datenintegrität<br />

musste sich überprüfen lassen,<br />

und einmal im Repository abgelegte<br />

Datenobjekte durften sich<br />

nicht im Nachhinein verändern<br />

lassen. Gegenüber anderen Versionsverwaltungen<br />

zeichnet sich<br />

Git durch leichte Erlernbarkeit,<br />

Datenredundanz über lokale Repositories,<br />

geringen Speicherverbrauch<br />

und kostenlose Services<br />

wie Github oder Gitorious aus.<br />

Installation<br />

Bei Git handelt es sich um ein<br />

Kommandozeilenprogramm, das<br />

es für Linux, Mac OS X, Solaris<br />

und MS Windows gibt. Mittlerweile<br />

existieren jedoch auch verschiedene<br />

grafische Benutzeroberflächen,<br />

darunter Gitk, Gitcola<br />

[2], Smartgit [3], Giggle [4]<br />

oder Gitg [5] sowie Weboberflächen<br />

wie Gitweb, Cgit [6] oder<br />

Gitlab [7].<br />

Sie finden Git in den Repositories<br />

der meisten Distributionen<br />

und können es bequem über die<br />

entsprechenden Paketwerkzeuge<br />

installieren. Legen Sie Wert auf<br />

eine tagesaktuelle Version, greifen<br />

Sie zu den Quelltexten des Git<br />

Source Repositorys auf Github [8]<br />

und installieren die Versionsverwaltung<br />

als Root mit dem Dreischritt<br />

aus Listing 1.<br />

Konfigurieren<br />

Git bietet reichhaltige Möglichkeiten<br />

zur systemweiten sowie nutzer-<br />

und projektspezifischen Konfiguration.<br />

Systemweite Einstellungen<br />

liegen in /etc/gitconfig,<br />

32 11 | 12<br />

www.linux-user.de


Grundkurs Git<br />

SCHWERPUNKT<br />

Nutzereinstellungen in der Datei<br />

~/.gitconfig im Home-Verzeichnis<br />

des jeweiligen Anwenders. Konfigurationen,<br />

die nur ein einzelnes<br />

Projekt betreffen, lagert Git in<br />

der Datei .git/config des jeweiligen<br />

Repositorys.<br />

Dieser Artikel geht nur auf die<br />

wichtigsten Einstellungen ein.<br />

Möchten Sie darüber hinaus Farben,<br />

den Editor für Commit- und<br />

Tag-Nachrichten, Commit-Vorlagen,<br />

Diff- und Merge-Konfigurationen<br />

und Ähnliches an Ihre Vorlieben<br />

anpassen, empfiehlt sich<br />

die Lektüre der Manpage und der<br />

Dokumentation [9] zu Git.<br />

Zu den wohl wichtigsten Einstellungen<br />

gehört es, Git mit Ihrem<br />

Namen und Ihrer E-Mail-<br />

Adresse bekannt zu machen (Listing<br />

2, Zeile 1 und 2). Die beiden<br />

Informationen nutzt Git später,<br />

um Schnappschüsse („Commits“)<br />

einem Nutzer zuzuordnen. Die<br />

Option --global bedeutet, dass die<br />

Einstellungen standardmäßig für<br />

alle Git-Repositories eines Nutzers<br />

gelten. Sollen Name oder<br />

E-Mail-Adresse für ein spezielles<br />

Projekt anders lauten, müssen Sie<br />

git config im jeweiligen Repository<br />

nur ohne --global ausführen.<br />

Setzen Anwender ein Commit<br />

ab, ruft Git in der Regel den Standard-Editor<br />

des Systems auf und<br />

greift auf Vi zurück, falls kein<br />

Standard-Editor eingerichtet wurde.<br />

Da Vi einerseits oft auch als<br />

Standard-Editor dient und es andererseits<br />

viele Anwender gibt,<br />

die Vi nicht mögen, bietet Git die<br />

Möglichkeit, den Editor frei zu<br />

wählen (Listing 2, Zeile 3).<br />

# ./configure<br />

# make all doc<br />

# make install install-doc<br />

install-html<br />

LISTING 1<br />

Git im Einsatz<br />

Git lässt sich im Alltag recht einfach<br />

anwenden. Um ein Projekt,<br />

egal, ob Quelltext oder Bürodokument,<br />

mit der Versionsverwaltung<br />

bekannt zu machen, initialisieren<br />

Sie Git im entsprechenden<br />

Verzeichnis mittels des Aufrufs<br />

git init. Git legt daraufhin ein<br />

verstecktes Verzeichnis ./git an,<br />

das es von nun an nutzt, um das<br />

Projekt und seine Entwicklung zu<br />

verfolgen (Abbildung A). Beim<br />

Initialisieren muss das Verzeichnis<br />

noch keine Dateien enthalten.<br />

Um den Status eines Repositorys<br />

einzusehen, nutzen Sie den<br />

Befehl git status. Er listet auf,<br />

welche Dateien Git noch nicht<br />

beobachtet, welche sich seit dem<br />

letzten Commit geändert haben<br />

und welche Dateien in der „Staging<br />

Area“ liegen. Abbildung B<br />

zeigt ein frisch initialisiertes Projekt,<br />

in dem Git noch keine Dateien<br />

verfolgt.<br />

Die Staging Area stellen Sie sich<br />

am besten als Bereich vor, in dem<br />

sich diejenigen Dateien aufhalten,<br />

die mit dem nächsten Commit<br />

ihren Weg in den Git-<br />

Schnappschuss finden sollen.<br />

Ausgewählte Dateien, Verzeichnisse<br />

oder das ganze Projekt befördern<br />

Sie mit git add Datei oder<br />

git add . in die Staging Area. Der<br />

Status wechselt darauf von untracked<br />

zu new file (Abbildung C).<br />

Commits<br />

Möchte ein Autor seinen aktuellen<br />

Arbeitsstand in einem<br />

Schnappschuss festhalten, kann<br />

er das mit git commit erledigen,<br />

LISTING 2<br />

# git config --global user.name<br />

"Vorname Nachname"<br />

# git config --global user.email<br />

meine@email.tld<br />

# git config --global core.<br />

editor Wunscheditor<br />

nachdem er alle betroffenen Dateien<br />

in die Staging Area verschoben<br />

hat. Neben den Dateien und<br />

Änderungen hält Git bei einem<br />

Commit auch die Namen und<br />

E-Mail-Adressen von Autor und<br />

Committer sowie Erstellungsund<br />

Commit-Datum fest.<br />

Nach dem Absetzen des Befehls<br />

öffnet Git einen (vorher eingestellten)<br />

Editor und erlaubt es,<br />

eine Commit-Nachricht einzugeben.<br />

Dazu übernehmen Sie entweder<br />

den Git-Vorschlag, der alle Änderungen<br />

seit dem letzten Commit<br />

enthält – dazu müssen Sie<br />

lediglich die Rautezeichen an den<br />

Zeilenanfängen entfernen – oder<br />

Sie geben eine eigene Nachricht<br />

ein (Abbildung D, nächste Seite).<br />

Aus der Commit-Nachricht sollte<br />

hervorgehen, was verändert<br />

wurde. Da Git die Commits bei einer<br />

Log-Abfrage kurz und knackig<br />

präsentiert, sollte die erste Zeile<br />

stets eine Zusammenfassung ent-<br />

B Gits Status-Ausgabe<br />

zeigt Kandidaten für<br />

die Staging Area an.<br />

C Der nächste Commit<br />

betrifft zahlreiche<br />

neue Dateien.<br />

www.linux-user.de<br />

11 | 12 33


SCHWERPUNKT<br />

Grundkurs Git<br />

D Commit-Nachrichten<br />

dürfen Sie in<br />

Ihrem Lieblingseditor<br />

verfassen.<br />

mitID) oder Dateien (Dateiname)<br />

anzeigen und so Unterschiede<br />

schnell aufspüren. Das erweist<br />

sich vor allem dann als hilfreich,<br />

wenn beim Bugfixing nur wenige<br />

und auf den ersten Blick schwer<br />

zu findende Änderungen vorgenommen<br />

wurden.<br />

E Git erlaubt viele<br />

gleichzeitige Branches.<br />

Ein Asterisk<br />

zeigt den aktuellen<br />

„Spielplatz“ an.<br />

halten. Das gilt vor allem, wenn<br />

die Commit-Nachricht länger ausfällt.<br />

Vor allem, wenn mehrere<br />

Personen zusammenarbeiten, helfen<br />

kurze Anmerkungen, warum<br />

etwas geändert wurde und ob an<br />

irgendeiner Stelle Probleme oder<br />

Fehler auftraten beziehungsweise<br />

zu erwarten sind.<br />

Den ersten Commit nennt man<br />

den initialen Commit. Alle weiteren<br />

sollten Sie so benennen, dass<br />

die Projektbeteiligten sofort sehen,<br />

was der Commit bewirkt.<br />

Nachrichten wie kleine Bugs gefixt<br />

sagen nichts Sinnvolles aus – besser<br />

wäre beispielsweise Speicherzugriffsfehler<br />

in bitshift.cpp behoben.<br />

Oftmals – gerade beim verteilten<br />

Arbeiten, wo möglichst alle Projektmitglieder<br />

den aktuellen Stand<br />

ohne Verzögerungen erhalten sollten<br />

– enthält ein Commit nur kleine<br />

Änderungen. Genügt eine solche<br />

kurze Commit-Nachricht,<br />

können Sie diese direkt im Aufruf<br />

mit angeben, ohne dazu erst den<br />

Editor aufzurufen (Listing 3).<br />

Branches<br />

Erweitert man eine bestehende<br />

Anwendung um neue Funktionen,<br />

dann besteht immer die Gefahr,<br />

dass funktionierende Teile in Mitleidenschaft<br />

gezogen werden. Git<br />

raubt dem Worst-Case-Szenario<br />

den Schrecken, denn es erlaubt<br />

verschiedene Zweige („Branches“)<br />

eines Projektes. Ein solcher Zweig<br />

lässt sich mit einem Spielplatz<br />

vergleichen, auf dem sich neue<br />

Funktionen ausprobieren lassen,<br />

ohne schon bestehende Teile einer<br />

Anwendung zu gefährden.<br />

Einen neuen Branch legen Sie<br />

mit dem Befehl git branch Name an.<br />

Es dürfen beliebig viele parallele<br />

Zweige bestehen, zwischen denen<br />

Sie mit git checkout Name wechseln.<br />

Der Befehl git branch ohne<br />

Angabe eines Namens zeigt alle<br />

existierenden Zweige an. Den aktuellen<br />

„Spielplatz“ markiert Git<br />

mit einem Sternchen (Abbildung<br />

E) – hier erfolgende Commits<br />

betreffen nur diesen Branch.<br />

Änderungen in einem Zweig beeinflussen<br />

die anderen Branches<br />

in keiner Weise. Haben Sie das<br />

neu zu implementierende Feature<br />

fertiggestellt und getestet, führen<br />

Sie den betreffenden Zweig über<br />

git merge Name mit dem Master zusammen.<br />

Branches, die Sie nicht<br />

mehr brauchen, entfernen Sie<br />

mittels git branch -d Name. Möchten<br />

Sie einen Zweig umbenennen,<br />

erledigen Sie das mit dem Kommando<br />

git branch -m NeuerName.<br />

Mittels git diff lassen sich Unterschiede<br />

zwischen Zweigen<br />

(Branch1..Branch2), Commits (Com-<br />

Projekthistorien<br />

Ein Projekt wächst, die Commits<br />

reihen sich aneinander, ein Meilenstein<br />

ist erreicht – jetzt muss<br />

ein Changelog her. Statt im Gedächtnis<br />

zu kramen, was seit dem<br />

letzten Meilenstein erreicht wurde,<br />

fragen Sie dazu einfach Git –<br />

vorausgesetzt, Sie haben auch<br />

immer aussagekräftige Commit-<br />

Nachrichten erstellt.<br />

So plaudert git log aus, was bei<br />

jedem Commit passierte, wer dafür<br />

verantwortlich war und wann<br />

eine Änderung ins Projekt gespielt<br />

wurde. Die Ausgabe des Log<br />

fällt je nach Wunsch kurz und<br />

knackig oder auch sehr ausführlich<br />

aus. Rufen Sie den Befehl<br />

ohne weitere Parameter auf, gibt<br />

Git den eindeutigen Hash eines<br />

Commits, Autor, Datum und die<br />

Commit-Message aus. Die Option<br />

--graph visualisiert einzelne Branches<br />

(Abbildung F). Der Parameter<br />

--oneline beschränkt die Ausgabe<br />

auf den Beginn des Commit-<br />

Hashes und die Commit-Nachricht,<br />

wobei er nicht mehr als eine<br />

Zeile verwendet.<br />

Schäden begrenzen<br />

Ein kleines Szenario: Sie finden<br />

sich plötzlich nach mehreren Tagen<br />

Entwicklung unter Zeitdruck<br />

und akutem Schlafmangel in „dreckigem“,<br />

zurechtgefrickelten Code<br />

wieder, der nicht wie gedacht<br />

funktioniert. Beim Wegtragen des<br />

Mülls durchzuckt Sie plötzlich die<br />

vielversprechende Idee, die alle<br />

Probleme lösen könnte. Die erfolglosen<br />

Ansätze, die Fehler von<br />

Hand wieder aus dem Code zu fischen,<br />

sind wohl aussichtslos. Ent-<br />

LISTING 3<br />

$ git commit -m "MPI_Type_create_struct für LineHistogram hinzugefügt"<br />

34 11 | 12<br />

www.linux-user.de


Grundkurs Git<br />

SCHWERPUNKT<br />

weder fangen Sie also noch einmal<br />

von vorne an – oder nutzen die<br />

Vorteile der Versionsverwaltung<br />

und machen ein Rollback auf die<br />

letzte funktionierende Revision.<br />

Sind Sie absolut sicher, dass die<br />

letzten Stunden für die Katz waren,<br />

stoßen Sie nun mit git reset<br />

--hard CommitID ein „hartes“ Rollback<br />

an. Die Commit-ID bezeichnet<br />

den 40-stelligen Hash-Wert<br />

des gewünschten Schnappschusses.<br />

Die Hashes unterscheiden<br />

sich in der Regel so weit, dass Git<br />

meist die ersten sieben Stellen genügen,<br />

um einen Commit eindeutig<br />

zu identifizieren. Mit einem<br />

harten Reset setzen Sie alle Dateien<br />

im Arbeitsverzeichnis und<br />

in der Staging Area zurück.<br />

Ersetzen Sie --hard durch --soft,<br />

setzt Git den angegebenen Commit<br />

auf die Version „HEAD“, was<br />

bedeutet, dass er als der letzte<br />

Commit gilt. Dabei bleiben alle<br />

Änderungen im Arbeitsverzeichnis<br />

und in der Staging Area erhalten.<br />

Ob ein Soft-Reset bei wirren<br />

Code-Verstrickungen sinnvoll<br />

und hilfreich ist, muss jeder für<br />

sich entscheiden.<br />

Eine andere Möglichkeit eines<br />

Rollbacks bietet git checkout, das<br />

Sie schon vom Wechseln der<br />

Branches kennen. Für einen Rollback<br />

benennen Sie den Master-<br />

Branch um, holen mit git checkout<br />

CommitID den letzten brauchbaren<br />

Schnappschuss und machen diesen<br />

mittels git checkout -b master<br />

zum neuen Master. Bei git checkout<br />

-b Name handelt es sich um<br />

eine Kurzform für git branch Name<br />

und git checkout Name (Abbildung<br />

G). Der Vorteil bei dieser<br />

Variante des Rollbacks: Sämtliche<br />

Änderungen und eventuell verwendbaren<br />

Ideen bleiben zunächst<br />

erhalten – Sie können sie<br />

später immer noch löschen.<br />

Mit git checkout lassen sich<br />

nicht nur komplette Commits zurücksetzen,<br />

sondern auch einzelne<br />

Dateien. Dazu geben Sie lediglich<br />

zusätzlich den Dateinamen<br />

an. So stellt das Kommando git<br />

checkout af4673fa6 main.cpp den<br />

Zustand der Revision af4673fa6<br />

der Datei main.cpp wieder her.<br />

Verteilte Versionen<br />

Git wurde von Beginn an als verteilte<br />

Versionsverwaltung entworfen,<br />

was bedeutet, dass mehrere<br />

Beteiligte gleichzeitig an einem<br />

Projekt arbeiten können. Im<br />

Unterschied zu einer zentralen<br />

Versionsverwaltung, die für Logs<br />

und Commits eine Verbindung<br />

zum Repository auf dem Server<br />

braucht, laufen Git-Repositories<br />

lokal und lassen sich mit einem<br />

Server abgleichen, sobald eine<br />

Netzwerkverbindung besteht.<br />

Da der Server nur die Änderungen<br />

verteilen soll, genügt es, wenn<br />

dort ein sogenanntes Bare-Reposi-<br />

F Das Git-Log zeigt<br />

die Projekthistorie.<br />

G Gits Checkout-Befehl<br />

eignet sich nicht<br />

nur für das Wechseln<br />

von Branches, sondern<br />

auch für Rollbacks.<br />

VERTEILTE VERSIONSVERWALTUNG: ERFAHRUNGSWERTE<br />

Bei Software-Projekten, an denen mehrere Entwickler<br />

über eine Versionsverwaltung arbeiten, haben sich<br />

einige Vorgehensweisen als vorteilhaft erwiesen. Beispielsweise<br />

sollten Sie auch die Änderungen durch<br />

andere Entwickler verfolgen. So sehen Sie schnell,<br />

ob deren Code mit den eigenen Komponenten zusammenspielt,<br />

und finden etwaige Notizen zu noch<br />

bestehenden Fehlern. Repositories sollten immer nur<br />

ein Projekt enthalten, auch wenn Entwickler an mehreren<br />

Projekten gleichzeitig zusammenarbeiten.<br />

Mit einem Commit schließen Sie idealerweise immer<br />

genau eine Aufgabe ab, beispielsweise ein<br />

neues Feature oder einen Bugfix. Die Commit-Nachrichten<br />

sollten aussagekräftig ausfallen und komplizierte<br />

Sachverhalte erklären, sofern das nicht in<br />

Kommentaren im Code erfolgt. Ein Repository enthält<br />

nach Möglichkeit nur Dateien, welche die Entwickler<br />

erstellt haben. Automatisch generierte Files<br />

oder frei zugängliche externe Bibliotheken und<br />

Hilfsprogramme haben darin nichts zu suchen: Sie<br />

blähen das Repository nur unnötig auf.<br />

Der bei einem Commit veröffentlichte Code muss<br />

funktionieren, sodass die Projektmitglieder mit der<br />

Arbeit fortfahren können und nicht anfangen müssen,<br />

überraschend auftauchende Fehler zu beheben.<br />

Entfernen Sie trotzdem niemals ohne Rückfrage<br />

Code aus dem Projekt, nur weil er Ihnen nicht<br />

gefällt oder Sie ihn nicht auf Anhieb verstehen.<br />

www.linux-user.de<br />

11 | 12 35


SCHWERPUNKT<br />

Grundkurs Git<br />

H Mit push und pull<br />

synchronisieren Sie<br />

lokale und entfernte<br />

Git-Repositories.<br />

tory läuft. Dieses enthält lediglich<br />

die Dateien des Git-Verzeichnisses<br />

.git eines Projektes und unterstützt<br />

die Projektmitglieder dabei,<br />

ihre Daten zu synchronisieren.<br />

Ein solches Bare-Repository<br />

legen Sie auf dem Server mittels<br />

des folgenden Befehls an:<br />

$ git init --bare Repository.git<br />

Dabei gelten für die Zugriffsrechte<br />

die Rechte der voreingestellten<br />

Umask des Nutzers, der das Repository<br />

anlegt. Auf dem lokalen<br />

Rechner klonen Sie das entfernte<br />

Repository mittels:<br />

$ git clone ssh://Server/Pfad/ReU<br />

pository.git<br />

GIT-PRAXISBUCH ZU GEWINNEN<br />

Das in der Professional-<br />

Reference-Reihe von<br />

Open Source Press erschienene<br />

Git-Praxisbuch<br />

von Valentin Hänel und Julius Plenz (ISBN 978-3-<br />

941841-42-0) führt Sie fundiert und mit zahlreichen<br />

Beispielen in die Funktionen von Git ein.<br />

Es stellt alle relevanten Techniken vor, die im täglichen<br />

Umgang mit der verteilten Versionsverwaltung<br />

zum Einsatz kommen. Dabei bleiben auch fortgeschrittene<br />

Konzepte wie verschiedene Merge-Strategien<br />

und die automatisierte Fehlersuche nicht außen<br />

Git unterstützt zum Synchronisieren<br />

der Repositories die Protokolle<br />

GIT, SSH und HTTP(S). Git unterstützt<br />

selbst keine Authentifizierung<br />

und greift stattdessen auf<br />

SSH zurück, um Anwender zu<br />

identifizieren, die einen Commit<br />

hochladen. Um zu vermeiden,<br />

dass alle am Projekt Beteiligten<br />

ein vollwertiges Benutzerkonto<br />

benötigen, um sich authentifizieren<br />

zu können, bieten sich Hilfsanwendungen<br />

wie Gitolite [10] an.<br />

Ein frisches geklontes Bare-Repository<br />

gilt es erst einmal zu befüllen.<br />

Dazu erstellen Sie im lokalen<br />

Repository Projektdateien,<br />

nehmen dann einen Commit vor<br />

und gleichen diesen dann mit<br />

dem Remote-Repository ab. Letzteres<br />

erfolgt mit dem Befehl<br />

$ git push Bare Local:Remote<br />

Bei Bare handelt es sich um das<br />

entfernte Repository, Local bezieht<br />

sich auf den lokalen Zweig,<br />

Remote auf den entfernten Branch.<br />

Nach dem initialen Commit erkennt<br />

Git selbst, ob es für lokale<br />

Branches entfernte Pendants<br />

gibt, sodass meist ein schlichtes<br />

git push ausreicht (Abbildung H).<br />

Das Gegenstück zu git push<br />

heißt git pull und kombiniert die<br />

Kommandos git fetch und git<br />

merge, um das lokale Repository<br />

mit dem entfernten zu synchronisieren.<br />

Die Kommandos fetch und<br />

merge fallen im Zusammenspiel<br />

mit entfernten Repositories oft<br />

recht komplex aus, hier lohnt ein<br />

Blick in die Git-Dokumentation.<br />

Als probate Alternative zum eigenen<br />

Projekt-Server bieten sich<br />

öffentliche Dienste wie Github<br />

[11], Gitorious [12] oder<br />

Google Code [13] an. Für frei zugängliche<br />

Projekte fallen hier keine<br />

Kosten an. Projekte, die Sie<br />

nicht mit der Öffentlichkeit teilen<br />

wollen, hosten Github und<br />

Gitorious gegen Gebühr auch als<br />

private Repositories.<br />

Einfach ignorieren<br />

Gerade bei größeren Software-<br />

Projekten kommt es regelmäßig<br />

vor, dass Entwickler verschiedene<br />

vor. Für Anwender, die bereits eine andere Versionsverwaltung<br />

wie etwa Subversion nutzen, zeigt das<br />

Buch zudem passende Szenarien für den Umstieg<br />

auf. Sie erhalten das Git-Praxisbuch im einschlägigen<br />

Buchhandel oder über die Website http:// www.<br />

opensourcepress. de zum Preis von 29,90 Euro.<br />

Open Source Press hat uns freundlicherweise fünf<br />

Exemplare des Git-Buches für eine Verlosung zur Verfügung<br />

gestellt. Um eines davon zu gewinnen, besuchen<br />

Sie uns bis zum 31. Oktober 2012 auf unserer<br />

Facebook-Seite unter http:// www. facebook. com/<br />

linuxuser. de und liken Sie den Eintrag zur Verlosung.<br />

Verzeichnisstrukturen nutzen<br />

oder unterschiedliche Konfigurationen<br />

bevorzugen. Passt jeder<br />

Entwickler Dateien, die Pfadangaben<br />

oder Konfigurationen beinhalten,<br />

immer wieder an eigene<br />

Gegebenheiten an und bucht sie<br />

so ein, führt das bei den Mitstreitern<br />

schnell zu Frust. Dazu<br />

kommt, dass Konfigurationsdateien<br />

oft Nutzernamen und Passwörter<br />

enthalten, die man nicht<br />

unbedingt verteilen will.<br />

Erfreulicherweise ermöglicht es<br />

Git, einzelne Dateien bei einem<br />

Commit außen vor zu lassen.<br />

Dazu legen Sie im jeweiligen Arbeitsverzeichnis<br />

die Datei .gitignore<br />

an und tragen in diese alle<br />

Dateien ein, die Git bei einem<br />

Commit ignorieren soll. Dabei<br />

geben Sie pro Zeile eine Datei an.<br />

Fazit<br />

Als leistungsfähige verteilte Versionsverwaltung<br />

kann Git noch<br />

deutlich mehr, als nur die in diesem<br />

Artikel vorgestellten Grundlagen.<br />

Zu den weiteren Fähigkeiten<br />

zählen Tagging, Rebase, ein<br />

Git-Daemon für anonymen lesenden<br />

Zugriff auf Git-Repositories,<br />

Filter, Hooks sowie die Möglichkeit,<br />

im Nachhinein schutzwürdige<br />

Informationen oder Bibliotheken<br />

aus einem Repository zu entfernen.<br />

Für mehr Komfort bei der<br />

Bedienung sorgen bei Bedarf diverse<br />

grafische Oberflächen und<br />

Webfrontends. (jlu) n<br />

[1] Git: http:// git-scm. com<br />

[2] Git-cola: http:// git-cola. github. com/<br />

[3] Smartgit: http:// www. syntevo. com/<br />

smartgit/ index. html<br />

[4] Giggle:https:// live. gnome. org/ giggle<br />

[5] Gitg: https:// live. gnome. org/ Gitg<br />

[6] Cgit: http:// hjemli. net/ git/ cgit/<br />

[7] Gitlab: http:// gitlabhq. com<br />

INFO<br />

[8] Git (auf Github): https:// github. com/ git/ git<br />

[9] Git-Dokumentation: http:// git-scm. com/ doc<br />

[10] Gitolite:<br />

https:// github. com/ sitaramc/ gitolite<br />

[11] Github: https:// github. com/<br />

[12] Gitorious: http:// gitorious. org/<br />

[13] Google Code: http:// code. google. com<br />

36 11 | 12<br />

www.linux-user.de


SCHWERPUNKT<br />

Quellcode-Analyzer<br />

Splint und Co.: Tools zur statischen Code-Analyse<br />

Kehraus<br />

© digifuture, 123RF<br />

Zwar finden Compiler Syntaxfehler in Programmen, aber auch syntaktisch korrekter Code kann Ungenauigkeiten,<br />

logische Fehler oder veraltete Funktionen enthalten. Solche Probleme spüren Quellcode-Analyzer auf. Wolfgang Dautermann<br />

README<br />

Mit Quellcode-Analyzern<br />

wie etwa Splint (C),<br />

Perl::Critic (Perl) oder<br />

Phpcs (PHP) kommen<br />

Sie selbst verzwickten<br />

Fehlern im eigenen<br />

Code schnell auf die<br />

Schliche. Ähnliche<br />

Werkzeuge gibt es nicht<br />

nur für andere Programmiersprachen,<br />

sondern<br />

auch für LaTeX, CSS<br />

und sogar RPM- und<br />

DEB-Pakete.<br />

Compiler und Interpreter beanstanden<br />

zwar ungültigen Programmcode,<br />

in vielen Programmiersprachen<br />

sind aber selbst<br />

sehr ungewöhnliche Codezeilen<br />

noch gültig. Man kann Code auch<br />

absichtlich verwirrend gestalten –<br />

es gibt sogar diverse Obfuscated<br />

Coding Contests ([1],[2]), also<br />

Wettbewerbe, die zum Ziel haben,<br />

ein Programm absichtlich möglichst<br />

unleserlich zu gestalten.<br />

Viel öfter allerdings geschieht das<br />

unabsichtlich, insbesondere wenn<br />

(wie in vielen Open-Source-Projekten)<br />

mehrere Entwickler gemeinsam<br />

an einem Programm arbeiten.<br />

Nicht immer bemerkt der<br />

Compiler die daraus resultierenden<br />

Schnitzer.<br />

Glücklicherweise gibt es Tools,<br />

die hier ansetzen und solche ungewöhnlichen<br />

Codekonstruktionen<br />

aufspüren. Damit helfen sie,<br />

mögliche Fehlerquellen zu beseitigen,<br />

und sorgen so für bessere<br />

Codequalität. Im Folgenden stellen<br />

wir einige ausgewählte Vertreter<br />

dieser Gattung vor, wobei unsere<br />

Aufstellung keinen Anspruch<br />

auf Vollständigkeit erhebt: Ähnliche<br />

Open- und Closed-Source-<br />

Werkzeuge gibt es für praktisch<br />

jede Programmiersprache.<br />

Splint – Codeprüfung für C<br />

Das erste Werkzeug zur statischen<br />

Quellcodeprüfung, Lint, kam bereits<br />

1979 mit Unix zur Auslieferung.<br />

Das Programm wurde<br />

schnell so populär, dass es den<br />

Programmierer-Jargon um den<br />

Ausdruck „linten“ für statische<br />

Codeprüfungen bereicherte. In<br />

der Folge diente es dann als Namensgeber<br />

für viele ähnliche<br />

Tools. Zu diesen gehört das Open-<br />

Source-Programm Splint („Secure<br />

Programming Lint“, [3]), das wie<br />

sein Vorbild mögliche Problemquellen<br />

in C-Code aufspürt.<br />

Als Beispiel sehen wir uns das<br />

kurze C-Programm aus Listing 1<br />

(Zeile 2 bis 10) an, das melden<br />

soll, wenn zehn Argumente auf<br />

der Kommandozeile übergeben<br />

werden. Dies prüft es, indem es<br />

argc auswertet: Diese Variable<br />

enthält bekanntlich immer die<br />

Anzahl der übergebenen Argumente<br />

plus eins, weil es den Programmnamen<br />

als erstes Argument<br />

mitzählt.<br />

Der Compiler GCC meldet beim<br />

Übersetzen des Quellcodes normalerweise<br />

gar nichts (Zeile 11).<br />

Erst wenn Sie mittels der Option<br />

-Wall sämtliche Warnungen einschalten<br />

(Zeile 12) wirft er eine<br />

38 11 | 12<br />

www.linux-user.de


Quellcode-Analyzer<br />

SCHWERPUNKT<br />

kurze kryptische Meldung aus,<br />

weil der Code anstatt eines Vergleichs<br />

(==) eine Zuweisung (=)<br />

verwendet (Zeile 5).<br />

Sehen Sie sich zum Vergleich die<br />

Ausgabe von Splint in Listing 2<br />

an: Das Tool findet nicht weniger<br />

als vier mögliche Fehler in main.c.<br />

Außerdem beschreibt es ausführlich<br />

die Art der Probleme und die<br />

möglichen Ursachen. Daneben<br />

liefert es Hinweise, mit welchen<br />

Änderungen am Code oder den<br />

Parametern Sie die vermuteten<br />

Fehler korrigieren oder die Ausgabe<br />

unterdrücken können.<br />

Neben der schon von GCC bemerkten<br />

fehlerhaften Zuweisung<br />

im If-Statement, zu der Splint<br />

gleich zwei Anmerkungen liefert,<br />

findet der Analyzer auch noch<br />

eine unbenutzte Variable (argv)<br />

sowie Programmcode, der niemals<br />

ausgeführt wird. Beim Kommentar<br />

/*@unused@*/, dem Splint<br />

in der vierten Warnung vorschlägt,<br />

handelt es sich um eine<br />

sogenannte Annotation. Ein solcher<br />

spezieller Kommentar steuert<br />

das Verhalten von Splint, indem<br />

er beispielweise gewisse Prüfungen<br />

(de-)aktiviert und Splint<br />

weitere Hinweise gibt, welche die<br />

Prüfungen unterstützen. Der<br />

Aufruf splint --help annotations<br />

gibt einen Überblick über die<br />

Möglichkeiten.<br />

LISTING 1<br />

01 $ cat main.c<br />

02 #include <br />

03 int main(int argc, char *<br />

argv[])<br />

04 {<br />

05 if (argc = 10+1) {<br />

06 printf("10<br />

Argumente!\n");<br />

07 }<br />

08 return 0;<br />

09 printf("Programm<br />

beendet.\n");<br />

10 }<br />

11 $ gcc main.c<br />

12 $ gcc -Wall main.c<br />

13 main.c: In function 'main':<br />

14 main.c:4:2: warning: suggest<br />

parentheses around assignment<br />

used as truth value<br />

[-Wparentheses]<br />

A Der Perl::Critic-Webservice liefert<br />

nach dem Hochladen des zu<br />

prüfenden Codes sofort Ergebnisse.<br />

Neben der Hilfe-Funktion, die<br />

mittels splint --help einen ersten<br />

Überblick über die Themen liefert,<br />

kennt Splint noch zahlreiche<br />

weitere Kommandozeilenoptionen.<br />

Für Einsteiger sind wahrscheinlich<br />

die Optionen --weak,<br />

--standard, --checks und --strict<br />

am interessantesten, die steuern,<br />

wie pedantisch sich Splint gibt.<br />

Der Aufruf splint --help modes<br />

gibt Ihnen einen ersten Überblick<br />

über die (de-)aktivierten Optionen<br />

in diesen Einstellungen.<br />

Übrigens bemerkt auch GCC<br />

durchaus, dass der Befehl<br />

printf("Programm beendet\n") nie<br />

ausgeführt wird. Er optimiert den<br />

Befehl daraufhin, sprich: erzeugt<br />

gar nicht erst Code dafür. Das erkennen<br />

Sie unschwer, indem Sie<br />

sich mit dem Kommando strings<br />

a.out die Texte im generierten<br />

Executable ansehen. Etwas lesbarer<br />

fällt die Variante aus, mit gcc<br />

-S main.c die Assembler-Datei<br />

main.s zu erzeugen. In jedem Fall<br />

unterschlägt der Compiler jedoch<br />

hier die Information, dass hier<br />

völlig überflüssiger Code vorhanden<br />

ist. Klar, er soll ja auch<br />

übersetzen und nicht Fehler suchen<br />

– zur Verbesserung der<br />

Codequalität trägt das aber nicht<br />

gerade bei.<br />

Andere C-Compiler schlagen sich<br />

hier nicht viel besser. So meldet<br />

der Open64-Compiler standardmäßig<br />

dasselbe wie GCC: nichts.<br />

LISTING 2<br />

01 $ splint main.c<br />

02 Splint 3.1.2 --- 29 Oct 2011<br />

03<br />

04 main.c: (in function main)<br />

05 main.c:4:6: Test expression for if is assignment expression: argc<br />

= 10 + 1<br />

06 The condition test is an assignment expression. Probably, you<br />

mean to use ==<br />

07 instead of =. If an assignment is intended, add an extra<br />

parentheses nesting<br />

08 (e.g., if ((a = b)) ...) to suppress this message. (Use<br />

-predassign to<br />

09 inhibit warning)<br />

10 main.c:4:6: Test expression for if not boolean, type int: argc = 10<br />

+ 1<br />

11 Test expression type is not boolean or int. (Use -predboolint to<br />

inhibit<br />

12 warning)<br />

13 main.c:8:2: Unreachable code: printf("Programm...<br />

14 This code will never be reached on any possible execution. (Use<br />

-unreachable<br />

15 to inhibit warning)<br />

16 main.c:2:27: Parameter argv not used<br />

17 A function parameter is not used in the body of the function. If<br />

the argument<br />

18 is needed for type compatibility or future plans, use /*@<br />

unused@*/ in the<br />

19 argument declaration. (Use -paramuse to inhibit warning)<br />

20<br />

21 Finished checking --- 4 code warnings<br />

GLOSSAR<br />

Statische Quellcodeprüfung:<br />

Bei diesem Verfahren<br />

wird der Quellcode<br />

analysiert, ohne<br />

das Programm auszuführen.<br />

Es gibt auch<br />

Code-Analyzer, die das<br />

Programm in einer Art<br />

virtuellen Maschine<br />

ausführen und so Fehler<br />

suchen (beispielsweise<br />

Valgrind).<br />

a.out: Der Standardname<br />

des vom C-Compiler<br />

erzeugten Programms,<br />

wenn Sie nicht<br />

über -o Name etwas anderes<br />

angeben.<br />

www.linux-user.de<br />

11 | 12 39


SCHWERPUNKT<br />

Quellcode-Analyzer<br />

TIPP<br />

In OpenSuse 12.1<br />

fehlt (im Gegensatz<br />

zu anderen gängigen<br />

Distributionen) bei der<br />

Datei /usr/bin/perlcritic<br />

das Executable-Bit.<br />

Sie müssen<br />

es entweder nachträglich<br />

setzen oder das<br />

Analyse-Tool explizit<br />

mit perl /usr/bin/<br />

perlcritic aufrufen,<br />

um es zu nutzen.<br />

Der Sun/ Oracle-Compiler beanstandet<br />

zwar das nicht erreichbare<br />

Statement, findet aber an der<br />

wahrscheinlich fehlerhaften Zuweisung<br />

in der If-Abfrage nichts<br />

auszusetzen. LLVM/ Clang bemerkt<br />

zwar die falsche Zuweisung,<br />

meldet aber ebenfalls nichts<br />

zum nicht ausführbaren Code.<br />

Perl::Critic<br />

Die Programmiersprache Perl<br />

tritt explizit mit dem Motto<br />

„There is more than one way to<br />

LISTING 3<br />

01 $ cat test.pl<br />

02 #!/usr/bin/perl<br />

03 print `cat test.pl`<br />

04 print "Return drücken";<br />

05 my $filename = ;<br />

06 $ perlcritic --severity 3 test.pl<br />

07 Code before strictures are enabled at line 2, column 1. See page<br />

429 of PBP. (Severity: 5)<br />

08 Code before warnings are enabled at line 2, column 1. See page 431<br />

of PBP. (Severity: 4)<br />

09 Backtick operator used at line 2, column 7. Use IPC::Open3<br />

instead. (Severity: 3)<br />

10 Use "" or "" or a prompting module instead of "" at<br />

line 4, column 16. See pages 216,220,221 of PBP. (Severity: 4)<br />

do it“ an – sie erlaubt also viele<br />

Wege, um ein Problem zu lösen.<br />

Für möglichst seltsame und unlesbare<br />

Wege gibt es sogar einen<br />

eigenen Wettbewerb, den Obfuscated<br />

Perl Contest [2]. Dazu passend<br />

hat der Code-Analyzer<br />

Perl::Critic das Motto „Some<br />

Ways Are Better Than Others“.<br />

Perl::Critic hilft wie Splint, mögliche<br />

Fehler zu finden und einen<br />

einheitlichen Programmierstil<br />

durchzusetzen. Möchten Sie sich<br />

Perl::Critic ohne Installation ansehen,<br />

können Sie dazu den entsprechenden<br />

Webservice [4] nutzen<br />

(Abbildung A, vorige Seite).<br />

Dort laden Sie Ihren Perl-Code<br />

hoch und sehen dann sofort das<br />

Ergebnis der Evaluierung. Dabei<br />

unterstützt das Analysetool fünf<br />

verschiedene „Härtegrade“.<br />

Auf der Kommandozeile rufen<br />

Sie das einmal installierte Werkzeug<br />

mit dem schlichten Befehl<br />

perlcritic auf. Auch hier kennt<br />

Perl::Critic die bereits erwähnten<br />

fünf Prüfstufen, die von 1 („brutal“)<br />

bis 5 („gentle“) reichen. Im<br />

Beispiel aus Listing 3 rufen wir<br />

den Analyzer mit dem dritten Level<br />

(„harsh“) auf, damit er in dem<br />

kurzen Programm (Zeilen 2 bis 5)<br />

auch etwas zu reklamieren findet.<br />

Tatsächlich macht Perl::Critic<br />

auf gleich vier Verbesserungsmöglichkeiten<br />

aufmerksam (Zeilen<br />

7 bis 10). Dabei gibt es jeweils<br />

eine Beurteilung des Schweregrads<br />

und häufig auch eine Referenz<br />

auf das Buch „Perl Best<br />

Practices“ (PBP) von Damian<br />

Conway aus. Ähnlich wie Splint<br />

LISTING 4<br />

01 $ phpcs -i<br />

02 The installed coding standards are PHPCS, Squiz, MySource,<br />

Zend and PEAR<br />

03<br />

04 $ cat test.php<br />

05 <br />

11<br />

12 $ phpcs test.php<br />

13<br />

14 FILE: /home/dauti/Artikel/2012-Code-Analyse/test.php<br />

15 -------------------------------------------------------------<br />

-------------------<br />

16 FOUND 4 ERROR(S) AFFECTING 3 LINE(S)<br />

17 -------------------------------------------------------------<br />

-------------------<br />

18 1 | ERROR | You must use "/**" style comments for a file<br />

comment<br />

19 3 | ERROR | No space found after comma in function call<br />

20 4 | ERROR | Spaces must be used to indent lines; tabs are<br />

not allowed<br />

21 4 | ERROR | Line indented incorrectly; expected at least 4<br />

spaces, found 1<br />

22 -------------------------------------------------------------<br />

-------------------<br />

23<br />

24 $ phpcs --standard=PHPCS test.php<br />

25<br />

26 FILE: /home/dauti/Artikel/2012-Code-Analyse/test.php<br />

27 -------------------------------------------------------------<br />

-------------------<br />

28 FOUND 10 ERROR(S) AFFECTING 4 LINE(S)<br />

29 -------------------------------------------------------------<br />

-------------------<br />

30 1 | ERROR | You must use "/**" style comments for a file<br />

comment<br />

31 1 | ERROR | Single line block comment not allowed; use<br />

inline ("// text")<br />

32 | | comment instead<br />

33 2 | ERROR | String "abc" does not require double quotes; use<br />

single quotes<br />

34 | | instead<br />

35 3 | ERROR | No space found after comma in function call<br />

36 3 | ERROR | Expected 1 space before ">"; 0 found<br />

37 3 | ERROR | Expected 1 space after ">"; 0 found<br />

38 4 | ERROR | Spaces must be used to indent lines; tabs are<br />

not allowed<br />

39 4 | ERROR | Line indented incorrectly; expected at least 4<br />

spaces, found 1<br />

40 4 | ERROR | Line indented incorrectly; expected at least 4<br />

spaces, found 1<br />

41 4 | ERROR | String "Zufallszahl >5" does not require double<br />

quotes; use single<br />

42 | | quotes instead<br />

43 -------------------------------------------------------------<br />

-------------------<br />

40 11 | 12<br />

www.linux-user.de


Quellcode-Analyzer<br />

SCHWERPUNKT<br />

können Sie auch Perl::Critic mit<br />

speziellen Kommentaren (## no<br />

critic) am Ende einer Zeile anweisen,<br />

diese nicht zu untersuchen.<br />

Daneben verzichtet das<br />

Tool darauf, Code zwischen den<br />

Marken ## no critic und ## use<br />

critic zu prüfen.<br />

Daneben bietet Perl::Critic<br />

ebenso wie Splint auch noch weitergehende<br />

Einstellungsmöglichkeiten<br />

an. Zum einen dürfen Sie<br />

vorgeben, welche Prüf-Policies es<br />

anwenden soll, zum anderen können<br />

Sie dem vorhandenen Fundus<br />

auch eigene Policies hinzufügen.<br />

Dazu liefert der Befehl<br />

perlcritic --help eine erste Übersicht,<br />

auch eine umfangreiche<br />

Manpage (man perlcritic) steht<br />

zur Verfügung.<br />

Als Teil der kommerziellen Perl-<br />

Distribution von Activstate [5]<br />

gibt es auch eine grafische Oberfläche<br />

für Perl::Critic namens<br />

perlcritic-gui (Abbildung B), mit<br />

der Sie sich einen groben Überblick<br />

über die vielfältigen Optionen<br />

verschaffen können. Active<br />

State Perl lässt sich zwar kostenlos<br />

herunterladen und nutzen, ist<br />

jedoch keine freie Software.<br />

LISTING 5<br />

// @codingStandardsIgnoreStart<br />

... dieser Code wird nicht<br />

geprüft ...<br />

// @codingStandardsIgnoreEnd<br />

PHP Code Sniffer<br />

Auch für die populäre Programmiersprache<br />

PHP gibt es ein ähnliches<br />

Projekt, den PHP Code<br />

Sniffer[6]. Nach der Installation<br />

testen Sie mit phpcs eine einzelne<br />

PHP-Datei oder prüfen gleich ein<br />

komplettes Verzeichnis. Phpcs<br />

definiert dazu verschiedene Coding-Standards,<br />

die Sie über die<br />

Option --standard=Typ auswählen.<br />

Im Beispiel aus Listing 4 beanstandet<br />

Phpcs einige eher kosmetische<br />

Kleinigkeiten wie beispielsweise<br />

falsche Einrückungen oder<br />

fehlende Leerzeichen – definitiv<br />

keine Fehler, aber unschön. Auch<br />

bei Phpcs haben Sie etliche Optionen<br />

zur Verfügung<br />

(phpcs<br />

--help), können<br />

eigene Regel-<br />

Sets definieren<br />

und einzelne<br />

Codeteile von<br />

der Prüfung<br />

ausklammern<br />

(Listing 5).<br />

Weitere vergleichbare<br />

Projekte<br />

Lint-ähnliche<br />

Codeprüfer gibt<br />

es nicht nur für<br />

C, Perl und PHP, sondern auch für<br />

viele weitere Programmiersprachen.<br />

Suchen Sie doch einfach<br />

mal nach dem Begriff „lint“ und<br />

Ihrer Lieblingsprogrammiersprache<br />

im Netz – Sie werden mit hoher<br />

Wahrscheinlichkeit schnell<br />

fündig. Doch solche Tools stehen<br />

nicht nur für Programmiersprachen<br />

zur Verfügung, sondern in<br />

vergleichbarer Form auch für das<br />

Textsatzsystem LaTeX (ChkTeX,<br />

[7]), Pakete der Typen RPM (RPM<br />

Lint, [8]) und DEB (Lintian, [9])<br />

sowie Cascading Style Sheets<br />

(CSS Lint, [10]).<br />

Fazit<br />

Es empfiehlt sich übrigens nicht,<br />

mal eben auf die Schnelle potenzielle<br />

„Fehler“ in fremden Projekten<br />

zu korrigieren. Sonst kann es<br />

einem so gehen, wie einigen Entwicklern<br />

des Debian-Projektes.<br />

Diese stellten aufgrund einer<br />

Prüfung mit Valgrind (einem Programm,<br />

das ein Programm in einer<br />

Art virtuellen Maschine ausführt<br />

und so Fehler sucht) einen<br />

„Bug“ im OpenSSL-Projekt fest:<br />

Das Programm griff auf einen<br />

noch nicht initialisierten Speicher<br />

zu – flugs kommentierten die Debianer<br />

die vermeintlich fehlerhafte<br />

Funktion aus.<br />

Allerdings handelte es sich bei<br />

dem derart „korrigierten“ Code<br />

um eine Funktion, die Zufallszahlen<br />

erzeugt – der Zugriff auf den<br />

nicht initialisierten Speicher sollte<br />

unter anderem zufällige Werte<br />

auslesen. Durch die „Korrektur“<br />

wurden jahrelang nicht zufällige,<br />

sondern stattdessen leicht vorhersagbare<br />

SSL-Zertifikate generiert<br />

– eine kryptographische<br />

Katastrophe [11].<br />

Bei der Arbeit am eigenen Code<br />

jedoch erleichtern die diversen<br />

Lint-Varianten und Codechecker<br />

die Fehlersuche in Quelltexten<br />

ganz wesentlich. Darüber hinaus<br />

sorgen solche Werkzeuge dafür,<br />

dass in größeren Software-Projekten<br />

alle beteiligten Entwicklern<br />

schnell zu einem gemeinsamen<br />

Coding-Stil finden. (jlu) n<br />

INFO<br />

[1] International Obfuscated C Code Contest:<br />

http:// en. wikipedia. org/ wiki/ International_<br />

Obfuscated_C_Code_Contest<br />

[2] Obfuscated Perl Contest:<br />

http:// de. wikipedia. org/ wiki/ Obfuscated_<br />

Perl_Contest<br />

[3] Splint: http:// www. splint. org<br />

[4] Perl::Critic-Webservice:<br />

http:// www. perlcritic. com<br />

[5] Activestate Perl:<br />

http:// www. activestate. com<br />

[6] PHP Code Sniffer: http:// pear. php. net/<br />

package/ PHP_CodeSniffer<br />

[7] ChkTeX:<br />

http:// baruch. ev-en. org/ proj/ chktex/<br />

[8] RPM Lint: rpmlint. zarb. org<br />

[9] Lintian: http:// lintian. debian. org<br />

[10] CSS Lint: http:// csslint. net<br />

[11] Debian und OpenSSL:<br />

http:// www. linux-magazine. com/ Issues/<br />

2008/ 93/ Security-Lessons<br />

B Active State Perl<br />

bringt eine grafische<br />

Oberfläche für<br />

Perl::Critic mit.<br />

DER AUTOR<br />

Der Systemadministrator<br />

Wolfgang<br />

Dautermann hat neben<br />

vielen Linux-Varianten<br />

auch schon<br />

Unix-Systeme wie<br />

Solaris, Irix oder<br />

Tru64 gebändigt. Er<br />

zählt zu den Organisatoren<br />

der Grazer<br />

Linuxtage.<br />

www.linux-user.de<br />

11 | 12 41


SCHWERPUNKT<br />

Enki<br />

Texteditor Enki für Programmierer<br />

Ein zartes<br />

Pflänzchen<br />

Der schnörkellose Texteditor Enki ermöglicht ein<br />

routiniertes Arbeiten an einfachen Skripten und Texten.<br />

Karsten Günther<br />

© Hummel_12, sxc.hu<br />

README<br />

Editoren gehören zu den<br />

Arbeitspferden unter den<br />

Programmen, zu mindestens<br />

bei Vielschreibern<br />

und Programmierern. Mit<br />

Enki schickt sich ein<br />

Newcomer an, sich seinen<br />

Platz neben den<br />

Klassikern Emacs und<br />

Vim zu erkämpfen.<br />

DIE EMACS-SCHNITTSTELLE<br />

Zwei grundverschiedene Arbeiten<br />

markieren die unterschiedlichen<br />

Einsatzgebiete von Texteditoren:<br />

Auf der einen Seite helfen<br />

sie, kleine Skripte zu schreiben<br />

oder einige Zeilen in einer Konfigurationsdatei<br />

zu ändern. Für diese<br />

Fälle sind Sie mit Pico beziehungsweise<br />

der freien Variante<br />

Nano im Terminal oder einem<br />

einfachen Editor aus der Desktop-<br />

Umgebung gut bedient.<br />

Auf der anderen Seite stehen<br />

Editoren, die schon fast eine<br />

integ rierte Entwicklungsumgebung<br />

(IDE) bilden. Emacs und<br />

Vim zählen zu dieser Sparte, Kile<br />

Eine ausgesprochen nützliche Eigenart des Emacs stellt eine<br />

Schnittstelle dar, die es erlaubt, alle benannten Funktionen über<br />

den Namen aufzurufen. Dabei stehen sogar automatische Funktionen<br />

zum Komplettieren bereit. Sie rufen die Funktionen über<br />

[Alt]+[X] auf. Die Alt-Taste heißt im Jargon auch Meta-Taste.<br />

[Alt]+[X] bewirkt, dass der Editor am unteren Fensterrand eine<br />

kleine Eingabezeile öffnet, in die Sie den Namen der Funktion<br />

eingeben. Nach jedem Buchstaben können Sie denEditor mittels<br />

[Tab] dazu veranlassen, den String zu vervollständigen.<br />

Falls die bisher eingegebenen Buchstaben zu mehreren Funktionen<br />

passen, öffnet sich ein weiteres Fenster, das die vorhandenen<br />

Möglichkeiten auflistet. Oben sehen Sie den eingegebenen<br />

Text, ganz unten die Eingabezeile, darüber die durch<br />

Komplettierung möglichen Namen.<br />

ist ein Beispiel für eine LaTeX-IDE<br />

unter KDE, Winefish ein ebensolches<br />

für HTML. Für andere Programmiersprachen<br />

und Umgebungen<br />

gibt es viele weitere.<br />

Zwischen diesen beiden Extremen<br />

siedeln sich eine Vielzahl von<br />

Varianten sowie zahlreiche Nischenprodukte<br />

für spezielle Aufgaben<br />

an. Der Editor Enki [1] orientiert<br />

sich an Emacs und versucht<br />

dessen extreme Leistungsfähigkeit<br />

mit moderner Technologie<br />

nachzubilden.<br />

Anforderungen<br />

Was sollte ein guter Editor leisten?<br />

Zunächst einmal dient er im<br />

Wesentlichen zur Texteingabe,<br />

sollte also für die Arbeit mit der<br />

Tastatur optimiert sein. Dementsprechend<br />

will man auch alle<br />

Funktionen über Tasteneingaben<br />

erreichen, denn wer möchte schon<br />

zur Maus greifen, um eine häufig<br />

genutzte Funktion aufzurufen?<br />

Die Software sollte die Möglichkeit<br />

bieten, die Tastenkürzel anzupassen.<br />

Da sich kaum jemand eine<br />

große Anzahl von Tastenkürzeln<br />

merkt, ist eine direkte Schnittstelle<br />

zu den internen Funktionen<br />

ausgesprochen nützlich (siehe<br />

Kasten Die Emacs-Schnittstelle).<br />

Unbegrenzte Undo- und Redo-<br />

Schritte beim Editieren gehören<br />

heute zum Standard. Weniger bekannt<br />

ist der sogenannte „Kill-<br />

Buffer“, wie ihn unter anderem<br />

Emacs umsetzt. Das funktioniert<br />

so: Nach dem Löschen einer Passage<br />

(dem „Killen“) speichert der<br />

Editor diese in einem Ringspeicher,<br />

dem Kill-Buffer, der eine<br />

voreingestellte Anzahl von Passagen<br />

fasst. Die jeweils zuletzt gespeicherte<br />

Passage setzen Sie<br />

durch ein einfaches Einfügen an<br />

der Position des Cursors wieder in<br />

den Text ein. Allerdings erlaubt es<br />

die Software, den Kill-Buffer zu<br />

rotieren. Das ermöglicht den Zugriff<br />

auf Passagen, die Sie schon<br />

früher gelöscht haben. Dieses<br />

Konzept erlaubt ein effektives<br />

und quasi gleichzeitiges Arbeiten<br />

mit mehreren Passagen.<br />

Jeder gute Editor bringt Funktionen<br />

zum Suchen und Ersetzen<br />

von Textteilen mit. In zweierlei<br />

Hinsicht erweisen sich diese aber<br />

beim <strong>Programmieren</strong> oft als unzureichend:<br />

Zum einen liegen die<br />

Quelltexte größerer Projekte in al-<br />

42 11 | 12<br />

www.linux-user.de


Enki<br />

SCHWERPUNKT<br />

ler Regel in Form von mehreren<br />

Dateien vor. Um nicht alle Dateien<br />

einzeln und manuell bearbeiten<br />

zu müssen, sollte der Editor es<br />

ermöglichen, dies in einem<br />

Rutsch automatisch zu erledigen.<br />

Die zweite Anforderung ist<br />

ebenfalls nicht trivial: Es genügt<br />

nicht, wenn der Editor lediglich<br />

identische Textteile durch andere,<br />

ebenfalls identische Passagen ersetzen<br />

kann. Vielmehr ist es normalerweise<br />

erforderlich, die gesuchten<br />

Teile in Form eines Musters<br />

zu beschreiben – üblicherweise<br />

kommen dabei reguläre Ausdrücke<br />

zum Einsatz – und diese<br />

Textteile über Referenzen in den<br />

Ersetzungstext zu übernehmen.<br />

Zu den weiteren Anforderungen<br />

zählt die Möglichkeit, Textteile zu<br />

komplettieren. Das spart Schreibarbeit<br />

und hilft Tippfehler zu vermeiden.<br />

Auch der Einsatz von<br />

Templates oder Code-Snippets<br />

hilft ungemein. Für größere Projekte<br />

wünscht man sich zudem<br />

Bookmarks sowie Funktionen, um<br />

bestimmte Bereiche temporär zu<br />

verstecken („code folding“). Beides<br />

dient der besseren Übersicht.<br />

Nicht unbedingt erforderlich, aber<br />

im täglichen Einsatz hilfreich, ist<br />

die Möglichkeit, Makros aufzuzeichnen<br />

und zu bearbeiten.<br />

Eine inkrementelle Suchfunktion<br />

sollte der Editor aber unbedingt<br />

mitbringen. Bei dieser Form<br />

der Suche springt der Cursor immer<br />

automatisch zur nächsten Position<br />

im Text, die mit der Eingabe<br />

übereinstimmt. Jeder weitere<br />

eingegebene Buchstabe verbessert<br />

die Suche. Oft muss man dann<br />

den Suchbegriff gar nicht vollständig<br />

angeben, die ersten paar<br />

Buchstaben genügen.<br />

Abhängig von der verwendeten<br />

Programmiersprache können auch<br />

automatische Einrückungen und<br />

Klammerprüfungen („brace matching“)<br />

unverzichtbare Features<br />

darstellen. Eine Syntax-Hervorhebung<br />

verbessert zusätzlich die<br />

Lesbarkeit von Quelltexten.<br />

Wer die Rechteckauswahl einmal<br />

kennengelernt hat, mag sie meist<br />

nicht mehr<br />

missen. Dabei<br />

wählen<br />

Sie in einem<br />

Dokument<br />

Bereiche visuell<br />

aus,<br />

beispielsweise<br />

die ersten<br />

drei Spalten<br />

in den letzten<br />

fünf Zeilen.<br />

Obwohl<br />

Editoren eigentlich<br />

immer<br />

zeilenorientiert<br />

arbeiten – schließlich sind ja auch<br />

die Texte so organisiert – bearbeiten<br />

Sie so mit dieser Funktion<br />

vertikale Blöcke.<br />

Gott der Weisheit<br />

Wie verhält sich nun der Editor<br />

Enki [2], benannt nach dem sumerischen<br />

Gott der Weisheit, angesichts<br />

dieses Forderungskatalogs?<br />

Das Editor-Urgestein Emacs<br />

würde mit Blick auf seine mehr als<br />

vierzigjährige Entwicklungsgeschichte<br />

wohl nur müde lächeln.<br />

Bei Enki handelt es sich jedoch<br />

um ein ganz junges Projekt, das<br />

teilweise neue Wege geht. Andererseits<br />

lohnt es sich, die Erfahrungen<br />

aus bestehenden Programmen<br />

zu berücksichtigen. Daher<br />

orientiert sich der Newcomer<br />

in gewisser Weise an den Altvorderen,<br />

allen voran an Emacs.<br />

Nach dem Start präsentiert sich<br />

die Software spartanisch (Abbildung<br />

A). Der gesamte Editor ist<br />

in Python geschrieben. Das hat<br />

den Vorteil, dass sich das Programm<br />

relativ leicht anpassen<br />

lässt – vorausgesetzt, Sie beherrschen<br />

Python und verstehen den<br />

doch recht komplexen Aufbau.<br />

Enki setzt auf die Qt-Bibliotheken,<br />

was eine moderne und ergonomische<br />

Oberfläche ermöglicht.<br />

Ein erheblicher Teil des Quellcodes<br />

entfällt daher auf alle anderen<br />

Aufgaben. Spezielle Features,<br />

wie etwa die abtrennbaren Menüs<br />

aus Gtk, fehlen jedoch.<br />

Für erfahrene Entwickler mag<br />

sich der Quelltext relativ schnell<br />

erschließen, für Neulinge ist er sicherlich<br />

um einiges zu komplex.<br />

Funktion<br />

Dateifunktionen<br />

Datei öffnen<br />

Datei neu einlesen<br />

Datei speichern<br />

Speichern als<br />

Neue Datei<br />

Datei schließen<br />

Datei drucken<br />

Auswahl<br />

Nach oben erweitern<br />

Nach unten erweitern<br />

Nach links erweitern<br />

Nach rechts erweitern<br />

Zum Zeilenende erweitern<br />

Zum Zeilenstart erweitern<br />

Auswahl duplizieren<br />

Editieren<br />

Kopieren<br />

Einfügen<br />

Ausschneiden<br />

Zeile einfügen<br />

Zeile ausschneiden<br />

Zeile kopieren<br />

Zeile löschen<br />

Undo<br />

Redo<br />

Suchen<br />

In der Datei suchen<br />

Im Verzeichnis suchen<br />

Weitersuchen<br />

Rückwärts suchen<br />

Ersetzen<br />

Ersetzen im Verzeichnis<br />

A Das Standardlayout<br />

von Enki umfasst drei<br />

Fenster. Links sehen<br />

Sie die momentan geöffneten<br />

Dateien.<br />

WICHTIGE TASTENKÜRZEL<br />

Kürzel<br />

[Strg]+[O]<br />

[F5]<br />

[Strg]+[S]<br />

[Strg]+[Umschalt]+[S]<br />

[Strg]+[N]<br />

[Strg]+[W]<br />

[Strg]+[P]<br />

[Alt]+[Umschalt]+[Pfeil oben]<br />

[Alt]+[Umschalt]+[Pfeil unten]<br />

[Alt]+[Umschalt]+[Pfeil links]<br />

[Alt]+[Umschalt]+[Pfeil rechts]<br />

[Alt]+[Umschalt]+[Ende]<br />

[Alt]+[Umschalt]+[Pos1]<br />

[Strg]+[D]<br />

[Strg]+[C]<br />

[Strg]+[V]<br />

[Strg]+[X]<br />

[Alt]+[V]<br />

[Alt]+[X]<br />

[Alt]+[C]<br />

[Alt]+[Entf]<br />

[Strg]+[Z]<br />

[Strg]+[Y]<br />

Enki 12.08.6<br />

LU/enki/<br />

[Strg]+[F]<br />

[Strg]+[Umschalt]+[F]<br />

[F3]<br />

[Umschalt]+[F3]<br />

[Strg]+[R]<br />

[Strg]+[Umschalt]+[R]<br />

www.linux-user.de<br />

11 | 12 43


SCHWERPUNKT<br />

Enki<br />

UNTERSTÜTZTE SPRACHEN<br />

Skripte<br />

B Wenn Sie Markdown-Texte<br />

in Enki<br />

eingeben und editieren,<br />

haben Sie die<br />

Möglichkeit, das Ergebnis<br />

sofort in der<br />

<strong>Vorschau</strong> rechts anzuschauen.<br />

Auszeichnungssprachen<br />

Skriptsprachen<br />

Hochsprachen<br />

Werkzeuge<br />

Das macht es relativ schwer, einfache<br />

Anpassungen vorzunehmen,<br />

wie Ergänzungen für die<br />

Syntax-Hervorhebung.<br />

Alle Funktionen, die Enki zur<br />

Verfügung stellt, rufen Sie auf<br />

Wunsch über die Tastatur auf. Allerdings<br />

umfasst das nicht den<br />

Wechsel zwischen geöffneten Dateien<br />

– gerade das wäre aber für<br />

Benutzer wichtig, die wirklich viel<br />

und schnell mit dem Programm<br />

arbeiten wollen. Die Tabelle Wichtige<br />

Tastenkürzel (vorige Seite)<br />

zeigt, dass sich die Software zumindest<br />

im Bereich der Standardfunktionen<br />

gut bestückt gibt. Sie<br />

haben zudem die Möglichkeit, die<br />

Kürzel zu ändern. Dazu steht im<br />

Menü Settings der Punkt Application<br />

shortcuts… bereit.<br />

Für eine Reihe wichtiger Programmiersprachen<br />

stellt Enki vorgefertigte<br />

Syntax-Hervorhebungen<br />

bereit. Abhängig von der eingesetzten<br />

Sprache (siehe Tabelle<br />

Unterstützte Sprachen) funktioniert<br />

das unterschiedlich gut.<br />

Bash, Batch, Cmake, Makefile<br />

CSS, HTML, Markdown, Restructured Text,<br />

TeX, XML, YAML<br />

IDL, Java, Javascript, Lua, Postscript, POV,<br />

Pascal, Perl, Properties, Python, Ruby,<br />

Scheme, Spice, TCL, VHDL, Verilog<br />

C#, C++, D, Fortran, Fortran77<br />

Diff, SQL<br />

Ganz moderne Sprachen, wie etwa<br />

Go von Google, unterstützt Enki<br />

bisher gar nicht. Allerdings erweisen<br />

sich die Daten auch bei den<br />

etablierten Sprachen – zumindest<br />

im Fall von LaTeX – als nicht sehr<br />

vollständig.<br />

Ein Ergänzen fehlender Schlüsselwörter<br />

sieht Enki nicht vor,<br />

was die Nützlichkeit weiter einschränkt.<br />

Das modulare Konzept<br />

des Editors soll es den Entwicklern<br />

eigentlich leicht machen, Anpassungen<br />

vorzunehmen und Ergänzungen<br />

als Plugins bereitzustellen.<br />

Bisher ist dies aber noch<br />

nicht geschehen.<br />

Markdown<br />

Als echtes Highlight erweist sich<br />

bei Enki die Unterstützung von<br />

Sprachen zum Formatieren und<br />

Auszeichnen, wie HTML, Restructured<br />

Text und Markdown. Hinter<br />

Letzterem verbirgt sich eine Sprache<br />

mit einer einfachen Syntax für<br />

Wikis oder Web-Anwendungen<br />

([3],[4]), die auch HTML-Strukturen<br />

einbinden kann (Abbildung<br />

B). Eine <strong>Vorschau</strong> für den<br />

eingegebenen Text erhalten Sie<br />

mit [Alt]+[P]. Sie benötigen dazu<br />

das Paket python-markdown, das<br />

sich im Repository vieler Distribution<br />

befindet. Ansonsten installieren<br />

Sie es mit pip markdown nach.<br />

Anschließend zeigt der Editor<br />

das Ergebnis der Eingaben direkt<br />

an; Enki unterstützt in diesen<br />

Modus WYSIWYG. Das Gleiche<br />

gilt für Dateien mit HTML und<br />

Restructured Text. Allerdings erkennt<br />

Enki nicht alle Sprachelemente<br />

von Markdown korrekt: So<br />

sollte das Konstrukt _Wort_ eigentlich<br />

das Wort unterstreichen. Momentan<br />

zeigt das Programm es<br />

aber kursiv dargestellt an.<br />

Konfiguration<br />

Bei der Installation, die mittels<br />

./ setup.py install erfolgt, kopiert<br />

das Skript Dateien des Editors in<br />

die Systemverzeichnisse. Daher<br />

kann Enki zunächst keine Einstellungen<br />

für einzelne Anwender<br />

speichern. Dazu müssen Sie zuerst<br />

ein Unterverzeichnis . enki/<br />

im Home-Verzeichnis anlegen.<br />

Anschließend speichert Enki dort<br />

neue Tastenkombinationen, die<br />

in der Datei shortcuts.json landen,<br />

und andere Anpassungen.<br />

Derzeit fallen die Konfigurationsmöglichkeiten<br />

von Enki noch<br />

begrenzt aus: In Menü Settings<br />

gibt es nur die zwei Einträge Set-<br />

INFO<br />

[1] Enki: http:// enki-editor. org<br />

[2] Bedeutung des Namens:<br />

http:// de. wikipedia. org/ wiki/ Enki<br />

[3] Projektseite Markdown:<br />

https:// de. wikipedia. org/ wiki/ Markdown<br />

[4] Information zu Markdown: http://<br />

daringfireball. net/ projects/ markdown/<br />

44 11 | 12<br />

www.linux-user.de


Enki<br />

SCHWERPUNKT<br />

tings… und Application shortcuts….<br />

Der erste Menüpunkt stellt nur<br />

eine Handvoll Optionen bereit<br />

(Abbildung C). Unter dem zweiten<br />

bietet die Software die Möglichkeit,<br />

Funktionen mit Tastenkürzeln<br />

zu verbinden. Diese<br />

Funktionen decken nur die elementaren<br />

Features eines Editors<br />

ab. Für alles Weitere wäre ein Ausbau<br />

der Infrastruktur in Form von<br />

Plugins nötig. Es stellt sich aber<br />

die Frage, ob ein Programmierer<br />

zunächst den Editor weiterentwickeln<br />

will, bevor er an seinem eigentlichen<br />

Projekt arbeitet.<br />

Insbesondere fehlt hier die Möglichkeit,<br />

bestehende Highlighting-<br />

Muster anzupassen oder zu ergänzen,<br />

was aufgrund einiger Fehler<br />

aber dringend erforderlich<br />

wäre. Auch so wichtige Funktionen<br />

wie Snippets zu nutzen, suchen<br />

Sie bisher vergebens. Dafür<br />

funktionieren die inkrementelle<br />

Suchfunktion und das Ersetzen<br />

(auch mit Mustern) schon recht<br />

gut. Die Komplettierungen erfordern<br />

zwar etwas Eingewöhnungszeit,<br />

– sie funktionieren wie bei<br />

einer Textverarbeitung – arbeiten<br />

aber einigermaßen zuverlässig.<br />

Fazit<br />

Auf den ersten Blick fällt die Bilanz<br />

von Enki eher dürftig aus.<br />

Die Ansätze erscheinen interessant,<br />

heben sich aber in keiner<br />

Weise von denen bestehender Editoren<br />

ab. Zwar geht die Arbeit mit<br />

Enki einfach und schnell von der<br />

Hand, es fehlen aber viele Komfortfunktionen<br />

für größere Projekte.<br />

Für den Einsatz als Schreibprogramm<br />

mangelt es dem Editor<br />

an einer Rechtschreibprüfung, für<br />

die Eingabe von Quelltexten bietet<br />

er nicht alle wünschenswerten<br />

Funktionen.<br />

Das Vorhandensein einfacher<br />

vertikaler Editierfunk tion erscheint<br />

zwar nett, doch aufgrund<br />

des geringen Reifegrades sind sie<br />

noch nicht wirklich von Nutzen.<br />

Es fehlen wesentliche Features<br />

wie Kill-Buffer und die Möglichkeit,<br />

externe Programme zu starten.<br />

Trotz der momentanen Einschränkungen<br />

lohnt es sich jedoch,<br />

Enki im Auge zu behalten:<br />

Der Editor weist zahlreiche gute<br />

Ansätze auf. (agr) n<br />

C Für die Konfiguration<br />

stehen bisher nur<br />

einige wenige Optionen<br />

bereit.<br />

MAGAZIN<br />

ONLINE<br />

LINUX-MAGAZIN NEWSLETTER<br />

Nachrichten rund um die Themen Linux und Open Source lesen Sie täglich<br />

im Newsletter des Linux-Magazins.<br />

Newsletter<br />

informativ<br />

kompakt<br />

tagesaktuell<br />

www.linux-magazin.de/newsletter<br />

www.linux-user.de<br />

11 | 12 45


PRAXIS<br />

Gbrainy<br />

Kombination und Auffassungsgabe trainieren mit Gbrainy<br />

Fitness fürs Gehirn<br />

Kämpfen Sie gegen die berüchtigte digitale Demenz: Bringen Sie Ihre kleinen grauen Zellen<br />

mithilfe von Gbrainy regelmäßig wieder auf Vordermann. Vincze-Aron Szabo<br />

Gbrainy 2.1.4<br />

LU/gbrainy/<br />

© Scott Maxwell,<br />

123RF<br />

Ob es die digitale<br />

Demenz, so wie sie<br />

Anfang September<br />

2012 durch die<br />

Medien geisterte,<br />

tatsächlich<br />

gibt, das sei<br />

dahingestellt.<br />

Fakt ist: Nach<br />

mehreren<br />

Stunden Arbeit<br />

vor<br />

dem<br />

Bildschirm braucht man durchaus<br />

einmal ein wenig Abwechslung –<br />

zum Beispiel eine mentale Trainingseinheit<br />

mit Gbrainy.<br />

Mit Gbrainy [1] lösen Sie<br />

unterschiedlichste Logik- und<br />

Rechenaufgaben und trainieren<br />

so Ihr Gehirn. Das Programm<br />

unterstützt dabei verschiedene<br />

Schwierigkeitsgrade<br />

und wertet Ihre Ergebnisse in<br />

einer Statistik mit hilfreichen<br />

Empfehlungen für die nächste<br />

Quizrunde aus.<br />

Nach der Installation starten Sie<br />

die Software einfach über das<br />

Startmenü oder über das Kommando<br />

gbrainy in einer Konsole.<br />

Die Sprache der Anwendung richtet<br />

sich automatisch nach der<br />

System einstellung. Nach dem<br />

Start präsentiert die Software<br />

vier Spielarten für Ihr Training:<br />

Logikrätsel, Kopfrechnen, Gedächtnisübungen<br />

und verbale<br />

Analogien (Abbildung A).<br />

Logikrätsel stellen insbesondere<br />

Ihr Schlussfolgerungs- und Denkvermögen<br />

auf die Probe. Hier<br />

geht es insbesondere um Folgen<br />

und Sequenzen sowie um Zusammenhänge<br />

zwischen Elementen.<br />

Natürlich darf bei solchen Aufgaben<br />

das Kopfrechnen nicht fehlen.<br />

Basierend auf allen vier<br />

Grundrechenarten geht es hier<br />

aber nicht nur um einfaches<br />

Rechnen: Sie müssen kombinieren,<br />

Verhältnisse bestimmen und<br />

abschätzen (Abbildung B).<br />

Die Gedächtnisspiele fordern<br />

Ihr Kurzzeitgedächtnis: Hier<br />

müssen Sie sich Dinge merken.<br />

Die verbalen Analogien prüfen<br />

Ihr Vokabular ab, indem Sie zum<br />

Beispiel Synonyme oder Gegenteile<br />

benennen oder Wortpaare<br />

richtig zuordnen müssen.<br />

Starten Sie mit Ihrer Trainingsrunde,<br />

indem Sie aus der Leiste<br />

links im Programmfenster eine<br />

Spielart auswählen. Sofern Sie<br />

eine kombinierte Übung mit Aufgaben<br />

aus allen vier Gebieten<br />

durchlaufen möchten, klicken Sie<br />

einfach auf Alle.<br />

README<br />

Mit verschiedenen Rätseln<br />

sorgt Gbrainy für<br />

ein wenig Abwechslung<br />

zwischendurch. Bei Bedarf<br />

nehmen Sie die<br />

Rätsel ausgedruckt an<br />

Orte mit, an denen kein<br />

Computer bereitsteht.<br />

A Viel Abwechslung: Gbrainy bietet Ihnen vier verschiedene<br />

Spielarten des Gedächtnistrainings an.<br />

B Mehr als nur schlichtes Rechnen: Hier gilt es zu taxieren,<br />

Verhältnisse zu schätzen und zu kombinieren.<br />

48 11 | 12<br />

www.linux-user.de


Gbrainy<br />

PRAXIS<br />

C Reality Check: Gbrainy präsentiert abschließend die<br />

korrekte Lösung der gestellten Aufgabe.<br />

D Auswertung: Gbrainy liefert aussagekräftige Statistiken.<br />

Hier ist beim Anwender noch etwas Übung vonnöten.<br />

Gbrainy stellt Sie nun sofort vor<br />

die ersten Herausforderungen.<br />

Lesen Sie sich die Aufgabenstellung<br />

in Ruhe durch. Auch davon<br />

hängt ab, ob Sie die Aufgabe richtig<br />

beantworten können, denn<br />

bei machen Aufgaben nimmt es<br />

Gbrainy sehr genau. Haben Sie<br />

eine Lösung beziehungsweise<br />

Antwort gefunden, tragen Sie<br />

diese in das Feld Antwort ein. Die<br />

Applikation zeigt, ob Sie recht<br />

hatten (Abbildung C).<br />

Sofern Sie einen Hinweis benötigen<br />

und ein solcher bereitsteht,<br />

klicken Sie auf den entsprechenden<br />

Button neben dem Feld für<br />

die Antwort. Finden Sie eine Aufgabe<br />

zu schwierig, springen Sie<br />

mit Weiter zur nächsten.<br />

Bei den mitunter sehr schwierigen<br />

Aufgaben raucht einem gelegentlich<br />

der Kopf. Sollten Sie also<br />

INSTALLATION<br />

Gbrainy findet sich im Paketfundus<br />

aller gängigen Distributionen, sodass<br />

Sie es bequem über das jeweilige<br />

Software-Verzeichnis installieren.<br />

Sollte sich Gbrainy wider Erwarten<br />

nicht in den Repositories der<br />

verwendeten Distribution finden,<br />

dann schlagen Sie die verfügbaren<br />

Pakete auf der Projekt-Website [2]<br />

nach, laden dort ein passendes herunter<br />

und installieren es manuell.<br />

Zum Einrichten und Übersetzen des<br />

Quellcodes finden Sie dort ebenfalls<br />

ausführliche Informationen.<br />

eine Pause benötigen, klicken Sie<br />

links auf Pause, um später mit der<br />

Runde fortzufahren. Beenden liefert<br />

eine Statistik und dazu eine<br />

realistische Einsätzung des Ergebnisses<br />

(Abbildung D).<br />

E Sie können alle Aufgaben auch<br />

ausdrucken und auf Papier lösen.<br />

Einstellungssache<br />

Haben Sie den Eindruck, dass die<br />

Rätsel zu kompliziert ausfallen,<br />

dann passen Sie über Einstellungen<br />

| Einstellungen den Schwierigkeitsgrad<br />

an. Über diesen Dialog<br />

ändern Sie zudem die Zeit in Sekunden,<br />

in denen Sie sich bei den<br />

Gedächtnisspielen Aufgaben merken<br />

müssen. Gerade diese Option<br />

erweist sich oft als ziemlich hilfreich,<br />

da es gerade diese Aufgaben<br />

in sich haben. Für ein ausgiebiges<br />

Offline-Training drucken Sie Aufgaben<br />

auf Papier aus. Klicken Sie<br />

dazu im Menü auf Spiel | Spiele als<br />

PDF-Datei exportieren. In dem sich<br />

daraufhin öffnenden Dialog PDF-<br />

Export haben Sie die Möglichkeit,<br />

eine Aufgabensammlung zusammenzustellen<br />

(Abbildung E).<br />

Die Aufgaben dürfen aus den Bereichen<br />

Logik, Rechnen und Verbal<br />

stammen, zudem können Sie den<br />

Schwierigkeitsgrad vorgeben. Außerdem<br />

bietet das Programm an<br />

dieser Stelle die Möglichkeit, die<br />

Anzahl der Aufgaben insgesamt<br />

sowie die Anzahl pro Blatt festzulegen.<br />

Nun brauchen Sie nur noch<br />

die generierte PDF-Datei zu speichern<br />

und im Anschluss über den<br />

Umweg eines PDF-Betrachters<br />

auszudrucken.<br />

Fazit<br />

Dank der vier verschiedenen Typen<br />

von Denksportaufgaben und<br />

der durchaus anspruchsvollen<br />

Schwierigkeitsgraden sorgt der<br />

Hirntrainer Gbrainy für viel Abwechslung<br />

auf dem Bildschirm.<br />

Für die meisten Übungen schon<br />

ab dem mittleren Schwierigkeitsgrad<br />

gilt es, sich ordentlich zu<br />

konzentrieren, um gute Ergebnisse<br />

zu erzielen. (agr) n<br />

INFO<br />

[1] Gbrainy: https:// live. gnome. org/ gbrainy<br />

[2] Download:<br />

https:// live. gnome. org/ gbrainy# Download<br />

www.linux-user.de<br />

11 | 12 49


PRAXIS<br />

Conky<br />

© Lidorico, sxc.hu<br />

Systeminformationen<br />

anzeigen mit Conky<br />

Scharfer<br />

Beobachter<br />

Was tut sich im System? Der kleine Helfer<br />

Conky fasst die Vitaldaten des Computers<br />

übersichtlich zusammen. Vincze-Aron Szabo<br />

Conky 1.9.0<br />

LU/conky/<br />

README<br />

Der kleine Systemmonitor<br />

Conky zeigt umfassende<br />

Informationen<br />

über das System auf<br />

dem Desktop an. Dabei<br />

bringt er vielfältige<br />

Optio nen zum Anpassen<br />

mit. Etwas komfortabler<br />

klappt das Konfigurieren<br />

mit dem kleinen<br />

Helfer Conky-color.<br />

Moderne Desktops versuchen,<br />

dem Anwender die Arbeit mit<br />

dem Computer so angenehm wie<br />

möglich zu gestalten. Auf kurzem<br />

Wege erreichen Sie nur diejenigen<br />

Funktionen, die Sie für den normalen<br />

PC-Alltag benötigen, umfassende<br />

Informationen über das<br />

System verstecken die Entwickler<br />

möglichst. Wer sich aber nur kurz<br />

versichern will, ob der freie Platz<br />

auf einer bestimmten Festplattenpartition<br />

noch ausreicht, für<br />

den heißt es auf die Suche gehen.<br />

Dabei hilft der Systemmonitor<br />

Conky [1], der bei Bedarf so gut<br />

wie alle Informationen in einem<br />

Widget auf dem Desktop anzeigt<br />

(Abbildung A). Sie haben zudem<br />

INSTALLATION<br />

die Möglichkeit, diese Anzeige<br />

nach Belieben zu konfigurieren<br />

und das Programm frei auf dem<br />

Desktop zu positionieren.<br />

Conky verfügt über keine grafische<br />

Konfigurationsoberfläche,<br />

Sie müssen die Applikation über<br />

eine Konfigurationsdatei anpassen.<br />

Darüber hinaus bietet das<br />

Skript Conky-colors eine einfache<br />

Möglichkeit, das Programm mit<br />

einem Befehl auf der Kommandozeile<br />

schnell und ohne Editieren<br />

der Datei anzupassen.<br />

Aus einem Terminal heraus nutzen<br />

Sie den Befehl conky zum Starten<br />

des Programms. In der Grundkonfiguration<br />

sieht Conky ein wenig<br />

technisch aus (Abbildung A).<br />

Conky findet sich im Paketfundus aller<br />

gängigen Distributionen, sodass<br />

Sie den Systemmonitor meist komfortabel<br />

über die jeweiligen Verwaltungswerkzeuge<br />

einrichten.<br />

Unter Ubuntu installieren Sie Conky<br />

am einfachsten über das Software-<br />

Center. Suchen Sie dort nach conky.<br />

Sie haben die Wahl zwischen den Paketen<br />

conky-all, conky-std und conkycli,<br />

wobei sich Letzteres eher für den<br />

Einsatz auf einem Server eignet. Alternativ<br />

integrieren Sie Conky über<br />

das Kommando sudo apt-get<br />

install conky ins System.<br />

Unter Fedora gestaltet sich die Installation<br />

ebenso einfach: Hier verwenden<br />

Sie mit Root-Rechten das Kommando<br />

sudo yum install conky zum<br />

Installieren der Software.<br />

Daher bietet es sich an, die Anwendung<br />

gleich ein wenig anzupassen.<br />

Dazu müssen Sie nicht<br />

bei null anfangen, sondern können<br />

die systemweite Konfigurationsdatei<br />

/etc/conky/conky.conf<br />

als Ausgangsbasis für weitere<br />

Anpassungen verwenden.<br />

Sie kopieren die Datei dazu in<br />

Ihr Benutzerverzeichnis und benennen<br />

sie in .conkyrc um. Anschließend<br />

öffnen Sie das File in<br />

einem beliebigen Texteditor.<br />

Manuell anpassen<br />

Die Konfigurationsdatei gliedert<br />

sich in zwei Teile: Der erste enthält<br />

Parameter für das Programm, wie<br />

die Größe des Fensters auf dem<br />

Desktop und die zu verwendenden<br />

Farben und Rahmen. Im zwei ten<br />

Teil, den das Schlüsselwort TEXT<br />

LISTING 1<br />

01 alignment bottom_right<br />

02 gap_x 40<br />

03 gap_y 40<br />

04 use_xft yes<br />

05 xftfont Arial<br />

06 own_window_transparent yes<br />

50 11 | 12<br />

www.linux-user.de


Conky<br />

PRAXIS<br />

A Nach der Installation liefert<br />

Conky bereits in der Basiskonfiguration<br />

hilfreiche<br />

Informationen.<br />

B Mit wenigen Handgriffen<br />

passen Sie<br />

Conky optisch besser<br />

an Ihren Desktop an.<br />

einleitet, konfigurieren<br />

Sie, was die Applika tion an<br />

Daten ausgibt.<br />

Im Test flackerte die Anzeige<br />

von Conky nach dem<br />

Starten, wenn ein Fenster<br />

über dem Widget lag. Tritt<br />

dieser Effekt auch bei Ihnen<br />

auf, ergänzen Sie die Konfiguration<br />

im ersten Teil um die Zeile<br />

double_buffer yes. Beseitigt dies<br />

das Problem nicht, bleibt noch die<br />

Möglichkeit, Conky in einem eigenen<br />

Fenster auszuführen. Dazu<br />

tragen Sie die Zeile own_window yes<br />

in die Konfigurationsdatei ein.<br />

Haben Sie die Datei gespeichert,<br />

erkennt die Software in der Regel,<br />

dass sich in der Datei etwas geändert<br />

hat – falls nicht, starten Sie<br />

Conky gegebenenfalls neu.<br />

Alle Conky-Optionen setzen sich<br />

aus einem Namen und einem zugehörigen<br />

Wert zusammen. Mittels<br />

der Optionen passen Sie den<br />

Systemmonitor optisch an Ihre<br />

Bedürfnissen an, bereits mit wenigen<br />

Einstellungen verändern Sie<br />

das Aussehen stark.<br />

Die Einstellungen aus Listing 1<br />

passen Conky so an, wie Abbildung<br />

B es zeigt. Mit own_window_<br />

transparent yes verordnen Sie dem<br />

Fenster von Conky eine Pseudo-<br />

Transparenz. Dabei fügt die Software<br />

ein Abbild des Desktops als<br />

Hintergrundbild ein. Um das Anpassen<br />

der Schriftart kümmern<br />

Sie sich mit use_xft yes und xftfont<br />

Arial, wobei Sie jede Schrift<br />

verwenden dürfen, die auf dem<br />

System installiert ist.<br />

Die Position auf dem Desktop<br />

geben Sie mit der Option alignment<br />

an. Der Wert bottom_right sorgt<br />

dafür, dass Conky unten rechts<br />

auf dem Bildschirm steht. Die<br />

Werte hinter gap_x und gap_y sorgen<br />

für einen entsprechenden Abstand<br />

(im konkreten Fall 40 Pixel)<br />

zum Bildschirmrand. Eine Auswahl<br />

an weiteren Optionen fasst<br />

die Tabelle Optionen für das Design<br />

zusammen. Die vollständige<br />

Übersicht über verfügbaren Optionen<br />

finden Sie im Netz [2].<br />

Neben den Optionen zum Darstellen<br />

der Informationen haben Sie<br />

im Bereich TEXT die Möglichkeit,<br />

bestimmte Ausgaben vorzunehmen<br />

wie die Anzahl neuer E-Mails<br />

oder die Ausgabe von Temperatursensoren.<br />

Eine Beschreibung dieser<br />

Optionen fasst die Tabelle Optionen<br />

für die Ausgabe zusammen.<br />

Eine Übersicht über alle Optionen<br />

finden Sie im Netz [3].<br />

Ausgabe anpassen<br />

Sie passen die Informationen, die<br />

Conky anzeigt, in der Konfigurationsdatei<br />

.conkyrc in einem Abschnitt<br />

an, der auf eine Zeile mit<br />

dem Eintrag TEXT folgt. Neben<br />

Basisinformationen zum System,<br />

wie der Auslastung der CPUs, der<br />

Festplatten oder des Hauptspeichers,<br />

kann Conky unter anderem<br />

auch den Ladestand von Akkus,<br />

IP-Adressen, Temperaturen von<br />

Option<br />

alignment<br />

border_width<br />

default_color<br />

use_xft<br />

xftfont<br />

draw_borders<br />

maximum_width<br />

minimum_size<br />

border_inner_<br />

margin<br />

uppercase<br />

OPTIONEN FÜR DAS DESIGN<br />

Beschreibung<br />

positioniert Conky auf dem Bildschirm<br />

(top_left, top_right, top_middle, bottom_left,<br />

bottom_right, bottom_middle, middle_left,<br />

middle_middle, middle_right, none)<br />

Breite des Rahmens in Pixeln<br />

Standardfarbe und Farbe des Randes<br />

geglättete Schriften aktivieren (yes/no)<br />

zu verwendende Schriftart<br />

Rahmen aktivieren (yes, no)<br />

maximale Breite des Fensters in Pixel<br />

maximale Höhe des Fensters in Pixel<br />

Abstand vom Rahmen (innen) in Pixel<br />

nur Großbuchstaben für die Ausgabe verwenden<br />

(yes/no)<br />

OPTIONEN FÜR DIE AUSGABE<br />

Option Beschreibung<br />

machine Ausgabe zur Prozessorarchitektur<br />

color färbt der Ausgabe in einer anderen Farbe ein (Beispiel: ${color grey})<br />

freq_g Prozessortaktrate in GHz (bei mehreren Prozessoren zeigt ${freq_g<br />

1} den Wert des ersten Prozessors)<br />

freq Prozessortaktrate in MHz (bei mehreren Prozessoren gilt dasselbe wie<br />

bei freq_g)<br />

cpu aktuelle CPU-Auslastung in Prozent (bei mehreren Prozessoren zeigt<br />

${cpu cpu0} den Gesamtwert für alle Prozessoren, ${cpu cpu1} den<br />

Wert des ersten Prozessors)<br />

cpubar CPU-Auslastung in Form eines Balkens<br />

(Höhe und Breite konfigurierbar, Beispiel: ${cpubar 12,100})<br />

fs_used Größe des derzeit verwendeten Festplattenspeichers<br />

fs_size Größe des insgesamt vorhandenen Festplattenspeichers<br />

fs_bar Belegung der Festplatte in Form eines Balkens<br />

fs_used_ Auslastung des Festplattenspeichers in Prozent<br />

perc<br />

www.linux-user.de<br />

11 | 12 51


PRAXIS<br />

Conky<br />

C Mit wenigen Handgriffen<br />

haben Sie die<br />

Ausgabe von Conky um<br />

die von Ihnen gewünschten<br />

Angaben<br />

erweitert.<br />

D Mit Conky-colors erzeugen<br />

Sie eine schicke<br />

Ansicht der wichtigsten<br />

Systeminfos<br />

auf dem Desktop.<br />

LISTING 2<br />

Komponenten, RSS-Feeds oder<br />

Benachrichtigungen über neue<br />

Mails ausgeben. Wie Sie diesen<br />

Bereich der Konfiguration anpassen,<br />

demonstriert Listing 2. Abbildung<br />

C zeigt, was die Konfiguration<br />

auf dem Desktop bewirkt.<br />

Für die Ausgabe der Werte sind<br />

Variablen zuständig, die Sie mit<br />

01 TEXT<br />

02 $alignr ${color grey}Systeminformationen $color<br />

03 Prozessor $color $hr<br />

04 ${color grey}CPU-Taktrate:$color $freq_g GHz<br />

05 ${color grey}CPU-Auslastung:$color ${cpubar 12,100}<br />

$cpu%<br />

06<br />

07 Festplatte $color $hr<br />

08 $color${fs_used /} von ${fs_size /} verwendet -<br />

${fs_used_perc /}%<br />

09 ${fs_bar 12 /}<br />

10<br />

11 Hauptspeicher $color $hr<br />

12 $mem von $memmax verwendet - $memperc%<br />

13 ${membar 12}<br />

LISTING 3<br />

$ sudo apt-get install aptitude python-statgrab<br />

python-keyring ttf-ubuntu-font-family hddtemp curl<br />

lm-sensors conky-all<br />

$ sudo chmod u+s /usr/sbin/hddtemp<br />

$ sudo sensors-detect<br />

einem vorangestellten Dollar-Zeichen<br />

einleiten, also $machine. Sofern<br />

Sie einer Variable einen Wert<br />

zuweisen möchten, kommt die<br />

geschweifte Klammer ins Spiel:<br />

Mit dieser umschließen Sie in<br />

einem solchen Fall Option und<br />

Wert: ${color grey}.<br />

Die CPU-Auslastung binden Sie<br />

über die Variable $cpu ein. Damit<br />

zeigt die Applikation den Wert in<br />

Prozent an, und das tut sie standardmäßig<br />

für alle vorhandenen<br />

Prozessoren. Möchten Sie nur<br />

Werte für einen bestimmten Prozessor<br />

ausgeben, geben Sie die<br />

Nummer der CPU als Wert an. Mit<br />

${cpu cpu1} gibt Conky den Wert<br />

für den ersten Prozessor aus, cpu2<br />

würde den zweiten auslesen.<br />

Um den Prozentwert stärker zu<br />

verdeutlichen, bietet Conky verschiedene<br />

grafische Darstellungsformen<br />

an. Dazu zählt auch eine<br />

Ausgabe in Balkenform, die Sie<br />

mit der Variablen $cpubar aktivieren.<br />

Durch die Angabe von Höhe<br />

und Breite teilen Sie Conky mit,<br />

wie groß der Balken ausfallen soll.<br />

Mit ${cpubar 12,100} nimmt er eine<br />

Höhe von 12 Pixeln und eine Breite<br />

von 100 Pixeln ein.<br />

Die Ausgabe der Festplattenbelegung<br />

erfolgt über die Variable<br />

$fs_used. In Kombination mit der<br />

Variablen $fs_size erzeugen Sie<br />

eine Ausgabe, die aussagt, welcher<br />

Anteil des insgesamt verfügbaren<br />

Festplattenspeicher belegt<br />

ist (Zeile 8 in Listing 2).<br />

Durch die Angabe des Schrägstrichs<br />

für das Root-Dateisystem<br />

wertet das Programm das an der<br />

entsprechenden Stelle gemountete<br />

Dateisystem aus (${fs_used /}).<br />

Wie bei den Angaben zur CPU unterstützt<br />

Conky bei der Anzeige<br />

von Daten für Festplatten die Ausgabe<br />

als Balken. Hier heißt die<br />

entsprechende Variable $fs_bar.<br />

Für den Hauptspeicher stehen<br />

ähnliche Variablen bereit. Mit $mem<br />

und $memmax geben Sie den aktuell<br />

verwendeten Speicher und den<br />

maximal verfügbaren Speicher<br />

aus. Den entsprechenden Balken<br />

zeigt Conky mit $membar an.<br />

Conky-colors<br />

Das Skript Conky-colors [4] erleichtert<br />

die Konfiguration, indem<br />

es manuelle Anpassungen<br />

der Konfigurationsdatei überflüssig<br />

macht. Stattdessen erstellen<br />

Sie mit bestimmten Optionen<br />

eine Konfiguration, die es in sich<br />

hat. Vorher empfiehlt es sich<br />

aber, die selbst angepasste Konfigurationsdatei<br />

unter einem anderen<br />

Namen zu sichern.<br />

Außerdem bereiten die in Listing<br />

3 beschriebenen Schritte das<br />

System auf den Einsatz der Software<br />

vor. Die Installation des<br />

Paketes hddtemp erfordert von<br />

Ihnen während der Installation<br />

noch die Bestätigung, dass dieser<br />

Dienst beim Systemstart automatisch<br />

startet. Im dritten Schritt<br />

müssen Sie alle Fragen, die das<br />

Setup Ihnen stellt, mit yes beantworten.<br />

Hier geht es darum, welche<br />

Sensoren des Rechners Sie<br />

überwachen möchten.<br />

Auf diese Vorbereitungen folgt<br />

die Installation von Conky-colors.<br />

Dazu laden Sie die Quelldatei bei<br />

Deviantart herunter, indem Sie<br />

auf Download File oben rechts auf<br />

der Webseite klicken. Sie entpacken<br />

Sie das heruntergeladene<br />

ZIP-Archiv in einem Verzeichnis<br />

Ihrer Wahl, öffnen eine Konsole,<br />

wechseln in das Verzeichnis und<br />

führen die folgenden Schritte aus:<br />

$ make<br />

$ sudo make install<br />

Dann konfigurieren Sie mittels eines<br />

einfachen Kommandos den<br />

Systemmonitor. Eine Übersicht<br />

über alle verfügbaren Optionen<br />

erhalten Sie über<br />

$ ./conky-colors --help<br />

Der Befehl conky-colors --lang=de<br />

genügt für einen einfachen Start.<br />

Damit erstellen Sie eine Konfiguration<br />

für eine Ausgabe in deutscher<br />

Sprache. Das Skript fragt<br />

nun, ob es sich bei Ihrer Distribution<br />

um Ubuntu oder eine andere<br />

Debian-ähnliche Distribution<br />

52 11 | 12<br />

www.linux-user.de


Conky<br />

PRAXIS<br />

E Das Cairo-<br />

Theme sorgt mit<br />

kreisförmigen<br />

Diagrammen für<br />

Hingucker.<br />

F Mit der Option<br />

--slim erzeugt Conkycolors<br />

diese Ausgabe.<br />

handelt. Bestätigen<br />

Sie entsprechend<br />

mit y für<br />

ja oder n für<br />

nein, wenn keines<br />

von beidem<br />

zutrifft. Danach<br />

erstellt das Programm<br />

die entsprechende<br />

Konfiguration. Diese<br />

nutzen Sie mit folgendem Befehl:<br />

$ conky -c /home/benutzername/.cU<br />

onkycolors/conkyrc<br />

Conky-colors übernimmt auch<br />

mehrere Optionen. Mit dem folgenden<br />

Befehl erweitern Sie die<br />

Konfiguration um die Ausgabe der<br />

Netzwerklast sowie eines Kalenders<br />

und verändern das Layout der<br />

Ausgabe mithilfe eines Themes:<br />

$ conky-colors --lang=de --netwoU<br />

rk --calendar --theme=ambiance<br />

Anschließend müssen Sie Conky<br />

neu starten. Die Option --lang=de<br />

sorgt wieder für die Ausgabe in<br />

deutscher Sprache (Abbildung D).<br />

Conky-colors stellt verschiedene<br />

Farbschemata bereit, über die Sie<br />

die Ausgabe optisch an den Desktop<br />

anpassen. Wenn Sie mit<br />

./ conky-colors --help die Hilfe aufrufen,<br />

finden Sie unter Themes<br />

alle verfügbaren Optionen, darunter<br />

zum Beispiel brave, carbonite,<br />

noble oder einfach blue oder<br />

red. Sie müssen sich nur für einen<br />

der Begriffe entscheiden und die<br />

Software mit der Option<br />

--theme=Theme-Name aufrufen.<br />

Mit Cairo<br />

Die Anpassungsmöglichkeiten<br />

von Conky-colors beschränken<br />

sich aber nicht nur auf Farben.<br />

Das Tool enthält ein Thema namens<br />

cairo, mit dem Sie die Ausgabe<br />

der Informationen optisch<br />

wunderbar aufhübschen (Abbildung<br />

E). Geben Sie dazu zum Beispiel<br />

folgende Konfiguration ein:<br />

$ conky-colors --cairo --lang=deU<br />

--network --theme=ambiance<br />

Als Alternativen zum Cairo-Thema<br />

bietet sich zum Beispiel --slim für<br />

eine Ausgabe über die gesamte<br />

Bildschirmbreite (Abbildung F)<br />

an. Hierbei geben Sie zusätzlich<br />

die Auflösung des Displays an:<br />

$ conky-colors --slim --lang=de U<br />

--w=1920 --h=1080<br />

Das Theme sls sieht nicht nur gut<br />

aus, sondern liefert zusätzlich<br />

auch noch Informationen zum<br />

Wetter (Abbildung G). Dazu geben<br />

Sie einen Code für den Ort<br />

an, für den Sie die Informationen<br />

gezeigt bekommen möchten:<br />

conky-colors --sls --lang=de --wU<br />

eather=Wettercode --theme=blue<br />

INFO<br />

[1] Conky: http:// conky. sourceforge. net/<br />

[2] Conky-Optionen: http:// conky. sourceforge.<br />

net/ config_settings. html<br />

[3] Conky-Variablen: http:// conky. sourceforge.<br />

net/ variables. html<br />

[4] Conky-colors: http:// helmuthdu. deviantart.<br />

com/ art/ CONKY-COLORS-244793180?<br />

[5] Wettercodes: http:// edg3. co. uk/ snippets/<br />

weather-location-codes/ germany/<br />

Eine Liste entsprechender Codes<br />

finden Sie im Web [5]; derjenige<br />

für Berlin lautet zum Beispiel<br />

„GMXX0007“.<br />

Fazit<br />

Conky bietet vielseitige Möglichkeiten,<br />

den eigenen Spieltrieb<br />

auszuleben und mit einfachen<br />

Mitteln individuell angepasste<br />

Desktop-Widgets zu erstellen.<br />

Das Fehlen einer grafische Oberfläche<br />

erschwert zwar den Einstieg,<br />

aber dafür erfolgt die Konfiguration<br />

nach einem festgelegten<br />

Schema, mit dem Sie schnell<br />

Ergebnisse erzielen. Dank Conkycolors<br />

brauchen Sie zudem nicht<br />

ständig an der Konfigurationsdatei<br />

zu schrauben. (agr) n<br />

G Über die Option<br />

--sls kommen Sie in<br />

den Genuss von<br />

Wetter informationen<br />

für den gewählten<br />

Standort.<br />

www.linux-user.de<br />

11 | 12 53


PRAXIS<br />

Gecamed<br />

Daten verwalten in einer medizinischen Praxis mit Gecamed<br />

Neues Rezept<br />

Als freie Software eignet sich das Programm Gecamed ideal zum<br />

Einsatz in Privatpraxen. Damit stößt es in einen hart umkämpften<br />

Bereich der Branchensoftware vor. Dr. Martin Schwarz<br />

© Mspurity, sxc.hu<br />

README<br />

Das Centre de Recherche<br />

Henri Tudor in<br />

Luxemburg hat die Praxissoftware<br />

Gecamed<br />

unter einer freien Lizenz<br />

entwickelt. Diese Offenheit<br />

erlaubt es, das Programm<br />

mit einigen<br />

Handgriffen für den Einsatz<br />

in deutschen Privatpraxen<br />

fit zu machen.<br />

Sein Entstehen verdankt das<br />

Programm Gecamed einem tragischen<br />

Ereignis: der Insolvenz eines<br />

großen Softwarehauses in<br />

Luxemburg. Im Anschluss saßen<br />

viele niedergelassene Ärzte hilflos<br />

vor ihrem Programm zum Verwalten<br />

der Praxis. Ein Teil der Nutzer<br />

wandte sich in seiner Not an das<br />

Centre de Recherche Henri Tudor,<br />

um gemeinsam mit diesem ein<br />

modernes, zukunftsorientiertes<br />

Programm zu entwickeln.<br />

Insbesondere wollten die Beteiligten<br />

die Probleme, die beim<br />

Wegfallen des Supports durch die<br />

insolvente Firma entstehen, mit<br />

einem neuen Ansatz vermeiden.<br />

So entschieden sie sich, ein Programm<br />

unter einer freien Lizenz<br />

zu entwickeln, dessen Support<br />

und Weiterentwicklung nicht<br />

mehr von einer einzigen Firma<br />

abhängt (siehe Kasten Hintergrund:<br />

Patientensoftware). Das<br />

resultierende Programm Gecamed<br />

[1] steht unter der GPL v3.<br />

Die Entwickler setzten also auf<br />

eine freie Lizenz, um die Nachhaltigkeit<br />

des Projektes zu garantieren.<br />

Das Akronym Gecamed leitet<br />

sich von „Gestion de Cabinets médicaux“<br />

ab, was übersetzt „Verwaltung<br />

von Arztpraxen“ bedeutet.<br />

Beim Centre de Recherche Henri<br />

Tudor handelt es sich um ein öffentlich-rechtliches<br />

Forschungsinstitut.<br />

Der Luxemburger Forscher<br />

und Industrielle Henri<br />

Owen Tudor baute unter anderem<br />

die erste nutzbare Batterie<br />

auf Blei-Säure-Basis nach dem<br />

von Gaston Planté entwickelten<br />

Prinzip. Das Institut vereint mehrere<br />

themenorientierte Abteilun-<br />

HINTERGRUND: PATIENTENSOFTWARE<br />

Etwa 80 Prozent aller Menschen in Deutschland sind Mitglied in der gesetzlichen<br />

Krankenversicherung. In diesem Fall greifen beim Abrechnen<br />

von Leistungen die Regelwerke der jeweiligen lokalen Kassenärztlichen<br />

Vereinigung (KV). Zugrunde liegt der einheitliche Bewertungsmaßstab<br />

(EBM). Teilweise existieren aber bereits innerhalb eines Bundeslandes<br />

unterschiedliche Vorgaben, welche sich in einigen Fällen schon bis zu viermal<br />

im Jahr geändert haben. Vor etwa einem Jahr berichtete <strong>LinuxUser</strong><br />

schon im Rahmen des Reports „Doktor Tux“ über dieses Chaos [4].<br />

Die entsprechende Pflege einer Patientensoftware erweist sich daher als<br />

aufwendig und teuer. Das Abrechnen von Hand ist nicht mehr erlaubt, die<br />

Zulassung eines Programmes durch die KV auf Bundesebene zwingend<br />

erforderlich. Es gibt zwar einige kommerzielle Praxisverwaltungen unter<br />

Linux, jedoch nur wenige freie Programme. Zu diesen Programmen gehört<br />

neben Gecamed die Software GNUmed [5]. Rund 60 Prozent der kommerziellen<br />

Anwendungen stammen von einem einzelnen Anbieter, der<br />

CompuGroup [6]. Die Lösungen unterscheiden sich zum Teil sehr stark in<br />

Bezug auf die zugrunde liegende Datenbank sowie die Programmiersprache.<br />

Anwendungen auf SQL-Basis sind eher rar.<br />

Der Mehrheit der gesetzlich Versicherten stehen in Deutschland 20 Prozent<br />

Beamte und privat Versicherte gegenüber. Für diese greift die Gebührenordnung<br />

Ärzte (GOÄ), die seit 1988 ein einheitliches Regelwerk hat<br />

und für ganz Deutschland identische Beträge vorsieht. Eine spezielle Zulassung<br />

der Software für diesen Zweck ist nicht erforderlich. In diesem<br />

Umfeld lässt sich Gecamed ideal einsetzen.<br />

54 11 | 12<br />

www.linux-user.de


Gecamed<br />

PRAXIS<br />

gen in sich, unter anderem eine<br />

mit dem Schwerpunkt Gesundheitspolitik<br />

(„Santec“-Team).<br />

Das Programm selbst liegt in<br />

den Luxemburger Amtssprachen<br />

Französisch und Deutsch sowie in<br />

Englisch vor. Der Nutzer darf die<br />

Sprache individuell wählen. Abrechnungstechnisch<br />

liegt das<br />

Luxemburger Regelwerk zugrunde,<br />

eine Zulassung für das elektronische<br />

Abrechnen mit gesetzlichen<br />

Kassen in Deutschland fehlt<br />

daher. Trotz dieser Hindernisse<br />

besteht die Möglichkeit, die Software<br />

hierzulande einzusetzen.<br />

Ein erfolgreicher Fall zeigt dies.<br />

2008 unternahm der Autor, ein<br />

Chirurg, einen entscheidenden<br />

Schritt und gab seine Zulassung<br />

zum Abrechnen mit den gesetzlichen<br />

Kassen ab. Damit entfiel<br />

für ihn die Notwendigkeit, eine<br />

offiziell zugelassene Software<br />

zum Dokumentieren der Fälle<br />

und Abrechnen der Leistungen<br />

einzusetzen. Freie Programme<br />

mit integrierter Bildverwaltung<br />

waren allerdings für die Bedürfnisse<br />

der Chirurgie nur schwer zu<br />

finden. Software aus dem Bereich<br />

CRM wies, was die Medizin betrifft,<br />

deutliche Mängel auf.<br />

Erst 2010 kam es auf der Fachmesse<br />

Medica in Düsseldorf<br />

durch ein persönliches Gespräch<br />

zur Initialzündung für den Einsatz<br />

von Gecamed, das seit diesem<br />

Zeitpunkt zum Einsatz<br />

kommt. Als Frontend arbeitet ein<br />

Java-Programm, die Datenbank<br />

PostgreSQL bildet das Rückgrat.<br />

stellungen fest. Die Menüleiste<br />

(2) enthält wichtige Aktionen des<br />

jeweiligen Moduls sowie weitere<br />

Funktionen. Der Hauptbereich<br />

(3) ändert sich in Abhängigkeit<br />

vom gerade gewählten Modul.<br />

Diesem Konzept folgt die Software<br />

in allen Bereichen.<br />

Das Modul Patienten erlaubt es,<br />

sämtliche Daten zur Person zu erfassen<br />

(Abbildung B). Ganz ähnlich<br />

wie eine Krankenakte aus Papier<br />

umfasst auch die elektronische<br />

Dokumentation heute zusätzliche<br />

Dokumente. Daher zeigt<br />

die Software in diesem Bereich<br />

auch eingescannte Fremdbefunde,<br />

Briefe oder Röntgenbilder an<br />

(Abbildung C, nächste Seite).<br />

Installation<br />

Gecamed ist in Java geschrieben<br />

und läuft auf den Plattformen<br />

Linux, Mac OS X, Microsoft Windows,<br />

aber auch auf anderen Betriebssystemen,<br />

sofern diese Java<br />

ab Version 1.5 mitbringen. Die<br />

Software steht auf der Projekt-<br />

Homepage als Debian-Paket und<br />

Tarball sowie Windows-Executable<br />

und Mac-Archiv in der neuesten<br />

Version bereit.<br />

Unter Ubuntu gelingt die Installation<br />

ohne Schwierigkeiten, die<br />

abhängigen Pakete zieht das System<br />

automatisch nach. Weitere<br />

Tests mit Rechnern unter Linux<br />

Mint und Windows verliefen<br />

ebenfalls problemlos.<br />

A Das dreigeteilte<br />

Hauptfenster ermöglicht<br />

einen schnellen<br />

Zugriff auf alle Module<br />

der Software sowie deren<br />

jeweilige Funktion.<br />

B Der Bereich Patient<br />

mit allen relevanten<br />

Daten. Über die Leiste<br />

rechts fügen Sie<br />

Fremdbefunde hinzu.<br />

Aufbau<br />

Gecamed weist einen modularen<br />

Aufbau auf (Abbildung A). Die<br />

Modulleiste (1) enthält Schaltflächen,<br />

mit denen Sie zwischen den<br />

aktivierten Modulen hin- und<br />

herschalten. Das Programm zeigt<br />

diese Leiste permanent an, sodass<br />

Sie von jeder Stelle des Programmes<br />

aus direkt ins gewünschte<br />

Modul wechseln können.<br />

Die Größe und Anordnung der<br />

Schaltflächen sowie deren Verfügbarkeit<br />

legen Sie in den Ein-<br />

www.linux-user.de<br />

11 | 12 55


PRAXIS<br />

Gecamed<br />

blendet. So hat beispielsweise<br />

der Autor<br />

als Chirurg das Modul<br />

Labor ausgeblendet.<br />

C Röntgenbilder im<br />

DICOM-Format speichern<br />

Sie wie bei einer<br />

herkömmlichen Krankenakte<br />

direkt bei den<br />

Patientendaten.<br />

D Über den Browser<br />

laden Sie den Client<br />

herunter und öffnen<br />

die Datei mittels Java<br />

Web Start. Allerdings<br />

hakt es manchmal bei<br />

der OpenJDK-Variante<br />

Iced Tea.<br />

Nach einem Neustart geben Sie<br />

im Browser die URL http://<br />

localhost:8080/gecamed ein. Greifen<br />

Sie nicht vom gleichen Computer<br />

auf die Software zu, auf dem diese<br />

ins talliert ist, ersetzen Sie<br />

localhost durch die IP-Adresse des<br />

entsprechenden Rechners.<br />

Beim Klick auf Start GECAMed<br />

versucht der Browser den Client<br />

auf den Rechner herunterzuladen<br />

und fragt dazu in der Regel, was<br />

Sie mit der Datei tun möchten<br />

(Abbildung D). Die heruntergeladene<br />

Datei Gecamed.jnlp legen Sie<br />

bei Bedarf als Starter an beliebiger<br />

Stelle ab.<br />

Beim Öffnen mit Java startet<br />

dann das eigentliche Programm.<br />

Mit der OpenJDK-Variante Iced-<br />

Tea gibt es dabei Probleme. Die<br />

Java-Version von Oracle dagegen<br />

bereitet dagegen keine Schwierigkeiten,<br />

ist aber nicht mehr Bestandteil<br />

der Paketquellen von<br />

Ubuntu und Mint. Im Netz finden<br />

sich jedoch zahlreiche Anleitungen<br />

zum Ersatz [2].<br />

Besonderes Augenmerk haben<br />

die Entwickler der Software auf<br />

die sehr detaillierte Rechteverwaltung<br />

gelegt (Abbildung E).<br />

Gecamed unterscheidet dabei<br />

zwischen Benutzern und Ärzten.<br />

Der Grund liegt in der Tatsache,<br />

dass neben den Ärzten selbst<br />

auch das Praxispersonal Informationen<br />

über einen Patienten abrufen<br />

und verwenden muss.<br />

Die vom Administrator angelegten<br />

Benutzer haben demzufolge<br />

unterschiedliche Rechte. Aus<br />

Sicht der Software handelt es sich<br />

bei „Ärzten“ lediglich um eine im<br />

System hinterlegte Information<br />

über die behandelnden Mediziner<br />

in der Praxis. Einzelne Benutzer<br />

haben dann nur noch Zugriff auf<br />

die Abrechnung, jedoch nicht auf<br />

die medizinischen Daten.<br />

Für den Administrator besteht<br />

parallel dazu die Möglichkeit, das<br />

Panel weiter anzupassen, indem<br />

er nicht benötigte Module aus-<br />

Datenbank<br />

Als Datenbank kommt<br />

bei Gecamed Postgre-<br />

SQL zum Einsatz, was<br />

bei entsprechenden<br />

Kenntnissen ein komfortables<br />

und an persönlichen<br />

Bedürfnissen<br />

orientiertes Arbeiten<br />

ermöglicht. Mit dem<br />

Programm PgAdmin<br />

aus den Ubuntu-Repositories<br />

verwalten Sie die<br />

Datenbank über ein grafisches<br />

Frontend (Abbildung<br />

F, nächste Doppelseite).<br />

Auf diese Weise<br />

pflegen Sie die Abrechnungsziffern<br />

der deutschen „Gebührenordnung<br />

Ärzte“ (GOÄ) ein. Das<br />

Einpflegen einzelner Abrechnungsziffern<br />

klappt komfortabel<br />

direkt im Modul Abrechnung über<br />

den entsprechenden Schalter.<br />

Im konkreten Fall gelang das<br />

Importieren zwar problemlos, es<br />

kam aber später zu Differenzen<br />

beim Runden: Das Luxemburger<br />

Recht, auf das Gecamed aufbaut,<br />

sieht vor, Nachkommastellen im<br />

Cent-Bereich immer aufzurunden<br />

– nach deutschem Recht gilt jedoch<br />

das kaufmännische Runden.<br />

Die kommende Version von Gecamed<br />

soll diese deutsche Besonderheit<br />

allerdings bereits berücksichtigen.<br />

Die entsprechenden Tabellen<br />

liegen unter Billing. Prinzipiell<br />

besteht hier die Möglichkeit,<br />

die ganze GOÄ zu importieren.<br />

Für einzelne Testungen oder Ziffern<br />

ist das Modul Abrechnung<br />

aber mit einem Button Hinzufügen<br />

ausgestattet.<br />

Briefe und Rechnungen<br />

Um die Rechnungen zu schreiben,<br />

empfiehlt es sich derzeit, auf die<br />

Textverarbeitung LibreOffice zu<br />

setzen. Im Modul Briefe und Vorlagen<br />

haben Sie die Möglichkeit,<br />

entsprechende Vorlagen mit<br />

56 11 | 12<br />

www.linux-user.de


Gecamed<br />

PRAXIS<br />

Platzhaltern für Felder aus der<br />

Datenbank zu hinterlegen. Die<br />

Integration der in Gecamed enthaltenen<br />

Adressverwaltung gelang<br />

im Test problemlos. Bei Bedarf<br />

gestalten Sie in LibreOffice<br />

einen entsprechenden Briefkopf<br />

und Rechnungsvorlagen.<br />

Aufgrund der bereits erwähnten<br />

Rundungsdifferenzen eignet sich<br />

das Abrechnungsmodul im Moment<br />

noch nicht für die deutsche<br />

Gebührenordnung, über die Tabellenkalkulation<br />

von LibreOffice<br />

erstellen Sie jedoch problemlos<br />

eine Rechnung.<br />

Formulare<br />

Der in Gecamed integrierte Formulareditor<br />

erlaubt es, an die Besonderheiten<br />

der Praxis angepasste<br />

Druckvorlagen zu erstellen.<br />

Wem das nicht genügt, der<br />

exportiert die vorkonfigurierten<br />

Druckvorlagen. Diese liegen dann<br />

im JRXML-Format der freien Berichtssoftware<br />

JasperReports [3]<br />

vor. Diese Vorgehensweise ermöglicht<br />

es, die Druckvorlagen<br />

im Programm Jasper iReport zu<br />

modifizieren und die Daten dann<br />

erneut hochzuladen.<br />

Dabei überschreibt die Software<br />

nicht die Standardvorlage. Das<br />

gestattet es beispielsweise, für die<br />

Praxis im Allgemeinen beziehungsweise<br />

für jeden im System<br />

eingetragenen Arzt im Besonde-<br />

E Als Administrator<br />

haben Sie die Möglichkeit,<br />

für jeden Nutzer<br />

detailliert die Rechte<br />

festzulegen.<br />

ALLES ZUM THEMA ANDROID<br />

Die Monatszeitschrift für Android-Fans, Smartphone- und Tablet-Nutzer<br />

DigisuB: nur 39,90 € im Jahr (12 PDFs)<br />

Jetzt bestellen unter:<br />

www.android–user.de/digisub<br />

www.linux-user.de<br />

11 | 12 57<br />

Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de<br />

+<br />

Lesen Sie News und<br />

Artikel schon 1 Woche<br />

vor dem Kiosk-Termin!


PRAXIS<br />

Gecamed<br />

F PgAdmin erlaubt es<br />

bei entsprechenden<br />

Kenntnissen, die darunterliegende<br />

Datenbank<br />

um neue Abrechnungswerte<br />

zu erweitern<br />

oder auch praxisspezifische<br />

Regeln zu<br />

gestalten.<br />

GLOSSAR<br />

DICOM: Digital Imaging<br />

and Communications in<br />

Medicine. Ein offener<br />

Standard zum Speichern<br />

und Austauschen<br />

medizinischer Bilddaten.<br />

DICOM bildet auch die<br />

Grundlage für die digitale<br />

Bildarchivierung in<br />

Arztpraxen und Kliniken.<br />

G Gecamed liefert ein<br />

entsprechendes Modul<br />

mit, mit dem Sie zeitgesteuert<br />

die Daten<br />

aus der Patientenverwaltung<br />

sichern.<br />

ren eine ganz spezifische Version<br />

eines bestimmten Vorlagentyps<br />

zu nutzen.<br />

Sicherung<br />

Über das Menü Administrator |<br />

Globale Einstellungen rufen Sie<br />

den Dialog auf, über den Sie die<br />

Datensicherung konfigurieren<br />

und starten (Abbildung G). Hier<br />

legen Sie den zeitlichen Ablauf<br />

für das Backup fest.<br />

Als Lagerort für die Sicherungsdateien<br />

haben die Entwickler den<br />

Pfad /gecamed/gecamed_backup voreingestellt.<br />

Über die Eigenschaft<br />

DB_BACKUP_DIR=Neuer_Pfad in der<br />

Jboss-Konfiguration Gecamed-Installationspfad\jboss-4.0.5.GA\server\default\conf\gecamed_server<br />

ändern<br />

Sie dies bei Bedarf.<br />

Einfacher ist es jedoch, die automatisch<br />

generierten Archive regelmäßig<br />

auf ein externes Medium<br />

zu speichern: So haben Sie<br />

immer eine externe Komplettsicherung<br />

zur Hand. Die Dump-<br />

Datei, die sämtliche Einträge aus<br />

der Datenbank sowie die Struktur<br />

enthält, fällt sehr klein und kompakt<br />

aus. Sie umfasst bei rund<br />

1000 Patienten weniger als<br />

10 MByte, die zugehörige Zip-Datei<br />

mit allen Briefen, gescannten<br />

Daten und weiteren (Röntgen-)<br />

Bildern fällt allerdings mit<br />

300 MByte wesentlich größer aus.<br />

INFO<br />

[1] Gecamed: http:// www. santec. lu/ project/<br />

gecamed/ latest<br />

[2] Oracle Java auf Ubuntu:<br />

http:// www. wikihow. com/ Enable-Oracle-Jav<br />

a-in-Your-Web-Browsers-on-Ubuntu-Linux<br />

[3] JasperReports:<br />

http:// www. jaspersoft. com/ editions<br />

[4] Report „Doktor Tux“: Vincze Aron-Szabo,<br />

„Linux beim Facharzt“, LU 05/ 2011, S. 20,<br />

http:// www. linux-community. de/ 22277<br />

[5] Gnumed:<br />

http:// wiki. gnumed. de/ bin/ view/ Gnumed<br />

[6] CompuGroup Medical: http:// www. cgm. com<br />

Weitere Module<br />

Rund um die eigentliche Patientenverwaltung<br />

gruppieren sich<br />

eine Reihe von weiteren Modulen.<br />

So erlaubt es beispielsweise<br />

ein integrierter DICOM-Viewer,<br />

Röntgenbilder in die Datenbank<br />

einzubinden, die sich dann im Patientenmodul<br />

wiederfinden. Dort<br />

haben Sie außerdem die Möglichkeit,<br />

Laborwerte sowie selbst<br />

konfigurierte Formulare mit spezifischen<br />

Berechnungen wie Geburtstermin<br />

oder BMI-Index zu<br />

verwalten und zu betrachten.<br />

Elegant ist die direkt im Modul<br />

integrierte Möglichkeit zum Einscannen<br />

von Fremdbefunden und<br />

zum Speichern der dazugehörigen<br />

Dateien. Bilder von intraoperativen<br />

Befunden liegen so direkt<br />

in der Patientenakte.<br />

Das Modul Wartezimmer liefert<br />

über Farbcodes einen raschen<br />

Überblick, welche Patienten noch<br />

warten. Von da aus rufen Sie bei<br />

Bedarf direkt Patientenakten<br />

zum Bearbeiten auf. Außerdem<br />

arbeitet dieses Modul direkt mit<br />

dem Modul Agenda zum Steuern<br />

der Termine zusammen.<br />

Fazit<br />

Mit Gecamed ist den Luxemburgern<br />

ein Stück freie Software gelungen,<br />

das durch seinen Aufbau<br />

und die zugrunde liegende offene<br />

Struktur geradezu einlädt, es individuell<br />

an jede Praxis anzupassen.<br />

Im vorliegenden Beispiel einer<br />

chirurgischen Privatpraxis läuft<br />

die Software seit zwei Jahren zuverlässig<br />

und stabil. Auf einem<br />

neu installierten Server ließ sich<br />

das komplette System in etwa einer<br />

Stunde aus gesicherten Dateien<br />

neu aufsetzen. Insbesondere<br />

die Möglichkeit, Patientenbilder<br />

sowie Röntgenbilder einzubinden,<br />

macht Gecamed ideal für viele<br />

Fachgebiete. (agr) n­<br />

DER AUTOR<br />

Martin Schwarz, Jahrgang 1958, ist<br />

Facharzt für Chirurgie und Plastische<br />

Chirurgie mit Handchirurgie.<br />

Er gründete 1992 mit sechs Kollegen<br />

eine ambulant operativ ausgerichtete<br />

Tagesklinik. Als Zuständiger<br />

für die EDV war er trotz mehrfachem<br />

Wechsels der Anbieter nie zufrieden<br />

und suchte so immer wieder nach<br />

neuen Wegen.<br />

DANKSAGUNG<br />

Der Autor bedankt sich bei Guido<br />

Bosch von Santec und seinem Team<br />

um Jens Ferring für ihre Geduld,<br />

und bei Dirk Störk von C-K-N.biz, der<br />

über seinen Schatten sprang und einen<br />

Linux-Server aufsetzte.<br />

58 11 | 12<br />

www.linux-user.de


Unknown Horizons<br />

PRAXIS<br />

Das Strategiespiel Unknown Horizons<br />

Hinterm Horizont<br />

geht’s weiter<br />

Neuland besiedeln,<br />

Rohstoffe<br />

verarbeiten, regen<br />

Handel betreiben –<br />

das sind die Zutaten<br />

für beliebte<br />

Strategiespiele.<br />

Unter Linux bedient<br />

das freie<br />

Projekt Unknown<br />

Horizons dieses<br />

populäre Genre.<br />

Tim Schürmann<br />

Mit etwas Kleingeld in der Tasche<br />

und ein paar willigen Auswanderern<br />

an Bord landet der<br />

Spieler mit seinem Schiff auf einer<br />

einsamen Insel. Dort entsteht<br />

flugs am Strand ein kleines Kontor,<br />

von dem aus die Eroberung<br />

des Eilands beginnt.<br />

Nahrung besorgen zunächst ein<br />

Fischer und ein Jäger, für die<br />

man an geeigneten Stellen Unterkünfte<br />

errichten lässt. Das für<br />

weitere Gebäude notwendige<br />

Holz steuert ein Holzfäller bei.<br />

Wege sorgen wiederum für einen<br />

schnellen Transport der Waren<br />

vom und zum Kontor. Die Siedler<br />

kommen zunächst in einfachen<br />

Zelten unter, ihre Nahrungsmittel<br />

kaufen sie auf einem Marktplatz<br />

(Abbildung A).<br />

Bedürfnisanstalten<br />

Jedes Gebäude verlangt nach<br />

ganz bestimmten Umgebungsbedingungen:<br />

Während der Fischer<br />

unbedingt am Wasser in der Nähe<br />

eines Fischschwarms leben möchte,<br />

setzt man den Holzfäller am<br />

besten in einem möglichst dichten<br />

Waldstück aus. Zwar kann<br />

man Bäume nachpflanzen, im Gegensatz<br />

zum Abholzen von natürlich<br />

nachgewachsenen Wäldern<br />

kostet das jedoch Geld.<br />

Mit zunehmendem Wohlstand<br />

steigen auch die Bedürfnisse der<br />

Siedler. Verlangen sie zunächst<br />

neben Nahrung nur den Bau einer<br />

Kirche, müssen es später<br />

schon Bier und Zigarren sein (Abbildung<br />

B). Nur wenn man alle<br />

Forderungen erfüllt, steigen die<br />

Einwohner in der sozialen Hierarchie<br />

auf, was wiederum gleichzeitig<br />

weitere Gebäudetypen freischaltet.<br />

Die lassen sich dann jedoch<br />

nur noch selten aus Holz<br />

zimmern. Folglich müssen weitere<br />

Produktionsbetriebe her: Ziegel<br />

erzeugt etwa eine Ziegelei, die<br />

wiederum den Lehm von einer<br />

speziellen Lehmgrube bezieht.<br />

Fehlen auf der Insel Rohstoffe,<br />

so kann man sie gegen Barzahlung<br />

über fliegende Händler importieren.<br />

Einige Gebäude leeren zudem<br />

die Kasse nicht nur bei ihrer Erbauung,<br />

sondern auch während<br />

des Betriebes: So verlangt der<br />

Priester in der Kirche ein stetig<br />

eingehendes Gehalt (Abbildung C,<br />

übernächste Seite). Das Geld für<br />

all diese Aufwendungen treibt<br />

README<br />

Das Spielprinzip von<br />

Unknown Horizons erinnert<br />

nicht ganz zufällig<br />

an Ubisofts bekannte<br />

Strategiespiel-Serie<br />

„Anno“. Der bereits seit<br />

2005 in Entwicklung befindliche,<br />

freie „Anno“-<br />

Klon steckt zwar noch<br />

in den Kinderschuhen,<br />

wächst aber stetig zu<br />

einem würdigen Konkurrent<br />

zumindest für<br />

„Anno 1602“ heran.<br />

www.linux-user.de<br />

11 | 12 59


PRAXIS<br />

Unknown Horizons<br />

A Im Wald stehen<br />

schon die Zelte für<br />

Jäger und Holzfäller,<br />

auch einen Marktplatz<br />

und einen ersten Bauernhof<br />

gibt es bereits.<br />

der fallen – die Entwickler hatten<br />

den notwendigen Aufwand<br />

schlicht unterschätzt.<br />

Um nun umgekehrt die Entwicklung<br />

möglichst weit zu vereinfachen,<br />

warfen sie den bis dahin<br />

geschriebenen Programmcode<br />

der 2D-Fassung über Bord und<br />

griffen stattdessen zur Flexible<br />

Isometric Free Engine, kurz<br />

FIFE [3]. Auf deren Basis lassen<br />

sich recht einfach Spiele mit isometrischer<br />

Grafik erstellen. Doch<br />

schon kurz nach dieser Entscheidung<br />

brachte erneut Zeitmangel<br />

das Projekt zum Stillstand.<br />

B Mit steigendem<br />

Wohlstand bauen die<br />

Siedler ihre Wohnhäuser<br />

selbstständig immer<br />

weiter aus. Hier<br />

haben sie bereits die<br />

dritte Stufe erreicht,<br />

was unter anderem<br />

den Bau von Tabakplantagen<br />

ermöglicht.<br />

man durch Steuern ein oder verdient<br />

es sich durch den Export von<br />

auf der Insel hergestellten Waren.<br />

Während man auf diese Weise<br />

langsam einen funktionierenden<br />

Wirtschaftskreislauf aufbaut,<br />

wachsen rund um das eigene Dorf<br />

weitere Siedlungen. Mit den dortigen<br />

Einwohnern kann man friedlich<br />

Handel treiben, Allianzen<br />

schmieden oder aber ihre Dörfer<br />

angreifen und eingemeinden. Zuvor<br />

sollte man allerdings tunlichst<br />

seine eigenen Produktionsstätten<br />

mit Abwehrtürmen sichern.<br />

Anno dunnemals<br />

Das Spielprinzip von Unknown<br />

Horizons [1] erinnert nicht ganz<br />

zufällig an die altbekannte Strategiespiel-Serie<br />

„Anno“ [2] von Ubisoft.<br />

Diese erfreut sich seit über<br />

zehn Jahren extremer Beliebtheit.<br />

Da der Hersteller jedoch damals<br />

wie heute Linux geflissentlich<br />

ignoriert, nahmen 2005 ein<br />

paar Fans kurzerhand einen Klon<br />

in Angriff. In der „OpenAnno“ getauften<br />

Kopie blickte der Spieler<br />

wie im Vorbild von schräg oben<br />

(isometrische Darstellung) auf<br />

eine gezeichnete Landschaft. Es<br />

dauerte jedoch gerade einmal<br />

zwei Jahre, bis das Projekt langsam<br />

wieder eingeschlafen war.<br />

Im Frühling 2007 übernahmen<br />

neue Entwickler das Ruder, die<br />

noch im gleichen Jahr zwei drastische<br />

Entscheidungen trafen. Zunächst<br />

versuchten sie, neben der<br />

zweidimensionalen auch eine<br />

Variante mit 3D-Grafik zu entwickeln.<br />

Schon im Herbst 2007 ließ<br />

man dieses Vorhaben jedoch wie-<br />

Aller guten Dinge …<br />

Glücklicherweise dauerte es auch<br />

diesmal nicht lange, bis sich ein<br />

paar neue Enthusiasten fanden.<br />

Sie schafften es schließlich, die<br />

Entwicklung bis heute nachhaltig<br />

voranzutreiben. An der Spitze gibt<br />

es jetzt zwei Projektleiter mit getrennten<br />

Aufgabenbereichen. Darüber<br />

hinaus wechselte man auf<br />

Englisch als Hauptsprache. Das ursprünglich<br />

rein deutschsprachige<br />

Projekt gewann so weitere Unterstützer<br />

aus der ganzen Welt. Zuvor<br />

half lediglich ein Fremdsprachler<br />

aus Indien mit, der sich<br />

die Dokumentation und die Diskussionen<br />

der Entwickler mühsam<br />

mit Google Translate übersetzte.<br />

Eine weitere große Änderung<br />

stand 2009 an: Um einem Rechtsstreit<br />

mit dem Inhaber des Markennamens<br />

„Anno“ zu entgehen,<br />

benannte sich das Projekt vorsorglich<br />

in Unknown Horizons<br />

um. Der Namenswechsel sollte<br />

gleichzeitig unterstreichen, dass<br />

die Macher keinen Klon mehr erschaffen<br />

wollen, sondern ein eigenständiges<br />

Strategiespiel [4].<br />

Mittlerweile gehört Unknown<br />

Horizons zu den bekanntesten<br />

quelloffenen Strategiespielen für<br />

Linux. Das Projekt nahm sogar<br />

2011 und 2012 am Google Summer<br />

of Code teil. Im Rahmen dieses<br />

Wettbewerbes verbesserten<br />

Studenten vor allem die künstliche<br />

Intelligenz der Computergegner.<br />

Nach Angaben der Pro-<br />

60 11 | 12<br />

www.linux-user.de


Unknown Horizons<br />

PRAXIS<br />

jekt-Homepage arbeiten derzeit<br />

50 Freiwillige an Unknown Horizons<br />

– für ein komplett in der<br />

Freizeit entwickeltes Spiel eine<br />

erstaunlich hohe Zahl.<br />

Setzt die Segel!<br />

Dennoch existiert nach wie vor<br />

nur eine unfertige, wenn auch bereits<br />

gut spielbare Alpha-Version.<br />

Das spiegelt sich auch in den etwas<br />

merkwürdigen Versionsnummern<br />

wider, die sich aus der Jahreszahl<br />

und einer fortlaufenden<br />

Nummer zusammensetzen. Bei<br />

Redaktionsschluss aktuell war<br />

Unknown Horizons 2012.1 vom<br />

April 2012 (Abbildung D).<br />

Bei einigen Distributionen liegt<br />

das Strategiespiel bereits in den<br />

Repositories, oft (wie unter Ubuntu)<br />

jedoch in einer veralteten Version.<br />

Glücklicherweise stellen die<br />

Entwickler für die größeren Distributionen<br />

fertige Pakete bereit.<br />

Um Unknown Horizons mit diesen<br />

zu installieren, wechseln Sie<br />

auf der Homepage zu den Downloads,<br />

klicken dann den Tux an<br />

und folgen der entsprechenden<br />

Anleitung für die von Ihnen verwendete<br />

Distribution.<br />

Wenn Sie zum ersten Mal eine<br />

Insel besiedeln, wählen Sie im<br />

Hauptmenü Einzelspieler, stellen<br />

sicher, dass links oben Szenario<br />

ausgewählt ist, markieren rechts<br />

oben die Karte tutorial_de und<br />

lassen dann das Spiel starten.<br />

Nach ein paar Sekunden erscheint<br />

ein Logbuch, das Sie in<br />

die Bedienung und Abläufe des<br />

Spiels einführt.<br />

wieder auf Darstellungsfehler<br />

oder unfertige Grafiken. Eine<br />

spannende Einzelspielerkampagne<br />

haben die Entwickler zwar<br />

angekündigt, es gibt sie aber noch<br />

nicht. Derzeit darf man sich lediglich<br />

eine Karte generieren lassen<br />

und dann in einem Endlosspiel<br />

die dortigen Inseln bevölkern<br />

– das immerhin alleine gegen<br />

den Computer oder im Netzwerk<br />

mit realen Mitspielern.<br />

Die Siedler steigen zudem recht<br />

schnell bis zur vierten Stufe auf,<br />

und so darf man schon recht früh<br />

sämtliche Gebäude in die Landschaft<br />

setzen. Darüber hinaus<br />

vermisst man mit zunehmender<br />

Spieldauer eine Übersicht über<br />

die Bedürfnisse der einzelnen<br />

Einwohner – im Moment muss<br />

man sich noch mühsam von Haus<br />

zu Haus klicken. Kurzum: Es fehlt<br />

noch Feinschliff.<br />

Auch wenn die Entwicklungsgeschichte<br />

turbulent klingt, ist sie<br />

doch typisch für viele freie Spieleprojekte<br />

in dieser Größenordnung:<br />

Aufgrund zu knapper Freizeit<br />

wechseln häufig die Entwickler<br />

und Projektleiter. Unknown<br />

Horizons zeigt auch, dass eine<br />

gute englische Dokumentation die<br />

Voraussetzung dafür bildet, im Internet<br />

möglichst viele Mitstreiter<br />

zu finden und am Google Summer<br />

of Code teilnehmen zu dürfen.<br />

Die derzeitigen Entwickler befinden<br />

sich jedoch auf einem guten<br />

Weg. Sofern sie nicht erneut<br />

aufgeben, könnte sich Unknown<br />

Horizons schon bald zum würdigen<br />

Konkurrenten zumindest für<br />

„Anno 1602“ mausern. (jlu) n<br />

C Jedes Gebäude hat<br />

nur einen beschränkten<br />

Einzugsbereich.<br />

Den Pavillon zum<br />

Bet en erreichen nur<br />

die in der grün markierten<br />

Zone wohnenden<br />

Siedler. Für die<br />

übrigen muss ein weiterer<br />

Kirchenbau her.<br />

Fazit<br />

Unknown Horizons steckt unübersehbar<br />

noch in den Kinderschuhen.<br />

So stößt man immer<br />

INFO<br />

[1] Projekt-Homepage:<br />

http:// www. unknown-horizons. org<br />

[2] Anno-Reihe: http:// anno. de. ubi. com<br />

[3] FIFE-Engine: http:// fifengine. net<br />

[4] Entwicklungsgeschichte:<br />

https:// github. com/ nihathrael/ uh-history/<br />

D Wie hier gut zu erkennen,<br />

legt Unknown<br />

Horizons in der Version<br />

2012.1 sein Dorf<br />

in Parzellen an.<br />

blob/ master/ report. pdf? raw=true<br />

www.linux-user.de<br />

11 | 12 61


NETZ&SYSTEM<br />

RPM-Tools<br />

Systemintegrität wahren mit Rpmorphan und Rpmrestore<br />

Paketprüfer<br />

Auf Systemebene sammelt sich bei regelmäßigem Einsatz und häufigen Modifikationen an der<br />

installierten Software schnell einiges an Ballast an. RPM-basierte Distributionen entschlacken Sie dank<br />

Rpmorphan und seines Gegenstückes Rpmrestore schnell und gefahrlos. Erik Bärwaldt<br />

Rpmorphan 1.11<br />

LU/rpmorphan/<br />

Rpmrestore 1.5<br />

LU/rpmrestore/<br />

README<br />

Die kleinen Helfer<br />

Rpmorphan und Rpmrestore<br />

ergänzen bei<br />

RPM-basierten Linux-<br />

Distributionen die herkömmliche<br />

Paketverwaltung<br />

und erweitern<br />

deren Funktionalität.<br />

Als eines der Highlights von<br />

Linux gelten die Pakteverwaltungssysteme:<br />

Sie erleichtern das<br />

Installieren neuer Programme<br />

oder das Löschen nicht mehr benötigter<br />

Software signifikant. Zusammen<br />

mit Zusatzprogrammen,<br />

welche die Integrität des Betriebssystems<br />

gewährleisten, bilden sie<br />

eine konsistente Grundlage für die<br />

Arbeit mit dem Rechner. Zu den<br />

meistgenutzten Vertretern der<br />

Gattung zählt Rpm, das ursprünglich<br />

aus dem Fundus von Red Hat<br />

stammt („Red Hat Package Management“),<br />

sich inzwischen aber<br />

in vielen Distributionen findet.<br />

Saubermacher<br />

Paketmanager wie Rpm oder<br />

Dpkg dienen dazu, Konflikte zwischen<br />

einzelnen Software-Paketen<br />

aufzulösen<br />

und installieren automatisch<br />

benötigte Abhängigkeiten nach.<br />

Zusätzlich erlauben sie es, neue<br />

Software-Quellen („Repositories“)<br />

einzubinden. Die Installation aus<br />

diesen geht dann ebenso leicht<br />

von der Hand wie jene aus den<br />

Standardquellen.<br />

Doch das Paketmanagement hat<br />

auch Schattenseiten: Nicht immer<br />

passen die Entwickler von<br />

Drittquellen ihre Skripte exakt<br />

an. So verbleiben beispielsweise<br />

einmal installierte Bibliotheken<br />

bei der Deinstallation des von ihnen<br />

abhängigen Programms unter<br />

Umständen auf der Festplatte.<br />

Es sammeln sich im Lauf der<br />

Zeit insbesondere bei Power-<br />

Usern, die gern und häufig neue<br />

Software ausprobieren, erkleckliche<br />

Mengen<br />

an Datenmüll<br />

an. Diese<br />

überflüssigen<br />

Dateien manuell entfernen zu<br />

wollen, grenzt an die Quadratur<br />

des Kreises: Bereits ein frisch installiertes<br />

System besteht je nach<br />

Distributionsumfang aus rund<br />

100 000 Dateien.<br />

Um die nicht mehr benötigten<br />

Komponenten zu löschen, bieten<br />

die gängigen Paketmanager zwar<br />

diverse Optionen zum Entfernen<br />

an. Jedoch setzen die Tools, die<br />

primär auf der Kommandozeile<br />

zum Einsatz kommen, detaillierte<br />

Kenntnisse über die Mechanismen<br />

der Systeme voraus.<br />

Wesentlich schneller und einfacher<br />

arbeiten dagegen kleine<br />

Helfer<br />

© Corina Rosu, 123RF<br />

64 www.linux-user.de


RPM-Tools<br />

NETZ&SYSTEM<br />

wie Deborphan [1] und Rpmorphan<br />

[2], die auf zugemüllten<br />

Systemen oft mehrere hundert<br />

Megabyte Speicherplatz freischaufeln.<br />

Rpmorphan bietet darüber<br />

hinaus zusätzliche Funktionen,<br />

die ebenfalls der Integrität<br />

des Computersystems dienen und<br />

wichtige Infos schnell und zuverlässig<br />

bereitstellen.<br />

Plattenputz<br />

Rpmorphan liegt bereits seit längerer<br />

Zeit in den Repositories aller<br />

gängigen RPM-basierten Distributionen,<br />

sodass Sie es bequem<br />

über die Paketverwaltung ins System<br />

integrieren. Die jeweils aktuellste<br />

Version des Tools finden Sie<br />

als fertiges RPM-Paket auf der<br />

Projektseite. Sollte wider Erwarten<br />

die Installation auf dem System<br />

scheitern, laden Sie den<br />

Quellcode [3] herunter und übersetzen<br />

Rpmorphan selbst.<br />

Nach erfolgreicher Installation<br />

bietet die Software ihre Dienste<br />

gleich auf dreifache Weise an: Im<br />

Terminal als reines Kommandozeilen-Programm<br />

oder mithilfe<br />

zweier grafischer Oberflächen.<br />

Möchten Sie auf Letztere zurückgreifen,<br />

gilt es, zusätzlich die beiden<br />

Pakete perl-Curses-UI (für<br />

einfache Grafik im Terminal) oder<br />

perl-Tk (für eine etwas komfortablere,<br />

allerdings optisch altbackene<br />

Darstellung) zu installieren.<br />

Beide finden sich in den Repositories<br />

der meisten RPM-basierten<br />

Distributionen.<br />

Da Rpmorphan Modifikationen<br />

am bestehenden Datenbestand<br />

des Betriebssystems vornimmt,<br />

läuft die Software nur mit Root-<br />

Rechten korrekt. Sofern Sie eine<br />

Distribution nutzen, die das Programm<br />

gut integriert und daher<br />

bei der Installation bereits einen<br />

entsprechenden Eintrag im Startmenü<br />

anlegt, genügt ein Mausklick<br />

zum Entsorgen überflüssiger<br />

Dateibestände.<br />

Bei vielen Distributionen legt<br />

das Setup jedoch keinen Starter<br />

an, sodass Sie zunächst selbst einen<br />

entsprechenden Eintrag im<br />

Menü erstellen müssen. Unter allen<br />

GTK+-basierten Oberflächen<br />

integrieren Sie das Programm mit<br />

automatischer Abfrage des Passwortes<br />

über die Befehlsfolge gksu<br />

rpmorphan -gui oder gksu rpmorphan<br />

sehr einfach in ein Anwendungsmenü.<br />

Die Befehle tragen Sie jeweils<br />

in die Starter-Eigenschaften<br />

ein. Anschließend aktivieren Sie<br />

per Mausklick auf den Menü-Eintrag<br />

die Tcl/ Tk-basierte Oberfläche<br />

(Abbildung A).<br />

Möchten Sie anstelle der Tcl/ Tkbasierten<br />

Variante lieber die grafisch<br />

sehr einfach gehaltene Curses-Oberfläche<br />

nutzen, dann aktivieren<br />

Sie die Software mit Administrator-Rechten<br />

im Terminal<br />

mit der Eingabe des Befehls<br />

rpmorphan -curses. Es erscheint ein<br />

Textbildschirm mit grafischen<br />

Elementen in Gestalt von Linien<br />

(Abbildung B).<br />

Beide Oberflächen bieten identische<br />

Inhalte: Während der größte<br />

Teil des Fensters eine Liste der<br />

gefundenen verwaisten Dateien<br />

zeigt, befindet sich oben horizontal<br />

eine Leiste mit Schaltflächen,<br />

über die Sie die wichtigsten Funktionen<br />

per Mausklick aktivieren.<br />

Beim ersten Start von Rpmorphan<br />

dauert es zuweilen etwas,<br />

bis die Liste der gefundenen<br />

„Waisen“ erscheint. Die Software<br />

nutzt zum Ermitteln der Abhängigkeiten<br />

und zum Sammeln spezifischer<br />

Informationen die im<br />

System vorhandene Datenbank,<br />

die bei häufig aktualisierten<br />

Linux-Systemen und bei vielen<br />

nachträglich auf die Platte gepackten<br />

Programmen einen entsprechenden<br />

Umfang aufweist.<br />

Durch Auswahl eines Eintrages<br />

und einem anschließenden Klick<br />

auf die Schaltfläche Info erhalten<br />

Sie detaillierte Informationen<br />

zum betreffenden Paket (Abbildung<br />

C, nächste Seite). Dies ist<br />

insbesondere dann sinnvoll, wenn<br />

Sie nicht genau wissen, ob Sie das<br />

Paket wirklich löschen dürfen. Im<br />

Zweifelsfall belassen Sie solche<br />

Pakete lieber auf der Festplatte:<br />

Fälschlich gelöschte Dateien verursachen<br />

nicht nur Probleme<br />

beim Start von Programmen, sondern<br />

ziehen im schlimmsten Fall<br />

das komplette Betriebssystem<br />

empfindlich in Mitleidenschaft.<br />

Einzelne Einträge markieren Sie<br />

per Mausklick, wobei diese Markierung<br />

beim Anklicken eines weiteren<br />

Pakets erhalten bleibt. Je<br />

nach Anzahl der im System lokalisierten<br />

verwaisten Pakete kann es<br />

sinnvoll sein, zunächst alle zu<br />

markieren und dann nur einzelne<br />

Dateien wieder auszunehmen.<br />

Dazu klicken Sie auf die Schaltfläche<br />

Select all und wählen dann bei<br />

Bedarf einzelne Einträge ab.<br />

Nach dem Markieren löscht ein<br />

Klick auf Remove nur die gekennzeichneten<br />

Pakete.<br />

A Etwas altbacken,<br />

aber intuitiv zu bedienen:<br />

die grafische<br />

Oberfläche von<br />

Rpmorphan auf Basis<br />

von Tcl/ Tk.<br />

B Die mit Liniengrafik<br />

im Terminal aufgepeppte<br />

Oberfläche von<br />

Rpmorphan erinnert<br />

an alte DOS-Zeiten.<br />

www.linux-user.de<br />

11 | 12 65


NETZ&SYSTEM<br />

RPM-Tools<br />

C Die Anzeige der Informationen<br />

zu einem<br />

Paket gibt einen umfassenden<br />

Überblick<br />

über dessen Zweck,<br />

Herkunft und die Abhängigkeiten.<br />

D So sieht ein sauberes<br />

System aus: Es<br />

wurden keine doppelten<br />

Programme oder<br />

Bibliotheken gefunden.<br />

Protokollarisches<br />

Rpmorphan führt eine Protokolldatei,<br />

in der es alle Löschvorgänge<br />

aufzeichnet. Das ermöglicht<br />

es, bei Inkonsistenzen im System<br />

nachzuvollziehen, nach dem Entfernen<br />

welcher Bibliothek die<br />

Probleme auftraten. Dazu sehen<br />

Sie das Log durch einen Klick auf<br />

die gleichnamige Schaltfläche ein.<br />

Eine ausführliche Hilfe zu allen<br />

Funktionen und Tastaturkürzeln<br />

steht nach einem Klick auf Help<br />

bereit. Auf der Kommandozeile<br />

lautet der entsprechende Aufruf<br />

rpmorphan -help.<br />

Duplikate<br />

Neben Rpmorphan selbst stellt<br />

das Paket rpmorphan einige weitere<br />

Programme bereit, die beim<br />

Umgang mit RPM-Paketen helfen.<br />

Das mit Abstand wichtigste<br />

davon heißt Rpmduplicates und<br />

spürt im System doppelt vorhandene<br />

Bibliotheken und Programme<br />

auf. Es erweist sich insbesondere<br />

dann als nützlich, wenn Sie<br />

das System regelmäßig automatisch<br />

auf den neuesten Stand<br />

bringen oder verschiedene Versionen<br />

einer Applikation benutzen.<br />

Sie rufen das Perl-Skript auf der<br />

Kommandozeile mit dem Befehl<br />

rpmduplicates.pl auf. Das Programm<br />

listet dann alle vorhandenen<br />

Duplikate auf (Abbildung D).<br />

Praktikabel<br />

Wir testeten Rpmorphan unter<br />

anderem mit Mageia, da das von<br />

Mandriva stammende und in<br />

Mageia ebenfalls implementierte<br />

URPM-Verwaltungssystem bereits<br />

selbst eine einfach zu handhabende<br />

Funktion zum Auffinden<br />

und Löschen von Dateiwaisen<br />

bietet, was einen direkten Vergleich<br />

der Tools ermöglicht.<br />

Dabei zeigte sich, dass Rpmorphan<br />

deutlich mehr kann als<br />

sein Mageia-Pendant: Während<br />

der entsprechende Terminalbefehl<br />

urpme --auto-orphans keine<br />

verwaisten Dateien fand und<br />

demzufolge auch nichts entsorgte,<br />

bemerkte Rpmorphan insgesamt<br />

fünf Bibliotheken ohne aktuelle<br />

Abhängigkeiten, die gelöscht<br />

wurden. Anhand der im<br />

Tool angezeigten Informationen<br />

ließ sich erkennen, dass es sich bei<br />

den Bibliotheken um Relikte alter<br />

Software-Installationen handelte,<br />

wobei die entsprechenden Programme<br />

längst wieder aus dem<br />

System entfernt worden waren.<br />

Restaurationsarbeiten<br />

Eine Schwäche des RPM-Verwaltungssystems<br />

stellen die sehr begrenzten<br />

Möglichkeiten dar, die<br />

Datei-Attribute einzelner Pakete<br />

zu beeinflussen. So zeigt Rpm<br />

Unterschiede zwischen dem Paketstatus<br />

bei der Installation und<br />

jenem der aktuellen Konfiguration<br />

mangels geeigneter Parameter<br />

nicht vollständig an. Auch ein Zurücksetzen<br />

nachträglich veränderter<br />

Rechte und Attribute auf<br />

den Status bei der Installation erlaubt<br />

die Software nicht.<br />

Das kann insbesondere dann zu<br />

Problemen führen, wenn sich<br />

Schadsoftware auf dem System<br />

eingeschlichen hat oder die Systemkonfiguration<br />

durch fehlerhaft<br />

installierte Updates Inkonsistenzen<br />

aufweist. Auch defekte<br />

Hardware wie etwa eine leere<br />

BIOS-Batterie sorgt durch Anzeige<br />

falscher Datums- und Zeitangaben<br />

im Kontext von Lese- und<br />

Schreibvorgängen unter Umständen<br />

bei bestimmten Programmen<br />

für Irritationen.<br />

Der französische Programmierer<br />

Eric Gerbier, der bereits für<br />

die Wartung von Rpmorphan verantwortlich<br />

zeichnet, hat aus diesem<br />

Grund mit Rpmrestore [4]<br />

ein weiteres wichtiges Werkzeug<br />

im Portfolio, das dieses Manko<br />

behebt. Rpmrestore findet sich<br />

zwar wie Rpmorphan in den Repositories<br />

der meisten Mainstream-Distributionen,<br />

allerdings<br />

meist in älteren Varianten. Es<br />

empfiehlt sich daher auch hier<br />

der Download von der Projektseite.<br />

Das Perl-Skript rufen Sie anschließend<br />

auf der Kommandozeile<br />

mit den entsprechenden Parametern<br />

auf. Die einzelnen Befehlsfolgen<br />

erläutert die Projektseite<br />

[5] eingehend.<br />

Das Skript arbeitet interaktiv<br />

und nimmt somit ohne entsprechende<br />

Anweisungen des Anwenders<br />

keine eigenmächtigen Änderungen<br />

am Dateistatus vor. Der<br />

Batch-Modus erlaubt es aber, einen<br />

vollautomatischen Rollback<br />

zu veranlassen, bei dem Rpmrestore<br />

die anzugebenden Pakete<br />

komplett ohne Abfrage auf den<br />

Status nach einer frischen Instal-<br />

INFO<br />

[1] Deborphan: Erik Bärwaldt, „Ordentlich<br />

durchgeputzt“, LU 11/ 2007, S. 92,<br />

http:// www. linux-community. de/ 14308<br />

[2] Rpmorphan:<br />

http:// rpmorphan. sourceforge. net<br />

[3] Rpmorphan herunterladen:<br />

http:// sourceforge. net/ projects/<br />

rpmorphan/ files/ rpmorphan/ 1. 11/<br />

[4] Rpmrestore:<br />

http:// rpmrestore. sourceforge. net<br />

[5] Dokumentation zu Rpmrestore:<br />

http:// rpmrestore. sourceforge. net/<br />

rpmrestore. 1. html<br />

66 11 | 12<br />

www.linux-user.de


RPM-Tools<br />

NETZ&SYSTEM<br />

lation zurücksetzt. Den entsprechenden<br />

Parameter -batch sollten<br />

Sie jedoch nur dann nutzen, wenn<br />

Sie sich absolut sicher sind, dass<br />

das Zurücksetzen nicht andernorts<br />

Inkonsistenzen hervorruft.<br />

Um einen Überblick zu erhalten,<br />

ob bestimmte Programme veränderte<br />

Attribute aufweisen, rufen<br />

Sie Rpmrestore auf der Kommandozeile<br />

mit folgendem Befehl auf:<br />

# rpmrestore.pl --dry-run PaketnU<br />

name<br />

Die Software überprüft daraufhin<br />

alle Änderungen gegenüber der<br />

Installationsvariante bei allen<br />

verfügbaren Attributen und zeigt<br />

sie an (Abbildung E).<br />

Im Falle eines konkreten Verdachts<br />

auf eine unerwünschte Attributänderung<br />

empfiehlt es sich,<br />

das jeweilige Attribut einzeln zu<br />

überprüfen. Rpmrestore unterstützt<br />

dabei alle gängigen Attribute.<br />

So gleicht es<br />

beispielsweise die<br />

Dateigröße mithilfe<br />

des Parameters<br />

-size ab. Mithilfe<br />

des Parameters -log legt es zudem<br />

eine Logdatei an und pflegt sie.<br />

Diese Datei dient als Grundlage<br />

für die Verwendung des Parameters<br />

-rollback: Er gestattet das Zurücksetzen<br />

der spezifizierten Datei<br />

auf den Installationsstatus,<br />

womit Sie eventuelle Inkonsistenzen<br />

im System einfach beheben.<br />

Fazit<br />

Mit den beiden Tools Rpmorphan<br />

und Rpmrestore stehen für RPMbasierte<br />

Distributionen zwei<br />

nützliche Helferlein bereit, welche<br />

die Integrität der gesamten<br />

Installation wahren. Daneben<br />

empfiehlt sich der regelmäßige<br />

Einsatz von Rpmorphan auch, um<br />

das System von unerwünschten<br />

und überflüssigen Installationsfragmenten<br />

zu befreien. Das<br />

Werkzeug eignet sich dabei dank<br />

einer einfach bedienbaren grafischen<br />

Oberfläche auch für Einsteiger,<br />

bedient über die Kommandozeilenschnittstelle<br />

aber<br />

gleichzeitig auch Power-User.<br />

Rpmrestore dagegen trägt durch<br />

die Restauration des Ursprungszustandes<br />

von Dateiattributen<br />

dazu bei, die Systemintegrität<br />

langfristig zu bewahren. Das ausschließlich<br />

für die Kommandozeile<br />

geeignete Tool erweitert den<br />

Funktionsumfang des Paketverwaltungssystems<br />

und bietet insbesondere<br />

bei Unstimmigkeiten<br />

einzelner Attribute eine sichere<br />

Möglichkeit, das System auf einen<br />

definierten Zustand zurückzusetzen.<br />

(tle/ agr) n<br />

E Rpmrestore zeigt<br />

hier an, dass es bei<br />

Wine keine Modifikationen<br />

an den Dateiattributen<br />

fand.<br />

EINFACH AUF LINUX UMSTEIGEN!<br />

4 x im Jahr kompaktes Linux-Know-how - IMMER mit 2 DVDs<br />

n EasyLinux macht den<br />

Umstieg auf Linux einfach<br />

n Verständliche<br />

Schritt-für-Schritt-Anleitungen<br />

n Nachvollziehbare<br />

Tipps und Tricks<br />

15%<br />

sparen<br />

EASYLINUX-JAHRES-ABO<br />

NUR 33,30E*<br />

❱<br />

JETZT GRATIS<br />

ABO-PRÄMIE<br />

SICHERN!<br />

Ich bekomme gratis:<br />

1. das EasyLinux Mega-Archiv<br />

Jahres-DVD 2011 (9 Jahre<br />

Easy-Linux auf einer DVD)<br />

2. DVD „Die Reise der Pinguine“<br />

(solange Vorrat reicht)<br />

*Preise außerhalb Deutschlands siehe www.easylinux.de/abo<br />

JETZT GLEICH BESTELLEN! n Tel.: 07131 / 2707 274 n Fax: 07131 / 2707 78 601<br />

www.linux-user.de<br />

11 | 12 67<br />

n E-Mail: abo@easylinux.de n URL: www.easylinux.de/abo


NETZ&SYSTEM<br />

SysRq<br />

Abgestürzte Systeme sicher neu starten<br />

Not-Aus<br />

Es gibt mehrere Tastenkombinationen,<br />

die ein eingefrorenes System wieder<br />

zum Leben erwecken. Jede davon<br />

erfordert beim Anwender ziemlich<br />

gelenkige Finger – möglicherweise der<br />

Grund, warum viele Linux-Anwender<br />

sie immer noch nicht kennen. Tim Schürmann<br />

© Bela Tiberiu Attl, 123RF<br />

README<br />

Über einen Magic System<br />

Request lassen<br />

sich scheinbar abgestürzte<br />

Linux-Rechner<br />

oft relativ unkompliziert<br />

wiederbeleben oder zumindest<br />

noch geregelt<br />

herunterfahren, ohne<br />

dass Datenverluste auftreten.<br />

Wenn etwas schiefgeht, dann<br />

meist richtig: So stürzt die Textverarbeitung<br />

üblicherweise kurz<br />

vor der Fertigstellung der zehnseitigen<br />

Abhandlung über das Liebesleben<br />

der gemeinen Haustaube<br />

ab. Und da es der Office-Suite im<br />

Nirvana zu einsam ist, reißt sie<br />

gleich noch das X-Window-System<br />

mit in den Tod. In solchen<br />

Fällen schnellt der Finger bei den<br />

meisten Anwendern zum Reset-<br />

Knopf am Computergehäuse.<br />

Diese rabiate Wiederbelebungsmaßnahme<br />

birgt jedoch gewisse<br />

Risiken: Linux selbst lebt meist<br />

noch im Hintergrund weiter – oft<br />

zusammen mit ein paar weiteren<br />

Programmen, die immer noch<br />

munter auf die Festplatte zugreifen.<br />

Im schlimmsten Fall zerstört<br />

der Druck auf den Reset-Taster<br />

deshalb nicht nur das Liebesleben<br />

der Taube, sondern auch gleich<br />

noch ein paar weitere Dateien.<br />

A kind of magic<br />

Glücklicherweise gibt es Hilfe in<br />

Form mehrerer „magischer“ Tastenkombinationen.<br />

Die erfordern<br />

zwar ein paar verrenkte Finger,<br />

können dafür aber das System<br />

ohne Ein- und Ausschalten wiederbeleben<br />

oder zumindest den<br />

Computer kontrolliert und ohne<br />

Datenverlust herunterfahren.<br />

Alle diese Tastenkombinationen<br />

beginnen damit, dass Sie [Alt]+<br />

[Druck] gedrückt halten und damit<br />

[S-Abf] („System-Abfrage“)<br />

auslösen – so ist die Taste auf<br />

deutschen Tastaturen auch auf<br />

der Vorderseite beschriftet. Auf<br />

englischen Tastaturen steht an<br />

dieser Stelle dagegen SysRq als<br />

Abkürzung für System Request<br />

(Systemabfrage). Daher nennt<br />

man eine darüber ausgelöste<br />

Funktion auch Magic System Request<br />

oder kurz und unaussprechlich<br />

Magic SysRq.<br />

Auf vielen Notebooks müssen<br />

Sie zusätzlich noch [Fn] gedrückt<br />

halten. Zusammen mit einer folgenden<br />

Buchstabentaste für den<br />

Abruf einer bestimmten Funktion<br />

gilt es somit, vier weit auseinanderliegende<br />

Tasten auf einmal zu<br />

betätigen – nicht umsonst spricht<br />

man auch von einem „Affengriff“.<br />

Einige Systeme ersetzen zudem<br />

die Taste [Alt] durch [AltGr]. Sofern<br />

also eine magische Tastenkombination<br />

keine Wirkung zeigt,<br />

sollten Sie sie noch einmal mit<br />

[AltGr] ausprobieren. Schließlich<br />

gibt es noch Tastaturen, die nicht<br />

so viele gleichzeitig gedrückte<br />

Tasten auf einmal auswerten können:<br />

In diesem Fall drücken Sie<br />

[Alt]+[Druck], lassen dann nur<br />

[Druck] los, betätigen die Taste<br />

für die gewünschte Funktion, und<br />

lassen dann alle Tasten wieder los.<br />

Der Einfachheit halber bezeichnen<br />

wir im Folgenden die für den<br />

Magic System Request zu betätigende<br />

Eingangstastenkombination<br />

als [S-Abf] – egal, wie es diese<br />

auf dem konkreten System nun<br />

auszulösen gilt.<br />

Wo klemmt’s?<br />

Wenn [Druck] überhaupt nicht<br />

existiert oder [S-Abf] gar nicht<br />

funktionieren möchte, aber noch<br />

eine Kommandozeile zur Verfügung<br />

steht (siehe Kasten Hintertür,<br />

auf der nächsten Seite) dann<br />

kann man einen Tastendruck als<br />

68 11 | 12<br />

www.linux-user.de


DAS MAGAZIN FÜR<br />

UBUNTU-ANWENDER!<br />

DigiSub-Mini * : 2 digitale Ausgaben Ubuntu User!<br />

5€<br />

FÜR 2 AUSGABEN<br />

IHRE VORTEILE<br />

● Hilfe für Ein- und Umsteiger<br />

bei den ersten Schritten<br />

mit Ubuntu<br />

● Zusatzwissen rund um<br />

Ubuntu und seine Derivate<br />

● 2x Testen ohne Risiko,<br />

das DigiSub-Mini ist<br />

jederzeit kündbar!<br />

● Nutzbar auf Notebook<br />

und PC, Tablet oder<br />

Smartphone!<br />

JETZT GLEICH BESTELLEN!<br />

● Tel.: 07131 / 2707 274 ● Fax: 07131 / 2707 78 601<br />

● URL: www.ubuntu-user.de/abo ● E-Mail: abo@ubuntu-user.de<br />

*geht ohne Kündigung in ein digitales Jahresabo mit 4 Ausgaben pro Jahr über und ist jederzeit kündbar!


NETZ&SYSTEM<br />

SysRq<br />

A Die Tastenkombinationen<br />

funktionieren,<br />

wenn wie hier unter<br />

Ubuntu die Datei sysrq<br />

existiert und diese eine<br />

Zahl größer oder<br />

gleich 1 enthält.<br />

Taste<br />

[B]<br />

[E]<br />

[I]<br />

[K]<br />

[O]<br />

[R]<br />

[S]<br />

[U]<br />

Auswirkung<br />

Benutzer root auch mit dem folgenden<br />

Befehl simulieren:<br />

# echo k > /proc/sysrq-trigger<br />

HINTERTÜR<br />

Hängt der eingefrorene Rechner in einem Netzwerk, melden Sie<br />

sich auf ihm mittels SSH an und beenden dort dann via Kommandozeile<br />

die verursachenden Programme mit dem SysRq-Kill-Kommando.<br />

Das funktioniert allerdings nur, wenn die abgestürzten<br />

Programme nicht die komplette Rechenzeit auffressen. Darüber<br />

hinaus muss der SSH-Daemon installiert sein, laufen und sich<br />

von außen erreichen lassen. Letzteres verhindert beispielsweise<br />

unter OpenSuse die eingebaute Firewall. Aus den gleichen Gründen<br />

versagen auch die übrigen Alternativen zu SSH, wie etwa<br />

Rlogin, das obendrein noch Sicherheitsprobleme aufweist.<br />

WICHTIGE SYSRQ-FUNKTIONEN<br />

startet den Rechner sofort neu<br />

sendet SIGTERM an alle Prozesse außer init<br />

sendet SIGKILL an alle Prozesse außer init<br />

beendet alle Programme auf der aktuellen virtuellen<br />

Konsole<br />

fährt das System herunter (sofern vom Computer<br />

unterstützt)<br />

reanimiert die Tastatur, indem es den RAW-Modus<br />

abschaltet und in den XLATE-Modus wechselt<br />

leert den Festplattencache<br />

hängt alle Dateisysteme aus und mountet sie anschließend<br />

read-only<br />

Das k steht dabei für die dritte zu<br />

drückende Taste, in diesem Beispiel<br />

das „k“ für die vermutlich<br />

wichtigste und am häufigsten benötigte<br />

Tastenkombination.<br />

[S-Ab f]+[K] beendet alle Prozesse<br />

in der aktuellen virtuellen Konsole.<br />

Unter modernen Distributionen<br />

zählt dazu üblicherweise auch<br />

die grafische Benutzeroberfläche,<br />

die daraufhin automatisch neu<br />

startet oder zumindest dem Textmodus<br />

weicht.<br />

[S-Abf]+[K] erweist<br />

sich aber<br />

auch dann als<br />

nützlich, wenn<br />

Sie auf der<br />

Konsole arbeiten:<br />

Durch das<br />

Beenden aller<br />

Prozesse wird<br />

sichergestellt,<br />

dass der Anmeldebildschirm<br />

nicht<br />

von einem Trojaner stammt – vorausgesetzt,<br />

bei init handelt es sich<br />

noch um das Original.<br />

Einparkende Elefanten<br />

Rührt sich das System nicht mehr,<br />

dann drücken Sie [S-Abf]+[R]. Damit<br />

entzieht der Kernel dem X-<br />

Server die Gewalt über die Tastatur,<br />

indem er den vom X-Server<br />

genutzten Raw-Modus abschaltet<br />

und in den auf der Konsole genutzten<br />

XLATE-Modus wechselt.<br />

So erhalten Sie wieder die Gewalt<br />

über die Tastatur und können mit<br />

[Strg]+[Alt] und einer der Funktionstasten<br />

auf eine der Konsolen<br />

wechseln. Dort melden Sie sich an<br />

und terminieren per kill-Befehl<br />

die hängende Anwendung.<br />

Klappt das nicht, so drücken Sie<br />

[S-Abf]+[E]. Der Kernel fordert<br />

jetzt alle laufenden Programme<br />

auf, sich zu beenden. Dazu sendet<br />

er allen Prozessen außer init ein<br />

SIGTERM-Signal. Widerspenstigen<br />

Prozessen zeigen Sie per [S-Abf]+<br />

[I] die Rote Karte in Form des SIG-<br />

KILL-Signals, sodass der Kernel sie<br />

gnadenlos abschießt.<br />

Linux puffert die Festplattenzugriffe<br />

zunächst im Hauptspeicher.<br />

Bevor Sie das System neu starten,<br />

sollten Sie die zwischengeparkten<br />

Daten per [S-Abf]+[S] auf die<br />

Festplatte schreiben lassen. Als<br />

Quittung für den Abschluss der<br />

Aktion erscheint eine Meldung<br />

wie Emergency Sync complete auf<br />

dem Bildschirm. Blockiert ein abgestürztes<br />

Programm den Monitor<br />

und bleibt damit die Meldung versteckt,<br />

überwachen Sie stattdessen<br />

die Festplattenaktivitäten anhand<br />

der Status-LED am Rechnergehäuse.<br />

Fahren Sie erst dann mit<br />

den nächsten Tastenkombinationen<br />

fort, wenn ein paar Sekunden<br />

keine Aktivitäten mehr zu sehen<br />

und zu hören waren.<br />

Nachdem die Daten auf der Platte<br />

liegen, hängt [S-Abf]+[U] alle<br />

Dateisysteme sicher aus. [S-Abf]+<br />

[B] startet das System schließlich<br />

neu. Alternativ schalten Sie den<br />

Rechner per [S-Abf]+[O] aus. Der<br />

Kernel nutzt dazu die entsprechende<br />

Funktion des Power-Managements,<br />

das dazu folglich aktiviert<br />

sein muss.<br />

Zusammengefasst kommen hier<br />

also nacheinander die Tasten [R],<br />

[E], [I], [S], [U] und [B] zum Einsatz.<br />

Diese Reihenfolge kann man<br />

sich mit verschiedenen Eselsbrücken<br />

merken. Besonders beliebt<br />

ist der englische Satz „Raising Elephants<br />

Is So Utterly Boring“. Eine<br />

im Internet kursierende deutsche<br />

Variante lautet „Richtig Einparken<br />

Ist So Unglaublich Banal“.<br />

Alle wichtigen Tastenkombinationen<br />

fasst noch einmal die Tabelle<br />

Wichtige SysRq-Funktionen zusammen.<br />

Neben den dort aufgelisteten<br />

gibt es noch weitere Kombinationen,<br />

die sich allerdings<br />

durchweg an Programmierer richten.<br />

So zeigt etwa [S-Abf]+[P] den<br />

Inhalt aller Prozessorregister an,<br />

während [S-Abf]+[M] die Hauptspeicherbelegung<br />

ausgibt [1].<br />

Aus der Zauber<br />

Die vorgestellten „Affengriffe“<br />

wertet allesamt der Linux-Kernel<br />

aus. Damit das klappt, muss er<br />

selbst noch laufen – bei einer Kernel-Panik<br />

hilft folglich nur noch<br />

ein Griff zum Reset-Knopf. Des<br />

Weiteren muss der Kernel die<br />

Tastenkombinationen unterstützen.<br />

Das ist genau dann der Fall,<br />

wenn im Verzeichnis /proc/sys/<br />

kernel eine Datei namens sysrq<br />

INFO<br />

[1] Kernel-Dokumentation zu allen Magic System<br />

Request Keys: http:// www. kernel. org/<br />

doc/ Documentation/ sysrq. txt<br />

70 11 | 12<br />

www.linux-user.de


SysRq<br />

NETZ&SYSTEM<br />

existiert (Abbildung A). Andernfalls<br />

hat der Distributor beim Erstellen<br />

des Kernels die Magic-Sys-<br />

Rq-Funktion deaktiviert – ein<br />

glücklicherweise seltener Fall.<br />

Erstellen Sie einen Kernel selbst,<br />

müssen Sie dabei die Option<br />

CONFIG_MAGIC_SYSRQ einschalten.<br />

Das Vorhandensein der Datei<br />

sysrq garantiert jedoch keineswegs<br />

dafür, dass die Tastenkombinationen<br />

auch tatsächlich aktiviert<br />

sind. Ob das bei dem verwendeten<br />

System der Fall ist,<br />

prüfen Sie in einem Terminalfenster<br />

mit dem Befehl:<br />

$ cat /proc/sys/kernel/sysrq<br />

Steht eine 1 in der Datei, reagiert<br />

der Linux-Kernel auf alle vorgestellten<br />

Tastenkombinationen.<br />

Erscheint eine höhere Zahl, dann<br />

hat der Distributor einige der<br />

Tastenkombinationen deaktiviert.<br />

Bei einer 128 dürfen Sie beispielsweise<br />

nur den Rechner neu<br />

starten und herunterfahren, alle<br />

anderen magischen Tastenkombinationen<br />

liegen brach. Sämtliche<br />

Tastenkombinationen schalten<br />

Sie als Benutzer root mit folgendem<br />

Befehl ein (Abbildung B):<br />

# echo 1 > /proc/sys/kernel/sysrq<br />

Wenn Sie einen mit echo beginnenden<br />

Befehl nur mit sudo aufrufen<br />

können (wie etwa unter<br />

Ubuntu), müssen Sie das ganze<br />

Gebilde in Anführungszeichen<br />

einschließen und ein sudo su -c<br />

voranstellen, also beispielsweise:<br />

$ sudo su -c "echo 1 > /proc/sysU<br />

/kernel/sysrq"<br />

Damit die neue Einstellung auch<br />

einen Neustart überlebt, ergänzen<br />

Sie als Benutzer root in der<br />

Datei /etc/sysctl.conf eine Zeile<br />

des Inhalts kernel.sysrq = 1.<br />

Fazit<br />

Auch die Magic System Requests<br />

können keine Texte aus einer abgestürzten<br />

Textverarbeitung wiederherstellen.<br />

Im Gegensatz zum Reset-Knopf<br />

verhindern sie jedoch im<br />

Ernstfall noch größere Datenverluste.<br />

Sofern der Computer nicht<br />

an einem öffentlich zugänglichen<br />

Platz steht, sollten Sie die Tastenkombinationen<br />

einschalten und<br />

sich dann die Eselsbrücke mit den<br />

langweiligen Elefanten merken: Im<br />

Fall der Widerherstellung beleben<br />

Sie das System dann schnell und<br />

vor allem sicher wieder. (jlu) n<br />

B Wie die Null anzeigt,<br />

unterstützt OpenSuse<br />

die SysRq-Tastenkombinationen<br />

zwar, deaktiviert<br />

sie jedoch von<br />

Haus aus. Abhilfe<br />

schafft ein kurzer Befehl<br />

als Benutzer root.<br />

3 AUSGABEN FÜR NUR 5,90 E<br />

Jetzt bestellen: 3 Hefte zum Preis von einem. Sie sparen 66 %!<br />

NEU!<br />

Jetzt bestellen unter:<br />

Kennenlernangebot:<br />

3 AUSGABEN<br />

für nur 5,90 E<br />

www.android–user.de/miniabo<br />

www.linux-user.de<br />

11 | 12 71<br />

Telefon 07131 / 2707 274 • Fax 07131 / 2707 78 601 • E-Mail: abo@android-user.de


HARDWARE<br />

Raspberry Pi<br />

Bastelprojekte mit dem Raspberry Pi<br />

Quadratur<br />

der Himbeere<br />

© Agzu, sxc.hu<br />

Der Kleinst-PC<br />

Raspberry Pi<br />

erweist sich als<br />

Multitalent, das<br />

sich zum Regeln<br />

und Steuern wie<br />

auch als kleiner<br />

Server eignet.<br />

Werner Hein<br />

README<br />

Der Einplatinen-Rechner<br />

Raspberry Pi, gerade so<br />

groß wie eine Scheckkarte,<br />

schickt sich an,<br />

den Embedded-Bereich<br />

von im wahrsten Sinne<br />

des Wortes begreifbar<br />

zu machen. Mit seinen<br />

vielfältigen Einsatzmöglichkeiten<br />

erobert er<br />

nicht nur den Hobbybereich,<br />

sondern glänzt<br />

auch bei semiprofessionellen<br />

Anwendungen.<br />

Vor allem um günstige Computertechnik<br />

in die Hände technisch<br />

interessierter Jugendlicher zu geben,<br />

rief in Großbritannien ein<br />

engagiertes Team um den Ingenieur<br />

Eben Upton im Rahmen einer<br />

Stiftung ein Projekt namens<br />

Rasp berry Pi ins Leben [1]. Das<br />

erklärte Ziel lautete, einen<br />

scheckkartengroßen Einplatinencomputer<br />

zu entwickeln und diesen<br />

– kompatibel zum oft schmalen<br />

Taschengeld der Zielgruppe –<br />

auf den Markt zu bringen (siehe<br />

Kasten Historie).<br />

Wen das an die Zeit des Home-<br />

Computers erinnert, der liegt<br />

nicht vollkommen falsch: Die<br />

Gründer wünschten sich ausdrücklich<br />

die Wiederbesiedelung<br />

von Hobbyräumen, Jugendkellern<br />

und Klassenzimmern im<br />

Geiste jener Generation, die mit<br />

Atari 400/ 800, ZX80/ 81 oder<br />

VC20/ C64 aufgewachsen war.<br />

Ein halbes Jahr nach dem Erscheinen<br />

der ersten Serie, die<br />

rund 10 000 Stück umfasste, und<br />

bei einem Auslieferungsstand von<br />

rund 500 000 Stück bietet es sich<br />

an, Nachlese zu halten: Wie weit<br />

ist das Projekt gediehen, welche<br />

Möglichkeiten bietet die Hardware,<br />

was geht und was (noch)<br />

nicht. Dieser Artikel gibt anhand<br />

von drei Beispielen eine Übersicht,<br />

was der Winzling vermag.<br />

Einkaufsliste<br />

Ursprünglich hatten die Designer<br />

zwei Modelle A und B konzipiert,<br />

die sich im Wesentlichen nur in<br />

der Anzahl der USB-Ports (einer<br />

oder zwei), der Verfügbarkeit eines<br />

Ethernet-Ports und natürlich<br />

im Preis (25/ 35 US-Dollar) unterschieden.<br />

Tatsächlich steht zur<br />

Zeit aber ausschließlich Modell B<br />

zur Auswahl.<br />

Um den Raspberry Pi, kurz Raspi,<br />

in Betrieb zu nehmen, gilt es,<br />

eine Einkaufsliste für die Basiskomponenten<br />

zusammenzustellen.<br />

Weitere Tipps für den erweiterten<br />

Betrieb finden sich im<br />

Netz ([2],[3]). Das eigentliche<br />

Board haben derzeit nur zwei<br />

weltweit operierende Distributoren<br />

im Programm ([4],[5]). Waren<br />

im Frühjahr 2012 noch Lieferzeiten<br />

von einigen Monaten nicht<br />

ungewöhnlich, so betragen sie<br />

jetzt in der Regel höchstens wenige<br />

Wochen.<br />

Neben dem Board benötigen Sie<br />

ein USB-(Stecker-)Netzteil nicht<br />

unter 700 mA. Möchten Sie zusätzliche<br />

Hardware mitversorgen,<br />

empfiehlt es sich, von mindestens<br />

1 Ampere auszugehen. Als Massenspeicher<br />

brauchen Sie eine<br />

SD(HC)-Karte mit mindestens 2,<br />

besser aber 4 GByte Kapazität. Je<br />

nach Einsatzzweck kann auch das<br />

noch nicht ausreichen. Da auf der<br />

SD-Karte das System untergebracht<br />

ist, empfiehlt es sich, eine<br />

Karte mit möglichst hoher Geschwindigkeit<br />

beim Lesen und<br />

Schreiben zu wählen.<br />

Für den drahtlosen Zugang bietet<br />

sich ein WLAN-Adapter in<br />

Form eines USB-Sticks an. Dieser<br />

erweist sich in der Praxis als ein<br />

schwer einzuschätzender Stromverbraucher.<br />

Oberste Priorität<br />

gilt aber der Treiberunterstützung<br />

und einem schlanken Design,<br />

um den zweiten USB-Port<br />

nicht zu blockieren. Mit Blick auf<br />

die wenigen Ports lohnt es sich, in<br />

eine Funktastatur und eine ebenso<br />

angeschlossene Maus zu investieren.<br />

Das erspart zusätzlich<br />

dem – meist knapp bemessenen –<br />

USB-Netzteil unnötige Last.<br />

72 11 | 12<br />

www.linux-user.de


Raspberry Pi<br />

HARDWARE<br />

Neben diesen Teilen benötigen<br />

Sie noch, je nach angepeiltem<br />

Einsatzzweck, diverse Kabel wie<br />

HDMI oder Ethernet. In Bezug<br />

auf das HDMI-Kabel gilt: je kürzer<br />

desto besser. Sie haben zwar<br />

die Möglichkeit, bei Pixelfehlern<br />

die Leistung der Leitungstreiber<br />

zu erhöhen, aber das kostet wieder<br />

zusätzlichen Strom. Wer Musik<br />

hören will oder Filme schaut,<br />

benötigt außerdem Kopfhörer<br />

oder Boxen.<br />

Für das Expansions-Board im<br />

Selbstbau fallen die folgenden<br />

Teile an: die ICs LM75 als Temperatursensor<br />

und MAX3232CPE<br />

inklusive vier 0.47µF Elkos als<br />

Pegelwandler für die serielle<br />

Schnittstelle (UART), dazu ein<br />

9-poliger D-Sub-Stecker oder eine<br />

Buchse zur Printmontage sowie<br />

das Schnittstellenkabel. Hinzu<br />

kommen zwei LEDs in verschiedener<br />

Farbe, zum Beispiel Rot<br />

und Grün, mit jeweils einem<br />

22-Ohm-Vorwiderstand und einem<br />

NPN-Kleinsignaltransistor<br />

(etwa BC237) als Treiber sowie<br />

zwei Pullup-Widerstände mit 10<br />

kOhm für den I2C-Bus. Diverses<br />

Kleinmaterial wie Lochrasterplatte,<br />

Steckerleiste, Flachbandkabel<br />

und Blockkondensatoren, dient<br />

als Grundlage.<br />

Erste Schritte<br />

Im ersten halben Jahr seit Erscheinen<br />

des Raspberry Pi hat<br />

sich in Sachen Aufsetzen eines<br />

lauffähigen Systems enorm viel<br />

bewegt. Wer trotzdem auf<br />

Schwierigkeiten stößt, dem sei als<br />

Anlaufstelle im Web Elinux.<br />

org [6] für Hilfe und weitere Information<br />

empfohlen.<br />

Verglichen mit den Anfängen im<br />

Frühjahr dieses Jahres erscheint<br />

die Installation der in diesem<br />

Workshop eingesetzten, auf Debian<br />

basierenden und von der Raspberry<br />

Pi Foundation empfohlenen<br />

Distribution Raspbian<br />

„Wheezy“ [7] fast schon kinderleicht,<br />

weil das Setup übersichtlich<br />

ausfällt und Sie menügeführt<br />

durch die Punkte schleust.<br />

Laden Sie als Erstes die Image-<br />

Datei von Raspbian „Wheezy“<br />

herunter. Es handelt sich um ein<br />

fertiges Systemabbild, bestehend<br />

aus einer etwa 60 MByte großen<br />

Boot-Partition und einem Root-<br />

Filesystem mit rund 2 GByte. Packen<br />

Sie die Datei aus und spielen<br />

Sie sie mit dem folgenden Befehl<br />

auf eine SD-Card auf:<br />

$ sudo dd bs=1M if=2012-08-16-whU<br />

eezy-raspbian.img of=SD-Card-GerU<br />

ätedatei<br />

Nun stecken Sie am Raspberry Pi<br />

SD-Card, Tastatur, Maus und Monitor<br />

an und booten durch Einstecken<br />

ans USB-Netzteil. Es erscheint<br />

das Konfigurationsmenü,<br />

in dem Sie am besten gleich über<br />

die Menüpunkte configure-keyboard<br />

und change_locale auf die<br />

deutsche Tastatur und Sprache<br />

umstellen – ansonsten kommen<br />

Sie spätestens bei der Eingabe der<br />

Login-Daten ins Schleudern. Der<br />

voreingestellte Benutzername<br />

lautet pi, das Passwort raspberry.<br />

Andere sinnvolle Menüpunkte,<br />

wie change_timezone zum Einstellen<br />

der richtigen Zeitzone, ssh<br />

zum Aktivieren des sicheren Zugangs<br />

zum Terminal via Netzwerk<br />

sowie expand_rootfs, um das<br />

Root-Filesystem von 2 GByte auf<br />

die tatsächlichen Größe der SD-<br />

Card auszuweiten, kommen je<br />

nach Bedarf zum Einsatz. Am<br />

Schluss aktualisieren Sie das System<br />

in Debian-typischer Art:<br />

$ sudo apt-get update<br />

$ sudo apt-get upgrade<br />

Sie haben die Möglichkeit, das<br />

Tool zum Konfigurieren mit sudo<br />

raspi-config später wieder zu starten.<br />

Das ergibt aber nur dann<br />

Sinn, wenn Sie keine tiefgreifenden<br />

Änderungen am Tool vorbei<br />

vorgenommen haben.<br />

Desktop und Multimedia<br />

Mit startx gelangen Sie auf den<br />

für schlanke Systeme optimierten<br />

grafischen Desktop LXDE. Den<br />

ultimativen Test für die Hardware<br />

stellt sicher das Abspielen eines<br />

HD-Videos dar. Die üblichen Abspielprogramme<br />

eignen sich dazu<br />

aber nicht, denn die GPU auf dem<br />

Board ist auf das Decodieren von<br />

Audio- und Video-Daten optimiert.<br />

Dementsprechend benötigen<br />

Sie einen Player, der die<br />

Broadcom-eigene Programmbibliothek<br />

(zu finden unter /opt/vc)<br />

verwendet. Das tut derzeit nur<br />

das bereits installierte Kommandozeilenprogramm<br />

omxplayer [8].<br />

Falls die Möglichkeit besteht,<br />

dann mounten Sie einfach das<br />

Verzeichnis mit den Dateien über<br />

das Netzwerk. Den schnelleren<br />

Zugang zur Videosammlung bietet<br />

NFS, unkomplizierter geht es<br />

per SSHFS. Die entsprechenden<br />

Pakete installieren Sie wie in Listing<br />

1 gezeigt. Mit dem Befehl<br />

omxplayer Datei starten Sie dann<br />

die Wiedergabe.<br />

HISTORIE<br />

Im Jahr 2006 entwickelte Eben Upton mit einem Team die ersten<br />

Konzepte zum Raspberry Pi, basierend auf einem Atmel ATmega.<br />

Die Idee, Jugendliche mit dem Kleinstcomputer zu begeistern,<br />

gehörte bereits damals zum Programm. 2009 gründen die Mitglieder<br />

dann offiziell die Raspberry Pi Foundation.<br />

Im August 2011 ging eine rund 50 Boards umfassende Alpha-Serie<br />

vom Band. Sie diente in erster Linie als Plattform für Entwickler,<br />

zum Debuggen und zu Demonstrationszwecken. Im Dezember<br />

2011 folgte die Beta-Serie mit 25 Boards, die bereits auf dem<br />

Produktionslayout basierten. Die Entwickler beseitigten daraufhin<br />

die letzten Fehler. Bei einer Online-Auktion im Januar 2012 erzielten<br />

schließlich 10 Boards aus dieser Beta-Serie einen Erlös<br />

von insgesamt 16 336 Pfund.<br />

Am 29. Februar 2012, um 7 Uhr mitteleuropäischer Zeit, gehen<br />

die Webserver der Foundation sowie der beiden Distributoren innerhalb<br />

weniger Minuten unter dem Sturm der Anfragen in die<br />

Knie. Erst Stunden später gelingt es vielen Interessierten, eine<br />

Vorbestellung für die Hardware abzusetzen.<br />

Komponente<br />

SoC<br />

CPU<br />

GPU<br />

RAM<br />

TECHNISCHE DATEN<br />

Typ<br />

Broadcom BCM2835 (System on Chip)<br />

ARM1176JZF-S, 700 MHz<br />

Broadcom VideoCore IV (OpenGL ES 2.0, OpenVG,<br />

1080p30, H.264 high-profile encode/ decode)<br />

256 MByte SDRAM<br />

Ports<br />

USB 2 x USB 2.0<br />

Ethernet 1 x 10/ 100 Mbit/ s<br />

SD/ MMC 1 x Slot<br />

Audio 1 x Stereo Analog out<br />

Video 1 x Composite out, 1 x HDMI out<br />

www.linux-user.de<br />

11 | 12 73


HARDWARE<br />

Raspberry Pi<br />

A Zwischen TV-Ausgang<br />

und SD-Card finden<br />

Sie die Stiftleiste,<br />

auf der die Platine unter<br />

anderem die TXDund<br />

RXD-Signale einer<br />

seriellen Verbindung<br />

bereitstellt.<br />

DER AUTOR<br />

Werner Hein beschäftigt<br />

sich seit<br />

1994 hobbymäßig<br />

mit Linux und seit<br />

1997 professionell<br />

mit der Mobiltelefonie<br />

und damit auch<br />

mit Embedded Systems.<br />

Für diesen<br />

Artikel nahm er<br />

zum ersten Mal seit<br />

längerer Zeit wieder<br />

selbst den Lötkolben<br />

in die Hand.<br />

SERIELLE SCHNITTSTELLE AKTIVIEREN<br />

Den Raspberry Pi mit einer seriellen Schnittstelle auszustatten,<br />

setzt etwas Bastelarbeit voraus: Die TXD- und RXD-Signale der<br />

UART des SoC sind auf die Stifte 8 und 10 der doppelreihigen<br />

Stiftleiste P1 zwischen TV-Ausgang und SD-Card-Slot herausgeführt<br />

(Abbildung A). Allerdings handelt es sich dabei noch um<br />

die Signale auf dem I/ O-Pegel des SoC mit 3,3 Volt. Mit einem<br />

Pegelwandler verschieben Sie diese in den genormten RS232-<br />

Bereich. Dazu eignet sich das IC MAX3232CP.<br />

Als Terminalprogramm am PC eignet sich Minicom. Mit dem Befehl<br />

minicom -s nehmen Sie die minimal notwendigen Einstellungen<br />

vor. So liegt der serielle Anschluss entweder auf der Gerätedatei<br />

/dev/ttySZiffer oder auf /dev/ttyUSBZiffer.<br />

Die Datenrate (115 200 bit/ s) und das Datenformat (8N1) sind<br />

vorgegeben. Achten Sie darauf, dass die Software weder Hardware<br />

Flow Control noch Software Flow Control verwendet. Der<br />

Aufruf minicom -o verhindert, dass das Programm beim Start die<br />

Sequenzen zum Initialisieren ausführt, und verbindet Sie direkt<br />

mit der Konsole.<br />

Nach einem kurzen Räuspern im<br />

Ton mit entsprechendem<br />

Schluckauf im Bild spielte die<br />

Software im Test HD-Video im<br />

Format 720p mit einer Audiospur<br />

in 5.1 Dolby-Digital – natürlich<br />

auf Zwei-Kanal-Ton heruntergemischt<br />

– ohne Ruckeln ab. Das<br />

war’s dann aber schon mit der<br />

Bedienbarkeit des recht spartanischen<br />

Omxplayers. Immerhin demonstriert<br />

das Programm beeindruckend<br />

die Fähigkeit beim Decodieren<br />

von Audio und Video,<br />

mehr aber eben auch nicht. Zwei<br />

weitere Wermutstropfen gibt es:<br />

Bei der erwähnten Video-Library<br />

handelt es sich nicht um offene<br />

Software, und für die Formate<br />

MPEG-2 und VC-1 müssen Sie<br />

Lizenzen erwerben.<br />

Erfreulich niedrig fällt der Energieverbrauch<br />

aus: Selbst beim rechenintensiven<br />

Übertragen übers<br />

Netzwerk beträgt die mittlere Anschlussleistung<br />

beim Abspielen<br />

des genannten HD-Videoformats<br />

nur 3,8 Watt – also alles im grünen<br />

Bereich. Wesentlich zur Last<br />

bei CPU und Speicher tragen die<br />

Programme Omxplayer, SSH und<br />

SSHFS bei, wobei der Player den<br />

größeren Brocken für sich beansprucht.<br />

Möchten Sie allerdings<br />

HD-Videos mit 1080i oder 1080p<br />

abspielen, lohnt es sich, das Netzlaufwerk<br />

per NFS anzuschließen.<br />

Eingebettetes System<br />

Für die zwei folgenden Anwendungsbeispiele<br />

genügt es, den<br />

Raspberry Pi als vernetztes Embedded-System<br />

– ohne Tastatur,<br />

Maus oder Monitor, dafür aber<br />

mit LAN/ WLAN Zugang – zu verwenden.<br />

Bei einem solchen System<br />

haben Sie die Möglichkeit,<br />

die Meldungen beim Start über<br />

ein Terminal an der seriellen<br />

Schnittstelle mitzulesen.<br />

Liegt zusätzlich ein Fehler in der<br />

Konfiguration des Netzwerkes<br />

vor, bleibt nur dieser Weg offen,<br />

um sich ins System einzuloggen<br />

und den Fehler zu korrigieren.<br />

Daher ist es dringend angeraten,<br />

diese Schnittstelle zu aktivieren<br />

(siehe Kasten Serielle Schnittstelle<br />

aktivieren). Der Zugang per<br />

SSH übers Netzwerk sollte immer<br />

die erste Wahl bleiben, der Zugriff<br />

über die serielle Schnittstelle<br />

dient als Hintertür für Notfälle.<br />

LISTING 1<br />

$ sudo apt-get sshfs<br />

$ sudo adduser pi fuse<br />

$ mkdir myVideos<br />

$ sshfs User@Host:/Verzeichnis<br />

myVideos<br />

Der nächste Schritt zum Aufbau<br />

des Embedded-Systems stellt das<br />

Verbinden mit dem Netzwerk dar,<br />

im Beispiel via WLAN. Die Standardinstallation<br />

von Raspbian<br />

enthält bereits die Firmware-Pakete<br />

von populären WLAN-Sticks<br />

sowie das Clientprogramm Wpa_<br />

supplicant. Um zu kontrollieren,<br />

ob der WLAN-Stick aktiv ist, stecken<br />

Sie die Hardware an und suchen<br />

nach einer entsprechenden<br />

Meldung des Kernels im Syslog.<br />

Nun steht nur noch das Einrichten<br />

von Wpa_supplicant für den<br />

Zugriff auf einen Access Point an.<br />

Im einfachsten Fall, also in einem<br />

Netzwerk mit DHCP-Server im<br />

Router, besorgen Sie sich die wesentlichen<br />

Basisdaten aus dem<br />

Report von iwlist scanning. Dann<br />

passen Sie die Konfigurationsdatei<br />

/ etc/wpa_supplicant/wpa_supplicant.conf<br />

entsprechend Listing 2<br />

und / etc/network/interfaces entsprechend<br />

Listing 3 an. Schließlich<br />

nehmen Sie die Verbindung<br />

mittels sudo ifup wlan0 in Betrieb.<br />

Energieeffizienz<br />

Es geht aber auch anders herum:<br />

Der Raspberry Pi kann selbst als<br />

Access Point dienen (Abbildung<br />

B). Dabei leitet er den kompletten<br />

Funkverkehr über den<br />

WLAN-Stick direkt an den LAN-<br />

Port weiter – quasi als Brücke.<br />

LISTING 2<br />

ctrl_interface=/var/run/wpa_<br />

supplicant<br />

eapol_version=1<br />

ap_scan=1<br />

network={<br />

ssid="(E)SSID"<br />

scan_ssid=1<br />

proto=WPA (oder RSN für WPA2)<br />

key_mgmt=WPA-PSK<br />

pairwise=TKIP oder CCMP<br />

group=TKIP oder CCMP<br />

psk="Schlüssel"<br />

}<br />

LISTING 3<br />

auto wlan0<br />

iface wlan0 inet dhcp<br />

wpa-conf /etc/wpa_supplicant/<br />

wpa_supplicant.conf<br />

74 11 | 12<br />

www.linux-user.de


Raspberry Pi<br />

HARDWARE<br />

Deshalb heißt diese Arbeitsweise<br />

„bridged mode“. So vergrößern<br />

Sie die Reichweite eines bestehenden<br />

Netzwerkes.<br />

Die Konfiguration teilt sich in<br />

zwei Schritte. Im ersten stellen<br />

Sie den unmittelbaren WLAN-Zugang<br />

über den Daemon hostapd<br />

bereit. Allerdings sei darauf hingewiesen,<br />

dass Hostapd nicht uneingeschränkt<br />

mit allen WLAN-<br />

Sticks zusammenarbeitet. Im<br />

Zweifel hilft ein Blick ins Web bei<br />

der Recherche nach geeigneter<br />

Hardware [9]. Im zweiten Schritt<br />

konfigurieren Sie dann das Weiterleiten<br />

der Pakete zwischen den<br />

beiden Schnittstellen. Die Installation<br />

der notwendigen Pakete erledigen<br />

Sie mit<br />

$ sudo apt-get install hostapdbrU<br />

idge-utils<br />

Das Konfigurieren des WLAN<br />

Access Points erfolgt in drei Schritten:<br />

Zuerst tragen Sie in /etc/default/hostap<br />

die folgende Zeile ein:<br />

DAEMON_CONF=/etc/hostapd/hostapdU<br />

.conf<br />

Die Konfigurationsdatei /etc/hostapd/hostapd.conf<br />

erhält den Inhalt<br />

aus Listing 4, den Sie gegebenenfalls<br />

an die lokalen Verhältnisse<br />

anpassen. Eine Beispielkonfiguration<br />

für die Datei /etc/network/interfaces<br />

finden Sie in Listing 5.<br />

LISTING 4<br />

ctrl_interface=/var/run/hostapd<br />

ctrl_interface_group=0<br />

Das Listing 6 zeigt, wie Sie<br />

schließlich den Access Point und<br />

die Netzwerkbrücke starten.<br />

Der Stromverbrauch ist natürlich<br />

bei LAN-Betrieb am geringsten.<br />

Aber auch beim Einsatz im<br />

WLAN – unabhängig, ob als<br />

Client oder Access Point, aber abhängig<br />

von der Entfernung zwischen<br />

den Funkpartnern und<br />

dem übertragenen Datenvolumen<br />

– schwankte der Verbrauch im<br />

Test beim WLAN-Betrieb zwischen<br />

3,3 und 3,8 Watt, beim<br />

LAN-Betrieb lag er bei 2,9 Watt.<br />

Waren beide Schnittstellen aktiv,<br />

lag der gemessene Wert zwischen<br />

3,5 und 4 Watt.<br />

Steuern<br />

Neben dem Einsatz als flexibler<br />

Access Point eignet sich der Raspberry<br />

Pi ausgezeichnet als einfacher<br />

Prozessrechner. Im folgenden<br />

Beispiel misst er zyklisch die<br />

Temperatur der Umgebung über<br />

einen Sensor und signalisiert das<br />

Ergebnis abhängig vom Wert optisch<br />

über zwei LEDs. Über<br />

25 Grad Celsius leuchtet die rote<br />

LED, unter 22 Grad Celsius die<br />

grüne, im Bereich dazwischen<br />

beide (Abbildung C).<br />

Als Temperatursensor kommt<br />

der weitverbreitete Baustein<br />

LM75 zum Einsatz, den Sie über<br />

den I2C-Bus anschließen. Die beiden<br />

LEDs steuert der Rechner<br />

über zwei GPIO-Pins sowie eine<br />

Transistorstufe an. Die elektronische<br />

Schaltung der Komponenten<br />

gestaltet sich recht einfach – bei<br />

Bedarf finden Sie im Web eine<br />

Vorlage zu diesem Thema.<br />

Tatsächlich verfügt das SoC<br />

über zwei Master-Schnittstellen<br />

am I2C-Bus, deren Output sich<br />

auch im Syslog wiederfinden. Auf<br />

der zweireihigen Stiftleiste<br />

(P1-03 und P1-05) steht aber nur<br />

eine der beiden bereit – die mit<br />

der Bus-ID 0. Sie aktiviert den<br />

I2C-Bus durch Laden der beiden<br />

Treiber i2c-bcm2708 und i2c-dev.<br />

Dazu entfernen Sie Ersteren aus<br />

der Liste der nicht zu ladenden<br />

Treiber in /etc/modprobe.d/raspi-blacklist.conf.<br />

Den zweiten<br />

Treiber, der die Schnittstelle im<br />

Geräteverzeichnis /dev anlegt,<br />

tragen Sie in /etc/modules ein. Spätestens<br />

beim nächsten Neustart<br />

ist der Bus aktiv. Ohne Neustart<br />

geht es mit dem Kommando modprobe<br />

i2c-bcm2708 i2c-dev.<br />

Damit Sie die Möglichkeit haben,<br />

als normaler User am I2C-<br />

Bus Transaktionen vorzunehmen,<br />

gilt es, noch die zugehörigen<br />

B Der Raspberry Pi<br />

beim Betrieb als<br />

Access Point mit lediglich<br />

3,5 Watt Stromverbrauch.<br />

C Der Raspberry Pi<br />

mit Expansions-Board<br />

als Temperaturwächter<br />

– hier bei einer<br />

Temperatur von unter<br />

22 Grad Celsius. Das<br />

Sensor-IC LM75 ragt<br />

an vier Drähten über<br />

das Board hinaus. Bei<br />

dem DIL-IC mit 16 Pins<br />

handelt es sich um den<br />

RS232-Pegelwandler<br />

MAX3232CPE.<br />

driver=nl80211 # je nach<br />

Treiberunterstützung<br />

macaddr_acl=0<br />

auth_algs=3<br />

ignore_broadcast_ssid=0<br />

wpa=2 # für WPA2 mit PSK<br />

wpa_key_mgmt=WPA-PSK<br />

auto wlan0<br />

iface wlan0 inet static<br />

address 192.168.128.1<br />

netmask 255.255.255.0<br />

broadcast 192.168.128.255<br />

LISTING 5<br />

rsn_preauth=1<br />

rsn_preauth_interfaces=wlan0<br />

rsn_pairwise=CCMP<br />

wpa_passphrase=Passwort<br />

interface=wlan0<br />

hw_mode=g<br />

channel=11 # freier oder<br />

schwacher Funkkanal<br />

ssid=(E)SSID<br />

LISTING 6<br />

$ sudo service hostapd start<br />

$ sudo brctl addbr myBridge<br />

$ sudo brctl addif myBridge eth0<br />

$ sudo brctl addif myBridge<br />

wlan0<br />

$ sudo ifconfig myBridge up<br />

www.linux-user.de<br />

11 | 12 75


HARDWARE<br />

Raspberry Pi<br />

LISTING 7<br />

Werkzeuge zu installieren und die<br />

Rechte für die Gruppen zu setzen:<br />

$ sudo apt-get install i2c-tools<br />

$ sudo addgroup pi i2c<br />

An welchen Adressen Sie die Bausteine<br />

finden, erfahren Sie durch<br />

die Werte in der Ausgabe von i2cdetect<br />

-y 0. Je nachdem, wie Sie<br />

die drei Adress-Pins des LM75<br />

angeschlossen haben, taucht in<br />

der Ausgabe genau ein Wert im<br />

hexadezimalen Zahlenbereich<br />

$ sudo apt-get install git python3 python-pip<br />

python-virtualenv<br />

$ git clone https://github.com/quick2wire/<br />

quick2wire-gpio-admin.git<br />

$ git clone https://github.com/quick2wire/<br />

quick2wire-python-api.git<br />

$ cd quick2wire-gpio-admin<br />

$ make<br />

$ sudo make install<br />

$ sudo adduser pi gpio<br />

$ virtualenv TEMPCONTROL<br />

$ source TEMPCONTROL/bin/activate<br />

$ cd quick2wire-python-api<br />

$ sudo python3 setup.py install<br />

LISTING 8<br />

01 #!/usr/bin/env python3<br />

02 import quick2wire.i2c as i2c<br />

03 import time<br />

04 from quick2wire.gpio import Pin, exported<br />

05<br />

06 busaddr = 0x48<br />

07 regaddr = 0x00<br />

08 redLED = Pin(16, Pin.Out)<br />

09 greenLED = Pin(18, Pin.Out)<br />

10<br />

11 with exported(Pin(16, Pin.Out)) as redLED, \<br />

12 exported(Pin(18, Pin.Out)) as greenLED, \<br />

13 i2c.I2CMaster() as bus:<br />

14 while True:<br />

15 temp_hib, temp_lob = bus.transaction(i2c.writing_<br />

bytes(busaddr, regaddr),i2c.reading(address, 2))[0]<br />

16 temp = (temp_hib > 7) / 2.<br />

17 if temp > 25:<br />

18 redLED.value = 1<br />

19 greenLED.value = 0<br />

20 elif temp < 22:<br />

21 redLED.value = 0<br />

22 greenLED.value = 1<br />

23 else:<br />

24 redLED.value = 1<br />

25 greenLED.value = 1<br />

26 print ("%02.01f" % temp)<br />

27 redLED.value = 0<br />

28 greenLED.value = 0<br />

29 time.sleep(5)<br />

0x48 bis 0x4F auf. Das 2-Byte-<br />

Temperaturwort des LM75 lesen<br />

Sie dann an der Registeradresse 0<br />

mit folgendem Befehl aus:<br />

$ i2cget -y 0 I2C-Busaddresse ReU<br />

gisteradresse w<br />

Beim Umwandeln des kryptischen<br />

Rückgabewertes (Beispiel:<br />

0x8015) in den entsprechenden<br />

Temperaturwert hilft dann das<br />

Datenblatt des Bausteins.<br />

Als Software-Umgebung für den<br />

Prozessrechner eignet sich Python,<br />

da für den Raspberry Pi bereits<br />

Klassenbibliotheken für den<br />

Zugriff auf den I2C-Bus und die<br />

GPIO-Pins existieren. Darüber hinaus<br />

handelt es sich bei Python<br />

um eine verbreitete Programmiersprache<br />

mit einer großen<br />

Community. Für dieses Beispiel<br />

kamen zwei Bibliotheken zum<br />

Einsatz ([10],[11]). Listing 7 zeigt<br />

die Installation der Pakete.<br />

Das eigentliche Programm fällt<br />

sehr einfach aus (Listing 8): In einem<br />

Zyklus von fünf Sekunden<br />

liest es den Sensorwert aus (Zeile<br />

15) und wandelt diesen in den<br />

Temperaturwert um (Zeile 16).<br />

Anschließend schaltet es die beiden<br />

LEDs entsprechend.<br />

Etwas verwirrend fällt die Bezeichnung<br />

der GPIO-Pins aus. So<br />

sind die rote und die grüne LED<br />

an GPIO23/ GPIO24, aber auch an<br />

P1-16/ P1-18 angeschlossen. Die<br />

erste Bezeichnung entspricht der<br />

BCM2835-Dokumentation und<br />

den Werten aus dem Kernel. Die<br />

Python-Bibliotheken halten sich<br />

an die zweite Nomenklatur.<br />

Versehen Sie das Skript mit entsprechenden<br />

Rechten zum Ausführen.<br />

Nach dem Start gibt es<br />

laufend mit jedem Aktualisieren<br />

der LEDs die gemessenen Werte<br />

auf der Konsole aus.<br />

Fazit<br />

Das Offensichtliche gleich vornweg:<br />

Beim Raspberry Pi handelt<br />

es sich nicht um ein Desktop-System.<br />

Wem der Umgang mit Konsole<br />

und Terminal zu ungewohnt<br />

und kryptisch erscheinen mag,<br />

der sollte anfangs mit dem Desktop<br />

beginnen, aber das Arbeiten<br />

mit der Kommandozeile als Ziel<br />

im Auge haben.<br />

Der Einsatz als energiesparender<br />

PC im Multimedia-Einsatz<br />

wurde dem Winzling praktisch in<br />

die Wiege gelegt, eindeutig ist die<br />

Positionierung im Embedded-Bereich.<br />

Die Hardware eignet sich<br />

bestens als Server, Prozessrechner<br />

oder zum Steuern für nicht zu<br />

leistungshungrige Aufgaben im<br />

Hobbybereich.<br />

Die Ausstattung genügt, um die<br />

notwendige Peripherie anzuschließen,<br />

und die Stiftleiste fordert<br />

geradezu dazu auf, sich zusätzliche<br />

Funktionen nach eigenen<br />

Bedürfnissen zusammenzustellen.<br />

Auch gibt es vernünftig<br />

abgestimmte Linux-Distributionen,<br />

die dem Einsteiger die ersten<br />

Schritte erleichtern.<br />

Das ursprüngliche Ziel, Computertechnik<br />

für Interessierte – vor<br />

allem Jugendliche – (be-)greifbar<br />

zu machen, haben die Entwickler<br />

erreicht. Der Winter naht, und<br />

das neue Schuljahr hat begonnen.<br />

Für das nächste Projekt im Hobbykeller<br />

oder EDV-Unterricht, bei<br />

dem mal was blinkt oder sich bewegt,<br />

ist der Raspberry Pi wärmstens<br />

zu empfehlen. (agr) n<br />

INFO<br />

[1] Raspberry Pi: http:// www. raspberrypi. org<br />

[2] Einkaufshilfe:<br />

http:// elinux. org/ RPi_Hardware_Basic_<br />

Setup# Typical_Hardware_You_Will_Need<br />

[3] Mehr Einkaufshilfe:<br />

http:// elinux. org/ RPi_VerifiedPeripherals<br />

[4] Premier Farnell: http:// de. farnell. com<br />

[5] RS Components: http:// de. rs-online. com<br />

[6] Zentrale Anlaufstelle für Fragen:<br />

http:// elinux. org/ RaspberryPiBoard<br />

[7] Raspbian „Wheezy“:<br />

http:// www. raspbian. org<br />

[8] Audio/ Video-Player Omxplayer:<br />

https:// github. com/ huceke/ omxplayer<br />

[9] Hostapd: http:// hostap. epitest. fi/ hostapd<br />

[10] Python-API Quick2Wire: https:// github. com/<br />

quick2wire/ quick2wire-python-api<br />

[11] GPIO Admin: https:// github. com/<br />

quick2wire/ quick2wire-gpio-admin<br />

76 11 | 12<br />

www.linux-user.de


PROBELESEN<br />

OHNE RISIKO<br />

UND GEWINNEN!<br />

eines von zehn „ivori“ smartphone GadGets<br />

das smartphone wird zum desktop telefon<br />

GeeiGnet für alle smartphones mit mini Jack<br />

ein cooles retro GadGet für Büro und zu hause<br />

gesponsert von<br />

.de<br />

SONDERAKTION!<br />

Testen Sie jetzt<br />

3 Ausgaben für<br />

NUR 3€*<br />

Telefon: 07131 /2707 274<br />

Fax: 07131 / 2707 78 601<br />

E-Mail: abo@linux-user.de<br />

Mit großem Gewinnspiel unter:<br />

www.linux-user.de/probeabo<br />

* Angebot gilt innerhalb Deutschlands und Österreichs. In der Schweiz: SFr 4,50.<br />

Weitere Preise: www.linux-user.de/produkte


KNOW-HOW<br />

Dateitransport<br />

Große Dateien transferieren<br />

Übergröße<br />

Einige Dateisysteme orientieren sich meist an Dateien kleiner und mittlerer Größe und bekommen bei<br />

größeren Brocken schnell Schluckauf. Kleine Umwege versprechen hier Abhilfe. Frank Hofmann<br />

© Colindamckie, 123RF<br />

README<br />

Oft ist guter Rat teuer,<br />

wenn es darum geht,<br />

die leidige Grenze von<br />

4 GByte für Dateien zu<br />

umschiffen, um eine<br />

Datei via USB-Stick von<br />

A nach B zu transportieren.<br />

Es gibt diverse Alternativen,<br />

die es erlauben,<br />

diese Grenze zu<br />

umgehen.<br />

LISTING 1<br />

$ ftp Nutzer@Server<br />

Password:<br />

230 Login successful. Have fun.<br />

ftp> put Datei<br />

ftp> bye<br />

221 Goodbye.<br />

LISTING 2<br />

$ scp Datei Nutzer@Ziel:<br />

$ scp Datei Nutzer@Ziel:/tmp/<br />

$ scp -C datei3.iso<br />

Nutzer@Ziel:debian.iso<br />

$ scp -C Nutzer@Quelle:debian.<br />

iso datei4.iso<br />

Die Situation kommt vielen vermutlich<br />

bekannt vor: Sie möchten<br />

eine große Datei auf einem USB-<br />

Stick speichern, das Unterfangen<br />

schlägt aber fehl, obwohl genügend<br />

Platz vorhanden wäre. In<br />

diesem Fall sind Sie sehr wahrscheinlich<br />

an die Grenzen des<br />

Dateisystems auf dem verwendeten<br />

Datenträger gestoßen. Als<br />

Ursache kommt eine gefüllte File<br />

Allocation Table (FAT) – das Verzeichnis<br />

über den Inhalt des Datenträgers<br />

– und das Erreichen der<br />

maximalen Anzahl der Blöcke pro<br />

Datei infrage.<br />

Aus Kompatibilitätsgründen liefern<br />

viele Hersteller ihre Medien<br />

mit den Dateisystemen VFAT oder<br />

FAT32 aus. Dass diese die Größe<br />

einer Datei begrenzen, fällt oft<br />

lange Zeit nicht auf. Beide speichern<br />

Dateien bis zu einer maximalen<br />

Größe von rund 4 GByte.<br />

Allerdings gibt es verschiedene Lösungsansätze,<br />

wie Sie solche großen<br />

Dateien dennoch von Rechner<br />

zu Rechner transportieren.<br />

Variante eins ist der Datentransfer<br />

über eine Netzwerkverbindung,<br />

Variante zwei das Komprimieren<br />

der Daten, Variante drei<br />

das Formatieren des Datenträgers<br />

mit einem anderen Dateisystem<br />

und Variante vier das Zerlegen der<br />

Datei in mehrere Stücke und das<br />

nachfolgende Zusammenfügen auf<br />

dem Zielsystem.<br />

Netzbetrieb<br />

Ob der Transfer über das Netz infrage<br />

kommt, hängt vom Durchsatz<br />

der Leitung und einer stabilen<br />

Bandbreite während der Verbindung<br />

ab. Für den<br />

Upload über einen Zugang<br />

mit asymmetrischer<br />

Bandbreite (Beispiel:<br />

ADSL) stellen Internet<br />

Service Provider<br />

häufig weniger Kapazität<br />

bereit als für den<br />

Download. In Zeiten des stets verfügbaren<br />

Netzes gerät diese Tatsache<br />

leicht in Vergessenheit.<br />

Vermag das Zielsystem Daten<br />

via FTP zu empfangen, erweist<br />

sich dieses Protokoll als erste<br />

Wahl. Neben dem klassischen<br />

Werkzeug ftp für die Kommandozeile<br />

(Listing 1) vereinfacht der<br />

Client Gftp mit seiner grafischen<br />

Oberfläche das Hin- und Herschieben<br />

der Daten mitunter erheblich<br />

(Abbildung A).<br />

Bei FTP handelt es sich aber um<br />

ein unsicheres Protokoll, das<br />

sämtliche Daten unverschlüsselt<br />

verschickt. Als sicherere Alternativen<br />

stehen seit Längerem Secure<br />

FTP (SFTP) und FTPS (FTP über<br />

SSH) bereit. Daneben bietet sich<br />

zum sicheren Übertragen der Einsatz<br />

von Secure Copy (SCP) an.<br />

Das Programm gehört in der Regel<br />

zum Umfang einer SSH-Installation<br />

auf einem Client-PC. Auf<br />

dem Zielsystem setzt dieser Weg<br />

einen SSH-Server voraus.<br />

Beide Komponenten stehen unter<br />

Debian und Ubuntu in den Paketen<br />

openssh-client und openssh-<br />

78 11 | 12<br />

www.linux-user.de


Dateitransport<br />

KNOW-HOW<br />

server bereit. Der Client gehört bei<br />

vielen Distributionen bereits zum<br />

Standardumfang, eine Installation<br />

ist deswegen meist nicht erforderlich.<br />

Den Server installieren Sie<br />

nachträglich, unter Ubuntu/ Debian<br />

mittels apt-get install opensshserver<br />

auf dem Zielsystem.<br />

Um Daten vom Host zum Server<br />

zu übertragen, genügt das Kommando<br />

aus der ersten Zeile von<br />

Listing 2. SCP baut eine verschlüsselte<br />

Verbindung zum Zielrechner<br />

auf und überträgt die Datei<br />

ins angegebene Verzeichnis.<br />

Dieses benennen Sie explizit, indem<br />

Sie es im Aufruf an den Rechnernamen<br />

anfügen. Als Trennzeichen<br />

fungiert im SCP-Aufruf der<br />

(obligatorische) Doppelpunkt. Geben<br />

Sie nur den Doppelpunkt an,<br />

wählt die Software automatisch<br />

das Home-Verzeichnis auf dem<br />

entfernten System als Ziel aus.<br />

Während die ersten beiden Aufrufe<br />

in Listing 2 den Dateinamen<br />

auf dem Zielsystem beibehalten,<br />

ändert das dritte Kommando ihn<br />

in debian.iso. Zusätzlich erfolgt<br />

der Transfer durch den Schalter<br />

-C in Gzip-komprimierter Form.<br />

Bei Textdateien und Tar-Archiven<br />

verringert sich dadurch unter<br />

Umständen die Dauer der Übertragung<br />

ganz erheblich.<br />

SCP holt auf Wunsch auch Daten<br />

vom Server. Im Aufruf geben<br />

Sie dazu im ersten Parameter den<br />

Namen des Rechners an, auf dem<br />

die Dateien bereitstehen, und im<br />

zweiten Parameter den Pfad und<br />

Dateinamen im lokalen System.<br />

In der letzten Zeile von Listing 2<br />

liest das Programm die Datei<br />

debian.iso vom angegebenen<br />

Rechner aus dem Home-Verzeichnis<br />

des Benutzers, überträgt diese<br />

Gzip-komprimiert auf das lokale<br />

System und speichert das File im<br />

aktuellen Verzeichnis unter dem<br />

Namen datei4.iso ab.<br />

Haben Sie sich noch nicht mit<br />

den Werkzeugen auf der Kommandozeile<br />

vertraut gemacht, bietet<br />

der Midnight Commander<br />

sich hier als Alternative<br />

an. Hinter den<br />

beiden Menüpunkten<br />

Links | FTP-Verbindung<br />

und Links | Shell-Verbindung<br />

verbergen sich<br />

Aufrufe, über die Sie<br />

eine FTP- beziehungsweise<br />

SCP-Verbindung<br />

herstellen (Abbildung<br />

B). Beachten Sie,<br />

dass der Midnight<br />

Commander Daten im<br />

Verzeichnis / tmp puffert.<br />

Prüfen Sie daher vor dem<br />

Übertragen großer Dateien, ob<br />

dort genügend Platz bereitsteht.<br />

Abgleich mit Rsync<br />

Eine weitere Möglichkeit zum Datentransfer<br />

besteht im Synchronisieren<br />

zweier Verzeichnisse via<br />

Rsync oder dessen grafischen<br />

Frontend Grsync (Abbildung C).<br />

Listing 3 zeigt, wie Sie den Inhalt<br />

des Verzeichnisses /original von<br />

einem Rechner mit dem lokalen<br />

Verzeichnis kopie abgleichen.<br />

Rsync überträgt dabei nur die Änderungen<br />

zwischen dem Original<br />

und der Kopie – identische Datenblöcke<br />

erkennt das Tool und spart<br />

sie aus. Die Option -z sorgt dafür,<br />

dass die Daten via Gzip komprimiert<br />

übers Netz laufen.<br />

Daten komprimieren<br />

Die Datenkompression während<br />

des Übertragens kostet einerseits<br />

Zeit, andererseits unterstützt das<br />

Duo SSH/ SCP nur das Komprimieren<br />

mittels<br />

Gzip. Das<br />

Verfahren ist<br />

zwar weit<br />

verbreitet,<br />

aber nicht<br />

immer die<br />

beste Wahl.<br />

Möchten Sie<br />

ein anderes<br />

Verfahren<br />

verwenden,<br />

bleibt Ihnen nur das Komprimieren<br />

der Dateien vor dem Transfer<br />

und das Auspacken auf dem Zielsystem,<br />

etwa mittels Xz oder 7z.<br />

Welches Verfahren sich am besten<br />

eignet, hängt in erster Linie<br />

von den zu verarbeitenden Daten<br />

ab. Eine vollständige Übersicht zu<br />

den einzelnen Verfahren und deren<br />

Grad der Kompression und<br />

Geschwindigkeit beim Verarbeiten<br />

der Daten gibt ein Artikel von<br />

Martin Steigerwald [1].<br />

Es gilt jedoch, die Wahl des Formates<br />

noch in einer ganz anderen<br />

Hinsicht zu beachten: Möchten<br />

Sie die komprimierte Datei auf<br />

dem Zielsystem wieder auspacken,<br />

stellen Sie am besten vorab<br />

sicher, dass dort auch ein geeignetes<br />

Programm bereitsteht.<br />

Neues Format<br />

Eine weitere Möglichkeit besteht<br />

in der Manipulation des externen<br />

Datenträgers und dessen Dateisy s-<br />

tem. Das Erzeugen eines Dateisys-<br />

A Der Client Gftp erleichtert<br />

mit seiner<br />

grafischen Oberfläche<br />

den Dateitransfer zu<br />

einem FTP-Server.<br />

B Wer den Kontakt mit<br />

der Kommandozeile<br />

scheut, dem bietet der<br />

Midnight Commander,<br />

in einer grafischen<br />

Oberfläche verpackt,<br />

eine ähnliche Funktion<br />

wie SCP und FTP.<br />

LISTING 3<br />

$ rsync -z Nutzer@Quelle:/original/ kopie<br />

www.linux-user.de<br />

11 | 12 79


KNOW-HOW<br />

Dateitransport<br />

C Die grafische Oberfläche<br />

Grsync erleichtert<br />

den Umgang mit<br />

den zuweilen recht<br />

kryptisch wirkenden<br />

Rsync-Kommandos.<br />

GLOSSAR<br />

EByte: 1 Exabyte = 10 18<br />

Byte. 1 EByte entspricht<br />

also 1 Million TByte<br />

oder 1 Milliarde GByte.<br />

LISTING 4<br />

tems gelingt mit den Mkfs-Tools.<br />

Mkfs steht für „make file system“,<br />

für (fast) jedes Dateisystem steht<br />

ein eigenes Kommando bereit. So<br />

erzeugt mkfs.ext4 /dev/sdb1 ein<br />

Ext4-Dateisystem auf dem angegebenen<br />

Device. Die maximale<br />

Datei größe in einem Dateisystem<br />

variiert stark und liegt beispielsweise<br />

zwischen 16 TByte bei<br />

Ext2, 1 EByte bei Ext4 und<br />

16 EByte bei ZFS [2].<br />

Je nach Größe des Datenträgers<br />

nimmt das Anlegen des Dateisystems<br />

etwas Zeit in Anspruch. Beachten<br />

Sie dabei, dass dabei alle<br />

Informationen zu den bereits abgelegten<br />

Daten auf dem Speichermedium<br />

verloren gehen.<br />

Dateien splitten<br />

Sind die oben genannten Methoden<br />

nicht praktikabel oder nicht<br />

möglich, zerlegen Sie die Datei in<br />

$ split --bytes=50M -d -a 3 debian-6.0.4-i386-netinst.iso<br />

teil-<br />

$ ls -hal teil*<br />

-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teil-000<br />

-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teil-001<br />

-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teil-002<br />

-rw-r--r-- 1 frank frank 41M 30. Apr 10:33 teil-003<br />

LISTING 6<br />

$ openssl dgst -md5 debian.iso<br />

MD5(debian.iso)= ff79f60c4d1fee2d47baadcbf081e5b6<br />

$ openssl dgst -md5 neu.iso<br />

MD5(neu.iso) = ff79f60c4d1fee2d47baadcbf081e5b6<br />

kleinere Stücke und setzen sie diese<br />

auf dem Zielsystem wieder zusammen.<br />

Unter Linux gibt es dafür<br />

die beiden Tools split und cat.<br />

Split zerlegt die Dateien, Cat fügt<br />

die Einzelteile wieder zusammen.<br />

Ohne Angabe von Parametern<br />

zerlegt Split die angegebene Datei<br />

in Teile mit einer Länge von<br />

1000 Zeilen. Diese Voreinstellung<br />

eignet sich zwar für Textdateien,<br />

aber nicht für ein ISO-Image oder<br />

eine virtuelle Maschine. Mit dem<br />

Parameter --bytes=Wert teilt Split<br />

dagegen aufs Byte genau.<br />

Um das ISO-Image des Net installers<br />

von Debian (191 MByte)<br />

in 50 MByte große Happen zu<br />

zerteilen, genügt der Aufruf:<br />

$ split --bytes=50M debian-6.0.4U<br />

-i386-netinst.iso<br />

Split zerlegt das Image dann in die<br />

vier Teile xaa bis xad. Dabei fallen<br />

xaa, xab und xac exakt 50 MByte<br />

groß aus, xad enthält die restlichen<br />

Daten mit rund 41 MByte. In der<br />

Grundeinstellung benennt das<br />

Tool die Ausgabedateien mit dem<br />

Präfix x und den beiden nachfolgenden,<br />

aufsteigend durchgezählten<br />

Buchstaben (Suffix) durch.<br />

Über weitere Parameter im Split-<br />

Aufruf passen Sie das Benennen<br />

der Ausgabedateien Ihren Vorstellungen<br />

an. Den Hauptbestandteil<br />

für den Dateinamen übermitteln<br />

Sie Split, indem Sie obigen Aufruf<br />

um ein Präfix ergänzen:<br />

$ split --bytes=50M debian-6.0.4U<br />

-i386-netinst.iso teil-<br />

Die erzeugten Dateien heißen nun<br />

teil-aa bis teil-ad. Über die beiden<br />

Parameter -d und -a beeinflussen<br />

Sie zudem die Suffixe. Die Option<br />

-d erzeugt numerische Endungen,<br />

-a Anzahl bestimmt deren<br />

Breite (in der Vorgabe 2), die Leerstellen<br />

füllt Split mit Nullen auf.<br />

LISTING 5<br />

$ cat teil-* >> neu.iso<br />

$ diff debian.iso neu.iso<br />

$ cmp debian.iso neu.iso<br />

Der Aufruf in der ersten Zeile von<br />

Listing 4 erzeugt die vier Dateien<br />

teil-000 bis teil-003.<br />

Für das Zusammenfügen der<br />

Einzelteile auf dem Zielsystem<br />

genügt ein einfaches Kommando<br />

in der Bash (Listing 5, Zeile 1):<br />

Mit Cat setzen Sie die Teile, die<br />

durch das Namensschema in der<br />

richtigen Reihenfolge vorliegen,<br />

über den Operator >> zu einer Datei<br />

zusammen, die im Beispiel<br />

neu.iso heißt.<br />

Sicherheitshalber überprüfen<br />

Sie danach, dass es beim Zerlegen<br />

und Zusammenfügen keine Fehler<br />

gab und beide ISO-Dateien<br />

(Original und Kopie) identisch<br />

ausfallen. Ein Byte-für-Byte-Vergleich<br />

dauert zu lange und ist zudem<br />

fehleranfällig. Hier helfen<br />

die nützlichen Werkzeuge Cmp<br />

und Diff, mit denen Sie beide Dateien<br />

auf mögliche Unterschiede<br />

prüfen (Listing 5, zweite und dritte<br />

Zeile). Erfolgt keine Ausgabe,<br />

sind beide ISO-Dateien identisch.<br />

Einen weiteren, eleganteren und<br />

oft genutzten Weg stellt das Erzeugen<br />

eines Hash-Wertes dar.<br />

Dabei handelt es sich um eine Art<br />

Fingerabdruck für eine Datenmenge<br />

oder Zeichenkette. In Listing<br />

6 erzeugt das Kommando<br />

openssl diesen Wert auf der Basis<br />

des MD5-Algorithmus. Bei identischen<br />

Prüfsummen stimmen Original<br />

und Kopie überein.<br />

Fazit<br />

Beim Kopieren großer Dateien<br />

führen verschiedene Ideen und<br />

Vorgehensweisen gleichermaßen<br />

zum Erreichen des Ziels, es gibt<br />

dabei keinen richtigen und keinen<br />

falschen Weg. Wichtig ist nur,<br />

dass Sie für das Problem eine passende<br />

Lösung finden und sich danach<br />

wieder etwas sicherer durch<br />

den Linux-Alltag bewegen. (tle) n<br />

INFO<br />

[1] Packer im Vergleich: Martin Steigerwald,<br />

„Zip und Zop“, LU 10/ 2010, S. 68,<br />

http:// www. linux-community. de/ 20298<br />

[2] ZFS: http:// de. wikipedia. org/ wiki/ ZFS_<br />

(Dateisystem)<br />

80 11 | 12<br />

www.linux-user.de


Potlatch2<br />

KNOW-HOW<br />

OSM-Karten mit Potlatch2 editieren<br />

Auf die Schnelle<br />

Für kleine Modifikationen an OSM-Karten bietet sich Potlatch2 als<br />

einfacher, schnell anzuwendender Editor an. Karsten Günther<br />

© #Dorota C., 123RF<br />

Fällt Ihnen beim Blick auf einen<br />

Bereich einer Karte aus Open-<br />

StreetMap auf, dass ein bestimmter<br />

Weg oder POI fehlt, brauchen<br />

Sie keinen ausgewachsenen Editor<br />

wie Merkaator [1] oder<br />

JOSM [2] zu bemühen: Mithilfe<br />

des Online-Editors Potlatch2 [3]<br />

nehmen Sie kleine Änderungen<br />

direkt in der Karte über den<br />

Menüpunkt Bearbeiten vor.<br />

Sie brauchen allerdings für alle<br />

Änderungen an den Karten einen<br />

Account bei OpenStreetMap. Der<br />

ist schnell angelegt, denn es<br />

braucht dazu nicht mehr als eine<br />

E-Mail-Adresse. Nach dem Start<br />

des Editors über den Menüpunkt<br />

Bearbeiten zeigt dieser zunächst<br />

eine kurze Einführung. Diese Informationen<br />

finden Sie auf<br />

Deutsch im Netz [4].<br />

Es gibt mehrere Varianten des<br />

Editors: So verfügt beispielsweise<br />

die Reit- und Wanderkarte [5] über<br />

einige speziell angepasste Elemente.<br />

Eine Besonderheit sind<br />

die eingeblendeten Hintergrundbilder.<br />

Diese helfen, die richtige<br />

Position auf der Karte zu finden.<br />

Der Editor zeigt nach dem Start<br />

den zuvor in der Karte dargestellten<br />

Ausschnitt, den Sie jederzeit<br />

mit der Maus (linke Maustaste)<br />

1 Ein Mausklick auf ein Objekt auf der Karte aktiviert es zum Verschieben, erlaubt aber<br />

auch neue Tags anzugeben oder bestehende zu verändern.<br />

verschieben. Achten Sie in diesem<br />

Fall darauf, keine Objekte oder<br />

Wege anzuklicken. Über das<br />

Mausrad skalieren Sie die Auflösung,<br />

was auch über die beiden<br />

Buttons am oberen linken Kartenrand<br />

klappt.<br />

Allerdings zeigt die Funktion<br />

schnell die Grenzen des Editors<br />

auf: Bei dem serverbasierten Tool<br />

hängt die Arbeitsgeschwindigkeit<br />

stark von einer flotten Verbindung<br />

ins Internet ab. Auch ein in<br />

einem anderen Fenster laufender<br />

Prozess des Browsers behindert<br />

mitunter die Arbeit.<br />

Falls Sie versehentlich ein Objekt<br />

aktiviert oder einen<br />

neuen Punkt erzeugt haben,<br />

hilft [Esc]: Darüber<br />

brechen Sie eine begonnene<br />

Aktion ab. Versehentlich<br />

vorgenommene<br />

Änderungen nehmen Sie<br />

über [Z] zurück. Alternativ<br />

nutzen Sie den Schalter<br />

Undo. Für ein Redo<br />

existiert bisher kein Tastenkürzel,<br />

jedoch eine<br />

Schaltfläche.<br />

Klicken Sie einen Weg<br />

oder ein Objekt einmal<br />

an, so aktivieren Sie es,<br />

etwa zum Verschieben<br />

README<br />

OpenStreetMap lebt<br />

von der Mitarbeit der<br />

User. Das setzt einen<br />

leichten Zugang voraus,<br />

führt aber so zu einer<br />

Dichte der Details, die<br />

kommerzielle Karten<br />

selten bieten. Der Online-Editor<br />

Potlatch2 eignet<br />

sich für schnelle Ergänzungen<br />

und kommt<br />

ohne zusätzliche Software<br />

auf dem lokalen<br />

Rechner aus.<br />

GLOSSAR<br />

POI: Point of Interest.<br />

Punkt mit besonderer<br />

Bedeutung, also beispielsweise<br />

Barrieren<br />

auf Wegen, Bauwerke,<br />

Geschäfte oder Briefkästen.<br />

www.linux-user.de<br />

11 | 12 81


KNOW-HOW<br />

Potlatch2<br />

2 Am linken Fensterrand<br />

zeigt Potlatch2<br />

die POI-Objekte an. Sie<br />

sind nach Kategorien<br />

sortiert und in Untergruppen<br />

abgelegt.<br />

oder Bearbeiten (Abbildung 1,<br />

vorherige Seite). Das funktioniert<br />

für Wege und daraus erzeugte<br />

Objekte oder für POI-Objekte.<br />

Mittels [Strg] und Klick wählen<br />

Sie mehrere Objekte aus.<br />

Vorhandene Wege versehen Sie<br />

schnell mit neuen Punkten. Dazu<br />

KATEGORIEN<br />

Klasse<br />

Beispiele<br />

Shopping Einkaufsmöglichkeit, Geschäft<br />

Food and Drink Restaurant, Imbiss, Kiosk<br />

Amenity<br />

Unterstand, Krankenhaus, Telefonzelle, Kindergarten<br />

Tourism<br />

Museum, archäologische Stätte<br />

Accommodation Hotel, Hostel, Bed and Breakfast, Campingplatz<br />

Transport Bahnhof, Flugplatz, Tankstelle, Parkplatz<br />

Water<br />

Wehr, Slip-Stelle, Hafen<br />

Barrieren Gatter, Poller, Lift, Mautstelle<br />

Power<br />

Energiegewinnung, Kraftwerk<br />

Buildings Gebäude unterschiedlicher Arten<br />

Landuse Friedhof, Feld, Wald<br />

Places<br />

Stadt, Dorf<br />

Sport and Leisure Sportplatz, Spielplatz<br />

Man-made von Menschen gemachte Landmarken<br />

INFO<br />

[1] Merkaartor: Karsten Günther, „Genau vermessen“, <strong>LinuxUser</strong> 01/ 2012, S. 54,<br />

http:// www. linux-community. de/ 24587<br />

[2] JOSM: http:// josm. openstreetmap. de<br />

[3] Potlatch2: http:// wiki. openstreetmap. org/ wiki/ DE:Potlatch_2<br />

[4] Deutschsprachige Hilfe zu Potlatch2: http:// www. universalsubtitles. org/ en/<br />

videos/ EtYE86uNySQq/ fr/ 125481/<br />

[5] Reit- und Wanderkarte: http:// www. wanderreitkarte. de<br />

[6] Key-Tags: http:// wiki. openstreetmap. org/ wiki/ DE:Map_Features<br />

[7] Tags für Windkraftanlagen: https:// wiki. openstreetmap. org/ wiki/<br />

DE:Key:generator:source<br />

[8] OSM-Wiki: http:// wiki. openstreetmap. org/ wiki/<br />

klicken Sie den Weg an einer beliebigen<br />

Stelle an. Anschließend<br />

erzeugen Sie einen Wegpunkt, in<br />

dem Sie [Umschalt] gedrückt halten<br />

und mit der Maus an die entsprechende<br />

Stelle klicken. Auf<br />

ähnliche Weise setzen Sie Wege<br />

fort. Nach dem Aktivieren des<br />

Endpunktes fügen Sie mit einfachen<br />

Mausklicks neue Punkte<br />

hinzu. Mit [Esc] oder der Eingabetaste<br />

beenden Sie diese Aktion.<br />

Eine neue Abzweigung des Weges<br />

entsteht, wenn Sie mit der<br />

Maus in Kombination mit [Umschalt]<br />

auf einen Punkt eines bereits<br />

vorhandenen Weges klicken.<br />

Das funktioniert für alle Objekte<br />

des Typs „Way“, also auch für<br />

Flüsse, Wälder (oder vielmehr deren<br />

Ränder) sowie Seen.<br />

Zu den wichtigen Aktionen<br />

zählt das Hinzufügen eines POI-<br />

Objektes, etwa neue Windkraftanlagen,<br />

die ein Betreiber erst kürzlich<br />

in einem Windpark errichtet<br />

hat. Ein anderes Beispiel wäre ein<br />

Unterstand für Radfahrer und<br />

Wanderer (Weather-Shelter). Um<br />

einen solchen Punkt hinzuzufügen,<br />

wählen Sie zunächst eine geeignete<br />

Auflösung zum Bearbeiten.<br />

Ein Klick auf eine leere Stelle<br />

in der Karte bewirkt, dass die<br />

Software die POI-Objekte am linken<br />

Rand anzeigt (Abbildung 2).<br />

Bisher gibt es für die Kategorien<br />

und Objekte keine deutschen<br />

Texte. Die Tabelle Kategorien<br />

hilft bei der Suche nach einem geeigneten<br />

Objekt. Haben Sie es gefunden,<br />

ziehen Sie es mit der<br />

Maus in die Karte, um es zu platzieren.<br />

Alternativ verschieben Sie<br />

ein bestehendes Objekt mit der<br />

Maus auf die richtige Position.<br />

Möchten Sie Objekte und Wege<br />

in den Karten mit zusätzlichen<br />

erklärenden Informationen versehen,<br />

verwenden Sie dazu „Tags“.<br />

Diese unterteilen sich in „Key-<br />

Tags“ (Typen der Objekte) und<br />

weitere Schlagworte, um eine<br />

noch feinere Unterscheidung vorzunehmen.<br />

Eine Liste der von<br />

Potlatch2 unterstützten Key-Tags<br />

finden Sie im Web [6].<br />

Nach dem Platzieren des POI-<br />

Objektes wechselt der Editor automatisch<br />

in den Tag-Modus.<br />

Beim Einfügen einer Windkraftanlage<br />

– verwenden Sie dafür<br />

Plant (Station) unter Power – fragt<br />

die Software durch den Moduswechsel<br />

ab, um welche Art von<br />

Anlage es sich denn handelt. Dabei<br />

unterstützt Potlatch2 zwei<br />

Modi: Der Modus Simple ist zunächst<br />

die richtige Wahl. Hier<br />

wählen Sie Energy source | Wind.<br />

Weitere Tags ergänzen Sie bei Bedarf<br />

– oder aus Vergnügen – über<br />

die Plus-Taste [7].<br />

Ganz ähnlich funktioniert das<br />

Hinzufügen eines Weather-Shelters,<br />

also eines Unterstands zum<br />

Schutz vor Unwettern. Unterstände<br />

jeglicher Art kennzeichnen<br />

Sie als Shelter. Im Bereich<br />

Amenity finden Sie den passenden<br />

Eintrag. Das Verfahren eignet<br />

sich auch für Straßen und Wege.<br />

Es hilft dem Nutzer der Karten<br />

oft, wenn Sie POI-Objekte und<br />

Wege über Tags möglichst genau<br />

beschreiben. So spielt es für Radfahrer<br />

eine Rolle, ob ein Weg befestigt<br />

ist oder nicht. Nutzen Sie<br />

das OSM-Wiki [8], um die geeigneten<br />

Tags zu finden. Nicht alle<br />

Angaben, die Sie hier machen –<br />

und nicht alle POI-Objekte, die<br />

Sie in die Karte eintragen – finden<br />

sich in den OpenStreetMap-<br />

Karten wieder. Oft zeigen nur<br />

Spezialkarten diese an.<br />

82 11 | 12<br />

www.linux-user.de


Potlatch2<br />

KNOW-HOW<br />

Um OpenStreetMap-Karten konsistent<br />

zu halten, sollten Sie einige<br />

Regeln für das Editieren einhalten.<br />

Linienartige Strukturen<br />

wie Straßen, Wege, Umrisse von<br />

Flächen erzeugen Sie als Ways.<br />

Solche Wege dürfen Sie auf jeder<br />

freien Fläche in der Karte mit einem<br />

einfachen Mausklick beginnen.<br />

Jeder weitere Mausklick fügt<br />

einen Stützpunkt hinzu, ein Doppelklick<br />

beendet die Linie.<br />

Falls Sie bemerken, dass Wege<br />

in der Karte vorhanden sind, die<br />

es in der Realität nicht mehr gibt,<br />

sollten Sie diese entfernen. Wählen<br />

Sie den Weg dazu durch Anklicken<br />

aus, und löschen Sie ihn<br />

mit der Tastenkombination<br />

[Umschalt]+[Entf]. Über [X] splitten<br />

Sie Wege bei Bedarf auf, nachdem<br />

Sie den gewünschten Verzweigungspunkt<br />

aktiviert haben.<br />

Auch einen parallelen Weg erzeugen<br />

Sie, indem Sie über [P] den<br />

ausgewählten duplizieren. Die Tabelle<br />

Tastenkombinationen zeigt<br />

die Möglichkeiten, das Programm<br />

auf flinke Weise zu bedienen.<br />

Gerade das Taggen von Wegen<br />

fällt Einsteigern nicht leicht.<br />

Wenn Sie aber den Editor der<br />

Reit- und Wanderkarte benutzen<br />

(Abbildung 3), klappt es schon<br />

besser. Er bietet gerade für die<br />

kleinen, schwer unterscheidbaren<br />

Wege gute Voreinstellungen, die<br />

das Taggen stark vereinfachen.<br />

Alle Veränderungen, die Sie mit<br />

dem Editor vornehmen, fasst dieser<br />

in einem Changeset zusammen.<br />

Diese Sets übermittelt das<br />

Programm an den Server von<br />

OpenStreetMap, sobald Sie das<br />

Projekt speichern oder den Editor<br />

beenden. In beiden Fällen bietet<br />

Potlatch 2 an, eine kurze Beschreibung<br />

der Änderungen –<br />

quasi eine Überschrift für den<br />

Changeset – zu formulieren, vorzugsweise<br />

auf Englisch. Dies hilft<br />

Bearbeitern, etwaige Fehler zu<br />

korrigieren, ist aber nicht unbedingt<br />

erforderlich.<br />

Potlatch 2 bietet mehr als das<br />

bloße Editieren des Kartenmaterials:<br />

Das Menü History führt zu<br />

einem Journal, in dem Sie die<br />

letzten Änderungen an der Karte<br />

sehen. Dort finden Sie auch viele<br />

durch automatische Bearbeitungen<br />

vorgenommene Änderungen.<br />

Mit dem Menü Export haben Sie<br />

eine Möglichkeit, den aktuellen<br />

Ausschnitt in unterschiedlicher<br />

Weise weiterzuexportieren. Der<br />

Dialog bietet die Möglichkeit, Daten<br />

als XML-Format oder als Grafikdatei<br />

in einem einstellbaren<br />

Maßstab zu speichern. Auf<br />

Wunsch erzeugt der Editor Code,<br />

um den Ausschnitt in eine<br />

HTML-Seite einzubetten.<br />

Mit den vier Menüs am oberen<br />

rechten Rand passen Sie die Kartendarstellung<br />

an Ihre Wünsche<br />

an: Unter Background legen Sie<br />

fest, ob und wie Potlatch 2 Hintergrundbilder<br />

anzeigt. In den<br />

meisten Fällen ist die Voreinstellung<br />

mit den Bing-Hintergrundbildern<br />

eine gute Wahl.<br />

Über Dim und Sharpen steuern<br />

Sie das Darstellen im Detail. Die<br />

3 Die Reit- und Wanderkarte erleichtert das Taggen kleiner Wege.<br />

letzte Option verbessert die Ansicht<br />

oft wesentlich. Das Menü<br />

Map Style ermöglicht es, zwischen<br />

verschiedenen Formen der Kartenelemente<br />

umzuschalten. Normalerweise<br />

ist das nicht erforderlich.<br />

Unter Options finden Sie einen<br />

Menüpunkt, der die Anzeige<br />

des Toolbar steuert. Normalerweise<br />

benötigen Sie diese kaum,<br />

sodass es oft Sinn ergibt, sie auszublenden.<br />

Fazit<br />

Potlatch 2 ist der ideale Editor für<br />

Einsteiger in OpenStreetMap. Für<br />

erfahrenere Anwender überwiegen<br />

allerdings die Einschränkungen:<br />

So braucht das Programm<br />

neben dem ungeliebten Flashplayer<br />

unbedingt eine schnelle<br />

Verbindung zum Internet. Lange<br />

Ladezeiten beim Verschieben erschweren<br />

das Bearbeiten größerer<br />

Bereiche. (agr) n<br />

TASTENKOMBINATIONEN<br />

Tastenkürzel Funktion<br />

Darstellung<br />

[D]<br />

Transparenz der Hintergrundbilder dimmen<br />

[T]<br />

Zwischen einfacher und erweiterter Tag-Eingabe<br />

umschalten<br />

[#] Überlappende Wege der Reihe nach aktivieren<br />

[Bild auf/ ab] Hinein- oder herauszoomen<br />

[Cursor]<br />

Kartenausschnitt verschieben<br />

Editieren<br />

[P]<br />

(parallelen) Weg durch Klonen erstellen<br />

[R]<br />

Tags des letzten Objektes auf das aktuelle<br />

übertragen<br />

[V]<br />

Auswahl des Weges invertieren<br />

[W]<br />

Wegpunkte aktivieren<br />

[X]<br />

Weg teilen<br />

[Y]<br />

Wegpunkte automatisch reduzieren<br />

[+] Tag hinzufügen<br />

[-] Aktuellen Punkt löschen<br />

[Entf]<br />

Aktuellen Punkt löschen<br />

[Backspace] Aktuellen Punkt löschen<br />

[Umschalt]+[Entf] Aktuellen Weg entfernen<br />

[Umschalt] + Aktuellen Weg entfernen<br />

[Backspace]<br />

[Z]<br />

Aktion rückgängig<br />

Allgemein<br />

[C]<br />

Changeset schließen<br />

[S]<br />

Speichern<br />

[Esc]<br />

Aktion abbrechen<br />

[Leertaste] Hintergrund justieren<br />

[H]<br />

History für aktuelles Objekt zeigen<br />

www.linux-user.de<br />

11 | 12 83


SERVICE<br />

IT-Profimarkt<br />

PROFI<br />

MARKT<br />

Sie fragen sich, wo Sie maßgeschneiderte<br />

Linux-Systeme sowie kompetente Ansprechpartner<br />

zu Open-Source-Themen<br />

finden? Der IT-Profimarkt weist Ihnen<br />

hier als zuverlässiges Nachschlagewerk<br />

den Weg. Die im Folgenden gelisteten<br />

Unternehmen beschäftigen Experten auf<br />

ihrem Gebiet und bieten hochwertige<br />

Produkte und Leistungen.<br />

Die exakten Angebote jeder Firma entnehmen<br />

Sie deren Homepage. Der ersten Orientierung<br />

dienen die Kategorien Hardware,<br />

Software, Seminaranbieter, Systemhaus,<br />

Netzwerk/TK sowie Schulung/Beratung.<br />

Der IT-Profimarkt-Eintrag ist ein<br />

Service von Linux-Magazin und <strong>LinuxUser</strong>.<br />

Online-Suche<br />

Besonders komfortabel finden Sie einen<br />

Linux-Anbieter in Ihrer Nähe online über<br />

die neue Umkreis-Suche unter:<br />

[http://www.it-profimarkt.de]<br />

Weitere Informationen:<br />

Medialinx AG<br />

Anzeigenabteilung<br />

Putzbrunner Str. 71<br />

D-81739 München<br />

Tel: +49 (0) 89 / 99 34 11-23<br />

Fax: +49 (0) 89 / 99 34 11-99<br />

E-Mail: anzeigen@linux-user.de<br />

IT-PROFIMARKT (LISTE SORTIERT NACH POSTLEITZAHL)<br />

Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de √ √ √ √<br />

imunixx GmbH UNIX consultants 01468 Moritzburg, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de √ √ √ √ √<br />

Heinlein Professional Linux Support GmbH 10119 Berlin, Schwedter Straße 8/ 9b 030-405051-0 www.heinlein-support.de √ √ √ √ √<br />

TUXMAN Computer 10369 Berlin, Anton-Saefkow-Platz 8 030-97609773 www.tuxman.de √ √ √ √ √<br />

Hostserver GmbH 10405 Berlin, Winsstraße 70 030-47375550 www.hostserver.de √<br />

Compaso GmbH 10439 Berlin, Driesener Strasse 23 030-3269330 www.compaso.de √ √ √ √ √<br />

elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-Allee 25 030-2345869-6 www.elegosoft.com √ √ √ √<br />

verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de √ √ √<br />

Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de √ √ √ √<br />

Sybuca GmbH 20459 Hamburg, Herrengraben 26 040-27863190 www.sybuca.de √ √ √ √ √<br />

iTechnology GmbH 22083 Hamburg, Osterbekstrasse 90b 49 (0) 40 / 69 64<br />

37 20<br />

www.itechnology.de √ √ √ √<br />

JEL Ingenieurbuero 23911 Einhaus, Hauptstr. 7 04541-8911-71 www.jeltimer.de √<br />

beitco - Behrens IT-Consulting 26197 Ahlhorn, Lessingstr. 27 04435-9537330-0 www.beitco.de √ √ √ √ √<br />

talicom GmbH 30169 Hannover, Calenberger Esplanade 3 0511-123599-0 www.talicom.de √ √ √ √ √<br />

primeLine Solutions GmbH 32549 Bad Oeynhausen, Dornenbreite 18a 0 57 31 / 86 94 0 www.primeline-solutions.de √ √ √ √<br />

teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net √ √ √ √ √<br />

MarcanT GmbH 33602 Bielefeld, Ravensberger Str. 10 G 0521-95945-0 www.marcant.net √ √ √ √ √ √<br />

Hostserver GmbH 35037 Marburg, Biegenstr. 20 06421-175175-0 www.hostserver.de √<br />

LINET Services GmbH 38122 Braunschweig, Am alten Bahnhof 4b 0531-180508-0 www.linet-services.de √ √ √ √ √ √<br />

OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 0211-239577-0 www.OpenIT.de √ √ √ √ √<br />

Linux-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de √ √ √ √ √<br />

Linuxhotel GmbH 45279 Essen, Antonienallee 1 0201-8536-600 www.linuxhotel.de √<br />

OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensource-training.de √<br />

Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 osnabrueck.intevation.de √ √ √ √<br />

Sigs Datacom GmbH 53842 Troisdorf, Lindlaustraße 2c 02241-2341-201 sigs-datacom.de √<br />

uib gmbh 55118 Mainz, Bonifaziusplatz 1b 06131-27561-0 www.uib.de √ √ √ √<br />

LISA GmbH 55411 Bingen, Elisenhöhe 47 06721-49960 www.lisa-gmbh.de √ √ √ √ √<br />

saveIP GmbH 64283 Darmstadt, Schleiermacherstr. 23 06151-666266 www.saveip.de √ √ √ √ √<br />

LAMARC EDV-Schulungen u. Beratung GmbH 65193 Wiesbaden, Sonnenberger Straße 14 0611-260023 www.lamarc.com √ √ √ √<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus 4 = Seminaranbieter 5 = Software 6 = Schulung/Beratung (S<br />

86 11 | 12<br />

www.linux-user.de


Online-Suche<br />

Linux New Media AG<br />

Anzeigenabteilung<br />

Putzbrunner Str. 71<br />

D-81739 München<br />

Tel.: +49 (0)89/99 34 11-23<br />

Fax: +49 (0)89/99 34 11-99<br />

IT-Profimarkt<br />

SERVICE<br />

IT-PROFIMARKT (FORTSETZUNG VON S. 88)<br />

Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

ORDIX AG 65205 Wiesbaden, Kreuzberger Ring 13 0611-77840-00 www.ordix.de √ √ √ √ √<br />

LinuxHaus Stuttgart 70565 Stuttgart, Hessenwiesenstrasse 10 0711-2851905 www.linuxhaus.de √ √ √ √ √<br />

Manfred Heubach EDV und Kommunikation 73728 Esslingen, Hindenburgstr. 47 0711-4904930 www.heubach-edv.de √ √ √ √<br />

Waldmann EDV Systeme + Service 74321 Bietigheim-Bissingen, Pleidelsheimer Str. 25 07142-21516 www.waldmann-edv.de √ √ √ √ √<br />

in-put Das Linux-Systemhaus 76133 Karlsruhe, Moltkestr. 49 0721-6803288-0 www.in-put.de √ √ √ √ √ √<br />

Bodenseo 78224 Singen, Pomeziastr. 9 07731-1476120 www.bodenseo.de √ √ √<br />

Linux Information Systems AG 81739 München, Putzbrunnerstr. 71 089-993412-0 www.linux-ag.com √ √ √ √ √<br />

LinuxLand International GmbH 81739 München, Putzbrunnerstr. 71 089-99341441 www.linuxland.de √ √ √ √ √ √<br />

Synergy Systems GmbH 81829 München, Konrad-Zuse-Platz 8 089-89080500 www.synergysystems.de √ √ √ √ √<br />

B1 Systems GmbH 85088 Vohburg, Osterfeldstrasse 7 08457-931096 www.b1-systems.de √ √ √ √ √<br />

ATIX AG 85716 Unterschleißheim, Einsteinstr. 10 089-4523538-0 www.atix.de √ √ √ √ √ √<br />

OSTC Open Source Training and Consulting GmbH 90425 Nürnberg, Waldemar-Klink-Str. 10 0911-3474544 www.ostc.de √ √ √ √ √ √<br />

Dipl.-Ing. Christoph Stockmayer GmbH 90571 Schwaig, Dreihöhenstr. 1 0911-505241 www.stockmayer.de √ √ √<br />

pascom - Netzwerktechnik GmbH & Co.KG 94469 Deggendorf, Berger Str. 42 0991-270060 www.pascom.net √ √ √ √ √<br />

fidu.de IT KG 95448 Bayreuth, Ritter-v.-Eitzenb.-Str. 19 09208-657638 www.linux-onlineshop.de √ √ √ √<br />

Computersysteme Gmeiner 95643 Tirschenreuth, Fischerhüttenweg 4 09631-7000-0 www.gmeiner.de √ √ √ √ √<br />

RealStuff Informatik AG CH-3007 Bern, Chutzenstrasse 24 0041-31-3824444 www.realstuff.ch √ √ √<br />

CATATEC CH-3013 Bern, Dammweg 43 0041-31-3302630 www.catatec.ch √ √ √<br />

Syscon Systemberatungs AG CH-8003 Zürich, Zweierstrasse 129 0041-44-4542010 www.syscon.ch √ √ √ √ √<br />

Würth Phoenix GmbH IT-39100 Bozen, Kravoglstraße 4 +39 0471 56 41 11 www.wuerth-phoenix.com √ √ √ √<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus 4 = Seminaranbieter 5 = Software 6 = Schulung/Beratung <br />

Hier finden Sie Linux-Profis<br />

in Ihrer Nähe!<br />

112<br />

Linux-Magazin 08/09 IT-Profimarkt<br />

Service<br />

PROFI<br />

MARKT<br />

Sie fragen sich, wo Sie maßgeschneiderte<br />

Linux-Systeme und kompetente<br />

Ansprechpartner zu Open-Source-Themen<br />

finden? Der IT-Profimarkt weist Ihnen<br />

als zuverlässiges Nachschlagewerk<br />

den Weg. Die hier gelisteten Unternehmen<br />

beschäftigen Experten auf ihrem<br />

Gebiet und bieten hochwertige Produkte<br />

und Leistungen.<br />

Hardware, Software, Seminaranbieter,<br />

Systemhaus, Netzwerk/TK und Schulung/Beratung.<br />

Der IT-Profimarkt-Eintrag<br />

ist ein Service von Linux-Magazin<br />

und <strong>LinuxUser</strong>.<br />

Informationen<br />

fordern Sie bitte an bei:<br />

Die exakten Angebote jeder Firma entnehmen<br />

Sie deren Homepage. Der ersten<br />

Orientierung dienen die Kategorien<br />

Besonders bequem finden Sie einen Linux-Anbieter<br />

in Ihrer Nähe über die neue<br />

Online-Umkreis-Suche unter: [http://<br />

www.linux-magazin.de/IT-Profimarkt]<br />

IT-Profimarkt – Liste sortiert nach Postleitzahl<br />

Firma Anschrift Telefon Web 1 2 3 4 5 6<br />

E-Mail: anzeigen@linux-magazin.de<br />

Schlittermann internet & unix support 01099 Dresden, Tannenstr. 2 0351-802998-1 www.schlittermann.de 3 3 3 3<br />

imunixx GmbH UNIX consultants 01468 Moritzburg / bei Dresden, Heinrich-Heine-Str. 4 0351-83975-0 www.imunixx.de 3 3 3 3 3<br />

future Training & Consulting GmbH Leipzig 04315 Leipzig, Kohlgartenstraße 15 0341-6804100 www.futuretrainings.com 3<br />

LR IT-Systeme, Jörg Leuschner u.<br />

1 = Hardware 2 = Netzwerk/TK 3 = Systemhaus<br />

4= Fachliteratur 5 = Software 6 = Beratung<br />

Mario Reinhöfer GbR 04626 Schmö ln, Kirchplatz 3 034491-567813 www.lr-itsysteme.de 3 3 3 3 3<br />

future Training & Consulting GmbH Ha le 06 16 Ha le (Saale), Fiete-Schulze-Str. 13 0345-56418-20 www.futuretrainings.com 3<br />

TUXMAN Linux Fan-Shop 10367 Berlin, Mö lendor fstr. 44 030-97609773 www.tuxman.de 3 3 3 3 3<br />

Xtops.DE, Werner Heuser 13189 Berlin, Granitzstr. 26 030-3495386 www.xtops.de 3 3<br />

elego Software Solutions GmbH 13355 Berlin, Gustav-Meyer-A lee 25 030-2345869-6 www.elegosoft.com 3 3 3 3<br />

future Training & Consulting GmbH Berlin 13629 Berlin, Wernerwerkdamm 5 030-34358899 www.futuretrainings.com 3<br />

verion GmbH 16244 Altenhof, Unter den Buchen 22 e 033363-4610-0 www.verion.de 3 3 3<br />

i.based: Systemhaus GmbH & Co.KG 18439 Stralsund, Langenstr. 38 03831-28944-0 www.ibased.de 3 3 3 3 3<br />

Logic Way GmbH 19061 Schwerin, Hagenower Str. 73 0385-39934-48 www.logicway.de 3 3 3 3<br />

Sybuca GmbH 20459 Hamburg, Herrengraben 25 040-27863190 www.sybuca.de 3 3 3 3 3<br />

i Tec hn o l og y Gmb H c/ o C :1 So lu t i on s Gm bH 220 83 Ham b urg , O sterb e kstr. 9 0 c 040-52388-0 www.itechnology.de 3 3 3 3<br />

UDS-Linux - Schulung, Beratung, Entwicklung 22087 Hamburg, Lübecker Str. 1 040-45017123 www.uds-linux.de 3 3 3 3 3 3<br />

Comparat Software-Entwicklungs- GmbH 23558 Lübeck, Prießstr. 16 0451-479566-0 www.comparat.de 3 3<br />

future Training & Consulting GmbH Wismar 23966 Wismar, Lübsche Straße 22 03841-222851 www.futuretrainings.com 3<br />

Print, im Marktteil<br />

Dr. Plöger & Ko legen secom consulting<br />

GmbH & Co. KG 24105 Kiel, Waitzstr. 3 0431-66849700 www.secom-consulting.de 3 3 3 3 3<br />

MaLiWi IT 28309 Bremen, Bippenstr. 13 0421-1752122 www.maliwi.it 3 3 3 3 3<br />

talicom GmbH 30169 Hannover, Calenberger Esplanade 3 05 1-123599-0 www.talicom.de 3 3 3 3<br />

Servicebüro des grafischen Gewerbes 31789 Hameln, Talstraße 61 05151-774800 www.karsten-mue ler.org 3<br />

teuto.net Netzdienste GmbH 33602 Bielefeld, Niedenstr. 26 0521-96686-0 www.teuto.net 3 3 3 3 3<br />

MARCANT INTERNET-SERVICES GmbH 33602 Bielefeld, Ravensberger Str. 10 G 0521-95945-0 www.marcant.net 3 3 3 3 3 3<br />

OpenIT GmbH 40599 Düsseldorf, In der Steele 33a-41 02 1-239577-0 www.OpenIT.de 3 3 3 3 3<br />

bee Baastrup EDV-Entwicklung GmbH 44135 Dortmund, Schwanenwa l 40 0231- 587 19- 0 stat ic. be e.de/L in ux N M 3 3 3 3 3<br />

Dennis Grosche EDV Dienstleistungen 44536 Lünen, Technologiezentrum Lünen,<br />

Linux-Systeme GmbH 45277 Essen, Langenbergerstr. 179 0201-298830 www.linux-systeme.de 3 3 3 3 3<br />

Linuxhotel GmbH 45279 Essen, Antoniena lee 1 0201-8536-600 www.linuxhotel.de 3<br />

Am Brambusch 24 0231-1768259 www.grosche.net 3 3 3 3 3<br />

Herste l 45888 Gelsenkirchen, Wildenbruchstr. 18 02098503020 www.herste l.info 3<br />

OpenSource Training Ralf Spenneberg 48565 Steinfurt, Am Bahnhof 3-5 02552-638755 www.opensource-training.de 3<br />

Intevation GmbH 49074 Osnabrück, Neuer Graben 17 0541-33508-30 osnabrueck.intevation.de 3 3 3 3<br />

IT-Profimarkt listet ausschließlich Unternehmen, die Leistungen rund um Linux bieten. A le Angaben ohne Gewähr. (S. 116)<br />

Online<br />

PROFI<br />

MARKT<br />

www.it-profimarkt.de<br />

Jetzt neu!


SERVICE<br />

11 | 12<br />

88<br />

Usergroups<br />

Aachen<br />

AachenerLinux-Usergroup<br />

(ALUG)<br />

http://www.alug.de<br />

Aachen<br />

Computer-ClubanderRWTH<br />

Aachene.V.(CCAC)<br />

http://www.ccac.rwth-aachen.<br />

de<br />

Ahaus<br />

Linux-UsergroupAhaus(LUGAH)<br />

http://www.lugah.de<br />

Ahlen/Westfalen<br />

LUGAhlen<br />

http://linuxahlen.li.funpic.de/<br />

Ahrtal<br />

Linux-UsergroupAhrtal(Ahrlug)<br />

http://www.ahrlug.de<br />

Aichach<br />

Linux-UsergroupAichach<br />

http://www.lug-aichach.de<br />

Allershausen<br />

Linux-UsergroupAmpertal<br />

(LUGA)<br />

http://www.luga.net<br />

Altdorf/<br />

Nürnberg<br />

GNU/<strong>LinuxUser</strong>GroupAltdorf<br />

(GLUGA)<br />

http://www.gluga.de<br />

Amberg<br />

Open-Source-Stammtisch<br />

Amberg(amTuxTisch)<br />

http://www.amtuxtisch.de/<br />

Ansbach<br />

Linux-UsergroupAnsbach<br />

(LUGAN)<br />

http://www.lug-an.de<br />

Aschaffenburg<br />

Linux-UsergroupAschaffenburg<br />

(LUGAB)<br />

http://www.lugab.de<br />

Augsburg<br />

Linux-UsergroupAugsburg<br />

(LUGA)<br />

http://www.luga.de<br />

Backnang<br />

Linux-UsergroupBacknang<br />

http://www.lug-bk.de<br />

BadBrückenau<br />

Linux-UsergroupBadBrückenau<br />

BrunoZehe@web.de<br />

BadDriburg<br />

Linux-UsergroupBadDriburg<br />

http://www.bdpeng.de.vu<br />

BadHersfeld<br />

Linux-UsergroupHersfeld<br />

http://www.lugh.de<br />

BadWildungen<br />

Linux-UsergroupBadWildungen<br />

http://linuxheaven.cjb.net<br />

Bamberg<br />

Linux-UsergroupBamberg<br />

(GLUGBA)<br />

http://www.lug-bamberg.de<br />

Basel(CH)<br />

Linux-UsergroupBasel(BLUG)<br />

http://www.blug.ch<br />

Bautzen<br />

Linux-UsergroupBautzen<br />

http://www.lug-bz.de<br />

Bayreuth<br />

Linux-UsergroupBayreuth<br />

http://www.linux-bayreuth.de<br />

Bergisch<br />

Gladbach<br />

BergischeLinux-undUnix-<br />

Enthusiastenu.-Freunde<br />

(BLUEFROGS)<br />

http://www.bluefrogs.de<br />

Berlin<br />

Linux-UsergroupBerlin(BeLUG)<br />

http://www.belug.de<br />

Berlin<br />

UbuntuBerlin<br />

http://www.ubuntu-berlin.de<br />

Berlin/<br />

Friedrichshain-<br />

Kreuzberg<br />

LinuxWorks!<br />

http://friedrichshain.homelinux.<br />

org<br />

Berlin/<br />

Lichtenrade<br />

Linux-UsergroupLichtenrade<br />

(LUGL)<br />

http://www.lugl.net<br />

Berlin/<br />

Marzahn-<br />

Hellersdorf<br />

Open-Source-Fan-Group<br />

Marzahn-Hellersdorf(OSFanG)<br />

http://www.osfang.de<br />

Bern(CH)<br />

Linux-UsergroupBern(LUGBE)<br />

http://www.lugbe.ch<br />

Biel/Bienne/<br />

Seeland(CH)<br />

Linux-UsergroupSeeland<br />

(LugSeeland)<br />

http://www.lugseeland.ch<br />

Bielefeld<br />

<strong>LinuxUser</strong>groupOstwestfalen-<br />

Lippe<br />

http://lug-owl.de/Lokales/<br />

Bielefeld/<br />

Bitburg-Prüm<br />

Linux-UsergruppeSchneifeltux<br />

http://www.schneifeltux.de<br />

Bocholt<br />

Linux-UsergroupBocholt(BLUG)<br />

http://www.blug.de<br />

Bochum<br />

Linux-UsergroupBochum<br />

(BGLUG)<br />

http://www.bglug.de<br />

Bonn<br />

BonnerLinux-Usergroup<br />

(BOLUG)<br />

http://www.bonn.linux.de/<br />

Bonn<br />

Linux/UnixUsergroupSankt<br />

Augustin(LUUSA)<br />

http://www.luusa.org<br />

Bozen(Südtirol)<br />

Linux-UsergroupBozen(LUGBZ)<br />

http://www.lugbz.org<br />

Brandenburg<br />

Brandenburger<strong>LinuxUser</strong><br />

Groupe.V.(BraLUG)<br />

http://www.bralug.de<br />

Bremen<br />

Linux-StammtischBremen<br />

http://lug-bremen.info<br />

Bremerhaven<br />

Linux-StammtischBremerhaven<br />

http://www.lug-bhv.de/<br />

Bretten<br />

BrettenerLinux-Usergroup<br />

(BRELUG)<br />

http://www.brelug.de<br />

Bruchsal<br />

Linux-UsergroupBruchsal<br />

http://www.lug-bruchsal.de<br />

Buchholz<br />

Nordheide<br />

Linux-UsergroupBuchholz<br />

Nordheide<br />

http://www.lug-buchholznordheide.de<br />

Burghausen<br />

Linux-UsergroupBurghausen<br />

http://www.lug-burghausen.org<br />

Böblingen/<br />

Sindelfingen<br />

Linux-UsergroupBöblingen/<br />

Sindelfingen(LUGBB)<br />

http://www.lugbb.org<br />

Celle<br />

LUGCelle<br />

http://www.lug-celle.de<br />

Cham<br />

Linux-UsergroupOberpfalz<br />

(LUGO)<br />

http://lugo.signum-media.de<br />

Chemnitz<br />

Linux-UsergroupChemnitz<br />

(CLUG)<br />

http://www.clug.de<br />

Coesfeld<br />

Linux-UsergroupCoesfeld<br />

http://www.lug-coesfeld.de<br />

Cottbus<br />

CottbuserLinux-Usergroup<br />

(COLUG)<br />

http://www.colug.de/<br />

Damme<br />

UsersofLinuxDamme(ULD)<br />

http://www.damme.de<br />

Darmstadt<br />

<strong>LinuxUser</strong>GroupDarmstadt<br />

(DaLUG)<br />

http://www.dalug.org<br />

Datteln<br />

Linux-UsergroupDatteln(LUGD)<br />

http://www.lug-datteln.de<br />

Delitzsch<br />

(Sachsen)<br />

Linux-UsergroupDelitzsch<br />

http://www.lug-delitzsch.de<br />

Detmold<br />

Linux-UsergroupOstwestfalen-<br />

Lippe(LUGOWL)<br />

http://lug-owl.de/Lokales/<br />

Detmold/<br />

Dorfen<br />

Linux-UsergroupDorfen(LUGD)<br />

http://www.dolug.de<br />

Dormagen<br />

PinguinPower(PP)<br />

http://www.dorlug.de<br />

Dortmund<br />

Linux-UsergroupDortmund<br />

(LUGRUDO)<br />

http://www.outerspace.de/<br />

lugrudo/<br />

LINUX.USERGROUPS<br />

ImFolgendendieListederunsbekanntenLinux-UsergroupsimdeutschsprachigenRauminKurzfassung.ÄnderungenundUpdatesbittederRedaktion(usergroups@linuxnewmedia.de)mitteilen(Name,Beschreibung,<br />

Treffpunkt,Adresse,Ansprechpartner,Homepage,E-Mail,Telefon,Fax,Mitgliederzahl...).<br />

Dresden<br />

Linux-UsergroupDresden<br />

http://lug-dd.schlittermann.de/<br />

Duisburg<br />

DuisburgerLinux-Usergroup<br />

(DULUG)<br />

http://www.dulug.de<br />

Duisburg<br />

Linux-UsergroupDuisburg<br />

(LUG-DUI)<br />

http://lugdui.ihg.uni-duisburg.<br />

de<br />

Düsseldorf<br />

Linux-UsergroupDüsseldorf<br />

(DLUG)<br />

http://www.dlug.de<br />

Ebstorf<br />

EbstorferLinux-Stammtisch<br />

(ELST)<br />

support@konqi-werkstatt.de<br />

Eggenfelden<br />

EggenfeldenerLinux-Usergroup<br />

(EgLUG)<br />

http://www.lug-eggenfelden.org<br />

Eichsfeld<br />

Eichsfelder<strong>LinuxUser</strong>Group<br />

(EICLUG)<br />

http://linux.eichsfeld.net<br />

Eisenach<br />

Linux-UsergroupEisenach<br />

http://lug-eisenach.de/<br />

Elmshorn<br />

ComputerclubElmshorne.V.<br />

http://www.cceev.de/<br />

Erding<br />

Linux-UsergroupErding<br />

http://www.lug-erding.de<br />

Erkelenz<br />

Linux-UsergroupErkelenz<br />

http://www.lug-erkelenz.de<br />

Erlangen<br />

ErlangerLinux-Usergroup<br />

(ERLUG)<br />

http://www.erlug.de<br />

Essen<br />

EssenerLinux-Freunde(ELiF)<br />

http://www.linuxstammtisch.de<br />

Essen<br />

EssenerLinux-Stammtisch<br />

(ELiSta)<br />

http://members.tripod.de/elista<br />

Essen<br />

EssenerLinux-Usergroup<br />

(ELUG)<br />

http://www.elug.de<br />

Essen<br />

PerlMongersimRuhrgebiet<br />

(Ruhr.pm)<br />

http://ruhr.pm.org/<br />

Esslingen<br />

Linux-UsergroupEsslingen<br />

http://rhlx01.rz.fht-esslingen.<br />

de/lug/<br />

Ettlingen/Albtal<br />

LUGAlbtal<br />

http://www.lug-albtal.de<br />

Fischbachtal<br />

<strong>LinuxUser</strong>groupFischbachtal<br />

(FIBALUG)<br />

http://fibalug.de<br />

Flensburg<br />

Linux-UsergroupFlensburg<br />

(LUGFL)<br />

http://www.lugfl.de<br />

Frammersbach<br />

FrammersbacherLUG<br />

kke@gmx.net<br />

Frankfurt<br />

Linux-UsergroupFrankfurt<br />

http://www.lugfrankfurt.de<br />

Freiburg<br />

FreiburgerLinux-Usergroup<br />

(FLUG)<br />

http://www.freiburg.linux.de<br />

Freiburg<br />

LUGderStudentensiedlung<br />

Freiburg(StuSieLUG)<br />

http://linux.studentensiedlung.<br />

de<br />

Freising<br />

Linux-UsergroupFreising<br />

(LUGFS)<br />

http://www.lug-fs.de<br />

Friedrichshafen<br />

Yetanother<strong>LinuxUser</strong>Group<br />

(YALUG)<br />

http://yalug.de<br />

Fulda<br />

Linux-UsergroupFulda<br />

http://lug.rhoen.de<br />

Fürstenfeldbruck<br />

LUGdesBürgernetzesLandkreis<br />

Fürstenfeldbruck(LUGFFB)<br />

http://lug.ffb.org/<br />

Fürth<br />

FürtherLinux-Usergroup(FLUG)<br />

http://www.fen-net.de/flug<br />

Gießen<br />

Linux-UsergroupGießen(LUGG)<br />

http://www.lugg.de<br />

Gießen<br />

LUGderLiebig-SchuleGießen<br />

(LioLUG)<br />

http://liolug.liebigschulegiessen.de/<br />

Grafing<br />

Linux-UsergroupGrafing(LUGG)<br />

http://www.lug-grafing.org<br />

Greifswald<br />

Linux-UsergroupGreifswald<br />

http://www.lug-hgw.de/<br />

Groß-Gerau<br />

Linux-UsergroupGroß-Gerau<br />

(LUGGG)<br />

http://www.luggg.de<br />

Groß-Zimmern<br />

Linux-UsergroupGroß-Zimmern<br />

(GROZILUG)<br />

http://www.grozilug.de<br />

Gummersbach<br />

GummersbacherLinux-<br />

Usergroup(GULUG)<br />

http://www.gulug.de<br />

Guntersblum<br />

GuntersblumerLinux-Usergroup<br />

(GLUG)<br />

http://www.ghks.de/glug/<br />

Gunzenhausen<br />

GunzenhauserLinux-Usergroup<br />

(LUGGUU)<br />

http://www.gunnet.de/linux<br />

Gütersloh<br />

Linux-UsergroupOstwestfalen-<br />

Lippe(LUGOWL)<br />

http://lug-owl.de/Lokales/<br />

Guetersloh/<br />

Göppingen<br />

Linux-UsergroupFilstal<br />

http://lug.fto.de/<br />

Göttingen<br />

Göttinger<strong>LinuxUser</strong>Group<br />

(GOELUG)<br />

http://www.goelug.de/<br />

Göttingen<br />

GöttingerUnix/Linux-<br />

Anwendergruppe(GULAG)<br />

http://gulag.de<br />

Haiger<br />

Linux-UsergroupLahn-Dill-Kreis<br />

(LDK/LUG)<br />

http://www.ldknet.org/lug/<br />

Halberstadt<br />

Linux-UsergroupHalberstadt<br />

http://www.lug-hbs.de<br />

Halle<br />

HallescheLinux-Usergroup<br />

(HALIX)<br />

http://www.halix.info<br />

Hamburg<br />

LUG-BalistaHamburge.V.(LUG-<br />

Balista)<br />

http://www.lug-balista.de<br />

Hamburg<br />

Unix-GruppederHamburger<br />

MHe.V.<br />

http://www.hmh-ev.de<br />

Hameln<br />

Linux-UsergroupWeserbergland<br />

(LBW)<br />

http://tux.hm<br />

Hanau<br />

HanauerLinux-Usergroup<br />

(HULUG)<br />

http://www.hulug.de/<br />

Hannover<br />

Linux-UsergroupHannover<br />

(LUGH)<br />

http://lug-hannover.de<br />

Hatten<br />

Linux-UsergroupOldenburg-<br />

Land(LUGOLand)<br />

http://www.lugoland.de<br />

Hattingen<br />

HattingerLinux-Usergroup<br />

(HatLug)<br />

http://www.hatlug.de<br />

Hegau<br />

Hegau<strong>LinuxUser</strong>Gruppe<br />

(HegauLUG)<br />

http://www.linuxag.hegau.org<br />

Heidenheim<br />

<strong>LinuxUser</strong>GroupHeidenheim<br />

http://www.lug-hdh.de<br />

Heilbad<br />

Heiligenstadt<br />

Linux-StammtischLinuxNode<br />

Eichsfeld<br />

http://linuxnode.eichsfeld.net<br />

S. 90


JETZT<br />

MiT dVd!<br />

MAGAZIN<br />

SondErAkTion<br />

Testen Sie jetzt<br />

3 Ausgaben<br />

für 3 Euro!<br />

Jetzt schnell bestellen:<br />

• Telefon 07131 / 2707 274<br />

• Fax 07131 / 2707 78 601<br />

• E-Mail: abo@linux-magazin.de<br />

• Web: www.linux-magazin.de/probeabo<br />

Mit großem Gewinnspiel unter:<br />

www.linux-magazin.de/probeabo<br />

GEwinnEn SiE...<br />

EinES Von ZEHn „iVori“ SMArTpHonE GAdGETS<br />

Einsendeschluss ist der 15.12.2012<br />

gesponsert von:<br />

.de


SERVICE<br />

11 | 12<br />

90 www.linux-user.de<br />

Usergroups<br />

Moers<br />

Linux-UsertreffeninMoers<br />

opers@syrinx1.du.gtn.com<br />

Mosbach<br />

Linux-UsergroupMosbach<br />

(LUGMOS)<br />

http://linuxwiki.de/LugMosbach<br />

München<br />

BSDSocialEventMünchen(BSE)<br />

http://bse.42.org<br />

München<br />

BSD-UsergroupinMünchen<br />

(BIM)<br />

http://berklix.org/bim/<br />

München<br />

MünchnerGentoo<strong>LinuxUser</strong><br />

Group(MGLUG)<br />

http://www.mglug.de<br />

München<br />

MünchnerLinux-Usergroup<br />

(MUC-LUG)<br />

http://www.muc-lug.de<br />

MünchenSüd-<br />

Ost/Ottobrunn<br />

Linux-UsergroupOttobrunn<br />

(LUGOTT)<br />

http://www.lug-ottobrunn.de<br />

MünchenSüd-<br />

West<br />

Linux-UsergroupWürmtal<br />

(WLUG)<br />

http://wlug.acos.net<br />

Münster<br />

Linux-StammtischMünster<br />

(MueSLI)<br />

http://www.mueslihq.de<br />

Mönchengladbach<br />

Linux-Usergroup<br />

Mönchengladbach(LUGMOE)<br />

http://www.lugmoe.de<br />

Mörfelden-<br />

Walldorf<br />

<strong>LinuxUser</strong>groupMörfelden-<br />

Walldorf(MöWa-LUG)<br />

http://www.moewa-lug.de<br />

Naumburg<br />

<strong>LinuxUser</strong>GroupNaumburg<br />

(LUGNMB)<br />

http://lugnmb.dyndns.org<br />

Neubrandenburg<br />

Linux-Usergroup<br />

Neubrandenburge.V.(LUG-NB)<br />

http://www.lug-nb.de<br />

Neuburgander<br />

Donau<br />

LUGNeuburganderDonau<br />

(LUGND)<br />

http://www.lug-nd.de<br />

Neuenburg<br />

Linux-UsergroupNeuenburg<br />

http://w3-net.ri-web.de/cont/<br />

lugnbg/index.php<br />

Nieder-Olm<br />

RheinhessenerLinux-<br />

Gemeinschaft<br />

info@kkcs.de<br />

Niederrhein<br />

NiederrheinischeLinuxUnix<br />

UserGroup(NLUUG)<br />

http://www.nluug.de<br />

Nienburg<br />

Linux-UsergroupNienburg<br />

(NILUG)<br />

http://ni-linux.de<br />

Norderstedt<br />

Linux-UsergroupNorderstedt<br />

(LUGN)<br />

http://www.lug-norderstedt.de<br />

Nordheide<br />

LUUGNordheide<br />

http://www.luug-nordheide.de<br />

Nußdorf/Aiging<br />

Linux-UsergroupTraunstein<br />

(LUGTra)<br />

http://www.lug-ts.de<br />

Nürnberg<br />

Linux-UsergroupNürnberg<br />

(LUGNü)<br />

http://www.align.de/<br />

Oberhausen<br />

Linux-UsergroupOberhausen<br />

(LUGOR)<br />

http://www.linuxob.de<br />

Oberkirchen<br />

LUGRenchtal-Tuxe<br />

http://tuxe.renchtal.com<br />

Oberpfalz<br />

Linux-UsergroupOberpfalz<br />

http://www.cham.baynet.<br />

de/lugo/<br />

Oberwallis(CH)<br />

Linux-UsergroupOberwallis<br />

(LUGO)<br />

http://www.lugo.ch<br />

Offenburg<br />

Linux-UsergroupOffenburg<br />

(LUGOG)<br />

http://www.lugog.de<br />

Heilbronn<br />

Linux-UsergroupHeilbronn<br />

(LUUGHN)<br />

http://www.luug-hn.org<br />

Herford<br />

GNU/<strong>LinuxUser</strong>groupHerford<br />

(GLUGHF)<br />

http://lug-owl.de/LugWiki/<br />

GLUGHF<br />

Herrenberg<br />

Linux-StammtischimGäu<br />

(LiStiG)<br />

http://www.listig.org<br />

Hesel<br />

CCOstfriesland-Linux-Gruppe<br />

http://www.cco-online.de/linux<br />

Hildesheim<br />

HildesheimerLinux-Usergroup<br />

(NG)(HiLUG-NG)<br />

http://www.hilug-ng.de<br />

Holzminden<br />

ComputerclubHochsollinge.V.<br />

http://www.cch-holzminden.de/<br />

Horrheim<br />

Linux-UsergroupVaihingen/<br />

Enz(VLUG)<br />

http://www.vlug.de<br />

Hoyerswerda<br />

Linux-UsergroupHoyerswerda<br />

(HOYLUG)<br />

http://linux.griebel-web.eu/<br />

Idstein(Taunus)<br />

Linux-UsergroupTaunus(LUG-<br />

Taunus)<br />

http://www.lug-taunus.org<br />

Ingolstadt<br />

Linux-UsergroupIngolstadte.V.<br />

http://www.lug-in.de<br />

Iserlohn<br />

Linux-UsergroupIserlohn<br />

http://area51.fh-swf.de/<br />

Itzehoe<br />

ComputerClubItzehoee.V.<br />

(CCIZ)<br />

http://www.cc-itzehoe.de<br />

Jena<br />

Linux-UsergroupJena(LUG<br />

Jena)<br />

http://www.lug-jena.de<br />

Jever<br />

FriesischeLinux-Usergroup<br />

(FriLUG)<br />

http://www.frilug.de<br />

Kaarst<br />

KaarsterLinux-Usergroup<br />

(KAALUG)<br />

http://www.kaalug.de<br />

Kaiserslautern<br />

Linux-UsergroupKaiserslautern<br />

(LUG-KL)<br />

http://www.lug-kl.de<br />

Kaiserslautern<br />

UniversitätKaiserslautern<br />

(UNIX-AG)<br />

http://www.unix-ag.uni-kl.<br />

de/~linux/<br />

Karlsruhe<br />

KarlsruherLinux-Usergroup<br />

(KaLUG)<br />

http://www.karlsruhe.linux.de<br />

Kassel<br />

Linux-UsergroupKassel(LUGK)<br />

http://www.lug-kassel.de<br />

Kiel<br />

LUGKiel<br />

http://www.lug-kiel.de<br />

Kierspe-<br />

Meinerzhagen<br />

Linux-UsergroupMärkischer<br />

Kreis(LUGMK)<br />

linuxusergroupmk@netscape.<br />

net<br />

Koblenz<br />

<strong>LinuxUser</strong>GroupMayen-<br />

Koblenz(LUG-MYK)<br />

http://www.lug-myk.de/<br />

Koblenz<br />

LUGderUniversitätKoblenz<br />

http://www.colix.org<br />

Konstanz<br />

Linux-UsergroupBodensee<br />

(LLUGB)<br />

http://llugb.amsee.de/<br />

Konz<br />

Linux-UsergroupKonz(TRILUG)<br />

http://www.trilug.fh-trier.de<br />

Krefeld<br />

Linux-UsergroupKrefeld<br />

(LUG-KR)<br />

http://www.lug-kr.de<br />

Kreuzlingen(CH)<br />

Linux-UsergroupKreuzlingen<br />

http://linuxtreff.ch/<br />

Kronach<br />

Linux-UsergroupKronach<br />

http://www.lug-kronach.de<br />

Köln<br />

KölnerGentoo<strong>LinuxUser</strong>Group<br />

(KGLUG)<br />

http://www.kglug.de<br />

Köln<br />

Linux-WorkshopKöln(LiWoK)<br />

http://www.uni-koeln.de/<br />

themen/linux/<br />

Landau<br />

Linux-UsergroupLandau(LUG-<br />

Landau)<br />

http://www.lug-ld.de<br />

Landshut<br />

Linux-UsergroupLandshut<br />

http://www.lalug.de<br />

Langen(Hessen)<br />

/Dreieich/<br />

Egelsbach<br />

LangenerLinux-Usergroup<br />

(LaLUG)<br />

http://www.lalug.net<br />

Langenfeld<br />

LangenfelderLinux-Usergroup<br />

(LANLUG)<br />

http://www.lanlug.org<br />

Laufander<br />

Pegnitz<br />

Linux-UsergroupLaufa.d.<br />

Pegnitz(LUGLAUF)<br />

http://www.lug-lauf.de<br />

Leipzig<br />

LeipzigerLinux-Stammtisch<br />

http://www.gaos.org/lug-l/<br />

Lenningen<br />

<strong>LinuxUser</strong>GroupLenningen<br />

http://linuxusergrouplenningen.<br />

de.vu<br />

Lindenberg<br />

Linux-UsergroupLindau(LugLi)<br />

http://www.allgaeu.org/lugli<br />

Lingen/Rheine<br />

Linux-UsergroupSpelle<br />

http://www.spelle.net/lugs<br />

Linz(A)<br />

Linux-UsergroupLinz(LUGL)<br />

http://www.lugl.at<br />

Lippstadt/Soest<br />

/Erwitte<br />

<strong>LinuxUser</strong>groupErwitte<br />

http://www.lug-erwitte.de<br />

Lohr<br />

Linux-UsergroupLohr(LUG<br />

Lohr)<br />

http://lug.lohr-am-main.de<br />

Loitsche<br />

Linux-StammtischLoitsche<br />

(LSL)<br />

http://www.t-online.de/home/<br />

mumumu/<br />

Ludwigsburg<br />

Linux-UsergroupRaum<br />

Ludwigsburg(LuLUG)<br />

http://www.lulug.de<br />

Luxembourg<br />

LinuxLuxembourg(LiLux)<br />

http://www.linux.lu<br />

Lübeck<br />

Linux-UsergroupLübeck<br />

http://www.linuxuser-luebeck.<br />

de<br />

Lüneburg<br />

Linux-UsergroupLüneburg<br />

(LueneLUG)<br />

http://luene-lug.org<br />

Lünen<br />

LUGLünen<br />

http://www.lug-luenen.de<br />

Lörrach<br />

Linux-UsergroupLörrach<br />

(LUGLOE)<br />

http://www.lug-loerrach.de<br />

Lörrach<br />

Lörracher<strong>LinuxUser</strong>group<br />

(LÖLUG)<br />

http://www.loelug.de<br />

Magdeburg<br />

Magdeburger<strong>LinuxUser</strong>Group<br />

e.V.(MDLUG)<br />

http://www.mdlug.de<br />

Marburg<br />

MarburgerLinux-Usergroup<br />

(MRLUG)<br />

http://www.mr-lug.de<br />

Marktredwitz<br />

Linux-GruppeMarktredwitz<br />

ststroes@tirnet.de<br />

Marl<br />

Linux-UsergroupMarl<br />

http://www.lug-marl.de<br />

Memmingen<br />

Linux-UsergroupAllgäu(LUGAL)<br />

http://www.lugal.de<br />

Meppen<br />

Linux-UsergroupMeppen<br />

http://www.lug-meppen.de<br />

Metelen<br />

Linux-StammtischMetelen<br />

http://www.linuxdu.de<br />

Mitterteich<br />

Linux-UsergroupMitterteich<br />

http://www.linux-mitterteich.de<br />

Oldenburg<br />

Linux-UsergroupOldenburg<br />

(LUGO)<br />

http://oldenburg.linux.de<br />

Olpe<br />

Linux-UsergroupOlpe<br />

http://www.lug-raum-olpe.de.vu<br />

Osnabrück<br />

Linux-UsergroupOsnabrück<br />

http://www.lugo.de<br />

Ostwestfalen-<br />

Lippe<br />

Linux-UsergroupOstwestfalen-<br />

Lippe(LUG-OWL)<br />

http://www.lug-owl.de<br />

Paderborn<br />

Linux-UsergroupOstwestfalen-<br />

Lippe(LUG-OWL)<br />

http://lug-owl.de/Lokales/<br />

Paderborn/<br />

Passau<br />

Linux-/Unix-UsergroupPassau<br />

(LUGP)<br />

http://www.fmi.uni-passau.<br />

de/~lug/<br />

Peine<br />

Linux-UsergroupPeine(LUGP)<br />

http://www.lug-peine.org<br />

Pfaffenhofen<br />

(Ilm)<br />

Hallertuxe.V.<br />

http://www.hallertux.de<br />

Pforzheim<br />

Linux-UsergroupPforzheim<br />

(LUGP)<br />

http://www.pf-lug.de<br />

Pirmasens<br />

Linux-StammtischPirmasens<br />

http://www.ic.pirmasens.de<br />

Potsdam<br />

PotsdamerLinux-Usergroup<br />

(UPLUG)<br />

http://www.uplug.de<br />

Preetz<br />

(Schleswig-<br />

Holstein)<br />

<strong>LinuxUser</strong>groupPreetz<br />

(PreetzLUG)<br />

http://preetzlug.de<br />

Prerow<br />

Linux-UsergroupPrerow<br />

c.dittmann@magrathea.de<br />

Quedlinburg<br />

Linux-UsergroupQuedlinburg<br />

(LUGQLB)<br />

http://www.lug-qlb.de<br />

Quickborn<br />

QuickbornerLinux-Usergroup<br />

(QLUG)<br />

http://www.qlug.net<br />

Rathenow<br />

Linux-StammtischRathenow<br />

http://linux.php4u.org<br />

Ravensberg<br />

Linux-UsergroupRavensberg<br />

(LUGRAV)<br />

http://www.lugrav.de<br />

Ravensburg<br />

Informatik-undNetzwerkverein<br />

Ravensburge.V(LUGRA)<br />

http://www.infnet.verein.<br />

de/linux/<br />

Ravensburg<br />

Linux-UsergroupRavensburg<br />

(LUG)<br />

http://www.yalug.de<br />

Regensburg<br />

Linux-UsergroupRegensburg<br />

http://www.lugr.de<br />

Regensburg<br />

RegensburgerLinux-Usergroup<br />

(R-LUG)<br />

http://www.regensburg.franken.<br />

de/rlug/<br />

Reutlingen<br />

Linux-UsergroupReutlingen<br />

http://www.lug-reutlingen.de<br />

Rheda-<br />

Wiedenbrück<br />

Linux-UsergroupRheda-<br />

Wiedenbrück(LUG-RHWD)<br />

http://www.lug-rhwd.de<br />

Rhein-Neckar<br />

UnixUsergroupRhein-Neckar<br />

e.V.(UUGRN)<br />

http://www.uugrn.org<br />

Rosenheim<br />

Linux-UsergroupRosenheim<br />

http://www.lug-rosenheim.org<br />

Rostock<br />

RostockerLinux-Usergroup<br />

http://linux.baltic.net<br />

Rotenburg<br />

ComputervereinRotenburg<br />

(CVR)<br />

http://www.cvr.de/linux<br />

Rotenburga.d.<br />

Fulda<br />

init4-DieLinux-Enthusiasten<br />

(init4)<br />

http://www.init4.de<br />

LINUX.USERGROUPS (FORTSETZUNG VON S.88)


LINUX.USERGROUPS (FORTSETZUNG VON S. 89)<br />

Tübingen<br />

Rothenburgo.d.<br />

Tauber<br />

Römerberg/<br />

Speyer<br />

Saalfeld<br />

Saarland<br />

Salem<br />

Salzburg(A)<br />

Sauerland<br />

Schaumburg<br />

Schwabach<br />

Schweinfurt<br />

Schweiz(CH)<br />

Schwerin<br />

Schwäbisch<br />

Gmünd<br />

Seeheim-<br />

Jugenheim<br />

Senftenberg<br />

Siegen<br />

Sindelfingen/<br />

Böblingen<br />

Sinsheim<br />

Speyer<br />

St.Pölten(A)<br />

Stormarn<br />

Stuttgart<br />

Taubertal<br />

Thüringen<br />

Tirol(A)<br />

Traunstein<br />

Trier<br />

Troisdorf/<br />

Siegburg/Spich<br />

Tuttlingen<br />

Linux-UsergroupRothenburg<br />

(LUGROT)<br />

http://lugrot.de<br />

LUGRömerberg/Speyer<br />

http://linuxwiki.de/<br />

LugRoemerbergSpeyer<br />

LUGSlf/Ru<br />

http://lug-slf.de<br />

<strong>LinuxUser</strong>GroupSaare.V.<br />

(LUGSaar)<br />

http://www.lug-saar.de<br />

Linux-UsergroupSalem<br />

http://www.lug-salem.de<br />

Linux-UsergroupSalzburg<br />

http://www.salzburg.luga.or.at<br />

Linux-UsergroupSauerland<br />

http://www.lug-sauerland.de<br />

Linux-UsergroupSchaumburg<br />

http://www.lug-schaumburg.de<br />

<strong>LinuxUser</strong>Schwabache.V.<br />

(LUSC)<br />

http://www.lusc.de<br />

Linux-UsergroupSchweinfurt<br />

http://www.lug-sw.de<br />

Linux-UsergroupSwitzerland<br />

http://www.lugs.ch<br />

West-MecklenburgerLinux-<br />

Usergroup(WEMELUG)<br />

http://www.wemelug.de<br />

Linux-StammtischSchwäbisch<br />

Gmünd(LSSG)<br />

http://www.uliweb.de/lssg<br />

Linux-UsergroupSenftenberg<br />

(LUGSE)<br />

http://www.lugse.de<br />

UNIX-AGSiegen(Uni-GHSie)<br />

http://www.si.unix-ag.org<br />

Linux-UsergroupDarmstadt<br />

http://www.mathematik.tudarmstadt.de/dalug/<br />

Böblingen-ClubLinux-User-<br />

Gruppe(SinLUG)<br />

http://www.mefia.org<br />

Linux-UsergroupSinsheim<br />

(SiLUG)<br />

http://www.linuxwiki.de/<br />

LugSinsheim<br />

Linux-UsergroupKetsch<br />

http://www.lug-ketsch.de<br />

Linux-UsergroupSt.Pölten<br />

(LUGSP)<br />

http://www.lugsp.at<br />

Linux-UsergroupStormarn<br />

http://www.lug-stormarn.de<br />

Linux-UsergroupStuttgart<br />

(LUGS)<br />

http://www.lug-s.org/<br />

TaubertälerLinux-Usergroup<br />

(TaLUG)<br />

http://www.talug.de/<br />

ThüringerLinux-Usergroup<br />

(TLUG)<br />

http://www.tlug.de/<br />

Tiroler<strong>LinuxUser</strong>group(LUGT)<br />

http://www.lugt.at<br />

Linux-UsergroupTraunstein<br />

(LUGTS)<br />

http://www.lug-ts.de<br />

<strong>LinuxUser</strong>GroupTrier(LUG<br />

Trier)<br />

http://www.lug-trier.de<br />

TroisdorferLinux-Usergroup<br />

(TroLUG)<br />

http://www.trolug.de<br />

Linux-UsergroupTuttlingen<br />

http://lug.intuttlingen.de/<br />

Ulm<br />

Untermain<br />

Viersen<br />

Villingen-<br />

Schwenningen<br />

Voralpen(A)<br />

Vorarlberg(A)<br />

Waiblingen<br />

Waldkraiburg<br />

Walsrode<br />

Wedel<br />

Weinheim<br />

Weißenbrunn<br />

Wernigerode<br />

Westerwald<br />

Wien(A)<br />

Wien(A)<br />

Wien(A)<br />

Wiesbaden<br />

Wilhelmshaven<br />

Witten<br />

Wolfsburg<br />

Wolfsburg<br />

Worms<br />

Wuppertal<br />

Würmtal<br />

Würzburg<br />

Würzburg<br />

Zweibrücken<br />

Zwickau<br />

Linux-UsergroupTübingen<br />

(LUGT)<br />

http://tuebingen.linux.de<br />

Linux-UsergroupUlm(LUGU)<br />

http://lugulm.de<br />

Linux-UsergroupUntermain<br />

(LUGU)<br />

http://www.lug-untermain.de<br />

Linux-UsergroupViersen(LUGV)<br />

http://www.lug-viersen.de<br />

<strong>LinuxUser</strong>GroupVillingen-<br />

Schwenningene.V.(LUG-VSe.V.)<br />

http://www.lug-vs.org<br />

Linux-UsergroupVoralpen<br />

(VALUG)<br />

http://www.valug.at<br />

Linux-UsergroupVorarlberg<br />

(LUGV)<br />

http://www.lugv.at<br />

ComputerclubWaiblingene.V.<br />

http://www.ccwn.org<br />

Linux-UsergroupWaldkraiburg<br />

http://www.lug-waldkraiburg.<br />

org<br />

Linux-UsergroupWalsrode<br />

http://www.lug-walsrode.de/<br />

Linux-UsergroupWedel(LUG<br />

Wedel)<br />

http://www.lug-wedel.de<br />

Computer-ClubWeinheime.V.<br />

(CCW)<br />

http://ccw.iscool.net<br />

Linux-UsergroupKronach<br />

(LUGKR)<br />

http://www.kronachonline.de<br />

Linux-UsergroupWernigerode<br />

(LUGWR)<br />

http://www.lug-wr.de<br />

Linux-UsergroupWesterwald<br />

http://www.lug-westerwald.de<br />

<strong>LinuxUser</strong>groupWien<br />

http://www.viennalinux.at<br />

Linux-UsergroupAustria(LUGA)<br />

http://www.luga.or.at<br />

Linux-UsergroupTUWien(LLL)<br />

lll@radawana.cg.tuwien.ac.at<br />

Linux-UsergroupWiesbaden<br />

PenguinUsergroup<br />

http://www.pug.org<br />

Linux-UsergroupWilhelmshaven<br />

(LUG-WHV)<br />

http://www.lug-whv.de<br />

WittenerLinux-Usergroup<br />

(WitLUG)<br />

http://www.witlug.de<br />

WolfsburgerLinux-Usergroup<br />

(WOBLUG)<br />

http://www.lug.wolfsburg.de<br />

WolfsburgerUnix-Usergroup<br />

(WUUG)<br />

http://www.unix.necoac.de<br />

Wormser<strong>LinuxUser</strong>Group<br />

(WoLUG)<br />

http://www.wolug.de<br />

WuppertalerLinux-Usergroup<br />

(WupLUG)<br />

http://www.wuplug.org<br />

WürmtalerLinux-Usergroup<br />

(WLUG)<br />

http://www.wlug.de<br />

Linux-UsergroupWürzburg<br />

(LUGWUE)<br />

http://www.lugwue.de<br />

Linux-UsergroupWürzburg<br />

(WÜLUG)<br />

http://www.wuelug.de<br />

Linux-UsergroupZweibrücken<br />

http://www.lug-zw.de<br />

Linux-UsergroupZwickau<br />

(ZLUG)<br />

http://www.zlug.org<br />

<br />

www.linux-user.de<br />

Seminare<br />

SERVICE<br />

LPIC-1<br />

All-in-One Solution<br />

✓<br />

✓<br />

✓<br />

LPIC-1 Komplettpaket* € 1.490,-<br />

www.academy.linuxmagazin.de/solution<br />

Linux-Magazin<br />

ACADEMY<br />

Stellen Sie Ihr Linux-Wissen mit<br />

einer Zertifizierung unter Beweis!<br />

Nutzen Sie die volle Flexibilität bei<br />

der Zeiteinteilung Ihrer Schulung!<br />

Holen Sie sich alles, was Sie<br />

benötigen, in einem Paket!<br />

*Zertifizierung als „Junior Level Linux Professional“<br />

100% flexibel!<br />

11 | 12 91


Linux-Magazin<br />

ACADEMY<br />

LPIC-1<br />

All-in-One Solution<br />

✓<br />

✓<br />

✓<br />

Stellen Sie Ihr Linux-Wissen mit<br />

einer Zertifizierung unter Beweis!<br />

Nutzen Sie die volle Flexibilität bei<br />

der Zeiteinteilung Ihrer Schulung!<br />

Holen Sie sich alles, was Sie<br />

benötigen, in einem Paket!<br />

LPIC-1 Komplettpaket* nur € 1.490<br />

*Zertifizierung als „Junior Level Linux Professional“<br />

100% flexibel!<br />

Weitere Infos: academy.linux-magazin.de/solution


Seminare<br />

SERVICE<br />

DiD you<br />

know?<br />

Linux-Magazin<br />

ACADEMY<br />

Online-Training<br />

Prüfungsvorbereitung<br />

für LPIC 1 & 2<br />

Besorgen Sie sich Brief und<br />

Siegel für Ihr Linux-<br />

Knowhow mit der<br />

LPI-Zertifizierung.<br />

- Training für die Prüfungen<br />

LPI 101 und 102<br />

- Training für die Prüfungen<br />

LPI 201 und 202<br />

SPAREN SIE MIT<br />

PAKETPREISEN!<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/lpic<br />

OpenSource Training Ralf Spenneberg<br />

Schulungen direkt vom Autor<br />

SELinux Administration<br />

2 Tage 06.11. - 07.11.2012<br />

Entwicklung von SELinux Richtlinien<br />

2 Tage 08.11. - 09.11.2012<br />

High Availability und Loadbalancing<br />

2 Tage 08.11. - 09.11.2012<br />

IPv6 mit Linux<br />

3 Tage 13.11. - 15.11.2012<br />

Monitoring mit Nagios, Munin & Co<br />

5 Tage 26.11. - 30.11.2012<br />

Wege aus der Lizenzfalle mit Samba 3/4<br />

3 Tage 29.01. - 31.01.2013<br />

Virtualisierung mit KVM<br />

3 Tage 29.01. - 31.01.2013<br />

Monitoring mit Nagios, Munin & Co<br />

5 Tage 28.01. - 01.02.2013<br />

Snort IDS/IPS Technology<br />

4 Tage 05.02. - 08.02.2013<br />

Freie Distributionswahl:<br />

Opensuse, Fedora, Debian Squeeze,<br />

CentOS oder Ubuntu LTS<br />

Ergonomische Arbeitsplätze<br />

Umfangreiche Schulungsunterlagen mit<br />

Übungen<br />

Am Bahnhof 3-5<br />

48565 Steinfurt<br />

Tel.: 02552 638755<br />

Fax: 02552 638757<br />

Weitere Informationen unter www.os-t.de<br />

Treue-Rabatt für<br />

Abonnenten<br />

Linux-Magazin<br />

ACADEMY<br />

LM-Academy_1-9h_Anzeige_LPIC-Mike_v2.indd 1<br />

22.02.2012 17:12:54 Uhr<br />

Online-Training<br />

Erfolgreicher Einstieg in<br />

WordPress 3<br />

mit Hans-Georg Esser, Chefredakteur EasyLinux<br />

Ansprechende Webseiten, Blogs und<br />

Shops einfach selber erstellen<br />

❚ Installation in 5 Minuten<br />

❚ Designs ändern<br />

❚ Optimieren für Suchmaschinen<br />

❚ Funktionen erweitern<br />

❚ Benutzerrechte festlegen<br />

❚ Geld verdienen mit Werbung<br />

❚ Besucher analysieren<br />

❚ Sicherheit und Spam-Schutz<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

©mipan, fotolia<br />

Linux-Magazin<br />

ACADEMY<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

Online-Training<br />

IT-Sicherheit<br />

Grundlagen<br />

mit Tobias Eggendorfer<br />

Themen:<br />

- physikalische Sicherheit<br />

- logische Sicherheit<br />

• Betriebssystem<br />

• Netzwerk<br />

- Sicherheitskonzepte<br />

- Sicherheitsprüfung<br />

Inklusive Benutzer- und<br />

Rechteverwaltung, Authentifizierung,<br />

ACLs sowie wichtige<br />

Netzwerkprotokolle und mehr!<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/wordpress<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/sicherheit<br />

WusstEn siE’s?<br />

Linux-Magazin und <strong>LinuxUser</strong><br />

haben ein englisches<br />

Schwester magazin!<br />

Am besten, Sie informieren gleich<br />

Ihre Linux-Freunde in aller Welt...<br />

www.linux-magazine.com<br />

Harte Nuss?<br />

Geknackt!<br />

1-9h_Anzeige_wordpress_v02.indd 1<br />

Linux-Magazin<br />

18.04.2011 LM-Academy_1-9h_Security-Mike.indd 11:18:15 Uhr ACADEMY 1<br />

n Hilfe für Einsteiger<br />

n Topaktuelle News<br />

n Riesiges Artikelarchiv<br />

www.linux-community.de<br />

Deine tägliche Portion Linux<br />

Online-Training<br />

mit Hans-Georg Esser, Chefredakteur EasyLinux<br />

OpenOffice -<br />

Arbeiten mit Vorlagen<br />

Erleichtern Sie sich Ihre<br />

tägliche Arbeit mit (Auszug):<br />

❚ einheitlichen Dokumentenvorlagen<br />

❚ automatischen Formatierungen<br />

❚ generierten Inhaltsverzeichnissen<br />

20%<br />

Treue-Rabatt für<br />

Abonnenten<br />

12.04.2011 14:00:35 Uhr<br />

Mit vielen<br />

Praxisbeispielen<br />

Informationen und Anmeldung unter:<br />

academy.linux-magazin.de/openoffice<br />

LMI_3-9h_german_0406-2012.indd 1<br />

04.06.2012 11:17:57 Uhr www.linux-user.de<br />

11 | 12 93<br />

LM_Academy_1-9h_Anzeige_openoffice-Mike.indd 1<br />

12.04.2011 15:08:54 Uhr


SERVICE<br />

Veranstaltungen / Autoren / Inserenten<br />

VERANSTALTUNGEN<br />

17.-19.10.2012<br />

LibreOffice Conference 2012<br />

Konferenzzentrum des Bundesministeriums<br />

für Wirtschaft und Technologie<br />

Invalidenstraße 48<br />

10115 Berlin<br />

http://conference.libreoffice.org<br />

18.-19.10.2012<br />

Libre Software World Conference 2012<br />

Santiago de Compostela, Spanien<br />

http://www.libresoftwareworldconference.com<br />

19.-21.10.2012<br />

Ubucon 2012<br />

Hochschule für Wirtschaft, Technik und Kultur<br />

Friedrichstraße 189<br />

10117 Berlin<br />

http://ubucon.de<br />

19.-21.10.2012<br />

UnFUCK 2012<br />

Hochschule Furtwangen<br />

Robert-Gerwig-Platz 1<br />

78120 Furtwangen<br />

http://www.unfuck.eu<br />

20.-23.10.2012<br />

OpenSuse Conference 2012<br />

Prag, Tschechien<br />

http://en.opensuse.org/Portal:Conference<br />

23.-25.10.2012<br />

Strata Conference 2012<br />

New York City, NY, USA<br />

http://strataconf.com/stratany2012/public/content/home<br />

29.10.-03.11.2012<br />

PyCon DE 2012<br />

Leipziger KUBUS<br />

Permoserstraße 15<br />

04318 Leipzig<br />

https://2012.de.pycon.org<br />

02.-04.11.2012<br />

Encuentro Centroamericano de Software Libre 2012<br />

Guatemala<br />

http://softwarelibre.ucr.ac.cr/node/506<br />

03.11.2012<br />

9. Brandenburger Linux-Infotag 2012<br />

Universität Potsdam<br />

Campus Griebnitzsee, Haus 6<br />

Prof.-Dr.-Helmert-Straße<br />

14482 Potsdam<br />

http://blit.org<br />

07.-09.11.2012<br />

Linuxcon Europe<br />

Barcelona, Spanien<br />

https://events.linuxfoundation.org/events/linuxcon-europe<br />

12.-15.11.2012<br />

SC12<br />

Salt Lake City, UT, USA<br />

http://sc12.supercomputing.org/<br />

04.-07.12.2012<br />

AnDevCon IV<br />

Burlingame, CA, USA<br />

http://www.andevcon.com/AndevCon_IV/index.html<br />

09.-14.12.2012<br />

LISA 12<br />

Sheraton San Diego Hotel & Marina<br />

San Diego, CA, USA<br />

http://www.usenix.org/events/lisa12/<br />

22.-24.02.2013<br />

SCaLE 11x<br />

Los Angeles, CA, USA<br />

http://www.socallinuxexpo.org/scale11x/<br />

26.02.-01.03.2013<br />

GUUG FFG 2013<br />

Fachhochschule Frankfurt am Main<br />

Fachbereich 2, Studiengang Informatik<br />

Gebäude 1<br />

Nibelungenplatz<br />

60318 Frankfurt am Main<br />

http://www.guug.de/veranstaltungen/ffg2013/<br />

05.-09.03.2013<br />

CeBIT 2013<br />

Messegelände<br />

30521 Hannover<br />

http://www.cebit.org<br />

22.-25.05.2013<br />

LinuxTag 2013<br />

Messegelände Berlin, Halle 7<br />

Messedamm 22<br />

14055 Berlin<br />

http://www.linuxtag.org<br />

AUTOREN<br />

Erik Bärwaldt<br />

RPM-basierte Systeme entschlacken<br />

INSERENTEN<br />

Android User GY www.android-user.de 57, 71<br />

mit Rpmorphan und Rpmrestore (64)<br />

Falko Benthin Versionsverwaltungssystem Git (32)<br />

Andreas Bohle <strong>Vorschau</strong>: <strong>LinuxUser</strong> 12/2012 (96)<br />

Wolfgang Dautermann Splint und Co.: Tools für die Quellcode-Analyse (38)<br />

Marko Dragicevic Drei Basic-IDEs im Vergleich (20)<br />

Thomas Drilling Distributionstest OpenSuse 12.2 (6),<br />

Delphi-kompatible Free-Pascal-IDE Lazarus (14)<br />

Karsten Günther Texteditor Enki für Programmierer (42),<br />

OpenStreetMap-Editor Potlatch2 (81)<br />

Frank Hofmann Tipps und Tricks zum Transfer großer Dateien (78)<br />

Werner Hein Bastelprojekte mit dem Raspberry Pi (72)<br />

Peter Kreußel Grundlagen der Javascript-Programmierung (25)<br />

Thomas Leichtenstern Neues auf den Heft-DVDs (97)<br />

Jörg Luther Editorial (3), Neues rund um Linux (12)<br />

Tim Schürmann Wirtschaftssimulation Unknown Horizons (59),<br />

Notfallmaßnahmen ergreifen mit SysReq (68)<br />

Dr. Martin Schwarz Praxis-Software Gecamed im Überblick (54)<br />

Vincze-Aron Szabo Systemmonitor Conky optimal konfigurieren (50),<br />

Fitnesstraining fürs Gehirn mit Gbrainy (48)<br />

Uwe Vollbracht Aktuelle Software im Kurztest (10)<br />

Brandenburger Linux-Infotag blit.org/2010/ 37<br />

EasyLinux www.easylinux.de 67<br />

Fernschule Weber GmbH www.fernschule-weber.de 11<br />

Hetzner Online AG www.hetzner.de 100<br />

IT-Profimarkt www.it-profimarkt.de 87<br />

Linux Magazine www.linux-magazine.com 93<br />

Linux-Community www.linux-community.de 93<br />

Linux-Hotel www.linuxhotel.de 13<br />

Linux-Magazin www.linux-magazin.de 45, 89<br />

Linux-Magazin Academy www.academy.linux-magazin.de 91, 92, 93<br />

<strong>LinuxUser</strong> www.linuxuser.de 19, 77, 95<br />

PlusServer AG www.plusserver.de 30, 46, 62, 84<br />

Spenneberg www.spenneberg.com 93<br />

Strato AG www.strato.de 2, 9<br />

Ubuntu User www.ubuntu-user.de 69<br />

Verion GmbH www.verion.de 99<br />

94 11 | 12<br />

www.linux-user.de


Impressum<br />

SERVICE<br />

Anschrift<br />

Homepage<br />

Artikel und Foren<br />

Abo/Nachbestellung<br />

E-Mail (Leserbriefe)<br />

Abo-Service<br />

Pressemitteilungen<br />

<strong>LinuxUser</strong> ist eine Monatspublikation der Linux New Media,<br />

eines Geschäftsbereichs der Medialinx AG.<br />

Putzbrunner Str. 71, 81739 München<br />

Telefon: (089) 99 34 11-0, Fax: (089) 99 34 11-99<br />

http://www.linux-user.de<br />

http://www.linux-community.de<br />

http://www.linux-user.de/bestellen/<br />

<br />

<br />

<br />

Chefredakteur Jörg Luther (v. i. S. d. P.) (jlu)<br />

Stellv. Chefredakteur Andreas Bohle (agr)<br />

Redaktion<br />

Linux-Community<br />

Datenträger<br />

Ständige Mitarbeiter<br />

Grafik<br />

Sprachlektorat<br />

Produktion<br />

Druck<br />

Geschäftsleitung<br />

Mediaberatung<br />

D / A / CH<br />

USA und andere<br />

Thomas Leichtenstern (tle)<br />

Andreas Bohle (agr)<br />

Thomas Leichtenstern (tle)<br />

Mirko Albrecht, Erik Bärwaldt, Falko Benthin, Thomas Drilling,<br />

Florian Effenberger, Karsten Günther, Frank Hofmann, Christoph<br />

Langer, Tim Schürmann, Vince-Áron Szabó, Uwe Vollbracht<br />

Elgin Grabe (Titel und Layout)<br />

Bildnachweis: Stock.xchng, 123rf.com, Fotolia.de und andere<br />

Astrid Hillmer-Bruer, Elke Knitter<br />

Christian Ullrich <br />

Vogel Druck und Medienservice GmbH & Co. KG, 97204 Höchberg<br />

Brian Osborn (Vorstand, verantwortlich für den Anzeigenteil)<br />

<br />

Hermann Plank (Vorstand)<br />

<br />

Petra Jaser <br />

Tel.: +49 (0)89 / 99 34 11 24<br />

Fax: +49 (0)89 / 99 34 11 99<br />

National Sales Director<br />

Ann Jesse <br />

Tel.: +1 785 841 88 34<br />

National Account Manager<br />

Eric Henry <br />

Tel.: +1 785 917 09 90<br />

Es gilt die Anzeigenpreisliste vom 01.01.2012.<br />

Pressevertrieb<br />

Abonnentenservice<br />

D / A / CH<br />

MZV Moderner Zeitschriften Vertrieb GmbH & Co. KG<br />

Ohmstraße 1, 85716 Unterschleißheim<br />

Tel.: (089) 3 19 06-0, Fax: (089) 3 19 06-113<br />

Veronika Kramer <br />

Postfach 1165, 74001 Heilbronn<br />

Telefon: +49 (0)7131 27 07-274<br />

Telefax: +49 (0)7131 27 07 -78-601<br />

IMPRESSUM<br />

Abo-Preise <strong>LinuxUser</strong> Deutschland Österreich Schweiz Ausland EU<br />

No-Media-Ausgabe 1 € 5,50 € 6,30 Sfr 11,00 (siehe Titel)<br />

DVD-Ausgabe € 8,50 € 9,35 Sfr 17,00 (siehe Titel)<br />

Jahres-DVD (Einzelpreis) € 14,95 € 14,95 Sfr 18,90 € 14,95<br />

Jahres-DVD (zum Abo 2 ) € 6,70 € 6,70 Sfr 8,50 € 6,70<br />

Mini-Abo (3 Ausgaben) € 3,00 € 3,00 Sfr 4,50 € 3,00<br />

Jahresabo No Media € 56,10 € 64,60 Sfr 92,40 € 71,60<br />

Jahresabo DVD € 86,70 € 95,00 Sfr 142,80 € 99,00<br />

Preise Digital Deutschland Österreich Schweiz Ausland EU<br />

Heft-PDF Einzelausgabe € 5,50 € 5,50 Sfr 7,15 € 5,50<br />

DigiSub (12 Ausgaben) € 56,10 € 56,10 Sfr 72,90 € 56,10<br />

DigiSub (zum Abo 2 ) € 12,00 € 12,00 Sfr 12,00 € 12,00<br />

HTML-Archiv (zum Abo 2 ) € 12,00 € 12,00 Sfr 12,00 € 12,00<br />

Preise Kombi-Abos Deutschland Österreich Schweiz Ausland EU<br />

Mega-Kombi-Abo 3 € 143,40 € 163,90 Sfr 199,90 € 173,90<br />

(1) nur erhältlich unter http://www.medialinx-shop.de, Bestellung versandkostenfrei<br />

(2) nur erhältlich in Verbindung mit einem Jahresabo Print oder Digital<br />

(3) <strong>LinuxUser</strong>-Abo (DVD-Ausgabe) plus Linux-Magazin-Abo inkl. DELUG-Mitgliedschaft<br />

(monatl. DELUG-DVD) sowie beiden Jahres-DVDs<br />

Schüler- und Studentenermäßigung: 20 Prozent gegen Vorlage eines Schülerausweises<br />

oder einer aktuellen Immatrikulationsbescheinigung. Der Nachweis ist bei Verlängerung neu<br />

zu erbringen. Infos zu anderen Abo-Formen etc. unter http://www.medialinx-shop.de.<br />

Bitte teilen Sie Adressänderungen umgehend dem Abo-Service mit, da Nachsendeaufträge<br />

bei der Post nicht für Zeitschriften gelten.<br />

Linux ist ein eingetragenes Warenzeichen von Linus Torvalds und wird von uns mit seiner<br />

freundlichen Genehmigung verwendet. »Unix« wird als Sammelbegriff für die Gruppe der<br />

Unix-ähnlichen Betriebssysteme (wie beispielsweise HP/UX, FreeBSD, Solaris) verwendet,<br />

nicht als Bezeichnung für das Trademark (»UNIX«) der Open Group. Der Linux-Pinguin<br />

wurde von Larry Ewing mit dem Grafikprogramm »The GIMP« erstellt.<br />

Eine Haftung für die Richtigkeit von Veröffentlichungen kann – trotz sorgfältiger Prüfung<br />

durch die Redaktion – vom Verlag nicht übernommen werden. Mit der Einsendung von<br />

Manuskripten oder Leserbriefen gibt der Verfasser seine Einwilligung zur Veröffent lich ung<br />

in einer Publikation der Medialinx AG. Für unverlangt eingesandte Manuskripte oder Beiträge<br />

übernehmen Redaktion und Verlag keinerlei Haftung.<br />

Autoreninfos: http://www.linux-user.de/Autorenhinweise. Die Redaktion behält sich vor,<br />

Einsendungen zu kürzen und zu überarbeiten. Das exklusive Urheber- und Verwertungsrecht<br />

für angenommene Manus kripte liegt beim Verlag. Es darf kein Teil des Inhalts ohne schriftliche<br />

Genehmigung des Verlags in irgendeiner Form vervielfältigt oder verbreitet werden.<br />

Copyright © 1999 - 2012 Medialinx AG ISSN: 1615-4444<br />

PROBELESEN OHNE RISIKO<br />

SONDERAKTION!<br />

Testen Sie jetzt<br />

3 Ausgaben für<br />

NUR 3€*<br />

www.linux-user.de 10 | 11<br />

Telefon: 07131 /2707 274<br />

Fax: 07131 / 2707 78 601<br />

E-Mail: abo@linux-user.de<br />

Mit großem Gewinnspiel unter:<br />

www.linux-user.de/probeabo<br />

* Angebot gilt innerhalb Deutschlands<br />

und Österreichs. In der Schweiz: SFr 4,50.<br />

Weitere Preise: www.linux-user.de/produkte<br />

95


VORSCHAU<br />

Das nächste Heft: 12/2012<br />

Ausgabe 12/2012 erscheint am 15. November 2012<br />

© Duchessa, sxc.hu<br />

Linux und Windows 8<br />

Linux-Anwender leben nicht auf einer Insel der<br />

Glückseligkeit: Oft arbeiten die Rechner in einem<br />

Netzwerk mit Windows-Clients, in manchen Fällen<br />

liegt das Betriebssystem aus Redmond sogar<br />

auf der gleichen Festplatte. Grund genug also, sich<br />

mit verschiedenen Aspekten des Nebeneinanders<br />

zu beschäftigen, wie dem Austausch von Daten,<br />

Problemen bei der Installation oder dem einvernehmlichen<br />

Miteinander im Netz. In der kommenden<br />

Ausgabe beleuchten wir die wesentlichen Aspekte<br />

und zeigen Lösungsmöglichkeiten auf, die<br />

sich schnell und praxisnah umsetzen lassen.<br />

Handbrake<br />

Videos zu konvertieren, gehört zu<br />

den rechenintensivsten und damit<br />

zeitraubendsten Aufgaben<br />

am heimischen Rechner. Umso<br />

ärgerlicher ist es, wenn dann falsche<br />

Einstellungen für schlechte<br />

Ergebnisse sorgen. Der Konverter<br />

Handbrake sorgt mit einer Reihe<br />

vordefinierter Templates für qualitativ<br />

verlässlichen Output, bietet<br />

aber trotzdem die Möglichkeit<br />

zum letzten Schliff von Hand.<br />

Preiswert navigieren<br />

Ein Navi von Aldi und die freie<br />

Software QLandkarte GT helfen<br />

beim Navigieren in der freien<br />

Wildbahn. So planen Sie komfortabel<br />

am heimischen PC eine<br />

Route, übertragen die Daten auf<br />

die Hardware und laufen anschließend<br />

entspannt auf dem ausgetüftelten<br />

Weg die Highlights ab.<br />

Prescribe II<br />

Kyocera stattet seine Drucker mit der Kommandosprache<br />

Prescribe aus, die es laubt, von der Shell aus komplexe<br />

er-<br />

Druckaufträge und Stapelverarbeitungsläufe<br />

zu steuern und viele<br />

Handgriffe zu automatisieren. Ein<br />

Workshop in der kommenden Ausgabe<br />

demonstriert die Fähigkeiten<br />

der Sprache im Praxistest.<br />

© Kyocera<br />

Ausgabe 04/2012 ist am 11. Oktober 2012 erschienen<br />

© Desislava Dimitrova, 123RF<br />

Sicher kommunizieren<br />

Wenn Sie Informationen und Dokumente<br />

per Mail austauschen<br />

oder sich zum Chat treffen, könnten<br />

andere mitlesen. Wir erklären<br />

die Hintergründe und stellen Programmerweiterungen<br />

und Tools<br />

vor, mit denen Sie die Kommunikation<br />

verschlüsseln und damit<br />

abhörsicher machen.<br />

Die Kraft der Konsole<br />

Die täglichen Arbeiten und auch<br />

die meisten Konfigurationsaufgaben<br />

können Sie komfortabel mit<br />

Tools erledigen, die Sie mit der<br />

Maus bedienen. Doch die maximale<br />

Leistung holen Sie aus dem<br />

Linux-System erst dann heraus,<br />

wenn Sie es auf der Konsole mit<br />

Shell-Befehlen bedienen.<br />

Multiboot mit Windows<br />

Einsteiger wünschen sich meist<br />

eine Parallelinstallation von<br />

Linux und Windows, und mit den<br />

vielen Linux-Distributionen sollte<br />

es zudem möglich sein, beim Booten<br />

zwischen Windows, Ubuntu,<br />

OpenSuse und anderen Systemen<br />

zu wählen. Wir zeigen, wie Sie alle<br />

unter einen Hut bringen.<br />

MAGAZIN<br />

© Somchai Suppalertporn, 123RF<br />

Ausgabe 12/2012 erscheint am 02. November 2012<br />

APIs für Webdienste Server für Paranoiker Was taugt OSSIM?<br />

Die nächste Ausgabe legt eine solide<br />

Basis zu Techniken wie Soap,<br />

REST und Co. Weitere Artikel zeigen,<br />

wie Sie mit den Schnittstellen<br />

Social Communities vernetzen,<br />

aber auch Sinnvolles integrieren,<br />

wie Verkaufsplattformen,<br />

Kartendienste und Groupware.<br />

Mancher schläft mit dem Kopf<br />

auf dem Server – man weiß ja nie.<br />

Wem dieser Luxus nicht vergönnt<br />

ist, der baut das im Magazin beschriebene<br />

Setup nach: Das Gerät<br />

fährt beim kleinsten Manipulationsverdacht<br />

herunter und verschlüsselt<br />

sich nachhaltig.<br />

Das Open Source Security Information<br />

Management ist eine kollaborative<br />

Plattform, die Steuerelemente<br />

inte griert und Transparenz<br />

bietet. Der Austausch zu<br />

Attacken soll Anwendern helfen,<br />

bösartige oder gefährdete Hosts<br />

rasch zu isolieren.<br />

96<br />

11 | 12<br />

Die Redaktion behält sich vor, Themen aus aktuellem Anlass zu ändern oder zu streichen.


DVD-Inhalt<br />

SERVICE<br />

Neues auf den<br />

Heft-DVDs<br />

Die Mutter aller Live-Systeme: Knoppix 7.0.4<br />

Klaus Knopper bringt mit Knoppix 7.0.4 das Kunststück fertig, über 12 GByte Software in<br />

ein DVD-Image zu packen und dem Anwender nach dem Booten ohne jegliche Installation<br />

im Live-Betrieb bereitzustellen. In erster Linie handelt es sich bei der vorliegenden gabe um ein Bugfix-Release der eierlegenden Wollmilchsau unter den Live-Distros.<br />

Aus-<br />

Das Release basiert wie schon die Vorgängerversionen auf Debians Stable-Zweig, implementiert<br />

aber einige Programme aus der Testing- und Unstable-Abteilung. Zum<br />

Einsatz kommen Kernel 3.4.9 und X.org 7.7 (Core 1.12.3). Je nach Bedarf booten Sie<br />

Knoppix von Seite B des ersten Datenträgers mit einem 32-Bit oder 64-Bit-Kernel.<br />

Wie üblich liefert die Distribution verschiedene Window-Manager wie Gnome 3.2.2,<br />

KDE 4.8.4 und LXDE. Diese aktivieren Sie jeweils über Cheat-Codes am Bootprompt<br />

(knoppix desktop=“Windowmanager“). Die Live-Distribution enthält eine<br />

Routine für die Installation der Dateien auf einem PC.<br />

Langläufer: Kiwi Linux 12.08<br />

Zwar basiert Kiwi Linux 12.08 auf dem aktuellen Ubuntu 12.04.1<br />

mit Long Term Support. Es verwendet aber zur Freude aller Anwender,<br />

die Unity den Rücken kehren möchten, den klassischen Gnome-2-Desktop statt<br />

Cano nicals umstrittener Unity-Oberfläche. Mit an Bord sind außerdem der Webbrowser<br />

Chromium, der Mediaplayer VLC, der Messenger Pidgin, der Flashplayer, diverse<br />

Multimedia-Codecs sowie Archiv-Handler für die Formate RAR und P7ZIP. Da die Distribution<br />

auf Ubuntus LTS-Release basiert, sind Updates und Patches für das System<br />

für die nächsten fünf Jahre gesichert – ideal für ein Produktivsystem.<br />

Erleuchtet: Bodhi Linux 2.1.0<br />

Das auf Ubuntu 12.04 basierende Bodhi-Linux 2.1.0 nutzt<br />

das schicke, aber schlanke Enlightenment DR17 als Oberfläche<br />

und beschränkt sich bei der Software-Ausstattung auf<br />

das Notwendigste. Enlightenment geht mit dem Release DR17 in<br />

vielerlei Hinsicht andere Wege als die klassischen Desktop-Umgebungen und ist aus<br />

dem Grund auch nicht voll kompatibel. Dafür braucht die Oberfläche auch entschieden<br />

weniger Ressourcen. Als Minimalanforderungen nennen die<br />

Bodhi-Entwickler eine CPU mit 300 MHz Taktrate, 128<br />

MByte RAM und 1,5 GByte freien Platz auf der Platte.<br />

Zum Dessert: Sabayon Linux 10 KDE<br />

Zu den Neuerungen des Gentoo-Ablegers Sabayon<br />

Linux 10 KDE gehören Grub2, Kmod statt Module-<br />

Init-Tools sowie das per Xz komprimierte ISO-Image.<br />

Das Release verwendet Kernel 3.5.4 mit dem für Desktops<br />

optimierten BFQ-I/ O-Scheduler, für den Server-Betrieb gibt es<br />

gehärtete Kernel. Als grafische Oberfläche dient KDE 4.9.<br />

Besonderen Wert legten die Entwickler auf Anwenderfreundlichkeit, ohne dabei je-<br />

doch die Funktionalität zu vernachlässigen. So bietet Sabayon X beispielsweise die<br />

parallele Nutzung von Gentoos Portage und dem Sabayon-eigenen Equo an. Sabayon<br />

funktioniert nach dem Rolling-Release-Prinzip. Das bedeutet, dass das Projekt permanent<br />

Updates für das System liefert, was eine Neuinstallation überflüssig macht.<br />

11 | 12 97


SERVICE<br />

DVD-Inhalt<br />

OpenSuse 12.2<br />

Mit rund zwei Monaten<br />

Verspätung legen die<br />

Nürnberger Entwickler<br />

OpenSuse 12.2 vor. Als<br />

Anwender profitieren Sie<br />

von der Verzögerung, da<br />

die Entwickler dadurch<br />

acht Wochen mehr Zeit<br />

zum Beheben von Fehlern<br />

hatten. Der Schwerpunkt<br />

dieser Version liegt<br />

entsprechend auf der<br />

Modellpflege.<br />

Als Desktops dienen<br />

KDE 4.8.4 und Gnome<br />

3.4.2, den Unterbau stellen<br />

der Kernel 3.4 sowie<br />

X.org 1.12. LibreOffice<br />

3.5.4 dient als Bürosuite.<br />

Als Bootloader und<br />

Startbildschirm kommen<br />

jetzt Grub 2 und Plymouth<br />

zum Zuge, verbesserte<br />

Funktionen in der<br />

Glibc und Qt sorgen für<br />

mehr Performance.<br />

Auf der Eco-Disk finden<br />

Sie die 64-Bit-Version der<br />

Distribution, auf der<br />

DVD die Live-CD für<br />

32-Bit-Systeme mit KDE-<br />

Desktop. (tle) n<br />

Bei der DVD-Edition von <strong>LinuxUser</strong> ist hier der Datenträger eingeklebt (siehe Kasten auf Seite 5).<br />

Bitte wenden Sie sich per E-Mail an cdredaktion@linux-user.de, falls es Probleme mit der Disk gibt.<br />

Wer sich vergewissern will, ob der freie Platz auf einer bestimmten Festplattenpartition<br />

noch ausreicht, dem verschafft der universelle Systemmonitor<br />

Conky 1.9.0 einen schnellen Überblick. Das nützliche Werkzeug<br />

versammelt alle wichtigen Informationen über das System auf dem Desktop<br />

in einem kompakten Widget, das Sie bei Bedarf anpassen.<br />

Enki 12.08 dient als vielseitiger Texteditor für Power-User und Programmierer.<br />

Das Tool orientiert sich am Urgestein Emacs und versucht, dessen<br />

extreme Leistungsfähigkeit mit einer modernen Technologie nachzubilden.<br />

Es bietet unter anderem umfangreiche Such- und Ersetzungsfunktionen<br />

sowie Syntax-Highlighting für die verschiedensten Skript- und Programmiersprachen.<br />

Daneben bietet Enki einen WYSIWIG-Modus für Markdown<br />

und HTML, mit dem Sie direkt die Ergebnisse kontrollieren.<br />

Die IDE Lazarus 1.0 ermöglicht das schnelle Erstellen grafischer Bedienoberflächen.<br />

Im Gegensatz zu anderen IDEs für Pascal orientiert es sich<br />

stark an Borlands Delphi. Auch die Lazarus Component Library (LCL)<br />

weist unverkennbare Ähnlichkeiten zur Delphi-VCL auf. Die meisten Units,<br />

Klassen und Eigenschaften haben denselben Namen und dieselbe<br />

Funktionalität. Das gewährleistet einen schnellen Einstieg in die Software.<br />

Dass die Lazarus-IDE für alle gängigen Betriebssysteme vorliegt,<br />

erleichtert das plattfomübergreifende Arbeiten.<br />

AKTUELLE PROGRAMME AUF DER HEFT-DVD<br />

Die GUI-Anwendung PAC 4.3 dient zum Management von SSH- und Telnet-<br />

Verbindungen. Die Applikation bringt in der Version 4.3 einige Verbesserungen<br />

mit. So startet das Programm jetzt auch bei einer großen Menge<br />

von konfigurierten Verbindungen deutlich schneller.<br />

Der Basic-Interpreter Gambas3 3.3.1 lehnt sich konzeptionell stark an<br />

Visu al Basic an und erlaubt es auch weniger erfahrenen Entwicklern, in<br />

relativ kurzer Zeit eigene Programme zu erstellen. Die Linux-Version gilt<br />

als sehr ausgereift und läuft auf verschiedenen Prozessorarchitekturen,<br />

darunter x86 und x86_64, aber auch auf ARM-Prozessoren.<br />

Der Videokonverter Handbrake 0.9.8 wandelt nicht nur alle möglichen<br />

Quellformate in MP4- oder MKV-Containerformate um, sondern erlaubt<br />

außerdem in einem einzigen Arbeitsgang auch das Bearbeiten von Untertiteln,<br />

Audio-Spuren, Auflösungen und Seitenverhältnissen.<br />

Mit Gbrainy 2.1.4 lösen Sie unterschiedlichste Logik- und Rechenaufgaben<br />

und trainieren so das Gehirn. Die Software unterstützt dabei verschiedene<br />

Schwierigkeitsgrade und wertet die Ergebnisse in einer Statistik<br />

aus. Bei Bedarf drucken Sie die Rätsel aus und lösen sie offline.<br />

Mit Listaller 0.5.5 verfolgt der Maintainer Matthias Klumpp das Ziel, das<br />

Installieren eines Paketes auf verschiedenen Distributionen so einfach<br />

und so sicher wie möglich zu gestalten.<br />

98<br />

11 | 12


Hetzner Online unterstützt mit der<br />

Verwendung von 100% regenerativem<br />

Strom aktiv den Umweltschutz.<br />

Entscheiden Sie sich gemeinsam<br />

mit uns für eine saubere Zukunft.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!