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.